广义加性模型中的两个预测因子?

时间:2014-09-06 20:03:11

标签: r

当我使用具有两个预测变量的广义加法模型时,我可以使用以下两个命令,

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

我怎样才能让它发挥作用?

2 个答案:

答案 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中的逗号分隔的平滑,您告诉它使用交互对这两个词进行建模。