R语言与多元线性回归方程及各种检验

R语言与多元线性回归方程及各种检验


一、模型建立

数据放在最后,自取试建立y与x1,x2,x3,x4,x5的线性回归方程
试建立y与
代码如下:

a<-read.csv("eg2.1.csv",header=T);a
b<-lm(y~x1+x2+x3+x4+x5,data=a)

这里介绍一个包,可以把结果用表格显示:

install.packages("flextable")
library(flextable)#制作表格
as_flextable(b)

输出结果如下:
在这里插入图片描述
得到回归方程

y = − 32 + 0.163 x 1 + 0.228 x 2 + 0.881 x 3 − 0.05 x 4 + 0.169 x 5 y=-32+0.163x_1+0.228x_2+0.881x_3-0.05x_4+0.169x_5 y=32+0.163x1+0.228x2+0.881x30.05x4+0.169x5

二、多重共线性

(1)产生的背景:

1.经济变量间具有共同变化的趋势。例如,对于时间序列数据收入、消费、就业率等等,在经济上升时期均呈现增长的趋势,而在经济收缩期,又都呈现下降趋势。当这些变量同时作为解释变量进入模型时就会带来多重共线性问题。
2.模型中引入了滞后变量,变量X常常与滞后变量高度相关
3.利用截面数据建立模型也可能会出现多重共线性。利用截面数据建模时,许多变量变化与发展规模有关,会出现同步增长的趋势,如资本、劳动力、科技、能源等投入与产出的规模相关,这时容易产生多重共线性。
4.样本数据自身的原因。例如,抽样仅仅限于总体中解释变量取值的一个有限范围,使得变量间变异不大;或由于总体受限,多个解释变量的样本数据相关,这时都可能出现多重共线性。

(2)多重共线性的检验

1.简单相关系数法:

一般而言,如果每两个解释变量的简单的相关系数(0阶自相关系数)比较高,如大于0.8,则可认为存在严重的多重共线性。

ab<-a[,c(2:6)]#只保留解释变量
corr<-cor(ab);corr
corrplot(corr,method="number",type="full",mar=c(0,0,0,0) ,bg="black",tl.col = "blue")

其中corrplot函数详细见这篇文章:
相关系数热力图
在这里插入图片描述
由上图可知,x1和x3的相关系数为0.73,初步判断不存在多重共线性。

2.方差膨胀因子(vif)法

一般vif大于10即可认为存在严重的多重共线性:
通过建立x1~x2+x3+x4+x5的线性关系得到R方,那么x1的方差膨胀因子就是
V I F = 1 1 − R 2 VIF=\frac{1}{1-R^2} VIF=1R21
其他的类似,r语言有vif这个函数可以直接求:

library(car)#检验多重共线性的包
vif(b)#b是线性回归的结果

VIF
可以看出:vif值都小于10,即可判断出没有多重共线性

3.矩阵 X T X X^TX XTX的条件数k

条件数的定义为:
   k ( X T X ) = ∥ X T X ∥ ⋅ ∥ ( X T X ) − 1 ∥ = λ max ⁡ ( X T X ) λ min ⁡ ( X T X ) \,\,k\left( X^TX \right) =\left\| X^TX \right\| \cdot \left\| \left( X^TX \right) ^{-1} \right\| =\frac{\lambda _{\max \left( X^TX \right)}}{\lambda \min \left( X^TX \right)} k(XTX)=XTX(XTX)1=λmin(XTX)λmax(XTX)
若k<100,则认为多重共线性的程度很小,在100到1000之间则认为存在中度或较强的多重共线性,若大于1000,则认为存在严重的多重共线性。
在R软件中,用kappa()计算矩阵的条件数,其使用方法为:

**kappa(z,exact=F)***

其中z是矩阵,exact=F即不精确计算条件数,近似计算

XX<-cor(ab)#先做出相关系数矩阵
kappa(XX)#对相关系数矩阵做
eigen(XX)#求特征值和特征向量

在这里插入图片描述
可以看出条件数的值为7,即不存在多重共线性。

(3)多重共线性的修正

本文虽然没有出现多重共线性的问题,但是如果出现了,该如何解决呢?
本文主要通过逐步回归来修正多重共线性

代码如下:


aaa<-step(b)
as_flextable(aaa)

在这里插入图片描述
得到最后的回归方程:

y = − 18.43 + 0.249 x 2 + 0.986 x 3 y=-18.43+0.249x_2+0.986x_3 y=18.43+0.249x2+0.986x3

二、异方差性的检验及修正

1.异方差性的实质

设模型为
Y i = β 0 + β 1 x 1 i + β 2 x 2 i + . . . + β k x k i + u i ( i = 1 , 2 , . . . n ) \\ Y_i=\beta _0+\beta _1x_{1i}+\beta _2x_{2i}+...+\beta _kx_{_{ki}}+u_i\left( i=1,2,...n \right) Yi=β0+β1x1i+β2x2i+...+βkxki+ui(i=1,2,...n)
如果其他假定均不变,但模型中随机误差项 u i u_i ui的方差为
V a r ( u i ) = σ i 2 ( i = 1 , 2 , . . . n ) Var(u_i)=\sigma_i^2(i=1,2,...n) Var(ui)=σi2(i=1,2,...n)
则称 u i u_i ui具有异方差性(heteroscedasiticity

2.异方差性的检验

1.图示检验法

一般把标准化残差的绝对值大于等于2的观测值认为是可疑点,而把标准化残差值绝对值大于等于3认为是异常值

rst <- rstandard(b)#标准化残差
fit<-predict(b)#预测值
library(ggplot2)#载入ggplot2包
mn<-data.frame(rst,fit)
ggplot(mn,aes(fit,rst))+geom_point()

通过绘制出散点图可以看出:
在这里插入图片描述
标准化残差值大致在区间(-2,3)内 ,存在可疑点。是否存在异方差性还需要进一步检测。

2.Goldfeld—Quandt检验

install.packages("lmtest")
library(lmtest)
as_flextable(gqtest(b))

在这里插入图片描述可以看出p值为0.4,即接受原假设,即不存在异方差

3.White检验和H.glesjser检验

White检验的统计量:

w = n ∗ R 2   C h i S q u a r e ( k ) w=n*R^2~ChiSquare\left( k \right) w=nR2 ChiSquare(k)
由于解释变量由5个,这个其实不太适合做white检验
可以参考这篇文章:
异方差与r语言实践

3.异方差的修正

加权最小二乘法:在r语言中代码非常简单
这里取权重为1/abs(e)

e<-resid(b)#e是标准化残差
b1<-lm(y~x1+x2+x3+x4+x5,weights=1/abs(e),data=a)
as_flextable(b1)

在这里插入图片描述
得到方程:
y e = − 36 e + 0.187 x 1 e + 0.205 x 2 e + 0.883 x 3 e + 0.004 x 4 e + 0.158 x 5 e \frac{y}{\sqrt{e}}=\frac{-36}{\sqrt{e}}+0.187\frac{x_1}{\sqrt{e}}+0.205\frac{x_2}{\sqrt{e}}+0.883\frac{x_3}{\sqrt{e}}+0.004\frac{x_4}{\sqrt{e}}+0.158\frac{x_5}{\sqrt{e}} e y=e 36+0.187e x1+0.205e x2+0.883e x3+0.004e x4+0.158e x5
其中e是残差

数据链接
链接:https://pan.baidu.com/s/1My6WTMXEZyIVfIM7A5oIbA?pwd=tjby
提取码:tjby
–来自百度网盘超级会员V4的分享

  • 55
    点赞
  • 689
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
R语言中,进行多元线性回归可以使用lm()函数。首先,根据引用中提到的多重判定系数公式,我们可以使用summary()函数来评价多元线性回归模型的拟合程度。这个函数会给出多个统计量,其中包括判定系数R-squared的值,用于衡量模型的拟合优度。 引用提到,在多元线性回归中,我们需要进行线性关系检验和回归系数检验。对于线性关系检验,我们可以使用F检验来判断模型是否具有整体显著性。在R语言中,我们可以通过summary()函数的F值来进行判断。 引用指出,在多元线性回归中,如果只有一个回归系数不显著,其他变量都显著,我们可以考虑将不显著的变量从模型中剔除。 另外,在多元线性回归中,还需要考虑多重共线性的问题。多重共线性是指解释变量之间存在高度相关性的情况。我们可以使用VIF(Variance Inflation Factor)来判断变量之间的相关性。 因此,在R语言进行多元线性回归,可以按照以下步骤操作: 1. 使用lm()函数建立多元线性回归模型,指定自变量和因变量。 2. 使用summary()函数来评价模型的拟合程度,并查看判定系数R-squared的值。 3. 进行线性关系检验,使用summary()函数的F值来判断模型是否具有整体显著性。 4. 根据回归系数的显著性,决定是否剔除不显著的变量。 5. 对于存在多重共线性的情况,使用VIF来判断变量之间的相关性。 请注意,这只是多元线性回归的一般步骤,在具体应用中可能需要根据实际情况进行相应的调整和解释。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [R语言——多元线性回归](https://blog.csdn.net/weixin_41030360/article/details/80891738)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值