2014-02-28 150 views
1

我有一個虛擬變量black其中black==0是白色,而black==1是黑色。我試圖僅爲black==1類別安裝線性模型lm,但運行下面的代碼會給我提供不正確的係數。 R有沒有一種方法來運行if聲明的模型,類似於Stata?R中的線性迴歸if語句

library(foreign) 
df<-read.dta("hw4.dta") 
attach(df) 
black[black==0]<-NA 
model3<-lm(rent~I(income^2)+income+black) 

回答

3

如果看起來像這裏有幾個問題。首先,您已將所有數據存儲在單獨的矢量rent,incomeblack中。你應該將其存儲在數據幀:

data <- data.frame(rent, income, black) 

要限制基於邏輯表達式數據幀時,您可以使用subset功能:

data.limited <- subset(data, black == 1) 

最後,你可以運行你的分析您有限的數據幀(假設沒有black變量):

model3 <- lm(rent~I(income^2)+income, data=data.limited) 
+0

也,子集可以在LM通話---流明(...,子集=黑色== 1) –

+0

內使用我稍微困惑。我只是添加了一些更多的我的上述代碼。如果我附加了我的數據,這仍然適用嗎? – torentino

+2

我想大多數人會同意使用attach()通常是一個糟糕的主意。最好將數據留在數據幀df中,並使用df $變量調用特定變量。 model3 <-lm(df $ rent〜I(df $ income^2)+ df $ income,subset = df $ black == 1)應該提供你正在尋找的結果 –

3

爲什麼不能運行模型前子集的數據?我個人更喜歡使用數據框而不是單獨的向量,這將使子集更容易。

df <- data.frame(rent, income, black) 

然後子集數據幀,鄰創建另一個

df <- df[df$black==1,] 

並運行模型

model3 <- lm(rent ~ I(income^2) , data=df) 
+0

隨着你可以添加的代碼行 model3 <-lm(rent〜I(income^2)+ income + black,na.action =吶。省略) – eclark

+1

可能最好不要在新模型中使用'black'變量,因爲它在有限的數據幀中將保持不變。 – josliber

+0

沒錯,在我的監督下。謝謝!我會編輯它。 – eclark

1

下面寫的代碼應該這樣做。

model3 <- lm(rent~I(income^2)+income+black, data=df, subset=df$black==1)) 
+0

你甚至可能不需要'df $'' –

+0

你爲什麼要將data = df傳入lm函數 – user3042850