首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用for循环优化GAM模型

使用for循环优化GAM模型
EN

Stack Overflow用户
提问于 2021-12-16 10:45:51
回答 1查看 77关注 0票数 0

我需要使用三个变量:"Life_expectancy“、"Adult_Mortality”和"HIV_AIDS“来对变量”HIV_AIDS“执行GAM。为了优化GAM模型,我需要为每个变量找到自由度的完美组合。为此,我需要在另一个循环中创建一个for循环,以找到所有变量的最佳组合,例如在3个循环中运行以下命令,一个用于i,一个用于j,另一个用于k:

代码语言:javascript
复制
gam.fit <- gam(Life_expectancy ~ + s(Adult_Mortality, df = i) + s(HIV_AIDS, df = j) + s(Schooling, df = k), data=train)

对于i,j,k的每个组合,每次计算测试误差。最后,选择测试误差最小的模型。我试着用下面的代码做这件事:

代码语言:javascript
复制
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的每一个组合的自由度?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-16 11:25:03

代码可以修改为:

代码语言:javascript
复制
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)
    }}}

关于该方法的几个注意事项:

  1. 您还没有说您使用过哪个gam函数,在包gammgcv中有一些函数,可能还有其他函数。后者可以根据训练集(
  2. )来估计适当的自由度--您似乎是根据测试数据集的拟合来估计自由度,这在某种程度上违背了拥有单独的培训和测试数据集的想法。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70377664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档