2013-01-06 88 views
0

加权离散型随机变量,我有以下的数据帧:计算均值和方差为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中离散型随机变量优雅的方式?

+0

我改变了行的名称,使它们是唯一的,这是R中数据框的一个要求。 –

回答

3

在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 

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

+1

为什么这个方差与E(x^2) - E(x)^ 2'不同? –

+0

那么不同?由于概率权重被转移到(),所以它低于'var(X)=> mean(dat $ X^2) - mean(dat $ X)^ 2 = [1] 1.25'就不足为奇了。分配。 –

+0

请阅读帮助页面。使用'normwt'运行正是你的建议。 –