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