[vastaus aiempaan viestiin]
Kirjoittaja: | Seppo Mustonen |
---|---|
Sähköposti: | - |
Päiväys: | 10.9.2001 16:44 |
Markku Verkasalo kirjoitti 7.9.2001 14:05 : > Olen joskus kaivannut sellaista menettelyä, että voisin kääntää > ratkaisun tietyn muuttujan suuntaiseksi automaattisesti (oikeastaan > minulle tähän kävisi paremminkin muukin ratkaisu kuin graafinen > rotaatio, ... Olen vahvasti sitä mieltä, että uudessa ympäristössään Survon graafinen rotaatio on niin kätevä, että tuo Markun toivomus toteutuu jo sitäkin kautta. Jos kuitenkin haluaa tehdä rotaation suoraan "tietyn muuttujan suuntaiseksi automaattisesti", se onnistuu nähdäkseni Survon matriisi- tulkin avulla seuraavaan tyyliin: Käsittelen demoaineistona DECA-tiedostoa, jolle teen aluksi ML-ratkaisun seuraavasti: MASK=--AAAAAAAAAAAA- CORR DECA FACTA CORR.M,4 MAT LOAD FACT.M / tässä siis 4 faktorin ML-ratkaisu MATRIX FACT.M F /// F1 F2 F3 F4 100m 0.99722 0.02303 0.00256 -0.00287 L_jump 0.17487 -0.01897 -0.11994 0.49592 Shot_put -0.04315 0.68774 -0.38152 -0.17407 Hi_jump -0.41412 0.10537 -0.28331 0.13233 400m 0.46014 -0.17294 0.50638 0.10501 Hurdles 0.31221 0.25587 0.07904 0.48269 Discus -0.00011 0.66598 -0.49749 -0.09641 Pole_vlt 0.06352 -0.34282 -0.10161 0.01304 Javelin -0.21969 -0.05122 -0.18498 0.12408 1500m -0.28627 -0.36719 0.70688 -0.18529 Height -0.13298 0.96837 0.11897 0.01982 Weight -0.10260 0.88642 -0.15654 -0.09684 Jos nyt haluan kiertää faktoriakselistoa niin, että se kulkee muuttujan 1500m kautta, erotan matriisista FACT.M tätä muuttujaa koskevan rivin omaksi vektoriksi L: MAT L=FACT.M(1500m,*) MAT LOAD L MATRIX L FACT.M(1500m,*) /// F1 F2 F3 F4 1500m -0.28627 -0.36719 0.70688 -0.18529 ja "normalisoin" sen (alkioiden neliösummaksi 1) pystyvektoriksi V: MAT V=NRM(L') / *V~NRM(FACT.M(1500m,*)') 4*1 Otan rotaatiomatriisiksi T ensin puhtaan yksikkömatriisin MAT T=IDN(4,4) Koska muuttujalla 1500m on suurin lataus kolmannella faktorilla F3, sijoitetaan T:hen 3. pystyvektoriksi V: MAT T(1,3)=V T on seuraavanlainen: MAT LOAD T MATRIX T IDN&NRM(FACT.M(1500m,*)') /// 1 2 3 4 F1 1.00000 0.00000 -0.33038 0.00000 F2 0.00000 1.00000 -0.42377 0.00000 F3 0.00000 0.00000 0.81581 0.00000 F4 0.00000 0.00000 -0.21384 1.00000 Tämä T on ilmeisesti se mahdollisimman yksinkertainen "vino" rotaatio- matriisi, joka tuottaa toivotun tuloksen, sillä jos tehdään sen mukaan rotaatioratkaisu A alkuperäiselle matriisille FACT.M, MAT A=FACT.M*INV(T') / *A~F*IDN&NRM(FACT.M(1500m,*)')'' 12*4 MAT LOAD A MATRIX A F*INV(IDN&NRM(FACT.M(1500m,*)')') /// 1 2 3 4 100m 0.99826 0.02436 0.00313 -0.00220 L_jump 0.12630 -0.08127 -0.14701 0.46448 Shot_put -0.19766 0.48956 -0.46766 -0.27408 Hi_jump -0.52886 -0.04180 -0.34727 0.05807 400m 0.66521 0.09010 0.62071 0.23774 Hurdles 0.34422 0.29692 0.09688 0.50341 Discus -0.20158 0.40756 -0.60981 -0.22681 Pole_vlt 0.02238 -0.39560 -0.12455 -0.01360 Javelin -0.29460 -0.14731 -0.22675 0.07559 1500m 0.00000 0.00000 0.86648 0.00000 Height -0.08480 1.03017 0.14583 0.05101 Weight -0.16600 0.80510 -0.19189 -0.13788 1500m latautuu puhtaasti 3. faktorille. Vastaava toimenpide onnistuu käsivaraisesti graafisella rotaatiolla ROTATE FACT.M,4,CUR+1 / ROTATION=GRAPHICAL kun valitaan heti O=Oblique ja sitten 3:n sisältävät akseliparit 1-3, 2-3, 3-4, joissa kussakin (suoraan hiiren oikeanpuoleisella painikkeella) pannaan faktoriakseli kulkemaan muuttujan 1500m kautta. Ratkaisu on tällöin (pyöristysvirheitä lukuunottamatta) identtinen äskeisen kanssa. Kannattaa kokeilla (mukavimmin versiossa 1.09). - Seppo
Vastaukset: |
---|
Survo-keskustelupalstan (2001-2013) viestit arkistoitiin aika ajoin sukrolla, joka automaattisesti rakensi viesteistä (yli 1600 kpl) HTML-muotoisen sivukokonaisuuden. Vuoden 2013 alusta Survo-keskustelua on jatkettu entistäkin aktiivisemmin osoitteessa forum.survo.fi. Tervetuloa mukaan!