2013-01-06 108 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'運行正是你的建議。 –