【问题标题】:calculate mean and variance for weighted discrete random variables in R计算 R 中加权离散随机变量的均值和方差
【发布时间】:2013-01-06 22:20:42
【问题描述】:

我有以下数据框:

dat <- read.table(text="  X prob
1 1  0.1
2 2  0.2
3 3  0.4
4 4  0.3", header=TRUE)

是否有任何内置函数或优雅的方法来计算 R 中离散随机变量的均值和方差?

【问题讨论】:

  • 我更改了行名,因此它们是唯一的,这是 R 中数据框的要求。

标签: r weighted weighted-average


【解决方案1】:

在基础 R 中有一个 weighted.mean 函数,而 Hmisc 包有一堆 wtd.* 函数。

> with(dat, weighted.mean(X, prob))
[1] 2.9

require(Hmisc)
>  wtd.var(x=dat$X, weights=dat$prob)
[1] Inf
# Huh ?  On investigation the weights argument is suppsed to be replicate weights
# So it's more appropriate to use normwt=TRUE
> wtd.var(x=dat$X, weights=dat$prob, normwt=TRUE)
[1] 1.186667

Thomas Lumley 提供的调查包提供的内容远不止这个简单示例所示。它具有为各种统计建模程序处理复杂加权方案的机制:

require(survey)
> dclus1<-svydesign(id=~1, weights=~prob, data=dat)
>   v<-svyvar(~X, dclus1)
> v
  variance     SE
X   1.1867 0.7011

这些是样本统计数据,而不是为抽象随机变量计算的方差。这个结果似乎确实适用于统计系统,但可能不是概率作业问题的正确答案。

【讨论】:

  • 为什么这种差异与E(x^2) - E(x)^2 如此不同?
  • 如此不同?它低于var(X)=&gt; mean(dat$X^2) - mean(dat$X)^2 = [1] 1.25 并不奇怪,因为概率权重转移到了分布的一侧。
  • 请阅读帮助页面。使用normwt 运行完全符合您的建议。
  • 我不明白为什么 wtd.var 结果应该不同于 var(x) 的结果,即 3.5。
猜你喜欢
  • 1970-01-01
  • 2018-03-10
  • 2012-04-20
  • 1970-01-01
  • 2014-05-18
  • 1970-01-01
  • 2011-10-12
  • 2022-01-01
相关资源
最近更新 更多