この回答は、シェパードの修正と最尤推定の2つのソリューションを示しています。 両者は、標準偏差の推定値に密接に同意します。最初の推定値と2番目の推定値(通常の「バイアスなし」推定器に匹敵するように調整された場合)。7.697.707.69
シェパードの修正
「シェパードの補正」は、ビン化されたデータ(これらのような)から計算されたモーメントを調整する式です。
データは、有限間隔サポートされる分布によって支配されると想定されます[ a 、b ]
その間隔は、比較的小さい共通幅等しいビンに順次分割されます(すべてのデータの大部分を含むビンはありません)h
分布には連続密度関数があります。
これらは、オイラー-マクローリンの合計式から導出されます。これは、等間隔の点での被積分関数の値の線形結合に関して積分を近似するため、一般に適用できます(正規分布だけでなく)。
厳密に言えば、正規分布は有限間隔ではサポートされていませんが、非常に近い近似になります。基本的に、その確率はすべて平均の7つの標準偏差内に含まれます。そのため、シェパードの修正は、正規分布に由来すると想定されるデータに適用できます。
最初の2つのシェパードの修正は
データの平均には、ビニングされたデータの平均を使用します(つまり、平均の修正は不要です)。
ビニングされたデータの分散から 2/12を減算して、データの(近似)分散を取得します。h2/ 12
2/12はどこから来たのですか?これは、長さ区間に分布する一様変量の分散に等しくなります。直感的に、その後、二次モーメントのためにシェパードの補正は、ことを示唆して効果的に各ビンの中点によってそれらを置換する- -データビニングの範囲のほぼ均一に分布値を追加するように見える間及びそこからそれが膨張、 2/12による分散。時間- H / 2 H / 2 H 2 / 12h2/ 12h− h / 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 2バツkk x2
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 / 22 ≈ 54.32sigma2
675 / 11 ≈ 61.367.83h = 5h2/ 12=25 / 12≈2.08675 / 11 - 52/ 12−−−−−−−−−−−−√≈ 7.70
最大尤度推定
別の方法は、最尤推定を適用することです。想定される基礎となる分布が分布関数(推定されるパラメーターに依存)を持ち、ビンがからの独立した同一分布値のセットから値を含む場合、このビンの対数尤度への(追加)寄与は θ (X 0、xは1 ] K F θFθθ(x0、x1]kFθ
ログ∏i = 1k(Fθ(x1)− Fθ(x0)) = k log(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 /(n − 1 )σ7.70n /(n − 1 )−−−−−−−−√σ^= 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