2014-02-28 109 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