Ошибка в контрастах при запуске нескольких моделей пуассоновской регрессии в R: - PullRequest
0 голосов
/ 29 мая 2018

У меня есть данные, которые выглядят так:

df <- data.frame (
time = rep(c("2010", "2011", "2012", "2013", "2014"),4),
age = rep(c("40-44", "45-49", "50-54", "55-59", "60-64"),4),
weight = rep(c(0.38, 0.23, 0.19, 0.12, 0.08),4),
ethgp = rep(c(rep("M",5),rep("NM",5)),2),
gender = c(rep("M",10), rep("F",10)),
pop = round((runif(10, min = 10000, max = 99999)), digits = 0),
count = round((runif(10, min = 1000, max = 9999)), digits = 0)
)

df <- df %>%
mutate(rate = count / pop,
     asr_rate = (rate * weight)*100000, 
     asr_round = round(asr_rate, digits = 0))

Сначала я удаляю все нулевые значения из кадра данных

 df <- df [apply(df!=0, 1, all),]

Затем я запускаю следующий код, чтобы запустить несколько Пуассонарегрессионные модели для каждой подгруппы в этих данных (возраст, пол и год);Сравнение этнических групп (М / НМ).Я хочу генерировать коэффициенты скорости и КИ, сравнивая М с ЯМ, для всех подгрупп.

Poisson_test <- df %>% group_by(time, gender, age) %>% 
do({model = glm(asr_round ~ relevel(ethgp, ref = 2), family = "poisson", data = .);
data.frame(nlRR_MNM = coef(model)[[2]], SE_MNM = summary(model)$coefficients[,2][2])})

Этот код отлично работает для приведенного выше примера.

Однако, когда я запускаю этот код в моем фактическом наборе данных, я получаю следующее сообщение об ошибке: Error in contrasts<-( tmp , value = contr.funs[1 + isOF[nn]]) : contrasts can be applied only to factors with 2 or more levels

Поскольку у меня есть только одно объяснениепеременная, ethgp, я предполагаю, что это источник ошибки?

Я проверил, есть ли уровни в моих данных (не в данных выборки):

str(M_NM_NZ$ethgp)

R отвечает: Factor w/ 2 levels "M","NM": 1 1 1 1 1 1 1 1 1 1 ...

Я проверил, были ли значения NA в ethgp

sum(is.na(M_NM_NZ%ethgp))

R отвечает [1] 0

Существуют ли другие причины, по которым я могу получить это сообщение об ошибке?

Я видел этот вопрос Ошибка контрастов при определении линейной модели в R Но в этом примере звучит так, что пояснительная переменная не в правильном формате или имеет значения NA.Это не тот случай в моих данных.Есть ли другие причины, по которым я могу получить эту ошибку?

1 Ответ

0 голосов
/ 30 мая 2018

Я не понимаю основной проблемы, которая вызывает эту ошибку, когда фактор имеет более одного уровня.

В этом случае я исправил проблему, преобразовав переменную ethgp в числовую переменную.

df <- df %>%
mutate(ethnum = ifelse(ethgp == "M", 1, 0))

И затем запустить регрессии, используя ethnum в качестве объясняющей переменной.

Poisson <- df %>% group_by(time, gender, age) %>% 
do({model = glm(asr_round ~ ethnum, family = "poisson", data = .);
data.frame(nlRR_MNM = coef(model)[[2]], nlUCI = confint(model)[2,2], nlLCI = confint(model)[2,1])})
Poisson <- mutate(Poisson,
              RR_MNM = round(exp(nlRR_MNM),digits = 3),
              UCI = round(exp(nlUCI),digits = 3),
              LCI = round(exp(nlLCI),digits = 3))

Этот код также вычисляет верхний и нижний 95% доверительные интервалы для каждого отношения скоростей.

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