特定の信頼度に対して指定された精度内で多変量正規分布のパラメーターを推定するために必要なデータの量は、ディメンションによって異なりません。他のすべては同じです。 したがって、2次元の経験則を変更せずに高次元の問題に適用できます。
なぜそれが必要ですか?パラメーターには、平均、分散、共分散の3種類しかありません。平均の推定誤差は、分散とデータ量のみに依存します。ときにこのように、(X 1、X 2、... 、XのD)多変量正規分布を有し、X iは有するが差異σ 2 iがその後の推定値、E [ X I ]は、のみに依存σ IとN。そこから、すべての推定において十分な精度を達成するためにn(X1,X2,…,Xd)Xiσ2iE[Xi]σin、我々は唯一のために必要なデータ量を検討する必要がある、我々が検討する必要があるのはどのくらいの最大のである σ iの増加します。これらのパラメーターが上記の範囲にある場合、必要なデータの量はディメンションに依存しないと結論付けます。E[Xi]持つ最大の σ I。したがって、次元 dを増加させるための一連の推定問題を考える場合Xiσidσi
同様の考察は、分散が推定に適用さと共分散σをσ2i推定するためのデータで十分である量の場合:1つの基礎となる正規分布を提供した同様のパラメータ値- -所望の精度に共分散(または相関係数)を、次いでデータの-the同量の推定のために十分であろう任意の共分散または相関係数。σij
この議論を説明し、経験的なサポートを提供するために、いくつかのシミュレーションを研究しましょう。以下は、指定された次元の多重正規分布のパラメーターを作成し、その分布から多数の独立した同一に分布したベクトルのセットを描画し、そのような各サンプルからパラメーターを推定し、(1)平均の観点からそれらのパラメーター推定の結果を要約します- -偏りがないことを実証するため(およびコードが正しく機能していること-および(2)推定の精度を定量化する標準偏差(これらの標準偏差を混同しないでください。基礎となる多重正規分布の定義に使用される標準偏差を使用したシミュレーションの反復!dが変化しても、が変化しても、基礎となる多重正規分布自体に大きな分散は導入されません。d
基礎となる分布の分散のサイズは、このシミュレーションでは、共分散行列の最大固有値を ます。これにより、このクラウドの形状がどのようなものであっても、次元が増加しても、確率密度の「クラウド」が範囲内に維持されます。固有値の生成方法を変更するだけで、次元が増加するときのシステムの他の動作モデルのシミュレーションを作成できます。1つの例(ガンマ分布を使用)は、以下のコードでコメント化されて表示されています。1R
私たちが探しているのは、次元が変更されたときにパラメーター推定値の標準偏差がそれほど変化しないことを確認することです。したがって、両方のケースで同じ量のデータ(30)を使用して、2つの極端なd = 2とd = 60の結果を示します。d = 60(1890に等しい)の 場合に推定されるパラメーターの数は、データセット全体でベクトルの数(30)をはるかに超え、個々の数(30 ∗ 60 = 1800)をも超えることは注目に値します。dd=2d=6030d=6018903030∗60=1800
2つの次元から始めましょう。5つのパラメーターがあります。2つの分散(このシミュレーションでは0.097と0.182の標準偏差)、共分散(SD = 0.126)、2つの平均(SD = 0.11と0.15)です。異なるシミュレーション(ランダムシードの開始値を変更することで取得可能)では、これらは少し異なりますが、サンプルサイズがn = 30の場合、一貫して同等のサイズになります。たとえば、次のシミュレーションではSDSがある0.014、0.263、0.043、d=20.0970.1820.1260.110.15n=300.0140.2630.043、および 0.180.040.18、それぞれ:それらはすべて変更されましたが、同等の桁のものです。
(これらのステートメントは理論的にサポートすることができますが、ここでのポイントは純粋に経験的なデモンストレーションを提供することです。)
今、私たちはに移動、でサンプルサイズを維持するのn = 30。具体的には、これは、各サンプルが30個のベクトルで構成され、各ベクトルが60個の成分を持つことを意味します。1890年の標準偏差をすべてリストするのではなく、ヒストグラムを使用してその範囲を表す写真を見てみましょう。d=60n=3030601890
上部行における散布は、実際のパラメータの比較sigma
()及び(μ中に行われた平均推定値に)10σmu
μこのシミュレーションの 4回の反復。灰色の基準線は、完全な平等の軌跡を示しています。明らかに、推定値は意図したとおりに機能し、偏りがありません。104
ヒストグラムは、共分散行列のすべてのエントリ(左)と平均(右)に分けて、一番下の行に表示されます。個々物のSDS 分散は、の間に位置する傾向がと0.12物のSDSながら共分散別個の構成要素との間の間に存在する傾向が0.04と0.08:とき丁度範囲で達成D = 2。同様に、平均推定値のSDは0.08から0.13の間にある傾向があり、これはd = 2のときに見られたものに匹敵します。確かに、SDが増加したという兆候はありません0.080.120.040.08d=20.080.13d=2から上がった2に60。d260
コードは次のとおりです。
#
# 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