R中是否有将曲线拟合为直方图的函数?
假设您有以下直方图
hist(c(rep(65, times=5), rep(25, times=5), rep(35, times=10), rep(45, times=4)))
看起来很正常,但是歪斜了。我想拟合一条偏斜的正态曲线以围绕此直方图。
这个问题是很基本的,但是我似乎在互联网上找不到R的答案。
R中是否有将曲线拟合为直方图的函数?
假设您有以下直方图
hist(c(rep(65, times=5), rep(25, times=5), rep(35, times=10), rep(45, times=4)))
看起来很正常,但是歪斜了。我想拟合一条偏斜的正态曲线以围绕此直方图。
这个问题是很基本的,但是我似乎在互联网上找不到R的答案。
Answers:
如果我正确理解了您的问题,那么您可能想要密度估计值和直方图:
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)
连同它产生的图形:
lines(density(X,na.rm= TRUE)
因为矢量可能包含NA值。
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()
或模仿Dirk解决方案的结果
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软件包来做到这一点...
Dirk解释了如何在直方图中绘制密度函数。但是有时您可能希望采用偏态正态分布的更强假设,并绘制密度而不是密度。您可以估计分布的参数,并使用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 s.d. skewness
41.46228 12.47892 0.99527
这对于偏斜正态的数据可能会更好:
我遇到了同样的问题,但是Dirk的解决方案似乎不起作用。我每次都收到这个警告信息
"prob" is not a graphical parameter
我通读后?hist
发现freq: a logical vector set TRUE by default.
对我有用的代码是
hist(x,freq=FALSE)
lines(density(x),na.rm=TRUE)