[英]controlling the value (TRUE or FALSE) of dummy variables in interaction terms when using lm()
當我估計一個模型在兩個變量之間沒有作為獨立變量進入模型的變量時,並且當其中一個變量是虛擬(類“邏輯”)變量時,R“翻轉虛擬變量的符號” 。 也就是說,當虛擬為假時,它報告交互項的系數估計,而不是當它為真時。 這是一個例子:
data(trees)
trees$dHeight <- trees$Height > 76
trees$cGirth <- trees$Girth - mean(trees$Girth)
lm(Volume ~ Girth + Girth:dHeight, data = trees) # estimate is for Girth:dHeightTRUE
lm(Volume ~ Girth + cGirth:dHeight, data = trees) # estimate is for cGirth:dHeightFALSE
為什么最后一行的回歸會產生對dHeight
為FALSE而不是TRUE的交互的估計? (我希望R在dHeight為TRUE時報告估算值。)
這不是一個大問題,但我想更好地理解為什么R正在做它正在做的事情。 我知道relevel()
和contrasts()
,但我看不出它們會在這里有所作為。
dHeight
是logical
。 在model
這強制為一個因子,並且按字典順序對水平進行排序(即F在T之前)。
正如在@ Hongooi的回答中所指出的,你不能估計4個參數,所以R將按照它們出現的順序擬合(在TRUE之前為FALSE)
如果要強制R
首先適合TRUE
值,則可以使模型適合!dHeight
lm(formula = Volume ~ Girth + cGirth:!dHeight, data = trees)
請注意!dHeightFALSE
等同於dHeightTRUE
您還會注意到,在這個簡單的情況下,您只需更改系數上的符號,這樣您選擇哪種型號並不重要。
編輯更好的方法
R可以認識到cGirth
和Girth
是共線的,因此我們可以記住a/b
擴展為a + a:b
lm(formula = Volume ~ Girth + cGirth/dHeight, data = trees)
Coefficients:
(Intercept) Girth cGirth cGirth:dHeightTRUE
-27.198 4.251 NA 1.286
這提供了易於解釋名稱的系數,並且R
將明顯地無法返回cGirth
的系數
R
可以告訴Girth
和cGirth
是共線的,當它們都是“主效應”或獨立術語時。
R
無法判斷何時適合Girth + cGirth:dHeight
cGirth
和Girth
是共線的,並且假設dHeight
是合乎邏輯的,我們希望cGirthdHeightTRUE
是你適合的系數。 (你可以編寫自己的公式解析器,如果你真的想要這樣做)
另一種方法適合你想要的模型,沒有任何共線術語就可以使用
lm(formula = Volume ~ Girth + I(cGirth*dHeight), data = trees)
將dHeight
為數字( TRUE becomes 1
)。
編輯以解決問題。
當你適合~Girth + Girth:dHeight
你所說的是,有一個主要作用Girth
+調整為dHeight
。 R將因子的第一級別視為參考級別。 dHeightFALSE
的斜率只是Girth
的值,然后你可以調整dHeight == TRUE
(周長:dHeightTRUE)。
當你適合~Girth + cGirth:dHeight
- R
沒有一個心靈閱讀解析器可以告訴你,當你適應兩個術語的相互作用時,給定的cGirth
和Girth
是共線的,它將假設第二個等級為dHeight
現在是參考水平)
想象一下,如果你有一個與Girth
完全無關的變量
例如
set.seed(1)
trees$cG <- runif(nrow(trees))
然后當你適應Girth + cG:dHeight
,你會得到4個參數估計值
lm(formula = Volume ~ Girth + cG:dHeight, data = trees)
Call:
lm(formula = Volume ~ Girth + cG:dHeight, data = trees)
Coefficients:
(Intercept) Girth cG:dHeightFALSE cG:dHeightTRUE
-31.79645 4.79435 -5.92168 0.09578
這是明智的。
當R
處理Girth + cGirth:dHeight
,它會擴展(首先是因子的第一級) 1 + Girth + cGirth:dHeightFALSE + cGirth:dHeightTRUE
- 並且1 + Girth + cGirth:dHeightFALSE + cGirth:dHeightTRUE
它無法估計所有4個參數,並將估計前3。
R沒有像這樣翻轉虛擬變量上的符號。 當你適合~ Girth + cGirth:dHeight
, cGirth
變量與截距項混淆。 您可以通過刪除攔截來查看正在發生的事情:
> lm(Volume ~ -1 + Girth + cGirth:dHeight, data = trees)
Call:
lm(formula = Volume ~ -1 + Girth + cGirth:dHeight, data = trees)
Coefficients:
Girth cGirth:dHeightFALSE cGirth:dHeightTRUE
2.199 2.053 3.339
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.