如何在函数内通过glm使用R对比包

时间:2019-06-02 13:04:45

标签: r function package glm contrast

我有一个大型数据集,正试图为其生成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值,但是如上所述,我却遇到了各种不同的错误。

任何帮助将不胜感激,在此先感谢!

0 个答案:

没有答案