Re: [問題] 平均VIF
※ 引述《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
03/12 23:59, 3F
LSE的估計值都已經是不偏、最小variance,你要說明什麼?
→
03/12 23:59, , 4F
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
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
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
03/13 00:44, 25F
那段再說明最好的模型Y只跟X相關,而X之間相關只是最低限度的相關,
(這句不太會翻譯)
則這樣的模型便具有統計上的穩健性質
→
03/13 00:46, , 26F
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
03/13 11:17, 28F
→
03/13 11:17, , 29F
03/13 11:17, 29F
→
03/13 11:18, , 30F
03/13 11:18, 30F
→
03/13 11:19, , 31F
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
討論串 (同標題文章)