La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Laboratorio di R 2° Lezione: stima puntuale ed intervalli di confidenza 5 Maggio 2007 Dott.ssa Michela Cameletti.

Presentazioni simili


Presentazione sul tema: "Laboratorio di R 2° Lezione: stima puntuale ed intervalli di confidenza 5 Maggio 2007 Dott.ssa Michela Cameletti."— Transcript della presentazione:

1 Laboratorio di R 2° Lezione: stima puntuale ed intervalli di confidenza 5 Maggio 2007 Dott.ssa Michela Cameletti

2 Cambiare la cartella di lavoro La funzione getwd() restituisce la cartella di lavoro attuale. Per cambiarla usare setwd("percorso") Oppure dal menù File  Cambia directory

3 Definizione di funzioni nome_della_funzione <- function(argomenti) { serie di operazioni da fare con gli argomenti valore della funzione } Esempio: Generare n numeri casuali da una distribuzione normale standard, farne l’istogramma e calcolarne la media. Ciò si può fare definendo la funzione: norm_ist_med <- function(n){ temp <- rnorm(n) hist(temp) mean(temp) } e valutandola per n=1000 norm_ist_med(n=1000)

4 Massima verosimiglianza Si consideri il caso della VC esponenziale di parametro e si ricordi che la logverosimiglianza è data da logL = function(lambda, campione) { n = length(campione) sumx = sum(campione) c = n*log(lambda) - lambda*sumx }

5 Massima verosimiglianza Consideriamo la variabile Temp contenuta nell dataset airquality data(airquality) lambda.vec <- seq(from = 0, to = 0.5, length=50000) logver <- logL(lambda=lambda.vec, campione=airquality$Temp) plot(lambda.vec,logver,type="l",xlab=expression(lambda),ylab="logL") pos.max = which.max(logver) SMV = lambda.vec[pos.max] Sappiamo che lo stimatore di massima verosimiglianza è E infatti risulta che 1/mean(airquality$Temp) è molto vicino a SMV.

6 Nella libreria MASS c’è la funzione fitdistr per la stima di massima verosimiglianza (usa la funzione optim per le funzioni non standard) library(MASS) fitdistr(airquality$Temp,densfun="Exponential") Massima verosimiglianza

7 Il comando read.table funziona per file.csv,.txt.,.dat. babies=read.table("babyboom.dat") NAME: Time of Birth, Sex, and Birth Weight of 44 Babies SIZE: 44 observations, 4 variables DESCRIPTIVE ABSTRACT: The dataset contains the time of birth, sex, and birth weight for each of 44 babies born in one 24-hour period at a Brisbane, Australia, hospital. Also included is the number of minutes since midnight for each birth. SOURCE: The data appeared in the Brisbane newspaper _The Sunday Mail_ on December 21, 1997. colnames(babies) [1] "V1" "V2" "V3" "V4“ babies <- read.table("babyboom.dat", col.names = c("tempo", "sesso", "peso", "minuti")) colnames(babies) [1] "tempo" "sesso" "peso" "minuti " Importare dati esterni

8 class(babies$sesso) [1] "integer" babies$sessorecod[babies$sesso == 1] <- "F" babies$sessorecod[babies$sesso == 2] <- "M" class(babies$sessorecod) [1] "character" babies$sesso babies$sessorecod <- factor(babies$sessorecod) babies$sessorecod table(babies$sessorecod) pie(table(babies$sessorecod)) plot(abies$sessorecod) #via più breve per ricodificare babies$sessorecod2 = factor(babies$sesso,levels=c(1,2),labels=c("F","M")) Ricodificare una variabile

9 IC per la media con varianza nota Consideriamo la variabile peso e ipotizziamo che la varianza sia nota e pari a 278818.3. sigma2=278818.3 n = length(babies$peso) left = mean(babies$peso)+qnorm(0.025)*sqrt(sigma2/n) right = mean(babies$peso)+qnorm(0.975)*sqrt(sigma2/n) cat("(",left,";",right,")")

10 left = mean(babies$peso) + qt(0.025, df = (n-1)) * sqrt(var(babies$peso)/n) right = mean(babies$peso) + qt(0.975, df = (n-1)) * sqrt(var(babies$peso)/n) c(left,right) ###Funzione già implementata in R peso.test <- t.test(babies$peso, alternative = "two.sided",conf.level = 0.95) names(peso.test) class(peso.test) peso.test$conf.int IC per la media con varianza ignota

11 Il significato di livello di confidenza Prendiamo il dataset fish.dat. SIZE: 159 fishes, 8 variables DESCRIPTIVE ABSTRACT: 159 fishes of 7 species are caught and measured. Altogether there are 8 variables. All the fishes are caught from the same lake (Laengelmavesi) near Tampere in Finland. DESCRIPTIONS: 1 Obs Observation number ranges from 1 to 159 2 Species (Numeric) Code 1:7 3 Weight of the fish (in grams) 4 Length1: Length from the nose to the beginning of the tail (in cm) 5 Length2: Length from the nose to the notch of the tail (in cm) 6 Length3: Length from the nose to the end of the tail (in cm) 7 Height: % Maximal height as % of Length3 8 Width: % Maximal width as % of Length3 9 Sex: 1 = male 0 = female fish = read.table("fish.dat") colnames(fish) = c("obs","species","weight","length1","length2","length3", "height","width","sex")

12 Il significato di livello di confidenza Ipotizziamo che questa sia la popolazione di pesci ed estraiamo 100 campioni di numerosità pari a 50 e calcoliamo per ognuno dei campione un intervallo di confidenza a livello 95% per il peso medio dei pesi. Si noti che il vero valore del peso ( che supponiamo ignoto) è mean(fish$weight) = 398.703 ncampioni <- 100 stima <- numeric(ncampioni) varianza <- numeric(ncampioni) n <- 50 for (i in 1:ncampioni) { ind <- sample(1:nrow(fish), n, replace = TRUE) stima[i] <- mean(fish$weight[ind]) varianza[i] <- var(fish$weight[ind]) }

13 Il significato di livello di confidenza Il vettore stima contiene le 100 medie campionarie. A partire da queste costruiamo 100 intervalli di confidenza (distribuzione di T di student con n-1 gradi di libertà). lim <- matrix(0, 2, ncampioni) lim[1, ] <- stima + qt(0.025, df = n - 1) * sqrt(varianza/n) lim[2, ] <- stima + qt(0.975, df = n - 1) * sqrt(varianza/n) La matrice lim contiene i 100 IC. Contiamo ora quanti intervalli contengono il vero valore (il vero peso medio). vero <- mean(fish$weight) ok vero) mean(ok) Questo valore è la % di valori che contengono la vera media; questo valore dovrebbe essere vicino al livello nominale del 95%.

14 Il significato di livello di confidenza Rappresentiamo graficamente i 100 intervalli di confidenza ed evidenza gli intervalli che non contengono il vero valore. y <- seq(1:ncampioni) y <- matrix(y, ncampioni, 2) lim2 <- t(lim) plot(y, lim2,xlab="N.IC",ylab="IC") abline(h = vero, col = "green") segments(y[ok], lim2[ok, 1], y[ok], lim2[ok, 2]) segments(y[!ok], lim2[!ok, 1], y[!ok], lim2[!ok,2], col = "red", lty = "dashed")

15 IC per la varianza I tempi di combustione (in secondi) di 10 unità di un tipo di combustibile sono risultati i seguenti (50.6, 54.8, 54.4, 44.9, 42.1, 69.8, 53.6, 66.1, 48.0, 37.8). Costruire un intervallo di confidenza per la varianza. tempi = c(50.6, 54.8, 54.4, 44.9, 42.1, 69.8, 53.6, 66.1, 48.0, 37.8) n = length(tempi) left = (n-1)*var(tempi) / qchisq(0.95,n-1) right = (n-1)*var(tempi) / qchisq(0.05,n-1) cat("(",left,";",right,")") Provare a costruire una funzione che costruisce in automatico l’IC per la varianza.

16 IC per la proporzione Lo spoglio parziale di n schede elettorali su un quesito referendario ha fornito il seguente risultato: SI 51%, NO 49%. Determinare l’intervallo di confidenza al 95% della percentuale di SI supponendo n=2500. phat = 0.51 n = 2500 left = phat + qnorm(0.025) * sqrt(phat*(1-phat)/n) right = phat + qnorm(0.975) * sqrt(phat*(1-phat)/n) cat("(",left,";",right,")") In R è già predisposto il comando prop.test prop.test(x=2500*0.51,n=2500,correct=F)

17 boxplot(peso~sessorecod,data=babies) Costruire un IC per la differenza dei pesi tra maschi e femmine. IC differenza medie

18 pesoM = subset(babies$peso,babies$sessorecod=="M") pesoF= subset(babies$peso,babies$sessorecod=="F") nM = length(pesoM) nF = length(pesoF) n = (nM+nF-2) s2star = ( var(pesoM) * (nM-1) + var(pesoF) * (nF-1) ) / n left = (mean(pesoM)-mean(pesoF)) + qt(0.025,n)*sqrt(s2star*(1/nM+1/nF)) right = (mean(pesoM)-mean(pesoF)) + qt(0.975,n)*sqrt(s2star*(1/nM+1/nF)) cat("(",left,";",right,")") #Funzione già implementata t.test(pesoM,pesoF,alternative="two.sided",var.equal=T) IC differenza medie


Scaricare ppt "Laboratorio di R 2° Lezione: stima puntuale ed intervalli di confidenza 5 Maggio 2007 Dott.ssa Michela Cameletti."

Presentazioni simili


Annunci Google