Je fais une simulation Monte Carlo, dans laquelle je dois afficher la densité des estimations de coefficients pour des simulations avec différentes tailles d'échantillons sur la même parcelle. Lors de l'utilisation scale_color_grey
. J'ai mis mes estimations de coefficient dans le même cadre de données, avec la taille de l'échantillon comme facteur. Si j'interroge le facteur avec levels()
, il est dans le bon ordre (du plus petit au plus grand échantillon). Cependant, le code suivant donne une échelle dans laquelle l'ordre est correct dans la légende, mais la couleur passe du gris clair au gris plus foncé dans un ordre apparemment aléatoireCommande de légende incorrecte avec 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
Ne pas utiliser l'argument breaks
à scale_color_grey
renvoie une légende dans lequel les nuances sont dans le bon ordre, mais qui n'augmente pas du plus petit au plus grand.
Que se passe-t-il ici? Pour autant que je comprenne, ggplot2
devrait suivre l'ordre du facteur (ce qui est correct) dans l'attribution des couleurs et la création de la légende. Comment puis-je faire passer la légende et les nuances de gris du plus petit au plus petit?