OPERATORI LOGICI
x & y , x | y , x ! y | x != y diversoand or not
ARROTONDARE
round(x, n° decimale), ceiling(), floor()
FUNZIONI MATEMATICHE
abs, sign, sqrt, exp, log, log10Inf, pi, NaN, choose(n, x), sin, cos, tan, factorial, NA∞ π indef. x! not available
TIPI DI DATO
numeric, character, logical, complex, mavector, list, finite, infinite, null, nanfactor, ordered
VETTORI
x = c(...) un solo tipo (o numeric o character)vector("tipo", lunghezza) lo crea vuotoas.vector(x, "tipo") trasforma xany di default
NOMI ELEMENTI VETTORE names(x) anche x RINOMINARELUNGHEZZA length(x)TIPOLOGIA mode(x) oppure class(x)
SEQUENZE
x = a:b x = seq(a, b, by = 1, length = u)intervallo quanti numeri tra a e b
LISTE
list(..., ..., ...) ≠ tipiCREARE LISTA VUOTA vector(mode = "list")names(x), length(x)
FACTOR
x = c(...) factor(x) VARIABILE CATEGORIALE non ordinatafactor(x, levels = c(..., ...)) as.factor(x) trasformalevels(y) = levels(factor(x)) ➔ NOMI delle categorie
ORDERED
x = c(...) ordered(x) VARIABILE CATEGORIALE ORDINATAordered(x, levels = c(...)) specifico le categorielevels(ordered(x)) in ordine
FREQUENZE
x = factor o orderedtable(x) ➔ vettore di f. assolutenames(table(x)) nomi categorie
OPERATORI LOGICI
x & y, x | y, x ! y | x != y diverso
and or not
ARROTONDARE
round(x, n°decimale), ceiling(), floor()
FUNZIONI MATEMATICHE
abs, sign, sqrt, exp, log, log10
Inf, pi, NaN, choose(n, x), sin, cos, tan, factorial, NA not available
∞ π indef. (n x)
x2 ex ln
TIPI DI DATO
numeric, character, logical, complex, ma
vector, list, finite, infinite, nulle, non
factor, ordered
VETTORI
x = c(...) un solo tipo (o numeric o character)
vector("tipo", lunghezza) lo crea vuoto
as.vector(x, "tipo") trasforma x ↓ any di default
NOMI ELEMENTI VETTORE
names(x) anche x RINOMINARE
LUNGHEZZA
length(x)
TIPOLOGIA
mode(x) oppure class(x)
SEQUENZE
x = a : b
x = seq(a, b, by = 1, length = n)
intervallo quanti numeri tra a e b
LISTE
list(..., ..., ...) # tipi
CREARE LISTA VUOTA
vector(mode = "list")
names(x), length(x)
FACTOR
x = c(...) factor(x) VARIABILE CATEGORIALE non ordinata
factor(x, levels = c(..., ...))
levels(y) = levels(factor(x)) → NOMI delle CATEGORIE
as.factor(x) trasforma
ORDERED
x = c(...) ordered(x) VARIABILE CATEGORIALE ORDINATA
ordered(x, levels = c(...)) specifico le categorie in ordine
levels(ordered(x))
FREQUENZE
x = factor o ordered
table(x) = vettore di f.assolute names(table(x))
nomi categorie
OGGETTI
objects() o ls()
elenco di tutti gli oggetti salvati nella memoria di lavoro
RIMUOVERE VARIABILE
rm(x) solo xrm(list = ls()) tutte
CONDIZIONI
is.tipoVariabile(x) restituisce TRUE/FALSE se x è quel tipo o no
all(condizione su x) → TRUE/FALSE se x soddisfanoany(condizione su x) → TRUE/FALSE se almeno una soddisfa
ORDINAMENTO
x = c(...)sort(x, decreasing = FALSE) crescente= TRUE decrescente
INDICI DEI VALORI ORDINATI
order(x, decreasing = F)= T
RIPETIZIONE
rep(cosa ripetere, quante volte)
c(...)x
c(2, 2, 2)times = 2
SUBSETTING VETTORI
x = c(...)
- x[indici] VALORI CORRISP. A QUESTI INDICI
- un solo valore → un numeroa:b dal a-esimo al b-esimo
- indici = which(condizione)
- INDICE VAL.MAX = which.max(x)
- x[-indici] TUTTI I VALORI TRANNE QUELLI INDICATI
- x[condizione] TUTTI I VALORI CHE SODDISFANO COND.
- x[which(condiz)] condizione & condizionex più condizione
- PER NOME x[c("nome_elem1","nome_elem5")]
- PER T/F x[c(FALSE, TRUE, FALSE, TRUE)]
- di un vettore di 4 elemrestituisce i valori di quello con TRUE
SUBSETTING LISTE
y = list(..)
- y[[indici]] elementi corrispondenti a quegli indici
- y$nome_elemento
- PER ACCEDERE AD UN VALORE DI UN VETTORE NELLA LISTAy[[ind.lista]][i.vet]y$nomevett[i]
ESPRESSIoNI MATEMATICHE
x[m] → xm, bar(x)
LETTERE
letters (1:6) prime 6 lettere alfabeto
DIFF
diff (vettori) c(a',b) → b-a
RANGE
range (x) → (min, max)
↳ x = c(..)
DUPLICATED
duplicated (x) → VETTORE di TRUE/FALSE dove TRUE sono i valori doppi
PASTE
UNISCE I VARI CARATTERI IN UN UNICO "NOME"
paste (x, "ciao", "%", "\n"..., sep = " ")
↳ a capo
di default c'è lo spazio
ANALISI DATI
TABELLA → DATA.FRAME
m = length (df $col) = sum (.fi)
fi = table (x) FREQUENZE ASSOLUTE (per DATAFRAME o FACTOR)
Pi = fi/m = table(x) / sum(fi) FREQ. RELATIVE
Fi = cumsum (pi) FREQ. CUMULATE RELATIVE
wi = xi+1 - xi = diff (estremi) AMPIEZZA CLASSI
ci = Pi/wi DENSITÀ DI FREQUENZA
ECDF (rep (x; .fi)) FUNZIONE DI RIPARTIZIONE EMPIRICA
CREO CLASSI
x = c(...) dati , estremi = c(...)
classi = cut (x , breaks = estremi, include.lowest = F, right = T)
chiuso a DX
OPERAZIONI TRA VETTORI
VETTORE NORMALE = V. COLONNA
ADDIZIONE
- TRA 2 VETTORI
x + y = (x1 + y1 xm + ym)
UGUALE LUNGHEZZA
- PER UNO SCALARE
c + x = (c + x1 c + xm)
MOLTIPLICAZIONE
- TRA DUE VETTORI (PRODOTTO SCALARE)
x · y = (x1 · y1 xm ym)
UGUALE LUNGHEZZA
- PER UNO SCALARE
c x = (c x1 c xm)
PRODOTTO VETTORIALE
RIGA × COLONNA o COLONNA × RIGA
t(x) * y
x * t(y)
RISULTATO: m RIGHE x
m × m
RISULTATO: m RIGHE x
m COLONNE y
m COLONNE y
DATA.FRAME
df = data.frame(x, y) dove x e y
- VETTORI
- FACTOR
- ORDERED...
names(df)
POSSO RIASSUMERLI
SUBSETTING DF
subset(df, subset = condizioni , select = nomecolonna)
OPPURE
df$nomecol o df[[indicecolonna]]
OPPURE
df[indiceriga, indicecolonna]
MATRICI
mat = matrix(data, nrow=, ncol=, byrow=F)
NOMINO: rownames = c(...,...,...)
colnames = c(...,...,...)
SUBSETTING
mat[riga, colonna] per accedere ad un vettore
SUM
sum(vettore numerico, na.rm=FALSE) → NUMERO
seq← se true rimuove i valori Na
sum(df[r,c]) somma tutti i valori delle righe e colonne indicate
rowsums(df) &> VETTORE COLONNA, una per ogni riga (:)
colsums(df) → VETTORE RIGA, una per ogni colonna (...)
GRAFICI
- GRAFICO A TORTA
pie (pi, labels = names(x), main = "-titolo-", col = "red")
- GRAFICO A BARRE e DATI QUALITATIVI
barplot (fi, main, xlab, ylab, xlim, ylim, names.arg, )
cex.names, cex.axis, horiz = F, las = 0)
- Se ho una MATRICE o una TABELLA (FREQS.REL) TABLE : X = matr o tabella
barplot (x, ... stesse cose ..., beside = F, legend = rownames(x))
- PLOT - DATI QUANTITATIVI
plot (x, y, xlim, ylim, main, xlab, ylab, sub, col, cex)
pch, type, lwd, cex, cex.main, cex.lab, cex.axis, axes)
diagramma ad aste type = "*h*" - numeri, distribuzioni
diagramma a dispersione no type, solo PCA = SCATTERPLOT
linea continua type = "l"
diagramma a scolini - FUNZ DI RIP. EMPIRICA
linea e punti type = "o" - FUNZIONE DI RIPARTZ.
ISTOGRAMMA ➔ DATI RAGGRUPPATI IN CLASSI
hist ( x , breaks = estremi, freq = F, main, xlab, ylab
tutti i dati
DENSITÀ
(=T FREQUENZE)
, ax.lab , ax.axis, ax.main , cex , col , xlim , ylim ,
, axes = T , nclass )
se = F non, ⤵ numero classi:
mette gli assi se non specifico is
→ li metti tu con estremi ecc ➔ DISTRIBUZIONI
AXIS
CLASSI CON AMPIEZZA ≠
AXIS AGGIUNGO ASSI AL GRAFICO
axis ( side , at = ... , … solite cose (cex, col …) )
a che punto segnare le
stanghette con il numero
TITLE (main ="titolo", sub = " ", xlab, ylab, cex, col, ...)
MTEXT ( testo, side , cex , line ..) MARGINI
TEXT ( pos x, pos y, valori, font , cex , pos , …)
un po sopra
POINTS ( x , y , pch , … )
posizione ⤲ da 1 a 25
ABLINE ( h = , lty = “dashed” , “dotted” )
A al valore o numero AGGIUNGO LINEA ORIZZONT.
PAR ( mfrow = c(1,1) COME SI DISPONGONO I
= c(2,2) GRAFICI
INDICI DI TENDENZA DATI GREZZI
- MODA x = c(...) fi = table(x)x[which.max(fi)] → dati raggruppati
- MEDIA mean(x) oppure SUM(x) / m → length(x)
- MEDIANA median(x) oppure
- ORDINO x
- POSIZIONE p = 0,5 × (m-1) p = 0,5 × m
- QUANTILI quantile(x, probs = ...) oppure
- ORDINO x
- POSIZ p = 0,25 × (m+1)
- media dei valori di quella posizione (prima e dopo)
- RANGE diff(range(x)) differenza tra il max e il min osservato
- DIFFER. INTERQUANTILE IQR(x) oppure diff(quantile(x, c(1,3)/4)) differenza tra Q3 e Q1
DATI RAGGRUPPATI
dati = c(...) xi = names(table(dati))- MODA x[which.max(fi)]
- MEDIA mean(x)
- MEDIANA xi [ which (Fi: > 0,5) ][1] indice del primo valore tra i valori che superano 0,5
SUMMARY (x)
→ NUMERI DI SINTESIdati → min Q1 Q2 - Me Q3 max (media)BOXPLOT (x)
- → max
- Q3
- Q2
- Q1
- min
- soffici (main, xlab, ...)
- horizontal = F di default
SIMMETRICA
- z̄ = Q2
- Q2 - Q1 = Q3 - Q2
- Q1 - MIN = MAX - Q3
ASIMMETRIA
ASIMM POSITIVA > ASIMM NEG < > < obliqua a DX obliqua a SXOUTLIERS
- A < Q1 - (1,5) (Q3 - Q1)
- B > Q3 + (1,5) (Q3 - Q1)
Relazione tra 2 variabili
- Varianza var (x)
- Scarto quad. medio sd (x)
- Coefficiente di variazione CV = sd (x) / abs (mean (x))
+ È grande + è variabile x= σµ
Covarianza
cov (x,y)
- cov > 0 ci sono + valori postivi
- se x aumenta, anche y aumenta (stessa dir)
- cov < 0 ci sono + valori negativi
- se x aumenta, an y diminuisce (≠ direz)
- cov = 0 incorrelazione indipendenti x ⊥⊥ y
Correlazione
cor (x,y) ρ = cov (x,y) / √var (x) var (y)
- ρ = 0 incorrelazione
- ρ = ± 1 perfetta correlazione positiva o negativa
Data.frame (x,y) → mette insieme i dati
Tabella a doppia entrata delle freq. congiunte
table (df) = freq. cong. assol.
add.margins (freq. cong. assol.) = freq. cong. margin. → la colonna e riga sum
table (df) / n = freq. cong. rel. ← m = sum (freq. cong. assol)
oppure
prop.table (freq. cong. assol.) = freq. cong. rel.
add.margins (freq. cong. rel.) = freq. cong. marg. rel.
Marginali
table (df $ x) = freq. xtable (df $ y) = freq. yper quelle relative divido per ∑x e ∑y sumfi sum fi
Condizionate
↓ barplot sovrapposto
prop.table (freq. cong. assol., 2 ) = freq. x da y
prop.table (freq. cong. assol., 1 ) = freq. y da x
Nomi tabella frequenze
rownames (table (df)) nomi xcolnames (table (df)) nomi y
LETTURA FILE - IMPORTO
- getwd()
- IMPORTO DATI da FILE TXT read.table(percorso, header = F, sep)
- dati delimitati → read.delim()
- FILE CSV read.csv()
- LETTURA DATASET (nome = read.table(...)) head(nome)
IF - ELSE
if (condizione) { statement 1} else if (condizione2) { statement 2} else { statement 3}OPPUREvariabile = ifelse(condizione, statement 1, statement 2)POSSO ANNIDARE, statement 2 può essere un altro ifelse
CICLO FOR
for (i in 1:20) { cosa fare}SAMPLE CAMPIONAMENTO
sample(x, size, replace = F, prob) → vettore di m elem di x casuali.sample(x) → PERMUTAZIONE SEMPLICE (2, 3, 4, 5, 4) casualeSET.SEED
per avere lo stesso risultato di un'altra persona imposto prima set.seed(1234)
APPROSSIMARE LA PROBABILITÀ DI UN EVENTO
- Probabilità che esca un numero, faccio 100 lanci:
- OUT = SUM (X, 100, REPLACE = T) → quante volte su 100
- OUT = x
- SUM (OUT == x) → conta 1 ogni volta che è uguale
- OUT = SUM (X, 100, REPLACE = T) → quante volte su 100
- Voglio ripetere 20 volte questa simulazione da 100 lanci OUT = VECTOR (len = 20)FOR (i in 1:20) { LANCI = SAMPLE (x, 100, REPLACE = T) OUT[i] = SUM (LANCI == x)}
⇒ OUT sarà un vettore di 20 numeri, ogni numero è la somma di quante volte è uscito x nei 100 lanci.
Oppure
- OUT = SAMPLE (x, m * Msim, REPLACE = T)
- OUT = MATRIX (OUT, ncol = m, byrow = T) → 100 colonne
- JOB = function (x) SUM (x == x) → FUNZ
- RIS = apply (OUT, 1, JOB) → APPLICO FUNZ
- SUM (RIS) / Msimu → % di prob. che esca x
FUNZIONE
f = function (x) espressione in xris = apply (oggetto, 1, f)- che prende il posto di x
- applico alle righe (per 2 applico a colonne)
DISTRIBUZIONI V.C.
- ddistr(x, parametri distr.) ➔ FUNZ. DI PROBABILITÀ/DENSITÀ
- pdistr(x, parametri distr.) ➔ FUNZ. DI RIPARTIZIONE
- qdistr(x, parametri distr.) ➔ INVERSA FUNZ. DI RIPARTIZ. (quantile)
- rdistr(m, parametri distr.) ➔ GENERA NUMERI CASUALI secondo la distribuzione
NORMALE
norm (μ,σ2) di default (0,1)
BINOMIALE
binom (m,θ) ➔ PROBABILITÀ
GEOMETRICA
geom (θ) ➔ PROBABILITÀ
POISSON
pois (λ) λ
UNIFORME
unif (a,b) a= min b = max di default (0,1)
GAMMA
gamma (α,θ) di default θ = 1shape 1/scale
ESP. NEGATIVA
exp (θ) di default θ = 1
CHI QUADRATO
chisq (g) g gradi di libertà χ2g
VALORE ATTESO
E(X) = sum (0:m * ddistr(x, param))
se so quanto vale E(x) nella distribuzione (ad es. media) posso calcolarlo anche così.
APPROSSIMAZIONI
x̄ ➔ E(x) x̄ = mean (x)s̄2 ➔ Var(x) s̄2 = var (x)dove x̄ = rdistr(m, par)
PROBABILITÀ V.C. DISCR.
- P(x = a) ➔ ddistr(a, par)
- P(x ≤ a) ➔ pdistr(a, par)
- P(x < a) ➔ pdistr(a-1, par)
- P(x > a) ➔ 1 - pdistr(a, par)
- P(a ≤ x ≤ b) ➔ sum (ddistr(a:b, param))
CASO NORMALE
Z = rnorm(m) ~ N(0,1) STANDARDX = rnorm(m, μ, σ) ~ N(μ, σ2) NORMALE
CURVE
curve(distr(x, par), from, to, add = T, lty, lwd, ...)min(z) max(z)
Z ➔ dnorm senza param.curve(pdist, from, to, add = T, ...)oppure plot(ecdf(z)) FUNZIONE DI RIP. EMPIRICA
rug(z) aggiunge al grafico un disegno
QUANTILI N. STAND.
ΦZ(Zα) = α* = pnorm (quantile di ordine α)
Zα = Φ-1(α) = qnorm (probabilità)
quantile di ordine α ➔ ESTERNO TABELLA
P(Z ≤ Zα) = ΦZ(Zα) = α
P(Z ≥ Zα) = 1 - ΦZ(Zα) = ΦZ(Zα) = 1 - α
-- interni tab ➔ Zα esterno tabella
se non c'è
1-X interni tab ➔ -Zα esterno tabella
QUANTILI Xα
Xα = qnorm(μ, X, σ)
PROBABILITÀ
P(X < a) = P(X ≤ a) = pnorm(a, μ, σ)
P(X > a) = pnorm(a, μ, σ, lower.tail = F)= 1 - pnorm(a, μ, σ)
P(a < X < b) = pnorm(b, μ, σ) - pnorm(a, μ, σ)
NORMAL PROBABILITY PLOT
qqnorm(X, data.x = T)dati curve vicini sull'asse
oppure plot(sort(x), funz. emp. teor.)
SE ASIM. ➔ uso log(x)
qqline(X, data.x = T)linea di tendenza (passa x q, e GZα)
Zi = qnorm(fun. emp.)
-
Appunti completi ed esercitazioni - modulo R - Analisi Statistica Multivariata
-
Analisi statistica multivariata - Modulo R
-
Appunti di Analisi statistica multivariata su R
-
Appunti Analisi statistica multivariata - 2 modulo