嵌套循环不返回期望值:从多个重新计算的自变量返回模型结果
我希望我的嵌套循环没有返回我期望的值。我是嵌套循环新手,请耐心等待。我想为逻辑回归模型计算一个新的自变量,该模型基于原始变量的不同计算。具体来说,我有六个变量“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
}
非常感谢!在最后的阵列中,我怎样才能确定哪个维度对应于i,j和k? –
'i'和'j'先跑,然后跑'k'。例如,参见'array(1:24,dim = 2:4)'的结果。 –