如何使用ggplot在直方圖上疊加任意參數分佈?如何使用ggplot在直方圖上疊加任意參數分佈?
我已經根據Quick-R example進行了嘗試,但我不明白縮放因子來自哪裏。這種方法合理嗎?我如何修改它以使用ggplot?
一個例子overplot使用這種方法的正常和對數正態分佈如下:
## 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)
這將產生以下情節:
爲了澄清,我想有在y軸計數而不是密度估計。
注意到正態分佈沒有意義,因爲單詞都有> 0個字母,並且這些值是不連續的整數;正常是連續的。 –
同意 - 這是一個帶有便利數據集的玩具示例。而正常的曲線可能不合適。 – fmark