在下面的代码中,为什么R与lm.predict函数的行为异常?

在下面的代码中,为什么R与lm.predict函数的行为异常?,r,linear-regression,R,Linear Regression,我对下面的代码有一个问题,我正在努力理解: 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(obj

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

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)
x=rnorm(50)
y=3*x+rnorm(50)

df_eq从R的角度来看,你手上的
predict.lm
对象
model2
。它说,“好的,我这里有一个
lm
对象。变量名是什么?”

嗯。响应变量称为
df_eq[,2]
,预测变量称为
df_eq[,1]
。现在,R想:“我应该在
xpred
中找到这些变量(或者至少是预测值)。”

嗯。里面没有这个名字

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

通常,适合模型的正确习惯用法(
lm
或其他)如下:

lm(y ~ x, data = df_eq)

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

跟我重复:在公式中仅使用数据帧列的名称(或其简单函数、
log
sqrt
等)!你能详细说明一下吗?看起来model2产生了合理的结果,但很明显后来会搞砸?
lm(y ~ x, data = df_eq)