कुछ मजबूत सहसंबंधों के साथ एक बड़ी पूर्ण-रैंक यादृच्छिक सहसंबंध मैट्रिक्स कैसे उत्पन्न करें?


25

मैं एक यादृच्छिक सहसंबंध मैट्रिक्स उत्पन्न करना चाहेंगे की आकार में इस तरह के कुछ मामूली मजबूत सहसंबंध वर्तमान देखते हैं कि: एन × एनCn×n

  • वर्ग वास्तविक सममित मैट्रिक्स आकार, उदाहरण के लिए ;n = 100n×nn=100
  • सकारात्मक-निश्चित, अर्थात सभी वास्तविकताओं के साथ वास्तविक और सकारात्मक;
  • पूर्ण रैंक;
  • बराबर सभी विकर्ण तत्व ;1
  • ऑफ-विकर्ण तत्वों को पर समान रूप से वितरित किया जाना चाहिए । सटीक वितरण कोई फर्क नहीं पड़ता है, लेकिन मैं मध्यम बड़े मूल्यों (जैसे या उच्चतर के पूर्ण मूल्य के साथ) के कुछ मामूली बड़ी राशि (जैसे ) रखना चाहूंगा । मूल रूप से मुझे लगता है कि यह सुनिश्चित करना चाहते है नहीं सब बंद विकर्ण तत्वों के साथ लगभग विकर्ण ।10 % 0.5 सी(1,1)10%0.5C0

वहाँ यह करने के लिए एक आसान तरीका है?

उद्देश्य ऐसे यादृच्छिक मैट्रिसेस का उपयोग करना है जो सहसंबंध (या सहसंयोजक) मैट्रिसेस के साथ काम करने वाले कुछ एल्गोरिदम को बेंचमार्क करते हैं।


ऐसे तरीके जो काम नहीं करते हैं

यहां कुछ ऐसे यादृच्छिक सहसंबंध मैट्रिक्स उत्पन्न किए गए हैं, जिनके बारे में मुझे पता है, लेकिन वे मेरे लिए यहां काम नहीं करते हैं:

  1. उत्पन्न यादृच्छिक के आकार, केंद्र, मानकीकरण और सहसंबंध मैट्रिक्स फार्म । यदि s> n , तो यह आम तौर पर सभी ऑफ-विकर्ण सहसंबंधों का परिणाम होगा 0 के आसपास । यदि \ n होगा , तो कुछ सहसंबंध मजबूत होंगे, लेकिन \ mathbf C पूर्ण रैंक नहीं होगा। एस × एन सी = 1Xs×nरों>एन0एस«एनसीC=1s1XXs>n0snC

  2. निम्न तरीकों में से एक में यादृच्छिक सकारात्मक निश्चित मैट्रिक्स \ mathbf B उत्पन्न करें B:

    • यादृच्छिक वर्ग उत्पन्न करें और सममितीय सकारात्मक निश्चित करें ।बी = AB=AA

    • यादृच्छिक वर्ग उत्पन्न करें , सममित , और इसे eigen-decomposition और शून्य के लिए सभी नकारात्मक eigenvalues ​​की स्थापना: । NB: यह एक रैंक की कमी मैट्रिक्स में परिणाम होगा। = एक + एक = यू एस यूबी = यूAE=A+AE=USUB=Umax{S,0}U

    • यादृच्छिक ऑर्थोगोनल उत्पन्न करें (जैसे यादृच्छिक वर्ग उत्पन्न करके और इसकी क्यूआर अपघटन, या ग्राम-श्मिट प्रक्रिया के माध्यम से) और सभी सकारात्मक तत्वों के साथ यादृच्छिक विकर्ण ; प्रपत्र ।डी बी = क्यू डी क्यूQADB=QDQ

    प्राप्त मैट्रिक्स को विकर्ण पर सभी को आसानी से सामान्य किया जा सकता है: , जहां एक विकर्ण मैट्रिक्स है, जिसमें । उपरोक्त सभी तीन तरीके परिणाम को उत्पन्न करने के लिए में ऑफ-विकर्ण तत्व पास ।BC=D1/2BD1/2D=diagBBBC0


अद्यतन: पुराने धागे

अपना प्रश्न पोस्ट करने के बाद, मुझे पिछले समय में लगभग दो डुप्लिकेट मिले:

दुर्भाग्य से, इनमें से किसी भी सूत्र में संतोषजनक उत्तर नहीं था (अब तक :)


1
आप QR या ग्राम-श्मिट प्रक्रियाओं द्वारा यादृच्छिक ऑर्थोगोनल मैट्रिक्स बना सकते हैं। वह "पीसीए के ईजनवेक्टर" होंगे। इसके स्तंभों में पैमाने जोड़ें ("लोडिंग" में बदल जाएं)। इन भारों से सहसंयोजक मैट्रिक्स प्राप्त करें। कुछ ऐसा ही ...
ttnphns

1
उह, अच्छी तरह से .. कल्पना कीजिए कि हम एक nXkलोडिंग मैट्रिक्स डब्ल्यू बनाना चाहते हैं , पूरी तरह से यादृच्छिक नहीं, लेकिन हम जो चाहते हैं (यह होगा, हम चाहते WW'+diag(noise)हैं कि कोव मैट्रिक्स को परिभाषित करें। एकमात्र कार्य कॉलम-सामान्यीकृत डब्ल्यू (यानी के के) को ठीक करना है। "eigenvectors") ऑर्थोगोनल बनने के लिए। सहसंबंधित चर (यहां चर eigenvectors हैं) को
हटाने के

1
आह, @whuber, अब मैं देखता हूं कि आपका क्या मतलब है। हाँ, तुम ठीक कह रहे: अगर सब बंद विकर्ण तत्वों समान हैं और के बराबर , तो मैट्रिक्स वास्तव में पूर्ण पद और सकारात्मक-निश्चित है ... बेशक यह नहीं है कि मैं क्या मन में था: मैं के वितरण चाहते हैं प्रत्येक मैट्रिक्स में ऑफ-डाइग्नोरल तत्व यथोचित रूप से "फैल" होते हैं, मैट्रिस में वितरण नहीं ...ρ
अमीबा का कहना है कि मोनिका

3
आप 22K पर LKJ वितरण
छायाकार

2
@ttnphns: मुझे लगता है कि मैं अंत में समझ गया हूं कि आप सभी सही थे: आपने जो सुझाव दिया वह लक्ष्य तक पहुंचने का सबसे सरल तरीका है। मैंने अपने उत्तर को लागू करने के लिए एक अद्यतन जोड़ा, जो आपने ऊपर लिखा था।
अमीबा का कहना है कि मोनिका

जवाबों:


14

अन्य उत्तर विभिन्न तरीकों से मेरी समस्या को हल करने के लिए अच्छी चाल के साथ आए। हालांकि, मुझे एक राजसी दृष्टिकोण मिला, जो मुझे लगता है कि वैचारिक रूप से बहुत स्पष्ट और समायोजित करने में आसान होने का एक बड़ा फायदा है।

इस सूत्र में: यादृच्छिक धनात्मक-अर्ध-सहसंबद्ध मैट्रिसेस को कुशलतापूर्वक कैसे उत्पन्न किया जाए? - मैंने यादृच्छिक सहसंबंध मैट्रिक्स बनाने के दो कुशल एल्गोरिदम के लिए कोड का वर्णन किया और प्रदान किया। दोनों लेवांडोव्स्की, कुरोवीका, और जो (2009) के एक पेपर से आते हैं , जो @ssdecontrol ने उपरोक्त टिप्पणियों में उल्लेख किया है (बहुत बहुत धन्यवाद!)।

कृपया बहुत सारे आंकड़े, स्पष्टीकरण और मतलबी कोड के लिए मेरा जवाब देखें । तथाकथित "बेल" विधि आंशिक सहसंबंधों के किसी भी वितरण के साथ यादृच्छिक सहसंबंध मैट्रिक्स उत्पन्न करने की अनुमति देती है और बड़े ऑफ-विकर्ण मूल्यों के साथ सहसंबंध मैट्रिक्स उत्पन्न करने के लिए उपयोग किया जा सकता है। यहाँ उस धागे से उदाहरण आकृति दी गई है:

बेल की विधि

केवल एक चीज जो सबप्लॉट्स के बीच बदलती है, वह एक पैरामीटर है जो नियंत्रित करता है कि आंशिक सहसंबंधों का वितरण आसपास कितना केंद्रित है ।±1

मैं इन मैट्रिसेस को बनाने के लिए अपना कोड कॉपी करता हूं, साथ ही यह दिखाने के लिए कि यह यहां बताए गए अन्य तरीकों से अधिक लंबा नहीं है। कृपया कुछ स्पष्टीकरण के लिए मेरा जुड़ा हुआ जवाब देखें। के मूल्यों betaparamआंकड़ा के लिए ऊपर थे (और आयामी स्वरूप था 100 )।50,20,10,5,2,1d100

function S = vineBeta(d, betaparam)
    P = zeros(d);           %// storing partial correlations
    S = eye(d);

    for k = 1:d-1
        for i = k+1:d
            P(k,i) = betarnd(betaparam,betaparam); %// sampling from beta
            P(k,i) = (P(k,i)-0.5)*2;     %// linearly shifting to [-1, 1]
            p = P(k,i);
            for l = (k-1):-1:1 %// converting partial correlation to raw correlation
                p = p * sqrt((1-P(l,i)^2)*(1-P(l,k)^2)) + P(l,i)*P(l,k);
            end
            S(k,i) = p;
            S(i,k) = p;
        end
    end

    %// permuting the variables to make the distribution permutation-invariant
    permutation = randperm(d);
    S = S(permutation, permutation);
end

अद्यतन: eigenvalues

@ अप्सरा इन मातृवंशियों के स्वदेशी के बारे में पूछती है। नीचे दिए गए आंकड़े पर, मैं ऊपर के रूप में एक ही छह सहसंबंध वाले मैट्रिंस के आइगेनवेल्यू स्पेक्ट्रा की साजिश रचता हूं। ध्यान दें कि वे धीरे-धीरे कम हो जाते हैं; इसके विपरीत, @psarka द्वारा सुझाई गई विधि आम तौर पर एक बड़े eigenvalue के साथ सहसंबंध मैट्रिक्स में परिणाम करती है, लेकिन बाकी सभी एक समान हैं।

ऊपर मैट्रिसेस के eigenvalues


अद्यतन करें। वास्तव में सरल विधि: कई कारक

ऊपर दिए गए टिप्पणियों में @ttnphns ने जो लिखा है और उसके जवाब में @GottfriedHelms के जैसा ही है, मेरे लक्ष्य को प्राप्त करने का एक बहुत ही सरल तरीका है बेतरतीब ढंग से कई ( ) कारक लोडिंग W ( k × n आकार का यादृच्छिक मैट्रिक्स ), फॉर्म बनाना। covariance मैट्रिक्स W W (जो निश्चित रूप से पूर्ण रैंक नहीं होगी) और इसे B = W W D + D बनाने के लिए सकारात्मक तत्वों के साथ एक यादृच्छिक विकर्ण मैट्रिक्स D में जोड़ेंk<nWk×nWWDB=WW+Dपूर्ण रैंक। परिणामस्वरूप सहसंयोजक मैट्रिक्स को सहसंबंध मैट्रिक्स बनने के लिए सामान्यीकृत किया जा सकता है (जैसा कि मेरे प्रश्न में वर्णित है)। यह बहुत सरल है और यह ट्रिक करता है। यहाँ लिए कुछ उदाहरण सहसंबंध मैट्रीज़ हैं :k=100,50,20,10,5,1

यादृच्छिक कारकों से यादृच्छिक सहसंबंध matrices

केवल नकारात्मक पक्ष यह है कि परिणामी मैट्रिक्स में बड़े eigenvalues ​​और फिर एक अचानक गिरावट होगी, जैसा कि बेल विधि के साथ ऊपर दिखाए गए एक अच्छे क्षय के विपरीत है। यहाँ इसी स्पेक्ट्रा हैं:k

इन मैट्रिसेस का इग्नेस्पेक्ट्रा

यहाँ कोड है:

d = 100;    %// number of dimensions
k = 5;      %// number of factors

W = randn(d,k);
S = W*W' + diag(rand(1,d));
S = diag(1./sqrt(diag(S))) * S * diag(1./sqrt(diag(S)));

+1। हालांकि, यहां "कारक विधि" पर आपके अंतिम अनुभाग के लिए एक अनुस्मारक है। सख्ती से सही दृष्टिकोण कॉल करता है कि Wऑर्थोगोनल हैं (यानी उनके बीच कोजाइन 0 हैं)। बस बेतरतीब ढंग Wसे उत्पन्न करना यह प्रदान नहीं करता है। वे orthogonal नहीं कर रहे हैं - यानी कारकों (तब कॉल परोक्ष हैं Wके रूप में W_) - कारक प्रमेय नहीं है WW'लेकिन W_CW_'साथ C"सहसंबंध" (कोसाइन) कारकों के बीच किया जा रहा है। अब, C=Q'Qके साथ Qरोटेशन के nonorthogonal रोटेशन मैट्रिक्स किया जा रहा है W_=inv(Q)'W(और इसलिए W=W_Q')। कुछ उत्पन्न करें Q- कॉलम ss = 1 और मैट्रिक्स ss = मैट्रिक्स के आकार के साथ एक मैट्रिक्स।
ttnphns

... टाइपो: नहीं W_=inv(Q)'W, बिल्कुल W_= W inv(Q)'
ttnphns 8:24

WWW+DW

1
इसका अनुवाद R:W = replicate(k, rnorm(d)); S = W%*%t(W) + diag(rnorm(d),nrow=d); S = diag(1/sqrt(diag(S)))%*%S%*%diag(1/sqrt(diag(S)))
स्कॉट वर्लैंड

1
@ मिहाई, अच्छी बात और आपके सुझाव संभवत: सबसे सरल हैं। आप यह भी कर सकते हैंS <- matrix(nearPD(S, corr = TRUE, keepDiag = TRUE)$mat@x,ncol(S),ncol(S))
स्कॉट वॉर्लैंड

7

a

import numpy as np
from random import choice
import matplotlib.pyplot as plt

n = 100
a = 2

A = np.matrix([np.random.randn(n) + np.random.randn(1)*a for i in range(n)])
A = A*np.transpose(A)
D_half = np.diag(np.diag(A)**(-0.5))
C = D_half*A*D_half

vals = list(np.array(C.ravel())[0])
plt.hist(vals, range=(-1,1))
plt.show()
plt.imshow(C, interpolation=None)
plt.show()

कुछ समान वितरण Imshow के परिणाम


crsk[a,a]X

हाँ, आप पूरी तरह से सही हैं! (ओह बॉय, कि वास्तव में मूर्ख था: डी)। मैंने रैंडम पार्ट को बदल दिया (1) * a और अब यह बहुत बेहतर है।
Psarka

k

an

इस पद्धति का एक नकारात्मक पहलू यह है कि परिणामी सहसंबंध मैट्रिक्स में एक बड़ा स्वदेशी है, लेकिन शेष लगभग समान हैं। तो इस प्रक्रिया से "सामान्य" सहसंबंध मैट्रिक्स नहीं निकलता है ... ऐसा नहीं है कि मैंने इसे अपने प्रश्न में निर्दिष्ट किया है। लेकिन @ssdecontrol ने उपरोक्त टिप्पणियों में उल्लेख किया है कि जाहिरा तौर पर सभी सहसंबंध वाले मैट्रिस से नमूना लेने के तरीके हैं; यह दिलचस्प लग रहा है लेकिन बहुत अधिक जटिल है।
अमीबा का कहना है कि मोनिका

6

हम्म, के बाद मैंने अपनी मैटमैट-भाषा में एक उदाहरण दिया, मैं देखता हूं कि पहले से ही एक अजगर-उत्तर है, जो शायद बेहतर होगा क्योंकि अजगर व्यापक रूप से उपयोग किया जाता है। लेकिन क्योंकि आपने अभी भी सवाल किए थे, मैं आपको मैमेट-मैट्रिक्स-भाषा का उपयोग करके अपना दृष्टिकोण दिखाता हूं, शायद यह अधिक आत्मसंतुष्ट है।

विधि 1
(MatMate का उपयोग करके):

v=12         // 12 variables
f=3          // subset-correlation based on 3 common factors
vg = v / f   // variables per subsets

 // generate hidden factor-matrix
             // randomu(rows,cols ,lowbound, ubound) gives uniform random matrix 
             //    without explicite bounds the default is: randomu(rows,cols,0,100)
L = {   randomu(vg,f)     || randomu(vg,f)/100  || randomu(vg,f)/100 , _
        randomu(vg,f)/100 || randomu(vg,f)      || randomu(vg,f)/100 , _
        randomu(vg,f)/100 || randomu(vg,f)/100  || randomu(vg,f)     }

 // make sure there is itemspecific variance
 // by appending a diagonal-matrix with random positive entries
L = L || mkdiag(randomu(v,1,10,20)) 
  // make covariance and correlation matrix
cov = L *'   // L multiplied  with its transpose
cor = covtocorr(cov)
                   set ccdezweite=3 ccfeldweite=8
                   list cor
cor = 
   1.000,   0.321,   0.919,   0.489,   0.025,   0.019,   0.019,   0.030,   0.025,   0.017,   0.014,   0.014
   0.321,   1.000,   0.540,   0.923,   0.016,   0.015,   0.012,   0.030,   0.033,   0.016,   0.012,   0.015
   0.919,   0.540,   1.000,   0.679,   0.018,   0.014,   0.012,   0.029,   0.028,   0.014,   0.012,   0.012
   0.489,   0.923,   0.679,   1.000,   0.025,   0.022,   0.020,   0.040,   0.031,   0.014,   0.011,   0.014
   0.025,   0.016,   0.018,   0.025,   1.000,   0.815,   0.909,   0.758,   0.038,   0.012,   0.018,   0.014
   0.019,   0.015,   0.014,   0.022,   0.815,   1.000,   0.943,   0.884,   0.035,   0.012,   0.014,   0.012
   0.019,   0.012,   0.012,   0.020,   0.909,   0.943,   1.000,   0.831,   0.036,   0.013,   0.015,   0.010
   0.030,   0.030,   0.029,   0.040,   0.758,   0.884,   0.831,   1.000,   0.041,   0.017,   0.022,   0.020
   0.025,   0.033,   0.028,   0.031,   0.038,   0.035,   0.036,   0.041,   1.000,   0.831,   0.868,   0.780
   0.017,   0.016,   0.014,   0.014,   0.012,   0.012,   0.013,   0.017,   0.831,   1.000,   0.876,   0.848
   0.014,   0.012,   0.012,   0.011,   0.018,   0.014,   0.015,   0.022,   0.868,   0.876,   1.000,   0.904
   0.014,   0.015,   0.012,   0.014,   0.014,   0.012,   0.010,   0.020,   0.780,   0.848,   0.904,   1.000

यहाँ समस्या यह हो सकती है, कि हम उन सबमट्रिसेस के ब्लॉक को परिभाषित करते हैं जिनके बीच उच्च सहसंबंध है और जिनके बीच परस्पर संबंध नहीं है, लेकिन यह प्रोग्रामेटिक रूप से निरंतर कॉन्सेप्टन-एक्सप्रेशंस द्वारा नहीं है। शायद इस दृष्टिकोण को अजगर में अधिक सुरुचिपूर्ण ढंग से चित्रित किया जा सकता है।


विधि 2 (ए)
उसके बाद, एक पूरी तरह से अलग दृष्टिकोण है, जहां हमएक कारक-लोडिंग-मैट्रिक्स में 100 प्रतिशत के यादृच्छिक मात्रा में संभव शेष कोवरियन कोभरते हैं। यह परी / जीपी में किया जाता है:

{L = matrix(8,8);  \\ generate an empty factor-loadings-matrix
for(r=1,8, 
   rv=1.0;    \\ remaining variance for variable is 1.0
   for(c=1,8,
        pv=if(c<8,random(100)/100.0,1.0); \\ define randomly part of remaining variance
        cv= pv * rv;  \\ compute current partial variance
        rv = rv - cv;     \\ compute the now remaining variance
        sg = (-1)^(random(100) % 2) ;  \\ also introduce randomly +- signs
        L[r,c] = sg*sqrt(cv) ;  \\ compute factor loading as signed sqrt of cv
       )
     );}

cor = L * L~

और उत्पादित सहसंबंध-मैट्रिक्स है

     1.000  -0.7111  -0.08648   -0.7806   0.8394  -0.7674   0.6812    0.2765
   -0.7111    1.000   0.06073    0.7485  -0.7550   0.8052  -0.8273   0.05863
  -0.08648  0.06073     1.000    0.5146  -0.1614   0.1459  -0.4760  -0.01800
   -0.7806   0.7485    0.5146     1.000  -0.8274   0.7644  -0.9373  -0.06388
    0.8394  -0.7550   -0.1614   -0.8274    1.000  -0.5823   0.8065   -0.1929
   -0.7674   0.8052    0.1459    0.7644  -0.5823    1.000  -0.7261   -0.4822
    0.6812  -0.8273   -0.4760   -0.9373   0.8065  -0.7261    1.000   -0.1526
    0.2765  0.05863  -0.01800  -0.06388  -0.1929  -0.4822  -0.1526     1.000

संभवतः यह कारक-लोडिंग-मैट्रिक्स के लिए संचयी जनरेटिंग-नियम के कारण प्रमुख प्रिंसिपल घटकों के साथ सहसंबंध-मैट्रिक्स उत्पन्न करता है। साथ ही विचरण के अंतिम भाग को एक अनूठा कारक बनाकर सकारात्मक निश्चितता का आश्वासन देना बेहतर हो सकता है। मैंने इसे सामान्य सिद्धांत पर ध्यान केंद्रित रखने के लिए कार्यक्रम में छोड़ दिया।

100x100 सहसंबंध-मैट्रिक्स में सहसंबंधों की निम्न आवृत्तियां थीं (1 स्थान पर गोल)

    e    f            e: entry(rounded) f: frequency
  -----------------------------------------------------
  -1.000, 108.000
  -0.900, 460.000
  -0.800, 582.000
  -0.700, 604.000
  -0.600, 548.000
  -0.500, 540.000
  -0.400, 506.000
  -0.300, 482.000
  -0.200, 488.000
  -0.100, 464.000
   0.000, 434.000
   0.100, 486.000
   0.200, 454.000
   0.300, 468.000
   0.400, 462.000
   0.500, 618.000
   0.600, 556.000
   0.700, 586.000
   0.800, 536.000
   0.900, 420.000
   1.000, 198.000

[अद्यतन करें]। हम्म, 100x100 मैट्रिक्स बुरी तरह से वातानुकूलित है; Pari / GP पॉलीओट्स (charpoly ()) - 200 अंकों की सटीकता के साथ भी फ़ंक्शन के साथ सही ढंग से आइजेनवॉल निर्धारित नहीं कर सकता है। मैंने लोडिंगमैट्रिक्स एल पर pca- फॉर्म के लिए एक जैकोबी-रोटेशन किया है और ज्यादातर बेहद छोटे eigenvalues ​​ढूंढते हैं, उन्हें logarithms में बेस 10 में मुद्रित किया (जो दशमलव बिंदु की स्थिति को लगभग देते हैं)। पंक्ति से बाएं और फिर पंक्ति से पढ़ें:

log_10(eigenvalues):
   1.684,   1.444,   1.029,   0.818,   0.455,   0.241,   0.117,  -0.423,  -0.664,  -1.040
  -1.647,  -1.799,  -1.959,  -2.298,  -2.729,  -3.059,  -3.497,  -3.833,  -4.014,  -4.467
  -4.992,  -5.396,  -5.511,  -6.366,  -6.615,  -6.834,  -7.535,  -8.138,  -8.263,  -8.766
  -9.082,  -9.482,  -9.940, -10.167, -10.566, -11.110, -11.434, -11.788, -12.079, -12.722
 -13.122, -13.322, -13.444, -13.933, -14.390, -14.614, -15.070, -15.334, -15.904, -16.278
 -16.396, -16.708, -17.022, -17.746, -18.090, -18.358, -18.617, -18.903, -19.186, -19.476
 -19.661, -19.764, -20.342, -20.648, -20.805, -20.922, -21.394, -21.740, -21.991, -22.291
 -22.792, -23.184, -23.680, -24.100, -24.222, -24.631, -24.979, -25.161, -25.282, -26.211
 -27.181, -27.626, -27.861, -28.054, -28.266, -28.369, -29.074, -29.329, -29.539, -29.689
 -30.216, -30.784, -31.269, -31.760, -32.218, -32.446, -32.785, -33.003, -33.448, -34.318

[अद्यतन २]
विधि २ (बी)
एक सुधार कुछ गैर-सीमांत स्तर तक आइटमस्पेक्टिव विचरण को बढ़ाने के लिए हो सकता है और सामान्य कारकों के एक छोटे से कम संख्या के लिए कम कर सकता है (उदाहरण के लिए मदनंबर का पूर्णांक-स्क्वैरट)

{  dimr = 100;
   dimc = sqrtint(dimr);        \\ 10 common factors
   L = matrix(dimr,dimr+dimc);  \\ loadings matrix 
                                \\     with dimr itemspecific and 
                                \\          dimc common factors
   for(r=1,dim, 
         vr=1.0;                \\ complete variance per item 
         vu=0.05+random(100)/1000.0;   \\ random variance +0.05
                                       \\ for itemspecific variance
         L[r,r]=sqrt(vu);              \\ itemspecific factor loading  
         vr=vr-vu;
         for(c=1,dimc,
                cv=if(c<dimc,random(100)/100,1.0)*vr;
                vr=vr-cv;
                L[r,dimr+c]=(-1)^(random(100) % 2)*sqrt(cv)
             )
        );}

   cov=L*L~
   cp=charpoly(cov)   \\ does not work even with 200 digits precision
   pr=polroots(cp)    \\ spurious negative and complex eigenvalues...

परिणाम की संरचना

सहसंबंधों के वितरण की अवधि में:छवि

इसी तरह बनी हुई है (PariGP द्वारा भी बुरा गैर विघटन), लेकिन लोडिंगमैट्रिक्स के जैकोबी-रोटेशन द्वारा पाए जाने पर आईजेनवेल्यूल्स, अब एक बेहतर संरचना है, एक नए संगणित उदाहरण के लिए मुझे आईगेनवैल्यूज़ के रूप में मिला है

log_10(eigenvalues):
   1.677,   1.326,   1.063,   0.754,   0.415,   0.116,  -0.262,  -0.516,  -0.587,  -0.783
  -0.835,  -0.844,  -0.851,  -0.854,  -0.858,  -0.862,  -0.862,  -0.868,  -0.872,  -0.873
  -0.878,  -0.882,  -0.884,  -0.890,  -0.895,  -0.896,  -0.896,  -0.898,  -0.902,  -0.904
  -0.904,  -0.909,  -0.911,  -0.914,  -0.920,  -0.923,  -0.925,  -0.927,  -0.931,  -0.935
  -0.939,  -0.939,  -0.943,  -0.948,  -0.951,  -0.955,  -0.956,  -0.960,  -0.967,  -0.969
  -0.973,  -0.981,  -0.986,  -0.989,  -0.997,  -1.003,  -1.005,  -1.011,  -1.014,  -1.019
  -1.022,  -1.024,  -1.031,  -1.038,  -1.040,  -1.048,  -1.051,  -1.061,  -1.064,  -1.068
  -1.070,  -1.074,  -1.092,  -1.092,  -1.108,  -1.113,  -1.120,  -1.134,  -1.139,  -1.147
  -1.150,  -1.155,  -1.158,  -1.166,  -1.171,  -1.175,  -1.184,  -1.184,  -1.192,  -1.196
  -1.200,  -1.220,  -1.237,  -1.245,  -1.252,  -1.262,  -1.269,  -1.282,  -1.287,  -1.290

आपका बहुत बहुत धन्यवाद! बहुत दिलचस्प है, लेकिन मुझे पचाने में थोड़ा समय लगेगा ...
अमीबा ने कहा, मोनिका

मुझे अभी भी आपके उत्तर के माध्यम से सावधानी से जाना है, लेकिन इस बीच मैंने यादृच्छिक सहसंबंध मैट्रिक्स के नमूने के बारे में एक पेपर पढ़ा, और वहां से एक विधि का उपयोग ठीक उसी तरह किया जा सकता है जिसकी मुझे आवश्यकता है। मैंने यहां एक उत्तर पोस्ट किया है, आप एक बार देखने के लिए इच्छुक हो सकते हैं! यह एक और अधिक विस्तृत लिंक से जोड़ता है जो मैंने एक और धागे में लिखा था।
अमीबा का कहना है कि मोनिका

@amoeba: खुश आप कुछ अच्छी तरह से आप के लिए काम कर पाया! यह एक दिलचस्प सवाल है, मैं बाद में खुद इस पर वापस आऊंगा, शायद मेटमैट-प्रक्रियाओं में सुधार / अनुकूलन कर (और उन्हें सबरूटीन्स बना सकता हूं) उस कागज के अनुसार जो आपने काम किया है।
गॉटफ्रीड हेल्स

2

बीλ+(1-λ)बीλ

बीसीλ+λबीबी+λसीसीΣλ=1λ0


बी

आह, लेकिन इस तरह के एक एल्गोरिथ्म से, और "कोने" (कि, मेट्रिसेस) में एक उपयुक्त विविधता जो सकारात्मक-निश्चित सहसंबंध के आपके पॉलिटॉप को परिभाषित करती है, आप प्रतिजन का वितरण, प्रविष्टियों की एकरूपता प्राप्त करने के लिए अस्वीकृति नमूने का उपयोग कर सकते हैं। आदि, कि आप की इच्छा हालांकि, यह मेरे लिए स्पष्ट नहीं है कि एक अच्छा आधार क्या होगा। किसी ऐसे व्यक्ति के लिए एक प्रश्न की तरह लगता है जिसने I से अधिक हाल ही में अमूर्त बीजगणित का अध्ययन किया है
एंड्रयू एम

हाय फिर, मैं यादृच्छिक सहसंबंध matrices के नमूने के बारे में एक पेपर पढ़ा, और वहाँ से तरीकों में से एक का इस्तेमाल ठीक उसी तरह किया जा सकता है जिसकी मुझे ज़रूरत है। मैंने यहां एक उत्तर पोस्ट किया है, आप एक बार देखने के लिए इच्छुक हो सकते हैं! यह एक और अधिक विस्तृत लिंक से जोड़ता है जो मैंने एक और धागे में लिखा था।
अमीबा का कहना है कि मोनिका

2

R में एक पैकेज (क्लस्टर-जेनरेशन) है जो विधि को लागू करता है:

उदाहरण:

> (cormat10 = clusterGeneration::rcorrmatrix(10, alphad = 1/100000000000000))
        [,1]   [,2]    [,3]     [,4]     [,5]   [,6]   [,7]    [,8]     [,9]   [,10]
 [1,]  1.000  0.344 -0.1406 -0.65786 -0.19411  0.246  0.688 -0.6146  0.36971 -0.1052
 [2,]  0.344  1.000 -0.4256 -0.35512  0.15973  0.192  0.340 -0.4907 -0.30539 -0.6104
 [3,] -0.141 -0.426  1.0000  0.01775 -0.61507 -0.485 -0.273  0.3492 -0.30284  0.1647
 [4,] -0.658 -0.355  0.0178  1.00000  0.00528 -0.335 -0.124  0.5256 -0.00583 -0.0737
 [5,] -0.194  0.160 -0.6151  0.00528  1.00000  0.273 -0.350 -0.0785  0.08285  0.0985
 [6,]  0.246  0.192 -0.4847 -0.33531  0.27342  1.000  0.278 -0.2220 -0.11010  0.0720
 [7,]  0.688  0.340 -0.2734 -0.12363 -0.34972  0.278  1.000 -0.6409  0.40314 -0.2800
 [8,] -0.615 -0.491  0.3492  0.52557 -0.07852 -0.222 -0.641  1.0000 -0.50796  0.1461
 [9,]  0.370 -0.305 -0.3028 -0.00583  0.08285 -0.110  0.403 -0.5080  1.00000  0.3219
[10,] -0.105 -0.610  0.1647 -0.07373  0.09847  0.072 -0.280  0.1461  0.32185  1.0000
> cormat10[lower.tri(cormat10)] %>% psych::describe()
   vars  n  mean   sd median trimmed mad   min  max range skew kurtosis   se
X1    1 45 -0.07 0.35  -0.08   -0.07 0.4 -0.66 0.69  1.35 0.03       -1 0.05

दुर्भाग्य से, यह सहसंबंधों का अनुकरण करना संभव नहीं है जो इसके साथ एक समान-ईश वितरण का पालन करते हैं। ऐसा लगता है कि alphadबहुत छोटे मूल्यों पर सेट होने पर मजबूत सहसंबंध बनते हैं, लेकिन यहां तक ​​कि 1/100000000000000सहसंबंधों की सीमा लगभग 1.40 तक बढ़ जाएगी।

बहरहाल, मुझे उम्मीद है कि यह किसी के लिए कुछ काम का हो सकता है।

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