我有以下数据框:
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中离散随机变量的均值和方差?
答案 0 :(得分: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
这些是样本统计数据,而不是为抽象随机变量计算的差异。这个结果似乎适用于统计系统,但可能不是概率作业问题的正确答案。