Ошибка в lm.wfit (x, y, w, offset = offset, singular.ok = singular.ok,: 0 (не для NA). Но все столбцы содержат по крайней мере одно значение не-NA - PullRequest
0 голосов
/ 10 января 2019

В результате линейной регрессии возвращается ошибка, говорящая о наличии столбца с 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)

1 Ответ

0 голосов
/ 10 января 2019

Я не верю, что это говорит о том, что у вас есть столбец, который все NA, я считаю, что это означает, что нет строк с отсутствующими данными. В приведенном ниже примере обратите внимание, что как b, так и c имеют не пропущенные записи, но ни одна строка не завершена.

> 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 - переменные в модели. Посмотрите, есть ли кто-нибудь, кто не пропустил никаких значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...