Laboratorio di Statistica e Analisi Dati: Lezione 2

Tommaso C. & Marco G.

2 - 4 Novembre 2016

Matrici

m
##      [,1]  [,2] 
## [1,] "a11" "a12"
## [2,] "a21" "a22"
m[2,1]
## [1] "a21"
m[2,2] <- 0
m
##      [,1]  [,2] 
## [1,] "a11" "a12"
## [2,] "a21" "0"

Costruzione di Matrici

x <- 1:24
m <- matrix (x,nrow=4) # dato un vettore genera una matrice di 4 righe
#utilizzandone gli elementi
m # si noti l’ assegnamento dei valori "per colonne"
##      [,1] [,2] [,3] [,4] [,5] [,6]
## [1,]    1    5    9   13   17   21
## [2,]    2    6   10   14   18   22
## [3,]    3    7   11   15   19   23
## [4,]    4    8   12   16   20   24

Costruzione Matrici (cont.)

Parametri di matrix (si veda l’help per maggiori dettagli):

x <- 1:8
m <- matrix(x, ncol = 4, byrow = TRUE)
m
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]    5    6    7    8
m <- matrix (x, ncol = 5)
## Warning in matrix(x, ncol = 5): data length [8] is not a sub-multiple or
## multiple of the number of columns [5]
m # in questo caso ha riciclato i valori 1, 2
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    3    5    7    1
## [2,]    2    4    6    8    2

Ricordate la funzione names()?

Costruzione Matrici (cont.)

Ricordate la funzione names() ?

colnames(m) <- c("col1", "col2", "col3", "col4")
rownames(m) <- c("row1", "row2", "row3")
m
##      col1 col2 col3 col4
## row1    1    2    3    4
## row2    5    6    7    8
## row3    9   10   11   12

Concatenazione di matrici

Le matrici possono essere costruite anche tramite le funzioni cbind ed rbind

x <- 1:3
y <- 5:7
m <- cbind(x,y) # lega vettori o matrici orizzontalmente
##      x y
## [1,] 1 5
## [2,] 2 6
## [3,] 3 7
m <- rbind(x,y) # lega vettori o matrici verticalmente 
##   [,1] [,2] [,3]
## x    1    2    3
## y    5    6    7

Altri Comandi Utili

m
##      [,1] [,2] [,3] [,4] [,5] [,6]
## [1,]    1    5    9   13   17   21
## [2,]    2    6   10   14   18   22
## [3,]    3    7   11   15   19   23
## [4,]    4    8   12   16   20   24
length(m)
## [1] 24
mode(m) 
## [1] "numeric"
dim(m)
## [1] 4 6
nrow(m)
## [1] 4
ncol(m)
## [1] 6
dim(m) == c(nrow(m), ncol(m)) # controlliamo che i valori corrispondano
## [1] TRUE TRUE

Operazioni con le matrici

A
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    4
B <- A * 2
B
##      [,1] [,2]
## [1,]    2    6
## [2,]    4    8
A*B
##      [,1] [,2]
## [1,]    2   18
## [2,]    8   32

N.B. non è il prodotto riga per colonna

Prodotto riga per colonna

A
##      [,1] [,2]
## [1,]    1    2
## [2,]    3    4
B
##      [,1] [,2]
## [1,]    1    1
## [2,]    1    0
A%*%B # == rbind(c(1 + 2, 1 + 0), c(3 + 4, 3 + 0) )
##      [,1] [,2]
## [1,]    3    1
## [2,]    7    3

Prodotto riga per colonna (cont.)

N.B. il numero di colonne di A deve essere uguale al numeri di righe di B!!

A
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    4
B
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9
# A%*%B Error in A %*% B : non-conformable arguments

Prodotto riga per colonna (cont.)

Ricordate la definizione prodotto riga per colonna?

A
##      [,1]
## [1,]    1
## [2,]    1
## [3,]    1
B
##      [,1] [,2] [,3]
## [1,]    2    2    2
B%*%A # ottengo uno scalare
##      [,1]
## [1,]    6
A%*%B # ottengo una matrice 3x3 
##      [,1] [,2] [,3]
## [1,]    2    2    2
## [2,]    2    2    2
## [3,]    2    2    2

Comandi Utili

il comando t(A) crea la matrice trasposta

A <-  matrix(c (1,1,1), ncol = 1)
A
##      [,1]
## [1,]    1
## [2,]    1
## [3,]    1
t(A)
##      [,1] [,2] [,3]
## [1,]    1    1    1

Comandi Utili (cont)

diag(2)
##      [,1] [,2]
## [1,]    1    0
## [2,]    0    1
diag(1:3)
##      [,1] [,2] [,3]
## [1,]    1    0    0
## [2,]    0    2    0
## [3,]    0    0    3
diag(matrix(1:4,nrow=2))
## [1] 1 4

Comandi Utili (cont)

# esempio di moltiplicazione di una matrice per la sua inversa
solve(matrix(1:4,nrow=2))%*%matrix(1:4,nrow=2) 
##      [,1] [,2]
## [1,]    1    0
## [2,]    0    1

Risolvere il seguente sistema lineare:

\[ x_1 + x_2 = 4\] \[ 2x_1 + x_2 = 1 \]

solve(matrix(c(1,2,1,1), nrow = 2), c(4,1))
## [1] -3  7

Accesso agli elementi di matrici

m 
##      [,1] [,2] [,3] [,4]
## [1,]    1    2    3    4
## [2,]    5    6    7    8
## [3,]    9   10   11   12
m[, c(2,3)] #seleziona solo le colonne 2 e 3
##      [,1] [,2]
## [1,]    2    3
## [2,]    6    7
## [3,]   10   11
m[, -1] # esclusione el. nella 1^ colonna
##      [,1] [,2] [,3]
## [1,]    2    3    4
## [2,]    6    7    8
## [3,]   10   11   12

Accesso agli elementi delle matrici (cont)

m
##      col1 col2 col3 col4
## row1    1    2    3    4
## row2    5    6    7    8
## row3    9   10   11   12
m[m>4] # elementi > 4 (si ottiene un vettore)
## [1]  5  9  6 10  7 11  8 12
m["row3","col2"]
## [1] 10

Array Multidimensionali

a <- array(0, dim=c(2, 3 ,2))
a[1,2,1]<-6
a
## , , 1
## 
##      [,1] [,2] [,3]
## [1,]    0    6    0
## [2,]    0    0    0
## 
## , , 2
## 
##      [,1] [,2] [,3]
## [1,]    0    0    0
## [2,]    0    0    0

Torniamo alla statistica

Comando table

day_off <- c(2, 2, 0, 0, 5, 8, 3, 4, 1, 0, 0, 7, 1,
             7, 1, 5, 4, 0, 4, 0,1, 8, 9, 7, 0, 1, 7
             , 2, 5, 5, 4, 3, 3, 0, 0, 2, 5, 1, 3, 0,
             1, 0, 2, 4, 5, 0, 5, 7, 5, 1)
table(day_off)
## day_off
##  0  1  2  3  4  5  7  8  9 
## 12  8  5  4  5  8  5  2  1

Comando table (cont)

prop.table(table(day_off))
## day_off
##    0    1    2    3    4    5    7    8    9 
## 0.24 0.16 0.10 0.08 0.10 0.16 0.10 0.04 0.02
# equivalente a calcolare
table(day_off)/length(day_off)
## day_off
##    0    1    2    3    4    5    7    8    9 
## 0.24 0.16 0.10 0.08 0.10 0.16 0.10 0.04 0.02

Comando table (cont)

Frequenze assolute nel caso di più variabili

sesso<-c(rep(c("M"), 20),rep(c("F"),30))
# immaginate di avere due vettori paralleli 
table(day_off, sesso)
##        sesso
## day_off F M
##       0 6 6
##       1 5 3
##       2 3 2
##       3 3 1
##       4 2 3
##       5 6 2
##       7 3 2
##       8 1 1
##       9 1 0

Comando table (cont)

Frequenze relative nel caso di più variabili

# equivalente a calcolare table(day_off, sesso)/length(day_off)
prop.table(table(day_off, sesso)) 
##        sesso
## day_off    F    M
##       0 0.12 0.12
##       1 0.10 0.06
##       2 0.06 0.04
##       3 0.06 0.02
##       4 0.04 0.06
##       5 0.12 0.04
##       7 0.06 0.04
##       8 0.02 0.02
##       9 0.02 0.00

Tabelle e LaTeX

Tabelle e LateX(cont)

xtable(table(day_off))
## % latex table generated in R 3.1.3 by xtable 1.7-4 package
## % Wed Nov  2 14:11:20 2016
## \begin{table}[ht]
## \centering
## \begin{tabular}{rr}
##   \hline
##  & day\_off \\ 
##   \hline
## 0 &  12 \\ 
##   1 &   8 \\ 
##   2 &   5 \\ 
##   3 &   4 \\ 
##   4 &   5 \\ 
##   5 &   8 \\ 
##   7 &   5 \\ 
##   8 &   2 \\ 
##   9 &   1 \\ 
##    \hline
## \end{tabular}
## \end{table}

Domande??

Esercizio 1

Costruire due matrici M ed N di cinque colonne; M deve contenere i numeri da 1 a 15 ed N da 16 a 35. Costruire, se possibile, una matrice di 5 colonne che abbia come righe le righe di entrambe le matrici. Utilizzando M ed N, è possibile creare una matrice che abbia come colonne le colonne di entrambe le matrici?

Esercizio 2

  1. Costruire due matrici quadrate A e B di dimensione 3X3 costituite da un campione di numeri estratti casualmente senza riposizionamento tra i primi 50 interi
  2. Calcolare il prodotto elemento per elemento e “righe per colonne”
  3. Scegliere un vettore b di 3 elementi e risolvere il sistema lineare Ax=b che ne deriva

Esercizio 3

Siano dati i seguenti studenti con relativi punteggi di esame:

  1. Inserire i dati in una matrice R 6x2, avendo come colonne voti e numero di ripetizioni dell’esame
  2. Assegnare i nomi di riga; per le colonne utilizzate “voto” e “ripetizioni”
  3. Determinare (non a mano) il numero di studenti nelle tre fasce di voto: <22, 23-26, 27>
  4. Aggiungere una colonna “fascia” alla matrice, in cui inseriamo 3 per gli studenti in fascia 18-22, 2 per gli studenti in fascia 23-26 e 1 per quelli in fascia 27-30
  5. Stampare le frequenze relative delle fasce di studenti

Esercizio 3 (cont)

Utilizzando le definizioni (non le formule predefinite di R)

  1. Determinare la media campionaria dei voti e del numero di ripetizioni d’esame
  2. Verificare che la somma degli scarti dalla media sia 0
  3. Determinare la varianza campionaria dei voti e del numero di ripetizioni
  4. Esiste una correlazione positiva tra i voti ed il numero di ripetizioni?

N.B.

sqrt(2^2) == 2
## [1] TRUE

Esercizio 4

Esercizio 4 (cont)

  1. Scaricare il il dataset dataset1.csv
  2. Importare il dataset e creare un vettore che contenga i dati della prima colonna:
#controllate che il PATH sia corretto 
dati <- read.csv(file = "<PATH>dataset1.csv") 
eta <- dati$Eta
voti <- dati$Voti
tentatitivi <- dati$Tentativi

a questo punto avrete un vettore eta, uno voti e uno tentativi contenenti 45222 valori numerici.

Esercizio 4 (cont)

Per i vettori “voti”, “tentativi” ed “eta”:

  1. Calcolare media e mediana utilizzando le funzioni viste in aula durante la teoria
  2. Calcolare varianza
  3. Calcolare la deviazione standard
  4. Calcolare il primo e il terzo quartile
  5. il vettore “tentativi” è un pelino strano? Perchè?

Suggerimenti

Pur avendoli visti a lezione può capitare di dimenticarsi i nomi delle funzioni:

Suggerimenti

Pur avendoli visti a lezione può capitare di dimenticarsi i nomi delle funzioni:

Suggerimenti

Pur avendoli visti a lezione può capitare di dimenticarsi i nomi delle funzioni:

Suggerimenti

Pur avendoli visti a lezione può capitare di dimenticarsi i nomi delle funzioni:

Suggerimenti

Pur avendoli visti a lezione può capitare di dimenticarsi i nomi delle funzioni: