R ggplot:加权CDF

时间:2015-09-09 19:12:01

标签: r ggplot2 cdf

我想使用ggplot绘制加权CDF。一些旧的非SO讨论(例如2012年的this)表明这是不可能的,但我认为我会重新加入。

例如,请考虑以下数据:

df <- data.frame(x=sort(runif(100)), w=1:100)

我可以用

显示未加权的CDF
ggplot(df, aes(x)) + stat_ecdf()

enter image description here

我如何通过w加权?对于这个例子,我期望一个x^2 - 看起来的函数,因为较大的数字具有较高的权重。

2 个答案:

答案 0 :(得分:8)

您可以计算数据框内的累积分布,即:

df <- df[order(df$x), ]  # Won't change anything since it was created sorted
df$cum.pct <- with(df, cumsum(x * w) / sum(x * w))
ggplot(df, aes(x, cum.pct)) + geom_line()

enter image description here

答案 1 :(得分:1)

您的答案有误。

这是计算加权ECDF的正确代码:

df <- df[order(df$x), ]  # Won't change anything since it was created sorted
df$cum.pct <- with(df, cumsum(w) / sum(w))
ggplot(df, aes(x, cum.pct)) + geom_line()

ECDF是函数F(a),等于x<a除以权重总和后的观察值的权重(概率)之和。

但是这里有一个更令人满意的选项,它只是修改了ggplot2 stat_ecdf的原始代码: https://github.com/NicolasWoloszko/stat_ecdf_weighted