R ggplot:加权累积分布函数

9
我想用ggplot绘制加权累积分布函数。一些旧的非SO讨论(例如2012年的这个)表明这是不可能的,但我想再次提出。例如,考虑以下数据:
df <- data.frame(x=sort(runif(100)), w=1:100)

我可以展示一个无权重的CDF(累积分布函数),使用以下代码:

ggplot(df, aes(x)) + stat_ecdf()

这里输入图片描述

如果要按照w进行加权,我应该怎么做?对于这个例子,我会期望一个类似于x ^ 2的函数,因为较大的数字具有更高的权重。

1个回答

11

你的回答有错误。

这是计算加权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

嗨,github存储库中的代码看起来非常有趣。您能否添加一些指南,以安全地“安装/卸载”它?谢谢。 - vagvaf
1
@vagvaf,我在这方面经验不是很丰富,但它看起来只是一个.R文件,所以我认为你只需要在加载ggplot2库后复制代码(这将覆盖stat_ecdf函数)。我认为可以使用诸如library(devtools)的命令从GitHub安装软件包,然后使用install_github("NicolasWoloszko/stat_ecdf_weighted") - ahorn
1
最简单的方法是使用原始URL。只需键入source(“ https://raw.githubusercontent.com/NicolasWoloszko/stat_ecdf_weighted/master/stat_ecdf_weighted.R”)即可。您可以键入stat_ecdf(不带括号)来查看在调用Nicolas的脚本之前和之后如何定义该函数。 - ahorn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接