如何从变量列表创建模型列表以使用 glm 进行测试

问题描述 投票:0回答:1

我想做t检验(或chi^2检验)来估计

grou=0
grou=1
之间变量的差异。数据集中的所有变量均由 MICE 估算。变量包括
AGE
SCORE
GENDER
HEART
等;
AGE
SCORE
是连续变量,
GENDER
HEART
是分类变量。

如果一次只对一个变量做t检验,我知道代码是:

library(MICE)
data_im<-mice(data, m=5,seed=6666)
summary(pool(with(data_im,glm(AGE~grou))))

输出

p-value
也是t检验的
p-value

但是我需要评估的变量太多了,所以我想写一个for循环或者创建一个函数来一次输出多个变量的汇总测试结果

我试过写:

vars <- c("AGE","SCORE","GENDER","HEART")
afterMICE <- c()
for(i in 1:4){
  pool_fitMICE <- pool(with(data_im,glm(substitute(y ~ grou,list(y=as.name(vars[i]))))))
}

**Error in eval(predvars, data, env) : object 'AGE' not found**

afterMICE <- rbind(afterMICE,C(vars[i],coef(summary(pool_fitMICE))[2,c(1,2,4)]))

我知道错误的原因是

data_im
不是常规的数据帧结构。

如何修改代码实现批量输出不同变量的汇总结果?

编辑:我在下面贴出了data_im的结构。

mice()
是对缺失数据进行多元插补的函数。 https://www.rdocumentation.org/packages/mice/versions/3.15.0/topics/mice

r loops imputation r-mice
1个回答
0
投票

对于动态生成模型公式,您可以查看

reformulate
reformulate
可能会把你从
paste
/
substitute
/
as.name
地狱中拯救出来。我相信我们也不需要
with()
。它可能会产生一些环境混乱。

vars <- c("AGE","SCORE","GENDER","HEART")

list_of_formulas <- lapply(vars, \(x) reformulate(termlabels = 'grou', response = x))

查看创建的公式列表:

[[1]]
AGE ~ grou
<environment: 0x557191bff8b8>

[[2]]
SCORE ~ grou
<environment: 0x557191c07b58>

[[3]]
GENDER ~ grou
<environment: 0x557191cb30f8>

[[4]]
HEART ~ grou
<environment: 0x557191ccad40>

然后在你的 for 循环中使用这个列表。

pool_fitMICE <- list()
for(i in 1:4){
  pool_fitMICE[[i]] <- pool(glm(formula = list_of_formulas[[i]], data = data_im))
}

如果我们使用循环函数,我们还可以避免启动输出列表或使用 for 循环的需要:

lapply(list_of_formulas, \(x) pool(glm(formula = x, data = data_im))
© www.soinside.com 2019 - 2024. All rights reserved.