将密度曲线拟合到R中的直方图

R中是否有适合直方图曲线的函数?

假设您有以下直方图

hist(c(rep(65, times=5), rep(25, times=5), rep(35, times=10), rep(45, times=4))) 

这看起来很正常,但是是偏斜的。 我想拟合一个正常的曲线,这个曲线是偏斜的,绕着这个直方图。

这个问题是相当基本的,但我似乎无法在互联网上findR的答案。

如果我正确理解你的问题,那么你可能需要一个密度估计和直方图:

 X <- c(rep(65, times=5), rep(25, times=5), rep(35, times=10), rep(45, times=4)) hist(X, prob=TRUE) # prob=TRUE for probabilities not counts lines(density(X)) # add a density estimate with defaults lines(density(X, adjust=2), lty="dotted") # add another "smoother" density 

稍后编辑一下:

这是一个稍微打扮的版本:

 X <- c(rep(65, times=5), rep(25, times=5), rep(35, times=10), rep(45, times=4)) hist(X, prob=TRUE, col="grey")# prob=TRUE for probabilities not counts lines(density(X), col="blue", lwd=2) # add a density estimate with defaults lines(density(X, adjust=2), lty="dotted", col="darkgreen", lwd=2) 

随着它产生的graphics:

在这里输入图像描述

ggplot2很容易

 library(ggplot2) dataset <- data.frame(X = c(rep(65, times=5), rep(25, times=5), rep(35, times=10), rep(45, times=4))) ggplot(dataset, aes(x = X)) + geom_histogram(aes(y = ..density..)) + geom_density() 

或者模仿德克解决scheme的结果

 ggplot(dataset, aes(x = X)) + geom_histogram(aes(y = ..density..), binwidth = 5) + geom_density() 

这是我做的方式:

 foo <- rnorm(100, mean=1, sd=2) hist(foo, prob=TRUE) curve(dnorm(x, mean=mean(foo), sd=sd(foo)), add=TRUE) 

奖励练习是用ggplot2软件包来做这件事…

德克解释了如何绘制直方图上的密度函数。 但是有时候你可能想要用更偏向正态分布的假设来代替密度。 您可以估计分布的参数,并使用sn包对其进行绘图:

 > sn.mle(y=c(rep(65, times=5), rep(25, times=5), rep(35, times=10), rep(45, times=4))) $call sn.mle(y = c(rep(65, times = 5), rep(25, times = 5), rep(35, times = 10), rep(45, times = 4))) $cp mean sd skewness 41.46228 12.47892 0.99527 

偏斜正态分布的数据图

对于更偏斜正常的数据,这可能效果更好:

另一个偏斜正常情节

我有同样的问题,但德克的解决scheme似乎并没有工作。 我每次都得到这个警告信息

 "prob" is not a graphical parameter 

我读完了?hist,发现freq :一个逻辑向量,默认为TRUE。

为我工作的代码是

 hist(x,freq=FALSE) lines(density(x),na.rm=TRUE)