嵌套循环不返回预期值:从多个重新计算的独立变量中返回模型结果

时间:2017-07-25 10:14:39

标签: r parameter-passing nested-loops

我想帮助我的嵌套循环没有返回我期望的值。我是嵌套循环的新手,所以请耐心等待。我想为逻辑回归模型计算一个新的自变量,该模型基于原始变量的不同计算。具体来说,我有六个变量" x1 ... x6"然后我通过从原始变量对中提取百分位数来创建三个新变量(newvar1,newvar2,newvar3)。从这三个新变量中我然后通过减法将它们组合起来形成最终的新变量,该变量形成逻辑回归模型的自变量。然后由逻辑回归模型的AIC评估该最终变量的值。

我需要确定形成newvar2,newvar2和newvar3的百分位数值的最佳组合,这给了我最好的逻辑回归模型。为此,我尝试创建一个三级嵌套:

df <- data.frame(x1 <- rnorm(100),
             x2 <- rnorm(100),
             x3 <- rnorm(100),
             x4 <- rnorm(100),
             x5 <- rnorm(100),
             x6 <- rnorm(100),
             y <- as.factor(runif(100)<=.70))

n = 1
AIC = NULL
for (i in 0.1:n){
  for (j in 0.1:n){
    for (k in 0.1:n){
      df$newvar1 <-apply(df[,1:2], 1, quantile, probs = i, na.rm = T)
      df$newvar2 <-apply(df[,3:4], 1, quantile, probs = j, na.rm = T)
      df$newvar3 <-apply(df[,5:6], 1, quantile, probs = k, na.rm = T)
      df$finalvar <- df$newvar1 - df$newvar2 - df$newvar3
      model <- glm(y ~ finalvar, data = df, family = "binomial")
      AIC[i] <- as.numeric(model$aic)
    }
  }
}

我想向&#34; probs&#34;提供一系列11个值(0,0.1,0.2 .... 0.9,1)。分位数函数的参数,我想获得每个可能的分位数参数估计(11 * 11 * 11)的AIC。因此,最后的AIC变量应该是121个值的数值向量。但是,当我运行上面的代码时,我得到AIC的空数值。如何正确运行此代码并为我提供所有可能的121个型号的值?

谢谢!

编辑:这不是解决方案,但提供了我认为的部分答案。在我之前的代码&#34; n&#34;不到一个所以它只执行一次迭代,(显然)&#34; n&#34;需要大于一个。之前不到1的原因是&#34; probs&#34;分位数的参数需要0和1之间的值。结果,传递给参数probs的参数现在除以10.现在使用AIC [1]我可以得到10的向量,但我仍然没有&#34;了解如何获得代表所有组合的完整10 * 10 * 10(或11 * 11 * 11)。

新代码:

 n = 10
 AIC = NULL
 for (i in 1:n){
   for (j in 1:n){
     for (k in 1:n){
       df$newvar1 <-apply(df[,1:2], 1, quantile, probs = i/10, na.rm = T)
       df$newvar2 <-apply(df[,3:4], 1, quantile, probs = j/10, na.rm = T)
       df$newvar3 <-apply(df[,5:6], 1, quantile, probs = k/10, na.rm = T)
       df$finalvar <- df$newvar1 - df$newvar2 - df$newvar3
       model <- glm(y ~ finalvar, data = df, family = "binomial")
       AIC[i] <- as.numeric(model$aic)
     }
   }
 }

1 个答案:

答案 0 :(得分:2)

首先,AIC是一个R函数,因此我将名称更改为aic。 其次,在代码的最内层循环中,只有i才有索引,当你有3个索引时。也许这就是你真正需要的。

n = 10
aic = array(0, dim = c(n, n, n))  # changed
for(...)
    for(...)
        for(...){
            [...]
            aic[i, j, k] <- as.numeric(model$aic)  # changed
        }