ビニングされた観測値の標準偏差


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と、それらに関連する有益なコメントに感謝します。残念ながら、私はそれについて見つけることができるリソースを理解するのに苦労しています(そして、私は良い例が見つかりません)。要約すると、以下は分散のバイアス推定値であることを理解しています。

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

また、バイアスのほとんどの標準的な修正は、正規分布の直接ランダムサンプルに対するものであることも理解しています。したがって、私には2つの潜在的な問題があります。

  1. これらは、ビン化されたランダムサンプルです(シェパードの修正が入る場所であると確信しています)。
  2. データが正規分布のものかどうかは不明です(したがって、そうではないと思いますが、シェパードの修正は無効になると確信しています)。

だから、私の更新された質問は次のとおりです。非正規分布の「単純な」加重標準偏差/分散式によって課されるバイアスを処理する適切な方法は何ですか?最も具体的には、ビニングされたデータに関してです。

注:次の用語を使用しています。

  • s2は加重分散です
  • Nは観測値の数です。(つまり、ビンの数)
  • Mは、非ゼロの重みの数です。(つまり、カウント付きのビンの数)
  • wiは重み(つまりカウント)です
  • xiは観測値です。(つまり、ビンとは)
  • x¯は加重平均です。

5
この問題の標準的な解決策については、Google「シェパードの修正」。
whuber

@ whuber、google-fooが失敗しているのではないかと心配しています... Sheppardの修正を使用する方法についてはあまり見つけていません。私の知る限り、それはデータのビニングされた性質の修正であり、私のテストケースではように使用され。ここではサイズですビンの(私のテストケースでは4)。これは正しいです?いずれにせよ、私が見つけていることは計算にまだ役に立たないようです。 cs2s2c212cs2
chezy525

第二のヒット私の中のGoogle検索では、明示的な式(式9)を提供します。
whuber

@whuber、それは数ヶ月でした、そして私はあなたが数回リンクしたドキュメントを読んでみました。私はまだ何かを逃していると思いますが、私が思いついた最高のことは、私がリストした最後の方程式が不偏推定量として正しいことです。これは正解?
chezy525

シェパードの修正は正常性を仮定していません。
Glen_b

回答:


18

この回答は、シェパードの修正と最尤推定の2つのソリューションを示しています。 両者は、標準偏差の推定値に密接に同意します。最初の推定値と2番目の推定値(通常の「バイアスなし」推定器に匹敵するように調整された場合)。7.697.707.69


シェパードの修正

「シェパードの補正」は、ビン化されたデータ(これらのような)から計算されたモーメントを調整する式です。

  • データは、有限間隔サポートされる分布によって支配されると想定されます[a,b]

  • その間隔は、比較的小さい共通幅等しいビンに順次分割されます(すべてのデータの大部分を含むビンはありません)h

  • 分布には連続密度関数があります。

これらは、オイラー-マクローリンの合計式から導出されます。これは、等間隔の点での被積分関数の値の線形結合に関して積分を近似するため、一般に適用できます(正規分布だけでなく)。

厳密に言えば、正規分布は有限間隔でサポートされていませんが、非常に近い近似になります。基本的に、その確率はすべて平均の7つの標準偏差内に含まれます。そのため、シェパードの修正は、正規分布に由来すると想定されるデータに適用できます。

最初の2つのシェパードの修正は

  1. データの平均には、ビニングされたデータの平均を使用します(つまり、平均の修正は不要です)。

  2. ビニングされたデータの分散から 2/12を減算して、データの(近似)分散を取得します。h2/12

2/12はどこから来たのですか?これは、長さ区間に分布する一様変量の分散に等しくなります。直感的に、その後、二次モーメントのためにシェパードの補正は、ことを示唆して効果的に各ビンの中点によってそれらを置換する- -データビニングの範囲のほぼ均一に分布値を追加するように見える間及びそこからそれが膨張、 2/12による分散時間- H / 2 H / 2 H 2 / 12h2/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

ただし、この方法でデータを拡張することなく、それらの数、平均、および分散を直接計算できます。ビンに中点およびカウントがある場合、平方和への寄与はです。これは、質問で引用されたウィキペディアの公式の2番目につながります。k k x 2xkkx2

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)

平均(mu)は(修正不要)であり、分散()はです。(質問で述べたように、その平方根はです。)共通のビン幅はであるため、分散からを減算し、その平方根を取得して取得します。標準偏差の場合は。675 / 11 61.36 7.83 H = 5 のH 2 / 12 = 25 / 12 2.08 1195/2254.32sigma2675/1161.367.83h=5h2/12=25/122.08675/1152/127.70


最大尤度推定

別の方法は、最尤推定を適用することです。想定される基礎となる分布が分布関数(推定されるパラメーターに依存)を持ち、ビンがからの独立した同一分布値のセットから値を含む場合、このビンの対数尤度への(追加)寄与は θ X 0xは1 ] K F θ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)

ただし、正規分布の場合、最尤推定値(データがビニングされずに正確に与えられた場合)はデータの母集団 SDであり、分散に乗算される従来の「バイアス補正」推定値ではないことに注意してください。(比較のため)のMLEを修正して、見つけましょう。 これは、シェパードの修正の結果であると比較して有利です。N /N - 1 σ σn/(n1)σ7.70n/(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

データが正規分布によって支配されているという仮定(MLEが作成)をより正式に確認しましょう。近似適合度検定は、検定から取得できます。推定パラメーターは、各ビンの予想データ量を示します。統計が予想カウントに観測されたカウントを比較します。以下にテストを示します。χ 2χ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

ソフトウェアは順列検定を実行しました(検定統計量がカイ二乗分布に正確に従わないために必要です:自由度を理解する方法で私の分析を参照してください)。小さくないp値、正常からの逸脱の証拠をほとんど示していません。最尤結果を信頼する理由があります。0.245

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.