循环回归但得到"Error in coef(summary(fit))[2, 4] : subscript out of bounds"
Regression in a loop but get "Error in coef(summary(fit))[2, 4] : subscript out of bounds"
当运行在高维数据集上运行以下代码时,我收到错误消息
Error in coef(summary(fit))[2, 4] : subscript out of bounds
逻辑回归模型的 p 值保存到的向量 beta
的长度为 19481。如果我循环遍历回归模型的不同自变量最多 100 次,我不会得到这个错误。
谁能提示我为什么我的代码 运行 不流畅?
beta = rep(0, 19481)
for (i in 25:19505) {
fit = glm(mdr.mdr ~ an.mdr[,i], family=binomial)
beta[i-24] = coef(summary(fit))[2,4]
}
当您尝试提取系数 table 的 [2,4]
元素时出现错误,即斜率的 p 值,我确定您有 NA
坡度估计值。
这意味着对于某些 i
,您的模型排名不足,没有信息来估计斜率。
请注意,coef(summary(fit))
会降低 NA
估计值,因此在这种情况下,您的系数 table 只有一行而不是两行(这解释了 "out-of-bound"错误)。参见
我建议如下:
beta = rep(NA, 19481)
for (i in 25:19505) {
fit = glm(mdr.mdr ~ an.mdr[,i], family = binomial)
slope <- coef(fit)[2]
if (!is.na(slope)) beta[i-24] = coef(summary(fit))[2,4]
}
此循环的另一个潜在失败是 "no complete cases",即 sum(complete.cases(mdr.mdr, an.mdr[, i]))
给你 0。如果确实发生这种情况,你可能需要:
beta = rep(NA, 19481)
for (i in 25:19505) {
if (sum(complete.cases(mdr.mdr, an.mdr[, i])) > 0) {
fit = glm(mdr.mdr ~ an.mdr[,i], family = binomial)
slope <- coef(fit)[2]
if (!is.na(slope)) beta[i-24] = coef(summary(fit))[2,4]
}
}
运行 循环,当循环停止时,在控制台中输入 i
并按回车键。这将告诉您循环失败的循环迭代。然后检查 an.mdr[,i]
是否有任何意外
试试这个:
beta = rep(0, 19481)
for (i in 25:19505) {
fit = glm(mdr.mdr ~ an.mdr[,i], family=binomial)
if (is.na(coef(summary(fit))[2,4]) { beta[i-24] = NA }
if (!is.na(coef(summary(fit))[2,4]) { beta[i-24] = coef(summary(fit))[2,4] }
}
当运行在高维数据集上运行以下代码时,我收到错误消息
Error in coef(summary(fit))[2, 4] : subscript out of bounds
逻辑回归模型的 p 值保存到的向量 beta
的长度为 19481。如果我循环遍历回归模型的不同自变量最多 100 次,我不会得到这个错误。
谁能提示我为什么我的代码 运行 不流畅?
beta = rep(0, 19481)
for (i in 25:19505) {
fit = glm(mdr.mdr ~ an.mdr[,i], family=binomial)
beta[i-24] = coef(summary(fit))[2,4]
}
当您尝试提取系数 table 的 [2,4]
元素时出现错误,即斜率的 p 值,我确定您有 NA
坡度估计值。
这意味着对于某些 i
,您的模型排名不足,没有信息来估计斜率。
请注意,coef(summary(fit))
会降低 NA
估计值,因此在这种情况下,您的系数 table 只有一行而不是两行(这解释了 "out-of-bound"错误)。参见
我建议如下:
beta = rep(NA, 19481)
for (i in 25:19505) {
fit = glm(mdr.mdr ~ an.mdr[,i], family = binomial)
slope <- coef(fit)[2]
if (!is.na(slope)) beta[i-24] = coef(summary(fit))[2,4]
}
此循环的另一个潜在失败是 "no complete cases",即 sum(complete.cases(mdr.mdr, an.mdr[, i]))
给你 0。如果确实发生这种情况,你可能需要:
beta = rep(NA, 19481)
for (i in 25:19505) {
if (sum(complete.cases(mdr.mdr, an.mdr[, i])) > 0) {
fit = glm(mdr.mdr ~ an.mdr[,i], family = binomial)
slope <- coef(fit)[2]
if (!is.na(slope)) beta[i-24] = coef(summary(fit))[2,4]
}
}
运行 循环,当循环停止时,在控制台中输入 i
并按回车键。这将告诉您循环失败的循环迭代。然后检查 an.mdr[,i]
是否有任何意外
试试这个:
beta = rep(0, 19481)
for (i in 25:19505) {
fit = glm(mdr.mdr ~ an.mdr[,i], family=binomial)
if (is.na(coef(summary(fit))[2,4]) { beta[i-24] = NA }
if (!is.na(coef(summary(fit))[2,4]) { beta[i-24] = coef(summary(fit))[2,4] }
}