4

パッケージで多重代入を使用した後、を使用して、densityplot()からのようなものを作成しようとしています。再現可能な例を次に示します。lattice packageggplot2mice

require(mice)
dt <- nhanes
impute <- mice(dt, seed = 23109)
x11()
densityplot(impute)

生成するもの:

ggplotで改善したいdensityplot出力

出力をもう少し制御したい(そしてこれを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"))

これを生成します: ここに画像の説明を入力してください

したがって、いくつかの問題があります。

  1. 色が間違っています。色を制御する私の試みは完全に間違っている/無視されているようです
  2. 不要な水平線と垂直線があります
  3. 凡例にImputedとObservedを表示したいのですが、コードでエラーが発生しますinvalid argument to unary operator

さらに、1行で達成されることを行うにはかなりの作業が必要なようですdensityplot(impute)-それで、私はこれを完全に間違った方法で行っているのではないかと思いましたか?

編集:@ROLOが指摘したように、4番目の問題を追加する必要があります。

.4。プロットの範囲が正しくないようです。

4

2 に答える 2

6

ggplot2 の使用がより複雑な理由は、ラティス自体からではなくdensityplot、マウス パッケージ (正確にはコードを確認してください) から使用しているためです。この関数には、組み込みの結果クラスmice::densityplot.midsをプロットするためのすべての機能があります。midsmicelattice::densityplot

しかし、これ以上苦労することなく、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を参照してください。

于 2012-08-21T15:22:53.177 に答える
5

Hadley に依頼して、この mids クラスに強化メソッドを追加してもらうことができます。例えば

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 の結果を溶かして、すべての変数を 1 つのグラフにプロットできます。

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")

ここに画像の説明を入力

于 2012-08-21T15:05:06.817 に答える