我希望通过使用micein 来运行150次多次插补R.然而,为了节省一些计算时间,我将谎言将并行流中的流程细分(如Stef van Buuren在"针对缺失数据的灵活插补"中所建议的那样).
我的问题是:怎么做?
我可以想象2个选项:
opt.1:
imp1<-mice(data, m=1, pred=quicktry, maxit=15, seed=1)
imp2<-mice(data, m=1, pred=quicktry, maxit=15, seed=1)
imp...<-mice(data, m=1, pred=quicktry, maxit=15, seed=1)
imp150<-mice(data, m=1, pred=quicktry, maxit=15, seed=1)
Run Code Online (Sandbox Code Playgroud)
然后通过使用complete和as.mids之后将插补结合在一起
opt.2:
imp1<-mice(data, m=1, pred=quicktry, maxit=15, seed=VAL_1to150)
imp2<-mice(data, m=1, pred=quicktry, maxit=15, seed=VAL_1to150)
imp...<-mice(data, m=1, pred=quicktry, maxit=15, seed=VAL_1to150)
imp150<-mice(data, m=1, pred=quicktry, maxit=15, seed=VAL_1to150)
Run Code Online (Sandbox Code Playgroud)
通过添加VAL_1to150否则,在我看来(我可能是错的),如果它们都使用相同的数据集和相同的种子运行,那么您将获得相同结果的150倍.
还有其他选择吗?
谢谢
我想使用包中的mice函数创建插补策略mice.问题是我似乎无法找到predict此包中的新数据的任何方法(或它的表兄弟).
我想做这样的事情:
require(mice)
data(boys)
train_boys <- boys[1:400,]
test_boys <- boys[401:nrow(boys),]
mice_object <- mice(train_boys)
train_complete_boys <- compete(train_boys)
# Here comes a hypothetical method
test_complete_boys <- predict(mice_object, test_boys)
Run Code Online (Sandbox Code Playgroud)
我想找到一些可以模仿上面代码的方法.现在,完全可以分别mice对列车和测试数据集进行单独的操作,但从逻辑的角度来看似乎是不正确的 - 您拥有的所有信息都在列车数据集中.测试数据集的观察结果不应提供彼此的信息.在处理数据时尤其如此,当观察可以按出现时间排序时.
一种可能的方法是从测试数据集添加行以迭代地训练数据集,每次都运行插补.然而,这似乎非常不优雅.
所以这是一个问题:
是否有mice类似于一般predict方法的包的方法?如果没有,可能的解决方法是什么?
谢谢!
我试图用纵向设计来估算数据集中的数据.有两个预测因子(实验组和时间)和一个结果变量(分数).聚类变量是id.
这是玩具数据
set.seed(345)
A0 <- rnorm(4,2,.5)
B0 <- rnorm(4,2+3,.5)
A1 <- rnorm(4,6,.5)
B1 <- rnorm(4,6+2,.5)
A2 <- rnorm(4,10,.5)
B2 <- rnorm(4,10+1,.5)
A3 <- rnorm(4,14,.5)
B3 <- rnorm(4,14+0,.5)
score <- c(A0,B0,A1,B1,A2,B2,A3,B3)
id <- rep(1:8,times = 4, length = 32)
time <- rep(0:3, each = 8, length = 32)
group <- rep(c("A","B"), times =2, each = 4, length = 32)
df <- data.frame(id = id, group = group, time = time, score = score)
# plots
(ggplot(df, aes(x = time, y = …Run Code Online (Sandbox Code Playgroud) 我想应用鼠标包,但我无法将大型稀疏矩阵转换为矩阵.
library(Matrix)
library(mice)
i=c(2,9,6:10^7)
j=c(2,9,6:10^7)
x=7*(1:7^7)
write.csv(a,"a.csv")
c=read.csv("a.csv")
w=sparseMatrix(i=c[,1],j=c[,2],x=c[,3])
w=as.matrix(w)
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)Error in asMethod(object) : Cholmod error 'problem too large' at file ../Core/cholmod_dense.c, line 105
我在使用小鼠对缺失值进行插补后对纵向数据进行统计分析时遇到问题。在宽数据格式中对缺失进行插补后,我将提取的数据转换为长格式。由于纵向数据参与者有重复的行(3 个时间点),这会在将长格式数据集转换为类型 mids 对象时出现问题。有谁知道如何在插补后创建一个 mids 对象或其他合适的东西?之后我想使用 lmer,lme 来合并固定效果。我尝试了很多不同的东西,但仍然无法弄清楚。
提前致谢并查看以下代码:
# minimal reproducible example
## Make up some data
set.seed(2)
# ID Variable, Group, 3 Timepoints outcome measure (X1-X3)
Data <- data.frame(
ID = sort(sample(1:100)),
GROUP = sample(c(0, 1), 100, replace = TRUE),
matrix(sample(c(1:5,NA), 300, replace=T), ncol=3)
)
# install.packages("mice")
library(mice)
# Impute the data in wide format
m.out <- mice(Data, maxit = 5, m = 2, seed = 9, pred=quickpred(Data, mincor = 0.0, exclude = c("ID","GROUP"))) # ignore group here …Run Code Online (Sandbox Code Playgroud) 我是 R 包装新手mice。但我正在尝试从中估算 5 个数据集popmis,然后为每个数据集拟合一个模型,最后在它们之间拟合一个lmer()模型。with()pool()
我认为pool()中的函数mice()不适用于lmer()来自lme4包的调用,对吧?
如果是这种情况,有没有办法编写一个定制的函数,其作用类似于pool()我下面的案例?
library(mice)
library(lme4)
imp <- mice(popmis, m = 5) # `popmis` is a dataset from `mice`
fit <- with(imp, lme4::lmer(popular ~ sex + (1|school))) # works fine.
pool(fit) # BUT this one fails, should I loop here?
Run Code Online (Sandbox Code Playgroud) I have a dataset with survival data and a few missing covariates. I've successfully applied the mice-package to imputate m-numbers of datasets using the mice() function, created an imputationList object and applied a Cox PH model on each m-dataset. Subsequently I'ved pooled the results using the MIcombine() function. This leads to my question:
How can I get a p-value for the pooled estimates for each covariate? Are they hidden somewhere within the MIcombine object?
我知道 p 值并不是一切,但报告估计值和置信区间而没有相应的 p 值对我来说似乎很奇怪。我能够计算一个近似值。使用例如Altman …
如何在midsR的包中的类对象中的每个插补数据集上执行操作(如子集化或添加计算列)mice?我希望结果仍然是一个mids对象.
编辑:示例
library(mice)
data(nhanes)
# create imputed datasets
imput = mice(nhanes)
Run Code Online (Sandbox Code Playgroud)
插补数据集存储为列表列表
imput$imp
Run Code Online (Sandbox Code Playgroud)
其中只有针对给定变量的插补的观察行.
原始(不完整)数据集存储在此处:
imput$data
Run Code Online (Sandbox Code Playgroud)
例如,如何创建一个按照chl/2每个插补数据集计算的新变量,从而产生一个新mids对象?
我使用MICE通过多次插补开发了一个模型.我想使用这个模型来预测新观察的响应(不包含缺失数据),包括标准误差.将在MICE中创建的模型对象传递给predict()函数不起作用
使用内置nhanes数据集的简单示例.假设我想用形式开发一个逻辑回归模型age==3 ~ bmi + hyp + chl,并使用这个模型预测,例如,prob(年龄= 3 | bmi = 20,hyp = 2和chl = 190)
#impute missing data on bmi, hyp, chl
library('mice')
imp<-mice(nhanes, seed=1)
#create model on each imputed dataset
model <- with(imp, glm(age==3 ~ bmi + hyp + chl, family=binomial))
#pool models into one
poolmodel <- pool(model)
#new data
newdata <- data.frame(bmi=20, hyp=2, chl=190)
#attempt to predict response using predict() function
pred <- predict(object=model, newdata=newdata, type='link', se.fit=TRUE)
#Error in UseMethod("predict") : no applicable method …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用miceR 中的函数(来自同名包)运行多重插补。我收到一条警告,表明事件已被记录。这是我的 MWE 的输出mice(.)$loggedEvents(见下文):
it im dep meth out
1 1 X pmm H
Run Code Online (Sandbox Code Playgroud)
我不确定是什么导致了这个警告以及其影响是什么。据我了解,这可能是由变量之间的共线性引起的,但这应该通过使用来防止remove_collinear=FALSE,但这并不能修复警告。
微量元素:
Pop <- data.frame(X = c( NA, 0.02, -1.15, 0.54, -0.61, -2.07),
Z = c( 0.83, 1.40, -3.07, -0.07, -0.20, -1.90),
D = c( 0, 0, 0, 1, 0, 0),
H = c( 0.01, 0.01, 0.01, 0.01, 0.02, 0.02))
Pop.Imp <- mice(Pop, m = 1, maxit = 1, print = T)
Run Code Online (Sandbox Code Playgroud)
显然,我最初的问题涉及更多的数据行和列以及更多的插补和迭代,但我已经设法将其缩小以找到此 MWE。
任何有助于找出导致此问题的原因的帮助都会很棒。mice在决定协变量是否/何时共线时是否使用某种截止值?如果它非常高,这会覆盖该remove_collinear=FALSE …
r ×10
r-mice ×10
imputation ×1
large-data ×1
lme4 ×1
matrix ×1
missing-data ×1
mixed-models ×1
predict ×1