You are on page 1of 5

# Esercizio 1

# - Creare un vettore L contenente le lettere (con eventuali ripetizioni) del


proprio cognome;
# - Generare un campione X di 100 lettere estratte (con ripetizione) dal vettore L
(a tal fine utilizzare il comando `sample` con l'opzione `replace=T`)
# - condurre un'analisi statistica descrittiva sul campione X utilizzando tutti gli
strumenti analitici e grafici utilizzabili fra quelli discussi durante il corso
set.seed(12345)

L <- c("T", "R", "O", "I", "A", "N", "I")


# estraggo il campione X
X <- sample(L, 100, replace=TRUE)
# genero la tabella delle frequenze assolute
Xtab <- table(X)
Xtab

# eseguo un plot delle frequenze assolute


plot(Xtab)
# si evince chiaramente dal grafico che la moda è I
pie(Xtab)

# accetta come argomento un vettore


calcola_moda = function(x) {
t <- table(x)
# in questo modo ottengo solo l'etichetta o le
# ethichette corrispondenti al/ai valori massimi
labels(which(t == max(t)))
}

calcola_moda(X)

# per variabili aleatori qualitative non ha senso calcolare media, mediana,


varianza... (non sono definite)

# Esercizio 2

# - Generare due vettori n1 e n2 contenenti entrambi 5 valori estratti (senza


ripetizione) dagli interi tra 3 e 30 (a tal fine utilizzare il comando `sample` con
l'opzione `replace = FALSE`)
# - utilizzare n1 e n2 come frequenze assolute di due campioni Y1 e Y2 distribuiti
nelle classi (-3, -1], (-1, 1], (1,3], (3, 7], (7,8]
# - individuare mediana, media aritmetica e varianza campionaria (distorta) per Y1
e Y2
# - fare un grafico delle funzioni di distribuzione empiriche di Y1 e Y2
set.seed(12345)

n1 <- sample(3:30, 5, replace = FALSE)


n1

n2 <- sample(3:30, 5, replace = FALSE)


n2

# definisco gli estremi delle classi


estremi_intervalli <- c(-3, -1, 1, 3, 7, 8)
estremi_s <- c(-3, -1, 1, 3, 7) # come preferite...
estremi_d <- c(-1, 1, 3, 7, 8)
estremi_s <- estremi_intervalli[1:length(estremi_intervalli)-1]
estremi_s
estremi_d <- estremi_intervalli[2:length(estremi_intervalli)]
estremi_d

# [punti centrali degli intervalli]


xi <- (estremi_s + estremi_d)/2
xi
n1
# identifico ogni classe con il punto centrale dell'intervallo
#genero il campione Y1
Y1 <- rep(xi, n1)
Y1
# costruisco la tabella delle frequenze assolute
tabY1 <- table(Y1)
tabY1
# -2 è il punto centrale dell'intervallo (-3, 1] e così via...

# volendo, potrei ri-etichettare le classi


names(tabY1)
names(tabY1) <- c("(-3, -1]", "(-1, 1]", "(1, 3]", "(3, 7]", "(7, 8]")
tabY1

# e il campione Y2
Y2 <- rep(xi, n2)
tabY2 <- table(Y2)
tabY2

# funzione per il calcolo della media a partire dalla distribuzione in classi


# fqs sono le frequenze assolute, xi sono i valori centrali di ciascuna classe
calcola_media <- function(fqs, xi){
n <- sum(fqs)
return(sum(xi * fqs)/n)
}

# calcolo la media del campione Y1


mu1 <- calcola_media(tabY1, xi)
mu1

# visto come abbiamo "costruito" Y1 e Y2 (ovvero abbiamo assegnato ad ogni


osservazione il valore centrale dell'intervallo), possiamo utilizzare direttamente
mean() e var() [oppurtunamente riscalato] per il calcolo di media e varianza
mu1 <- mean(Y1)
mu1
mu2 <- mean(Y2)
mu2

# funzione per il calcolo della varianza campionaria (distorta)


# a partire dalla distribuzione in classi
calcola_varianza <- function(fqs, xi, xbar) {
n <- sum(fqs)
return(sum((xi - xbar)^2 * fqs)/n)
}

calcola_varianza(tabY1, xi, mu1)


calcola_varianza(tabY2, xi, mu2)

# calcolo la varianza campionaria del vettore x a partire dalla (stima della)


varianza della popolazione
varianza_campionaria <- function(x) {
n <- length(x)
return(var(x) * (n-1)/n)
}
varianza_campionaria(Y1)

varianza_campionaria(Y2)

# calcolo della mediana

# calcolo delle frequenza relative di ciascun intervallo


# per il campione Y1
f1 <- table(cut(Y1, estremi_intervalli)) / length(Y1)
f1

# e per il campione Y2
f2 <- table(cut(Y2, estremi_intervalli)) / length(Y2)
f2

# calcolo delle funzione di ripartizione empirica


# per il campione Y1
F1 <- cumsum(f1)
F1

# e per il campione Y2
F2 <- cumsum(f2)
F2

# individue le classi a cui appartengono le mediane


# per il campione Y1
c_m1 <- min(which(F1 > 1/2))
c_m1

# e per il campione Y2
c_m2 <- min(which(F2 > 1/2))
c_m2

# calcolo della mediana - ipotizzo distribuzione uniforme in ciascun intervallo


# per il campione Y1
estremi_intervalli
F1
c_m1
ampiezza_classe_mediana_1 <- estremi_intervalli[c_m1+1] - estremi_intervalli[c_m1]
ampiezza_classe_mediana_1
densità_frequenza_classe_mediana_1 <- f1[c_m1]/ampiezza_classe_mediana_1
densità_frequenza_classe_mediana_1
estremi_intervalli[c_m1]
mediana1 <- estremi_intervalli[c_m1] + (1/2 -
F1[c_m1-1])/densità_frequenza_classe_mediana_1
mediana1

# per il campione Y2
ampiezza_classe_mediana_2 <- estremi_intervalli[c_m2+1] - estremi_intervalli[c_m2]
ampiezza_classe_mediana_2
densità_frequenza_classe_mediana_2 <- f1[c_m2]/ampiezza_classe_mediana_2
densità_frequenza_classe_mediana_2
mediana2 <- estremi_intervalli[c_m2] + (1/2 -
F2[c_m2-1])/densità_frequenza_classe_mediana_2
mediana2
# plot delle funzioni di distribuzioni empiriche
F1 <- c(0, F1)
F2 <- c(0, F2)
plot(estremi_intervalli, F1, type='b', col="blue")
points(estremi_intervalli, F2, type='b', col="red", lty=2)
abline(h=0.5)
abline(v=mediana1)
abline(v=mediana2, col="red")

# Esercizio 3

# generare una serie di valori X con il comando rnorm(20, 30, 5)


# generare una serie di valori Y con il comando X + rnorm(20, 0, 1 )
# generare un numero i (compreso fra 1 e 20) con il comando sample(1:20, 1)
# condurre una regressione lineare per la Y (in funzione della X) e prevedere il
valore associato alla i-esima osservazione
# fare un grafico delle osservazioni e della retta di regressione
# discutere la bontà di adattamento
set.seed(12345)

# genero il vettore X
X <- rnorm(20, 30, 5)
X
# genero il vettore Y
Y <- X + rnorm(20, 0, 1)
Y
# genero il numero i
i <- sample(1:20, 1)
i

# imposto il modello di regressione lineare (voglio "spiegare" i valori della Y


come una trasformazione lineare dei valori della X)
model1 <- lm(Y~X)
summary(model1)

attributes(model1)
#coefficients1 <- model1$coefficients
#coefficients1
plot(X, Y)
abline(model1)
#abline(coefficients1[1], coefficients1[2], col="red")

predict(model1, data.frame(X=X[i]))
X[i]
#osservazione
model1$fitted.values[i]

model1$residuals
#-----------------------
#NOTA: plot dei residui in funzione della X
#-----------------------
plot(X, model1$residuals)
abline(h=0)

# i residui sembrano essere distribuiti "casualmente" intorno allo zero


cor(X, Y)^2
# il quadrato del coefficiente di correlazione è > 0.7
# il modello lineare sembra essere un buon modello
summary(model1)

df <- data.frame("XX"= X, "YY"= Y)


df
model2 <- lm(YY~XX, data = df)
model2
predict(model2, data.frame(XX = df$XX[i]))
model2
df$XX[i]

You might also like