在高维数据集上运行以下代码时,出现错误消息
coef(summary(fit))[2,4]中的错误:下标超出范围
将逻辑回归模型的p值保存到的向量 beta
的长度为19481。如果我遍历回归模型的不同自变量达100次,则不会得到这个错误。
谁能给我提示为什么我的代码运行不流畅?
beta = rep(0,19481)
为(我在25:19505中){
适合= glm(mdr.mdr〜an.mdr [,i],family = binomial)
beta [i-24] = coef(summary(fit))[2,4]
}
答案 0 :(得分:1)
当您尝试提取系数表的[2,4]
元素(即斜率的p值)时出现错误,我敢肯定您对斜率的估计为NA
。 / p>
这意味着对于某些i
,您的模型缺乏等级,并且没有任何信息可以估算斜率。
请注意,coef(summary(fit))
将丢弃NA
估计值,因此在这种情况下,系数表只有一行而不是两行(这说明了“越界”错误)。参见Coefficient table does not have NA rows in rank-deficient fit; how to insert them?
我建议以下内容:
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]
}
此循环的另一个潜在失败是“没有完整的情况”,即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]
}
}
答案 1 :(得分:0)
运行循环,然后在循环停止时在控制台中键入i
,然后按Enter。这将告诉您该循环在哪个循环迭代中失败。然后检查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] }
}