R ggplot:加权CDF

Max*_*nis 4 r ggplot2 cdf

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

例如,请考虑以下数据:

df <- data.frame(x=sort(runif(100)), w=1:100)
Run Code Online (Sandbox Code Playgroud)

我可以展示一个未加权的CDF

ggplot(df, aes(x)) + stat_ecdf()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我怎么称重w呢?对于这个例子,我希望x^2看起来有一个功能,因为较大的数字具有较高的权重.

Nic*_*zko 9

你的回答有错误。

这是计算加权 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()
Run Code Online (Sandbox Code Playgroud)

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

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


Max*_*nis 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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述