为什么我在 predict.lm "variable lengths differ" 中遇到错误?

Why I'm geeting an error in predict.lm "variable lengths differ"?

我正在尝试预测模型,但它显示错误:

Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = object$xlevels) : 
  variable lengths differ (found for 'Welfare.Measurment')

测试和训练数据相似,变量名称和结构相同。我什至尝试 rbind 这两个数据帧,但错误仍然存​​在。

代码如下:

model3 <- lm(log(Poverty.Line.Day) ~ (log(data_abs$Median)) + 
              Welfare.Measurment + Control, data=data_abs)

predicted_poverty_Line <- 
  exp(predict(model3, dataF))*exp((summary(model3)$sigma)^2/2)

lm中,当使用data=参数时,不要在公式中使用$

fit1 <- lm(y ~ train$X1 + X2, data=train)  ## predict will fail
predict(fit1, newdata=test)
# Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = obje
# ct$xlevels) : 
#   variable lengths differ (found for 'X2')

fit2 <- lm(y ~ X1 + X2, data=train)  ## predict will work
predict(fit2, newdata=test)

原因: 如果您使用例如公式中的train$X1,变量将是固定的,即使你在predict中提供newdata=,也会使用旧值。如果矢量不是偶然的相同长度,你会得到这个错误。


数据:

n <- 60
set.seed(42)
dat <- data.frame(X1=rnorm(n), X2=rnorm(n))
dat <- transform(dat, y=1 + X1 + rnorm(n))
train <- dat[1:20, ]
test <- dat[21:n, ]