標準偏差の推定量は、通常の二乗平均平方根アプローチよりも外れ値の影響を受けにくいため、これは興味深いアイデアです。ただし、この推定量が公開されているとは思えません。 理由は3つあります。計算が非効率的であり、バイアスがかかっています。バイアスが修正されても、統計的に非効率的です(ただし、ほんのわずかです)。これらは少し予備的な分析で見ることができるので、まずそれを行ってから結論を導きましょう。
分析
μσ(xi,xj)
μ^(xi,xj)=xi+xj2
そして
σ^(xi,xj)=|xi−xj|2.
したがって、質問で説明されている方法は
μ^(x1,x2,…,xn)=2n(n−1)∑i>jxi+xj2=1n∑i=1nxi,
これは平均の通常の推定量であり、
σ^(x1,x2,…,xn)=2n(n−1)∑i>j|xi−xj|2=1n(n−1)∑i,j|xi−xj|.
E=E(|xi−xj|)ij
E(σ^(x1,x2,…,xn))=1n(n−1)∑i,jE(|xi−xj|)=E.
xixj2σ22–√σχ(1)2/π−−−√
E=2π−−√σ.
2/π−−√≈1.128
σ^
結論
σ^n=20,000
∑i,j|xi−xj|O(n2)O(n)n10,000R
。(他のプラットフォームでは、おそらく計算時間にわずかなコストがかかりますが、RAM要件ははるかに小さくなります。)
統計的に非効率的です。 それに最高の上映を与えるために、聞かせてのは、公平なバージョンを検討し、それを比較する公平な最小二乗法や最尤推定量のいずれかのバージョン
σ^OLS=(1n−1∑i=1n(xi−μ^)2)−−−−−−−−−−−−−−−−−−⎷(n−1)Γ((n−1)/2)2Γ(n/2).
R
n=3n=300σ^OLSσ
その後
σ^
コード
sigma <- function(x) sum(abs(outer(x, x, '-'))) / (2*choose(length(x), 2))
#
# sigma is biased.
#
y <- rnorm(1e3) # Don't exceed 2E4 or so!
mu.hat <- mean(y)
sigma.hat <- sigma(y)
hist(y, freq=FALSE,
main="Biased (dotted red) and Unbiased (solid blue) Versions of the Estimator",
xlab=paste("Sample size of", length(y)))
curve(dnorm(x, mu.hat, sigma.hat), col="Red", lwd=2, lty=3, add=TRUE)
curve(dnorm(x, mu.hat, sqrt(pi/4)*sigma.hat), col="Blue", lwd=2, add=TRUE)
#
# The variance of sigma is too large.
#
N <- 1e4
n <- 10
y <- matrix(rnorm(n*N), nrow=n)
sigma.hat <- apply(y, 2, sigma) * sqrt(pi/4)
sigma.ols <- apply(y, 2, sd) / (sqrt(2/(n-1)) * exp(lgamma(n/2)-lgamma((n-1)/2)))
message("Mean of unbiased estimator is ", format(mean(sigma.hat), digits=4))
message("Mean of unbiased OLS estimator is ", format(mean(sigma.ols), digits=4))
message("Variance of unbiased estimator is ", format(var(sigma.hat), digits=4))
message("Variance of unbiased OLS estimator is ", format(var(sigma.ols), digits=4))
message("Efficiency is ", format(var(sigma.ols) / var(sigma.hat), digits=4))
x <- c(rnorm(30), rnorm(30, 10))