我正在尝试使用 R 来拟合线性模型并进行预测。我的模型包括一些不在数据框中的常量边参数。这是我正在做的简化版本:
dat <- data.frame(x=1:5,y=3*(1:5))
b <- 1
mdl <- lm(y~I(b*x),data=dat)
不幸的是,模型对象现在遇到了一个危险的范围问题:lm()
不保存b
为的一部分mdl
,所以当predict()
被调用时,它必须回到b
定义的环境中。因此,如果后续代码改变 的值b
,预测值也会改变:
y1 <- predict(mdl,newdata=data.frame(x=3)) # y1 == 9
b <- 5
y2 <- predict(mdl,newdata=data.frame(x=3)) # y2 == 45
如何强制predict()
使用原始b
值而不是更改后的值?或者,是否有某种方法可以控制predict()
变量的查找位置,以便我可以确保它获得所需的值?实际上,我不能将b
其作为newdata
数据框的一部分包含在内,因为在我的应用程序中,b
它是一个参数向量,其大小与新观察的数据框的大小不同。
请注意,相对于我的实际用例,我已经大大简化了这一点,所以我需要一个强大的通用解决方案,而不仅仅是临时黑客。