我真的很困惑为什么我的估算在R's Mice 2.22包中失败了.我正在尝试使用以下数据框进行非常简单的操作:
> dfn
a b c d
1 0 1 0 1
2 1 0 0 0
3 0 0 0 0
4 NA 0 0 0
5 0 0 0 NA
Run Code Online (Sandbox Code Playgroud)
然后,我以下列方式使用鼠标来执行简单的平均估算:
imp <- mice(dfn, method = "mean", m = 1, maxit =1)
filled <- complete(imp)
Run Code Online (Sandbox Code Playgroud)
但是,我完成的数据如下所示:
> fill
a b c d
1 0.00 1 0 1
2 1.00 0 0 0
3 0.00 0 0 0
4 0.25 0 0 0
5 0.00 0 0 …Run Code Online (Sandbox Code Playgroud) 我已经使用R中的MICE包成功完成了对我的问卷调查缺失数据的多重估算,并对汇总的推算变量进行了线性回归.我似乎无法弄清楚如何提取单个池化变量并在图形中绘图.有任何想法吗?
例如
>imp <- mice(questionnaire)
>fit <- with(imp, lm(APE~TMAS+APB+APA+FOAP))
>summary(pool(fit))
Run Code Online (Sandbox Code Playgroud)
我想通过TMAS绘制汇集的APE.
使用nhanes的可重现示例:
> library(mice)
> nhanes
> imp <-mice(nhanes)
> fit <-with(imp, lm(bmi~chl+hyp))
> fit
> summary(pool(fit))
Run Code Online (Sandbox Code Playgroud)
我想将汇集的chl与汇集的bmi(例如)联系起来.
我能够实现的最好的是
> mat <-complete(imp, "long")
> plot(mat$chl~mat$bmi)
Run Code Online (Sandbox Code Playgroud)
我相信这给出了所有5个插补的综合情节,并不是我想要的(我认为).
我从文库"老鼠"中使用鼠标功能输入缺失的病例时出现以下错误
Error in nnet.default(X, Y, w, mask = mask, size = 0, skip = TRUE, softmax = TRUE, :
too many (1104) weights
Run Code Online (Sandbox Code Playgroud)
该问题由函数生成,mice.impute.polr并且mice.impute.polyreg由于默认的最大权重数.我无法通过使用命令解决它substitute既不通过复制功能的代码,并写入新的功能mice.impute.polr和mice.impute.polyreg(因为功能我找不到调用augment).我告诉过我应该去源代码修改它.
我该怎么做?还有其他解决方案吗?
我有一个mids从创建的对象mice。我想重新编码一些估算变量并保留mids对象。我知道我可以mids使用 将该对象转换为“long” complete(),但我想保留该mids对象,因为它有一些额外的用途。
这是使用数据集的示例nhanes。运行mice()为 中的变量创建 5 个估算数据集nhanes。我专注于hyp.
library(mice)
names(nhanes)
nhanes$hyp
#[1] NA 1 1 NA 1 NA 1 1 1 NA NA NA 1 2 1 NA 2 2 1 2 NA 1 1 1
imp <- mice(nhanes, print = FALSE)
imp$imp$hyp
# 1 2 3 4 5
# 1 1 1 1 1 1
# 4 2 1 1 2 …Run Code Online (Sandbox Code Playgroud) 我知道,类似的问题之前已经被要求(例如,1,2,3),但我还是不明白为什么MICE失败甚至当我试图像在例1无条件平均预测缺失值的原因.
我有的稀疏矩阵是:
k1 k3 k5 k6 k7 k8 k11 k12 k13 k14 k15
[1,] NA NA NA NA NA NA NA NA NA NA 0.066667
[2,] 0.909091 NA NA NA NA 0.944723 NA NA 0.545455 NA NA
[3,] 0.545455 NA NA NA NA NA NA NA 0.818182 0.800000 0.466667
[4,] 0.545455 NA 0.642857 NA NA 0.260954 NA NA NA NA NA
[5,] NA 0.750 0.500000 NA 0.869845 NA 0.595013 NA NA NA NA
[6,] …Run Code Online (Sandbox Code Playgroud) 看来该mi软件包在过去几年的某个时候进行了相当大的重写。
以下教程详细概述了“旧”的做事方式:http://thomasleeper.com/Rcourse/Tutorials/mi.html
“新”的做事方式(坚持 Leeper 的模拟演示)看起来像这样:
#load mi
library(mi)
#set seed
set.seed(10)
#simulate some data (with some observations missing)
x1 <- runif(100, 0, 5)
x2 <- rnorm(100)
y <- 2*x1 + 20*x2 + rnorm(100)
mydf <- cbind.data.frame(x1, x2, y)
mydf$x1[sample(1:nrow(mydf), 20, FALSE)] <- NA
mydf$x2[sample(1:nrow(mydf), 10, FALSE)] <- NA
# Convert to a missing_data.frame
mydf_mdf <- missing_data.frame(mydf)
# impute
mydf_imp <- mi(mydf_mdf)
Run Code Online (Sandbox Code Playgroud)
尽管函数名称已更改,但这实际上与“旧”的处理方式非常相似。
最大的变化(从我的角度来看)是替换了以下“旧”功能
lm.mi(formula, mi.object, ...)
glm.mi(formula, mi.object, family = gaussian, ...)
bayesglm.mi(formula, mi.object, family = gaussian, …
因此,我正在使用该mice软件包估算缺少的数据。我是归因于算术的新手,所以我已经讲了一点,但是却遇到了陡峭的学习曲线。举一个玩具的例子:
library(mice)
# Using nhanes dataset as example
df1 <- mice(nhanes, m=10)
Run Code Online (Sandbox Code Playgroud)
因此,如您所见,我使用默认设置大多数情况下估算了df1 10次-我很乐意将此结果用于回归模型,合并结果等。但是在我的实际数据中,我有来自不同国家/地区的调查数据。因此,失踪的程度因国家/地区而异,具体变量的值(即年龄,受教育程度等)的值也不同。因此,我想归纳失踪者,以便按国家进行聚类。因此,我将创建一个没有缺失的分组变量(当然,在此玩具示例中,与其他变量的相关性缺失,但是在我的真实数据中它们存在)
# Create a grouping variable
nhanes$country <- sample(c("A", "B"), size=nrow(nhanes), replace=TRUE)
Run Code Online (Sandbox Code Playgroud)
因此,如何分辨mice()此变量与其他变量不同-即它是多级数据集中的一个级?
我有一个数据集,其中包含大约 12 个级别范围为 2 - 10 的分类变量以及其他数值变量。约280条记录。我正在使用mice中的包r通过所有默认设置对丢失的数据进行插补。但是,当我尝试像这样进行插补时:
imp <- mice(df)
Run Code Online (Sandbox Code Playgroud)
我继续收到此警告:
glm.fit: algorithm did not converge
Run Code Online (Sandbox Code Playgroud)
我在此处和此处在线找到的解决方案仅专注于glm直接使用该函数,但就我而言,它是从内部调用的函数mice。我试过maxit = 50这样设置
imp <- mice(df, maxit = 50)
Run Code Online (Sandbox Code Playgroud)
但最终却收到了更多相同警告的实例。知道是什么原因造成的吗?
我正在努力使用小鼠进行插补。主要目标是估算 NA(如果可能,按组)。由于示例有点大,可以在此处简单发布,因此可以下载:https : //drive.google.com/open?id=1InGJ_M7r5jwQZZRdXBO1MEbKB48gafbP
我的问题是:
一般来说,相关数据有多大的问题?我该怎么做才能仍然估算数据?数据是实证研究问题的一部分,我还不知道要包含哪些变量,因此最好暂时保留尽可能多的变量。
什么方法比 "cart" 和 "pmm" 更合适?我不想简单地估算平均值/中位数....
我可以通过“ID”以某种方式估算数据吗
调试技巧?
这是我的代码
#Start
require(mice)
require(Hmisc)
'setwd(...)
'test.df<-read.csv(...)
str(test.df)
Run Code Online (Sandbox Code Playgroud)
检查相关性:前 2 列包含标识符和年份,因此无需查看。
test.df.rcorr<-rcorr(as.matrix(test.df[,-c(1:2)]))
test.df.coeff<-test.df.rcorr$r
test.df.coeff<-corrplot(test.df.coeff)
Run Code Online (Sandbox Code Playgroud)
可以看出,数据中有一些很强的相关性。对于一个简单的任务,省略所有具有强相关性的列。
#Simple example
test.df2<-test.df[,-c(4,7,10,11)]
test.df2
sum(is.na(test.df2))
Run Code Online (Sandbox Code Playgroud)
现在,让我们在不指定方法的情况下估算 test.df2:
imputation.df2<-mice(test.df2, m=1, seed=123456)
imputation.df2$method
test.df2.imp<-mice::complete(imputation.df2)
Warning message:
Number of logged events: 1
sum(is.na(test.df2.imp))
Run Code Online (Sandbox Code Playgroud)
可以看出,所有的 NA 都被估算了。并且使用的方法只是“pmm”。
使用完整数据集,我几乎立即收到以下错误消息:
imputation.df<-mice(test.df,m=1,seed = 66666)
iter imp variable
1 1 x1Error in solve.default(xtx + diag(pen)) :
system is computationally singular: reciprocal condition number = 1.49712e-16
Run Code Online (Sandbox Code Playgroud)
这仅仅是由于数据中的相关性吗?
最后,我的 ID 插补代码,在显示此错误之前运行了更长的时间:
test123<- …Run Code Online (Sandbox Code Playgroud) 嗨,我刚刚开始使用 R 作为学校模块的一部分。我有一个包含缺失数据的数据集,并且我使用了 mouse() 来估算缺失的数据。我现在正在尝试将 predict 函数与我的合并结果一起使用。但是,我观察到以下错误:
UseMethod("predict") 中的错误:没有适用于应用于类“c('mipo','data.frame')”的对象的“预测”方法
我在下面包含了我的整个代码,如果你们都能帮助新手,我会非常感谢它。谢谢!
```{r}
library(magrittr)
library(dplyr)
train = read.csv("Train_Data.csv", na.strings=c("","NA"))
test = read.csv("Test_Data.csv", na.strings=c("","NA"))
cols <- c("naCardiac", "naFoodNutrition", "naGenitourinary", "naGastrointestinal", "naMusculoskeletal", "naNeurological", "naPeripheralVascular", "naPain", "naRespiratory", "naSkin")
train %<>%
mutate_each_(funs(factor(.)),cols)
test %<>%
mutate_each_(funs(factor(.)),cols)
str(train)
str(test)
```
```{r}
library(mice)
md.pattern(train)
```
```{r}
miTrain = mice(train, m = 5, maxit = 50, meth = "pmm")
```
```{r}
model = with(miTrain, lm(LOS ~ Age + Gender + Race + Temperature + RespirationRate + HeartRate + SystolicBP + …Run Code Online (Sandbox Code Playgroud) r ×10
r-mice ×10
imputation ×3
missing-data ×3
bayesglm ×1
debugging ×1
lme4 ×1
multi-level ×1
plot ×1
predict ×1
statistics ×1