作者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