A quantidade de dados necessários para estimar os parâmetros de uma distribuição Normal multivariada com precisão especificada até uma determinada confiança não varia com a dimensão, sendo todas as outras coisas iguais. Portanto, você pode aplicar qualquer regra de ouro para duas dimensões a problemas dimensionais mais altos sem nenhuma alteração.
Por que deveria? Existem apenas três tipos de parâmetros: médias, variações e covariâncias. O erro de estimativa em uma média depende apenas da variação e da quantidade de dados, . Assim, quando ( X 1 , X 2 , ... , X d ) tem uma distribuição Normal multivariada e X i tem variações σ 2 i , então as estimativas de E [ X i ] dependem apenas de σ i e n . Portanto, para obter uma precisão adequada na estimativa de todos osn( X1, X2, … , Xd)XEuσ2EuE [ XEu]σEun , precisamos apenas considerar a quantidade de dados necessários para o X i ter omaiordos σ i . Portanto, quando contemplamos uma sucessão de problemas de estimativa para aumentar as dimensões d , tudo o que precisamos considerar é quantoaumentaráo maior σ i . Quando esses parâmetros são delimitados acima, concluímos quea quantidade de dados necessária não depende da dimensão.E [ XEu]XEuσEudσEu
Considerações semelhantes se aplicam à estimativa das variâncias covariâncias σ i j : se uma certa quantidade de dados for suficiente para estimar uma covariância (ou coeficiente de correlação) com a precisão desejada, então - desde que a distribuição normal subjacente tenha valores de parâmetros semelhantes - - a mesma quantidade de dados será suficiente para estimar qualquer covariância ou coeficiente de correlação.σ2Euσeu j
Para ilustrar e fornecer suporte empírico para esse argumento, vamos estudar algumas simulações. A seguir, cria parâmetros para uma distribuição multinormal de dimensões especificadas, extrai muitos conjuntos independentes de vetores distribuídos de forma idêntica a partir dessa distribuição, estima os parâmetros de cada amostra e resume os resultados dessas estimativas de parâmetros em termos de (1) suas médias - - demonstrar que são imparciais (e o código está funcionando corretamente - e (2) seus desvios-padrão, que quantificam a precisão das estimativas. (Não confunda esses desvios-padrão, que quantificam a quantidade de variação entre as estimativas obtidas em múltiplos iterações da simulação, com os desvios padrão usados para definir a distribuição multinormal subjacente! muda, desde que, à medida que d mude, não introduzamos variações maiores na própria distribuição multinormal subjacente.dd
Os tamanhos das variâncias da distribuição subjacente são controlados nesta simulação, tornando o maior valor próprio da matriz de covariância igual a . Isso mantém a densidade de probabilidade "nuvem" dentro dos limites à medida que a dimensão aumenta, independentemente da forma que essa nuvem possa ter. Simulações de outros modelos de comportamento do sistema à medida que a dimensão aumenta podem ser criadas simplesmente alterando a maneira como os autovalores são gerados; Um exemplo (usando uma distribuição Gamma) é mostrado comentado no código abaixo.1R
O que estamos procurando é verificar se os desvios padrão das estimativas de parâmetros não mudam sensivelmente quando a dimensão é alterada. Eu, portanto, mostram os resultados para dois extremos, d = 2 e d = 60 , utilizando a mesma quantidade de dados ( 30 ) em ambos os casos. Vale ressaltar que o número de parâmetros estimados quando d = 60 , igual a 1890 , excede em muito o número de vetores ( 30 ) e até os números individuais ( 30 × 60 = 1800 ) em todo o conjunto de dados.dd=2d=6030d=6018903030∗60=1800
Vamos começar com duas dimensões, . Existem cinco parâmetros: duas variâncias (com desvios padrão de 0,097 e 0,182 nesta simulação), uma covariância (DP = 0,126 ) e duas médias (DP = 0,11 e 0,15 ). Com diferentes simulações (obtidas através da alteração do valor inicial da semente aleatória), elas variam um pouco, mas terão consistentemente um tamanho comparável quando o tamanho da amostra for n = 30 . Por exemplo, na próxima simulação, os SDs são 0,014 , 0,263 , 0,043 , 0,04 e 0,18d=20.0970.1820.1260.110.15n=300.0140.2630.0430.040.18, respectivamente: todos mudaram, mas são de ordens de magnitude comparáveis.
(Essas declarações podem ser apoiadas teoricamente, mas o objetivo aqui é fornecer uma demonstração puramente empírica.)
Agora passamos para , mantendo o tamanho da amostra em n = 30 . Especificamente, isso significa que cada amostra consiste em 30 vetores, cada um com 60 componentes. Em vez de listar todos os desvios-padrão de 1890 , vamos apenas ver fotos deles usando histogramas para representar seus intervalos.d=60n=3030601890
Os gráficos de dispersão na linha superior comparam os parâmetros reais sigma
( ) e ( μ ) com as estimativas médias feitas durante as 10 4 iterações nesta simulação. As linhas de referência cinzas marcam o lócus da perfeita igualdade: claramente as estimativas estão funcionando como pretendido e são imparciais.σmu
μ104
Os histogramas aparecem na linha inferior, separadamente para todas as entradas na matriz de covariância (esquerda) e para as médias (direita). Os DPs das variações individuais tendem a situar-se entre e 0,12, enquanto os DPs das covariâncias entre componentes separados tendem a situar-se entre 0,04 e 0,08 : exatamente na faixa alcançada quando d = 2 . Da mesma forma, os DPs das estimativas médias tendem a situar-se entre 0,08 e 0,13 , o que é comparável ao observado quando d = 2 . Certamente não há indicação de que os SDs tenham aumentado0.080.120.040.08d=20.080.13d=2como subiu de 2 para 60 .d260
O código 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