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 ∞ π indef. x! not available
Tipi di dato
numeric, character, logical, complex, mavector, list, finite, infinite, null, nan 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 = u)
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(..., ...)) as.factor(x) trasforma
levels(y) = levels(factor(x)) ➡ NOMI delle categorie
Ordered
x = c(...) ordered(x) VARIABILE CATEGORIALE ORDINATA
ordered(x, levels = c(...)) specifico le categorie
levels(ordered(x)) in ordine
Frequenze
x = factor o ordered
table(x) ➡ vettore di f. assolute
names(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, mavector, 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 x
rm(list = ls()) tutte
Condizioni
is.tipoVariabile(x) restituisce TRUE/FALSE se x è quel tipo o no
all(condizione su x) → TRUE/FALSE se x soddisfano
any(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 numero
a: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 & condizione
x più condizione
PER NOME x[c("nome_elem1","nome_elem5")]
PER T/F x[c(FALSE, TRUE, FALSE, TRUE)]
di un vettore di 4 elem restituisce 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 LISTA
y[[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
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
sort(x)[p]
Quantili
quantile(x, probs = ...) oppure ORDINO x
POSIZ p = 0,25 × (m+1)
media dei valori di quella posizione (prima e dopo)
↓ 0,25 Q1 0,75 Q3
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 SINTESI
dati → min Q1 Q2 - Me Q3 max (media)
Boxplot (x)
→ max Q3 Q2 Q1 min
FUNZIONI DI BOX PLOT: soffici (main, xlab, ...)
horizontal = F di default
Simmetrica
x̄ = Q2
Q2 - Q1 = Q3 - Q2
Q1 - MIN = MAX - Q3
Asimmetria
ASIMM POSITIVA > ASIMM NEG
Outliers
A < Q1 - (1,5) (Q3 - Q1)
B > Q3 + (1,5) (Q3 - Q1)
→ MEGLIO MEDIANA
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. x
table (df $ y) = freq. y
per 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 x
colnames (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 }
OPPURE variabile = 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) casuale
Set.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
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 x
ris = 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 θ = 1
shape 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) STANDARD
X = 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 P(X > a) = pnorm(a, μ, σ, lower.tail = F) = 1 - 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