我有一个大型数据集,正试图为其生成glm输出的摘要表,并且有一些交互项,正在使用R对比包。我正在尝试编写一个函数,该函数将基于变量列表提供输出。
我怀疑问题出在将其输入到对比功能时,名称列表中的字符格式有关。
我在从列表中获取变量进入glm函数时遇到了类似的问题,因此最终使用了replace()。但是,该策略在对比函数内不起作用,并给出了错误:
reg.con <- contrast(reg, list(substitute(i, list(i = as.name(name))) = 1, intvar = 1), list(substitute(i, list(i = as.name(name))) = 0, intvar = 1))
错误:“ reg.con中出现意外的'='<-contrast(reg,list(substitute(i,list(i = as.name(name))))=”
我还尝试了eval(substitute()),paste(name)和as.character(name)都出现相同的错误。
当然,仅在函数内的列表中直接使用变量也是行不通的:
reg.con <- contrast(reg, list(name = 1, intvar = 1), list(name = 0, intvar = 1))
generateData(fit = list(coefficients = c((Intercept)
= -2.2842358778574,:
设计中没有的因素:名称
名称列表中的所有变量以及结果和intvar均进行了0/1编码,并在数据中表示了两个级别。
namelist = list('var1', 'var2', 'var3', 'var4')
results=lapply(namelist, function(name) {
reg = glm(substitute(outcome ~ i*intvar, list(i = as.name(name))), data=mydat, family=binomial)
reg.con <- contrast(reg, list(name = 1, intvar = 1), list(name = 0, intvar = 1))
mat=matrix(nrow=1, ncol=4)
mat[1,1]=as.numeric(exp(reg.con$Contrast))
mat[1,2]=as.numeric(exp(reg.con$Lower))
mat[1,3]=as.numeric(exp(reg.con$Upper))
mat[1,4]=as.numeric(reg.con$Pvalue)
})
我希望得到一个列表,其中包含名称列表中每个变量的对比度,置信区间限制和p值,但是如上所述,我却遇到了各种不同的错误。
任何帮助将不胜感激,在此先感谢!