gpt4 book ai didi

r - 为什么 R 在以下代码中使用 lm.predict 函数时表现异常?

转载 作者:行者123 更新时间:2023-12-01 09:14:30 24 4
gpt4 key购买 nike

我对下面的代码有疑问,我正在努力理解:

x = rnorm(50)
y = 3 * x +rnorm(50)

df_eq <- data.frame(x, y)

model1 <- lm(y ~ x - 1)
model2 <- lm(df_eq[,2] ~ df_eq[,1] - 1)

xpred <- data.frame(x = seq(from = -2, to = 2, length = 5))

ypred <- predict(object = model1, newdata = xpred)
ypred2 <- predict(object = model2, newdata = xpred)

在上面的代码中,我希望 ypred 和 ypred2 产生相同的结果。我在 ypred 中得到了我期望的答案(5 个预测的“yhat”值),但是 ypred2 有一个错误,并且没有产生预期的结果。

谁能解释为什么在下面的代码中 ypred2 会产生错误(至少在 R 2.15.2 中)?

我认为代码中唯一的关键区别在于生成“model1”和“model2”的方式。

我的理解是,在 predict 函数中,newdata 根据存储在 model1 和 model2 对象中的模型生成我们想要为其预测“yhat”值的新观察集。

有什么根本的不同

模型 1 <- lm(y ~ x - 1)

model2 <- lm(df_eq[,2] ~ df_eq[,1] - 1) ?

更重要的是,如果答案很简单,有人能解释一下他们是如何从 R 的“幕后”找出差异的吗?很高兴知道我将来如何理解这类问题。我已尝试查看上述代码中对象的结构,但离答案还差得很远。

提前谢谢你。

最佳答案

从 R 的角度来看,您将对象 model2 交给了 predict.lm。它说,“好的,我这里有一个 lm 对象。变量名是什么?”

> formula(model2)
df_eq[, 2] ~ df_eq[, 1] - 1

好的。响应变量调用 df_eq[, 2] 预测变量调用 df_eq[, 1]。现在,R 认为:“我应该在 xpred 中找到那些变量(或至少是预测变量)”。

嗯嗯。里面没有那个名字。

实际警告是由 model.frame.default 抛出的,我相信,在尝试构建适当的模型框架时,并在此过程中回退到用于拟合模型的原始数据值.

通常(lm 或其他)拟合模型的正确习惯用法是这样的:

lm(y ~ x, data = df_eq)

不要依赖 R 获取全局环境中对象的名称。指定具有相关列的数据框,并在公式中使用这些列名称!

关于r - 为什么 R 在以下代码中使用 lm.predict 函数时表现异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15887139/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com