Re: Analisi delle componenti principali con Matlab

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

vexel ha scritto:anzi ricordo che mi ha detto di considerare la media pari a 0

Appunto.
3 persone hanno rispettivamente 1,2,3 euro. La media è 2 euro
Sottraggo la media da ciò che posseggono: -1,0,1 la media diventa zero
Basta spostare il baricentro e la ragione per cui farlo è data nel primo post che ho scritto.
Poi fai $B=1/nA^TA$ e hai matrice di varianza e covarianza.
Se vuoi fare tutti i passaggi per arrivare alla dcomposizione totale, allora carica la matrice B 14x14 in matlab e trova autovalori e autovettori (specificando che vuoi la matrice degli autovettori ortonormalizzata).

Parla con la prof.
Avatar utente
Bokonon
Cannot live without
Cannot live without
 
Messaggio: 1112 di 5942
Iscritto il: 25/05/2018, 20:22

Re: Analisi delle componenti principali con Matlab

Messaggioda vexel » 17/04/2019, 01:14

Bokonon ha scritto:
vexel ha scritto:anzi ricordo che mi ha detto di considerare la media pari a 0

Appunto.
3 persone hanno rispettivamente 1,2,3 euro. La media è 2 euro
Sottraggo la media da ciò che posseggono: -1,0,1 la media diventa zero
Basta spostare il baricentro e la ragione per cui farlo è data nel primo post che ho scritto.
Poi fai $B=1/nA^TA$ e hai matrice di varianza e covarianza.
Se vuoi fare tutti i passaggi per arrivare alla dcomposizione totale, allora carica la matrice B 14x14 in matlab e trova autovalori e autovettori (specificando che vuoi la matrice degli autovettori ortonormalizzata).

Parla con la prof.


Ho fatto mente locale, credo di averci capito qualcosa ora.
Ho calcolato le medie e centrato/depurato la matrice tramite excel, l'ho importata su Matlab e ho calcolato la matrice varianza covarianza.

Facendo la decomposizione della matrice che abbiamo chiamato B, ho gli stessi risultati inserendo il comando che mi ha suggerito la prof ovvero:

[C,L,X]=pcacov(B)
che dovrebbe essere questo:
https://it.mathworks.com/help/stats/pcacov.html

Quindi presumo sia lo stesso.
Con questo comando però ottengo anche gli autovalori, cioè la X e quindi la variabilità spiegata. Per la scelta delle dimensioni so che esistono vari criteri, ho deciso di utilizzare quello della variabilità cumulata e con le prime 4 componenti arrivo al 70% di informazione.

La C sono i coefficienti della componente principali, ma praticamente a cosa servono? A me interessano autovalori e autovettori, però toglimi questa curiosità
vexel
Starting Member
Starting Member
 
Messaggio: 16 di 44
Iscritto il: 08/11/2015, 20:52

Re: Analisi delle componenti principali con Matlab

Messaggioda Bokonon » 17/04/2019, 11:05

vexel ha scritto:Ho fatto mente locale, credo di averci capito qualcosa ora.
Ho calcolato le medie e centrato/depurato la matrice tramite excel, l'ho importata su Matlab e ho calcolato la matrice varianza covarianza.

Alleluja :-D

vexel ha scritto:Facendo la decomposizione della matrice che abbiamo chiamato B, ho gli stessi risultati inserendo il comando che mi ha suggerito la prof ovvero:

[C,L,X]=pcacov(B)
che dovrebbe essere questo:
https://it.mathworks.com/help/stats/pcacov.html

Quindi presumo sia lo stesso.
Con questo comando però ottengo anche gli autovalori, cioè la X e quindi la variabilità spiegata.

La decomposizione è quella a valori singolari, punto.
Guarda invece cosa hai fatto tu...te lo spiego con un po' di algebra matriciale.
$A=USV^T$
Dove A è la matrice rettangolare depurata dalle medie. U e V sono matrici ortogonali. S è la matrice diagonale dei valori singolari.
Ora calcolo B da questa decomposizione:
$B=1/nA^TA=1/n(USV^T)^TUSV^T=1/nVS^TU^TUSV^T=1/nVS^TSV^T=VDV^T$ (ovvero B diagonalizzata!)
Dove $D=1/nS^TS$ è la matrice diagonale degli autovalori associati alla matrice di varianza e covarianza B.
Se non dividevi per n, lavoravi con la matrice di devianza e codevianza, tutto qua.
Gli autovalori altro non sono che le varianze associate ai nuovi assi, ovvero gli autovettori...che a loro volta sono le colonne di V...ed ogni singola colonna sono i famosi coefficienti (su cui torniamo tra poco).
Inoltre adesso vedi chiaramente la relazione fra gli autovalori della matrice D (ovvero le varianze rispetto ai nuovi assi/colonne di V) e i valori singolari della matrice S: i valori singolari sono gli scarti quadrati medi, ovvero la radice degli autovalori/varianze. E personalmente penso che sia più corretto usare e valutare le variabilità nella scala originaria e non in quella quadratica.

Se vuoi provare l'emozione di ritrovare i medesimi valori che hai trovato usando il comando della prof., allora carica la matrice A (sempre quella depurata delle medie) e dividi tutti i suoi valori per 522 (insomma trova $1/nA=K$).
Poi scrivi $[U,S,V]=svd(K)$ e ti verrà fuori una matrice U 522x522 (ignorala per ora), la matrice V degli autovettori che sarà identica a quella che hai trovato con l'altro comando e infine la matrice S. Prendi la macchinetta e fai il quadrato dei valori diversi da zero che trovi in S e scoprirai che sono gli autovalori della B.

vexel ha scritto:Per la scelta delle dimensioni so che esistono vari criteri, ho deciso di utilizzare quello della variabilità cumulata e con le prime 4 componenti arrivo al 70% di informazione.

La C sono i coefficienti della componente principali, ma praticamente a cosa servono? A me interessano autovalori e autovettori, però toglimi questa curiosità

Sulla scelta fai quello che vuoi, tanto è un esercizio privo di reale significato statistico.
I coefficienti invece sono appunto le colonne di V, ovvero gli autovettori. E bada bene, quegli autovettori sono gli stessi sia che tu faccia la decomposizione totale o che tu faccia la diagonalizzazione della matrice di varianza e covarianza o infine della matrice di devianza e codevianza. Vengono fuori sempre quelli...perchè devono venire fuori sempre uguali. Per questo non capisco l'ossessione di dividere per 522...non cambia niente, se non che gli autovalori saranno devianze se diagonalizzi $A^TA$ oppure radici di queste medesime devianze se trovi S.

La vera differenza è che trovando gli autovettori dalla matrice che abbiamo chiamato B, non sai che fartene perchè B non è la matrice originaria (anche se col baricentro modificato) mentre nella decomposizione completa, ovvero quella a valori singolari vedi chiaramente a cosa serve.
Infatti $A=USV^T rArr AV=US$
Quindi gli autovettori sono i coefficienti delle combinazioni lineari delle colonne di A.
Tradotto, diciamo, per esempio, che A sia composta tre colonne $T_1$ $T_2$ $T_3$ corripondenti ai rendimenti di tre titoli.
La prima colonna di V è (v_1,v_2,v_3).
Quando moltiplico la matrice A per la prima colonna di V è equivalente a fare $v_1*T_1+v_2*T_2+v_3*T_3$ e sarà la mia prima componente principale, ovvero una combinazione lineare, ovvero una somma "pesata" dei "titoli" originari.
A per la seconda colonna mi darà la seconda combinazione lineare/componente principale. Etc etc.
Però non devo usare per forza tutte le colonne di V...infatti alcune (ovvero gli autovettori collegati agli autovalori più piccoli) posso decidere di "buttarle via". E quindi alla fine mi verranno fuori un numero di componenti principali inferiori al numero di titoli di partenza...e dovranno essere interpretate dato che sono "astratte" essendo appunto un mix dei titoli originari.
Per esempio, se una componente (che ho tenuto) è un mix, in cui i pesi più "grandi" sono associati alle colonne dei titoli (chessò) relati al petrolio e carburanti, allora la chiamerò "energia". E via così.
Avatar utente
Bokonon
Cannot live without
Cannot live without
 
Messaggio: 1114 di 5942
Iscritto il: 25/05/2018, 20:22

Re: Analisi delle componenti principali con Matlab

Messaggioda vexel » 17/04/2019, 19:11

Eccomi qua! Ho parlato con la prof, il lavoro che ho (abbiamo) fatto va bene. Mi ha detto che non era necessario centrare la matrice perchè la media è un valore talmente piccolo che è trascurabile, per questo mi aveva parlato dello stimatore varianza covarianza, praticamente con questo stimatore si stima che la media sia pari a zero. Le ho parlato della decomposizione a valori singolari, ma ha storto il naso e ignorato la cosa, quindi ho deciso di fare come dice lei per "accontentarla".

Un unica cosa sbagliata, la variabile che ho chiamato C (una matrice 14x14), non deve essere ortonormalizzata (ne avevi parlato anche prima). Per rendere i valori normali, devo calcolarne la somma per colonne e dividere ciascun elemento per la somma, ma non riesco a farlo con MatLab e Excel non mi riconosce i valori negativi.

Potresti dirmi come fare questa procedura? C'è un comando che me li trasforma da ortonormalizzati a normali?

Come definizione della C, la prof mi ha suggerito di usare questa: Cij(corretto) è la quota da investire nell’i-esimo titolo per ottenere un portafogli che replica la j-esima componente.

Ti lascio uno screen così capisci a cosa mi riferisco (anche se sei davvero molto preparato sull'argomento, ne sai più della mia prof, i miei complimenti)

Immagine

questa è la matrice ortonormalizzata, a me serve quella normale (valori corretti, così la chiama la prof) e poi il lavoro è terminato :-D
vexel
Starting Member
Starting Member
 
Messaggio: 17 di 44
Iscritto il: 08/11/2015, 20:52

Re: Analisi delle componenti principali con Matlab

Messaggioda vexel » 17/04/2019, 19:32

Sono riuscito a creare una matrice 1x14, dove le colonne sono le somme delle colonne della matrice C, ora basterebbe dividere ciascun elemento della matrice C per le rispettive colonne della nuova matrice, ma non so proprio come farlo.

Se c'è un comando che mi da fuori i valori "corretti", faccio prima.
vexel
Starting Member
Starting Member
 
Messaggio: 18 di 44
Iscritto il: 08/11/2015, 20:52

Re: Analisi delle componenti principali con Matlab

Messaggioda Bokonon » 17/04/2019, 21:48

vexel ha scritto:Eccomi qua! Ho parlato con la prof, il lavoro che ho (abbiamo) fatto va bene. Mi ha detto che non era necessario centrare la matrice perchè la media è un valore talmente piccolo che è trascurabile, per questo mi aveva parlato dello stimatore varianza covarianza, praticamente con questo stimatore si stima che la media sia pari a zero.

Aaaah ora capisco tutto.
Questo deve aver che vedere con la costruzione degli indici di rendimento e la il modello teorico che stai considerando.
Ovvero si suppone che la medie temporale dei rendimenti siano zero e quindi il campione casuale viene utilizzato per la stima delle varianze e covarianze sotto l'ipotesi di lavoro che le medie in popolazione siano pari a zero (e tutta la variaiblità sia dovuta alla volatilità!)
Molto interessante, questo spiega:
a) il senso di analizzare le serie storiche in questo modo...perchè gli indici sintetici sono costruiti in base ad un modello e quindi di ipotesi da sottoporre a test (incluse le medie regressive pari a zero).
b) perchè si voglia analizzare e diagonalizzare specificatamente la matrice delle varianze e covarianze...perchè sono stime!

In altre parole devi lavorare con la matrice A non centrata, punto. Mentre per il punto b ) ti ha detto che dovresti moltiplicare $1/(n-1)A^TA$ invece che per $1/n$? Oddio, la differenza è microscopica visto che n è piuttosto grandicello ma lo stimatore corretto è lo stimatore corretto!

vexel ha scritto:Un unica cosa sbagliata, la variabile che ho chiamato C (una matrice 14x14), non deve essere ortonormalizzata (ne avevi parlato anche prima). Per rendere i valori normali, devo calcolarne la somma per colonne e dividere ciascun elemento per la somma, ma non riesco a farlo con MatLab e Excel non mi riconosce i valori negativi.

Aspetta, stai confondendo i concetti
Facciamo chiarezza, la matrice degli autovettori va bene così com'è. Sono esattamente i coefficienti vincolati che cerchi.
Ti ha però chiesto di operare una ulteriore ri-normalizzazione delle colonne/coefficienti, in particolare (immagino) di quelle che hai deciso di tenere (ovvero gli autovettori associati agli autovalori più grandi).

Credo che con "rinormalizzarli" intenda avere le percentuali del contributo di ogni serie nella creazione della specifica componente principale. Immagino che lo scopo sia puramente espositivo, per evidenziare immediatamente quali titoli/serie contribuiscono di più alla creazione di una specifica componente.
Se è così, ti avrà detto come lo vuole, no?
Il problema è che non puoi fare il totale per colonna, poi dividere ogni elemento della colonna per il totale e infine moltiplicare per 100...perchè ci sono (e devono esserci) coefficienti negativi.
Francamente ci sono due strade:
1) valutare il contributo assoluto di ogni coefficiente al totale (quindi basta rendere tutti i valori positivi e solo dopo procedere alla ri-normalizzazione)
2) oppure quella più naturale è fare i quadrati di tutti gli elementi della matrice. Infatti la somma dei quadrati di ogni colonna è già pari a 1, quindi i quadrati sono le percentuali!

P.S. Dai però Vexel...
Ciò che devi fare è descritto alla fine del primo paragrafo del capitolo 2 (e le mie supposizioni erano corrette)
Se si considerano realmente le sole m<p colonne della matrice dei coefficienti della PCA non si parlerà più di componenti principali, ma di fattori.
La nuova matrice B è quindi detta matrice dei factor loading (coefficienti di saturazione) rappresentanti l’analisi fattoriale, mentre se letta per colonna esprime i coefficienti della combinazione lineare delle variabili per la determinazione delle componenti principali. Inoltre, se si elevano al quadrato i singoli coefficienti di saturazione si ottiene la variabilità spiegata da ogni fattore su ogni variabile.

Ma cristo santo leggi il materiale che ti danno!
Avatar utente
Bokonon
Cannot live without
Cannot live without
 
Messaggio: 1116 di 5942
Iscritto il: 25/05/2018, 20:22

Re: Analisi delle componenti principali con Matlab

Messaggioda vexel » 18/04/2019, 01:32

Bokonon ha scritto:Il problema è che non puoi fare il totale per colonna, poi dividere ogni elemento della colonna per il totale e infine moltiplicare per 100...perchè ci sono (e devono esserci) coefficienti negativi.
Francamente ci sono due strade:
1) valutare il contributo assoluto di ogni coefficiente al totale (quindi basta rendere tutti i valori positivi e solo dopo procedere alla ri-normalizzazione)
2) oppure quella più naturale è fare i quadrati di tutti gli elementi della matrice. Infatti la somma dei quadrati di ogni colonna è già pari a 1, quindi i quadrati sono le percentuali!

P.S. Dai però Vexel...
Ciò che devi fare è descritto alla fine del primo paragrafo del capitolo 2 (e le mie supposizioni erano corrette)
Se si considerano realmente le sole m<p colonne della matrice dei coefficienti della PCA non si parlerà più di componenti principali, ma di fattori.
La nuova matrice B è quindi detta matrice dei factor loading (coefficienti di saturazione) rappresentanti l’analisi fattoriale, mentre se letta per colonna esprime i coefficienti della combinazione lineare delle variabili per la determinazione delle componenti principali. Inoltre, se si elevano al quadrato i singoli coefficienti di saturazione si ottiene la variabilità spiegata da ogni fattore su ogni variabile.

Ma cristo santo leggi il materiale che ti danno!


La seconda strada me l'ha fatta usare solo per verificare se fossero ortonormalizzati o meno, e quindi verificare se la somma dei quadrati sia uguale a 1, questo fatto su Excel. Mi ha detto chiaramente che devo procedere dividendo ciascun elemento per il totale di colonna, probabilmente non avrà fatto caso caso al fatto che ci sono anche elementi negativi. insieme abbiamo fatto la prima colonna, quindi su questo non ho dubbi, poi procedendo da solo a casa per le altre colonne ho avuto il problema.

Questo è quello che abbiamo fatto insieme:


Immagine

Quello che vuole lei è nella colonna B, la colonna C sono i quadrati (seconda strada proposta) ma i risultati ovviamente sono diversi.

A questo punto direi che dovrei seguire la prima strada e considerare il contributo assoluto e quindi che tutti i valori siano positivi, tu che mi dici alla luce di ciò?

E comunque, l'elaborato ha ben 12 anni, l'ho letto, ma stesso la prof mi ha detto di non farci molto affidamento e di utilizzarlo solo come "scaletta",
se avessi saputo fare tutto senza aver mai fatto un lavoro del genere non avrei chiesto aiuto qui, non trovi? :?
vexel
Starting Member
Starting Member
 
Messaggio: 19 di 44
Iscritto il: 08/11/2015, 20:52

Re: Analisi delle componenti principali con Matlab

Messaggioda Bokonon » 18/04/2019, 06:06

vexel ha scritto:Mi ha detto chiaramente che devo procedere dividendo ciascun elemento per il totale di colonna, probabilmente non avrà fatto caso caso al fatto che ci sono anche elementi negativi. insieme abbiamo fatto la prima colonna, quindi su questo non ho dubbi, poi procedendo da solo a casa per le altre colonne ho avuto il problema.


Che non lo sappia è impossibile. Gli autovettori appartenenti ad autospazi diversi devono essere ortogonali. Quindi se una colonna è tutta positiva le altre come minimo devono avere un valore negativo. E' matematico.

Insomma, dall'esempio, mi pare proprio che tu debba seguire la prima strada. In fondo non importa il segno del contributo in se ma quanto incida percentualmente sul totale.
Avatar utente
Bokonon
Cannot live without
Cannot live without
 
Messaggio: 1117 di 5942
Iscritto il: 25/05/2018, 20:22

Re: Analisi delle componenti principali con Matlab

Messaggioda vexel » 18/04/2019, 12:58

Ho sentito la prof, mi ha detto che devo prendere in considerazione i segni negativi e quindi non i contributi assoluti.

Su Matlab non riesco a fare questa cosa, importando i dati su Excel non riconosce i valori negativi e dovrei mettere il segno negativo a mano. E' l'unica via quella di metterli a mano? :smt012
vexel
Starting Member
Starting Member
 
Messaggio: 20 di 44
Iscritto il: 08/11/2015, 20:52

Re: Analisi delle componenti principali con Matlab

Messaggioda vexel » 18/04/2019, 13:38

Ok, con un po' di fantasia sono riuscito a trovare una strada più breve esportando dal Matlab e riuscendo a far riconoscere a Excel i valori negativi.

Immagine

La somma delle colonna è pari a 1, quindi il procedimento è corretto.

Ho dei numeri parecchio grandi, ma credo sia normale.

Con questa matrice la prof vuole dire che sono le quote da investire nell'i-esimo titolo, per ottenere un portafogli (cioè l'insieme dei titoli analizzati) che replica la j-esima componente.

E' questa la conclusione alla quale voleva arrivare. Attendo da bokonon una conferma e posso dire di aver terminato (si spera)
vexel
Starting Member
Starting Member
 
Messaggio: 21 di 44
Iscritto il: 08/11/2015, 20:52

PrecedenteProssimo

Torna a Geometria e algebra lineare

Chi c’è in linea

Visitano il forum: Google [Bot] e 1 ospite