为什么我的线性回归模型在 r 中给出不同的预测结果?

Why are my linear regression models giving me different prediction results in r?

我在 r 中使用线性回归模型,特别是获取我的变量的对数,然后根据模型进行预测。我 运行 遇到了一个小问题,但我很好奇发生了什么。为简单起见,假设我有一个变量和响应。我记录了两个变量的日志,但我按以下方式格式化它们:

m1<-lm(log(response)~log(variable))

log_response<- log(response)
log_variable<- log(variable)
m2<- lm(log_response~log_variable)

两个模型摘要产生相同的输出,所以我假设这两个模型是等价的。但是,当我尝试进行预测时,出现 m2 错误。

newdata<-data.frame(variable=2)
predict(m1, newdata, interval="predict")
predict(m2, newdata, interval="predict")

使用它,m1 的预测将产生准确的输出,但 m2 将 return 看起来像

的错误

Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = object$xlevels) : variable lengths differ (found for 'log_variable') In addition: Warning message: 'newdata' had 1 row but variables found have 805 rows

我在创建日志变量时是否犯了一些错误?

你提供的错误很清楚。您需要在 newdata 中指定对应于 m2 的条款。在这种情况下 log_variable 而不是 variable。我认为以下应该有效。

m1 <- lm(log(response) ~ log(variable))

log_response <- log(response)
log_variable <- log(variable)
m2 <- lm(log_response ~ log_variable)

newdata <- data.frame(variable = 2)
newdata2 <- data.frame(log_variable = log(2))
predict(m1, newdata, interval = "predict")
predict(m2, newdata2, interval = "predict")

概念验证(使用玩具数据)

m1 <- lm(log(mpg) ~ log(wt), data = mtcars)

log_response <- log(mtcars$mpg)
log_variable <- log(mtcars$wt)
m2 <- lm(log_response ~ log_variable)

newdata <- data.frame(wt = 2)
newdata2 <- data.frame(log_variable = log(2))
pred1 <- predict(m1, newdata, interval = "predict")
pred2 <- predict(m2, newdata2, interval = "predict")

#> identical(pred1, pred2)
#[1] TRUE