#-----------------------------------------------------# # # # LABORATORIO DI METODI STATISTICI # # PER LA FINANZA # # PROF F. BARTOLUCCI # # # # LAB-02 # #-----------------------------------------------------# ############################################################# # # Indice: # # * Calcolo dei quantili di una distribuzione # * Generazione di numeri casuali # * Funzioni di densità e di probabilità # * Funzioni di densità e di probababilità cumulate # * Combinazione lineare di variabili aleatorie # * Rappresentazioni grafiche # * Probabilità marginali e condizionate # * Distribuzione normale e normale multivariata # * Funzione di verosimiglianza # # ########################################################################## # ----------------------------------------------------- # * QUANTILI DI DI UNA DISTRIBUZIONE #------------------------------------------------------ # * Variabile aleatoria con distribuzione Normale Standard (mu = 0, sigma^2 = 1) # ----------------------------------------------------------------------------------------------- help(qnorm) # P(Xx) = 0.07 qnorm(1-0.07, 0, 1) qnorm(0.07, 0, 1, lower.tail = FALSE) # * Variabile aleatoria con distribuzione Normale di media 5 (mu = 5) e varianza 9 (sigma^2 = 9) # ----------------------------------------------------------------------------------------------- # P(Xx) = 0.07 qnorm(0.07,5,sqrt(9),FALSE) # * Variabile aleatoria con distribuzione t di Student con 9 gld (df = 9) # ----------------------------------------------------------------------------------------------- help(qt) # P(Xx) = 0.07 qt(0.07,9, , lower.tail = FALSE) # * Variabile aleatoria con distribuzione Chi-quadro con 12 gld (df = 12) # ----------------------------------------------------------------------------------------------- help(qchisq) # P(Xx) = 0.07 qchisq(0.07, 12, , lower.tail = FALSE) # * Variabile aleatoria con distribuzione f di Fisher con 4 e 7 gld (df1 = 4, df2 = 7) # ----------------------------------------------------------------------------------------------- help(qf) # P(Xx) = 0.07 qf(0.07, df1 = 4, df2 = 7, , FALSE) # ----------------------------------------------------- # * GENERAZIONE DI NUMERI CASUALI #------------------------------------------------------ # Estrazione da una Normale Standard (mu = 0, sigma^2 = 1) # ----------------------------------------------------------------------- # Estrazione di un numero rnorm(n = 1, mean = 0, sd = 1) # Estrazione di 100 numeri rand_Nst = rnorm(n = 100, mean = 0, sd = 1) # Verifichiamo che le proprietà della distribuzione siano soddisfatte mean(rand_Nst) sd(rand_Nst) # Se aumentiamo il numero di estrazioni rand_Nst2 = rnorm(n = 10000, mean = 0, sd = 1) mean(rand_Nst2) sd(rand_Nst2) # Estrazione da una Normale di media 5 (mu = 5) e varianza 9 (sigma^2 = 9) # ----------------------------------------------------------------------- rand_N = rnorm(n = 1000, mean = 5, sd = sqrt(9)) mean(rand_N) sd(rand_N) # Estrazione da una t di Student con 9 gdl (df = 9) # ----------------------------------------------------------------------- rand_t = rt(n = 1000, df = 9) # media della t di Student? ---- 0 mean(rand_t) # varianza della t di Student -- df /(df-2) -- df >2 var(rand_t) # Estrazione da una distribuzione Chi-quadro con 12 gdl (df = 12) # ----------------------------------------------------------------------- rand_chi = rchisq(n = 1000, df = 12) # media? --- df mean(rand_chi) # varianza --- 2df var(rand_chi) # Estrazione da una distribuzione f di Fisher 4 e 7 gdl (df1 = 4, df2 = 7) # ------------------------------------------------------------------------------ rand_F = rf(n = 1000, df1 = 4, df2 = 7) # Estrazione da una Binomiale (nProve = 20, p = 0.3) # ----------------------------------------------------------------------- help(rbinom) rand_B = rbinom(n = 10000, size = 20, prob = 0.30) # media della Binomiale? ---- np mean(rand_B) # varianza della Binomiale? --- np (1-p) var(rand_B) # ----------------------------------------------------- # * FUNZIONI DI DENSITA' E DI PROBABILITA' # * E DISTRIBUZIONI CUMULATE #------------------------------------------------------ # Normale media = 0 varianza = 1 # ---------------------------------------------------- # f(X = 1.64) dnorm(x=1.64, mean=0, sd=1) dnorm(1.64) # P(X < 2.3) pnorm(q = 2.3, mean = 0, sd = 1, lower.tail = TRUE) pnorm(q = 2.3) # P(X > 1.5) pnorm(q = 1.5, mean = 0, sd = 1, lower.tail = FALSE) # P(-2.4 < X < 3.2) a = pnorm(q = 3.2, mean = 0, sd = 1) b = pnorm(q = -2.4, mean = 0, sd = 1) c = a-b c # Binomiale n.prove=20 e p=0.30 # ---------------------------------------------------- # P(X = 6) dbinom(x = 6, size = 20, prob = 0.30) # P(X <= 5) pbinom(q = 5, size = 20, prob = 0.30, TRUE) # P(X >= 13) pbinom(q = 13, size = 20, prob = 0.30, FALSE) # P(X > 13) pbinom(q = 14, size = 20, prob = 0.30, FALSE) # Altre distribuzioni # ---------------------------------------------------------- # t di student df = 9 # Pr (X = 2) dt(x = 2, df = 9) # Pr (X < 2) pt(q=2, df=9) # Chi quadro df = 12 # Pr (X = 3) dchisq(x = 3, df = 12) # Pr (X < 3) pchisq(q = 3, df = 12) # F df1 = 4, df2 = 7 # Pr (X = 5) df(x = 5, df1 = 4, df2 = 7) # Pr (X < 5) pf(q = 5, df1 = 4, df2 = 7) # ----------------------------------------------------- # * RAPPRESENTAZIONI GRAFICHE # * E DISTRIBUZIONI CUMULATE #------------------------------------------------------ # Normale media=0 varianza=1 # ----------------------------------------------------- # funzione di densità di probabilità yNst = dnorm(x = rand_Nst, mean = 0, sd = 1) plot(rand_Nst, yNst, type = 'p') hist(rand_Nst) # funzione di ripartizione yNst_c <- pnorm(q = rand_Nst, mean = 0, sd = 1) plot(rand_Nst, yNst_c, type = 'p') # Binomiale n.prove=20, p=0.30 # ------------------------------------------------- # funzione di probabilità yBin = dbinom(x = rand_B, size = 20, prob = 0.30) hist(rand_B) plot(rand_B, yBin, type = 'p') # funzione di ripartizione yBin_c = pbinom(q = rand_B, size = 20, prob = 0.30, TRUE) plot(rand_B, yBin_c, type = 'p') # Distribuzione Chi-quadro # -------------------------------------------- yChi = dchisq(x = rand_chi, df = 12) yChi_c = pchisq(q = rand_chi, df = 12) plot(rand_chi, yChi, type = 'p') hist(rand_chi) plot(rand_chi, yChi_c, type = 'p') # ----------------------------------------------------- # COMBINAZIONE LINEARE DI VARIABILI ALEATORIE NORMALI # ----------------------------------------------------- # V.A. X -- Normale(5, 2) rand_X = rnorm(n = 1000, mean = 5, sd = sqrt(2)) # V.A. Y -- Normale(7, 4) rand_Y = rnorm(n = 1000, mean = 7, sd = sqrt(4)) # V.A. Z come combinazione lineare di X e Y Z <- 2*rand_X + 3*rand_Y # media? -- 2* mu_x + 3*mu_y mean(Z) # varianza? -- 2^2* var_x + 3^2 * vary var(Z) # ------------------------------------------------- # PROBABILITA' MARGINALI E CONDIZIONATE # ------------------------------------------------- # Partiamo da due variabili aleatorie Binomiali X = rbinom(1000,4, 0.6) Y = rbinom(1000,3, 0.4) # frequenze assolute di X f.X = table(X) # frequenze assolute di Y f.Y = table(Y) # tabella di contingenza -- frequenze assolute f.XY = table(X, Y) # tabella di contingenza -- frequenze marginali assulute di riga rowSums(f.XY) # tabella di contingenza -- frequenze marginali assulute di colonna colSums(f.XY) # Probabilità condizionate di riga prop.table(f.XY,1) # verifichiamo che le prob sommino a 1 rowSums(prop.table(f.XY,1)) # Ok # Probabilità condizionate di colonna prop.table(f.XY,2) colSums(prop.table(f.XY,2)) # Ok # Matrice delle prob. congiunte -- frequenze relative prop.table(f.XY) # Matrice delle prob. congiunte -- frequenze percentuali prop.table(f.XY)*100 # ---------------------------------------------- # DISTRIBUZIONE NORMALE MULTIVARIATA # ---------------------------------------------- # Istallare il pacchetto mvtnorm install.packages("mvtnorm") require(mvtnorm) # Fissiamo media e varianza (NORMALE BIVARIATA) mu1 = 1; mu2 = -1 Si1 = 4; Si2 = 1; Si12 = Si21 = 0.5 mu = c(mu1, mu2) Si = matrix(c(Si1,Si12,Si21,Si2),2,2) # Calcoliamo funzione di densità in un punto dmvnorm(c(0,0),mu,Si) #------------------------------------------------------------------ # Estrazione numeri casuali da una normale doppia Si2 = matrix(c(4,0,0,1),2,2) X2 = rmvnorm(1000,mu,Si2) colMeans(X2) cov(X2) cor(X2) # ---------------------------------- # salviamo la history dei comandi # ---------------------------------- savehistory("history_lez2.txt") # usciamo da R quit()