표준 편차의 추정치는 일반적인 제곱 평균 접근법보다 특이 치에 덜 민감 해 보이므로 흥미로운 아이디어입니다. 그러나이 견적자가 공개 된 것 같습니다. 그 이유는 계산 상 비효율적이며, 편향되어 있으며, 편향이 수정 되더라도 통계적으로 비효율적입니다 (그러나 약간만). 이것들은 약간의 예비 분석으로 볼 수 있으므로 먼저 그렇게 한 다음 결론을 도출합시다.
분석
데이터 기반으로 한 평균 및 표준 편차 의 ML 추정량은 다음 과 같습니다.σ ( x i , x j )μσ(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.
그러나 와 는 독립 법선 변량이므로 그 차이는 분산이 0 평균 법선입니다 . 따라서 절대 값은 곱하기 분포이며, 평균은 입니다. 따라서xixj2σ22–√σχ(1)2/π−−−√
E=2π−−√σ.
계수 은이 추정기의 바이어스입니다.2/π−−√≈1.128
같은 방법으로, 훨씬 더 많은 작업으로 의 분산을 계산할 수 있지만, 앞으로 살펴 보 겠지만 이에 관심이 없을 것이므로 빠른 시뮬레이션으로 추정합니다. .σ^
결론
추정기가 바이어스됩니다. 는 약 + 13 %의 실질적인 일정한 바이어스를가집니다. 이 문제를 해결할 수 있습니다. 샘플 크기가 인이 예에서는 바이어스 및 바이어스 교정 추정기가 히스토그램에 표시됩니다. 13 % 오류가 분명합니다.σ^n=20,000
계산 상 비효율적입니다. 절대 값의 합이, 대수 단순화가 없으므로 계산에는 거의 모든 다른 추정기 의 노력 대신 노력이 필요합니다 . 이 초과하면 엄청나게 비싸게 됩니다. 예를 들어, 이전 그림을 계산하려면 45 초의 CPU 시간과 8GB RAM이 필요했습니다 . (다른 플랫폼에서는 RAM 요구 사항이 계산 시간에 약간의 비용으로 훨씬 더 작습니다.)∑i,j|xi−xj|O(n2)O(n)n10,000R
통계적으로 비효율적입니다. 그것은 최고의 보여주는를 제공하기 위해,하자가 편견 버전을 고려하고와 비교 편견 최소 제곱 또는 최대 우도 추정 중 하나의 버전
σ^OLS=(1n−1∑i=1n(xi−μ^)2)−−−−−−−−−−−−−−−−−−⎷(n−1)Γ((n−1)/2)2Γ(n/2).
R
아래의 코드는 해당 추정기의 바이어스 버전 의외로 효율적임을 보여의 샘플 크기의 범위에 걸쳐 에 대한 의 변동의 편차에 비해 1 % 내지 2 %의 큰 대해 통상 . 이는 추정에서 주어진 수준의 정밀도를 달성하기 위해 샘플에 대해 1 %에서 2 %의 추가 비용을 지불 할 계획임을 의미합니다 ., N = 300 σ O L S σn=3n=300σ^OLSσ
기후
의 형태는 강력하고 저항력이있는 Theil-Sen 추정기를 연상 시키지만 절대 차이의 중간 값을 사용하는 대신 평균을 사용합니다. 목표가 외부 값에 저항력이있는 추정값이나 정규성 가정에서 벗어난 값에 대한 추정값을 갖는 경우 중간 값을 사용하는 것이 더 좋습니다. σ^
암호
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))