La quantità di dati necessari per stimare i parametri di una distribuzione normale multivariata con un'accuratezza specificata per una data confidenza non varia con la dimensione, essendo tutte le altre cose uguali. Pertanto è possibile applicare qualsiasi regola empirica per due dimensioni a problemi di dimensione superiore senza alcuna modifica.
Perché dovrebbe? Esistono solo tre tipi di parametri: medie, varianze e covarianze. L'errore di stima in una media dipende solo dalla varianza e dalla quantità di dati, . Pertanto, quando ha una distribuzione normale multivariata e presenta varianze , le stime di dipendono solo da e . Pertanto, per ottenere un'adeguata accuratezza nella stima di tutti i , dobbiamo solo considerare la quantità di dati necessari per con il più grande di( X 1 , X 2 , … , X d ) X i σ 2 i E [ X i ] σ i n E [ X i ] X i σ i d σ in( X1, X2, ... , Xd)Xioσ2ioE[Xi]σinE[Xi]Xiσi. Pertanto, quando contempliamo una serie di problemi di stima per dimensioni crescenti , tutto ciò che dobbiamo considerare è quanto aumenterà il più grande . Quando questi parametri sono limitati sopra, concludiamo che la quantità di dati necessari non dipende dalla dimensione.dσi
Considerazioni simili si applicano alla stima delle varianze e covarianze : se una certa quantità di dati è sufficiente per stimare una covarianza (o coefficiente di correlazione) per una precisione desiderata, quindi - a condizione che la distribuzione normale sottostante abbia simili valori dei parametri: la stessa quantità di dati sarà sufficiente per stimare qualsiasi covarianza o coefficiente di correlazione. σ i jσ2iσij
Per illustrare e fornire supporto empirico a questo argomento, studiamo alcune simulazioni. Quanto segue crea parametri per una distribuzione multinormale di dimensioni specificate, disegna molti insiemi di vettori indipendenti e identicamente distribuiti da quella distribuzione, stima i parametri da ciascuno di tali campioni e riassume i risultati di tali stime dei parametri in termini di (1) le loro medie- -per dimostrare che sono imparziali (e che il codice funziona correttamente - e (2) le loro deviazioni standard, che quantificano l'accuratezza delle stime. (Non confondere queste deviazioni standard, che quantificano l'entità della variazione tra le stime ottenute su più iterazioni della simulazione, con le deviazioni standard utilizzate per definire la distribuzione multinormale sottostante!dd modifiche, a condizione che come modifiche, non introduciamo variazioni maggiori nella distribuzione multinormale sottostante stessa.d
Le dimensioni delle varianze della distribuzione sottostante sono controllate in questa simulazione rendendo il più grande autovalore della matrice di covarianza pari a . Ciò mantiene la densità di probabilità "nuvola" all'interno dei limiti man mano che la dimensione aumenta, indipendentemente dalla forma di questa nuvola. Simulazioni di altri modelli di comportamento del sistema all'aumentare della dimensione possono essere create semplicemente modificando la modalità di generazione degli autovalori; un esempio (usando una distribuzione Gamma) è mostrato commentato nel codice qui sotto.1R
Ciò che stiamo cercando è verificare che le deviazioni standard delle stime dei parametri non cambino sensibilmente quando viene modificata la dimensione . Mostro quindi i risultati per due estremi, e , utilizzando la stessa quantità di dati ( ) in entrambi i casi. È interessante notare che il numero di parametri stimati quando , pari a , supera di gran lunga il numero di vettori ( ) e supera anche i singoli numeri ( ) nell'intero set di dati.d = 2 d = 60 30 d = 60 1890 30 30 ∗ 60 = 1800dd=2d=6030d=6018903030∗60=1800
Cominciamo con due dimensioni, . Esistono cinque parametri: due varianze (con deviazioni standard di e in questa simulazione), una covarianza (SD = ) e due medie (SD = e ). Con diverse simulazioni (ottenibili modificando il valore iniziale del seme casuale), questi varieranno leggermente, ma saranno costantemente di dimensioni comparabili quando la dimensione del campione è . Ad esempio, nella simulazione successiva le SD sono , , , e0,097 0,182 0,126 0,11 0,15 n = 30 0,014 0,263 0,043 0,04 0,18d=20.0970.1820.1260.110.15n=300.0140.2630.0430.040.18, rispettivamente: sono tutti cambiati ma sono di ordini di grandezza comparabili.
(Queste affermazioni possono essere supportate teoricamente, ma il punto qui è fornire una dimostrazione puramente empirica.)
Ora passiamo a , mantenendo la dimensione del campione a . In particolare, ciò significa che ogni campione è composto da vettori, ciascuno con componenti. Invece di elencare tutte le deviazioni standard, diamo un'occhiata alle loro immagini usando gli istogrammi per rappresentare i loro intervalli.n = 30 30 60 1890d=60n=3030601890
I grafici a dispersione nella riga superiore confrontano i parametri effettivi sigma
( ) e ( ) con le stime medie effettuate durante le iterazioni in questa simulazione. Le linee di riferimento grigie segnano il luogo di perfetta uguaglianza: chiaramente le stime funzionano come previsto e sono imparziali.μ 10 4σmu
μ104
Gli istogrammi vengono visualizzati nella riga inferiore, separatamente per tutte le voci nella matrice di covarianza (a sinistra) e per i mezzi (a destra). Le SD delle singole varianze tendono a trovarsi tra e mentre le SD delle covarianze tra componenti separati tendono a trovarsi tra e : esattamente nell'intervallo raggiunto quando . Allo stesso modo, le SD delle stime medie tendono a trovarsi tra e , il che è paragonabile a quanto visto quando . Certamente non vi è alcuna indicazione che le SD siano aumentate di0,12 0,04 0,08 d = 2 0,08 0,13 d = 20.080.120.040.08d=20.080.13d=2dsalito da a .260
Il codice segue.
#
# 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