次のデータフレームがあります。
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の離散確率変数の平均と分散を計算する組み込み関数またはエレガントな方法はありますか?
次のデータフレームがあります。
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には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
これらは、抽象的なランダム変数に対して計算される分散ではなく、標本統計です。この結果は、統計システムには適しているように見えますが、確率の宿題の質問に対する正しい答えではない可能性があります。