我想编写一个循环,通过更改自由度来获得以下模型的最低AIC值,例如df=2
定义中的varknots1
。
我只是在这里使用随机数据,因为我不知道如何上传我的数据。我正在努力学习自己编写循环,但是,我目前从未成功地创建过这个循环。
这里的任何人都可以帮我解决这个问题吗?
library(dlnm)
library(splines)
A = rnorm(500)
B = rnorm(500)
C = rnorm(500)
D = rnorm(500)
varknots1 <- equalknots(B,fun="bs",df=5,degree=2)
lagknots1 <- logknots(24, 3)
cb1 <-crossbasis(B,lag=24,argvar=list(fun="bs",knots=varknots1),arglag=list(knots=lagknots1))
varknots2 <- equalknots(C,fun="bs",df=5,degree=2)
lagknots2 <- logknots(24, 3)
cb2 <- crossbasis(C, lag=24, argvar=list(fun="bs",knots=varknots2), arglag=list(knots=lagknots2))
model<-lm(A~cb1+cb2+D)
AIC(model)
答案 0 :(得分:2)
aic<-rep(NA,8)
for(i in 1:8){
varknots1 <- equalknots(B,fun="bs",df=(i+2),degree=2)
lagknots1 <- logknots(24, 3)
cb1 <-crossbasis(B,lag=24,argvar=list(fun="bs",knots=varknots1),arglag=list(knots=lagknots1))
varknots2 <- equalknots(C,fun="bs",df=(i+2),degree=2)
lagknots2 <- logknots(24, 3)
cb2 <- crossbasis(C, lag=24, argvar=list(fun="bs",knots=varknots2), arglag=list(knots=lagknots2))
aic[i]<-AIC(lm(A~cb1+cb2+D))
}