循环回归但得到"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] }
  }