2016-10-19 5 views
1

プレディクタのヒストグラムがプロットの背景にある場合、相互作用限界効果プロットを作成したいと思います。限界効果プロットもまた重要であるため、この問題はやや複雑です。最終結果がStataのMARHISパッケージのように見えるようにしたいと思います。継続的な予測子の場合、私はちょうどgeom_rugを使用しますが、それは要因では機能しません。私はgeom_histogramを使用したいが、私は、スケーリングの問題に実行します。私は、ヒストグラムのビットにggplot2を使用したオーバーレイヒストグラムとの相互作用限界効果プロット

+ geom_histogram(aes(cenretrosoc), position="identity", linetype=1, 
        fill="gray60", data = data, alpha=0.5) 

これを追加するとき、しかし1

:動作し、このグラフを生成

ggplot(newdat, aes(cenretrosoc, linetype = factor(wave))) + 
    geom_line(aes(y = cengovrec), size=0.8) + 
    scale_linetype_manual(values = c("dotted", "twodash", "solid")) + 
    geom_line(aes(y = plo, 
        group=factor(wave)), linetype =3) + 
    geom_line(aes(y = phi, 
        group=factor(wave)), linetype =3) + 
    facet_grid(. ~ regioname) + 
    xlab("Economy") + 
    ylab("Disapproval of Record") + 
    labs(linetype='Wave') + 
    theme_minimal() 

何が起こるか:2

私はそれが異なる確率の予測確率と彼のためにだと思うtogramはY軸上にあります。しかし、私はこれを解決する方法がわかりません。何か案は?

UPDATE:

ここでは問題を(それが使用するデータのWWGbookパッケージを必要とする)

# install.packages("WWGbook") 
# install.packages("lme4") 
# install.packages("ggplot2") 
require("WWGbook") 
require("lme4") 
require("ggplot2") 
# checking the dataset 
head(classroom) 

# specifying the model 
model <- lmer(mathgain ~ yearstea*sex*minority 
       + (1|schoolid/classid), data=classroom) 

# dataset for prediction 
newdat <- expand.grid(
    mathgain = 0, 
    yearstea = seq(min(classroom$yearstea, rm=TRUE), 
        max(classroom$yearstea, rm=TRUE), 
        5), 
    minority = seq(0, 1, 1), 
    sex = seq(0,1,1)) 

mm <- model.matrix(terms(model), newdat) 

## calculating the predictions 

newdat$mathgain <- predict(model, 
          newdat, re.form = NA) 
pvar1 <- diag(mm %*% tcrossprod(vcov(model), mm)) 

## Calculating lower and upper CI 
cmult <- 1.96 
newdat <- data.frame(
    newdat, plo = newdat$mathgain - cmult*sqrt(pvar1), 
    phi = newdat$mathgain + cmult*sqrt(pvar1)) 

## this is the plot of fixed effects uncertainty 

marginaleffect <- ggplot(newdat, aes(yearstea, linetype = factor(sex))) + 
    geom_line(aes(y = mathgain), size=0.8) + 
    scale_linetype_manual(values = c("dotted", "twodash")) + 
    geom_line(aes(y = plo, 
       group=factor(sex)), linetype =3) + 
    geom_line(aes(y = phi, 
       group=factor(sex)), linetype =3) + 
    facet_grid(. ~ minority) + 
    xlab("First grade teacher years of teaching experience") + 
    ylab("Predicted Probability of student gain in math") + 
    labs(linetype='Sex') + 
    theme_minimal() 

1はmarginaleffectを見ることができるようには限界効果のプロットで示すための再現可能な例です:)ヒストグラムをバックグラウンドに追加したいので、私は次のように書きます:

marginaleffect + geom_histogram(aes(yearstea), position="identity", linetype=1, 
           fill="gray60", data = classroom, alpha=0.5) 

ヒストグラムがOYスケールをヒストグラム値で上書きします。この例では、元の予測確率スケールが周波数に匹敵するので、影響をまだ見ることができます。しかし、私の場合は、多くの値を持つデータセットですが、そうではありません。

好ましくは、ヒストグラムの縮尺は表示されません。予測される確率スケールの最大値である最大値を持つ必要があります。したがって、同じ領域をカバーしますが、垂直軸のpred prob値を上書きしません。

+0

データセットを追加して、より簡単に役立ててください。スケールの問題であれば、データは0から1の間で正規化することができます。 – timat

答えて

0

チェックこれはアウトポスト:

https://rpubs.com/kohske/dual_axis_in_ggplot2私はステップに続いて、次のプロットを得ることができました:

enter image description hereまた

、私はヒストグラムから開始するためにscale_y_continuous(expand = c(0,0))を追加したことに注意をx軸。

m1 <- marginaleffect + geom_line(aes(y = mathgain), size=0.8) + 
    scale_linetype_manual(values = c("dotted", "twodash")) + 
    geom_line(aes(y = plo, 
        group=factor(sex)), linetype =3) + 
    geom_line(aes(y = phi, 
        group=factor(sex)), linetype =3) 

m2 <- marginaleffect + geom_histogram(aes(yearstea), position="identity", linetype=1, 
           fill="gray60", data = classroom, alpha=0.5, bins = 30) + 
     scale_y_continuous(expand = c(0,0)) 


g1 <- ggplot_gtable(ggplot_build(m1)) 
g2 <- ggplot_gtable(ggplot_build(m2)) 

library(gtable) 

pp <- c(subset(g1$layout, name == "panel", se = t:r)) 
# The link uses g2$grobs[[...]] but it doesn't seem to work... single bracket works, on the other hand.... 
g <- gtable_add_grob(g1, g2$grobs[which(g2$layout$name == "panel")], pp$t, pp$l, pp$b, pp$l) 

library(grid) 
grid.draw(g) 
+0

申し訳ありませんが、私の間違いは、メモリ内のオブジェクトに問題がありました(私のコメントは削除できません)。プロットを大幅にカスタマイズすることができたので、これが最終結果です:[https://s9.postimg.org/716vpolr3/stack.png](plot)私はまだもう一つの問題があります。あなたに聞いてください。奇妙なことがX軸線で起こっています。パターンのばらつきを修正し、実線のみを残す提案はありますか?あなたのすべての協力に感謝します! – eborbath

+0

これは最終コードです: – eborbath

+0

ヒストグラム< - econ_effect + geom_histogram(aes(。データ=データ、アルファ= 0.2、ビン= 15)+スケール_連続(拡張= c(0,0))、位置= "識別"、線種= 1、塗りつぶし= "グレー80"、色= "グレー80" ggplot_gtable(ggplot_build())+ theme(panel.background = element_rect(fill = "transparent"、color = NA)、panel.grid.major = element_blank()、panel.grid.minor = element_blank()) g1 < - ggplot_gtable (g1 $ layout、name == "panel"、se = t:r)) g <-gtable_add_grob(g1、g2 $); g2 < - ggplot_gtable(ggplot_build(ヒストグラム)) pp <-c grobs [(g2 $ layout $ name == "panel")]、pp $ t、pp $ l、pp $ b、pp $ l) grid.draw(g) – eborbath

関連する問題