Il s'agit d'une idée intrigante, car l'estimateur de l'écart-type semble être moins sensible aux valeurs aberrantes que les approches habituelles quadratiques moyennes. Cependant, je doute que cet estimateur ait été publié. Il y a trois raisons à cela: il est inefficace sur le plan informatique, il est biaisé, et même lorsque le biais est corrigé, il est statistiquement inefficace (mais seulement un peu). Ceux-ci peuvent être vus avec une petite analyse préliminaire, alors faisons-le d'abord, puis tirons les conclusions.
Une analyse
Les estimateurs ML de la moyenne et de l'écart-type basés sur les données sontμσ(xi,xj)
μ^(xi,xj)=xi+xj2
et
σ^(xi,xj)=|xi−xj|2.
Par conséquent, la méthode décrite dans la question est
μ^(x1,x2,…,xn)=2n(n−1)∑i>jxi+xj2=1n∑i=1nxi,
qui est l'estimateur habituel de la moyenne, et
σ^(x1,x2,…,xn)=2n(n−1)∑i>j|xi−xj|2=1n(n−1)∑i,j|xi−xj|.
La valeur attendue de cet estimateur est facilement trouvée en exploitant l'interchangeabilité des données, ce qui implique que est indépendant de et . D'oùE=E(|xi−xj|)ij
E(σ^(x1,x2,…,xn))=1n(n−1)∑i,jE(|xi−xj|)=E.
Mais comme et sont des variables normales indépendantes, leur différence est une normale moyenne nulle avec la variance . Sa valeur absolue est donc fois une , dont la moyenne est . par conséquentxixj2σ22–√σχ(1)2/π−−−√
E=2π−−√σ.
Le coefficient est le biais de cet estimateur.2/π−−√≈1.128
De la même manière, mais avec beaucoup plus de travail, on pourrait calculer la variance de , mais - comme nous le verrons - il est peu probable que cela suscite beaucoup d'intérêt, donc je vais simplement l'estimer avec une simulation rapide .σ^
Conclusions
L'estimateur est biaisé. a un biais constant substantiel d'environ + 13%. Cela pourrait être corrigé. Dans cet exemple, avec un échantillon de les estimateurs biaisés et corrigés du biais sont tracés sur l'histogramme. L'erreur de 13% est apparente.σ^n=20,000
Il est inefficace sur le plan des calculs. Parce que la somme des valeurs absolues,, n'a pas de simplification algébrique, son calcul nécessite un effort au lieu de l'effort pour presque tout autre estimateur. Cela évolue mal, ce qui le rend prohibitif une fois que dépasse environ. Par exemple, le calcul du chiffre précédent nécessitait 45 secondes de temps processeur et 8 Go de RAM . (Sur d'autres plates-formes, les besoins en RAM seraient beaucoup plus faibles, peut-être à un faible coût en temps de calcul.)∑i,j|xi−xj|O(n2)O(n)n10,000R
Il est statistiquement inefficace. Pour lui donner la meilleure représentation, considérons la version non biaisée et la comparons à la version non biaisée de l'estimateur des moindres carrés ou du maximum de vraisemblance
σ^OLS=(1n−1∑i=1n(xi−μ^)2)−−−−−−−−−−−−−−−−−−⎷(n−1)Γ((n−1)/2)2Γ(n/2).
Le R
code ci-dessous montre que la version non biaisée de l'estimateur dans la question est étonnamment efficace: sur une plage de tailles d'échantillon de à sa variance est généralement supérieure d'environ 1% à 2% à la variance de . Cela signifie que vous devez prévoir de payer 1 à 2% de plus pour les échantillons afin d'atteindre un niveau de précision donné dans l'estimation de .n = 300 σ O L S σn=3n=300σ^OLSσ
Après
La forme de rappelle l' estimateur Theil-Sen robuste et résistant - mais au lieu d'utiliser les médianes des différences absolues, il utilise leurs moyennes. Si l'objectif est d'avoir un estimateur résistant aux valeurs périphériques ou robuste aux écarts par rapport à l'hypothèse de normalité, il serait alors préférable d'utiliser la médiane. σ^
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))