|
【作者】(必填):青易
【问题描述】(必填):R似乎没有现成做Variance Inflation Factor分析的包,以前有个间接的包,后来不能用了。
【R语言代码】- # 方差膨胀因子(VIF)计算函数
- # 20150605
- # By qingyi1207@126.com
- # 方差膨胀因子计算公式及定义见:http://en.wikipedia.org/wiki/Variance_inflation_factor
- # 需要传入拟比较的变量和所在的数据集
- VIF <- function(variable,data){
- var.nums <- length(variable) #获取变量个数
- vif.table <- matrix(,nrow=var.nums,ncol=2) #声明一个矩阵,用于返回计算结果
- for(i in 1:var.nums) #循环计算各个变量的VIF
- {
- #以下部分用于对字符串进行拼接,用于执行lm()函数。代码并不是最优。
- text=""
- for(ii in variable[-i])
- {
- text=paste(text,ii,sep="+")
- }
-
- text=paste(text, ",data=",sep="")
- text=paste(text,data,sep="")
- text=paste(variable[i],substr(text, 2, nchar(text)),sep="~")
- text=paste("temp.lm <- lm(",text,sep="")
- text=paste(text,")",sep="")
- #字符串拼接结束。
- eval(parse(text=text)) #执行lm()
- temp.d <- summary(temp.lm) #取得r2所在数据集
-
- vif.table[i,1] <- variable[i] #标明变量
- vif.table[i,2] <- round(1/(1-temp.d$r.squared),2) #给出具体的数字,显示两位小数
- }
-
- colnames(vif.table) <- c("Var.", "VIF") #给表格Header
- vif.table <- as.data.frame(vif.table) #转化为数据框
- return(vif.table) #返回值
- }
复制代码
【代码说明】:VIF(c("TN","TP","COD","Global","Diffuse","Direct"),"env") 其中前面是变量名称,后面"env"是数据集的名称,都必须要有。
【运行结果】:
计算结果
【参考出处】:VIF定义及计算公式:http://en.wikipedia.org/wiki/Variance_inflation_factor
|
|