【发布时间】:2015-04-23 13:32:24
【问题描述】:
我一直在尝试在 R 中拟合 sequential 多项式回归模型,但遇到了以下问题:虽然poly(x) 提供了一种快速方法,但该函数不遵守分层原则,大致指出在移动到高阶之前,所有低阶项都应该包含在模型中。
这里有一个解决方案,可能是自己手动选择进入模型的顺序,就像我对下面的玩具数据集所做的那样
pred<-matrix(c(rnorm(30),rnorm(30)),ncol=2)
y<-rnorm(30)
polys<-poly(pred,degree=4,raw=T)
z<-matrix(c(
#order 2
polys[,2],polys[,6],polys[,9],
#order 3
polys[,3],polys[,7],polys[,10],polys[,12],
#order 4
polys[,4],polys[,8],polys[,11],polys[,13],polys[,14]),
ncol=12)
polyreg3<-function(x){
BICm<-rep(0,dim(x)[2])
for(i in 1:dim(x)[2]){
model<-lm(y~pred[,1]+pred[,2]+x[,1:i]) #include one additional term each time
BICm[i]<-BIC(model)
}
list(BICm=BICm)
}
polyreg3(z)
which.min(polyreg3(z)$BICm)
但这对于较大次数的多项式在很大程度上是不切实际的。我当时想知道,有没有办法解决这个问题,最好是通过修改我的代码?
【问题讨论】:
-
for循环最好在R中避免。删除你的循环将是一回事。有很多关于如何在 SO 上执行此操作的示例(例如 here's a more generic example 或 one where somebody is applying a lm to a data.frame。此外,您可能希望使用 profr package 分析您的代码以找到您的瓶颈。 -
@RichardErickson 感谢您的建议,尽管它们不是我目前最紧迫的问题。
标签: r statistics