为 model.matrix 中的部分因素设置对比
Setting contrasts for part of the factors in a 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
所以我的问题是如何根据我指定的 contrasts.list
从 design.df
得到 model.matrix
?
您正在使用未在任何地方定义的变量 model.factors
。不确定目标是什么。如果您只想将所有这些值作为协变量,您可以这样做
contrasts.list <- list(species="contr.treatment", sex="contr.sum")
design.mat <- model.matrix(~., contrasts=contrasts.list, data=design.df)
请注意,您的 contrasts.list
应该只有因子变量的值。不包括 batch
.
我有一个实验设计,我想用它来拟合线性回归模型。
这是设计 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
所以我的问题是如何根据我指定的 contrasts.list
从 design.df
得到 model.matrix
?
您正在使用未在任何地方定义的变量 model.factors
。不确定目标是什么。如果您只想将所有这些值作为协变量,您可以这样做
contrasts.list <- list(species="contr.treatment", sex="contr.sum")
design.mat <- model.matrix(~., contrasts=contrasts.list, data=design.df)
请注意,您的 contrasts.list
应该只有因子变量的值。不包括 batch
.