Quel est le nom de la méthode d'estimation de la densité où toutes les paires possibles sont utilisées pour créer une distribution de mélange normale?


12

Je viens de penser à une façon soignée (pas nécessairement bonne) de créer des estimations de densité unidimensionnelles et ma question est:

Cette méthode d'estimation de la densité a-t-elle un nom? Sinon, s'agit-il d'un cas particulier d'une autre méthode dans la littérature?

Voici la méthode: Nous avons un vecteur que nous supposons est tirée d' une certaine distribution inconnue , nous aimerions estimer. Une façon de faire est de prendre toutes les paires de valeurs possibles dans et pour chaque paire ajuster une distribution normale en utilisant le maximum de vraisemblance. L'estimation de densité résultante est alors la distribution du mélange qui se compose de toutes les normales résultantes, où chaque normale reçoit un poids égal.X [ x i , x j ] i jX=[x1,x2,...,xn]X[xi,xj]ij

La figure ci-dessous illustre l'utilisation de cette méthode sur le vecteur . Ici, les cercles sont les points de données, les normales colorées sont les distributions de vraisemblance maximales estimées en utilisant chaque paire possible et la ligne noire épaisse montre l'estimation de densité résultante (c'est-à-dire la distribution du mélange).[1.3,0.15,0.73,1.4]

entrez la description de l'image ici

Au fait, il est vraiment facile d'implémenter une méthode dans R qui tire un échantillon de la distribution de mélange résultante:

# 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')

entrez la description de l'image ici


5
Essayez votre méthode en utilisantx <- c(rnorm(30), rnorm(30, 10))
Dason

2
@Dason Yep, dans ce cas, la méthode ne fonctionne pas du tout! :) De plus, il ne converge pas avec un grand n.
Rasmus Bååth

4
Cela ressemble à une version corrompue de l'estimation de la densité du noyau où la bande passante est estimée par validation croisée!
Xi'an

Le libellé dans «Nous avons un vecteur que nous supposons provenir d'une distribution inconnue que nous aimerions estimer» devrait peut-être être clarifié car il (pour moi) semble que la question était sur l'estimation d'une distribution multivariée générale à dimensions basée sur une observation. X=[x1,x2,,xn]n
Juho Kokkala

Réponses:


6

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)=|xixj|2.

Par conséquent, la méthode décrite dans la question est

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

qui est l'estimateur habituel de la moyenne, et

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

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(|xixj|)ij

E(σ^(x1,x2,,xn))=1n(n1)i,jE(|xixj|)=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

  1. 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

    Figure

  2. 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|xixj|O(n2)O(n)n10,000R

  3. 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=(1n1i=1n(xiμ^)2)(n1)Γ((n1)/2)2Γ(n/2).

    Le Rcode 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))

La littérature pertinente remonte à un certain temps, par exemple Downton, F. 1966 Estimations linéaires avec des coefficients polynomiaux. Biometrika 53: 129-141 doi: 10.1093 / biomet / 53.1-2.129
Nick Cox

Wow, j'ai eu plus que ce que j'avais négocié! :)
Rasmus Bååth
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.