【发布时间】:2017-07-25 10:14:39
【问题描述】:
我想要一些关于我的嵌套循环的帮助,它没有返回我期望的值。我是嵌套循环的新手,所以请多多包涵。我想为基于原始变量的不同计算的逻辑回归模型计算一个新的自变量。具体来说,我有六个变量“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 变量应该是 121 个值的数值向量。但是,当我运行上述代码时,我得到 AIC 的空数值。我怎样才能让这段代码正常运行并为我提供所有可能的 121 模型的值?
谢谢!
编辑:这不是解决方案,但提供了我认为的部分答案。在我之前的代码中,“n”小于一,所以它只执行一次迭代,(显然)“n”需要大于一。之前它小于 1 的原因是 quantile 的“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)
}
}
}
【问题讨论】:
标签: r parameter-passing nested-loops