predict如何处理包含AsIs功能的模型?

predict如何处理包含AsIs功能的模型?,r,modeling,predict,R,Modeling,Predict,我有一个模型lm(y~x+I(log(x)),我想使用predict根据我的模型得到一个新数据帧的预测,该数据帧包含x的新值。predict如何处理模型中的AsIs函数I需要在predict的newdata参数中额外指定,或者predict是否理解它应该从x构造并使用I(log(x)) 更新 @在模型中输入变量的方式会影响系数,特别是在交互作用中。我的例子过于简单,但请尝试一下 x<-rep(seq(0,100,by=1),10) y<-15+2*rnorm(1010,10,4)*x

我有一个模型
lm(y~x+I(log(x))
,我想使用
predict
根据我的模型得到一个新数据帧的预测,该数据帧包含
x
的新值。predict如何处理模型中的AsIs函数
I
需要在
predict
newdata
参数中额外指定,或者
predict
是否理解它应该从
x
构造并使用
I(log(x))

更新

@在模型中输入变量的方式会影响系数,特别是在交互作用中。我的例子过于简单,但请尝试一下

x<-rep(seq(0,100,by=1),10)
y<-15+2*rnorm(1010,10,4)*x+2*rnorm(1010,10,4)*x^(1/2)+rnorm(1010,20,100)
z<-x^2

plot(x,y)
lm1<-lm(y~x*I(x^2))
lm2<-lm(y~x*x^2)
lm3<-lm(y~x*z)


summary(lm1)
summary(lm2)
summary(lm3)

x您不需要使变量名看起来像术语
I(x)
。只需在newdata参数中使用“x”

lm(y~x*I(x^2))
lm(y~x*x^2)
不同的原因是“^”和“*”是R中公式的保留符号。
log
函数并非如此。只有
I()才能构造交互也是不正确的
。如果你想要R中的二次多项式,你应该使用
poly(x,2)
。如果你使用I(log(x))或
log(x)
构建,你应该得到相同的模型。如果你使用以下方法,它们都将通过
predict
正确转换为预测值:

newdata=dataframe( x=seq( min(x), max(x), length=10) )

使用
poly
可以防止由于使用
I(x^2)
而导致的错误推断。您不需要使变量名看起来像术语
I(x)
。只需在newdata参数中使用“x”

lm(y~x*I(x^2))
lm(y~x*x^2)
不同的原因是“^”和“*”是R中公式的保留符号。
log
函数并非如此。只有
I()才能构造交互也是不正确的
。如果你想要R中的二次多项式,你应该使用
poly(x,2)
。如果你使用I(log(x))或
log(x)
构建,你应该得到相同的模型。如果你使用以下方法,它们都将通过
predict
正确转换为预测值:

newdata=dataframe( x=seq( min(x), max(x), length=10) )


使用
poly
可以避免由于使用
I(x^2)

而导致的错误推断,在使用“predict”时,要使数据帧名称正确是很困难的。请构造一个小示例。为什么不在一个小示例上尝试一下,看看它是否能按预期工作??(这就是我必须要做的。我猜你公式中RHS上的所有变量,无论是否受
I()
保护,都需要在
newdata
中指定)此外,我甚至不确定你是否需要使用
I()
带有“log”。请查看我更新的问题以及您评论的答案。问题是,我怀疑除了源代码之外,没有权威的答案,请仔细阅读文档[我不认为这会在任何地方明确说明,但如果把它们放在一起,例如,
?predict
?I
]和实验,可能是可以推断的。如果你运气好的话,你会得到“个人交流”(比如“我经常这样做,而且似乎很有效”)。我认为这会提高问题的质量“这里有一个例子,它似乎有效,但有人能说这在一般情况下是否可靠吗?”当您使用“预测”时,要使data.frame名称正确可能会很棘手。请构造一个小例子。为什么不在一个小例子上试一下,看看它是否能按预期工作??(这就是我必须要做的。我猜你公式中RHS上的所有变量,无论是否受
I()
保护,都需要在
newdata
中指定)此外,我甚至不确定你是否需要使用
I()
带有“log”。请查看我更新的问题以及您评论的答案。问题是,我怀疑除了源代码之外,没有权威的答案,请仔细阅读文档[我不认为这会在任何地方明确说明,但如果把它们放在一起,例如,
?predict
?I
]和实验,可能是可以推断的。如果你运气好的话,你会得到“个人交流”(比如“我经常这样做,而且似乎很有效”)。我认为这会提高问题的质量。”这里有一个例子,它似乎是有效的,但有人能说这在一般情况下是否可靠吗?“在我看来,
I
在复杂模型中似乎更灵活?还有什么方法可以“动态”指定一个模型,例如y~x+z+I(log(x)*z^2)并在不产生伪变量的情况下获得相应的系数?为什么期望
log(x)
只与
I(z^2)交互
而不是线性项?当人们想要构造没有主要影响的交互项时,这实际上是一个相同的问题。通常这种努力源于统计模型构造的错误观念。构造无意义的模型应该是困难的。这更有意义:
y~log(x)*poly(z,2)
。虽然我在统计模型构建部分同意你的观点,并且我理解你的意思,但我的问题特别是问
predict
如何处理
I
,而与统计模型构建和选择的考虑因素无关。所提供的模型是我的案例。我认为rt已经得到了回答,但我想我已经偏离了方向。您不需要让变量名看起来像术语
I(x)
。只需使用“x”“在newdata参数中。谢谢。请相应地编辑您的答案,以便我可以将其标记为已回答。但在我看来,
I
在复杂模型中似乎更灵活?否则如何指定“动态”模型,例如y~x+z+I(log(x)*z^2)并获得尊重