簡體   English   中英

使用lm()時,在交互項中控制虛擬變量的值(TRUE或FALSE)

[英]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() ,但我看不出它們會在這里有所作為。

dHeightlogical model這強制為一個因子,並且按字典順序對水平進行排序(即F在T之前)。

正如在@ Hongooi的回答中所指出的,你不能估計4個參數,所以R將按照它們出現的順序擬合(在TRUE之前為FALSE)

如果要強制R首先適合TRUE值,則可以使模型適合!dHeight

lm(formula = Volume ~ Girth + cGirth:!dHeight, data = trees)

請注意!dHeightFALSE等同於dHeightTRUE

您還會注意到,在這個簡單的情況下,您只需更改系數上的符號,這樣您選擇哪種型號並不重要。


編輯更好的方法

R可以認識到cGirthGirth是共線的,因此我們可以記住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可以告訴GirthcGirth是共線的,當它們都是“主效應”或獨立術語時。

R無法判斷何時適合Girth + cGirth:dHeight cGirthGirth是共線的,並且假設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沒有一個心靈閱讀解析器可以告訴你,當你適應兩個術語的相互作用時,給定的cGirthGirth是共線的,它將假設第二個等級為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:dHeightcGirth變量與截距項混淆。 您可以通過刪除攔截來查看正在發生的事情:

> 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM