我正在尝试使用 MICE 包在 R 中创建多个插补,但 kepp 内存不足。这是我收到的错误消息:
Error: cannot allocate vector of size 219 Kb
In addition: Warning messages:
1: In unlist(vlist, recursive = FALSE, use.names = FALSE) :
Reached total allocation of 6500Mb: see help(memory.size)
2: In unlist(vlist, recursive = FALSE, use.names = FALSE) :
Reached total allocation of 6500Mb: see help(memory.size)
Run Code Online (Sandbox Code Playgroud)
我使用 64 位 R 和 Windows 7 和 8 Gb ram。我试过增加 fysical 内存,并且允许内存大小 R 分别使用到 8 Gb 和 6.5 Gb,但它仍然不起作用。目前,我正在尝试对包含 27 000 行和 17 列的数据集进行插补,但我希望在具有 1 600 …
我有一个关于 R 包“mice”创建的估算数据聚合的问题。
据我了解,“小鼠”的“完整”命令用于提取例如第一次插补的插补值。但是,当运行总共十个插补时,我不确定要提取哪些插补值。有谁知道如何提取所有插补的(聚合)插补数据?
由于我想将数据输入 MS Excel 并在另一个软件工具中执行进一步的计算,这样的命令将非常有帮助。
谢谢您的意见。一个简单的例子(来自“老鼠”本身)可以在下面找到:
R> library("mice")
R> nhanes
R> imp <- mice(nhanes, seed = 23109) #create imputation
R> complete(imp) #extraction of the five imputed datasets (row-stacked matrix)
Run Code Online (Sandbox Code Playgroud)
如何聚合五个估算数据集并将估算值提取到 Excel 中?
我正在构建一个预测模型,并且正在使用该mice程序包来训练我的训练集中的NA.由于我需要为我的测试集重复使用相同的插补方案,如何将其重新应用于我的测试数据?
# generate example data
set.seed(333)
mydata <- data.frame(a = as.logical(rbinom(100, 1, 0.5)),
b = as.logical(rbinom(100, 1, 0.2)),
c = as.logical(rbinom(100, 1, 0.8)),
y = as.logical(rbinom(100, 1, 0.6)))
na_a <- as.logical(rbinom(100, 1, 0.3))
na_b <- as.logical(rbinom(100, 1, 0.3))
na_c <- as.logical(rbinom(100, 1, 0.3))
mydata$a[na_a] <- NA
mydata$b[na_b] <- NA
mydata$c[na_c] <- NA
# create train/test sets
library(caret)
inTrain <- createDataPartition(mydata$y, p = .8, list = FALSE)
train <- mydata[ inTrain, ]
test <- mydata[-inTrain, ]
# impute NAs …Run Code Online (Sandbox Code Playgroud) library(mice);
md.pattern(dat1)
temp<-mice(dat1, m=5, seed=101)
dat1<-complete(temp,2)
Error in UseMethod("complete_") :
no applicable method for 'complete_' applied to an object of class "mids"
Run Code Online (Sandbox Code Playgroud)
嗨,我正在尝试使用MICE包来估算缺失的值.但是我收到了上面的错误消息.我第一次估算它有效的缺失数据,但是当我再次尝试它没有.我尝试了很多不同的选项(更改种子,删除现有数据或"临时"变量)
有时工作但不是其他时间.有什么问题和解决方案?提前致谢.
该R软件包mice附带以下示例:
library("mice")
imp <- mice(nhanes)
fit <- with(data=imp,exp=lm(bmi~hyp+chl))
Run Code Online (Sandbox Code Playgroud)
我想要一个灵活的调用,with()例如:
model_formula <- bmi~hyp+chl
fit <- with(data=imp,exp=lm(model_formula))
Run Code Online (Sandbox Code Playgroud)
但这会抛出Error in eval(predvars, data, env) : object 'bmi' not found. 我搜索了类似的问题。我发现的最隐蔽的问题是帮助理解我在 R 中定义的函数中的错误。我的印象是,编写exp=lm(model_formula)表达式lm(model_formula)会立即求值,但是编写表达式时exp = lm(bmi~hyp+chl)不会立即求值 - 相反,求值将在函数中进行with.mice()?如果是这样,我怎样才能防止即时评估?
我有一个数据集,我尝试在包中使用多重插补mice,miceadds并micemd在多级设置中使用分类/因子变量。我可以将该方法2l.2stage.pois用于连续变量,效果非常好。分类变量的插补也适用于polyreg,但这并没有利用多级数据。
这是说明我的问题的可复制代码。
dat <- data.frame(x=rep(c("A", "B"), 50),
y=rep(c(10:14), 20),
r=rep(c(1:50), 2),
z=rep(c(1:4), 25))
dat[40:44, c("x")] <- NA
dat[60:64, c("y")] <- NA
dat[80:84, c("r")] <- NA
predm <- mice::make.predictorMatrix(data=dat)
predm[, c("z")] <- -2
predm[, c("r")] <- 3
predm[row(predm) == col(predm)] <- 0
meth <- c("x"="polyreg", "y"="2l.2stage.pois", "r"="", "z"="")
imputed = mice(dat, method=meth, predictorMatrix=predm, m=1, maxit=1)
imp <- complete(imputed)
table(imp$x, dat$x, useNA = "always")
table(imp$y, dat$y, useNA = "always")
Run Code Online (Sandbox Code Playgroud)
本质上,我试图polyreg用可能应该以 …
不确定这是否更多是一个统计问题,但我能找到的最接近的类似问题就在这里,尽管我无法让它适用于我的案例。
我正在尝试开发一个汇总的惩罚逻辑回归模型。我使用鼠标创建一个 mids 对象,然后使用插入符号重复交叉验证和弹性网络回归 ( glmnet ) 将模型拟合到每个数据集来调整参数。拟合的对象不属于“mira”类,但我想我通过使用正确的列表项更改对象类来解决这个问题。主要问题是glmnet没有关联的vcov方法,而pool()需要该方法。
我想根据变量的数量和哪些变量是最佳预测变量的不确定性来使用惩罚回归。我的数据由 4 个数值变量和 9 个不同级别的分类变量组成,我预计包括交互作用。
有谁知道我如何创建自己的 vcov 方法或以其他方式解决此问题?我不确定这是否可能。
随附示例数据和代码,请注意我无法共享实际数据。
library(mice)
library(caret)
dat <- as.data.frame(list(time=c(4,3,1,1,2,2,3,5,2,4,5,1,4,3,1,1,2,2,3,5,2,4,5,1),
status=c(1,1,1,0,2,2,0,0,NA,1,2,0,1,1,1,NA,2,2,0,0,1,NA,2,0),
x=c(0,2,1,1,NA,NA,0,1,1,2,0,1,0,2,1,1,NA,NA,0,1,1,2,0,1),
sex=c("M","M","M","M","F","F","F","F","M","F","F","M","F","M","M","M","F","F","M","F","M","F","M","F")))
imp <- mice(dat,m=5, seed=192)
control = trainControl(method = "repeatedcv",
number = 10,
repeats=3,
verboseIter = FALSE)
mod <- list(analyses=vector("list", imp$m))
for(i in 1:imp$m){
mod$analyses[[i]] <- train(sex ~ .,
data = complete(imp, i),
method = "glmnet",
family="binomial",
trControl = control,
tuneLength = 10,
metric="Kappa")
} …Run Code Online (Sandbox Code Playgroud) 我一直在努力解决一个问题,mice试图将两个级别上丢失的数据归咎于多级别数据。我花了一些时间,但我终于成功地重新创建了错误,这似乎是在mice尝试在函数中创建记录事件时发生的sampler。我有一个变量指示测试版本,但仅与第一次测量相关(之后它是一个常量)。这个变量似乎导致了错误。
当用作"2lonly.pmm"变量的插补方法时mice,会返回错误:Error in get("state", parent.frame(frame)) : object 'state' not found使用任何其他方法都不会导致错误。通常mice会创建一个记录事件,表明变量(或因子情况下的某个级别)已从插补过程中删除。但不知何故,当 method 为 时,它不会创建记录的事件"2lonly.pmm"。非常感谢解决此问题的任何帮助
这是帮助页面中的数据集mice.impute.2lonly.pmm:
G <- 250 # number of groups
n <- 20 # number of persons
beta <- .3 # regression coefficient
rho <- .30 # residual intraclass correlation
rho.miss <- .10 # correlation with missing response
missrate <- .50 # missing proportion
y1 <- rep( rnorm( G , sd …Run Code Online (Sandbox Code Playgroud) 将鼠标(链式方程的多重方程)包更新到版本 >3 后,我的代码停止工作。我希望从乘法插补数据集的线性回归中检索估计的方差-协方差矩阵。在 2.46.0 版本中,可以使用pool函数轻松访问该数量(小鼠将其称为t ) 。在 mouse >3.0 版本中,池函数不再返回完整的方差-协方差矩阵,它仅返回方差-协方差矩阵的对角元素。
这是一个工作示例:
首先创建一些包含缺失值的数据集:
set.seed(243)
iris$Sepal.Length[sample(length(iris$Sepal.Length), size = 5)] <- NA
iris$Sepal.Width[sample(length(iris$Sepal.Width), size = 5)] <- NA
iris$Petal.Length[sample(length(iris$Petal.Length), size = 5)] <- NA
iris$Species[sample(length(iris$Species), size = 5)] <- NA
Run Code Online (Sandbox Code Playgroud)
第二次乘法估算缺失数据
iris.mi <- mice(iris, 5)
Run Code Online (Sandbox Code Playgroud)
第三,对每个乘法插补数据集执行线性回归,将结果存储在 mira 对象中
mira.out <- with(iris.mi, lm(Sepal.Width ~ Sepal.Length + Petal.Length + Petal.Width + Species))
Run Code Online (Sandbox Code Playgroud)
第四,使用鲁宾规则汇集这些分析的结果。这是通过小鼠中的池函数实现的。
pool.out <- pool(analyses)
Run Code Online (Sandbox Code Playgroud)
在 mouse 包的 2.46.0 版本中,可以通过输入来检索完整的方差协方差矩阵t
pool.out$t
Run Code Online (Sandbox Code Playgroud)
在 mouse 包的较新版本 (>3.0) 中, pool.out$t 对象不存在。我们所能做的就是通过输入来检索差异
pool.out$pooled
Run Code Online (Sandbox Code Playgroud)
并选择标记为t …
我正在研究如何使用多重插补结果。以下是我的理解,如有错误请指出。
假设您有一个包含缺失值的数据集,并且您想要进行回归分析。您可以对 m = 5 次执行多重插补,并且对于每个插补数据集(现在有 5 个插补数据集)运行回归分析,然后通过 Rubin 规则(或使用 R)“汇集”这些 m = 5 模型的系数估计值包“池”)。
我的问题是,在小鼠中你有一个函数complete(),并且手册说你可以使用 提取完整的数据集complete(object)。
但是如果我使用 mouse m = 5 次,那么使用是否仍然有意义complete()?complete()我会得到哪些插补结果?
另外,如果我只使用 m = 1 的小鼠,这有意义吗?谢谢。
r-mice ×10
r ×9
imputation ×3
r-caret ×2
evaluation ×1
factors ×1
glmnet ×1
multi-level ×1
statistics ×1
updates ×1