2017-10-13 16 views
1

Dire que j'ai cette trame de données df:ggplot2, histogramme: pourquoi y = ..densité .. et stat = "densité" diffèrent?

structure(list(max.diff = c(6.02, 7.56, 7.79, 7.43, 7.21, 7.65, 
8.1, 7.35, 7.57, 9.09, 6.21, 8.2, 6.82, 7.18, 7.78, 8.27, 6.85, 
6.72, 6.67, 6.99, 7.32, 6.59, 6.86, 6.02, 8.5, 7.25, 5.18, 8.85, 
5.44, 6.44, 7.85, 6.25, 9.06, 8.19, 5.08, 6.26, 8.92, 6.83, 6.5, 
7.55, 7.31, 5.83, 5.55, 4.29, 8.29, 8.72, 9.5)), class = "data.frame", row.names = c(NA, 
-47L), .Names = "max.diff") 

Je veux tracer cela comme une parcelle de densité à l'aide ggplot2:

p <- ggplot(df, aes(x = max.diff)) 
p <- p + geom_histogram(stat = "density") 
print(p) 

qui donne,

enter image description here

Maintenant, une question naïve: pourquoi cela ne donne-t-il pas le même résultat?

p <- ggplot(df, aes(x = max.diff)) 
p <- p + geom_histogram(aes(y = ..density..)) 
print(p) 

enter image description here

Est-ce en raison du choix binwidth ou le nombre de bins ou d'autres paramètres? Jusqu'à présent, je n'ai pas été en mesure de modifier ces paramètres pour les rendre identiques. Ou suis-je en train de comploter quelque chose d'assez différent?

Répondre

0

Le deuxième exemple consiste à redimensionner les comptages d'histogrammes de sorte que les zones de barres s'intègrent à 1, mais soit par ailleurs identique à l'histogramme ggplot2 standard. Vous pouvez ajuster le nombre de barres avec les arguments bins ou binwidth.

Le premier exemple consiste à calculer une estimation de densité de noyau et à tracer la sortie (la densité estimée à chaque valeur x) sous la forme d'un histogramme. Vous pouvez modifier la quantité de lissage de l'estimation de densité avec l'argument adjust et le nombre de points auxquels la densité est calculée à l'aide de l'argument n. La valeur par défaut pour geom_histogram est bins=30. La valeur par défaut pour stat="density" est adjust=1 et n=512 (stat="density" utilise la fonction density pour générer les valeurs). La sortie stat="density" est beaucoup plus lisse que la sortie de l'histogramme en raison de la façon dont density choisit la bande passante pour l'estimation de la densité. La réduction de l'argument adjust réduit la quantité de lissage.

Les deux premiers exemples ci-dessous sont vos graphiques. Les deux derniers utilisent des ajustements aux paramètres respectifs pour obtenir deux graphiques qui sont à peu près similaires, mais pas exactement la même chose parce que l'estimation de la densité du noyau continue de lisser la sortie. Ceci est juste à titre d'illustration. L'estimation de la densité du noyau et l'histogramme sont deux choses différentes, liées à la pensée.

ggplot(df, aes(x = max.diff)) + 
    geom_histogram(stat = "density") + 
    ggtitle("stat='density'; default paramters") 

ggplot(df, aes(x = max.diff)) + 
    geom_histogram(aes(y = ..density..), colour="white") + 
    ggtitle("geom_histogram; default parameters") 

ggplot(df, aes(x = max.diff)) + 
    geom_histogram(stat = "density", n=2^5, adjust=0.1) + 
    ggtitle("stat='density'; n=2^5; Adjust=0.1") 

ggplot(df, aes(x = max.diff)) + 
    geom_histogram(aes(y = ..density..), bins=2^5, colour="white") + 
    ggtitle("geom_histogram; bins=2^5") 

enter image description here