R语言编写一个研究多重共线性的小程序(1)

多重共线性(Multicollinearity)是指线性回归模型中的解释变量之间由于存在精确相关关系或高度相关关系而使模型估计失真或难以估计准确。目前R中有很多函数能够检查变量之间的共线。方差膨胀因子(variance inflation factor,VIF)来分析预测变量的共线性,从而推测模型的共曲线性一个简单的替代方法。VIF 越大,显示共线性越严重。经验判断方法表明(郭福涛等,2010):当 0<VIF<10,不存在多重共线性;当 10≤VIF<100,存在较强
的多重共线性;当 VIF≥100,存在严重多重共线性。
今天我们使用R语言来编写一个能快速检查模型变量之间共线性的小程序,使用VIF来进行变量之间的判断。
在这里插入图片描述
按设计想法要分两步走,(1)列出变量之间的两两组合(2)通过组合配对算出所有组合变量的之间的VIF。通过我们既往的臭氧数据来演示一下,我们先导入数据

library(foreign)
bc<- read.spss("E:/r/test/ozone.sav",
               use.value.labels=F, to.data.frame=T)
names(bc)

在这里插入图片描述
数据中有七个变量,ozon每日臭氧水平为结局变量,Inversion base height(ibh)反转基准高度,Pressure gradient (mm Hg) 压力梯度(mm Hg),Visibility (miles) 能见度(英里),Temperature (degrees F) 温度(华氏度),Day of the year日期,vh我也不知道是什么,反正就是一参数,这里所有的变量都是连续的。
按照之前的设计,这个数据中有七个变量,我们要先计算出所有的变量两两之间的组合,
先列出变量:

x<-names(bc)
x

在这里插入图片描述
接下来跑个双循环,列出所有组合

name1 <- character()
for (c1 in x) {
  for (c2 in x) {
    name1 <- c(name1, paste(c1, c2, sep = ",", collapse = ""))
  }
}
name1

在这里插入图片描述
这里我们可以看到vh和vh组合,自己和自己组合了,代码还要改动一下,我们给它设置一个条件,给它自己不能等于自己

name2 <- character()
for (c1 in x) {
  for (c2 in x) {
    if (c1 == c2) next
    name2<- c(name2, paste(c1, c2, sep = ",", collapse = ""))
  }
}
name2

在这里插入图片描述
这样,我们就列出了,所有变量的排列组合了,这个代码也可以变成这样,效果也是一样的

name2 <- character()
for (c1 in x) {
  for (c2 in x) {
    if (c1 != c2) 
    name2<- c(name2, paste(c1, c2, sep = ",", collapse = ""))
  }
}
name2

在这里插入图片描述
这样我们就把它排列后了,后面就可以对它进行进一步处理了。有些函数如combn、expand.grid可以一步生成结果,但是我们后期还要进行拆分,所以这样写更加灵活,也增加你对函数的理解。
未完待续。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天桥下的卖艺者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值