Advertisement

R语言逻辑回归Logistic回归分析预测股票涨跌

阅读量:

原文链接:http://tecdat.cn/?p=23449

本文探讨了关于逻辑回归的问题:它与线性回归之间的差异是什么?并介绍了如何使用R中的glm()函数来拟合和评估这些模型等信息

该分析工具基于机器学习领域的统计建模技术构建而成

本R教程将指导你完成逻辑回归的简单执行。

  • 首先深入探讨逻辑回归背后的理论:了解其与线性回归之间的区别以及模型的具体形态。在此过程中, 你将会系统地学习到多指标和序数形式的逻辑回归。

随后, 为了让你能够掌握运用 R 语言进行 逻辑 回归 分析 的 方法, 请 注意 以下 几点: 首先, 请 深入 分析 某个 数据 集; 其次, 请 使用 R 中 的 glm( ) 函数 构建 逻辑 回归 模型; 最后, 请 对模 型进 行评 估, 并采 取措 施防 止 过 拟 合问 题

提示:假如你希望提升你的线性回归技能到一个更高的水平,那么可以选择加入我们的R语言课程学习。

回归分析:简介

逻辑回归属于一种经典的统计建模方法。回归分析涉及一系列统计方法,通过这一方法体系,我们可以系统地评估各变量间的相互关联性。具体而言,在应用中我们通常会设定一个因变量,并结合一个或多个自变量来进行深入的关联分析与预测模型构建工作。进一步揭示当某一自变量发生变动而其余因素保持恒定时对因变量的影响程度这一现象时所采用的技术就是回归分析的基本应用场景与核心功能所在

如你所见,在众多回归技术中存在多种方法。具体来说,则是从自变数的数量、因变数的性质以及回归曲线的形式这三个维度来进行区分。

线性回归

在线性回归方面掌握最多的是其作为最基础且广泛应用的统计分析工具之一,在实际应用中具有重要的价值与广泛的适用范围。简单来说,在给定X的具体取值时通过建立变量之间的线性关系可以有效地预测或估计Y的(平均)数值,并将其以一条直线的形式进行描述这一过程通常被称作回归分析其中这条用于描述变量间关系的最佳拟合直线被称为回归直线

由此可见**,** 线性回归方程通常表示为**y = ax + b**** 。该模型基于假设:因变量 y 为定量数据** 。然而**,** 在多数应用场景中**,** 则考虑 因变量 为 定性类型 ** 。或者更准确地说**,** 这些情况往往涉及将 因变数 分类处理 ** 。例如**,** 性别属于 定性变数 , 其可能取值包括男性和女性两种情况 ** 。

估计一个观察值的定性结果可被看作是对该观察值进行分类的一种方法,因为这过程实际上涉及将该观察值归入某一类别或等级中。相比之下,通常用于分类的技术不仅会预估各类别出现的概率,还会以此作为基础来进行最终的分类决策。

线性回归无法估计发生概率。举个例子,在建模二元因变量时,线性回归模型不会直接限制预测值在0到1之间。这正是逻辑回归发挥作用的地方:它能提供一个反映事件发生概率的概率分数。

e103a1da98c10c46341b07da04f305c0.png

Logistic逻辑回归

该方法属于分类技术的一种应用实例,在实际操作中可用于预测定性结果的具体表现形式。具体而言,在分析个体性别时的概率模型构建上具有明确的应用价值

如果你进行性别分类,并将被分析的性别特征分为男性类别和女性类别,则你需要通过逻辑回归模型来估计该特定类别中的概率。

例如,给定长头发的性别的概率可以写成:。

c9b78e369df20f95e20b19613377390e.png

P(女性 | 长发)的取值范围在0至1之间,则对于任意给定长发状态的人而言都可以据此推断其性别。

考虑到X作为自变量、Y作为因变量,请问如何构建这一概率模型?线性回归模型用于描述这种概率关系

b9dbdf210b052f3a08af8b00092101de.png

该方法的一个主要缺点是,在使用线性回归模型对编码为0或1的二元因变量进行分析时(binary dependent variable coded as 0 or 1),我们必然会导致预测值小于等于零的情况出现(p(X) ≤ 0)并同时得出大于等于一的结果(p(X) ≥ 1)。

为了解决这个问题,你可以选择使用logistic函数来构建p(X)的模型;所有X的值对应的输出范围限定在0到1之间。

1e26a02061fed5ec15439c99d7192fcb.png

对数函数普遍呈现S型曲线的特点,在任何情况下都不会偏离这一规律;因此不管X取何值我们都能获得一个合理的结果

上述方程也可以重构为:

cf6da9a6f0b55c38f21ca55b1917ab42.png

数量

baa99e2af809c6a50fce2c7347c8f765.png

也被视为几率比,在其范围内的任何数值都可以取到。当几率值接近0时,表示p(X)的概率非常低;当几率值接近无穷大时,则表示p(X)的概率非常高。

通过从上式中对两边取对数,你可以得到。

f04456b23b3d194337d321a128b7b9bf.png

左侧即被定义为Logit。在逻辑回归模型中,在其他变量不变的前提下(默认情况下),增加一个单位的变量X会使得log(P/(1-P))增加β₀个单位。然而,在不考虑X的具体值的情况下(默认条件下),当β₁为正值时(default value),这会促进概率P(X)的变化趋势;而当β₁为负值时(default value),这则会抑制概率P(X)的变化趋势。

参数β₀和β₁是未知的,并且需要基于现有训练数据进行估算。在逻辑回归中,我们可以采用最大似然估计这一强大的统计方法来确定最佳拟合参数。让我们深入探讨一下你所提到的性别分类问题。

你需要估计参数β₀和β₁,并将这些估计量代入p(X)模型中。针对所有女性样本,该模型会预测出一个趋向于1的结果;而对于所有非女性样本,则预测结果趋向于0。

可以用一个叫做似然函数的数学方程来正式化。

e367236ad9f6afbb707df864e5b57741.png

确定参数估计值\beta_0\beta_1的目标是使该似然函数达到最大值。一旦这些系数被估计出来后, 你就能相对容易地计算出在任意长发情况下属于女性的概率. 总体而言, 在拟合非线性模型方面, 最大似然法是一种非常有效的统计方法.

多项式Logistic回归

迄今为止, 本教程仅专注于二元逻辑斯蒂回归, 这是因为我们采用的是基于性别(男/女)的分类方法。多元逻辑斯蒂回归模型是二元逻辑斯蒂回归的一种直接延伸, 当自变量具有三个及以上名义类别且无序排列时, 则适合采用该方法。

在多项式逻辑回归模型中,默认将探索性自变量转换成为多个二进制(即只有两个可能取值:0或1)的特征向量。通常选择其中一个分类作为基准分类别(即参考类),除该基准分类别外的所有其他分类都会对应一个指示函数特征。具体而言,在包含M个不同类别的数据集中(其中包含了一个基准分类),将会有(M−1)个这样的指示函数特征被创建出来。每个指示函数特征在对应的分类中取值为一,在其他所有分类中则取值为零

随后, 该方法将每个虚拟变量与一个独立的二元分类器相关联. 其结果表明有M−1个二元逻辑回归模型被构建. 各模型则揭示了预测变量对各类别成功概率的影响动态, 相对于基准类别而言.

有序logistic逻辑回归

除了多分类线性模型之外,在线性模型家族中还有一个重要的成员——有序线性模型(Ordinal Linear Model)。它作为二分类线性模型的一种扩展形式存在。在线性模型中还有一种叫做"序数"(Ordinal)的情况处理方法,在这种情况下我们关注的是具有某种顺序特性的多分类问题以及相关的自变量因素。从这一特定类型的线性模型命名角度来看就可以发现端倪——'序数'在这里指的是类别间的顺序关系

另一种说法就是说该方法被用来考察因变量(有多个有序层次)与一个或多个自变量之间的关系。

例如,在正在进行客户访谈以评估他们对我们新发布产品的满意度。你的任务是向受访者提出一个问题并根据其答案进行分类任务。

用glm进行R语言的Logistic回归

在本节中讨论二元逻辑回归问题时,请注意我们使用ISLR软件包中的相关函数来分析实际案例。该软件包包含必要的数据集,并且我们使用glm()函数来构建和评估这些模型。

加载数据

首先要做的是安装和加载ISLR包,它有你要使用的所有数据集。

在本教程中, 您将涉及股市数据集。该数据集则涵盖了自2001年到2005年间标准普尔500股票指数的日收益率情况。

探索数据

让我们来进行深入研究。names()用于获取数据框的基本信息,head()用于获取数据框的前几行概览, 而summary()同样提供了关于数据的基本统计信息

aacd07f264a373e68cf231ec43a64830.png
c5fbdfb2a27e6a4f206097c89f4d1ba6.png

该函数为数据框架中的每个变量提供了一个简明扼要的概述。你可以观察到成交量、收盘价以及买卖方向等关键指标。建议采用"买卖方向"作为因变量的原因在于其能够清晰反映市场在过去的24小时内的价格变动趋势

数据的可视化

数据可视化也许是概括与分析你的数据的一种高效且实用的方法。你将首先进行单独分析数字变量。

数据可视化也许是概括与分析你的数据的一种高效且实用的方法。你将首先进行单独分析数字变量。

直方图表示一个定量数据的柱状图形体,这些条形被划分为多个区间段,每条形的高度直观且清晰地展示了属于相应区间的实例数量.这种图表形式对于观察某一属性分布特征具有显著作用.

复制代码
    for(i in 1:8)hist(Smarket\[,i\]
8129b53628512acbd3051028ff833222.png

这是极难看到的,但大多数变量显示出高斯或双高斯的分布。


点击标题查阅往期内容

8c63e5865058aa3d915000680ba6a2d9.jpeg

利用MATLAB平台的Markov chain Monte Carlo (MCMC)方法对汽车实验数据进行逻辑斯蒂回归模型的研究或分析

outside_default.png

左右滑动查看更多

outside_default.png

01

e697209a43b1f24d4bbf9f43a9ae619f.png

02

7805e5139b433ae64fb2b3c656bb075f.jpeg

03

edd930025e4f9eda85c2b927771cbf44.jpeg

04

19255fa9e28f037f3d9d030c1b430a73.jpeg

通过盒状图和盒须图采用多种方法可以观察到数据的分布情况。盒子涵盖了数据中间部分的50%,线条表示中位数的位置。须线则指示了数据合理范围,在此之外的数据点被视为异常值。

复制代码
    for(i in 1:8) boxplot(Smarket\[,i\]
1db25f302c0807fc2f50a24797ce3636.png

你可以观察到Lags和Today都有一个相似的区间。除此之外没有离群值的迹象。

缺失数据对建模过程具有显著的影响程度。由此可见,在实际应用中识别并处理缺失数据是至关重要的步骤之一。为了直观了解数据集中的缺失情况,默认情况下建议采用"Missing Plot"图表工具来进行分析:其中X轴标识各个属性特征,Y轴则代表具体的数据实例数量;每个水平线条代表一个实例中缺少的数据特征,而垂直矩形则清晰地展示出各属性对应的完整度分布情况

复制代码
    mis( col=c("blue", "red")
683fe5c6914dd64604b10cd837c6f1c6.png

在这个数据集中没有缺失数据!

现在我们来计算每个数字变量对的相关性。通过绘制相关矩阵图能够清晰地观察到各个变量之间的关联情况

复制代码
    corrplot(correlations, method="circle")
28341f3a8bc66f27b61d4f04a0846e6b.png

采用点状表示法, 正值对应正相关, 负值对应负相关. 数值越高, 关联程度更高. 观察到该矩阵呈现对称结构, 由于每个变量与其自身的相关性均为完全正值. 没有任何两个变量之间存在显著的关联关系

让我们来做一张数据可视化图。通过pair()函数,在Smarket中绘制变量间的散点图矩阵。在这个场景下,请注意:'涨跌方向'被用作二元因变量,并被指定为颜色指标。

a1b0d56c9585c55a04da13597550f3ba.png

从观察结果来看,在此情况下无显著关联性。此类变量源于变量今日收益,在此基础上涨跌进行了分类处理。

我们来分析一下根据方向值进行分类的各个变量在不同方向上的密度分布情况。与上文中的散点图矩阵类似,在图表中以特定方式呈现数据有助于识别涨跌趋势的方向。此外,在这种图表中能够帮助我们了解各变量在不同方向上的重叠分布情况

复制代码
    Plot(x=x, y=y, plot="density", scales=scales)
874d1b72f8cc9a13e59d0cc302e25c6c.png

观察到每个变量的方向值都相同,这表明仅使用少数几个变量就难以准确预测价格走势

建立Logistic回归模型

当你调用glm.fit()函数时,请将此函数的第一个参数视为一个R公式。在这种情况下,请注意该公式说明方向为因变量,并将滞后以及成交量这两个变量作为预测因子输入。如前所述,在介绍部分提到的广义线性模型正是通过这样的方式建立关系模型

然而,在这种情况下,请你明确指示你想让程序拟合一个逻辑回归模型。为此,请将族参数设置为二项式分布以解决此问题。这将确保程序告知glm()执行逻辑回归建模而非其他可选的建模方法中的任何一种。

接下来,你可以做一个summary(),它告诉你一些关于拟合的信息。

3187a5f65f59123d23ebe7e20f4a2d0b.png

该函数返回每个系数的估计值、标准误差、z得分和p值。看起来没有一个系数达到了显著水平。此外,它还提供了无效均方(仅指平均值的均方)以及残差均方(包括所有预测变量的影响)。两者之间的差异非常微小,并具有6个自由度。

将由函数 glm.fit() 产生的预测结果赋值给变量名 probs,并使其类型对应于因变量 y。该操作会对用于构建模型的数据集执行预测操作,并输出相应的概率估计值向量

你看一下前5个概率,它们非常接近50%。

复制代码
    probs\[1:5\]
f4872766c6cff578ec3b9e1274a2a4d1.png

基于当前滞后期和其他预测因素的数据分析结果进行判断趋势。特别地,在确定概率时我会采用大于等于0.5的标准将其分类。为了实现这一目标我会借助于ifelse()函数来进行计算。

复制代码
    ifelse(probs > 0.5, "Up", "Down")

该向量由真值和假值组成。 当且仅当$ glm.probs $超过阈值0.5时,则会将该向量设置为"$ Up $";否则,则设置为"$ False $"。

为便于分析,请提供Smarket的数据框架,并制作 glm.pred 的表格。这表明该方向将呈现涨跌态势。此外,在分析过程中可考虑计算该指标系列的整体平均值。

d1c6142de936131ed846cdfb55c03976.png

查看表格中的实例分布情况,在机器学习算法中是一个关键指标。位于对角线的实例被认为是正确分类的位置,在机器学习算法中是一个关键指标。结果显示你犯了相当数量的错误。平均而言,在所有案例中正确的比例为52%

创建训练样本和测试样本

你怎么能做得更好呢?把数据分成训练集和测试集是一个好的策略。

复制代码
 #  生成训练和测试集

    
 train = Year<2005
    
 predict(glm.fit,
    
                     newdata = Smarket\[!train,\],
    
                     type = "response")

让我们详细看看这个代码块。

train等于在2005年之前的一年。对于所有早于2005年的年份,则会返回true;否则则返回false。

接着你使用glm.fit()对模型进行再训练,并限定仅使用'train'数据集作为输入资料库。这意味着该模型将仅基于2004年及之前的年份进行建模。

  • 依次对glm.probs运用predict()函数来预测自2005年以后的数据。随后针对新增的数据集,在其输入中融入Smarket信息,并采用!"train "这一筛选标准(当年份≥2005时),随后将模型类型配置为 '因变量' 以便预测概率。

    • 最后,你对glm.pred再次使用ifelse()函数来生成上涨和下跌变量。

现在你创建一个新的变量用于存储测试数据的一个新子集并将该子集命名为Direction.2005 因变量仍为direction 然后生成一个表格用于计算这个新测试集的平均值

复制代码
    Direction.2005 = Direction\[!train\]
5a96fa7c38530e2036955a6a72aee543.png
261d93bb79f328e6c465253365d9612b.png

比以前的情况还糟糕。怎么会出现这种情况?

解决过度拟合的问题

听起来像是你可能觉得数据被过度拟合了。为了缓解这种情况,请你需要构建一个较简单的模型,并以Lag1、Lag2和Lag3作为预测变量来实现目标;这将帮助你排除了其他所有变量的影响。代码的其余部分则保持不变

复制代码
 #拟合一个较小的模型

    
 glm(family = binomial, subset = train)
a18144edb9dcc40f080ebb2abc80dbf6.png

好吧,你得到了59%的分类率,不算太差。使用较小的模型似乎表现得更好。

最后,你对glm.fit做一个summary(),看看是否有任何明显的变化。

d4be27189a23cdff5e607921ce8c82cc.png

没有什么变得很重要,至少P值更好了,表明对性能的预测有所提高。

结语

因此,在涉及使用R语言中的 glm() 函数并设定族为二项式来构建逻辑回归模型的教程结束啦。而并未假定因变量与自变量之间存在严格的线性关系。它确实假定了logit模型中链接函数与自变量之间具有线性的关联,请你从中获得有益的知识吧

e7baa35f9ee08539cde6f335167e2aa6.png

点击文末**“阅读原文”**

获取全文完整资料。

本文选自《R语言逻辑回归Logistic回归分析预测股票涨跌》。

点击标题查阅往期内容

采用马尔可夫链蒙特卡罗(MCMC)方法基于Logistic逻辑回归模型研究汽车实验数据

R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病

基于R语言的Logit模型(Logistic Regression)、分段回归树(Regression Decision Tree)、集成学习方法(Random Forest)在信用卡违约预测中的应用研究;所使用的数据来源为来自信贷领域的标准化数据集

Python用户的流失数据分析旨在构建一系列机器学习模型包括逻辑回归XGBoost随机森林决策树支持向量机以及朴素贝叶斯等,并结合K-Means聚类方法以形成用户的画像

Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析

集成PYTHON机器学习框架:基于ADABOOST、决策树与逻辑回归的集成模型用于分类与回归分析,并通过网格搜索法进行超参数调优。

集成学习模型框架:基于提升树boosting、随机森林及加权组合方法的时间序列预测研究

Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析

R语言用主成分PCA、 逻辑回归、决策树、随机森林分析心脏病数据并高维可视化

R语言基于树的方法:决策树,随机森林,Bagging,增强树

R语言用逻辑回归、决策树和随机森林对信贷数据集进行分类预测

spss modeler用决策树神经网络预测ST的股票

R语言中使用线性模型、回归决策树自动组合特征因子水平

R语言中自编基尼系数的CART回归决策树的实现

R语言用rle,svm和rpart决策树进行时间序列预测

python在Scikit-learn中用决策树和随机森林预测NBA获胜者

在Python环境中应用scikit-learn与pandas结合使用决策树模型来进行针对Iris数据集的分类建模过程,并通过Cross-validation方法来评估模型性能

在R语言环境中进行的非线性模型分析中包含了多项式回归方法、局部样条拟合技术以及平滑样条技术,并结合广义相加模型(GAM)来进行深入的数据建模与预测研究

基于标准最小二乘OLS方法,在R语言环境下使用广义相加模型GAM以及样条函数技术进行逻辑回归分析

R语言ISLR工资数据进行多项式回归和样条回归分析

R语言中的多项式回归、局部回归、核平滑和平滑样条回归模型

R语言用泊松Poisson回归、GAM样条曲线模型预测骑自行车者的数量

R语言分位数回归、GAM样条曲线、指数平滑和SARIMA对电力负荷时间序列预测

R语言中采用多项式曲线模型;采用决策树作为基学习器;结合增强集成学习方法提升预测精度;同时支持梯度下降法框架下的动态展示过程

如何用R语言在机器学习中建立集成模型?

R语言ARMA-EGARCH模型、集成预测算法对SPX实际波动率进行预测

在python 深度学习Keras中计算神经网络集成模型

R语言ARIMA集成模型预测时间序列分析

基于集成学习策略的R语言支持逻辑回归模型构建;采用分类树模型对数据进行预测;应用集成学习框架下的随机森林算法对心脏病患者的潜在风险进行评估。

R语言基于树的方法:决策树,随机森林,Bagging,增强树

R语言基于Bootstrap的线性回归预测置信区间估计方法

R语言使用bootstrap和增量法计算广义线性模型(GLM)预测置信区间

基于R语言框架的样条模型、决策树模型以及自适应增强算法实现回归分析;同时支持分类分析及动态可视化技术的梯度增强方法(GBM)

Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析

基于R语言的随机森林模型、用于构建基于逻辑回归的Logistic模型用于预测心血管疾病的数据集及其可视化分析结果

使用R语言中的主成分PCA方法对心脏病数据进行分析,并通过逻辑回归模型、决策树算法以及随机森林算法实现对数据的深入挖掘与预测能力的提升。同时结合高维可视化技术以直观展示分析结果

Matlab建立SVM,KNN和朴素贝叶斯模型分类绘制ROC曲线

matlab使用分位数随机森林(QRF)回归树检测异常值

ede09ec33da151212bc9f86cb7c9a0a9.png
100ea6e17c830dd389765c0d95a6c3ed.jpeg
2dc044f01d3a535fa58c3b18d16f5f04.png

全部评论 (0)

还没有任何评论哟~