Küsimus:
Kuidas efektiivselt genereerida juhuslikke positiivseid-poolväärtuslikke korrelatsioonimaatriksid?
Eduardas
2010-09-17 01:39:01 UTC
view on stackexchange narkive permalink

Ma tahaksin, et oleks võimalik tõhusalt genereerida positiivse semidefiniidi (PSD) korrelatsioonimaatriksid. Minu meetod aeglustub dramaatiliselt, kui suurendan genereeritavate maatriksite suurust.

  1. Kas saaksite soovitada mõnda tõhusat lahendust? Kui olete Matlabist teadlik mõnest näitest, oleksin väga tänulik.
  2. Kuidas valiksite genereeritavate maatriksite kirjeldamiseks PSD korrelatsioonimaatriksi loomisel? Keskmine korrelatsioon, korrelatsioonide standardhälve, omaväärtused?
https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.random_correlation.html?highlight=correlation
Kaheksa vastused:
#1
+30
amoeba
2014-11-22 04:49:37 UTC
view on stackexchange narkive permalink

Lewandowski, Kurowicka ja Joe (LKJ), 2009 koostatud paber Viinapuudel ja laiendatud sibula meetodil põhinevate juhuslike korrelatsioonimaatriksite genereerimine pakub ühtset käsitlust ja selgitust kahest tõhusast juhuslike meetodite genereerimise meetodist. korrelatsioonimaatriksid. Mõlemad meetodid võimaldavad luua maatriksid ühtlasest jaotusest teatud allpool määratletud täpses tähenduses, neid on lihtne rakendada, kiire ja nende eeliseks on lõbusad nimed.

A reaalses sümmeetrilises maatriksis $ d \ korda d = d diagonaalis olevate omadustega on $ d (d-1) / 2 $ ainulaadsed diagonaalivälised elemendid ja seega saab seda parameetriseerida punktina failis $ \ mathbb R ^ {d (d -1) / 2} $. Igale punktile selles ruumis vastab sümmeetriline maatriks, kuid mitte kõik neist pole positiivsed-kindlad (nagu korrelatsioonimaatriksid peavadki olema). Seepärast moodustavad korrelatsioonimaatriksid alamhulga $ \ mathbb R ^ {d (d-1) / 2} $ (tegelikult ühendatud kumer alamhulk) ja mõlemad meetodid võivad genereerida punkte selle alamhulga ühtlasest jaotusest.

Pakun oma meetodi MATLAB-i rakenduse ja illustreerin neid väärtusega $ d = 100 $.


Sibulameetod

Sibulameetod pärineb teisest paberist (viide # 3 LKJ-s) ja omab oma nime sellele, et korrelatsioonimaatriksid luuakse algusega $ 1 \ korda 1 $ maatriks ja selle kasvatamine veergude kaupa ja ridade kaupa. Saadud jaotus on ühtlane. Ma ei saa meetodi taga olevast matemaatikast tegelikult aru (ja eelistan ikkagi teist meetodit), kuid siin on tulemus:

Onion method

Siin ja igaühe pealkirja all alamdiagramm näitab väikseimat ja suurimat omaväärtust ning determinanti (kõigi omaväärtuste korrutis). Siin on kood:

 % // sibulameetod juhuslikult jaotatud korrelatsioonimaatriksite genereerimiseks S = sibul (d) S = 1; k = 2 korral: d y = betarnd ((k-1) / 2, (d-k) / 2); % // proovivõtt beetajaotusest r = sqrt (y); teeta = randn (k-1,1); teeta = teeta / norm (teeta); w = r * teeta;
[U, E] = eig (S); R = U * E. ^ (1/2) * U '; % // R on ruutjuur S q = R * w; S = [Sq; q '1]; % // maatriksi suuruse suurendamine  

Laiendatud sibula meetod

LKJ modifitseerib seda meetodit veidi, et oleks võimalik korrelatsioonimaatriksitest $ \ mathbf C $ proovida jaotus, mis on proportsionaalne väärtusega $ [\ mathrm {det} \: \ mathbf C] ^ {\ eta-1} $. Mida suurem on $ \ eta $, seda suurem on määrav, mis tähendab, et genereeritud korrelatsioonimaatriksid lähenevad üha enam identiteedimaatriksile. Väärtus $ \ eta = 1 $ vastab ühtsele jaotusele. Alloleval joonisel genereeritakse maatriksid väärtusega $ \ eta = {1, 10, 100, 1000, 10 \: 000, 100 \: 000} $.

Extended onion method

Mingil põhjusel, et saada determinant samas suurusjärgus kui vanillisibula meetodil, pean panema $ \ eta = 0 $ ja mitte $ \ eta = 1 $ (nagu väidab LKJ). Pole kindel, kus viga asub.

 % // PIKENDATUD sibula meetod, et genereerida juhuslikud korrelatsioonimaatriksid% // jaotatud ~ det (S) ^ eta [ või võib-olla det (S) ^ (eta-1), pole kindel] funktsioon S = pikendatudOnion (d, eta) beeta = eta + (d-2) / 2; u = betarnd (beeta, beeta); r12 = 2 * u - 1; S = [1 r12; r12 1]; k = 3 korral: d beeta = beeta - 1/2; y = betarnd ((k-1) / 2, beeta); r = sqrt (y); teeta = randn (k-1,1); teeta = teeta / norm (teeta); w = r * teeta; [U, E] = eig (S); R = U * E. ^ (1/2) * U '; q = R * w; S = [Sq; q '1]; endend  

Vine meetod

Vine meetodi soovitas algselt Joe (J LKJ-s) ja LKJ parandas seda. Mulle meeldib see rohkem, sest seda on kontseptuaalselt lihtsam ja ka lihtsam muuta. Idee on genereerida osalised korrelatsioonid $ d (d-1) / 2 $ (need on sõltumatud ja nende väärtus võib olla piiranguteta alates $ [- 1, 1] $) ja teisendada need rekursiivse valemi abil tooreks korrelatsiooniks. . Arvutamist on mugav korraldada kindlas järjekorras ja seda graafikut tuntakse kui "viinapuud". Oluline on see, et kui osalistest korrelatsioonidest valitakse teatud beetajaotused (maatriksi erinevate rakkude jaoks erinevad), siis jaotub saadud maatriks ühtlaselt. Jällegi lisab LKJ täiendava parameetri $ \ eta $, et proovida jaotisest, mis on proportsionaalne väärtusega $ [\ mathrm {det} \: \ mathbf C] ^ {\ eta-1} $. Tulemus on identne laiendatud sibulaga:

Vine method

 % // VINE METHOD juhuslike korrelatsioonimaatriksite genereerimiseks% // jaotatud ~ det (S) ^ eta [või võib-olla det (S) ^ (eta-1), pole kindel] funktsioon S = viinapuu (d, eta) beeta = eta + (d-1) / 2; P = nullid (d); % // osaliste korrelatsioonide salvestamine S = silm (d); k = 1 korral: d-1 beeta = beeta - 1/2; i = k + 1 jaoks: d P (k, i) = betarnd (beeta, beeta); % // proovide võtmine beeta P-st (k, i) = (P (k, i) -0,5) * 2; % // lineaarselt nihkudes väärtusele [-1, 1] p = P (k, i); l = (k-1) korral: - 1: 1% // osalise korrelatsiooni teisendamine toorkorrelatsiooniks p = p * sqrt ((1-P (l, i) ^ 2) * (1-P (l, k) ^ 2)) + P (l, i) * P (l, k); lõpp S (k, i) = p; S (i, k) = p; end endend  

Viinameetod osaliste korrelatsioonide käsitsi proovide võtmisega

Nagu ülalpool näha, annab ühtlane jaotus peaaegu diagonaalsed korrelatsioonimaatriksid. Kuid viinapuumeetodit saab hõlpsasti muuta tugevamate korrelatsioonide saamiseks (seda pole LKJ artiklis kirjeldatud, kuid see on otsene): selleks peaks valima osalised korrelatsioonid jaotusest, mille kontsentratsioon on umbes $ \ pm 1 $. Allpool valin need beetajaotusest (skaleeritud väärtuselt $ [0,1] $ väärtusele $ [- 1, 1] $) väärtusega $ \ alpha = \ beta = {50, 20, 10, 5, 2, 1} $. Mida väiksemad on beetajaotuse parameetrid, seda rohkem see on servade lähedale koondunud.

Vine method with manual sampling

Pange tähele, et sel juhul pole garanteeritud, et levitamine oleks permutatsiooni muutumatu, seega luban lisaks juhuslikult ridu ja veerge pärast põlvkonda.

 % // VINE METHOD juhuslike korrelatsioonimaatriksite genereerimiseks% // kõigi jaotatud osaliste korrelatsioonidega ~ beeta (betaparam, betaparam)% // muudetud funktsiooniks [-1, 1] S = viinapuuBeta (d, betaparaam) P = nullid (d); % // osaliste korrelatsioonide salvestamine S = silm (d); k = 1 korral: d-1 i = k + 1 korral: d P (k, i) = betarnd (betaparaam, betaparaam); % // proovide võtmine beeta P-st (k, i) = (P (k, i) -0,5) * 2; % // lineaarselt nihkudes väärtusele [-1, 1] p = P (k, i); l = (k-1) korral: - 1: 1% // osalise korrelatsiooni teisendamine toorkorrelatsiooniks p = p * sqrt ((1-P (l, i) ^ 2) * (1-P (l, k) ^ 2)) + P (l, i) * P (l, k); lõpp S (k, i) = p; S (i, k) = p; end end% // muutujate permutatsioon, et muuta jaotuse permutatsiooni muutumatu permutatsioon = randperm (d); S = S (permutatsioon, permutatsioon); lõpp  

Siit saate teada, kuidas diagonaaliväliste elementide histogrammid otsivad ülaltoodud maatriksit (jaotuse variatsioon suureneb monotoonselt):

Off-diagonal elements


Värskendus: juhuslike tegurite abil

@shabbychef kasutas vastuses ühte tõeliselt lihtsat juhuslike korrelatsioonimaatriksite genereerimise meetodit, millel on mõned tugevad korrelatsioonid, ja tahaksin seda ka siin illustreerida. Idee on genereerida juhuslikult mitu ($ k<d $) faktorkoormust $ \ mathbf W $ (juhuslik maatriks $ k \ korda d $ d), moodustada kovariantsimaatriks $ \ mathbf W \ mathbf W ^ \ top $ (milline kursus ei ole täielik auaste) ja lisage sellele positiivsete elementidega juhuslik diagonaalmaatriks $ \ mathbf D $, et teha $ \ mathbf B = \ mathbf W \ mathbf W ^ \ top + \ mathbf D $ täielik auaste. Saadud kovariatsioonimaatriksi saab normaliseerida korrelatsioonimaatriksiks, lubades $ \ mathbf C = \ mathbf E ^ {- 1/2} \ mathbf B \ mathbf E ^ {- 1/2} $, kus $ \ mathbf E $ on diagonaalmaatriks, mille diagonaal on sama mis $ \ mathbf B $. See on väga lihtne ja teeb trikki. Siin on mõned näited korrelatsioonimaatriksitest väärtusele $ k = {100, 50, 20, 10, 5, 1} $:

random correlation matrices from random factors

Ja kood:

 % // FACTOR meetodi funktsioonS = tegur (d, k) W = randn (d, k); S = W * W '+ diag (rand (1, d)); S = diag (1./sqrt (diag (S))) * S * diag (1./sqrt (diag (S))); lõpp  

Siin on jooniste genereerimiseks kasutatud pakkimiskood:

  d = 100; % // korrelatsioonimaatriksifiguuri suurus ('Positsioon', [100 100 1100 600]) kordamiseks = 1: 6 S = sibul (d); % // etas = [1 10 100 1000 1e + 4 1e + 5]; % // S = pikendatud sibul (d, etas (kordus)); % // S = viinapuu (d, etas (kordus)); % // betaparaamid = [50 20 10 5 2 1]; % // S = viinapuuBeta (d, betaparaamid (kordus)); alamjoonis (2,3, kordus)% // kasutage seda S imagesc (S, [-1 1]) telje ruudu pealkirja värvikaartide joonistamiseks (['Eigs:' num2str (min (eig (S)), 2) ' ... 'num2str (max (eig (S)), 2)', det = 'num2str (det (S), 2)]))% // kasutage seda diagonaaliväliste elementide histogrammide joonistamiseks% // offd = S (loogilised (ühed (suurus (S)) - silm (suurus (S)))); % // hist (offd)% // xlim ([- 1 1]) lõpp  
See on fantastiline tühjenemine, mul on hea meel, et midagi ütlesin!
Kui tõlkisin viinapõhise korrelatsioonimaatriksi matlab-koodi R-ks ja testisin seda, oli 1. veeru korrelatsioonide tihedus alati erinev kui hilisemates veergudes.Võib juhtuda, et tõlkisin midagi valesti, kuid võib-olla aitab see märkus kedagi.
R-kasutajate jaoks rakendab viinapuumeetodit funktsioon rcorrmatrix pakettklastrisGeneration (kirjutanud W Qui ja H. Joe).
#2
+17
user603
2010-09-17 02:05:16 UTC
view on stackexchange narkive permalink

Saate seda teha tagurpidi: iga maatriksi $ C \ in \ mathbb {R} _ {++} ^ p $ (kõigi sümmeetriliste $ p \ korda p $ PSD maatriksite komplekt) saab lagundada järgmiselt:

$ C = O ^ {T} DO $, kus $ O $ on ortonormaalne maatriks

$ O $ saamiseks genereerige kõigepealt juhuslik alus $ (v_1, ..., v_p) $ (kus $ v_i $ on juhuslikud vektorid, tavaliselt $ (- 1,1) $). Sealt saate $ (u_1, ...., u_p) = O $ saamiseks kasutada Gram-Schmidti ortogonaliseerimisprotsessi.

$ R $-l on mitu paketti, mis suudavad juhusliku GS-i ortogonaliseerimise tõhusalt, seda isegi suurte mõõtmete korral, näiteks paketi „kaugel” puhul. Kuigi GS-i algoritmi leiate wikist, on ilmselt parem mitte ratast uuesti leiutada ja minna matlabi rakendama (üks on kindlasti olemas, ma lihtsalt ei saa soovitada ühtegi).

Lõpuks, $ D $ on diagonaalsed maatriksid, mille kõik elemendid on positiivsed (seda on jällegi lihtne genereerida: genereerige juhuslikud arvud $ p $, ruudutage need, sorteerige ja asetage need identiteedi $ p $ diagonaali juurde maatriksi $ p $ järgi ).

(1) Pange tähele, et saadud $ C $ ei ole korrelatsioonimaatriks (nagu seda nõuab OP), sest diagonaalil pole neid.Muidugi saab selle diagonaalil skaleerida, seades selle väärtusele $ E ^ {- 1/2} CE ^ {- 1/2} $, kus $ E $ on diagonaalmaatriks, millel on sama diagonaal kui $C $.(2) Kui ma ei eksi, siis selle tulemuseks on korrelatsioonimaatriksid, kus kõik diagonaalivälised elemendid on koondunud 0 dollari ümber, seega pole paindlikkust, mida OP soovis (OP soovis, et oleks võimalik määrata * "jakeskmine korrelatsioon, korrelatsioonide standardhälve, omaväärtused "*)
@amoeba: käsitlen (2), kuna, nagu te rõhutate, on (1) lahendus tühine.PSD maatriksi „kuju” (diagonaalelementide sisse- ja väljatõmbe suhe) (ja seega ka kovariantsus ja ka korrelatsioonimaatriks) ühe numbri iseloomustus on selle seisundinumber.Ja ülalkirjeldatud meetod võimaldab seda täielikult kontrollida.'Väljaspool diagonaalelementide kontsentratsioon ümber 0' ei ole PSD maatriksite genereerimiseks kasutatud meetodi tunnusjoon, vaid pigem piirangute tagajärg, mis on vajalik maatriksi PSD tagamiseks ja asjaolu, et $ p $ on suur.
Kas tahate öelda, et kõigil suurtel PSD maatriksitel on nullilähedased diagonaalelemendid?Ma ei nõustu, see pole nii.Siit leiate mõned näited minu vastusest: [Kuidas luua juhuslikku korrelatsioonimaatriksit, millel on standardhälbega ligikaudu normaaljaotusega diagonaalivälised kirjed?] (Http://stats.stackexchange.com/questions/10121)et see pole nii, sest ruutmaatriks, mille diagonaalil on kõik tähed ja fikseeritud väärtus $ \ rho $ kõikjal diagonaalis, on PSD ja $ \ rho $ võib olla meelevaldselt suur (kuid muidugi alla $ 1 $).
@amoeba: siis eksisin, kui eeldasin, et suurte korrelatsioonimaatriksite diagonaal, kui neil lubatakse olla nii positiivseid kui ka negatiivseid, on hädavajalik, et null on lähedal 0. Täname valgustava näite eest.
Lugesin väga toredat artiklit juhuslike korrelatsioonimaatriksite genereerimise kohta ja esitasin siin oma vastuse (nagu ka teise vastuse selles lingis).Ma arvan, et see võib teile huvitav olla.
#3
+15
shabbychef
2010-09-17 05:14:46 UTC
view on stackexchange narkive permalink

Veelgi lihtsam iseloomustus on see, et tegeliku maatriksi $ A $ puhul on $ A ^ TA $ positiivne poolefinitne. Et teada saada, miks see nii on, tuleb ainult tõestada, et $ y ^ T (A ^ TA) y \ ge 0 $ kõigi vektorite $ y $ jaoks (muidugi õige suurusega). See on tühine: $ y ^ T (A ^ TA) y = (Ay) ^ T Ay = || Ay || $, mis pole negatiivne. Niisiis proovige Matlabis lihtsalt proovida

  A = randn (m, n); % siin n on lõpliku maatriksi soovitud suurus ja m > nX = A '* A;  

Sõltuvalt rakendusest ei pruugi see teile anda soovitud omaväärtuste jaotust; Kwaki vastus on selles osas palju parem. Selle koodilõigu abil genereeritud X omaväärtused peaksid järgima jaotust Marchenko-Pastur.

Varude korrelatsioonimaatriksite simuleerimiseks võiksite näiteks kasutada veidi teistsugust lähenemist:

  k = 7; % varjatud mõõtmetest; n = 100; % # aktsiatest; A = 0,01 * randn (k, n); % 'maandatav risk' D = diag (0,001 * randn (n, 1)); % 'idiosünkraatiline risk' X = A '* A + D; ascii_hist (eig (X)); % see on minu enda funktsioon, teete hist (eig (X)); - Inf < = x < -0.001: **************** (17) -0.001 < = x < 0,001: *********************************************** **** (53) 0,001 < = x < 0,002: ******************** (21) 0,002 < = x < 0,004: ** (2) 0,004 < = x < 0.005: (0) 0.005 < = x < 0.007: * (1) 0.007 < = x < 0.008: * (1) 0.008 < = x < 0.009: *** (3) 0.009 < = x < 0.011 : * (1) 0,011 < = x < Inf: * (1)  
kas oleksite nõus oma ascii_hist funktsiooni igal juhul jagama?
@btown on selle mahutamiseks liiga väike varu!
Rakenduses $ y ^ T (A ^ TA) y = (Ay) ^ T Ay = || Ay || $ on kirjaviga - sellel puudub viimane ruut!
#4
+8
J. M. is not a statistician
2010-09-17 17:12:34 UTC
view on stackexchange narkive permalink

Variandina kwaki vastusele: genereerige valitud jaotusest diagonaalmaatriks $ \ mathbf {D} $ juhuslike mittegatiivsete omaväärtustega ja seejärel tehke sarnasuse teisendus $ \ mathbf {A} = \ mathbf {Q} \ mathbf {D} \ mathbf {Q} ^ T $ koos $ \ mathbf {Q} $ a Haari poolt jaotatud pseudo-juhusliku ortogonaalse maatriksiga.

M.: Tore viide: see näib olevat kõige tõhusam lahendus (asümptootiliselt).
@whuber: Heh, ma korjasin selle Golubist ja Van Loanist (muidugi); Ma kasutan seda kogu aeg testmaatriksite loomiseks, et testida omaväärtuse / ainsuse väärtuse rutiinide testimist. Nagu paberist näha, on see sisuliselt samaväärne QR-lagundamisega juhuslik maatriks nagu kwak soovitas, välja arvatud see, et seda tehakse tõhusamalt. Selle MATLAB-i rakendamine on Highami tekstimatriiside tööriistakastis (BTW).
M.:> Täname matlabi rakendamise eest. Kas teaksite juhuslikult R-i Haari pseudo-juhusliku maatriksi generaatorit?
@kwak: Pole aimugi, kuid kui rakendust pole veel tehtud, ei tohiks MATLAB-koodi R-iks tõlkimine olla liiga raske (ma võin proovida ühe üles piitsutada, kui seda tegelikult pole); ainus eeldus on korralik generaator pseudorandom normaalsete variatsioonide jaoks, mis on kindel, et R-l on.
M.:> Jah, ma tõlgin selle tõenäoliselt ise. Täname linkide eest, parim.
#5
+4
Simon Byrne
2010-09-17 16:10:22 UTC
view on stackexchange narkive permalink

Te pole maatriksitele jaotust määranud. Kaks levinud on Wishart ja inverse Wishart jaotused. Bartletti lagunemine annab Cholesky faktoriseerimise juhuslikust Wisharti maatriksist (mida saab tõhusalt lahendada ka juhusliku pöördvõrdelise Wisharti maatriksi saamiseks).

Tegelikult on Cholesky-ruum mugav viis muud tüüpi juhuslike PSD-maatriksite genereerimiseks, kuna peate ainult tagama, et diagonaal ei oleks negatiivne.

> Pole juhuslik: kaks samalt Whishardilt loodud maatriksit ei ole üksteisest sõltumatud. Kui kavatsete muuta Whisharti igas põlvkonnas, siis kuidas kavatsete need Whishartid üldse luua?
@kwak: Ma ei saa teie küsimusest aru: Bartletti lagunemine annab sõltumatuid joonistusi samast Wisharti jaotusest.
> Lubage mul see ümber sõnastada, kust saate oma soovijaotuse skaalamaatriksi?
@kwak: on jaotuse parameeter ja nii on ka fikseeritud. Valite selle alguses, lähtudes oma jaotuse soovitavatest omadustest (näiteks keskmine).
#6
+3
gappy
2010-09-17 11:52:22 UTC
view on stackexchange narkive permalink

Lihtsaim meetod on ülaltoodud meetod, milleks on juhusliku andmekogumi simulatsioon ja grammi arvutamine. Ettevaatust: tekkiv maatriks ei ole ühtlaselt juhuslik, kuna selle lagunemise korral öeldakse, et $ U ^ TSU $ pöörlemisi ei jaotata vastavalt Haari mõõdule. Kui soovite, et PSD-maatriksid oleksid "ühtlaselt jaotatud", võite kasutada mis tahes kirjeldatud lähenemist siin.

Kui kirjed on genereeritud normaaljaotusest, mitte ühtsest, peaks teie mainitud lagunemine olema SO (n) muutumatu (ja seega võrdselt jaotatud võrreldes Haari mõõduga).
Huvitav. Kas saaksite sellele viidata?
> Selle meetodi probleem seisneb selles, et te ei saa kontrollida väikseima ja suurima omaväärtuse suhet (ja ma arvan, et kui teie juhuslikult loodud andmekogumi suurus läheb lõpmatusse, läheneb see suhe 1-le).
#7
+1
PeriRamm
2015-10-30 16:11:02 UTC
view on stackexchange narkive permalink

Kui soovite oma loodud sümmeetrilise PSD maatriksi üle rohkem kontrolli saada, nt. Sünteetilise valideerimise andmekogumi genereerimiseks on teil saadaval palju parameetreid. Sümmeetriline PSD maatriks vastab N-mõõtmelise ruumi hüperelipsile koos kõigi seotud vabadusastmetega:

  1. pöörded .
  2. Telgede pikkused.

Nii et kahemõõtmelise maatriksi (st 2d ellips) jaoks on teil 1 pöörlemine + 2 telge = 3 parameetrit.

Kui pöörded toovad meelde ortogonaalseid maatriksid, on see siiski õige rong, kuna konstruktsioon on jälle $ \ Sigma = ODO ^ T $, kusjuures $ \ Sigma $ on toodetud Sym.PSD maatriks, $ O $ pöörlemismaatriks (mis on ristkülikukujuline) ja $ D $ diagonaalmaatriks, mille diagonaalelemendid juhivad ellipsi telgede pikkust.

Järgmine Matlab kooditabelid 16 kahemõõtmelist Gaussi jaotatud andmekogumit, mis põhinevad $ \ Sigma $-l ja kasvava nurga all Parameetrite juhusliku genereerimise kood on kommentaarides.

  joonis; mu = [0,0]; i = 1: 16 alamplotil (4,4, i) theta = (i / 16) * 2 * pi; % teeta = rand * 2 * pi; U = [cos (teeta), -sin (teeta); patt (teeta) cos (teeta)]; % Diagonaali elemendid kontrollivad telgede pikkusi D = [10, 0; 0, 1]; % D = diag (rand (2,1)); sigma = U * D * U '; andmed = mvnrnd (mu, sigma, 1000); graafik (andmed (:, 1), andmed (:, 2), '+'); telg ([- 6 6 -6 6]); hoidke kinni; lõpp  

Rohkemate mõõtmete jaoks on diagonaalmaatriks sirgjooneline (nagu ülalpool) ja $ U $ peaks tulema pööramismaatriksite korrutamisest.

#8
  0
user1412
2010-09-24 14:19:31 UTC
view on stackexchange narkive permalink

Odav ja rõõmsameelne lähenemine, mida olen testimiseks kasutanud, on genereerida m N (0,1) n-vektorit V [k] ja seejärel kasutada P = d * I + Sum {V [k] * V [k ] '} nxn psd maatriksina. M < n korral on see d = 0 ainsuses ja väikeste d korral kõrge seisundinumber.

> Selle meetodi probleem seisneb selles, et te ei saa kontrollida väikseima ja suurima omaväärtuse suhet (ja ma arvan, et kui teie juhuslikult loodud andmekogumi suurus läheb lõpmatusse, läheneb see suhe 1-le).
> pealegi pole meetod eriti efektiivne (arvutuslikust seisukohast)
Teie "juhuslik maatriks" on spetsiaalselt struktureeritud, mida nimetatakse "diagonaalseks pluss auaste-1 maatriksiks" (DR1 maatriks), nii et see pole tegelikult hea esinduslik juhuslik maatriks.


See küsimus ja vastus tõlgiti automaatselt inglise keelest.Algne sisu on saadaval stackexchange-is, mida täname cc by-sa 2.0-litsentsi eest, mille all seda levitatakse.
Loading...