주어진 신뢰도에 대해 지정된 정확도 내에 다변량 정규 분포의 모수를 추정하는 데 필요한 데이터의 양은 차원에 따라 다르지 않으며 다른 모든 것은 동일합니다. 따라서 2 차원에 대한 경험 법칙을 전혀 변경하지 않고 더 높은 차원의 문제에 적용 할 수 있습니다.
왜 그래야합니까? 평균, 분산 및 공분산의 세 가지 매개 변수 유형 만 있습니다. 평균의 추정 오차는 분산과 데이터 양 에만 의존합니다 . 따라서 에 다변량 정규 분포가 있고 에 분산 경우 의 추정값은 및 에만 의존합니다 . 어디서, 추정에 충분한 정확성을 달성하는 모든 , 우리는 단지에 필요한 데이터의 양을 고려할 필요가 가진 최대 의n(X1,X2,…,Xd)Xiσ2iE[Xi]σinE[Xi]Xiσi. 따라서 차원 를 늘리기위한 연속적인 추정 문제 를 고려할 때 가장 큰 가 얼마나 증가 할 것인지 만 고려 하면됩니다. 이러한 매개 변수가 위에 묶여 있으면 필요한 데이터 양이 차원에 의존하지 않는다고 결론을 내립니다 .dσi
분산 및 공분산 를 추정 할 비슷한 고려 사항이 적용됩니다 . 하나의 공분산 (또는 상관 계수)을 원하는 정확도 로 추정하기 위해 일정량의 데이터로 충분 하다면, 기본 정규 분포가 비슷한 경우 모수 값- 공분산 또는 상관 계수 를 추정 하는 데 동일한 양의 데이터로 충분합니다 .σ2iσij
이 논증을 설명하고 실증적으로 지원하기 위해 몇 가지 시뮬레이션을 연구 해 봅시다. 다음은 지정된 차원의 다중 정규 분포에 대한 모수를 생성하고 해당 분포에서 여러 개의 독립적으로 동일하게 분포 된 벡터 세트를 그리고 각 샘플에서 모수를 추정 한 다음 (1) 평균에 대한 모수 추정치의 결과를 요약합니다. -편향이없고 (코드가 올바르게 작동하고 있음) (2) 표준 편차로 추정의 정확도를 정량화 함을 입증합니다 (이 표준 편차를 혼동하지 마십시오. 근본 다 정규 분포를 정의하는 데 사용되는 표준 편차와 함께 시뮬레이션의 반복!d 같은 것을 제공의 변경, 변화, 우리가 더 큰 소개하지 않습니다는 기본 multinormal 유통 자체에 편차를.d
공분산 행렬의 최대 고유 값을 로 설정하여이 시뮬레이션에서 기본 분포의 분산 크기를 제어 합니다. 이렇게하면이 구름의 모양에 관계없이 차원이 증가함에 따라 확률 밀도 "구름"을 경계 내에서 유지합니다. 고유 값이 생성되는 방식을 변경하면 치수가 증가함에 따라 시스템의 다른 동작 모델을 시뮬레이션 할 수 있습니다. 감마 분포를 사용한 예가 아래 코드에 주석 처리되어 있습니다.1R
우리가 찾고있는 것은 차원 가 변경 될 때 모수 추정치의 표준 편차가 눈에 띄게 변경되지 않는지 확인하는 것 입니다. I 그러므로 두 극단에 대한 결과를 보여 및 , 동일한 양의 데이터 (사용 모두의 경우에). 일 때 과 같을 때 추정되는 매개 변수 의 수는 벡터 수 ( )를 훨씬 초과 하고 전체 데이터 세트에서 개별 수 ( )를 초과 한다는 점에 주목해야합니다 .dd=2d=6030d=6018903030∗60=1800
2 차원 시작해 봅시다 . 두 가지 분산 ( 이 시뮬레이션에서 표준 편차 및 ), 공분산 (SD = ) 및 두 평균 (SD = 및 )의 5 가지 매개 변수가 있습니다 . 다른 시뮬레이션 (임의 시드의 시작 값을 변경하여 얻을 수 있음)을 사용하면 약간 달라 지지만 표본 크기가 때 일관되게 비슷한 크기 입니다. 예를 들어 다음 시뮬레이션에서 SD는 , , , 및d=20.0970.1820.1260.110.15n=300.0140.2630.0430.040.18, 각각 : 그것들은 모두 바뀌었지만 비슷한 크기입니다.
(이러한 진술은 이론적으로 뒷받침 될 수 있지만 여기서 요점은 순전히 경험적인 데모를 제공하는 것입니다.)
이제 이동 , 에서 샘플의 크기를 유지하는 . 구체적으로 말하면, 각 샘플은 벡터 로 구성되며 각각 성분을 갖습니다 . 표준 편차를 모두 나열하는 대신 히스토그램을 사용하여 범위를 나타내는 그림을 살펴 보겠습니다.d=60n=3030601890
맨 위 행의 산점도는 실제 모수 sigma
( ) 및 ( )를 이 시뮬레이션에서 반복 동안 수행 된 평균 추정치 와 비교합니다 . 회색 참 조선은 완벽한 평등의 위치를 표시합니다. 추정치는 의도 한대로 작동하고 편향되지 않습니다.σmu
μ104
히스토그램은 공분산 행렬의 모든 항목 (왼쪽)과 평균 (오른쪽)에 대해 맨 아래 행에 나타납니다. 각각의 표준 편차 차이가 사이가되는 경향이 과 의 표준 편차 동안 공분산 별도의 구성 요소들 사이 사이에 놓여 경향 및 : 정확히 범위에서 달성 될 때 . 유사하게, 평균 추정치의 SD는 과 사이 인 경향이 있으며 , 이는 때 보여지는 것과 유사하다 . 확실히 표준 편차는 것을 아무 표시도 없다 증가 로0.12 0.04 0.08 d = 2 0.08 0.13 d = 2 d 2 600.080.120.040.08d=20.080.13d=2d 에서 올라갔습니다 .260
코드는 다음과 같습니다.
#
# 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