2017-09-12 1 views
0

モンテカルロシミュレーションを行っていますが、同じプロット上で異なるサンプルサイズのシミュレーションの係数推定値の密度を表示する必要があります。 scale_color_greyを使用している場合。私は係数の見積もりを同じデータフレームに入れ、サンプルのサイズを係数としています。因子をlevels()と照会すると、それは正しい順序(最小サンプルサイズから最大サンプルサイズまで)です。しかし、次のコードは、順序が凡例に正確であるスケールを与えるが、ライトグレーからカラー移動はscale_color_grey()で不正確な凡例を注文する

montecarlo <- function(N, nsims, nsamp){ 
    set.seed(8675309) 
    coef.mc <- vector() 
    for(i in 1:nsims){ 
     access <- rnorm(N, 0, 1) 
     health <- rnorm(N, 0, 1) 
     doctorpop <- (access*1) + rnorm(N, 0, 1) 
     sick <- (health*-0.4) + rnorm(N, 0, 1) 
     insurance <- (access*1) + (health*1) + rnorm(N, 0, 1) 
     healthcare <- (insurance*1) + (doctorpop*1) + (sick*1) + rnorm(N, 0, 1) 
     data <- as.data.frame(cbind(healthcare, insurance, sick, doctorpop)) 
     sample.data <- data[sample(nrow(data), nsamp), ] 
     model <- lm(data=sample.data, healthcare ~ insurance + sick + doctorpop) 
     coef.mc[i] <- coef(model)["insurance"] 
    } 
    return(as.data.frame(cbind(coef.mc, nsamp))) 
} 

sample30.df <- montecarlo(N=1000, nsims=1000, nsamp=30) 
sample100.df <- montecarlo(1000,1000,100) 
sample200.df <- montecarlo(1000, 1000, 200) 
sample500.df <- montecarlo(1000, 1000, 500) 
sample1000.df <- montecarlo(1000, 1000, 1000) 
montecarlo.df <- rbind(sample30.df, sample100.df, sample200.df, sample500.df, sample1000.df) 
montecarlo.df$nsamp <- as.factor(montecarlo.df$nsamp) 
levels(montecarlo.df$nsamp) <- c("30", "100", "200", "500", "1000") 

##creating the plot 
montecarlo.plot <- ggplot(data=montecarlo.df, aes(x=coef.mc, color=nsamp))+ 
    geom_line(data = subset(montecarlo.df, nsamp==30), stat="density")+ 
    geom_line(data = subset(montecarlo.df, nsamp==100), stat="density")+ 
    geom_line(data = subset(montecarlo.df, nsamp==200), stat="density")+ 
    geom_line(data = subset(montecarlo.df, nsamp==500), stat="density")+ 
    geom_line(data = subset(montecarlo.df, nsamp==1000), stat="density")+ 
    scale_color_grey(breaks=c("30", "100","200", "500", "1000"))+ 
    labs(x=NULL, y="Density of Coefficient Estimate: Insurance", color="Sample Size")+ 
    theme_bw() 
montecarlo.plot 

scale_color_greybreaks引数を使用しない一見ランダムな順序でグレーより暗いする凡例を返します陰影が正しい順序であるが、最小から最大までのサンプルサイズには増加しない。

ここでは何が起こっていますか?私が理解する限り、ggplot2は、色を割り当てて凡例を作成する際に、因子の順序(正しい)に従うべきです。凡例とグレーの濃淡の両方をサンプルサイズの最小値から最小値に増やすにはどうすればよいですか?

答えて

1

あなたはnsampのレベルごとに別々の線を描くggplotハンドルを聞かせてください。あなたは色の審美的にnsampをマッピングしているので、あなたが行うことができますので、ggplotは自動的に、各レベルの異なる線を描画します:

montecarlo.plot <- ggplot(data=montecarlo.df, aes(x=coef.mc, color=nsamp))+ 
    geom_line(stat = "density", size = 1.2) + 
    scale_color_grey() + 
    labs(x=NULL, y="Density of Coefficient Estimate: Insurance", color="Sample Size")+ 
    theme_bw() 
montecarlo.plot 

データを手動でサブセット化する必要はありません。

関連する問題