Wie heißt die Dichteschätzmethode, bei der alle möglichen Paare verwendet werden, um eine normale Mischungsverteilung zu erstellen?

12

Ich habe mir gerade eine nette (nicht unbedingt gute) Methode ausgedacht, um eindimensionale Dichteschätzungen zu erstellen, und meine Frage lautet:

Hat diese Dichteschätzmethode einen Namen? Wenn nicht, handelt es sich um einen Sonderfall einer anderen Methode in der Literatur?

Hier ist die Methode: Wir haben ein Vektor X=[x1,x2,...,xn] dem wir annehmen, dass es aus einer unbekannten Verteilung stammt, die wir schätzen möchten. Eine Möglichkeit, dies zu tun, besteht darin, alle möglichen Wertepaare in X und für jedes Paar [xich,xj]ichj eine Normalverteilung mit maximaler Wahrscheinlichkeit anzupassen. Die resultierende Dichteschätzung ist dann die Mischungsverteilung, die aus allen resultierenden Normalen besteht, wobei jede Normale gleich gewichtet wird.

Die folgende Abbildung zeigt die Verwendung dieser Methode auf dem Vektor . Hier sind die Kreise die Datenpunkte, die farbigen Normalen die mit jedem möglichen Paar geschätzten maximalen Wahrscheinlichkeitsverteilungen und die dicke schwarze Linie zeigt die resultierende Dichteschätzung (dh die Mischungsverteilung).[-1.3,0,15,0,73,1.4]

Bildbeschreibung hier eingeben

Übrigens ist es wirklich einfach, eine Methode in R zu implementieren, die eine Probe aus der resultierenden Mischungsverteilung zieht:

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

Bildbeschreibung hier eingeben

Rasmus Bååth
quelle
5
x <- c(rnorm(30), rnorm(30, 10))
Probieren
2
@Dason Ja, in diesem Fall funktioniert die Methode überhaupt nicht! :) Auch konvergiert es nicht mit großen n.
Rasmus Bååth
4
Dies klingt wie eine beschädigte Version der Kerneldichteschätzung, bei der die Bandbreite durch Kreuzvalidierung geschätzt wird!
Xi'an,
Die Formulierung in "Wir haben einen Vektor dem wir annehmen, dass sie aus einer unbekannten Verteilung stammt, die wir schätzen möchten" sollte vielleicht klargestellt werden, da es (für mich) wie das klingt Die Frage betraf die Schätzung einer allgemeinen n- dimensionalen multivariaten Verteilung basierend auf einer Beobachtung. X=[x1,x2,,xn]n
Juho Kokkala

Antworten:

6

Dies ist eine faszinierende Idee, da der Schätzer der Standardabweichung weniger empfindlich gegenüber Ausreißern zu sein scheint als die üblichen Root-Mean-Square-Ansätze. Ich bezweifle jedoch, dass dieser Schätzer veröffentlicht wurde. Es gibt drei Gründe: Es ist rechnerisch ineffizient, es ist voreingenommen, und selbst wenn die Voreingenommenheit korrigiert wird, ist es statistisch ineffizient (aber nur wenig). Diese können mit einer kleinen vorläufigen Analyse gesehen werden, also lasst uns das zuerst tun und dann die Schlussfolgerungen ziehen.

Analyse

Der ML - Schätzer der Mittelwert und eine Standardabweichung & sgr; auf Daten basieren ( x i , x j ) sindμσ(xi,xj)

μ^(xi,xj)=xi+xj2

und

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

Daher ist die in der Frage beschriebene Methode

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

das ist der übliche Schätzer des Mittelwertes, und

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

Der erwartete Wert dieses Schätzers kann leicht durch Ausnutzen der Austauschbarkeit der Daten ermittelt werden, was impliziertE=E(|xixj|)ij

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

xixj2σ22σχ(1)2/π

E=2πσ.

2/π1.128 ist die Vorspannung in diesem Schätzer.

σ^ , aber - wie wir sehen werden - es ist unwahrscheinlich , viel Interesse daran sein, also werde ich es nur schätzen , mit einer schnellen Simulation.

Schlussfolgerungen

  1. σ^n=20,000

    Zahl

  2. i,j|xixj|O(n2)O(n)n10,000 oder so. Für die Berechnung der vorherigen Zahl wurden beispielsweise 45 Sekunden CPU-Zeit und 8 GB RAM benötigtR. (Auf anderen Plattformen wären die RAM-Anforderungen viel geringer, möglicherweise mit geringen Kosten für die Rechenzeit.)

  3. Es ist statistisch ineffizient. Um die beste Darstellung zu erzielen, betrachten wir die unvoreingenommene Version und vergleichen sie mit der neutralen Version des Schätzers für kleinste Quadrate oder maximale Wahrscheinlichkeit

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

    Rn=3n=300σ^OLSσ

Nachher

σ^


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))
whuber
quelle
Relevante Literatur geht eine Weile zurück, zB Downton, F. 1966 Lineare Schätzungen mit Polynomkoeffizienten. Biometrika 53: 129-141 Doi: 10.1093 / Biomet / 53.1-2.129
Nick Cox
Wow, ich habe mehr als ich erwartet hatte! :)
Rasmus Bååth