【问题标题】:Add line segment to density plot将线段添加到密度图
【发布时间】:2022-06-11 02:43:55
【问题描述】:

我想在我的图中添加一条线来表示平均值:

X1 <- rnorm(100)
# Kernel density estimates
density_X1 <- density(X1)
# Compute mode
mode_X1 <- density_X1$x[which.max(density_X1$y)]; mode_X1
# Compute mean
mean_X1 <- mean(X1)
# Create plot 
plot(density_X1, main = "Kernel density estimates", xlab = "X1", ylab = "density")
# Add line for mode
segments(x0 = mode_X1, y0 = 0, x1 = mode_X1, y1 = density_X1$y, col = "red", lty = 1, lwd = 1)
# Add line for mean
segments(x0 = mean_X1, y0 = 0, x1 = mean_X1, y1 = , col = "red", lty = 5, lwd = 2)

我需要为segments(y1 = ) 输入什么值以确保上限是核密度图?

【问题讨论】:

    标签: r plot


    【解决方案1】:

    要根据离散点的密度估计值计算某个 x 值的 y 值,您需要进行某种插值。一种方法是使用 approx 的线性插值:

    approx(x = density_X1$x, y = density_X1$y, xout = mean_X1)$y
    

    其中,xy 给出要插值的点,xout 是完成插值的 x 值的(向量)(参见 ?approx

    代码如下:

    set.seed(72405277)
    X1 <- rnorm(100)
    # Kernel density estimates
    density_X1 <- density(X1)
    # Compute mode
    mdIdx <- which.max(density_X1$y) # store and resuse
    mode_X1 <- density_X1$x[mdIdx]; 
    # Compute mean
    mean_X1 <- mean(X1)
    # Create plot 
    plot(density_X1, main = "Kernel density estimates", xlab = "X1", ylab = "density")
    # Add line for mode
    segments(x0 = mode_X1, y0 = 0, x1 = mode_X1, y1 = density_X1$y[mdIdx], col = "red", lty = 1, lwd = 1)
    # Add line for mean
    yax2 <- approx(x = density_X1$x, y = density_X1$y, xout = mean_X1)$y
    segments(x0 = mean_X1, y0 = 0, x1 = mean_X1, y1 = yax2, col = "blue", lty = 5, lwd = 2)
    

    【讨论】:

    • 你也可以试试kde1d 包。然后,该软件包具有可以轻松估计特定值(以及更多设施)的密度的功能。所以你可以通过d &lt;- kde1d(X1); dkde1d(mean(X1), d) 来获取值(注意,由于密度估计器不同,这与上面有点不同)
    【解决方案2】:

    你也可以像这样使用abline

    X1 <- rnorm(100)
    # Kernel density estimates
    density_X1 <- density(X1)
    # Compute mode
    mode_X1 <- density_X1$x[which.max(density_X1$y)]; mode_X1
    # Compute mean
    mean_X1 <- mean(X1)
    # Create plot 
    plot(density_X1, main = "Kernel density estimates", xlab = "X1", ylab = "density")
    abline(v = mode_X1, col = "red", lty = 1, lwd = 1)
    abline(v = mean_X1, col = "red", lty = 5, lwd = 2)
    

    输出:

    【讨论】:

      猜你喜欢
      • 2016-11-30
      • 2020-08-21
      • 2021-11-02
      • 2011-11-30
      • 1970-01-01
      • 2021-07-08
      • 2021-02-04
      • 1970-01-01
      相关资源
      最近更新 更多