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

问题描述:

我希望我的嵌套循环没有返回我期望的值。我是嵌套循环新手,请耐心等待。我想为逻辑回归模型计算一个新的自变量,该模型基于原始变量的不同计算。具体来说,我有六个变量“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) 
    } 
    } 
} 

我想以“probs 11倍提供的值(0,0.1%,0.2 .... 0.9,1)的序列“分位数函数的论点,我想为每个可能的分位数参数估计(11 * 11 * 11)得到AIC。因此最后的AIC变量应该是一个121值的数字向量。但是,当我运行上面的代码时,我得到AIC的空数值。我怎样才能让这段代码正常运行并为我提供所有可能的121个模型的值?

谢谢!

编辑:这不是解决方案,但提供了我认为的答案的一部分。在我以前的代码中,“n”小于1,所以它只执行一次迭代,(显然)“n”需要大于1。之前不到1的原因是分位数的“probs”参数需要0到1之间的值。结果是,传递给参数probs的参数现在除以10。现在使用AIC [1] i可以获得10%的载体,但我还是不要“不懂如何获得完整的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) 
    } 
    } 
} 

首先,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 
     } 
+0

非常感谢!在最后的阵列中,我怎样才能确定哪个维度对应于i,j和k? –

+0

'i'和'j'先跑,然后跑'k'。例如,参见'array(1:24,dim = 2:4)'的结果。 –