在mice调用中向glm.fit传递参数遇错求助
解决mice中传递glm.fit控制参数的问题
我刚看完你的问题,你之前的参数传递方式完全搞错了——mice()函数根本不接受直接把glm.fit()作为参数传入,这也是你两次尝试都报错的原因。让我一步步给你讲清楚正确的做法:
为什么之前的写法会报错?
- Try 1的错误:你调用
glm.control(list(epsilon = 1e-08, maxit = 100, trace = FALSE))是错的,glm.control()的参数是单独传入的,不是把所有参数打包成一个列表丢进去。而且你直接把glm.fit(...)放在mice()的参数列表里,mice()根本不认识这个参数,自然会报错。 - Try 2的错误:
glm.fit()是底层拟合函数,必须传入x和y等必填参数才能运行,你单独只传control参数,它肯定会提示缺少x参数。
正确传递maxit参数的方法
要给基于glm的插补方法(比如你用到的logreg)传递拟合控制参数,你需要用mice()的glm.args参数,把控制参数打包成列表传进去:
test_data <- data.frame(x = as.factor(round(rnorm(100))), y = as.factor(round(rnorm(100, 1,1))), z = rnorm(100,5,1)) test_data[3:4, 1] <- NA test_data[5:8, 2] <- NA test_init <- mice(test_data, max = 0, print = F, visitSequence = "monotone", defaultMethod = c("pmm", "logreg", "polyreg", "polr")) predictor_matrix <- quickpred(test_data) # 正确的写法 test_data_mice <- mice::mice(test_data, print = F, predictorMatrix = predictor_matrix, method = test_init$method, visitSequence = test_init$visitSequence, glm.args = list(control = glm.control(maxit = 100)) )
更精准的参数传递(可选)
如果你只想给特定的插补方法(比如只有logreg需要增加迭代次数)传递参数,可以用methodArgs参数,这样不会影响其他方法:
test_data_mice <- mice::mice(test_data, print = F, predictorMatrix = predictor_matrix, method = test_init$method, visitSequence = test_init$visitSequence, methodArgs = list(logreg = list(control = glm.control(maxit = 100))) )
关于futuremice找不到本地函数的小提示
顺便提一下你之前遇到的futuremice问题:本地函数找不到通常是因为future的全局变量默认不包含这些函数,你可以在设置future计划时加上globals = TRUE,或者把本地函数明确传入futuremice()的globals参数里,比如:
library(future) plan(multisession, globals = TRUE) # 然后运行futuremice
内容的提问来源于stack exchange,提问作者WanderingEpi
相关产品推荐
相关产品推荐

