嵌套循环没有 return 预期值:Return 模型结果来自多个重新计算的自变量
Nested loop doesn't return expected values: Return model results from multiple recalculated independent variables
我需要一些关于我的嵌套循环的帮助,它没有返回我期望的值。我是嵌套循环的新手,所以请多多包涵。我想为逻辑回归模型计算一个新的自变量,该模型基于对原始变量的不同计算。具体来说,我有六个变量 "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),我想获得 AIC对于每个可能的分位数参数估计 (11*11*11)。因此,最终的 AIC 变量应该是一个包含 121 个值的数值向量。但是,当我 运行 上面的代码时,我得到一个空的 AIC 数值。我怎样才能正确地获得此代码 运行 并为我提供所有可能的 121 个模型的值?
谢谢!
编辑:这不是解决方案,但提供了我认为的部分答案。在我之前的代码中,"n" 小于 1,因此它只执行一次迭代,(显然)"n" 需要大于 1。之前它小于 1 的原因是分位数的 "probs" 参数需要一个介于 0 和 1 之间的值。结束了,传递给参数 probs 的参数现在除以 10。现在有了 AIC[1 ] 我可以获得 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
。
其次,在您的代码的最内层循环中,当您有 3 个索引时,您仅按 i
进行索引。所以也许这就是您真正需要的。
n = 10
aic = array(0, dim = c(n, n, n)) # changed
for(...)
for(...)
for(...){
[...]
aic[i, j, k] <- as.numeric(model$aic) # changed
}
我需要一些关于我的嵌套循环的帮助,它没有返回我期望的值。我是嵌套循环的新手,所以请多多包涵。我想为逻辑回归模型计算一个新的自变量,该模型基于对原始变量的不同计算。具体来说,我有六个变量 "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),我想获得 AIC对于每个可能的分位数参数估计 (11*11*11)。因此,最终的 AIC 变量应该是一个包含 121 个值的数值向量。但是,当我 运行 上面的代码时,我得到一个空的 AIC 数值。我怎样才能正确地获得此代码 运行 并为我提供所有可能的 121 个模型的值?
谢谢!
编辑:这不是解决方案,但提供了我认为的部分答案。在我之前的代码中,"n" 小于 1,因此它只执行一次迭代,(显然)"n" 需要大于 1。之前它小于 1 的原因是分位数的 "probs" 参数需要一个介于 0 和 1 之间的值。结束了,传递给参数 probs 的参数现在除以 10。现在有了 AIC[1 ] 我可以获得 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
。
其次,在您的代码的最内层循环中,当您有 3 个索引时,您仅按 i
进行索引。所以也许这就是您真正需要的。
n = 10
aic = array(0, dim = c(n, n, n)) # changed
for(...)
for(...)
for(...){
[...]
aic[i, j, k] <- as.numeric(model$aic) # changed
}