加权离散型随机变量,我有以下的数据帧:计算均值和方差为R中
dat <- read.table(text=" X prob
1 1 0.1
2 2 0.2
3 3 0.4
4 4 0.3", header=TRUE)
是否有任何内置函数或calulate均值和方差为R中离散型随机变量优雅的方式?
加权离散型随机变量,我有以下的数据帧:计算均值和方差为R中
dat <- read.table(text=" X prob
1 1 0.1
2 2 0.2
3 3 0.4
4 4 0.3", header=TRUE)
是否有任何内置函数或calulate均值和方差为R中离散型随机变量优雅的方式?
在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)=> mean(dat $ X^2) - mean(dat $ X)^ 2 = [1] 1.25'就不足为奇了。分配。 –
请阅读帮助页面。使用'normwt'运行正是你的建议。 –
我改变了行的名称,使它们是唯一的,这是R中数据框的一个要求。 –