Analisi delle componenti principali con Matlab

Messaggioda vexel » 15/04/2019, 20:44

Ciao a tutti, devo inserire nella mia tesi di laurea in matematica finanziaria un'applicazione dell'analisi delle componenti principali. La tesi è incentrata principalmente sulle teoria di portafogli, mi è stato suggerito dalla professoressa di scaricare da yahoo finance, i dati storici di 14 titoli, calcolare i rendimenti (cosa ho fatto con excel) e fare l'ACP tramite Matlab trovando autovalori, autovettori e variabilità spiegata.

Non saprei però come procedere, l'ACP devo farla utilizzando i rendimenti, che se non ho capito male sono i vettori. La professoressa ha parlato di matrice, quindi dovrò costruire la mia matrice con i rendimenti. Come arco temporale ho scelto 10 anni e i rendimenti sono settimanali, avrò alla fine per ogni titolo 522 osservazioni.

Se potreste darmi qualche indicazione su come procedere ve ne sarei grato, sono giorni che cerco informazioni ma non ho trovato nulla che possa aiutarmi.

Non so se sia la sezione giusta, ma dato che si parla di matrici, autovalori e autovettori ho deciso di postarla qui.
Se avete bisogno di altre informazioni per capire meglio cercherò di essere più preciso.

Grazie in anticipo!
vexel
Starting Member
Starting Member
 
Messaggio: 4 di 44
Iscritto il: 08/11/2015, 20:52

Re: Analisi delle componenti principali con Matlab

Messaggioda Vidocq » 15/04/2019, 21:00

Il tuo miglior amico è il manuale.
Leggilo. :D

Vedi questo.
Nell'oscurità l'immaginazione lavora più attivamente che in piena luce. (Immanuel Kant)
Avatar utente
Vidocq
Average Member
Average Member
 
Messaggio: 68 di 560
Iscritto il: 25/03/2019, 20:39
Località: Trantor

Re: Analisi delle componenti principali con Matlab

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

Grazie, leggo tutto.

La cosa che mi lascia un po' perplesso, è cosa fare prima di iniziare l'ACP, perchè bene o male si tratta di dare un comando e fa tutto Matlab. La professoressa ha parlato di moltiplicazioni tra vettori (cioè i rendimenti), moltiplicare il primo vettore per se stesso, poi per il secondo, per il terzo, fino al quattordicesimo.

Moltiplicare il secondo vettore per se stesso, per il terzo e così via.

Non ho capito perchè bisogna fare questa cosa :/
vexel
Starting Member
Starting Member
 
Messaggio: 5 di 44
Iscritto il: 08/11/2015, 20:52

Re: Analisi delle componenti principali con Matlab

Messaggioda Bokonon » 15/04/2019, 21:32

Vexel sono un po' perplesso.
Posso chiederti prima alcune cose?
Avatar utente
Bokonon
Cannot live without
Cannot live without
 
Messaggio: 1104 di 5942
Iscritto il: 25/05/2018, 20:22

Re: Analisi delle componenti principali con Matlab

Messaggioda vexel » 15/04/2019, 21:36

Bokonon ha scritto:Vexel sono un po' perplesso.
Posso chiederti prima alcune cose?


Certo chiedi pure. Anzi, scusami se non sono stato per nulla preciso, ma ho avuto davvero poche informazioni dalla professoressa.
vexel
Starting Member
Starting Member
 
Messaggio: 6 di 44
Iscritto il: 08/11/2015, 20:52

Re: Analisi delle componenti principali con Matlab

Messaggioda Bokonon » 15/04/2019, 21:53

Voorrei solo capire quali sono le tue conoscenze, solo allora potrò consigliarti al meglio.
Hai studiato matematica...quanto ne sai di Algebra lineare? Conosci la decomposizione a valori singolari?
avrai studiato certamente anche statistica...ha problemi a comprendere i concetti varianza e covarianza fra variabili aleatorie? E se citassi la regressione multivariata e quindi la correlazione lineare saresti in grado di seguire?
Hai mai studiato l'analisi fattoriale?

Riguardo al tema dell'indagine...ok, si può fare tutto a questo mondo sapendo cosa si stia facendo e perchè e trarre comunque utili informazioni. Però mi pare di capire che l'analisi verta su vettori composti da serie storiche di rendimenti di diversi titoli (corregimi se ho capito male). Mentre riesco a dare un potenziale senso all'applicazione dell'analisi delle componenti principali, sono assai perplesso che questa possa essere la scelta migliore per l'analisi di serie storiche (ancorchè capisco che si voglia compararle fra rendimenti diversi). Come sai le serie storiche sono autocorrelate e in modo assai complesso. Quindi, ok, si può partire anche da un'analisi diretta dei dati grezzi per scaldarsi i muscoli ma poi se uno vuole fare un lavoro decente (e sottolineo decente) dovrebbe anche analizzare versioni alternative della matrice orignale in cui sgrezza i dati (in funzioni di ipotesi lavoro e modelli statistici selezionati dopo duro lavoro) e poi passare al vaglio anche matrici elaborate in questo modo.
Insomma, per farla breve, esattamente cosa ti ha detto la prof? Ti ha fornito un esempio dell'analisi (globale) che vuole condurre? Oppure la direzione è quella del "pigia bottone e gira macaco"? Nel senso che devi solo far vedere che sai inserire dei dati e programmare matlab e poi il resto conta poco?
Avatar utente
Bokonon
Cannot live without
Cannot live without
 
Messaggio: 1105 di 5942
Iscritto il: 25/05/2018, 20:22

Re: Analisi delle componenti principali con Matlab

Messaggioda vexel » 15/04/2019, 22:29

Bokonon ha scritto:Voorrei solo capire quali sono le tue conoscenze, solo allora potrò consigliarti al meglio.
Hai studiato matematica...quanto ne sai di Algebra lineare? Conosci la decomposizione a valori singolari?
avrai studiato certamente anche statistica...ha problemi a comprendere i concetti varianza e covarianza fra variabili aleatorie? E se citassi la regressione multivariata e quindi la correlazione lineare saresti in grado di seguire?
Hai mai studiato l'analisi fattoriale?

Riguardo al tema dell'indagine...ok, si può fare tutto a questo mondo sapendo cosa si stia facendo e perchè e trarre comunque utili informazioni. Però mi pare di capire che l'analisi verta su vettori composti da serie storiche di rendimenti di diversi titoli (corregimi se ho capito male). Mentre riesco a dare un potenziale senso all'applicazione dell'analisi delle componenti principali, sono assai perplesso che questa possa essere la scelta migliore per l'analisi di serie storiche (ancorchè capisco che si voglia compararle fra rendimenti diversi). Come sai le serie storiche sono autocorrelate e in modo assai complesso. Quindi, ok, si può partire anche da un'analisi diretta dei dati grezzi per scaldarsi i muscoli ma poi se uno vuole fare un lavoro decente (e sottolineo decente) dovrebbe anche analizzare versioni alternative della matrice orignale in cui sgrezza i dati (in funzioni di ipotesi lavoro e modelli statistici selezionati dopo duro lavoro) e poi passare al vaglio anche matrici elaborate in questo modo.
Insomma, per farla breve, esattamente cosa ti ha detto la prof? Ti ha fornito un esempio dell'analisi (globale) che vuole condurre? Oppure la direzione è quella del "pigia bottone e gira macaco"? Nel senso che devi solo far vedere che sai inserire dei dati e programmare matlab e poi il resto conta poco?


Provo a risponderti per punti.
Sto per terminare una triennale in economia, di matematica ho fatto un solo esame e di algebra lineare ci siamo concentrati principalmente sulle matrici, niente di più.

Statistica certo, tutto quello che mi hai nominato in linea di massima lo conosco, tranne la regressione multivariata. Abbiamo studiato solo la regressione collegata alla correlazione (indice di correlazione). Ho studiato anche (teoricamente) l'analisi fattoriale discriminante (immagino ti riferisci a questa, ce l'hanno fatta chiamare così), insieme alla cluster analysis, analisi delle corrispondenze e analisi delle componenti principali. Il tutto è stato fatto in modo teorico, senza applicazioni ed è anche il motivo per il quale mi sto trovando in difficoltà probabilmente.

Per l'indagine si, hai capito bene. Sono titoli diversi, tutti italiani e quotati in borsa. Arco temporale di 10 anni, dati settimanali e dal prezzo di chiusura ho calcolato il rendimento tramite excel con la funzione:

=ln(prezzo chiusura titolo t+1/prezzo chiusura titolo t), ti allego uno screen, così comprendi meglio:

Immagine

Io sono bloccato a questo punto, dovrei costruire la matrice varianza covarianza, che non so costruire, utilizzando i rendimenti che ho calcolato e fare l'ACP, credo.

Alcuni dei titoli che ho preso sono Ferrari, FCA, Enel, Eni, i più "conosciuti", diciamo così.
Effettivamente non ho capito neanche io il senso di utilizzare l'ACP, la tesi è concentrata principalmente sulla teoria di portafogli (Markowitz e Sharpe come "evoluzione"), la direzione direi che è più "pigia bottone e gira macaco" come dici tu.

La professoressa mi ha mostrato come esempio un'altra tesi, ma anche in questo caso sono stati selezionati dei titoli, calcolati i rendimenti ed è stata svolta un'ACP su questi rendimenti, calcolando autovalori, autovettori e variabilità spiegata, fine. Nessuna conclusione particolare, conclude dicendo che la variabilità spiegata è del tot%, ed è quello che mi ha chiesto di fare in sintesi.

Spero di essere stato più chiaro!
vexel
Starting Member
Starting Member
 
Messaggio: 7 di 44
Iscritto il: 08/11/2015, 20:52

Re: Analisi delle componenti principali con Matlab

Messaggioda vexel » 15/04/2019, 22:49

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.
vexel
Starting Member
Starting Member
 
Messaggio: 8 di 44
Iscritto il: 08/11/2015, 20:52

Re: Analisi delle componenti principali con Matlab

Messaggioda Bokonon » 15/04/2019, 23:25

Ottimo!
Fossero tutti chiari come te, sarebbe un mondo migliore.
Ok, allora mi pare che la direzione sia segnata...giusto il minimo per essere operativi...ma non significa che tu non debba leggere e anche molto. Ho selezionato (fra alcuni paper che ho trovato in rete) questo http://www-dimat.unipv.it/luca/words/PCAprint.pdf
Non perchè sia esaustivo (al contrario) ma perchè un'ottima scaletta da seguire Per comprendere la tecnica ACP devi andare in blibioteca e trovare un buon libro. Anche perchè la tecnica è meccanica (come tutte le tecniche) nel calcolo ma se poi non sai cosa sia il risultato e come leggerlo, non te ne farai nulla.
Inoltre visto che se ne è parlato recentemente, ti linko un thread in cui fornisco un'idea assai generale sull'argomento...leggilo giusto per passare il tempo.

Infine, per cominciare ad esplorare, ti dico il primo passaggio che devi fare, così inizi a mettere insieme le idee e rispolverare un poco di algebra lineare e statistica.
Immagina la tua matrice come un rilevazione di un campione. I diversi titoli sono i caratteri rilevati, i periodi sono le singole persone intervistate. Se vuoi cominciare da un esempio semplice createne uno o pescane uno per la rete, magari con tre variabili e un campione ridotto di intervistati...così potrai verificare anche manualmente tutti passaggi.
Quindi nella sostanza abbiamo una matrice con n righe e m colonne....dove n è molto più grande di m solitamente, dato che il numero di variabili/caratteri (in questo caso i vari titoli) sono in numero estremamente più piccolo rispetto al numero di soggetti rilevati (nel nostro caso i soggetti sono periodi temporali).
Abbiamo quindi una matrice non quadrata, di cui potremmo calcolare ad esempio le medie delle colonne (quindi per singola variabile) e le varianze sempre per colonne. E infine pure le covarianze fra colonne.
Se avrai deciso per l'esempio preso da internet, potrai farlo anche con una calcolatrice...ma ora facciamo entrare l'lagebra lineare :)
Se prendo una matrice non quadrata A, ne faccio la trasposta e la moltiplico per se stessa, ovvero $A^T*A$, si ottiene SEMPRE una matrice quadrata simmetrica (non giustificherò i concetti, dovrai rivederteli da solo, ok?).
Inoltre se noti, facendo la trasposta di una matrice, la prima colonna diventa la prima riga...ed andrà a moltiplicarsi con le colonne di A..e la prima riga di $A^T$ e la prima colonna di $A$ sono identiche. Quindi questo prodotto scalare fa semplicemente la somma dei quadrati quindi.
Ora immagina di aver calcolato la media della prima colonna di A e di aver sottratto quest'ultima da tutti gli elementi della colonna stessa, ottieni degli $x_i-M(x)$. Quindi quando moltiplichi la prima riga della trasposta per la prima colonna di A, non fai altro che sommare gli $[x_i-M(x)]^2$ ovvero il primo elemento della matrice simmetrica che otterrai è la devianza del primo titolo! E quando moltiplichi la prima riga delal trasposta per la seconda colonna ottieni la codevianza fra il primo titolo e il secondo e così via. Insomma, se prima depuri le colonne delle rispettive medie e fai il prodotto A^TA, ottiene una matrice quadrata la cui diagonale sono le devianze dei singoli titoli e gli elementi esterni sono le codevianze...e infatti dato che $codev(x,y)=codev(y,x)$ la matrice è simmetrica.
Insomma usando l'algebra lineare ci ricaviamo in questo modo la matrice di devianza e codevianza che avremmo potuto calcolare "a mano" ma lo faremo in modo rapido preciso e soprattuto con matlab.

Questo primo passaggio è fondamentale capirlo e vorrei che ti sincerassi che avvenga esattamente così, perchè è esattamente questo ciò che farai, ovvero decomporre la matrice della "variabilità e covariabilità" fra i titoli.
Buon lavoro per ora.
Quando avrai finito torna e andremo al passo successivo..ma vorrei che ti rinfrescassi anche qualcosa di algebra lineare del tipo "tutte le matrice simmetriche sono diagonalizzabili ed hanno autovalori reali ed è sempre possibile ottenere un set di autovettori che sono perpendicolari a due a due" (e anche oviamente cosa siano autovalori ed autovettori).

Poi possiamo passare alla decomposizione e al significato geometrico..e subito dopo a quello statistico.
Ultima modifica di Bokonon il 15/04/2019, 23:59, modificato 1 volta in totale.
Avatar utente
Bokonon
Cannot live without
Cannot live without
 
Messaggio: 1106 di 5942
Iscritto il: 25/05/2018, 20:22

Re: Analisi delle componenti principali con Matlab

Messaggioda Bokonon » 15/04/2019, 23:28

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 :)
Avatar utente
Bokonon
Cannot live without
Cannot live without
 
Messaggio: 1107 di 5942
Iscritto il: 25/05/2018, 20:22

Prossimo

Torna a Geometria e algebra lineare

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite