我试图仅对数据的一部分运行lm(),并遇到问题。
dt = data.table(y = rnorm(100), x1 = rnorm(100), x2 = rnorm(100), x3 = as.factor(c(rep('men',50), rep('women',50)))) # sample data
lm( y ~ ., dt) # Use all x: Works
lm( y ~ ., dt[x3 == 'men']) # Use all x, limit to men: doesn't work (as expected)
上面的方法不起作用,因为数据集现在只有人,因此我们不能将x3(性别变量)纳入模型。但是...
lm( y ~ . -x3, dt[x3 == 'men']) # Exclude x3, limit to men: STILL doesn't work
lm( y ~ x1 + x2, dt[x3 == 'men']) # Exclude x3, with different notation: works great
这与公式中的“减号”符号有关吗?请指教。注意:当然,我可以用其他方法来做;例如,我可以在将变量放入lm()之前排除它们。但是我正在教一门关于此类内容的课程,并且我不想让学生感到困惑,因为他们已经告诉他们可以在公式中使用减号来排除变量。
是的,我确实相信方程式中间的减号是个问题,因为(我相信,但可能是错误的),该公式认为您正在尝试在此公式中减去一列(而不是删除该列)来自数据集)。我认为您得到的错误是因为x3仍在模型中,但只有一个值= "men"
解决它的一种方法是提前子集:
dt = data.table(y = rnorm(100), x1 = rnorm(100), x2 = rnorm(100), x3 = as.factor(c(rep('men',50), rep('women',50)))) # sample data
dmen<-dt[x3 == 'men'] # create a new subsetted dataset with just men
lm( y ~ ., dmen[,-"x3"]) # now drop the x3 column from the dataset (just for the model)
或者您可以在同一步骤中同时做这两项:
lm( y ~ ., dt[x3 == 'men',-"x3"])