我尝试使用densityplot()
在使用lattice package
包使用ggplot2
之后使用mice
生成与require(mice)
dt <- nhanes
impute <- mice(dt, seed = 23109)
x11()
densityplot(impute)
类似的内容。这是一个可重复的例子:
bmi
产生:
我想对输出有更多的控制(我也将它用作ggplot的学习练习)。所以,对于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)
此外,用{{1}}在一行中完成的工作似乎做了很多工作 - 所以我想知道我是否可能完全以错误的方式解决这个问题?
编辑:我应该添加第四个问题,如@ROLO所述:
0.4。这些情节的范围似乎不正确。
答案 0 :(得分:6)
使用ggplot2更复杂的原因是你使用了鼠标包中的densityplot
(mice::densityplot.mids
来确切 - 检查它的代码),而不是格子本身。此函数具有用于绘制内置mids
的{{1}}结果类的所有功能。如果您使用mice
尝试相同的结果,您会发现它至少与使用相同的工作量GGPLOT2。
但是没有进一步的麻烦,这里是如何使用ggplot2:
lattice::densityplot
但正如您所看到的,这些图的范围小于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
原版完全相同,但更接近。
编辑:要获得真正的修复,我们需要等待下一个主要版本的ggplot2,请参阅github。
答案 1 :(得分:5)
您可以要求Hadley为此中级类添加强化方法。 E.g。
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")