1
我一直试图在R中拟合顺序多项式回归模型,并且遇到了以下问题:poly(x)
提供了一种快速方法,该函数不考虑分层原则,在转向更高的订单之前,所有的低阶条款都应该包含在模型中。R中的分层多项式回归
一个解决方案在这里,可能是入口的顺序精选到模型自己,因为我有一个玩具数据集做了下面
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的例子(例如[这里是一个更通用的例子](http://stackoverflow.com/questions/4894506/avoid-two-for-loops-in-r)或[one在哪里有人正在应用lm到data.frame](http://stackoverflow.com/questions/27539033/r-apply-lm-on-each-data-frame-row)。此外,你可能希望描述你的代码找到你的瓶颈与[profr包](http://cran.r-project.org/web/packages/profr/index.html)。 –
@RichardErickson感谢您的建议,虽然他们不是我最目前迫切担忧。 – JohnK