我想产生类似的东西densityplot()
从lattice package
,使用ggplot2
使用多个归集与后mice
包。 这里是一个重复的例子:
require(mice)
dt <- nhanes
impute <- mice(dt, seed = 23109)
x11()
densityplot(impute)
主要生产:
我想有过一些输出更多的控制了(我也是用这个作为一个学习锻炼ggplot)。 所以,对于bmi
变量,我尝试这样做:
bar <- NULL
for (i in 1:impute$m) {
foo <- complete(impute,i)
foo$imp <- rep(i,nrow(foo))
foo$col <- rep("#000000",nrow(foo))
bar <- rbind(bar,foo)
}
imp <-rep(0,nrow(impute$data))
col <- rep("#D55E00", nrow(impute$data))
bar <- rbind(bar,cbind(impute$data,imp,col))
bar$imp <- as.factor(bar$imp)
x11()
ggplot(bar, aes(x=bmi, group=imp, colour=col)) + geom_density()
+ scale_fill_manual(labels=c("Observed", "Imputed"))
这产生这样的:
因此,有几个问题是:
- 颜色是错误的。 看来我试图控制颜色是完全错误/忽略
- 有不必要的水平线和垂直线
- 我想图例显示估算的,并观察到,但我的代码提供了错误
invalid argument to unary operator
此外,它似乎是相当多的工作做的是在一个符合完成的densityplot(impute)
-所以我想,如果我可以在完全错误的方式去这件事?
编辑 :我要补充的第四个问题,由@ROLO指出:
0.4。 该地块的范围,似乎是不正确的。
它之所以是比较复杂的使用GGPLOT2是您正在使用densityplot
从小鼠封装( mice::densityplot.mids
要精确-看看它的代码),而不是从自身格。 该功能拥有所有绘图功能的mids
从结果类mice
内置的。如果你想尝试使用相同的lattice::densityplot
,你会发现它是至少多的工作,使用GGPLOT2。
但事不宜迟,这里是如何与GGPLOT2做到这一点:
require(reshape2)
# Obtain the imputed data, together with the original data
imp <- complete(impute,"long", include=TRUE)
# Melt into long format
imp <- melt(imp, c(".imp",".id","age"))
# Add a variable for the plot legend
imp$Imputed<-ifelse(imp$".imp"==0,"Observed","Imputed")
# Plot. Be sure to use stat_density instead of geom_density in order
# to prevent what you call "unwanted horizontal and vertical lines"
ggplot(imp, aes(x=value, group=.imp, colour=Imputed)) +
stat_density(geom = "path",position = "identity") +
facet_wrap(~variable, ncol=2, scales="free")
但正如你所看到的这些地块的范围比那些来自小densityplot
。 这种行为应该由参数来控制trim
的stat_density
,但这似乎不工作。 固定的代码后stat_density
我得到了以下情节:
还没完全一样的densityplot
原始,但非常接近。
编辑:对于一个真正的修复,我们需要等待GGPLOT2的下一个主要版本,请参阅github上 。
你可以问哈德利添加设防方法为这个中频类。 例如
fortify.mids <- function(x){
imps <- do.call(rbind, lapply(seq_len(x$m), function(i){
data.frame(complete(x, i), Imputation = i, Imputed = "Imputed")
}))
orig <- cbind(x$data, Imputation = NA, Imputed = "Observed")
rbind(imps, orig)
}
ggplot“固本”非data.frame对象绘制之前
ggplot(fortify.mids(impute), aes(x = bmi, colour = Imputed,
group = Imputation)) +
geom_density() +
scale_colour_manual(values = c(Imputed = "#000000", Observed = "#D55E00"))
注意,每一个“+”结束。 否则,命令有望完成。 这就是为什么传说并没有改变。 并开始与一个“+”行导致错误。
你可以融化fortify.mids的结果绘制在一个图中所有变量
library(reshape)
Molten <- melt(fortify.mids(impute), id.vars = c("Imputation", "Imputed"))
ggplot(Molten, aes(x = value, colour = Imputed, group = Imputation)) +
geom_density() +
scale_colour_manual(values = c(Imputed = "#000000", Observed = "#D55E00")) +
facet_wrap(~variable, scales = "free")