合并观测值的标准差


24

我有一个样本观测数据集,存储为范围箱内的计数。例如:

min/max  count
40/44    1
45/49    2
50/54    3
55/59    4
70/74    1

现在,从中找到平均值的估计非常简单。只需将每个范围区间的平均值(或中位数)用作观察值,并将计数作为权重即可找到加权平均值:

x¯=1i=1Nwii=1Nwixi

对于我的测试用例,这给了我53.82。

现在我的问题是,找到标准偏差(或方差)的正确方法是什么?

通过搜索,我找到了几个答案,但不确定哪一个实际上适合我的数据集。在这里的另一个问题随机的NIST文档中,我都能找到以下公式。

s2=i=1Nwi(xix¯)2(M1)Mi=1Nwi

对于我的测试用例,其标准偏差为8.35。但是,维基百科有关加权均值的文章给出了两个公式:

s2=i=1Nwi(i=1Nwi)2i=1Nwi2i=1Nwi(xix¯)2

s2=1(i=1Nwi)1i=1Nwi(xix¯)2

对于我的测试用例,它们的标准偏差分别为8.66和7.83。

更新资料

感谢@whuber,他建议研究Sheppard的更正,以及与它们有关的有用评论。不幸的是,我很难理解我能找到的资源(而且我找不到任何好的例子)。总而言之,我理解以下内容是方差的有偏估计:

s2=1i=1Nwii=1Nwi(xix¯)2

我还了解到,大多数标准偏差校正都是针对正态分布的直接随机样本。因此,我认为有两个潜在问题:

  1. 这些是装箱的随机样本(我很确定,这是Sheppard校正的来源。)
  2. 数据是否为正态分布是未知的(因此我假设不是,我很确定这会使Sheppard的修正无效。)

所以,我更新的问题是;处理“简单”加权标准偏差/方差公式对非正态分布施加的偏差的合适方法是什么?最特别是关于合并数据。

注意:我使用以下术语:

  • 是加权方差 s2
  • 是观察数。(即箱数)N
  • 是非零权重的数量。(即带计数的垃圾箱数量)M
  • 是权重(即计数)wi
  • 是观察值。(即bin表示)xi
  • 是加权平均值。x¯

5
Google针对此问题的标准解决方案“谢泼德更正”。
ub

@whuber,恐怕我的google-foo让我失望了……我对如何使用Sheppard的更正并没有太多了解。据我所知,这是对数据的分级性质的修正,并在我的测试情况下,想使用,其中c是垃圾箱的大小(在我的测试案例中为4)。它是否正确?无论如何,我发现的内容似乎仍无法帮助我计算s2s2c212cs2
chezy525

我的Google搜索中第二个匹配项提供了一个明确的公式(公式9)。
ub

@whuber,已经过去了几个月,我已经尝试阅读了您链接的文档几次。我认为我仍然缺少一些东西,但是我想出的最好的一点是,我列出的最终方程式作为无偏估计量是正确的。这是正确的吗?
chezy525

Sheppard的更正不具有正常性。
Glen_b-恢复莫妮卡

Answers:


18

该答复提出了两种解决方案:谢泼德的更正和最大似然估计。 两者都非常接近标准偏差的估计值:第一个为,第二个为7.69(经过调整后可与通常的“无偏”估计量进行比较)。7.707.69


谢泼德的更正

“ Sheppard的更正”是用于调整根据合并数据(如此类)计算的矩的公式,其中

  • 假定数据受有限间隔[ a b ]上支持的分布控制[a,b]

  • 将该间隔依次划分为公共宽度相对较小的相等单元(没有单元包含所有数据的很大一部分)h

  • 分布具有连续密度函数。

它们是从Euler-Maclaurin和公式得出的,该公式根据在规则间隔的点处被积物的值的线性组合来近似积分,因此通常适用(并且不仅适用于正态分布)。

尽管严格说来,在有限的间隔内支持正态分布,但是非常接近。本质上,其所有概率都包含在平均值的七个标准偏差之内。因此,谢泼德的修正适用于假定来自正态分布的数据。

前两个Sheppard的更正是

  1. 将合并数据的平均值用作数据的平均值(即,不需要对该平均值进行校正)。

  2. h2/12

h2/12hh/2h/2h2/12

让我们进行计算。我R用来说明它们,首先指定计数和容器:

counts <- c(1,2,3,4,1)
bin.lower <- c(40, 45, 50, 55, 70)
bin.upper <- c(45, 50, 55, 60, 75)

用于计数的正确公式是通过按计数给定的数量来复制箱宽度。也就是说,合并的数据等于

42.5, 47.5, 47.5, 52.5, 52.5, 57.5, 57.5, 57.5, 57.5, 72.5

xkkx2

bin.mid <- (bin.upper + bin.lower)/2
n <- sum(counts)
mu <- sum(bin.mid * counts) / n
sigma2 <- (sum(bin.mid^2 * counts) - n * mu^2) / (n-1)

mu1195/2254.32sigma2675/1161.367.83h=5h2/12=25/122.08675/1152/127.70


最大似然估计

Fθθ(x0,x1]kFθ

logi=1k(Fθ(x1)Fθ(x0))=klog(Fθ(x1)Fθ(x0))

(请参阅MLE /对数正态分布区间的可能性)。

Λ(θ)θ^Λ(θ)θR

sigma <- sqrt(sigma2) # Crude starting estimate for the SD
likelihood.log <- function(theta, counts, bin.lower, bin.upper) {
  mu <- theta[1]; sigma <- theta[2]
  -sum(sapply(1:length(counts), function(i) {
    counts[i] * 
      log(pnorm(bin.upper[i], mu, sigma) - pnorm(bin.lower[i], mu, sigma))
  }))
}
coefficients <- optim(c(mu, sigma), function(theta) 
  likelihood.log(theta, counts, bin.lower, bin.upper))$par

(μ^,σ^)=(54.32,7.33)

σn/(n1)σn/(n1)σ^=11/10×7.33=7.697.70

验证假设

为了可视化这些结果,我们可以在直方图中绘制拟合的法线密度:

hist(unlist(mapply(function(x,y) rep(x,y), bin.mid, counts)),
     breaks = breaks, xlab="Values", main="Data and Normal Fit")
curve(dnorm(x, coefficients[1], coefficients[2]), 
      from=min(bin.lower), to=max(bin.upper), 
      add=TRUE, col="Blue", lwd=2)

数字

11

χ2χ2R

breaks <- sort(unique(c(bin.lower, bin.upper)))
fit <- mapply(function(l, u) exp(-likelihood.log(coefficients, 1, l, u)),
              c(-Inf, breaks), c(breaks, Inf))
observed <- sapply(breaks[-length(breaks)], function(x) sum((counts)[bin.lower <= x])) -
  sapply(breaks[-1], function(x) sum((counts)[bin.upper < x]))
chisq.test(c(0, observed, 0), p=fit, simulate.p.value=TRUE)

输出是

Chi-squared test for given probabilities with simulated p-value (based on 2000 replicates)

data:  c(0, observed, 0) 
X-squared = 7.9581, df = NA, p-value = 0.2449

0.245

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.