2017-09-12 9 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 

데이터를 수동으로 하위 집합으로 지정할 필요가 없습니다.