我需要使用三个变量:"Life_expectancy“、"Adult_Mortality”和"HIV_AIDS“来对变量”HIV_AIDS“执行GAM。为了优化GAM模型,我需要为每个变量找到自由度的完美组合。为此,我需要在另一个循环中创建一个for循环,以找到所有变量的最佳组合,例如在3个循环中运行以下命令,一个用于i,一个用于j,另一个用于k:
gam.fit <- gam(Life_expectancy ~ + s(Adult_Mortality, df = i) + s(HIV_AIDS, df = j) + s(Schooling, df = k), data=train)对于i,j,k的每个组合,每次计算测试误差。最后,选择测试误差最小的模型。我试着用下面的代码做这件事:
test.err <- rep(0, 8)
for (i in 3:10) {
for (j in 3:10) {
for (k in 3:10) {
gam.fit <- gam(Life_expectancy ~ + s(Adult_Mortality, df = i) +
s(HIV_AIDS, df = j) +
s(Schooling, df = k),
data=train)
gam.pred <- predict(gam.fit, test)
test.err[i-2] <- mean((test$Life_expectancy - gam.pred)^2)
}}}但这只会产生8次自由度测试误差,从3到10。我如何输出i,j,k的每一个组合的自由度?
发布于 2021-12-16 11:25:03
代码可以修改为:
test.err <- array(0, c(8,8,8))
for (i in 3:10) {
for (j in 3:10) {
for (k in 3:10) {
gam.fit <- gam(Life_expectancy ~ + s(Adult_Mortality, df = i) +
s(HIV_AIDS, df = j) +
s(Schooling, df = k),
data=train)
gam.pred <- predict(gam.fit, test)
test.err[i-2, j-2, k-2] <- mean((test$Life_expectancy - gam.pred)^2)
}}}关于该方法的几个注意事项:
gam函数,在包gam和mgcv中有一些函数,可能还有其他函数。后者可以根据训练集(https://stackoverflow.com/questions/70377664
复制相似问题