2017-07-12 4 views
0

Ich simuliere die Verteilung der Mittel von 40 i.i.d. Exponentiale und I zeichnen die Verteilung der Stichprobenmittel zusammen mit dem Mittel der Verteilung der Stichprobenmittel (A) und dem theoretischen Mittel des Exponentials mit Lambda = 0,2 (B) auf. Die beiden Mittelwerte A und B sollten als vertikale Linien erscheinen, die unterschiedlich gefärbt sind, und ihre Farbcodes sollten in einer Legende erläutert werden. Mein Code erzeugt jedoch nur eine vertikale Linie und ignoriert das Farbschema, das ich in meinem Code definiere.Vertikale Linien erscheinen nicht wie beabsichtigt in ggplot

Der Code ist der folgende:

n <- 40 

lambda <- 0.2 

simulation = data.table(sample_mean = numeric()) 

for (i in (1 : 1000)){ 
    simulation <- rbind(simulation, data.table(sample_mean = mean(rexp(n, lambda)))) 
} 

#============================================================================================== 
# Show the sample mean and compare it to the theoretical mean of the distribution. 
#============================================================================================== 

sample_mean <- mean(simulation$sample_mean) 
4.981267 

theoretical_mean <- 1/lambda 
5 

#------------------------------------------------------------------------------------------ 
# Plot of the Empirical and Theoretical Distributions and their respective means 
#------------------------------------------------------------------------------------------ 

ggplot(simulation, aes(x = sample_mean)) + 
geom_histogram(aes(y=..density..), position="identity",alpha = 0.4, fill = "red", bins=100) + 
    geom_density(colour = "red" , size = 2, alpha = 0.5) + 
    geom_vline(xintercept = sample_mean, aes(colour = "Empirical"), size = 1.5, alpha =0.3) + 
    geom_vline(xintercept = lambda, aes(colour = "Theoretical"), size = 1.5, alpha =0.3) + 
    theme_economist() + ggtitle("Distribution of Sample Means. Mean of the Empirical Distribution 
    and Mean of the Theoretical Exponential (1,000 simulations) ") + 
    scale_colour_manual("Distributions", values = c("blue", "red")) + 
    scale_y_continuous(name = "Density") + 
    scale_x_continuous(name = "Sample Means", breaks = seq(2, 8, .5), limits=c(2, 8)) 

Das Grundstück ist folgende:

enter image description here

Ihr Rat geschätzt wird.

==================================

EDIT

@mkt: Danke für Ihren Beitrag. Dennoch muss ich in der Zeichnung die vertikalen Linien annotieren, und deshalb habe ich die Farbe innerhalb der aes() mit Zeichenketten verwendet, die später in meinem Code den Farben zugeordnet wurden. Also muss ich noch eine Lösung finden, wie das geht.

+0

Gerade FYI, Änderungen an Ihren eigenen Beitrag nicht Alarme auslösen; Sie müssen meine Antwort kommentieren, damit ich sie sehe, es sei denn, ich überprüfe diese Seite erneut. – mkt

+0

Also zur Klarstellung: zusätzlich zu der Lösung unten, wollen Sie nur ein Etikett am unteren Rand jeder der Linien? – mkt

Antwort

0

Sie hatten drei Probleme. 1) Sie wurden Lambda-Plotten, anstelle von 1/Lambda 2) „Empirische“ und „Theoretische“ sind keine Farben, die R 3) Die Farbe erkennen soll nicht innerhalb aes definiert werden()

Dies funktioniert:

ggplot(simulation, aes(x = sample_mean)) + 
    geom_histogram(aes(y=..density..), position="identity",alpha = 0.4, fill = "red", bins=100) + 
    geom_density(colour = "red" , size = 2, alpha = 0.5) + 
    geom_vline(xintercept = sample_mean, colour = "blue", size = 1.5, alpha = 0.3) + 
    geom_vline(xintercept = theoretical_mean, colour = "green", size = 1.5, alpha = 0.5) + 
    ggtitle("Distribution of Sample Means. Mean of the Empirical Distribution 
    and Mean of the Theoretical Exponential (1,000 simulations) ") + 
    scale_colour_manual("Distributions", values = c("blue", "red")) + 
    scale_y_continuous(name = "Density") + 
    scale_x_continuous(name = "Sample Means", breaks = seq(2, 8, .5), limits=c(2, 8)) 

enter image description here

Verwandte Themen