我有一个虚拟变量black
,其中black==0
为白色,black==1
为黑色。我试图仅为lm
类别拟合线性模型black==1
,但是运行下面的代码会给出不正确的系数。在R中是否有办法使用if
语句运行模型,类似于Stata?
library(foreign)
df<-read.dta("hw4.dta")
attach(df)
black[black==0]<-NA
model3<-lm(rent~I(income^2)+income+black)
答案 0 :(得分:3)
如果看起来这里有一些问题。首先,您已将所有数据存储在单独的向量rent
,income
和black
中。您应该将其存储在数据框中:
data <- data.frame(rent, income, black)
要根据逻辑表达式限制数据框,可以使用subset
函数:
data.limited <- subset(data, black == 1)
最后,您可以在有限的数据框架上运行分析(可能没有black
变量):
model3 <- lm(rent~I(income^2)+income, data=data.limited)
答案 1 :(得分:3)
为什么在运行模型之前不对数据进行子集化?我个人更喜欢使用数据框而不是单独的向量,这将使子集更容易。
df <- data.frame(rent, income, black)
然后对数据帧进行子集化,或者创建另一个
df <- df[df$black==1,]
运行模型
model3 <- lm(rent ~ I(income^2) , data=df)
答案 2 :(得分:1)
下面写的代码应该这样做。
model3 <- lm(rent~I(income^2)+income+black, data=df, subset=df$black==1))