Ошибка в логистической регрессии для факторов в R - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь выполнить логистическую регрессию, используя код:

model <- glm (Participation ~ Gender + Race + Ethnicity + Education + Comorbidities + WLProgram + LoseWeight + EverLoseWeight + PastYearLW + Age + BMI, data = LogisticData, family = binomial)

сводка (модель)

Я получаю сообщение об ошибке:

Error in `contrasts<-`(`*tmp*`, value = contr.funs[1 + isOF[nn]]) :  contrasts can be applied only to factors with 2 or more levels

Послепроверяя форумы, которые я проверил, чтобы увидеть, какие переменные были факторами:

str(LogisticData)
'data.frame':   994 obs. of  13 variables:
 $ outcome       : Factor w/ 2 levels "No","Yes": 1 1 2 2 1 2 2 1 2 2 ...
 $ Gender        : Factor w/ 3 levels "Male","Female",..: 1 2 2 1 2 1 1 1 1 
$ Race          : Factor w/ 3 levels "White","Black",..: 1 1 1 3 1 1 1 1 1 1 
$ Ethnicity     : Factor w/ 2 levels "Hispanic/Latino",..: 2 2 2 2 2 2 2 2 2 
$ Education     : Factor w/ 2 levels "Below Bachelors",..: 1 1 1 2 1 1 1 2 1 
$ Comorbidities : Factor w/ 2 levels "No","Yes": 1 1 2 1 1 1 2 2 1 1 ...
$ WLProgram     : Factor w/ 2 levels "No","Yes": NA 1 2 2 1 1 1 NA 1 1 ...
$ LoseWeight    : Factor w/ 2 levels "Yes","No": 2 1 1 1 1 1 1 2 1 1 ...
$ PastYearLW    : Factor w/ 2 levels "Yes","No": NA 2 1 1 1 2 1 NA 1 1 ...
$ EverLoseWeight: Factor w/ 2 levels "Yes","No": 2 1 1 1 1 1 1 2 1 1 ...
$ Age           : int  29 35 69 32 21 45 40 62 59 58 ...
$ Participation : Factor w/ 2 levels "Yes","No": 2 2 1 1 1 1 1 2 1 2 ...
$ BMI           : num  25.7 33.8 26.4 32.3 27.5 ...

Все факторы имеют 2 или более уровней.

Я также попытался пропустить NA, которые все еще давали мне эту ошибку.

Мне нужны все переменные в регрессии, и я не могу понять, почему она не запускается.

При выполнении:

newdata <- droplevels(na.omit(LogisticData))
> str(newdata)
'data.frame':   840 obs. of  13 variables:
 $ outcome       : Factor w/ 2 levels "No","Yes": 1 2 2 1 2 2 2 2 2 2 ...
 $ Gender        : Factor w/ 3 levels "Male","Female",..: 2 2 1 2 1 1 1 2 1 
 $ Race          : Factor w/ 3 levels "White","Black",..: 1 1 3 1 1 1 1 1 3 
 $ Ethnicity     : Factor w/ 2 levels "Hispanic/Latino",..: 2 2 2 2 2 2 2 2 
 $ Education     : Factor w/ 2 levels "Below Bachelors",..: 1 1 2 1 1 1 1 1 
 $ Comorbidities : Factor w/ 2 levels "No","Yes": 1 2 1 1 1 2 1 1 1 2 ...
 $ WLProgram     : Factor w/ 2 levels "No","Yes": 1 2 2 1 1 1 1 1 1 1 ...
 $ LoseWeight    : Factor w/ 1 level "Yes": 1 1 1 1 1 1 1 1 1 1 ...
 $ PastYearLW    : Factor w/ 2 levels "Yes","No": 2 1 1 1 2 1 1 1 1 2 ...
 $ EverLoseWeight: Factor w/ 1 level "Yes": 1 1 1 1 1 1 1 1 1 1 ...
 $ Age           : int  35 69 32 21 45 40 59 58 23 32 ...
 $ Participation : Factor w/ 2 levels "Yes","No": 2 1 1 1 1 1 1 2 2 1 ...
 $ BMI           : num  33.8 26.4 32.3 27.5 45.4 ...
 - attr(*, "na.action")=Class 'omit'  Named int [1:154] 1 8 13 14 21 24 25 
46 55 58 ...
 .. ..- attr(*, "names")= chr [1:154] "1" "8" "13" "14" ...

Это не делаетдля меня смысл, потому что в первой строчке (Logisitic Data) вы видите, что в EverLoseWeight, очевидно, есть 2 уровня, так как вы можете видеть и Да, и Нет, а также 1 и 2?Как мне исправить эту аномалию?

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Учитывая ваше обновление, похоже, у вас есть как минимум две возможности.

1: Удалите факторы, которые остались только на одном уровне после удаления NA (то есть LoseWeight и EverLoseWeight).

2: Рассматривайте NA как дополнительный уровень.Что-то вроде

a = as.factor(c(1,1,NA,2))
b = as.factor(c(1,1,2,1))

# 0 is an unused factor level for a
x = data.frame(a, b)
levels(x$a) = c(levels(x$a), 0)
x$a[is.na(x$a)] = 0

Но это может не касаться каких-либо проблем сингулярности, которые также приводят к наличию одноуровневых факторов.

0 голосов
/ 29 ноября 2018

Попробуйте сделать summary для ваших необработанных данных и убедитесь, что все уровни имеют значения.Я бы добавил это в комментарии, но у меня нет очков репутации: (

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