作者celestialgod (攸蓝)
看板Statistics
标题Re: [问题] 平均VIF
时间Wed Mar 12 22:27:28 2014
※ 引述《anovachen ( )》之铭言:
: 例如下列R程式码模拟结果:
我不太懂你模拟的意义在哪里?
我提供一个反例问你
library(car)
n = 100; p = 5
X = matrix(NA, n, p)
X[,1:(p-2)] = rnorm((p-2) * n)
X[,p-1] = X[,1] + X[,2] + rnorm(n,0,0.5)
X[,p] = X[,3] + X[,4] + rnorm(n,0,0.5)
cor(X) # 一般而言,我们认为cor > 0.7,可能存在multicollinearity
: [,1] [,2] [,3] [,4] [,5]
: [1,] 1.00000000 -0.19604544 0.06225474 0.63444937 0.5073527
: [2,] -0.19604544 1.00000000 -0.06263743 0.54292224 0.3159969
: [3,] 0.06225474 -0.06263743 1.00000000 0.01226171 0.6073165
: [4,] 0.63444937 0.54292224 0.01226171 1.00000000 0.7277750
: [5,] 0.50735268 0.31599693 0.60731647 0.72777496 1.0000000
# 根据correlation matrix可知X4, X5还有 X1,X2,X4之间高相关
# 我们应该可以猜测存在multicollinearity
Beta = rep(1, p) # 公平比较,因此五组变数的斜率设为一样
Y = 3 + X %*% Beta + rnorm(n, 0, 0.1)
dat = data.frame(Y, X)
summary(lm(Y ~ ., dat))$coef
: Coefficients:
: Estimate Std. Error t value Pr(>|t|)
: (Intercept) 3.01484 0.00872 345.75 <2e-16 ***
: X1 0.97862 0.01928 50.76 <2e-16 ***
: X2 0.99301 0.02074 47.89 <2e-16 ***
: X3 0.96549 0.01675 57.64 <2e-16 ***
: X4 0.97222 0.02425 40.09 <2e-16 ***
: X5 1.03393 0.01442 71.71 <2e-16 ***
# 由上表可知检定结果都是显着,而估计值都跟真实值靠近
(VIF = vif(lm(Y ~ ., dat)))
: X1 X2 X3 X4 X5
: 5.526498 4.764776 4.258915 13.936465 9.189339
mean(VIF)
: 7.535199
# 而VIF 跟 平均VIF如上所示,确实有multicollinearity存在
# 但是系数的估计跟检定都未受影响,请问multicollinearity到底有什麽影响?
# 自问自答把剩下的补完
# VIF_j可以解释成 其方根倍的se(beta_j)为你所看到的SE...
# 上句话很绕口,重说一次,VIF_j的方根可以解释为 你实际得到的se与真实se的倍数
# 一般解决这种问题有数种方式,可以自行上网寻找
# 其中一种就是ridge regression,此处以ridge regression算出其se为何?
lambda = 10 ^ (seq(-3,1.3,length = 100)) # Given lambda
MSE_CV_f = function(lamb, fold){
X_tr = cbind(1, X[index != fold,])
X_te = cbind(1, X[index == fold,])
Y_tr = Y[index != fold]
Y_te = Y[index == fold]
mean((Y_te - X_te %*% solve(t(X_tr) %*% X_tr + lamb * diag(ncol(X_tr)),
t(X_tr) %*% Y_tr))^2)
}
# 用cross-validation去找最恰当的lambda
fold = 10
index = sample(rep(1:fold, n/fold), n)
MSE_CV = sapply(lambda, function(lamb){
mean(sapply(1:5, function(fold) MSE_CV_f(lamb, fold)))
})
(lambda_hat = lambda[which.min(MSE_CV)])
: [1] 0.001
beta_ridge = solve(t(cbind(1, X)) %*% cbind(1, X) + lambda_hat *
diag(ncol(cbind(1, X))), t(cbind(1, X)) %*% Y)
sd_beta_ridge = diag(solve(t(cbind(1, X)) %*% cbind(1, X) + lambda_hat *
diag(ncol(cbind(1, X)))) * sum((Y - cbind(1, X) %*% beta_ridge)^2/(n-2)))
table_ridge = cbind(beta_ridge, sd_beta_ridge, beta_ridge / sd_beta_ridge)
dimnames(table_ridge) = list(c("Intercept", paste0("X",1:5)),c("Coef.", "SE",
"t"))
table_ridge
: Coef. SE t
: Intercept 3.0148113 7.292708e-05 41340.077
: X1 0.9785612 3.565188e-04 2744.767
: X2 0.9929565 4.123900e-04 2407.809
: X3 0.9654641 2.690656e-04 3588.211
: X4 0.9722463 5.640260e-04 1723.762
: X5 1.0339477 1.994020e-04 5185.241
# 这样看不明显,我补上两个SE的比值
summary(lm(Y ~ ., dat))$coef[,2] / sd_beta_ridge
: (Intercept) X1 X2 X3 X4 X5
: 119.56581 54.08005 50.28349 62.24999 42.99675 72.31116
# 结论:multicollinearity影响se的大小,并非影响斜率的估计(其估计还是BLUE)
# 这篇已经偏离原问题,此处仅是回应前篇模拟的结果与结论
# 顺带提到有关多重共线性的影响
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 36.238.199.20
1F:推 anovachen:模型去掉其中一个解释变数就可能造成其他回归系数出问题 03/12 23:54
你可以说明你这句话的意思吗?
你有没有写过一个问题是
现在考虑 Y = B0 + B1*X1 + B2*X2 + 误差
如果我现在X1 跟 X2有正的covariance
假设X1跟X2的平均值都为0、B0=0
那麽[X1 X2]' * [X1 X2]的反对角线会是一个大於零的数
则cov(X1,X2)便会影响到B1与B2的估计,
因此,你删掉一个不独立的变数当然会影响其他斜率的估计。
2F:→ anovachen:而且小样本+回归系数母数很小的时候更容易发生这问题 03/12 23:58
3F:→ anovachen:所以才要看VIF 03/12 23:59
LSE的估计值都已经是不偏、最小variance,你要说明什麽?
4F:→ anovachen:另外,ridge regression是偏误估计量... 03/12 23:59
RR估计确实是有偏的,可是一般而言,可以获得较stable的结果。
5F:推 anovachen:纯粹从实务经验来讲,回归系数可以反应效果大小, 03/13 00:08
这里跟实务又有什麽关系了?你如果资料不是全部都标准化
你的回归系数还有受到单位大小影响,不能反映效果大小
6F:→ anovachen:共线性会让去掉某个解释变数後,另外某个变数回归系数 03/13 00:09
7F:→ anovachen:由显着变不显着(或反之),由正变负(或反之)... 03/13 00:09
这点刚刚已经回答过了,有相关的变数去掉当然会影响系数估计的大小
显着跟不显着其实主要是因为se的估计而导致
8F:→ anovachen:这样研究人员根本不晓得要怎麽解释研究结果。 03/13 00:09
你可以更具体的说明什麽叫做研究人员不晓得怎麽解释研究结果吗?
整理:
1. 有多重共线性时,其中一个解决方式是只留下correlation高的其中一个变数
但是有时候研究者关心的是全部变数的效果大小时,你要研究者怎麽取舍?
2. 承第一个问题,这时候RR提供一个牺牲unbias,而提供一个比较stable的结果
因此,RR是另外一种解决方式
3. 去除掉correlation较高的变数,会使得估计值有影响是自然现象,
但是correlation高的一组变数会使得X'X的反矩阵不稳定,
因此,SE往往是高估,而检定结果便会受到影响,
PS: 此处我不认为估计值的大小跟多重共线性有关。
9F:→ anovachen:英文维基百科Consequences of multicollinearity上写的 03/13 00:20
10F:→ anovachen:大致上是我懂的,某些情况甚至也是经历过的 03/13 00:20
11F:→ anovachen:您可以评论维基百科的那个段落... 03/13 00:21
我引述其中一段:
So long as the underlying specification is correct, multicollinearity does
not actually bias results; it just produces large standard errors in the
related independent variables.
我在说的便是这一点,多重共线性不会影响系数的估计,只会导致SE过大。
12F:→ anovachen:如果要把全部的解释变数都放进模型,之前我试过主成分 03/13 00:25
13F:→ anovachen:回归 03/13 00:25
请问主成分回归的系数,你要怎麽解释?
往往主成分的构成是难以找到一个适当的解释,这是为人所诟病的
但是RR的好处就是保留原变数,而且提供相对稳定的估计
14F:→ anovachen:在当时的情况,我不会去解释回归系数,因为我是做 03/13 00:27
15F:→ anovachen:资料探勘,要做预测模型 03/13 00:27
如果做预测模型,那麽大的SE跟小的SE不会影响预测结果
那麽这时候用原本的回归式做预测还比较快,毕竟斜率还是不偏
16F:→ anovachen:如果是流行病学研究遇到这问题,就要考虑干扰因子 03/13 00:28
你是指confounding factor吗?这个跟此处问题有何关系?
17F:→ anovachen:通常我会把干扰因子配对後作conditional logistic回归 03/13 00:30
18F:→ anovachen:但那是因为资料属性的关系((都是二分类型的反应变项 03/13 00:31
19F:→ anovachen:而不会把干扰因子也丢进模型里 03/13 00:31
你想说的是干扰因子会影响系数的大小吗?
那麽在回归的开头便会跟你说 如果你研究的是因果关系时
必须要特别注意confounding factor所带来的效果
还要有理论上的支持,此两者的因果关系,
因为线性关系不imply因果关系
所以你要建模时,这些本就该考量
20F:→ anovachen:同意你的说法...但有些学生是一股脑的把资料库的变数 03/13 00:42
21F:→ anovachen:丢进去模型里.... 03/13 00:42
22F:→ anovachen:然後上台报告时就开始不晓得怎麽解释了= = 03/13 00:42
这个是那些学生的问题...这里没要讨论这个
23F:→ anovachen:不过作预测模型时,共线性的影响都是参考别人的经验, 03/13 00:42
24F:→ anovachen:我不确定有共线性时,模型是否会因此不稳定(如何证明? 03/13 00:43
怎样叫做模型的不稳定?预测不好?
25F:→ anovachen:维基讲共线性那边提到的statistically robust 03/13 00:44
那段再说明最好的模型Y只跟X相关,而X之间相关只是最低限度的相关,
(这句不太会翻译)
则这样的模型便具有统计上的稳健性质
26F:→ anovachen:可能换了某组sample就预测不准这样... 03/13 00:46
所以你要找找看prediction error了,我如果没记错
multicollinearity跟estimate、prediction都没关系~~
※ 编辑: celestialgod 来自: 36.238.199.20 (03/13 00:56)
27F:推 andrew43:共线性对预测结果会有不稳定性。可以这样想像: 03/13 11:16
28F:→ andrew43:假如我有一个 y=b0+b1x1+b2x2 的回归式且x1和x2高度相关 03/13 11:17
29F:→ andrew43:则以三维座标来检视这个回归结果可以发现, 03/13 11:17
30F:→ andrew43:x1和x2的样本在空间中接近连成一线,而使y的预测平面 03/13 11:18
31F:→ andrew43:可任意地以这条x1和x2组成的线旋转。 03/13 11:19
32F:→ andrew43:因此,假如欲预测一个离这条共线较远的样本,那就不准了 03/13 11:21
33F:→ andrew43:或是说很大的机会是非常不准。 03/13 11:22