यह सवाल चिंतित करता है कि मल्टीवेरिएट नॉर्मल डिस्ट्रीब्यूशन से (संभवतः) एकवचन कोवरियन मैट्रिक्स साथ रैंडम वेरिएंट कैसे उत्पन्न किया जाए । यह उत्तर एक तरीका बताता है जो किसी भी सहसंयोजक मैट्रिक्स के लिए काम करेगा । यह एक कार्यान्वयन प्रदान करता है जो इसकी सटीकता का परीक्षण करता है।CR
सहसंयोजक मैट्रिक्स का बीजगणितीय विश्लेषण
चूँकि एक सहसंयोजक मैट्रिक्स है, इसलिए यह आवश्यक रूप से सममित और सकारात्मक-अर्ध-अनिश्चित है। पृष्ठभूमि की जानकारी को पूरा करने के लिए, μ को वांछित साधनों का सदिश होना चाहिए।Cμ
क्योंकि सममित है, इसका एकवचन मान अपघटन (SVD) और इसका eigendecomposition स्वचालित रूप से होगाC
C=VD2V′
कुछ ओर्थोगोनल मैट्रिक्स और विकर्ण मैट्रिक्स डी 2 के लिए । सामान्य तौर पर D 2 के विकर्ण तत्व nonnegative होते हैं (इसका मतलब है कि उन सभी में वास्तविक वर्गमूल हैं: विकर्ण मैट्रिक्स D बनाने के लिए सकारात्मक को चुनें )। C के बारे में हमारे पास जो जानकारी है, वह कहती है कि उन विकर्ण तत्वों में से एक या अधिक शून्य हैं - लेकिन यह बाद के किसी भी संचालन को प्रभावित नहीं करेगा, और न ही यह एसवीडी को गणना करने से रोकेगा।VD2D2DC
बहुभिन्नरूपी यादृच्छिक मान उत्पन्न करना
मान लें कि पास एक मानक बहुभिन्नरूपी सामान्य वितरण है: प्रत्येक घटक में शून्य माध्य, इकाई विचरण और सभी सहसंयोजक शून्य हैं: इसका सहसंयोजक मैट्रिक्स I है । फिर यादृच्छिक चर Y = V D X में सहसंयोजक मैट्रिक्स हैXIY=VDX
Cov(Y)=E(YY′)=E(VDXX′D′V′)=VDE(XX′)DV′=VDIDV′=VD2V′=C.
नतीजतन यादृच्छिक चर का अर्थ μ और सहसंयोजक मैट्रिक्स सी के साथ एक बहुभिन्नरूपी सामान्य वितरण है ।μ+YμC
संगणना और उदाहरण कोड
निम्न R
कोड दिए गए आयामों और रैंक का एक सहसंयोजक मैट्रिक्स उत्पन्न करता है, इसे SVD के साथ विश्लेषण करता है (या, टिप्पणी-आउट कोड में, एक eigendecomposition के साथ), उस विश्लेषण का उपयोग करता है की प्राप्ति की निश्चित संख्या उत्पन्न करने के लिए (मतलब वेक्टर 0 के साथ ) , और फिर उन आंकड़ों के सहसंयोजक मैट्रिक्स की तुलना संख्यात्मक रूप से और ग्राफिक रूप से इच्छित कोवरियन मैट्रिक्स से करते हैं। जैसा कि दिखाया गया है, यह 10 , 000 अहसास उत्पन्न करता है जहां Y का आयाम 100 है और C का रैंक 50 है । आउटपुट हैY010,000Y100C50
rank L2
5.000000e+01 8.846689e-05
यही है, डेटा की रैंक भी और डेटा से अनुमानित covariance मैट्रिक्स की दूरी 8 × 10 - 5 के भीतर है जो C- which के करीब है। अधिक विस्तृत जांच के रूप में, C के गुणांक को इसके अनुमान के विरुद्ध प्लॉट किया जाता है। वे सभी समानता की रेखा के करीब हैं:508×10−5CC
कोड पूर्ववर्ती विश्लेषण को बिल्कुल समानता देता है और इसलिए आत्म-व्याख्यात्मक होना चाहिए (गैर- R
उपयोगकर्ताओं के लिए भी , जो अपने पसंदीदा अनुप्रयोग वातावरण में इसका अनुकरण कर सकते हैं)। एक बात यह बताती है कि फ्लोटिंग-पॉइंट एल्गोरिदम का उपयोग करते समय सावधानी की आवश्यकता होती है: की प्रविष्टियां आसानी से नकारात्मक (लेकिन छोटे) आवेग के कारण हो सकती हैं। डी को खोजने के लिए वर्गमूल की गणना करने से पहले ऐसी प्रविष्टियों को शून्य करने की आवश्यकता है।D2D
n <- 100 # Dimension
rank <- 50
n.values <- 1e4 # Number of random vectors to generate
set.seed(17)
#
# Create an indefinite covariance matrix.
#
r <- min(rank, n)+1
X <- matrix(rnorm(r*n), r)
C <- cov(X)
#
# Analyze C preparatory to generating random values.
# `zapsmall` removes zeros that, due to floating point imprecision, might
# have been rendered as tiny negative values.
#
s <- svd(C)
V <- s$v
D <- sqrt(zapsmall(diag(s$d)))
# s <- eigen(C)
# V <- s$vectors
# D <- sqrt(zapsmall(diag(s$values)))
#
# Generate random values.
#
X <- (V %*% D) %*% matrix(rnorm(n*n.values), n)
#
# Verify their covariance has the desired rank and is close to `C`.
#
s <- svd(Sigma <- cov(t(X)))
(c(rank=sum(zapsmall(s$d) > 0), L2=sqrt(mean(Sigma - C)^2)))
plot(as.vector(C), as.vector(Sigma), col="#00000040",
xlab="Intended Covariances",
ylab="Estimated Covariances")
abline(c(0,1), col="Gray")