Essa é uma ideia intrigante, porque o estimador do desvio padrão parece ser menos sensível aos valores extremos do que as abordagens usuais de raiz quadrada média. No entanto, duvido que este estimador tenha sido publicado. Existem três razões para isso: é computacionalmente ineficiente, é tendencioso e, mesmo quando o viés é corrigido, é estatisticamente ineficiente (mas apenas um pouco). Isso pode ser visto com uma pequena análise preliminar, então vamos fazer isso primeiro e depois tirar as conclusões.
Análise
Os estimadores de ML da média e desvio padrão σ com base nos dados ( x i , x j ) sãoμσ(xi,xj)
μ^(xi,xj)=xi+xj2
e
σ^(xi,xj)=|xi−xj|2.
Portanto, o método descrito na pergunta é
μ^(x1,x2,…,xn)=2n(n−1)∑i>jxi+xj2=1n∑i=1nxi,
qual é o estimador usual da média e
σ^(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
σ^
Conclusões
σ^n=20,000
∑i,j|xi−xj|O(n2)O(n)n10,000R
. (Em outras plataformas, os requisitos de RAM seriam muito menores, talvez com um pequeno custo no tempo de computação.)
É estatisticamente ineficiente. Para oferecer a melhor exibição, vamos considerar a versão imparcial e compará-la com a versão imparcial do estimador de mínimos quadrados ou de probabilidade máxima
σ^OLS=(1n−1∑i=1n(xi−μ^)2)−−−−−−−−−−−−−−−−−−⎷(n−1)Γ((n−1)/2)2Γ(n/2).
R
n=3n=300σ^OLS. This means you should plan on paying an extra 1% to 2% more for samples in order to achieve any given level of precision in estimating σ.
Afterward
The form of σ^ is reminiscent of the robust and resistant Theil-Sen estimator--but instead of using the medians of the absolute differences, it uses their means. If the objective is to have an estimator that is resistant to outlying values or one that is robust to departures from the Normality assumption, then using the median would be more advisable.
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))