Come posso sovrapporre una distribuzione parametrica arbitraria su un istogramma usando ggplot?Come posso sovrapporre una distribuzione parametrica arbitraria su un istogramma usando ggplot?
Ho fatto un tentativo basato su un Quick-R example, ma non capisco da dove proviene il fattore di scala. Questo metodo è ragionevole? Come posso modificarlo per usare ggplot?
Un esempio overplot distribuzioni normali e lognormali utilizzando questo metodo segue:
## Get a log-normalish data set: the number of characters per word in "Alice in Wonderland"
alice.raw <- readLines(con = "http://www.gutenberg.org/cache/epub/11/pg11.txt",
n = -1L, ok = TRUE, warn = TRUE,
encoding = "UTF-8")
alice.long <- paste(alice.raw, collapse=" ")
alice.long.noboilerplate <- strsplit(alice.long, split="\\*\\*\\*")[[1]][3]
alice.words <- strsplit(alice.long.noboilerplate, "[[:space:]]+")[[1]]
alice.nchar <- nchar(alice.words)
alice.nchar <- alice.nchar[alice.nchar > 0]
# Now we want to plot both the histogram and then log-normal probability dist
require(MASS)
h <- hist(alice.nchar, breaks=1:50, xlab="Characters in word", main="Count")
xfit <- seq(1, 50, 0.1)
# Plot a normal curve
yfit<-dnorm(xfit,mean=mean(alice.nchar),sd=sd(alice.nchar))
yfit <- yfit * diff(h$mids[1:2]) * length(alice.nchar)
lines(xfit, yfit, col="blue", lwd=2)
# Now plot a log-normal curve
params <- fitdistr(alice.nchar, densfun="lognormal")
yfit <- dlnorm(xfit, meanlog=params$estimate[1], sdlog=params$estimate[1])
yfit <- yfit * diff(h$mids[1:2]) * length(alice.nchar)
lines(xfit, yfit, col="red", lwd=2)
Questo produce il seguente diagramma:
Per chiarire, desidero avere conta sulla asse y , piuttosto che una stima della densità.
nota che una distribuzione normale non ha senso perché tutte le parole hanno> 0 lettere, e i valori sono interi discreti; il normale è continuo. –
Concordato - questo è un esempio di giocattolo con un set di dati a portata di mano. E una curva normale è probabilmente inappropriata. – fmark