为什么我的线性回归模型在 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
我在 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