使用if语句在R中进行线性回归

时间:2014-02-28 18:44:44

标签: r if-statement categories lm

我有一个虚拟变量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)

3 个答案:

答案 0 :(得分:3)

如果看起来这里有一些问题。首先,您已将所有数据存储在单独的向量rentincomeblack中。您应该将其存储在数据框中:

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