2012-09-17 65 views
4

使用R,我正在運行邏輯模型,需要以下列方式包含交互項,其中A是分類的,B是連續的。在R邏輯模型中強制引用類別

Y ~ A + B + normalized(B):A 

我的問題是,當我做到這一點,參考類是不一樣的

Y ~ A + B + A:B 

這使得難以模型的比較。我確信有一種方法可以迫使參考類別始終保持一致,但似乎無法找到直接的答案。

爲了說明,我的數據是這樣的:

income      ndvi  sga 
30,000$ - 49,999$  -0,141177617  0 
30,000$ - 49,999$  -0,170513257  0 
>80,000$     -0,054939323  1 
>80,000$     -0,14724104   0 
>80,000$     -0,207678157  0 
missing     -0,229890869  1 
50,000$ - 79,999$   0,245063253  0 
50,000$ - 79,999$   0,127565529  0 
15,000$ - 29,999$  -0,145778357  0 
15,000$ - 29,999$  -0,170944338  0 
30,000$ - 49,999$  -0,121060635  0 
30,000$ - 49,999$  -0,245407291  0 
missing     -0,156427532  0 
>80,000$     0,033541238  0 

,輸出轉載如下。第一組結果的是形式模型Y〜A * B,以及第二,Y〜A + B + A:歸一化(B)

        Estimate Std. Error z value Pr(>|z|)  
(Intercept)       -2.72175 0.29806 -9.132 <2e-16 *** 
ndvi         2.78106 2.16531 1.284 0.1990  
income15,000$ - 29,999$    -0.53539 0.46211 -1.159 0.2466  
income30,000$ - 49,999$    -0.68254 0.39479 -1.729 0.0838 . 
income50,000$ - 79,999$    -0.13429 0.33097 -0.406 0.6849  
income>80,000$       -0.56692 0.35144 -1.613 0.1067  
incomemissing       -0.85257 0.47230 -1.805 0.0711 . 
ndvi:income15,000$ - 29,999$   -2.27703 3.25433 -0.700 0.4841  
ndvi:income30,000$ - 49,999$   -3.76892 2.86099 -1.317 0.1877  
ndvi:income50,000$ - 79,999$   -0.07278 2.46483 -0.030 0.9764  
ndvi:income>80,000$     -3.32489 2.62000 -1.269 0.2044  
ndvi:incomemissing      -3.98098 3.35447 -1.187 0.2353 

             Estimate Std. Error z value Pr(>|z|)  
(Intercept)        -3.07421 0.30680 -10.020 <2e-16 *** 
ndvi          -1.19992 2.56201 -0.468 0.640  
income15,000$ - 29,999$     -0.33379 0.29920 -1.116 0.265  
income30,000$ - 49,999$     -0.34885 0.26666 -1.308 0.191  
income50,000$ - 79,999$     -0.12784 0.25124 -0.509 0.611  
income>80,000$       -0.27255 0.27288 -0.999 0.318  
incomemissing       -0.50010 0.31299 -1.598 0.110  
income<15,000$:normalize(ndvi)   0.40515 0.34139 1.187 0.235  
income15,000$ - 29,999$:normalize(ndvi) 0.17341 0.35933 0.483 0.629  
income30,000$ - 49,999$:normalize(ndvi) 0.02158 0.32280 0.067 0.947  
income50,000$ - 79,999$:normalize(ndvi) 0.39774 0.28697 1.386 0.166  
income>80,000$:normalize(ndvi)   0.06677 0.30087 0.222 0.824  
incomemissing:normalize(ndvi)     NA   NA  NA  NA 

因此,在第一模型中,類別「收入< 15,000「是參考類別,而在第二種情況下,發生了不同的事情,但我並不清楚。

+2

參見'contr.treatment'和'base'。 但爲什麼規範化分類變量? –

+0

B是連續的,編輯 –

+1

你可以給出A和B的值的一個可重複的例子(例如使用'dput(A)') –

回答

0

假設我們想對這個方程進行迴歸。

我們試圖用model.matrix來實現它。但是下面的結果顯示了一些自動化問題。 有沒有更好的實現方法?。更具體地說,假設X_1是一個連續變量,而X_2是一個虛擬變量。

基本上,相互作用項的解釋是相同的,只不過主要術語X_2將在X_1處於平均水平時進行評估。 (見Early draft of this Paper

這裏有一些數據來說明我的觀點:(這不是一個GLM但我們可以運用同樣的方法來GLM

library(car) 
str(Prestige) 
# some data cleaning 
Prestige <- Prestige[!is.na(Prestige$type),] 

# interaction the usual way. 
lm1 <- lm(income ~ education+ type + education:type, data = Prestige); summary(lm1) 

# interacting with demeaned education 
Prestige$education_ <- Prestige$education-mean(Prestige$education) 

當使用常規的公式法,事情確實不是我們想要的方式。由於配方不把任何變量作爲參考

lm2 <- lm(income ~ education+ type + education_:type, data = Prestige); summary(lm2) 

# Using model.matrix to shape the interaction 
cusInt <- model.matrix(~-1+education_:type,data=Prestige)[,-1];colnames(cusInt) 
lm3 <- lm(income ~ education+ type + cusInt, data = Prestige); summary(lm3) 


compareCoefs(lm1,lm3,lm2) 

結果在這裏:

      Est. 1 SE 1 Est. 2 SE 2 Est. 3 SE 3 
(Intercept)    -1865 3682 -1865 3682 4280 8392 
education     866 436 866 436 297 770 
typeprof     -3068 7192 -542 1950 -542 1950 
typewc      3646 9274 -2498 1377 -2498 1377 
education:typeprof   234 617       
education:typewc   -569 885       
cusInteducation_:typeprof     234 617    
cusInteducation_:typewc     -569 885    
typebc:education_          569 885 
typeprof:education_         803 885 
typewc:education_      

所以基本上使用model.matrix當我們進行干預,以設置參考變量。除此之外,在變量名前面還有一些custInt,所以當有很多表比較時,格式化結果是相當繁瑣的。