Re: Analisi delle componenti principali con Matlab

Messaggioda vexel » 16/04/2019, 01:19

Bokonon ha scritto:
vexel ha scritto:Ora che ci penso, quando ha parlato di quei prodotti tra vettori (servono per arrivare alla matrice varianza covarianza?) che ho descritto prima, ha parlato di "stimatore di varianza covarianza" e se non ricordo male, si suppone che con questo stimatore la media sia uguale a zero.

Beh ho appena scritto a proposito...e la risposta è SI...dal punto di vista statistico le nuove componenti (autovettori) sono completamente indipendenti (perchè vettori perpendicolari dal punto di visto dell'algebra lineare) quindi è analogo ad imporre il vincolo che le covarianze ra di essi siano pari a zero.

Ma per adesso esplora il lavoro che ti ho assegnato, poi ti sarà tutto chiaro :)


Perfetto, sei stato molto chiaro. Molte cose sono a me familiari, soprattutto l'ACP almeno in maniera teorica l'ho capita e l'ho rivista per bene di recente avendo fatto un capitolo nella tesi proprio su quest'ultima.

Per quanto riguarda il prodotto tra una matrice e la sua trasposta, ho capito il discorso sulla matrice quadrata simmetrica e se non ho capito male facendo così ottengo la matrice devianza codevianza di quel titolo (il problema è capire come si fa con matlab, domani proverò).
Per ottenere la matrice varianza covarianza di quel titolo, dovrei moltiplicare la matrice devianza codevianza per una matrice diagonale con elementi diagonali pari a 1/n, giusto? (almeno sui miei appunti è scritto così).

Ragionando un attimo la mia non è una matrice ma sono 14 vettori colonna e ognuno ha 522 elementi (cioè i rendimenti che sono stati scelti settimanalmente, perchè a me servono solo quelli), moltiplicando la "matrice" A di dimensioni n*1, per la sua trasposta di dimensioni 1*n, otterrò una matrice quadrata simmetrica di dimensioni n*n e non è altro che la matrice devianza codevianza di QUEL titolo, giusto?

Supponendo che sia come ho appena detto, avendo 14 titoli e per ogni titolo 522 osservazioni, otterrò alla fine 14 matrici devianza codevianza, dalle quali dovrò ricavare le matrici varianza covarianza, ma come faccio ad "unirle"?
vexel
Starting Member
Starting Member
 
Messaggio: 9 di 44
Iscritto il: 08/11/2015, 20:52

Re: Analisi delle componenti principali con Matlab

Messaggioda vexel » 16/04/2019, 12:29

Nel frattempo vi aggiorno un attimo che ho giocato un po' con Matlab.

Ho preso il titolo ENI, ho importato SOLO i rendimenti dicendo a Matlab di riconoscerlo come vettore colonna.
Tramite la funzione transpose, mi è venuto fuori il vettore riga, che moltiplicato a quello colonna ottengo la matrice devianza codevianza di dimensioni n*n.
Ora, con la funzione cov(nome matrice devianza codevianza) ottengo la matrice delle covarianze, anche se la professoressa non ha fatto riferimento a questo passaggio, quindi non so è necessario (aiuto).
Immagino che devo fare questo per tutti i 14 titoli, fare la somma tra matrici devianze codevianze o delle covarianza (questo ditemelo voi) ed essendo tutte di dimensioni uguali 522*522 posso fare tranquillamente la somma.
Una volta fatta la somma dovrei moltiplicarla per 252/T-1. 252 sono i giorni convenzionali di borsa in un anno, T-1 sono i rendimenti tranne l'ultimo quindi 521.
E poi da qui, dovrei aver costruito la mia matrice sulla quale applicare l'ACP.

Ditemi se ho capito qualcosina o se ho scritto solo eresie :roll:
vexel
Starting Member
Starting Member
 
Messaggio: 10 di 44
Iscritto il: 08/11/2015, 20:52

Re: Analisi delle componenti principali con Matlab

Messaggioda vexel » 16/04/2019, 15:37

vexel ha scritto:Ora, con la funzione cov(nome matrice devianza codevianza) ottengo la matrice delle covarianze


No, non è così. Dovrebbero cambiare di valore solo gli elementi diagonali, ma variano anche quelli extradiagonali :?
vexel
Starting Member
Starting Member
 
Messaggio: 11 di 44
Iscritto il: 08/11/2015, 20:52

Re: Analisi delle componenti principali con Matlab

Messaggioda Bokonon » 16/04/2019, 19:39

Ok, hai capito male un passaggio...il prodotto è fra matrici. Ho solo sottolineato cosa accade nel prodotto fra matrici, non ho detto che tu debba fra riga per colonna. Usa il prodotto matriciale.

Ricominciamo. Depura le colonne dalle rispettive medie e ottieni una matrice di 522x14, ovvero 522 righe e 14 colonne.
Poi fai il prodotto fra A^T*A e ottieni una matrice quadrata B simmetrica 14x14 delle devianze e codevianze.
Se moltiplichi l'intera matrice per 1/522 (uno scalare) allora equivarrà a dividere ogni singolo elemento per 522 e diventerà ancora una matrice C 14x14 delle varianze e covarianze. Con tre titoli $t_1$, $t_2$ e $t_3$ verrebbe fuori così:
$C= ( ( Var(t_1) , Cov(t_1,t_2) , Cov(t_1,t_3) ),( Cov(t_2,t_1) , Var(t_2) , Cov(t_2,t_3) ),( Cov(t_3,t_1) , Cov(t_3,t_2) , Var(t_3) ) ) $
Dove ovviamente $Cov(t_1,t_2)=Cov(t_2,t_1)$ etc, insomma deve essere simmetrica
Avatar utente
Bokonon
Cannot live without
Cannot live without
 
Messaggio: 1108 di 5942
Iscritto il: 25/05/2018, 20:22

Re: Analisi delle componenti principali con Matlab

Messaggioda vexel » 16/04/2019, 20:01

Bokonon ha scritto:Ok, hai capito male un passaggio...il prodotto è fra matrici. Ho solo sottolineato cosa accade nel prodotto fra matrici, non ho detto che tu debba fra riga per colonna. Usa il prodotto matriciale.

Ricominciamo. Depura le colonne dalle rispettive medie e ottieni una matrice di 522x14, ovvero 522 righe e 14 colonne.
Poi fai il prodotto fra A^T*A e ottieni una matrice quadrata B simmetrica 14x14 delle devianze e codevianze.
Se moltiplichi l'intera matrice per 1/522 (uno scalare) allora equivarrà a dividere ogni singolo elemento per 522 e diventerà ancora una matrice C 14x14 delle varianze e covarianze. Con tre titoli $t_1$, $t_2$ e $t_3$ verrebbe fuori così:
$C= ( ( Var(t_1) , Cov(t_1,t_2) , Cov(t_1,t_3) ),( Cov(t_2,t_1) , Var(t_2) , Cov(t_2,t_3) ),( Cov(t_3,t_1) , Cov(t_3,t_2) , Var(t_3) ) ) $
Dove ovviamente $Cov(t_1,t_2)=Cov(t_2,t_1)$ etc, insomma deve essere simmetrica


Ok, molto bene! Ci ero arrivato da solo, ma così ho avuto la conferma.
Ti spiego quello che ho fatto:

ho creato innanzitutto una matrice 522x14 (come hai detto anche tu) dove ho per colonne i 14 rendimenti dei titoli, le righe sono le date settimanali e per comodità chiamiamola A.
l'ho importata su Matlab, fatto la trasposta e ho fatto il prodotto tra A^T*A ottenendo una matrice 14x14 che rappresenta la matrice delle devianze codevianze.

Per arrivare alla matrice varianza covarianza ho fatto diversamente; ho creato una matrice diagonale 14x14 con elementi diagonali pari a 0.5 e l'ho moltiplicata per quella delle devianze codevianze, va bene comunque? almeno il mio professore così ci disse di fare se la memoria (e appunti) non mi inganna.

E comunque si, ho ottenuto una matrice proprio come quella che mi hai scritto :smt023

Ora, dovrei applicare l'ACP a questa matrice che mi è venuta fuori, stasera vedo bene il comando perchè ce ne sono diversi. Dovrò comunque prendere in considerazione autovalori, autovettori e variabilità spiegata.

La mia idea era quella di inserire il procedimento che ho fatto magari con qualche screenshot nella tesi e commentarli, insieme ai risultati.

Ti chiedo, come interpretare i numeri che verranno fuori per capire la "relazione" che intercorre tra i titoli/rendimenti?
vexel
Starting Member
Starting Member
 
Messaggio: 12 di 44
Iscritto il: 08/11/2015, 20:52

Re: Analisi delle componenti principali con Matlab

Messaggioda vexel » 16/04/2019, 20:05

E se puoi spiegarmi perchè dividere ogni elemento per 522? Non ho capito perchè è così, quindi molto probabilmente il mio moltiplicare per la matrice diagonale è sbagliato
vexel
Starting Member
Starting Member
 
Messaggio: 13 di 44
Iscritto il: 08/11/2015, 20:52

Re: Analisi delle componenti principali con Matlab

Messaggioda Bokonon » 16/04/2019, 20:38

Sei nella confusione più totale. E' strano perchè le materie le hai studiate, ti hanno dato una tesina da seguire e ti ho fornito anche un link ad un .pdf che evidenzia i passaggi.

Torniamo alle definizioni.
Matrice di devianze e codevianze moltiplicata per 1/n:
$1/n( ( Dev(t_1) , Codev(t_1,t_2) , Codev(t_1,t_3) ),( Codev(t_2,t_1) , Dev(t_2) , Codev(t_2,t_3) ),( Codev(t_3,t_1) , Codev(t_3,t_2) , Dev(t_3) ) ) = ( ( (Dev(t_1))/n , (Codev(t_1,t_2))/n , (Codev(t_1,t_3))/n ),( (Codev(t_2,t_1))/n , (Dev(t_2))/n , (Codev(t_2,t_3))/n ),( (Codev(t_3,t_1))/n , (Codev(t_3,t_2))/n , (Dev(t_3))/n ) )=( ( Var(t_1) , Cov(t_1,t_2) , Cov(t_1,t_3) ),( Cov(t_2,t_1) , Var(t_2) , Cov(t_2,t_3) ),( Cov(t_3,t_1) , Cov(t_3,t_2) , Var(t_3) ) ) $

La varianza non è semplicemente la devianza divisa per n? No? Insomma mi pareva un passaggio evidente...
Avatar utente
Bokonon
Cannot live without
Cannot live without
 
Messaggio: 1110 di 5942
Iscritto il: 25/05/2018, 20:22

Re: Analisi delle componenti principali con Matlab

Messaggioda vexel » 16/04/2019, 20:46

Mi ha confuso quella matrice diagonale trovata sugli appunti e dovrò consegnare tutto tra pochi giorni e la cosa non aiuta :cry:

Comunque tutto chiaro ora
vexel
Starting Member
Starting Member
 
Messaggio: 14 di 44
Iscritto il: 08/11/2015, 20:52

Re: Analisi delle componenti principali con Matlab

Messaggioda Bokonon » 16/04/2019, 20:58

Riguardo al resto...non ho capito cosa hai fatto.
Ho appena dato una scorsa alla tesina che mi hai mandato e ti dice chiaramente quali sono i primi passaggi.
Ovvero prendere i dati grezzi e calcolare i rendimenti e infine eliminare eventuali outliers.
Quando hai ottenuto la matrice dei rendimenti (522x14) calcoli la media della prima colonna e la sottrai da tutti i 522 valori.
E fai lo stesso per le successive 13 colonne (mi pareva chiaro questo passaggio, no?) ed ottieni la matrice A con tutti i rendimenti espressi rispetto al baricentro zero.

Adesso cambiamo strategia: dimentica tutto il resto! (perchè credimi non hai il tempo per comprendere appieno i passaggi successivi).
Carica la matrice A in matlab e chiedigli di decomportela a valori singolari https://it.mathworks.com/help/matlab/re ... e.svd.html

Ti verranno fuori tre matrici il cui prodotto restituisce la matrice iniziale A, ovvero $A=USV^T$

Magari la prima volta puoi esercitarti e scoprire come si usano le funzioni utilizzando solo le prime 50 righe di A.
Avatar utente
Bokonon
Cannot live without
Cannot live without
 
Messaggio: 1111 di 5942
Iscritto il: 25/05/2018, 20:22

Re: Analisi delle componenti principali con Matlab

Messaggioda vexel » 16/04/2019, 22:07

Bokonon ha scritto:Riguardo al resto...non ho capito cosa hai fatto.
Ho appena dato una scorsa alla tesina che mi hai mandato e ti dice chiaramente quali sono i primi passaggi.
Ovvero prendere i dati grezzi e calcolare i rendimenti e infine eliminare eventuali outliers.
Quando hai ottenuto la matrice dei rendimenti (522x14) calcoli la media della prima colonna e la sottrai da tutti i 522 valori.
E fai lo stesso per le successive 13 colonne (mi pareva chiaro questo passaggio, no?) ed ottieni la matrice A con tutti i rendimenti espressi rispetto al baricentro zero.


Riguardo questo passaggio, la prof non me lo ha proprio nominato, anzi ricordo che mi ha detto di considerare la media pari a 0, spero di vederla domani e chiarire se devo o meno fare questo passaggio.
In pratica, dovevo dare il comando per fare l'acp partendo dalla matrice varianza covarianza. Facendo così, ottengo anche la variabilità spiegata, le prime 4 componenti spiegano circa il 70% dell'informazione iniziale, riducendo quindi le componenti da 14 a 4.

Comunque ora faccio la decomposizione a valori singolari, ma a cosa vuoi arrivare facendo così?
vexel
Starting Member
Starting Member
 
Messaggio: 15 di 44
Iscritto il: 08/11/2015, 20:52

PrecedenteProssimo

Torna a Geometria e algebra lineare

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite