lm公式中的拖放变量仍会触发对比度误差

问题描述 投票:7回答:1

我试图仅对数据的一部分运行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()之前排除它们。但是我正在教一门关于此类内容的课程,并且我不想让学生感到困惑,因为他们已经告诉他们可以在公式中使用减号来排除变量。

r formula lm factors
1个回答
1
投票

是的,我确实相信方程式中间的减号是个问题,因为(我相信,但可能是错误的),该公式认为您正在尝试在此公式中减去一列(而不是删除该列)来自数据集)。我认为您得到的错误是因为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"])
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.