Jest to intrygujący pomysł, ponieważ estymator odchylenia standardowego wydaje się być mniej wrażliwy na wartości odstające niż zwykłe podejścia średniej kwadratowej. Wątpię jednak, aby ten estymator został opublikowany. Są trzy powody, dla których: jest nieefektywny obliczeniowo, jest tendencyjny, a nawet po poprawieniu błędu systematycznego jest nieefektywny statystycznie (ale tylko trochę). Można to zobaczyć z małą wstępną analizą, więc zróbmy to najpierw, a następnie wyciągnij wnioski.
Analiza
Estymatory ML średniej i odchylenia standardowego na podstawie danych wynosząσ ( x i , x j )μσ( xja, xjot)
μ^( xja, xjot) = xja+ xjot2)
i
σ^( xja, xjot) = | xja- xjot|2).
Dlatego metoda opisana w pytaniu to
μ^( x1, x2), … , Xn) = 2n ( n - 1 )∑i > jxja+ xjot2)= 1n∑i = 1nxja,
który jest zwykle estymatorem średniej, oraz
σ^( x1, x2), … , Xn) = 2n ( n - 1 )∑i > j| xja- xjot|2)= 1n ( n - 1 )∑ja , j| xja- xjot| .
Oczekiwaną wartość tego estymatora można łatwo znaleźć, wykorzystując wymienność danych, co oznacza, że jest niezależne od i . Skądmi= E ( | xja- xjot| )jajot
E ( σ^( x1, x2), … , Xn) ) = 1n ( n - 1 )∑ja , jE ( | xja- xjot| )= E.
Ale ponieważ i są niezależnymi zmiennymi Normalne, ich różnica jest równa zeru Normalna z wariancją . Jego wartość bezwzględna wynosi zatem razy , którego średnia to . w konsekwencjixjaxjot2 σ2)2)-√σχ ( 1 )2 / π---√
mi= 2π--√σ.
Współczynnik jest odchyleniem w tym estymatorze.2 / π--√≈ 1,128
W ten sam sposób, ale przy znacznie większej ilości pracy, można było obliczyć wariancję , ale - jak zobaczymy - mało prawdopodobne jest zainteresowanie tym tematem, dlatego oszacuję to za pomocą szybkiej symulacji .σ^
Wnioski
Estymator jest stronniczy. ma znaczną stałą stronniczość około + 13%. Można to poprawić. W tym przykładzie z wielkością próby zarówno histogramy z tendencyjnością, jak i z korekcją błędu systematycznego. Widoczny jest błąd 13%.σ^n = 20 , 000
Jest to nieefektywne obliczeniowo. Ponieważ suma wartości bezwzględnych,, nie ma algebraicznego uproszczenia, jego obliczenie wymaga wysiłku zamiast wysiłku dla prawie każdego innego estymatora. To źle się skaluje, co powoduje, że jest zbyt drogie, gdy przekroczy około . Na przykład obliczenie poprzedniej liczby wymagało 45 sekund czasu procesora i 8 GB pamięci RAM . (Na innych platformach wymagania pamięci RAM byłyby znacznie mniejsze, być może przy niewielkim koszcie czasu obliczeniowego).∑ja , j| xja- xjot|O ( n2))O ( n )n10 , 000R
Jest to statystycznie nieefektywne. Aby uzyskać najlepszy wynik, rozważmy wersję bezstronną i porównajmy ją z bezstronną wersją estymatora najmniejszych kwadratów lub maksymalnego prawdopodobieństwa
σ^O L S= ( 1n - 1∑i = 1n( xja- μ^)2))------------------⎷( n - 1 ) Γ ( ( n - 1 ) / 2 )2 Γ ( n / 2 ).
Poniższy R
kod pokazuje, że bezstronna wersja estymatora w pytaniu jest zaskakująco wydajna: w zakresie wielkości próbek od do jej wariancja jest zwykle około 1% do 2% większa niż wariancja . Oznacza to, że powinieneś zaplanować zapłacenie dodatkowych 1% do 2% więcej za próbki, aby osiągnąć dowolny poziom precyzji w szacowaniu .n = 300 σ O L S σn = 3n = 300σ^O L Sσ
Potem
Forma przypomina solidny i odporny estymator Theil-Sen - ale zamiast używać median różnic bezwzględnych, używa ich środków. Jeśli celem jest posiadanie estymatora odpornego na wartości odstające lub odpornego na odstępstwa od założenia Normalności, wówczas użycie mediany byłoby bardziej wskazane. σ^
Kod
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))