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

时间:2019-01-10 18:57:42

标签: r na lm

尽管我检查了每一列并确认每列> 10个非NA值,但线性回归返回了一个错误,即有一列具有0个非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)

1 个答案:

答案 0 :(得分:0)

我不认为这是一列全为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是模型中的变量。看看是否有人不缺少任何值。