मैं एक निर्धारित सहसंबंध मैट्रिक्स के साथ डेटा कैसे उत्पन्न कर सकता हूं?


19

मैं मीन = 0 , विचरण = 1 , सहसंबंध गुणांक = साथ सहसंबद्ध यादृच्छिक अनुक्रम उत्पन्न करने की कोशिश कर रहा हूं 0.8। नीचे दिए गए कोड में, मैं का उपयोग करें s1और s2मानक विचलन के रूप में, और m1और m2साधन के रूप में।

p = 0.8 
u = randn(1, n)
v = randn(1, n)
x = s1 * u + m1
y = s2 * (p * u + sqrt(1 - p^2) * v) + m2

यह मुझे और के corrcoef()बीच 0.8 का सही देता है । मेरा सवाल यह है कि मैं एक श्रृंखला कैसे उत्पन्न कर सकता हूं, यदि मैं चाहता हूं कि यह भी उसी सहसंबंध के साथ सहसंबद्ध हो आर = 0.8 ), लेकिन साथ नहीं । क्या मुझे जानने के लिए कोई विशेष सूत्र है? मैंने एक पाया लेकिन इसे समझ नहीं पाया ।xyzyr=0.8x


जवाबों:


21

ऐसा प्रतीत होता है कि आप पूछ रहे हैं कि किसी विशेष सहसंबंध मैट्रिक्स के साथ डेटा कैसे उत्पन्न किया जाए।

एक उपयोगी तथ्य यह है कि आप एक यादृच्छिक वेक्टर अगर के साथ सहप्रसरण मैट्रिक्स Σ , तो यादृच्छिक वेक्टर एक एक्स है मतलब एक( एक्स ) और सहप्रसरण मैट्रिक्स Ω = एक Σ एक टी । इसलिए, यदि आप ऐसे डेटा से शुरू करते हैं जिसका मतलब शून्य है, तो से गुणा करने से वह नहीं बदलेगा, इसलिए आपकी पहली आवश्यकता आसानी से पूरी हो जाती है। xΣAxAE(x)Ω=AΣATA

मान लें कि आप बिना मतलब के डेटा के साथ शुरुआत करते हैं (यानी सहसंयोजक मैट्रिक्स विकर्ण है) - चूंकि हम सहसंबंध मैट्रिक्स के बारे में बात कर रहे हैं, चलो बस लेते हैं । आप का चयन करके एक दिया सहप्रसरण मैट्रिक्स के साथ डेटा को यह बदल सकता है एक होने के लिए Cholesky वर्गमूल की Ω तो - एक एक्स होता वांछित सहप्रसरण मैट्रिक्स ΩΣ=IAΩAxΩ

अपने उदाहरण में, आप कुछ इस तरह चाहते हैं:

Ω=(1.80.81.80.81)

दुर्भाग्य से कि मैट्रिक्स सकारात्मक निश्चित नहीं है, इसलिए यह एक सहसंयोजक मैट्रिक्स नहीं हो सकता है - आप यह देखकर यह देख सकते हैं कि निर्धारक नकारात्मक है। शायद, इसके बजाय

Ω=(1.8.3.81.8.3.81)    or   Ω=(12/302/312/302/31)

पर्याप्त होगा। मुझे यकीन नहीं है कि मतलाब में चोल्स्की स्क्वायर रूट की गणना कैसे करें (जो प्रतीत होता है कि आप क्या उपयोग कर रहे हैं) लेकिन Rआप chol()फ़ंक्शन का उपयोग कर सकते हैं ।

इस उदाहरण में, के लिए दो उचित मैट्रिक्स गुणकों ऊपर सूचीबद्ध रहा है (क्रमशः) होगाΩ

A=(100.8.60.3.933.1972)    or   A=(1002/3.745300.8944.4472)

इस Rपर आने के लिए इस्तेमाल किया गया कोड था:

x = matrix(0,3,3)
x[1,]=c(1,.8,.3)
x[2,]=c(.8,1,.8)
x[3,]=c(.3,.8,1)
t(chol(x))

     [,1]      [,2]      [,3]
[1,]  1.0 0.0000000 0.0000000
[2,]  0.8 0.6000000 0.0000000
[3,]  0.3 0.9333333 0.1972027

x[1,]=c(1,2/3,0)
x[2,]=c(2/3,1,2/3)
x[3,]=c(0,2/3,1)
t(chol(x))

      [,1]      [,2]      [,3]
[1,] 1.0000000 0.0000000 0.0000000
[2,] 0.6666667 0.7453560 0.0000000
[3,] 0.0000000 0.8944272 0.4472136

1
cholΩ

1
निश्चित रूप से यह सही है @cardinal - जब आप लगभग एकवचन परिपक्वता के साथ संख्यात्मक रूप से चीजों को करने की कोशिश कर रहे हों तो सैद्धांतिक रूप से उचित बहुत सी चीजें खराब हो जाती हैं। मैं (सुगमता से) उस स्थिति की कल्पना कर रहा था जहां लक्ष्य सहसंबंध मैट्रिक्स उस दायरे में नहीं था जहां यह एक मुद्दा था। यह अच्छा है कि आपने इसे इंगित किया - धन्यवाद (और मेरे अन्य उत्तर को संपादित करने के लिए धन्यवाद)
मैक्रों

1
मुख्य कारण मैं इस बारे में सोच रहा था कि ओपी का पहला सुझाव भी सकारात्मक निश्चित नहीं था, यह पहचानने में आपकी गहरी नजर के कारण था। और, उम्मीद है कि अन्य प्रश्न के लिए संपादन अति उत्साही नहीं था; मुझे ये दोनों जवाब पसंद हैं।
कार्डिनल

7

यदि आप R का उपयोग कर रहे हैं, तो आप MASS पैकेज से mvrnorm फ़ंक्शन का भी उपयोग कर सकते हैं, यह मानते हुए कि आप सामान्य रूप से वितरित चर चाहते हैं। कार्यान्वयन ऊपर मैक्रो के विवरण के समान है, लेकिन चोकस्की अपघटन के बजाय सहसंबंध मैट्रिक्स के आइजेनवेक्टर का उपयोग करता है और एक विलक्षण मूल्य अपघटन (यदि अनुभवजन्य विकल्प सही पर सेट है) के साथ स्केलिंग करता है।

XΣγλΣ

X=γλXT

ΣX

ध्यान दें कि सहसंबंध मैट्रिक्स को सकारात्मक निश्चित होना है, लेकिन आर में मैट्रिक्स पैकेज से नियरपीडी फ़ंक्शन के साथ इसे परिवर्तित करना उपयोगी होगा।


1

ΣyxΣx=IΣyΛV

Σy=VΛVT=(VΛ)(ΛTVT)=AAT

y=Ax

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.