У меня есть данные, которые выглядят так:
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.Это не тот случай в моих данных.Есть ли другие причины, по которым я могу получить эту ошибку?