如何在 R 中绘制以密度结尾的均值线、中值线和众数线?

机器算法验证 r 数据可视化 意思是 中位数 模式
2022-03-14 23:39:25

我使用以下命令绘制了一个倾斜分布:

x <- seq(-2.5, 10, length=1000000)
hx5 <- rnorm(x,0,1) + rexp(x,1/5) # tau=5 (rate = 1/tau)
plot(density(hx5), xlim=c(-2.5,10), type="l", col="green",
     xlab="x", main="ExGaussian  curve",lwd=2)

现在我想为分布的均值、众数和中位数画三条线。如果我简单地写,例如:

abline(v=median(hx5))

这条线走出曲线,但我想用参数的密度点结束这条线。所以,我的问题是:

如何在我的观察值的平均值、众数和中位数处找到密度值,以便为绘图设置正确的坐标?

1个回答

密度表示为折线,它是一对平行阵列,一个用于,一个用于,沿密度图形成顶点(在方向上等间距)。因此,它是理想化连续密度的离散近似,我们可以使用相关积分的离散版本来计算统计数据。因为间距通常非常接近,所以可能几乎不需要在连续点之间进行插值:我们可以使用简单的算法。xyx

何处,

x <- seq(-2.5, 10, length=1000000)
hx5 <- rnorm(x,0,1) + rexp(x,1/5) # tau=5 (rate = 1/tau)
#
# Compute the density.
#
dens <- density(hx5)
#
# Compute some measures of location.
#
n <- length(dens$y)                       #$
dx <- mean(diff(dens$x))                  # Typical spacing in x $
y.unit <- sum(dens$y) * dx                # Check: this should integrate to 1 $
dx <- dx / y.unit                         # Make a minor adjustment
x.mean <- sum(dens$y * dens$x) * dx
y.mean <- dens$y[length(dens$x[dens$x < x.mean])] #$
x.mode <- dens$x[i.mode <- which.max(dens$y)]
y.mode <- dens$y[i.mode]                  #$
y.cs <- cumsum(dens$y)                    #$
x.med <- dens$x[i.med <- length(y.cs[2*y.cs <= y.cs[n]])] #$
y.med <- dens$y[i.med]                                    #$
#
# Plot the density and the statistics.
#
plot(dens, xlim=c(-2.5,10), type="l", col="green",
     xlab="x", main="ExGaussian curve",lwd=2)
temp <- mapply(function(x,y,c) lines(c(x,x), c(0,y), lwd=2, col=c), 
               c(x.mean, x.med, x.mode), 
               c(y.mean, y.med, y.mode), 
               c("Blue", "Gray", "Red"))

阴谋