Re: [問題] 平均VIF

看板Statistics作者 (攸藍)時間10年前 (2014/03/12 22:27), 編輯推噓3(3030)
留言33則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《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

03/12 23:54, , 1F
模型去掉其中一個解釋變數就可能造成其他迴歸係數出問題
03/12 23:54, 1F
你可以說明你這句話的意思嗎? 你有沒有寫過一個問題是 現在考慮 Y = B0 + B1*X1 + B2*X2 + 誤差 如果我現在X1 跟 X2有正的covariance 假設X1跟X2的平均值都為0、B0=0 那麼[X1 X2]' * [X1 X2]的反對角線會是一個大於零的數 則cov(X1,X2)便會影響到B1與B2的估計, 因此,你刪掉一個不獨立的變數當然會影響其他斜率的估計。

03/12 23:58, , 2F
而且小樣本+迴歸係數母數很小的時候更容易發生這問題
03/12 23:58, 2F

03/12 23:59, , 3F
所以才要看VIF
03/12 23:59, 3F
LSE的估計值都已經是不偏、最小variance,你要說明什麼?

03/12 23:59, , 4F
另外,ridge regression是偏誤估計量...
03/12 23:59, 4F
RR估計確實是有偏的,可是一般而言,可以獲得較stable的結果。

03/13 00:08, , 5F
純粹從實務經驗來講,迴歸係數可以反應效果大小,
03/13 00:08, 5F
這裡跟實務又有什麼關係了?你如果資料不是全部都標準化 你的迴歸係數還有受到單位大小影響,不能反映效果大小

03/13 00:09, , 6F
共線性會讓去掉某個解釋變數後,另外某個變數迴歸係數
03/13 00:09, 6F

03/13 00:09, , 7F
由顯著變不顯著(或反之),由正變負(或反之)...
03/13 00:09, 7F
這點剛剛已經回答過了,有相關的變數去掉當然會影響係數估計的大小 顯著跟不顯著其實主要是因為se的估計而導致

03/13 00:09, , 8F
這樣研究人員根本不曉得要怎麼解釋研究結果。
03/13 00:09, 8F
你可以更具體的說明什麼叫做研究人員不曉得怎麼解釋研究結果嗎? 整理: 1. 有多重共線性時,其中一個解決方式是只留下correlation高的其中一個變數 但是有時候研究者關心的是全部變數的效果大小時,你要研究者怎麼取捨? 2. 承第一個問題,這時候RR提供一個犧牲unbias,而提供一個比較stable的結果 因此,RR是另外一種解決方式 3. 去除掉correlation較高的變數,會使得估計值有影響是自然現象, 但是correlation高的一組變數會使得X'X的反矩陣不穩定, 因此,SE往往是高估,而檢定結果便會受到影響, PS: 此處我不認為估計值的大小跟多重共線性有關。

03/13 00:20, , 9F
英文維基百科Consequences of multicollinearity上寫的
03/13 00:20, 9F

03/13 00:20, , 10F
大致上是我懂的,某些情況甚至也是經歷過的
03/13 00:20, 10F

03/13 00:21, , 11F
您可以評論維基百科的那個段落...
03/13 00:21, 11F
我引述其中一段: 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過大。

03/13 00:25, , 12F
如果要把全部的解釋變數都放進模型,之前我試過主成分
03/13 00:25, 12F

03/13 00:25, , 13F
迴歸
03/13 00:25, 13F
請問主成分回歸的係數,你要怎麼解釋? 往往主成分的構成是難以找到一個適當的解釋,這是為人所詬病的 但是RR的好處就是保留原變數,而且提供相對穩定的估計

03/13 00:27, , 14F
在當時的情況,我不會去解釋迴歸係數,因為我是做
03/13 00:27, 14F

03/13 00:27, , 15F
資料探勘,要做預測模型
03/13 00:27, 15F
如果做預測模型,那麼大的SE跟小的SE不會影響預測結果 那麼這時候用原本的回歸式做預測還比較快,畢竟斜率還是不偏

03/13 00:28, , 16F
如果是流行病學研究遇到這問題,就要考慮干擾因子
03/13 00:28, 16F
你是指confounding factor嗎?這個跟此處問題有何關係?

03/13 00:30, , 17F
通常我會把干擾因子配對後作conditional logistic迴歸
03/13 00:30, 17F

03/13 00:31, , 18F
但那是因為資料屬性的關係((都是二分類型的反應變項
03/13 00:31, 18F

03/13 00:31, , 19F
而不會把干擾因子也丟進模型裡
03/13 00:31, 19F
你想說的是干擾因子會影響係數的大小嗎? 那麼在回歸的開頭便會跟你說 如果你研究的是因果關係時 必須要特別注意confounding factor所帶來的效果 還要有理論上的支持,此兩者的因果關係, 因為線性關係不imply因果關係 所以你要建模時,這些本就該考量

03/13 00:42, , 20F
同意你的說法...但有些學生是一股腦的把資料庫的變數
03/13 00:42, 20F

03/13 00:42, , 21F
丟進去模型裡....
03/13 00:42, 21F

03/13 00:42, , 22F
然後上台報告時就開始不曉得怎麼解釋了= =
03/13 00:42, 22F
這個是那些學生的問題...這裡沒要討論這個

03/13 00:42, , 23F
不過作預測模型時,共線性的影響都是參考別人的經驗,
03/13 00:42, 23F

03/13 00:43, , 24F
我不確定有共線性時,模型是否會因此不穩定(如何證明?
03/13 00:43, 24F
怎樣叫做模型的不穩定?預測不好?

03/13 00:44, , 25F
維基講共線性那邊提到的statistically robust
03/13 00:44, 25F
那段再說明最好的模型Y只跟X相關,而X之間相關只是最低限度的相關, (這句不太會翻譯) 則這樣的模型便具有統計上的穩健性質

03/13 00:46, , 26F
可能換了某組sample就預測不準這樣...
03/13 00:46, 26F
所以你要找找看prediction error了,我如果沒記錯 multicollinearity跟estimate、prediction都沒關係~~ ※ 編輯: celestialgod 來自: 36.238.199.20 (03/13 00:56)

03/13 11:16, , 27F
共線性對預測結果會有不穩定性。可以這樣想像:
03/13 11:16, 27F

03/13 11:17, , 28F
假如我有一個 y=b0+b1x1+b2x2 的迴歸式且x1和x2高度相關
03/13 11:17, 28F

03/13 11:17, , 29F
則以三維座標來檢視這個迴歸結果可以發現,
03/13 11:17, 29F

03/13 11:18, , 30F
x1和x2的樣本在空間中接近連成一線,而使y的預測平面
03/13 11:18, 30F

03/13 11:19, , 31F
可任意地以這條x1和x2組成的線旋轉。
03/13 11:19, 31F

03/13 11:21, , 32F
因此,假如欲預測一個離這條共線較遠的樣本,那就不準了
03/13 11:21, 32F

03/13 11:22, , 33F
或是說很大的機會是非常不準。
03/13 11:22, 33F
文章代碼(AID): #1J86xIuA (Statistics)
討論串 (同標題文章)
文章代碼(AID): #1J86xIuA (Statistics)