¿Cuál es el nombre del método de estimación de densidad donde se usan todos los pares posibles para crear una distribución de mezcla Normal?

12

Acabo de pensar en una forma ordenada (no necesariamente buena) de crear estimaciones de densidad unidimensionales y mi pregunta es:

¿Este método de estimación de densidad tiene un nombre? Si no, ¿es un caso especial de algún otro método en la literatura?

Aquí está el método: Tenemos un vector que suponemos se extrae de alguna distribución desconocida que nos gustaría estimar. Una forma de hacerlo es tomar todos los pares de valores posibles en X y para cada par [ x i , x j ] i j ajustar una distribución Normal usando la máxima verosimilitud. La estimación de densidad resultante es entonces la distribución de la mezcla que consiste en todas las normales resultantes, donde a cada normal se le asigna el mismo peso.X=[x1,x2,...,xn]X[xi,xj]ij

La siguiente figura ilustra el uso de este método en el vector . Aquí los círculos son los puntos de datos, las normales de colores son las distribuciones de máxima probabilidad estimadas usando cada par posible y la línea negra gruesa muestra la estimación de densidad resultante (es decir, la distribución de la mezcla).[1.3,0.15,0.73,1.4]

ingrese la descripción de la imagen aquí

Por cierto, es realmente fácil implementar un método en R que extraiga una muestra de la distribución resultante de la mezcla:

# Generating some "data"
x <- rnorm(30)

# Drawing from the density estimate using the method described above.
density_estimate_sample <- replicate(9999, {
  pair <- sample(x, size = 2)
  rnorm(1, mean(pair), sd(pair))
})

# Plotting the density estimate compared with 
# the "data" and the "true" density.
hist(x ,xlim=c(-5, 5), main='The "data"')
hist(density_estimate_sample, xlim=c(-5, 5), main='Estimated density')
hist(rnorm(9999), xlim=c(-5, 5), main='The "true" density')

ingrese la descripción de la imagen aquí

Rasmus Bååth
fuente
55
Pruebe su método usandox <- c(rnorm(30), rnorm(30, 10))
Dason
2
@Dason Yep, ¡en ese caso el método no funciona en absoluto! :) Además, no converge con n grande.
Rasmus Bååth
44
¡Esto suena como una versión corrupta de la estimación de densidad del kernel donde el ancho de banda se estima mediante validación cruzada!
Xi'an
X=[x1,x2,,xn]n

Respuestas:

6

Esta es una idea intrigante, porque el estimador de la desviación estándar parece ser menos sensible a los valores atípicos que los enfoques habituales de raíz cuadrática media. Sin embargo, dudo que este estimador haya sido publicado. Hay tres razones por las cuales: es computacionalmente ineficiente, está sesgado e incluso cuando se corrige el sesgo, es estadísticamente ineficiente (pero solo un poco). Esto se puede ver con un pequeño análisis preliminar, así que hagamos eso primero y luego saquemos las conclusiones.

Análisis

μσ(xi,xj)

μ^(xi,xj)=xi+xj2

y

σ^(xi,xj)=|xixj|2.

Por lo tanto, el método descrito en la pregunta es

μ^(x1,x2,,xn)=2n(n1)i>jxi+xj2=1ni=1nxi,

cuál es el estimador habitual de la media, y

σ^(x1,x2,,xn)=2n(n1)i>j|xixj|2=1n(n1)i,j|xixj|.

E=E(|xixj|)ij

E(σ^(x1,x2,,xn))=1n(n1)i,jE(|xixj|)=E.

xixj2σ22σχ(1)2/π

E=2πσ.

2/π1.128

σ^

Conclusiones

  1. σ^n=20,000

    Figura

  2. i,j|xixj|O(n2)O(n)n10,000R. (En otras plataformas, los requisitos de RAM serían mucho menores, tal vez a un bajo costo en tiempo de cálculo).

  3. Es estadísticamente ineficiente. Para darle el mejor resultado, consideremos la versión imparcial y compárela con la versión imparcial del estimador de mínimos cuadrados o de máxima verosimilitud

    σ^OLS=(1n1i=1n(xiμ^)2)(n1)Γ((n1)/2)2Γ(n/2).

    Rn=3n=300σ^OLSσ

Después

σ^


Código

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))
whuber
fuente
La literatura relevante se remonta a un tiempo, por ejemplo, Downton, F. 1966 Estimaciones lineales con coeficientes polinómicos. Biometrika 53: 129-141 doi: 10.1093 / biomet / 53.1-2.129
Nick Cox
¡Vaya, obtuve más de lo que esperaba! :)
Rasmus Bååth