lm.wfit(x, y, w, offset = offset, singular.ok = singular.ok, : 0 (non-NA) 情况下的错误。但所有列至少包含一个非 NA 值

Error in lm.wfit(x, y, w, offset = offset, singular.ok = singular.ok, : 0 (non-NA) cases. But all columns contain at least one non-NA value

线性回归返回一个错误,指出有一列具有 0 个非 NA 值,尽管我检查了每一列并确认每一列都大于 10 个非 NA 值。如果您能就诊断此错误的内容提出任何建议,我将不胜感激。

> reg_CTR <- lm(formula = modelFormula_CTR, data = reg_data_lowCorr, weights = dailyImps, na.action = na.exclude)
Error in lm.wfit(x, y, w, offset = offset, singular.ok = singular.ok,  : 
  0 (non-NA) cases
> min(apply(reg_data_lowCorr, 2, function(x) sum(!is.na(x))))
[1] 11
> sum(!is.na(c(NA,NA,NA)))
[1] 0
> sum(!is.na(c(NA,NA,1)))
[1] 1
> reg_CTR <- lm(formula = modelFormula_CTR, data = reg_data_lowCorr, weights = dailyImps, na.action = na.omit)
Error in lm.wfit(x, y, w, offset = offset, singular.ok = singular.ok,  : 
  0 (non-NA) cases

数据有 NA 值,但这些是必需的,因此使用 na.exclude

根据我在网上阅读的内容,我有一些需要研究的想法,但似乎没有一个适用于这种情况。

  1. 所有列都是数字
> sum(sapply(reg_data_lowCorr, is.factor))
[1] 0
  1. 模型公式是动态生成的,所以没有拼写错误的风险
selectedVars <- c(names(reg_data_lowCorr[,3:ncol(reg_data_lowCorr)]))
modelFormula_CTR <- as.formula(paste0('CTR000', " ~ ", paste(selectedVars, collapse = "+")))
reg_CTR <- lm(formula = modelFormula_CTR, data = reg_data_lowCorr, weights = dailyImps, na.action = na.exclude)

我不相信这是在说你有一列全是 NA,我相信这意味着没有没有丢失数据的行。在下面的示例中,请注意 bc 都有非缺失条目,但没有行是完整的。

> a <- 1:4
> b <- c(1, 2, NA, NA)
> c <- c(NA, NA, 1, 2)
> lm(a ~ b + c, na.action = na.exclude)
Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 
  0 (non-NA) cases

您可以通过 运行 进行检查,例如 table(rowSums(is.na(data[vars]))),其中 data 是您的数据集,vars 是模型中的变量。看看有没有人没有遗漏任何值。