0

我有模型lm(y~x+I(log(x)),我想根据我的模型predict来预测包含 的新值的新数据框x。predict 如何处理I模型中的 AsIs 函数?是否I(log(x))需要在 of 的newdata参数中额外指定predictpredict理解它应该构造和使用I(log(x))from x

更新

@DWin:变量进入模型的方式会影响系数,尤其是对于交互作用。我的例子很简单,但试试这个

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)

您会看到 lm1=lm3,但 lm2 有所不同(只有 1 个系数)。假设您不想创建虚拟变量z(对于大型数据集计算效率低下),构建像 lm3 这样的交互模型的唯一方法是使用I. 同样,这是一个非常简单的示例(可能没有统计意义),但它在复杂模型中是有意义的。

@Ben Bolker:我想避免猜测并尝试寻求权威答案(我无法直接用我的模型检查这一点,因为它们比示例复杂得多)。我的猜测是predict正确地假设并构建I(log(x))

4

1 回答 1

3

你不需要让你的变量名看起来像 term 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)) 或仅使用 I(log(x)) 构建,log(x)您应该得到相同的模型。predict如果您使用,它们都将正确转换为预测值:

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

使用poly将保护您免受因使用I(x^2).

于 2013-01-21T23:05:18.770 回答