如何在R中实现这种模型选择算法?

时间:2013-03-17 22:40:09

标签: r statistics mgcv

我有一个复杂的半参数模型,我适合R。我从一个基于理论的模型开始。它有很多互动条款。我想把它弄清楚:逐个删除每个交互术语或不相互作用的主效应,检查AIC,并保留给我最低AIC的模型。然后我想在保留的模型上重复这个过程。

这是一个简单的例子:

set.seed(42)
library(mgcv)
N=220
fac = ceiling(runif(N)*2)
a = rnorm(N); b = rnorm(N); c = rnorm(N); d = runif(N); e = rnorm(N); 
y = a^fac + b*e + d/(e+1)

m1 = gam(y~     as.factor(fac)
+   s(a)
+   s(b)
+   s(c)
+   s(d)
+   te(a,b,c)   
+   te(a,d,by=as.factor(fac))
)

m2 = gam(y~     as.factor(fac)
+   s(a)
+   s(b)
+   s(c)
+   s(d)
+   te(b,c) 
+   te(a,d,by=as.factor(fac))
)

m3 = gam(y~     as.factor(fac)
+   s(a)
+   s(b)
+   s(c)
+   s(d)
+   te(a,c) 
+   te(a,d,by=as.factor(fac))
)

m4 = gam(y~     as.factor(fac)
+   s(a)
+   s(b)
+   s(c)
+   s(d)
+   te(a,b) 
+   te(a,d,by=as.factor(fac))
)

m5 = gam(y~     as.factor(fac)
+   s(a)
+   s(b)
+   s(c)
+   s(d)
+   te(a,b,c)   
+   te(d,by=as.factor(fac))
)

m6 = gam(y~     as.factor(fac)
+   s(a)
+   s(b)
+   s(c)
+   s(d)
+   te(a,b,c)   
+   te(a,by=as.factor(fac))
)

m7 = gam(y~     as.factor(fac)
+   s(a)
+   s(b)
+   s(c)
+   s(d)
+   te(a,b,c)   
+   te(a,d)
)

selection = AIC(m1,m2,m3,m4,m5,m6,m7)
selection

df AIC

m1 14.53435 1626.611

m2 12.52501 1622.635

m3 12.54566 1622.615

m4 12.52652 1622.633

m5 13.14108 1620.759

m6 10.99684 1621.156

m7 10.98136 1622.229

m5是最好的

m5 = gam(y~     as.factor(fac)
+   s(a)
+   s(b)
+   s(c)
+   s(d)
+   te(a,b,c)   
+   te(d,by=as.factor(fac))
)

m5.1 = gam(y~   as.factor(fac)
+   s(a)
+   s(b)
+   s(c)
+   s(d)
+   te(b,c) 
+   te(d,by=as.factor(fac))
)

m5.2 = gam(y~   as.factor(fac)
+   s(a)
+   s(b)
+   s(c)
+   s(d)
+   te(a,c) 
+   te(d,by=as.factor(fac))
)
m5.3 = gam(y~   as.factor(fac)
+   s(a)
+   s(b)
+   s(c)
+   s(d)
+   te(a,b) 
+   te(d,by=as.factor(fac))
)

m5.4 = gam(y~   as.factor(fac)
+   s(a)
+   s(b)
+   s(c)
+   s(d)
+   te(a,b,c)   
#+  te(d,by=as.factor(fac))
)

selection.2 = AIC(m5,m5.1,m5.2,m5.3,m5.4)
selection.2

df AIC

m5 13.363029 1621.183

m5.1 9.671656 1617.641

m5.2 9.730047 1617.549

m5.3 9.706424 1617.569

m5.4 9.857504 1620.028

5.2是最好的

......等等。接下来我将在m5.2中尝试每个交互项或不相互作用的主效应。问题是我如何自动化这个?从模型开始(m1,在我的例子中),并且在运行此算法之后让R给我最好的模型,根据这个算法,不再有任何“更好”的模型?

现在我可以手动完成,但随着时间的推移添加数据,模型选择可能会发生变化。

提前感谢任何提示。

0 个答案:

没有答案