Die Datenmenge, die zum Schätzen der Parameter einer multivariaten Normalverteilung mit einer bestimmten Genauigkeit und einem bestimmten Vertrauen benötigt wird, variiert nicht mit der Dimension, alle anderen Faktoren sind gleich. Daher können Sie bei Problemen mit höheren Dimensionen eine beliebige Faustregel für zwei Dimensionen anwenden, ohne dass sich dies ändert.
Warum sollte es Es gibt nur drei Arten von Parametern: Mittelwerte, Varianzen und Kovarianzen. Der Schätzfehler in einem Mittelwert hängt nur von der Varianz und der Datenmenge ab, . Wenn also ( X 1 , X 2 , ... , X d ) eine multivariate Normalverteilung hat und die X i Varianzen σ 2 i haben , dann hängen die Schätzungen von E [ X i ] nur von den σ i und n ab . Woraus, um eine ausreichende Genauigkeit zu erreichen bei der Schätzung aller dern(X1,X2,…,Xd)Xiσ2iE[Xi]σin σ i zunehmen wird. Wenn diese Parameter oben begrenzt sind, schließen wir, dassdie benötigte Datenmenge nicht von der Dimension abhängt.E[Xi]müssen wir nur die Datenmenge berücksichtigen, die für das mit dem größten von σ i benötigt wird . Wenn wir also eine Abfolge von Schätzproblemen für die Vergrößerung von Dimensionen d betrachten , müssen wir nur berücksichtigen, wie viel die größte istXiσidσi
Ähnliche Überlegungen gelten für die Schätzung der Varianzen und Kovarianzen σ i jσ2iσij : Reicht eine bestimmte Datenmenge für die Schätzung einer Kovarianz (oder eines Korrelationskoeffizienten) mit einer gewünschten Genauigkeit aus, so gilt - sofern die zugrunde liegende Normalverteilung ähnliche Parameterwerte aufweist - -die gleiche Datenmenge reicht aus, um einen Kovarianz- oder Korrelationskoeffizienten abzuschätzen.
Um dieses Argument zu veranschaulichen und empirisch zu belegen, wollen wir einige Simulationen untersuchen. Im Folgenden werden Parameter für eine Multinormalverteilung mit bestimmten Dimensionen erstellt, viele unabhängige, identisch verteilte Sätze von Vektoren aus dieser Verteilung gezeichnet, die Parameter aus jeder dieser Stichproben geschätzt und die Ergebnisse dieser Parameterschätzungen in Bezug auf (1) ihre Durchschnittswerte zusammengefasst. -um zu demonstrieren, dass sie unvoreingenommen sind (und der Code korrekt funktioniert - und (2) ihre Standardabweichungen, die die Genauigkeit der Schätzungen quantifizieren. (Verwechseln Sie nicht diese Standardabweichungen, die das Ausmaß der Abweichungen zwischen den über ein Vielfaches erhaltenen Schätzungen quantifizieren Iterationen der Simulation mit den zur Definition der zugrunde liegenden Multinormalverteilung verwendeten Standardabweichungen! ändert sich, sofern alsd ändert sich, wir führen keine größeren Varianzen in die zugrunde liegende Multinormalverteilung selbst ein.d
Die Größen der Varianzen der zugrunde liegenden Verteilung werden in dieser Simulation gesteuert, indem der größte Eigenwert der Kovarianzmatrix gleich 1 . Dies hält die Wahrscheinlichkeitsdichte "Wolke" mit zunehmender Dimension in Grenzen, unabhängig von der Form dieser Wolke. Simulationen anderer Verhaltensmodelle des Systems mit zunehmender Dimension können einfach durch Ändern der Erzeugung der Eigenwerte erstellt werden. Ein Beispiel (unter Verwendung einer Gamma-Verteilung) ist im folgenden R
Code auskommentiert.
Was wir suchen, ist zu überprüfen, dass sich die Standardabweichungen der Parameterschätzungen nicht merklich ändern, wenn sich das Maß ändert. Ich zeige daher die Ergebnisse für zwei Extreme, d = 2 und d = 60 , wobei in beiden Fällen die gleiche Datenmenge ( 30 ) verwendet wird. Es ist bemerkenswert, dass die Anzahl der bei d = 60 geschätzten Parameter , die 1890 entspricht , die Anzahl der Vektoren ( 30 ) bei weitem übersteigt und sogar die einzelnen Zahlen ( 30 ∗ 60 = 1800 ) im gesamten Datensatz übersteigt .dd=2d=6030d=6018903030∗60=1800
Beginnen wir mit zwei Dimensionen, . Es gibt fünf Parameter: zwei Varianzen (mit Standardabweichungen von 0,097 und 0,182 in dieser Simulation), eine Kovarianz (SD = 0,126 ) und zwei Mittelwerte (SD = 0,11 und 0,15 ). Bei verschiedenen Simulationen (erhältlich durch Ändern des Startwerts des Zufallssamens) variieren diese geringfügig, sind jedoch bei einer Stichprobengröße von n = 30 durchgehend von vergleichbarer Größe . Zum Beispiel sind in der nächsten Simulation die SDs 0,014 , 0,263 , 0,043 , 0,04 und 0,18d=20.0970.1820.1260.110.15n=300.0140.2630.0430.040.18jeweils: Sie alle haben sich geändert, sind aber von vergleichbarer Größenordnung.
(Diese Aussagen können theoretisch gestützt werden, hier geht es jedoch nur um eine rein empirische Demonstration.)
Jetzt bewegen wir uns zu , wobei die Stichprobengröße bei n = 30 bleibt . Konkret bedeutet dies, dass jede Probe aus 30 Vektoren mit jeweils 60 Komponenten besteht. Anstatt alle Standardabweichungen von 1890 aufzulisten, schauen wir uns Bilder davon mit Histogrammen an, um ihre Bereiche darzustellen.d=60n=3030601890
Die Streudiagramme in der oberen Reihe vergleichen die tatsächlichen Parameter sigma
( ) und ( μ ) mit den durchschnittlichen Schätzungen, die während der 10 4 vorgenommen wurdenσmu
μ104 Iterationen in dieser Simulation vorgenommen wurden. Die grauen Bezugslinien markieren den Ort der vollkommenen Gleichheit: Die Schätzungen funktionieren eindeutig wie beabsichtigt und sind unvoreingenommen.
Die Histogramme erscheinen in der unteren Reihe getrennt für alle Einträge in der Kovarianzmatrix (links) und für die Mittelwerte (rechts). Die SDs der einzelnen Varianzen liegen tendenziell zwischen und 0,12, während die SDs der Kovarianzen zwischen einzelnen Komponenten tendenziell zwischen 0,04 und 0,08 liegen : genau in dem Bereich, der bei d = 2 erreicht wird . In ähnlicher Weise tendieren die SDs der mittleren Schätzungen dazu, zwischen 0,08 und 0,13 zu liegen , was vergleichbar ist mit dem, was gesehen wurde, wenn d = 2 ist . Sicher gibt es keinen Hinweis darauf, dass die SDs zugenommen haben0.080.120.040.08d=20.080.13d=2as stieg von 2 auf 60 .d260
Der Code folgt.
#
# Create iid multivariate data and do it `n.iter` times.
#
sim <- function(n.data, mu, sigma, n.iter=1) {
#
# Returns arrays of parmeter estimates (distinguished by the last index).
#
library(MASS) #mvrnorm()
x <- mvrnorm(n.iter * n.data, mu, sigma)
s <- array(sapply(1:n.iter, function(i) cov(x[(n.data*(i-1)+1):(n.data*i),])),
dim=c(n.dim, n.dim, n.iter))
m <-array(sapply(1:n.iter, function(i) colMeans(x[(n.data*(i-1)+1):(n.data*i),])),
dim=c(n.dim, n.iter))
return(list(m=m, s=s))
}
#
# Control the study.
#
set.seed(17)
n.dim <- 60
n.data <- 30 # Amount of data per iteration
n.iter <- 10^4 # Number of iterations
#n.parms <- choose(n.dim+2, 2) - 1
#
# Create a random mean vector.
#
mu <- rnorm(n.dim)
#
# Create a random covariance matrix.
#
#eigenvalues <- rgamma(n.dim, 1)
eigenvalues <- exp(-seq(from=0, to=3, length.out=n.dim)) # For comparability
u <- svd(matrix(rnorm(n.dim^2), n.dim))$u
sigma <- u %*% diag(eigenvalues) %*% t(u)
#
# Perform the simulation.
# (Timing is about 5 seconds for n.dim=60, n.data=30, and n.iter=10000.)
#
system.time(sim.data <- sim(n.data, mu, sigma, n.iter))
#
# Optional: plot the simulation results.
#
if (n.dim <= 6) {
par(mfcol=c(n.dim, n.dim+1))
tmp <- apply(sim.data$s, 1:2, hist)
tmp <- apply(sim.data$m, 1, hist)
}
#
# Compare the mean simulation results to the parameters.
#
par(mfrow=c(2,2))
plot(sigma, apply(sim.data$s, 1:2, mean), main="Average covariances")
abline(c(0,1), col="Gray")
plot(mu, apply(sim.data$m, 1, mean), main="Average means")
abline(c(0,1), col="Gray")
#
# Quantify the variability.
#
i <- lower.tri(matrix(1, n.dim, n.dim), diag=TRUE)
hist(sd.cov <- apply(sim.data$s, 1:2, sd)[i], main="SD covariances")
hist(sd.mean <- apply(sim.data$m, 1, sd), main="SD means")
#
# Display the simulation standard deviations for inspection.
#
sd.cov
sd.mean