Statistica multivariata con R



Documenti analoghi
Il concetto di valore medio in generale

2.1 Definizione di applicazione lineare. Siano V e W due spazi vettoriali su R. Un applicazione

Relazioni statistiche: regressione e correlazione

4. Operazioni elementari per righe e colonne

Dimensione di uno Spazio vettoriale

LE FUNZIONI A DUE VARIABILI

VARIANZA CAMPIONARIA E DEVIAZIONE STANDARD. Si definisce scarto quadratico medio o deviazione standard la radice quadrata della varianza.

2 + (σ2 - ρσ 1 ) 2 > 0 [da -1 ρ 1] b = (σ ρσ1 σ 2 ) = (σ 1

LEZIONE 23. Esempio Si consideri la matrice (si veda l Esempio ) A =

Prova di autovalutazione Prof. Roberta Siciliano

Esempi di funzione. Scheda Tre

Parte 2. Determinante e matrice inversa

OCCUPATI SETTORE DI ATTIVITA' ECONOMICA

4 3 4 = 4 x x x 10 0 aaa

SISTEMI DI NUMERAZIONE E CODICI

LA TRASMISSIONE DELLE INFORMAZIONI QUARTA PARTE 1

GEOMETRIA DELLE MASSE

( x) ( x) 0. Equazioni irrazionali

La distribuzione Normale. La distribuzione Normale

ESEMPIO 1: eseguire il complemento a 10 di 765

Grandezze scalari e vettoriali

Parte 3. Rango e teorema di Rouché-Capelli

Analisi delle relazioni tra due caratteri

Diagonalizzazione di matrici e applicazioni lineari

APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI

CONTINUITÀ E DERIVABILITÀ Esercizi proposti. 1. Determinare lim M(sinx) (M(t) denota la mantissa di t)

Alessandro Pellegrini

ESTRAZIONE DI RADICE

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.

L espressione torna invece sempre vera (quindi la soluzione originale) se cambiamo contemporaneamente il verso: 1 < 0.

RICERCA OPERATIVA GRUPPO B prova scritta del 22 marzo 2007

Teoria in sintesi 10. Attività di sportello 1, 24 - Attività di sportello 2, 24 - Verifica conclusiva, 25. Teoria in sintesi 26

ANALISI DEI DATI PER IL MARKETING 2014

MATEMATICA DEL DISCRETO elementi di teoria dei grafi. anno acc. 2009/2010

FUNZIONI ELEMENTARI - ESERCIZI SVOLTI

Elementi di informatica

Fondamenti e didattica di Matematica Finanziaria

LA CORRELAZIONE LINEARE

Kangourou della Matematica 2014 finale nazionale italiana Mirabilandia, 12 maggio 2014

ESAME DI STATO DI LICEO SCIENTIFICO CORSO SPERIMENTALE P.N.I. 2004

1 Applicazioni Lineari tra Spazi Vettoriali

Dott.ssa Caterina Gurrieri

Algebra Lineare e Geometria

Per studio di funzione intendiamo un insieme di procedure che hanno lo scopo di analizzare le proprietà di una funzione f ( x) R R

Parte II Indice. Operazioni aritmetiche tra valori rappresentati in binario puro. Rappresentazione di numeri con segno

GIROSCOPIO. Scopo dell esperienza: Teoria fisica. Verificare la relazione: ω p = bmg/iω

CALCOLO COMBINATORIO

~ Copyright Ripetizionando - All rights reserved ~ STUDIO DI FUNZIONE

RETTE, PIANI, SFERE, CIRCONFERENZE

Funzioni in C. Violetta Lonati

DOMINIO E LIMITI. Esercizio 3 Studiare gli insiemi di livello della funzione f, nei seguenti casi: 1) f(x,y) = y2 x 2 + y 2.

Federico Lastaria. Analisi e Geometria 2. Matrici simmetriche. Il teorema spettrale. 1/24

Statistica. Alfonso Iodice D Enza iodicede@unina.it

USO DI EXCEL CLASSE PRIMAI

RICHIAMI SULLE MATRICI. Una matrice di m righe e n colonne è rappresentata come

LE SUCCESSIONI 1. COS E UNA SUCCESSIONE

Percorsi di matematica per il ripasso e il recupero

MINIMI QUADRATI. REGRESSIONE LINEARE

I sistemi di numerazione

1 Serie di Taylor di una funzione

MATRICI E DETERMINANTI

Corso di Matematica per la Chimica

Inserimento di distanze e di angoli nella carta di Gauss

Capitolo 25: Lo scambio nel mercato delle assicurazioni

Metodi statistici per le ricerche di mercato

Consorzio Nettuno - Corso di Matematica 1 Schede di lavoro guidato per le esercitazioni

Sistemi di Numerazione Binaria NB.1

1. PRIME PROPRIETÀ 2

La Programmazione Lineare

Capitolo 6. Soluzione degli esercizi a cura di Rosa Falotico

x 1 + x 2 3x 4 = 0 x1 + x 2 + x 3 = 0 x 1 + x 2 3x 4 = 0.

Regressione Mario Guarracino Data Mining a.a. 2010/2011

ESERCIZI SVOLTI PER LA PROVA DI STATISTICA

Ai fini economici i costi di un impresa sono distinti principalmente in due gruppi: costi fissi e costi variabili. Vale ovviamente la relazione:

LE FIBRE DI UNA APPLICAZIONE LINEARE

IL SISTEMA INFORMATIVO

STATISTICA IX lezione

Forze come grandezze vettoriali

Complemento al corso di Fondamenti di Informatica I corsi di laurea in ingegneria, settore dell informazione Università la Sapienza Consorzio Nettuno

Matematica e Statistica

Capitolo 13: L offerta dell impresa e il surplus del produttore

ANALISI DELLE FREQUENZE: IL TEST CHI 2

Esercizi svolti sui numeri complessi

Consideriamo due polinomi

Tecniche di analisi multivariata

Polli e conigli. problemi Piano cartesiano. Numeri e algoritmi Sistemi e loro. geometrica. Relazioni e funzioni Linguaggio naturale e

Introduzione al MATLAB c Parte 2

Metodologia per l analisi dei dati sperimentali L analisi di studi con variabili di risposta multiple: Regressione multipla

risulta (x) = 1 se x < 0.

Teoria dei Giochi. Anna Torre

LA MASSIMIZZAZIONE DEL PROFITTO ATTRAVERSO LA FISSAZIONE DEL PREZZO IN FUNZIONE DELLE QUANTITÀ

Capitolo 2 Distribuzioni di frequenza

ESERCIZI DI ALGEBRA LINEARE E GEOMETRIA

STUDIO DI UNA FUNZIONE

Le funzioni continue. A. Pisani Liceo Classico Dante Alighieri A.S A. Pisani, appunti di Matematica 1

Epoca k Rata Rk Capitale Ck interessi Ik residuo Dk Ek 0 S 0 1 C1 Ik=i*S Dk=S-C1. n 0 S

FUNZIONE REALE DI UNA VARIABILE

Esercizi su lineare indipendenza e generatori

f(x) = 1 x. Il dominio di questa funzione è il sottoinsieme proprio di R dato da

CURRICULUM SCUOLA PRIMARIA MATEMATICA

Transcript:

Statistica multivariata con R Sergio Polini 4 novembre 2009 Indice 1 Prime sintesi dei dati 2 1.1 Tabelle di contingenza...................................... 2 1.2 Matrici di percentuali...................................... 5 1.3 Matrice degli scarti........................................ 6 1.4 Matrice degli scarti standardizzati............................... 8 1.5 Matrice di codevianza...................................... 12 1.6 Matrice di covarianza....................................... 13 1.7 Matrice di correlazione...................................... 14 1.8 Varianza totale.......................................... 15 1.9 Varianza generalizzata di Wilks................................. 16 2 Analisi delle componenti principali 17 2.1 Il punto di vista geometrico................................... 17 2.1.1 Segnale e rumore..................................... 18 2.2 Variabili omogenee........................................ 20 2.2.1 La prima componente.................................. 20 2.2.2 Le componenti successive................................ 21 2.3 Variabili eterogenee........................................ 23 2.4 Scelta e valutazione delle componenti principali........................ 24 2.4.1 La matrice Factor Pattern................................ 24 2.4.2 Scelta delle componenti................................. 26 2.4.3 Valutazione delle variabili................................ 28 2.4.4 Valutazione delle unità statistiche........................... 30 2.4.5 Valutazione congiunta.................................. 31 2.4.6 Indici di contribuzione relativa............................. 32 2.5 L ACP con R........................................... 34 2.5.1 La funzione ACP().................................... 34 2.5.2 La funzione prcomp().................................. 36 2.5.3 La funzione princomp()................................. 37 3 Appendici 38 3.1 Notazioni di calcolo differenziale................................ 38 3.2 Scomposizione ai valori singolari................................ 40 3.2.1 Scomposizione di matrici standardizzate........................ 44 3.2.2 Scomposizione di matrici centrate........................... 47 3.3 Il codice delle funzioni ACP() e acp.*()............................ 49 3.3.1 La funzione ACP().................................... 49 3.3.2 La funzione acp.screeplot().............................. 51 3.3.3 La funzione acp.corrplot().............................. 51 3.3.4 La funzione acp.unitplot().............................. 51 1

1 Prime sintesi dei dati Data una matrice X n,k, contenente la rilevazione delle modalità di k caratteri su n unità statistiche, le prime sintesi consistono o nella costruzione di una tabella di contingenza, o nella costruzione di altre matrici contenenti trasformazioni dei dati. 1.1 Tabelle di contingenza Nel caso alcuni dei k caratteri siano qualitativi, si possono distinguere due casi: a) se le modalità di un carattere sono solo due, si attua la codifica binaria assegnando 0 ad una modalità è 1 all altra; b) se le modalità sono più di due, si attua la codifica disgiuntiva completa, che consiste nello scomporre il carattere in tanti caratteri con le due modalità sì/no, quindi 1/0, quante sono le modalità originarie; ad esempio: Regione N C C S N diventa: N ord Centro Sud 1 0 0 0 1 0 0 1 0 0 0 1 1 0 0 Può tuttavia convenire la codifica disgiuntiva completa anche nel caso di un carattere con due sole modalità, scomponendolo in due caratteri con modalità sì/no. Così facendo, infatti, si trattano nello stesso modo i caratteri con due o più di due modalità e, anche se aumenta il numero dei caratteri, si perviene facilmente ad una tabella di contingenza. Ad esempio, se si rilevano su n unità statistiche due caratteri qualitativi, il primo con due modalità ed il secondo con tre, con la codifica disgiuntiva completa si arriva a due matrici le cui colonne contengono solo 0 e 1: X 1 n,2 non è altro che il prodotto: X 1 X 2 = A 2,n n,3 2,3 Infatti, ipotizzando un caso in cui n sia pari a 5: X 1 5,2 1 0 1 0 = 0 1 1 0 0 1 e X 3 n,3 X 2 5,3. La relativa tabella di contingenza 1 0 0 0 0 1 = 0 1 0 0 0 1 0 1 0 Il prodotto X 1 X 2 è: 2,5 5,3 1 0 0 ( ) 1 1 0 1 0 0 0 1 0 1 0 = 0 0 1 0 1 0 0 1 0 1 0 ( 1 0 ) 2 0 2 0 2

cdc <- function(x, names=null) { if (!is.vector(x)) stop(" x deve essere un vettore") if (!is.factor(x)) x <- factor(x) n <- length(levels(x)) m <- NULL for (i in 1:n) { yes <- levels(x)[i] v <- as.numeric(x == yes) if (is.null(m)) { m <- v } else { m <- cbind(m,v) } } if (is.null(names)) { colnames(m) <- levels(x) } else { colnames(m) <- names } m } Figura 1. Funzione R per la codifica disgiuntiva completa di un carattere. Si vede che l elemento a 11 della matrice prodotto è 1 perché nell esecuzione del prodotto righe per colonne capita una sola volta che si abbia un risultato non nullo (solo i primi elementi della prima riga di X 1 e della prima colonna di X 2 sono entrambi pari a 1), l elemento a 12 è 0 perché non capita mai, l elemento a 1,3 è 2 perché capita due volte (il secondo ed il quarto elemento sia della prima riga di X 1 che della terza colonna di X 2). Gli elementi della matrice prodotto sono quindi frequenze congiunte. R calcola le tabelle di contingenza con la funzione table(), ma, se si volesse comunque procedere alla codifica disgiuntiva completa per i singoli caratteri, si potrebbe utilizzare una funzione cdc() come quella riportata nella figura 1 che, dato in input un carattere (un vector o un factor), restituisce una matrice le cui colonne, contenenti solo 0 e 1, sono le modalità del carattere. Il parametro opzionale names consente di attribuire espressamente nomi ai nuovi caratteri così ottenuti: > regioni <- c("n","c","c","s","n") > cdc(regioni) C N S [1,] 0 1 0 [2,] 1 0 0 [3,] 1 0 0 [4,] 0 0 1 3

[5,] 0 1 0 Esempio 1.1. Il comunicato ISTAT sulle forze di lavoro al 2 trimestre 2009 1 riporta, tra l altro, i dati destagionalizzati relativi alla ripartizione di occupati e persone in cerca di occupazione nel nord, nel centro e nel sud d Italia. I dati possono essere immessi in R come segue: > occupati <- factor(c(rep(1,11996),rep(0,612),rep(1,4853),rep(0,353), + rep(1,6318),rep(0,874))) > regioni <- factor(c(rep("n",12608),rep("c",5206),rep("s",7192))) Si assegnano così al vettore occupati, nell ordine, occupati (modalità 1) e persone in cerca di lavoro (modalità 0) nel nord, occupati e persone in cerca di lavoro nel centro, occupati e persone in cerca di lavoro nel sud; al vettore regioni le forze di lavoro, rispettivamente, del nord, del centro e del sud. La funzione table() consente di costruire subito una tabella di contingenza: > table(occupati, regioni) regioni occupati C N S 0 353 612 874 1 4853 11996 6318 Si può ottenere lo stesso risultato con la codifica disgiuntiva completa. Nel caso del carattere regioni, le colonne della matrice ottenuta con cdc() avranno come nomi le modalità ( C, N e S ); nel caso del carattere occupati, essendo le modalità 0/1, conviene assegnare espressamente i nomi di colonna, indicando come primo nome quello per la colonna relativa allo stato 0 (in questo caso si potrebbe usare D per disoccupato, ovvero persona in cerca di occupazione) e come secondo quello per l altra (in questo caso O per occupato): > X1 <- cdc(occupati, names=c("d","o")) > X2 <- cdc(regioni) La tabella di contingenza può ora essere ottenuta col prodotto: che in R si esegue con: > t(x1) %*% X2 C N S D 353 612 874 O 4853 11996 6318 X 1 X 2 = A 2,n n,3 2,3 (t(x1) rende la trasposta di X1, l operatore %*% esegue il prodotto righe per colonne di matrici). Va notato che si può procedere alla codifica disgiuntiva completa anche nel caso di dati quantitativi, dopo averli raggruppari in classi. In questo caso, una colonna verrà trasformata in tante colonne quante sono le classi. 1 http://www.istat.it/salastampa/comunicati/in_calendario/forzelav/20090922_00/. 4

1.2 Matrici di percentuali Le matrici di percentuali sono matrici in cui l originaria matrice dei dati X n,k viene trasformata sostituendo i suoi elementi x ij con percentuali rispetto ad un totale: a) matrice di percentuali sul totale, t P n,k : se le colonne sono omogenee (stesso carattere, stessa unità di misura), si sostituiscono i singoli dati con le loro percentuali sull ammontare totale del carattere: t p ij = x ij ni=1 kj=1 x ij 100 t P n,k = 100 ni=1 kj=1 x ij X n,k si tratta quindi di moltiplicare la matrice dei dati per la costante 100 ammontare totale in R, se X è la matrice dei dati, il comando sum(x) restituisce il totale dei suoi elementi, quindi è sufficiente: P.tot <- X / sum(x) * 100 b) matrici di percentuali per riga, r P n,k : se le colonne sono omogenee, come sopra, si sostituiscono i singoli dati con le loro percentuali sui totali di riga: r p ij = x ij kj=1 x ij 100 r P n,k = r D n,n X n,k 100 dove r D è una matrice diagonale n n avente come elementi non nulli gli n reciproci dei totali di riga; 2 infatti premoltiplicando una matrice per una matrice diagonale si ottiene una matrice in ciascuna riga della quale compaiono i prodotti dei corrispondenti elementi della stessa riga della matrice data per l unico elemento non nullo della stessa riga della matrice diagonale; in R le matrici diagonali si ottengono con la funzione diag() in vari modi, anche semplicemente passando il vettore degli elementi della diagonale principale, che in questo caso saranno i reciproci delle somme per riga della matrice dei dati: P.row <- ( diag(1/rowsums(x)) %*% X) * 100 c) matrici di percentuali per colonna, c P: i singoli dati vengono sostituiti con le loro n,k percentuali sui totali di colonna (non è quindi necessario che le colonne siano tra loro omogenee): c p ij = x ij ni=1 x ij 100 c P = 100 X cd n,k n,k k,k dove c D è una matrice diagonale k k avente come elementi non nulli i k reciproci dei totali di colonna; 3 infatti postmoltiplicando una matrice per una matrice diagonale si ottiene una matrice in ciascuna colonna della quale compaiono i prodotti dei corrispondenti elementi della stessa colonna della matrice data per l unico elemento non nullo della stessa colonna della matrice diagonale; in R: 2 Può essere anche intesa come l inversa di una matrice diagonale avente come elementi non nulli i totali di riga. 3 Può essere anche intesa come l inversa di una matrice diagonale avente come elementi non nulli i totali di colonna. 5

P.col <- (X %*% diag(1/colsums(x))) * 100 Esempio 1.2. Costruiamo una matrice X prendendo dalla contabilità nazionale i dati in milioni di euro relativi a produzione ai prezzi base, importazioni cif, imposte nette e margini distributivi (tre caratteri quantitativi omogenei) relativi alle unità statistiche costituite dai tre settori agricoltura, industria e servizi: 4 > Rpa <- matrix(c(47133, 990122, 1277232, 9258, 250474, 40804, + 23337, 324361, -220679), nrow=3) > rownames(rpa) <- c("agricoltura", "Industria", "Servizi") > colnames(rpa) <- c("produzione pb", "Import. cif", "Imposte e margini") > Rpa Produzione pb Import. cif Imposte e margini Agricoltura 47133 9258 23337 Industria 990122 250474 324361 Servizi 1277232 40804-220679 Per ricavare la matrice delle percentuali sull ammontare totale (che è il totale delle risorse ai prezzi di acquisto): > P.tot <- Rpa / sum(rpa) * 100 > P.tot Produzione pb Import. cif Imposte e margini Agricoltura 1.718901 0.3376316 0.851081 Industria 36.108929 9.1345793 11.829177 Servizi 46.579593 1.4880881-8.047980 1.3 Matrice degli scarti In una matrice degli scarti, S n,k, i dati della matrice dei dati vengono sostituiti con i loro scarti dalle medie di colonna: 5 s ij = x ij x j S = X 1 n x n,k n,k n,1 1,k dove 1 n è un vettore colonna contenente tutti 1 e x è un vettore riga contenente le medie di colonna; il loro prodotto è una matrice n k in cui la riga i-esima contiene le medie delle k colonne. Ad esempio: 1 x 1 x 2 x 3 1 ) x (x 1 1 x 2 x 3 = 1 x 2 x 3 x 1 x 2 x 3 1 x 1 x 2 x 3 Si deve notare che la matrice degli scarti opera una semplice traslazione: la nuvola dei punti di R k, vettori i cui componenti sono le modalità dei caratteri quantitativi, viene 4 http://www.istat.it/dati/dataset/20061023_00/nota_metodologica.pdf, Tabella 4.2, pag. 9; da notare che i totali non sembrano esatti (ci sono alcune differenze sull ultima cifra) in quanto i dati sono arrotondati. 5 Nel teso di Zani-Cerioli la matrice degli scarti è indicata con X. 6

spostata in modo che il suo baricentro coincida con l origine del sistema di coordinate, ma la variabilità rimane immutata. Con R si potrebbero facilmente costruire i vettori 1 n e x ed il prodotto 1 n x, ad esempio, se n è il numero di righe della matrice di dati X > u <- rep(1,n) > x.mean <- colmeans(x) > u %*% t(x-mean) ma si può usare anche la funzione sweep() che toglie valori (in inglese to sweep vuol dire spazzare via ) dalle righe o dalle colonne di matrice; il suo secondo argomento è 1 nel primo caso, 2 nel secondo. In particolare, se X è un dataframe la funzione mean() fornisce un vettore delle medie di colonna, se invece X è una matrice si usa colmeans(), che può peraltro essere usato anche con i dataframe. Quindi, per ottenere a X una matrice degli scarti dalla media: > x.mean <- colmeans(x) > sweep(x, 2, x.mean) Esempio 1.3. Il testo di Zani-Cerioli 6 contiene diverse matrici di dati. La tabella 1.1, a pag. 8, contiene la matrice dei dati relativi a 25 modelli di home theatre per i quali si sono rilevati sette caratteri; vi sono tre caratteri quantitativi: 1) PREZZO (in euro); 2) POTENZA (in watt); 3) CASSE (numero); e quattro caratteri qualitativi in codifica binaria: 4) DVDREC (presente la funzione recorder per i DVD); 5) WIRELESS (possibili collegamenti senza fili); 6) DVX (capacità di leggere i DVX); 7) RDS (presenza di Radio Data System). I dati si possono caricare in R come dataframe col comando: 7 > H <- read.csv("tab0101.csv", row.names=1) > H PREZZO POTENZA CASSE DVDREC WIREL DVX RDS Akai 4200 208 150 4 0 0 0 0 Hitachi K180 161 160 4 0 0 0 1... Sony RH7000 1550 1350 7 1 1 1 1 Yamaha YHT941 850 1000 8 1 1 1 1 Per ottenere la matrice degli scarti limitatamente alle prime tre colonne: 6 Sergio Zani e Andrea Cerioli, Analisi dei dati e data mining per le decisioni aziendali, Giuffré, Milano, 2007. 7 La tabella 1.1 può essere scaricata da http://web.mclink.it/mc1166/statisticamultivariata/ tab0101.csv. 7

> h.mean <- colmeans(h[,1:3]) > h.mean PREZZO POTENZA CASSE 493.92 636.40 5.68 > sweep(h[,1:3], 2, h.mean) PREZZO POTENZA CASSE Akai 4200-285.92-486.4-1.68 Hitachi K180-332.92-476.4-1.68... Sony RH7000 1056.08 713.6 1.32 Yamaha YHT941 356.08 363.6 2.32 1.4 Matrice degli scarti standardizzati In una matrice degli scarti standardizzati, Z n,k, ciascun dato è sostituito dal rapporto tra il suo scarto dalla media di colonna e lo scostamento quadratico medio di colonna: z ij = s ij σ j Z = S σd n,k n,k k,k dove S è la matrice degli scarti e σ D è una matrice diagonale k k i cui elementi non nulli sono i reciproci degli scostamenti quadratici medi di colonna. In R, se X è la matrice dei dati: > S <- sweep(x, 2, colmeans(x)) > D <- diag(1/sd(x)) > Z <- S %*% D Si deve notare che la matrice degli scarti standardizzati non opera una semplice traslazione dei dati, come la matrice degli scarti dalle medie di colonna, ma deforma la nuvola dei punti; diminuisce infatti la variabilità dei caratteri con σ > 1, aumenta quella dei caratteri con σ < 1. Esempio 1.4. Nell esempio 1.3 H è un dataframe; per usare il prodotto righe per colonne di matrici si può convertire H in matrice, oppure si può convertire la sola matrice degli scarti; limitandosi alle prime tre colonne (quelle relative ai caratteri quantitativi): > S <- as.matrix(sweep(h[,1:3], 2, colmeans(h[,1:3]))) > D <- diag(1/sd(h[,1:3])) > Z <- S %*% D > colnames(z) <- colnames(h[,1:3]) > Z PREZZO POTENZA CASSE Akai 4200-0.8376833364-1.41872915-1.4678228 Hitachi K180-0.9753831014-1.38956120-1.4678228... Sony RH7000 3.0940844218 2.08142500 1.1532894 Yamaha YHT941 1.0432368579 1.06054671 2.0269934 8

var2 <- function(x, def = NROW(x), w = NULL) { if (!is.vector(x)) stop(" x deve essere un vettore") if (is.null(w)) v <- sum((x-mean(x))^2) / def else { n <- length(x) if (length(w)!= n) stop(" x e w devono avere uguale lunghezza") if (any(w < 0) (s <- sum(w)) == 0) stop("i pesi devono essere non negativi e non tutti nulli") w <- w / s w.mean <- weighted.mean(x, w) v <- sum((x-w.mean)^2*w) } v } Figura 2. Funzione R per il calcolo della varianza con un prefissato numero di gradi di libertà oppure su dati ponderati. I risultati possono essere confrontati con quelli riportati dallo Zani-Cerioli nella tabella 1.4, a pag. 21. In R la funzione sd() ritorna la radice quadrata della varianza come calcolata con var(), la quale a sua volta ritorna la somma dei quadrati degli scarti dalla media divisa per n 1 (i gradi di libertà nel caso più frequente). A volte risulta necessario sia dividere per un diverso numero di gradi di libertà, sia usare gli scarti da medie ponderate; può quindi essere opportuno definire funzioni più generali. La funzione var2() (figura 2) calcola la varianza di un vettore di dati; per default, calcola la somma dei quadrati degli scarti dalla media aritmetica divisa per n, ma si può dividere per il numero di gradi di libertà che interessa usando il parametro def (degrees of freedom). Si può anche indicare un vettore di pesi e, in questo caso, si procede in modo diverso. La varianza usata nella statistica descrittiva è definita da: Var(x) = n i=1 1 n (x i x) 2 Si calcola quindi la somma dei quadrati degli scarti dalla media aritmetica e ogni quadrato è diviso per n, cioè moltiplicato per il peso 1/n, uguale per tutti. La somma degli n pesi è ovviamente uguale ad 1. Usando un vettore di pesi la cui somma sia sempre 1, si ottiene: n Var(x, p) = (x i x) 2 p i i=1 dove p i è il peso, compreso tra 0 e 1, dell elemento x i. 9

sd2 <- function(x, def = NROW(x), w = NULL) { if (is.matrix(x)) apply(x, 2, sd2, def = def, w = w) else if (is.vector(x)) sqrt(var2(x, def = def, w = w)) else if (is.data.frame(x)) sapply(x, sd2, def = def, w = w) else sqrt(var2(as.vector(x), def = def, w = w)) } Figura 3. Funzione R per il calcolo dello scarto quadratico medio con un prefissato numero di gradi di libertà oppure su dati ponderati. Usando la funzione var2() si può passare un vettore di pesi non normalizzati; in questo caso, i pesi vengono automaticamente divisi per il loro totale. È solo necessario che i pesi siano non negativi e non tutti nulli. Da notare che la funzione var() di R opera anche su matrici, restituendo in tal caso la matrice di covarianza, mentre var2() opera solo su vettori (per la matrice di covarianza v. sez. 1.6). La funzione sd2() (figura 3) è modellata sulla sd() di R: 8 usa la funzione per il calcolo della varianza, ma può essere usata su matrici o dataframe e, in questi casi, fornisce un vettore degli scarti di colonna. Esempio 1.5. La tabella 1.5 dello Zani-Cerioli contiene alcuni dati e indicatori economici relativi a 14 settori industriali. Negli esempi del testo viene eliminata la sesta riga, relativa alle raffinerie, per i motivi spiegati a pag. 24; possiamo quindi procedere così: 9 > X <- read.csv("tab0105.csv", row.names=1) > X <- X[c(1:5,7:14),] I caratteri rilevati sono: 1) addetti: numero di imprenditori, coadiuvanti e dipendenti; 2) fatturato: il fatturato in milioni di euro; 3) valoreagg: il valore aggiunto in milioni di euro; 4) vafatt: percentale del valore aggiunto sul fatturato; 5) vaad: il valore aggiunto per addetto in migliaia di euro; 6) coslav: il costo del lavoro per dipendente in migliaia di euro; 7) retrib: la retribuzione lorda per dipendente in migliaia di euro; 8) invest: gli investimenti per addetto in migliaia di euro. Possiamo ottenere le medie degli indicatori (i caratteri dal 4 all 8 ) con: 8 Per vedere il sorgente di una funzione di R basta digitarne il nome non seguito da parentesi e dare invio. 9 La tabella è scaricabile da http://web.mclink.it/mc1166/statisticamultivariata/tab0105.csv. 10

> mean(x[,4:8]) vafatt vaad coslav retrib invest 24.380769 51.709231 33.107692 23.184615 8.853846 ma anche le medie ponderate con gli addetti o con il valore aggiunto, ricorrendo alla funzione sapply(): > sapply(x[,4:8], weighted.mean, w = X$addetti) vafatt vaad coslav retrib invest 24.704954 51.633420 33.676108 23.601335 8.708432 > sapply(x[,4:8], weighted.mean, w = X$valoreagg) vafatt vaad coslav retrib invest 24.80763 54.09997 34.69300 24.28657 9.18093 Possiamo inoltre ottenere gli scarti quadratici medi campionari, usando sd(): > sd(x[,4:8]) vafatt vaad coslav retrib invest 4.699299 13.367603 6.370696 4.335290 3.096400 ma anche quelli dei dati ponderati con gli addetti o con il valore aggiunto: > sd2(x[,4:8], w = X$addetti) vafatt vaad coslav retrib invest 4.384831 11.286180 5.398172 3.672183 2.876614 > sd2(x[,4:8], w = X$valoreagg) vafatt vaad coslav retrib invest 4.472512 12.200567 5.698934 3.865408 2.937981 I risultati così ottenuti possono essere confrontati con quelli riportati nella tabella 1.6 dello Zani-Cerioli (pag. 26); non sono esattamente uguali per i primi due indicatori (vafatt e vaad) perché i dati riportati nella tabella 1.5 del testo sono arrotondati. La funzione sd2() può essere usata per ottenere una matrice degli scarti standardizzati in cui gli scarti siano calcolati dividendo per n invece che per n 1. Esempio 1.6. Tornando ai dati relativi a 25 modelli di home theatre (esempi 1.3 e 1.4): > S <- sweep(h[,1:3], 2, colmeans(h[,1:3])) > D <- diag(1/sd2(h[,1:3])) > Z <- as.matrix(s) %*% D > colnames(z) <- colnames(h[,1:3]) > Z PREZZO POTENZA CASSE Akai 4200-0.8549569751-1.44798437-1.4980904 Hitachi K180-0.9954962092-1.41821496-1.4980904... Sony RH7000 3.1578866893 2.12434549 1.1770710 Yamaha YHT941 1.0647491595 1.08241595 2.0687915 11

Si può notare che i dati differiscono da quelli ottenuti nell esempio 1.4 di un fattore 1 / 1 25 =, che rappresenta la differenza tra la divisione della varianza prima per 24 25 24 n = 25, poi per n 1 = 24; ad esempio, il valore standardizzato del prezzo dell Akai 4200 era 0.83768, ora è 0.85496 e si ha: 25 0.85496 = 0.83768 24 1.5 Matrice di codevianza La matrice di codevianza, T k,k, detta anche matrice di devianza-codevianza, è una matrice quadrata simmetrica che ha sulla diagonale principale la devianza di ciascuna colonna della matrice dei dati e altrove la codevianza tra la i-esima e la j-esima colonna. Poiché la devianza non è altro che la somma dei quadrati degli scarti dalla media, mentre la codevianza non è altro che la somma dei prodotti degli scarti di due variabili dalle rispettive medie: Cod(X i, X j ) = Dev(X i ) = Cod(X i, X i ) = n (x hi x i )(x hj x j ) = nσ ij h=1 n h=1 (x hi x i ) 2 = nσ 2 i La matrice di codevianza si ottiene dalla matrice degli scarti: t ij = Cod(x i, x j ) T k,k = S k,n S n,k Con R, se X è una matrice di dati: > S <- sweep(x, 2, colmeans(x) > T <- t(s) %*% S Dato che la devianza è sempre non negativa (è un quadrato), la matrice T come anche le matrici di covarianza e di correlazione è quadrata, simmetrica, con elementi tutti non negativi sulla diagonale principale ed inoltre semidefinita positiva. Esempio 1.7. Usando ancora il dataframe H dei 25 modelli di home theatre: > S <- as.matrix(sweep(h[,1:3], 2, colmeans(h[,1:3]))) > T <- t(s) %*% S > T PREZZO POTENZA CASSE PREZZO 2796021.84 2268072.8 6656.36 POTENZA 2268072.80 2820976.0 6521.20 CASSE 6656.36 6521.2 31.44 12

varcov <- function(x, def = nrow(x), w = rep(1/nrow(x), nrow(x)), center = TRUE) { m <- cov.wt(x, wt = w, center = center) m <- m$cov m * (nrow(x)-1) / def } Figura 4. Funzione R per il calcolo della matrice di covarianza con il desiderato numero di gradi di libertà ed eventualmente su dati ponderati. 1.6 Matrice di covarianza La matrice di covarianza, Σ k,k, detta anche matrice di varianza-covarianza, si ottiene semplicemente dividendo per n, o per n 1, la matrice di codevianza; ad esempio, dividendo per n: Σ = 1 k,k n T = 1 k,k n S S k,n n,k Dividere per n equivale ad assegnare a tutte le unità statistiche un peso pari a 1 n e poi dividere per la somma dei pesi. Capita spesso, in realtà, di assegnare pesi diversi alle unità statistiche; in questi casi, la matrice di covarianza si ottiene con: Σ = S P S k,k k,n n,nn,k dove P n,n è una matrice diagonale contenente i pesi (la cui somma deve essere pari a 1). In R le funzioni var() e cov(), quando si passa loro una matrice o un dataframe, restituiscono entrambe la matrice di covarianza, dividendo per n 1 la matrice di devianza. Esiste inoltre una funzione cov.wt() che fornisce una matrice di covarianza ponderata, in cui si divide comunque per n 1; i pesi sono, per default, pari a 1/n. La funzione cov.wt() consente anche di ottenere una matrice di covarianza centrata; si può infatti usare il parametro center: a) se center = TRUE (default), i dati sono centrati sulla loro media (ponderata, se si passano anche i pesi); b) se center = FALSE, i dati sono centrati sullo 0; c) se center è un vettore (che deve essere di lunghezza uguale al numero delle colonne della matrice o del dataframe), i dati di ciascuna colonna sono centrati sul corrispondente valore del vettore. Esempio 1.8. Usando ancora i dati dei 25 modelli di home theatre (v. esempio 1.3), la matrice di covarianza tra prezzo e potenza in watt può essere ottenuta con: > n <- nrow(h) > varcov(h[,1:2], def = n-1) PREZZO POTENZA PREZZO 116500.91 94503.03 POTENZA 94503.03 117540.67 13

se si desidera una matrice calcolata su n 1 gradi di libertà, 10 oppure, se si preferiscono n gradi di libertà, con: > varcov(h[,1:2]) PREZZO POTENZA PREZZO 111840.87 90722.91 POTENZA 90722.91 112839.04 Si verifica subito che i valori ottenuti in quest ultimo modo sono uguali a quelli ottenuti con def = n-1 (ri)moltiplicati per n 1 e divisi per n: 1.7 Matrice di correlazione 116500.91 24/25 = 111840.87 La matrice di correlazione, R k,k, è una matrice quadrata simmetrica che ha sulla diagonale principale tutti 1 (coefficienti di correlazione delle colonne con se stesse) e altrove i coefficienti di correlazione tra la i-esima e la j-esima colonna della matrice dei dati. Si può ottenere in due modi: a) dividendo ciascun elemento a ij della matrice di covarianza per σ i σ j : R k,k = σ D k,k Σ k,k σ D k,k dove σ D è una matrice diagonale con i reciproci degli scarti quadratici medi delle colonne della matrice dei dati; b) calcolando la matrice di covarianza a partire dalla matrice degli scarti standardizzati: Quindi: R = 1 σ D S S σ D = 1 k,n k,k n k,k k,n n,k k,k n Z Z n,k S σ D 1 n S S X Σ σ D Σ σ D Z R 1 n Z Z In R si può ottenere la matrice di correlazione con la funzione cor(), ma anche con cov.wt(..., cor = TRUE). La funzione cov.wt() non restituisce infatti un unico valore, ma una lista contenente la matrice di covarianza $cov, i centri delle colonne $center, il numero delle unità statistiche $n.obs ed anche, se cor = TRUE, la matrice di correlazione $cor. Si può quindi pensare ad una semplice funzione cor2() (figura 5) che chiami cov.wt() per poter ponderare i dati, ma poi restituisca solo la matrice di correlazione. Esempio 1.9. Usando i dati relativi a 13 settori industriali dell esempio 1.5, si possono calcolare come segue le matrici di correlazione dei dati semplici oppure ponderati con gli addetti o con il valore aggiunto: 11 10 Cfr. la tabella 2.1 dello Zani-Cerioli, pag. 42. 11 I risultati possono essere confrontati con la tabella 2.3 dello Zani-Cerioli, pag. 44. Vi sono alcune differenze perché i dati della tabella 1.5 del testo sono arrotondati. 14

cor2 <- function(x, w = rep(1/nrow(x), nrow(x)), center = TRUE) { m <- cov.wt(x, wt = w, center = center, cor = TRUE) m <- m$cor m } Figura 5. Funzione R per il calcolo della matrice di correlazione di dati eventualmente ponderati. > cor2(x[,4:8]) vafatt vaad coslav retrib invest vafatt 1.00000000 0.2019419 0.07608252 0.0900307 0.06212935 vaad 0.20194191 1.0000000 0.89479022 0.8890319 0.83229265 coslav 0.07608252 0.8947902 1.00000000 0.9987500 0.71653613 retrib 0.09003069 0.8890319 0.99875000 1.0000000 0.69230786 invest 0.06212935 0.8322927 0.71653613 0.6923079 1.00000000 > cor2(x[,4:8], w = X$addetti) vafatt vaad coslav retrib invest vafatt 1.00000000 0.1072291 0.02333675 0.04937572-0.1431557 vaad 0.10722908 1.0000000 0.86195992 0.85383634 0.7516174 coslav 0.02333675 0.8619599 1.00000000 0.99850368 0.6098425 retrib 0.04937572 0.8538363 0.99850368 1.00000000 0.5790223 invest -0.14315567 0.7516174 0.60984250 0.57902231 1.0000000 > cor2(x[,4:8], w = X$valoreagg) vafatt vaad coslav retrib invest vafatt 1.00000000 0.02333801-0.03613936-0.01220218-0.1806461 vaad 0.02333801 1.00000000 0.88095141 0.87180876 0.7733417 coslav -0.03613936 0.88095141 1.00000000 0.99864895 0.6147559 retrib -0.01220218 0.87180876 0.99864895 1.00000000 0.5850351 invest -0.18064606 0.77334165 0.61475589 0.58503507 1.0000000 1.8 Varianza totale La varianza totale, Var T, non è altro che la somma delle varianze delle colonne della matrice dei dati, quindi la traccia della matrice di covarianza: Da notare che: Var T = tr(σ) a) ha senso solo se le colonne interessate sono espresse nella stessa unità di misura; b) tiene conto solo della variabilità univariata. In R esiste una funzione trace(), che però ha tutt altro scopo (v. la relativa pagina della guida). Calcolare la traccia di una matrice X è sostanzialmente semplice, in quanto basta sommare gli elementi che hanno l indice di riga, row(x), e quello di colonna, col(x), uguali: > sum(x[row(x)==col(x)] 15

totvar <- function(x, def = nrow(x), w = rep(1/nrow(x), nrow(x)), center = TRUE) { if (sum(t(x) == x) == length(x)) # simmetrica t <- sum(x[row(x)==col(x)]) else { m <- varcov(x, def = def, w = w, center = center) t <- sum(m[row(m)==col(m)]) } t } Figura 6. Funzione R per il calcolo della varianza totale. Si può comunque pensare ad una funzione totvar() (figura 6) che calcoli la traccia di una matrice di covarianza sia a partire da questa, se disponibile, sia a partire da una matrice di dati o da un dataframe. Per distinguere tra i due casi, la funzione assume che la matrice passata sia una matrice di covarianza se risulta simmetrica. Esempio 1.10. Nell esempio 1.8 avevamo calcolato la matrice di covarianza tra prezzo e potenza dei 25 modelli di home theatre prima con n 1 poi con n gradi di libertà. Per calcolare le rispettive varianze totali, usando prima la matrice di covarianza, poi il dataframe: > M <- varcov(h[,1:2], def = 24) > totvar(m) [1] 234041.6 > totvar(h[,1:2]) [1] 224679.9 1.9 Varianza generalizzata di Wilks La varianza generalizzata di Wilks è una misura di variabilità multidimensionale che tiene conto di tutti gli elementi della matrice di convarianza, in quanto ne è il determinante: Var G = Σ In valore assoluto la varianza generalizzata varia da 0 (almeno una variabile è perfettamente correlata con un altra) ad un massimo pari al prodotto delle varianze delle k colonne. Si dimostra, inoltre, che il rapporto tra la varianza generalizzata ed il suo massimo è uguale al determinante della matrice di correlazione. Si può quindi definire una varianza generalizzata relativa: Da notare che: V R = Σ kj=1 σ 2 j = R a) il determinante tende a diminuire all aumentare di k, quindi si possono confrontare le varianze generalizzate (assolute o relative) di diverse matrici di dati solo se queste presentano lo stesso numero di caratteri; 16

b) la matrice di correlazione contiene solo le correlazioni a coppie; pertanto, non consente di individuare né di escludere relazioni lineari del tipo X 1 = ax 2 + bx 3. In R il determinante di una matrice si calcola col comando det(), quindi: > M <- varcov(h[,1:2], def = 24) > det(m) # varianza generalizzata [1] 4762771319 > R <- cor2(h[,1:2]) > det(r) # varianza generalizzata relativa [1] 0.3478102 2 Analisi delle componenti principali L analisi delle componenti principali (ACP; in inglese PCA, Principal Components Analysis) consente di sostituire ad una matrice di dati X n,k, contenente k variabili quantitative, una nuova matrice Y n,p contenente p k variabili tra loro incorrelate (ortogonali) ed elencate in ordine decrescente di variabilità. 2.1 Il punto di vista geometrico Obiettivo dell ACP è l individuazione di un sottospazio su cui sia possibile proiettare lo spazio delle osservazioni in modo da mantenerne quanto più possibile la variabilità. Per intendere cosa ciò vuol dire, si può immaginare di disporre dei valori di 2 variabili quantitative osservati su n unità statistiche: se non c è correlazione tra le due variabili, il relativo scatter plot appare come una nuvola di punti racchiusa in una circonferenza; se invece c è correlazione, la nuvola di punti appare racchiusa in un ellisse. In quest ultimo caso, gli assi dell ellisse passano entrambi per il punto le cui coordinate sono le medie delle due variabili. Soprattutto, l asse maggiore ha la direzione dell autovettore relativo all autovalore maggiore della matrice di covarianza, l asse minore quella dell altro autovettore. Le lunghezze degli assi, inoltre, sono proporzionali alle radici quadrate dei relativi autovalori. Esempio 2.1. Il file T3_7_SONS.DAT 12 contiene, tra l altro, le misure della lunghezza (V1) e della larghezza (V2) della testa del primo figlio adulto di 25 famiglie. Caricati i dati in un dataframe: > dat <- read.table("t3_7_sons.dat") > dat <- dat[,1:2] # per considerare solo V1 e V2 si può apprezzare visivamente la correlazione tra le due variabili con il comando plot(). Per semplificare la rappresentazione grafica conviene tracciare gli scarti delle variabili dalle rispettive medie: > plot(dat$v1-mean(dat$v1), dat$v2-mean(dat$v2), + xlim=range(-30,30), ylim=range(-30,30)) 12 Scaricabile da http://web.mclink.it/mc1166/statisticamultivariata/t3_7_sons.dat. 17

Per tracciare l ellisse si può usare la funzione ellipse(), contenuta nella omonima libreria, che richiede come parametro una matrice di covarianza (o di correlazione): > library(ellipse) > S <- cov(dat) > lines(ellipse(s)) Gli autovalori (eigenvalues in inglese) e gli autovalori (eigenvectors) di una matrice si trovano con la funzione eigen(): > eig <- eigen(s) > eig $values [1] 131.5183 18.1350 $vectors [,1] [,2] [1,] -0.8249295 0.5652357 [2,] -0.5652357-0.8249295 Aggiungendo gli autovettori al grafico (con lunghezze proporzionali alle radici quadrate dei relativi autovalori): lambda <- eig$values a1 <- eig$vectors[,1] a2 <- eig$vectors[,2] arrows(0, 0, sqrt(lambda[1])*a1[1], sqrt(lambda[1])*a1[2], length=0.1) arrows(0, 0, sqrt(lambda[2])*a2[1], sqrt(lambda[2])*a2[2], length=0.1) si ottiene il grafico riprodotto nella figura 7. Nel caso di tre variabili si ottiene un ellissoide. Se la nuvola di punti tridimensionale riempie l ellissoide, risulta difficile prescindere da uno dei suoi tre assi; se invece la nuvola è sì racchiusa nell ellissoide, ma ha la forma di un osso di seppia, si possono considerare solo i due assi lungo i quali si estende maggiormente ottenendo comunque una buona approssimazione della variabilità osservata; si può cioè approssimare l ellissoide considerando l ellisse proiettata sul piano individuato dai suoi due assi maggiori. Analogamente nel caso di più variabili. L analisi delle componenti principali, quindi, consiste nel tentativo di proiettare la nuvola di punti dello spazio originario in uno spazio di dimensione minore, individuato dagli assi lungo i quali l (iper)ellissoide si estende maggiormente. Tali assi, come si è visto nel caso di due variabili, hanno la direzione degli autovettori della matrice di covarianza e lunghezza proporzionale alla radice quadrata dei relativi autovalori. 2.1.1 Segnale e rumore Si tratta di capire perché, nel caso di due dimensioni, l asse maggiore dell ellisse ha la direzione dell autovettore relativo all autovalore maggiore della matrice di covarianza e perché i due assi hanno lunghezza proporzionale alla radice quadrata degli autovalori. 18

dat$v2 mean(dat$v2) 30 20 10 0 10 20 30 30 20 10 0 10 20 30 dat$v1 mean(dat$v1) Figura 7. Una nuvola di punti a forma di ellisse i cui assi sono paralleli agli autovettori della matrice di covarianza e di lunghezza proporzionale alla radice quadrata dei relativi autovalori. Si può pensare alla nuvola di punti come ad un insieme di osservazioni che ci si aspetta lungo l asse delle ascisse V1, il segnale, accompagnate da un rumore rappresentato dalle ordinate dei punti, V2. La variabilità lungo l asse delle ascisse è la variabilità del segnale, cioè del fenomeno che si intende rilevare, e può essere misurata dalla varianza σv 2 1 ; la variabilità lungo l asse delle ordinate è invece quella del rumore, σ2 V 2. Il rumore è tanto più fastidioso quanto più è correlato, positivamente o negativamente, al segnale, cioè quanto maggiore in valore assoluto è la covarianza tra segnale e rumore, σ V 1,V 2. Per isolare quanto più possibile il segnale dal rumore, quindi, si tratta di passare dallo spazio generato dai vettori (1, 0) e (0, 1) elementi della base canonica dello spazio rappresentato dal piano cartesiano su cui è tracciato il grafico della figura 7 ad uno spazio generato da due vettori che rappresentino uno il segnale, l altro il rumore, e abbiano covarianza nulla. Si tratta quindi di passare dalla matrice di covarianza di V1 e V2, Σ, ad una matrice di covarianza tra Y1 (segnale) e Y2 (rumore) che abbia nulli tutti gli elementi non siti sulla diagonale principale: [ ] [ ] σ 2 V 1 σ V 1,V 2 σ 2 σ V 2,V 1 σv 2 Y 1 0 2 0 σy 2 2 L algebra lineare insegna che ciò significa diagonalizzare Σ, quindi trovare una matrice Λ simile a Σ che sia una matrice diagonale avente gli autovalori di Σ sulla diagonale principale. In questo modo: a) mentre Σ rappresenta le covarianze tra le rilevazioni effettuate nello spazio generato dai 19

vettori (1, 0) e (0, 1), la matrice diagonale Λ rappresenta le covarianze tra le rilevazioni come risulterebbero se effettuate nello spazio generato dagli autovettori di Σ; b) dato che Σ è una matrice simmetrica, i suoi due autovalori sono reali e i due autovettori sono tra loro ortogonali, quindi la loro covarianza è nulla 2.2 Variabili omogenee L ACP opera sempre su matrici centrate. Se le variabili originarie sotto tutte espresse (o esprimibili) nella stessa unità di misura, si usa la matrice degli scarti S n,k. 2.2.1 La prima componente La prima componente Y 1 viene espressa come combinazione lineare delle k variabili con coefficienti i k elementi di un vettore a 1, quindi come prodotto tra la matrice dei dati e tale vettore: Y 1 = S a 1 n,1 n,k k,1 con l obiettivo di massimizzare la varianza σy 2 1 della componente Y 1, sottoposto al vincolo di normalizzazione a 1 = a 1 a 1 = k i=1 a 2 i1 = 1. Il problema di massimizzazione si risolve impiegando un moltiplicatore di Lagrange λ. Poiché: 13 k k σy 2 1 = Var(Sa 1 ) = a i1 a j1 σ ij = a 1Σa 1 si ha (cfr. Appendice 3.1): i=1 j=1 L = σ 2 Y 1 + λ(1 a 1a 1 ) = a 1Σa 1 + λ(1 a 1a 1 ) L a 1 = 2Σa 1 2λa 1 = 0 (Σ λi k )a 1 = 0 dove I k è la matrice identità di ordine k. Ne segue che trovare i λ che soddisfano la condizione di massimizzazione vincolata equivale a trovare gli autovalori della matrice di covarianza Σ k,k. Essendo la matrice di covarianza simmetrica, con traccia non negativa e semidefinita positiva, tutti gli autovalori sono reali e non negativi. 14 13 L i-esimo elemento di Y 1 è una combinazione lineare degli i-esimi elementi delle colonne di S con coefficienti gli elementi di a 1, quindi il prodotto della i-esima riga di S per a 1: y i1 = a 11s i1 + a 21s i2 + + a k1 s ik = S (i) 1,k Tenendo conto del fatto che la media di ciascuna colonna di Y è 0, in quanto combinazione lineare delle colonne di S che hanno a loro volta media nulla, la varianza di Y 1 è: σ 2 Y 1 = 1 n n yi1 2 = 1 n i=1 n i=1 a 1 1,k S (i) k,1 S (i) 1,k a 1 = 1 k,1 n a 1 S 1,k k,n a 1 k,1 S a 1 = a 1 Σ a 1 n,k k,1 k,k k,1 14 Più precisamente, gli autovalori sono reali perché Σ è una matrice simmetrica; inoltre, per la definizione di autovalore e autovettore, se λ è un autovalore di Σ e v è un relativo autovettore, si 20