Dies ist eine faszinierende Idee, da der Schätzer der Standardabweichung weniger empfindlich gegenüber Ausreißern zu sein scheint als die üblichen Root-Mean-Square-Ansätze. Ich bezweifle jedoch, dass dieser Schätzer veröffentlicht wurde. Es gibt drei Gründe: Es ist rechnerisch ineffizient, es ist voreingenommen, und selbst wenn die Voreingenommenheit korrigiert wird, ist es statistisch ineffizient (aber nur wenig). Diese können mit einer kleinen vorläufigen Analyse gesehen werden, also lasst uns das zuerst tun und dann die Schlussfolgerungen ziehen.
Analyse
Der ML - Schätzer der Mittelwert und eine Standardabweichung & sgr; auf Daten basieren ( x i , x j ) sindμσ(xi,xj)
μ^(xi,xj)=xi+xj2
und
σ^(xi,xj)=|xi−xj|2.
Daher ist die in der Frage beschriebene Methode
μ^(x1,x2,…,xn)=2n(n−1)∑i>jxi+xj2=1n∑i=1nxi,
das ist der übliche Schätzer des Mittelwertes, und
σ^(x1,x2,…,xn)=2n(n−1)∑i>j|xi−xj|2=1n(n−1)∑i,j|xi−xj|.
Der erwartete Wert dieses Schätzers kann leicht durch Ausnutzen der Austauschbarkeit der Daten ermittelt werden, was impliziertE=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 ist die Vorspannung in diesem Schätzer.
σ^ , aber - wie wir sehen werden - es ist unwahrscheinlich , viel Interesse daran sein, also werde ich es nur schätzen , mit einer schnellen Simulation.
Schlussfolgerungen
σ^n=20,000
∑i,j|xi−xj|O(n2)O(n)n10,000 oder so. Für die Berechnung der vorherigen Zahl wurden beispielsweise 45 Sekunden CPU-Zeit und 8 GB RAM benötigtR
. (Auf anderen Plattformen wären die RAM-Anforderungen viel geringer, möglicherweise mit geringen Kosten für die Rechenzeit.)
Es ist statistisch ineffizient. Um die beste Darstellung zu erzielen, betrachten wir die unvoreingenommene Version und vergleichen sie mit der neutralen Version des Schätzers für kleinste Quadrate oder maximale Wahrscheinlichkeit
σ^OLS=(1n−1∑i=1n(xi−μ^)2)−−−−−−−−−−−−−−−−−−⎷(n−1)Γ((n−1)/2)2Γ(n/2).
R
n=3n=300σ^OLSσ
Nachher
σ^
Code
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))