Настройка контрастов для части факторов в model.matrix

У меня есть экспериментальный план, к которому я хотел бы применить модель линейной регрессии.

Вот дизайн data.frame:

design.df <- data.frame(batch=rep(c(1:3,1:3),4),
                      species=rep(c(rep("mouse",3),rep("rat",3)),4),
                      sex=rep(c(rep("M",12),rep("F",12))),
                      stringsAsFactors = F)

design.df$species и design.df$sex оба равны factors:

design.df$species <- factor(design.df$species,levels=c("mouse","rat"))
design.df$sex <- factor(design.df$sex,levels=c("F","M"))

Контрастное кодирование design.df$species должно быть contr.treatment, тогда как кодирование design.df$sex должно быть contr.sum.

Чтобы установить его как model.matrix, я подумал, что, возможно, это сработает:

contrasts.list <- list(batch=NA,species="contr.treatment",sex="contr.sum")

design.mat <- model.matrix(as.formula(paste0("~",paste(model.factors,collapse="+"))),contrasts=contrasts.list,data=design.df)

Очевидно, это не работает в соответствии с ошибкой, которую я получаю:

Error in `contrasts<-`(`*tmp*`, value = contrasts.arg[[nn]]) : 
  contrasts apply only to factors

Итак, мой вопрос: как мне получить model.matrix из design.df в соответствии с указанным мной contrasts.list?


person dan    schedule 12.04.2017    source источник


Ответы (1)


Вы используете переменную model.factors, которая нигде не определена. Не уверен, что это за цель. Если вам просто нужны все эти значения как ковариаты, вы можете сделать

contrasts.list <- list(species="contr.treatment", sex="contr.sum")
design.mat <- model.matrix(~., contrasts=contrasts.list, data=design.df)

Обратите внимание, что ваш contrasts.list должен иметь значения только для факторных переменных. Не включайте batch.

person MrFlick    schedule 12.04.2017