当我使用具有两个预测变量的广义加法模型时,我可以使用以下两个命令,
lm4 = gam(X3 ~ s(X1) + s(X2),data=pairmin2)
lm41 = gam(X3 ~ s(X1,X2), data=pairmin2)
这两个命令有何不同?
第二个问题是关于这个GAM的预测。 首先,我定义了' y12'应该评估拟合模型。
x1 = x2 = seq(0.01,0.99,0.01)
y12 = data.frame(expand.grid(x1,x2))
pred4 = predict(lm4,y12)
pred41 = predict(lm41,y12)
第一个命令' pred4'运作良好,但第二个' pred41'出现以下错误。
Error in storage.mode(df) <- "double" : object 'X2' not found
我怎样才能让它发挥作用?
答案 0 :(得分:2)
通常,您想一次只问一个问题。关于两次调用之间区别的第一个问题似乎是一种方法论问题,可能更适合[stats.se]。此外,如果您提供一个可重复的例子(我将不得不做以回答您的第二个问题),它会更容易帮助。
至于你的预测调用失败的原因,你应该传入一个data.frame,它具有与用于使数据拟合到newdata=
参数的模型相同的变量名。使用expand.grid
时,会重新命名变量。这是创建两个不同拟合的可重现示例
set.seed(2) ## simulate some data...
dat <- gamSim(1,n=400,dist="normal",scale=2)
lm4<-gam(y~s(x1)+s(x2),data=dat)
lm41<-gam(y~s(x1, x2),data=dat)
现在我们可以使用
预测这些模型x1 = x2 = seq(0.01,0.99,0.01)
y12 = data.frame(expand.grid(x1=x1,x2=x2)) #note the naming here
pred4 = predict(lm4,y12)
pred41 = predict(lm41,y12)
我们会得到不同的结果
head(pred4)
# 1 2 3 4 5 6
# 2.571626 2.590161 2.608700 2.627249 2.645825 2.66444
head(pred41)
# 1 2 3 4 5 6
# 4.392093 4.286727 4.172413 4.049871 3.920065 3.784201
答案 1 :(得分:0)
关于你的第一个问题:
lm4 = gam(X3 ~ s(X1) + s(X2),data=pairmin2)
lm41 = gam(X3 ~ s(X1,X2), data=pairmin2)
通过将两个协变量组合成一个由lm41
中的逗号分隔的平滑,您告诉它使用交互对这两个词进行建模。