linguaggio r e applicazioni statistiche - torinor.nettorinor.net/download/enniodispense.pdf ·...

222
Universit` a degli Studi di Torino Ennio Davide Isaia Linguaggio R e applicazioni statistiche a.a. 2000-2001 Dipartimento di Statistica e Matematica Applicata “Diego de Castro”

Upload: hathu

Post on 17-Feb-2019

227 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Universita degli Studi di Torino

Ennio Davide Isaia

Linguaggio R e applicazioni statistiche

a.a. 2000-2001

Dipartimento di Statistica e Matematica Applicata “Diego de Castro”

Page 2: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E senza dubbio inevitabile che questi appunti presentino errori materiali;Saro grato a tutti coloro, e specialmente agli Studenti, che vorranno se-gnalarci qualunque problema, dai piu banali errori tipografici alle oscuritanell’esposizione.

AvvertenzaTutti i diritti di questa pubblicazione sono degli autori.Viene consentita la riproduzione integrale di questa pubblicazione a titolo gra-tuito. Altresı e permessa, sempre a titolo gratuito, l’utilizzazione di parti di que-sta pubblicazione in altra opera all’inderogabile condizione che ne venga citatala provenienza e che della nuova opera nella sua interezza vengano consenti-te la riproduzione integrale a titolo gratuito e l’utilizzazione di parti a questestesse condizioni. L’uso di questa pubblicazione in qualsiasi forma comportal’accettazione integrale e senza riserve di quanto sopra.

Dipartimento di Statistica e Matematica Applicata “Diego de Castro”Corso Unione Sovietica, 218/bis10134, Torino (Italy)c� 2000–2009

Page 3: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Capitolo 1

Introduzione ad R

R, parente di S-Plus ed erede di S, e un ambiente integrato che consente di elaboraredati, eseguire calcoli e creare rappresentazioni grafiche; dotato di un linguaggio diprogrammazione ad alto livello, con esso e possibile eseguire operazioni assai complessecon poche linee di comandi e, pertanto, si dimostra uno strumento estremamentepotente che permette di analizzare e risolvere problemi specifici attinenti a diversisettori scientifici.Le sue caratteristiche peculiari, ai fini statistici, sono rappresentate dalla possibilitadi elaborazione di grandi quantita di dati, la vasta disponibilita di operatori per ilcalcolo matriciale e vettoriale nonche l’enorme disponibilita di librerie (“package”)matematiche, statistiche e grafiche.R, inoltre, e un software completamente gratuito e continuamente aggiornato, dispo-nibile per piattaforme Unix (FreeBSD, NetBSD, Linux, Irix, Solaris, OSF/1, AIX,HPUX), Windows 9x/NT nonche MacOS. La URL u!ciale per il progetto R e:

http://www.r-project.org

dove e possibile prelevare l’ultima versione di R, un manuale u!ciale di riferimento acura del R Core Team (2000) nonche una vasta gamma di “packages” aggiuntivi; un’in-teressante lista di “Frequently Asked Questions”, The R FAQ a cura di Kurt Hornik,e reperibile all’indirizzo http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html.

Una volta acquisito il programma e prescindendo dall’installazione/compilazione aseconda della piattaforma di destinazione, l’applicativo ed altri file, tra cui .Renvironsaranno raccolti in un’unica directory, ad esempio <drive>\...\R Home Directory,la quale, a sua volta, conterra altre directory, tra le quali:

• \library: contenente le librerie (“package”) di base nonche quelle di interesseper l’utente, ad esempio:

\library\base

Page 4: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

\library\ctest

...

\library\modreg

nelle quali sono posti i file, in formato ACII, CONTENTS, DESCRIPTION, INDEXe TITLE; inoltre, ciascuna di esse ha una struttura comune, articolata in altredirectory tra cui citiamo:

– \R: contenente il file sorgente, in formato ACII, delle funzioni definite peril “package” stesso;

– \data: contenente alcuni archivi di dati a cui viene spesso fatto riferimentonelle finestre di “help” di R stesso.

– \help: contenente, in formato compresso (.zip, .tar, ...) i file di help inlinea;

– \html, \latex: ove sono posti i file di help in formato html e LATEX.

• \doc: contenente, organizzati in corrispondenti sotto-directory, alcuni docu-menti di aiuto.

A tal proposito e bene tenere a mente che essenziale ai fini di un corretto funzionamen-to dell’applicativo e la presenza del “package” base, contenente in \library\base\R ilfile di definizione dei principali comandi (base), nonche il file Rprofile di definizionedell’ambiente di lavoro.

1.1 L’ambiente di lavoro

Una volta lanciato il programma compare la finestra R GUI1, dove potranno essereimpartiti i comandi e saranno visualizzati i risultati delle elaborazioni o gli eventualimessaggi di errore; tale finestra dispone di menu (File, Edit, Misc, Windows, Help)autoesplicativi.Nel seguito lavoreremo unicamente attreverso la finestra R GUI, cioe impartiremo,dopo il classico prompt >, i comandi in sequenza oppure li sottoporremo in modalita“batch”.All’avvio R GUI mostra alcune informazioni, quali la versione di R che si sta usandoed alcuni comandi chiave per iniziare o chiudere una sessione di lavoro.Un comando, a cui ci abitueremo, e help(argomento); ad esempio help() chiedead R di aprire una nuova finestra che contiene una breve guida in linea dal titolo

1Sotto Unix compare la finestra R Console, il cui aspetto e piuttosto spartanto. Sotto MacOS eLinux-ppc comapre la fienstra R Console, delt tutto analoga alla finestra R GUI che caratterizza isistemi Windows9x/NT e Linux.

2

Page 5: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

“R Information”. Tale finestra o"re una descrizione dettagliata del comando e, piuimportante, riporta in fondo una serie di esempi che, mediante “copia e incolla”,possono essere inseriti sulla Console.Un secondo comando utile per avvicinarsi ad R e demo(), il quale, a seconda dellaversione installata, potrebbe porgere:

> demo()Use ‘demo(topic)’ where choices for argument ‘topic’ are:

topics[1,] "graphics"[2,] "image"[3,] "lm.glm"[4,] "glm.vr"[5,] "nlm"[6,] "recursion"[7,] "scoping"[8,] "is.things"[9,] "dyn.load"

In sostanza R suggerisce di utilizzare il comando nella forma demo(topics), dovetopic e uno degli argomenti proposti; ad esempio demo(graphics).Una terza finestra disponibile e la Graphics Window ove verranno visualizzati, ap-punto, i grafici via via richiesti. Questa abitualmente non viene aperta all’avviodi R, ma viene attivata allorche si impartisce un comando che prevede un out-put grafico. L’utente puo in ogni caso forzare la sua attivazione con il comandoX11(), windows() o macintosh() a seconda della piattaforma Unix, Windows9x/NTo MacOS rispettivamente.E bene tenere a mente che per default l’area di lavoro corrisponde alla directory\R Home Directory; tale situazione puo essere modificata in qualsiasi istante rico-rendo al comando setwd(<directory>). Cosı, ad esempio, immaginando un’instal-lazione su piattaforma Windows, potremmo avere:

> getwd()[1] "C:\Programs\R"> setwd("C:\Progetti")NULL> getwd()[1] "C:\Progetti"> setwd(R.home())NULL> getwd()

3

Page 6: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

[1] "C:\Programs\R"

Al momento di abbandonare R, ci viene richiesto se desideriamo registrare quantosvolto nella corrente sessione di lavoro:

> q()Save workspace image? [y/n/c]:

In caso a"ermativo, l’intero “workspace” verra registrato, per default, sul file Rdata;in tal modo sara possibile “ritornare al punto” semplicemente lancianto R tramiteRdata.

1.2 Primi passi in R

Le entita con cui lavora R vengono dette oggetti; questi vengono identificati tramiteun nome, a discrezione dell’utente, che deve iniziare con un carattere alfabetico e nonpuo contenere spazi bianchi ne i caratteri @, #, $, _, mentre e ammesso l’uso del punto(.) quale separatore tra i caratteri.Se gli elementi di un oggetto presentano tutti la stessa modalita, numerica, alfanume-rica, logica oppure complessa, l’oggetto stesso viene detto elementare. Tali oggetti, aloro volta, possono essere dotati di una struttura di matrice, e cio nel senso algebricodel termine, oppure possono concorrere a creare quelli che nel seguito chiameremooggetti complessi.Cio premesso, dedichiamo i paragrafi che seguono alla descrizione di come definire emanipolare oggetti con struttura elementare, di matrice o complessa ed eseguire sudi essi alcune semplici operazioni, ricorrendo a funzioni predefinite ovvero creadonealtre ad hoc.

1.2.1 Creazione di oggetti elementari

La creazione di un qualsiasi oggetto avviene ricorrendo al comando di assegnazione<- e non, come e norma abituale con altri linguaggi di programmazione, tramiteil simbolo =, a cui segue, in linea di massima, entro parentesi tonde precedute dalprefisso c, acronimo di combine, l’elenco dei suoi elementi, ciasuno dei quali separatoda una virgola. Qualora l’oggetto possedesse modalita alfanumerica, il suoi elementidebbono essere racchiusi entro virgolette (").Cio premesso, la visualizzazione degli elementi di un oggetto puo avvenire digitandoneil nome oppure, in fase di definizione, racchiudendone l’istruzione entro parentesitonde.

Esempio 1.2.1 Ci proponiamo di creare tre oggetti elementari e di visualizzarne il contenuto;piu precisamente:

4

Page 7: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

— x contenente il solo elemento numerico 17:

> x<-c(17)> x[1] 17

— y i cui elementi corrispondono agli interi 10, 13, 17, 20:

> (y<-c(10,13,17,20))[1] 10 13 17 20

— alpha che conterra tre caratteri alfanumerici

> (alpha<-c("Valor medio","Mediana","Varianza"))[1] "Valor medio" "Mediana" "Varianza"

!

A questo punto, possiamo introdurre le seguenti istruzioni di utilita assai generale:

• ls(): visualizza l’elenco degli oggetti definiti in una sessione di lavoro2.

• ls.str(): porge un breve“resoconto” circa la struttura degli oggetti definitinella corrente sessione di lavoro. Informazioni dettagliate circa uno specificooggetto, si ottengono con il comando str(oggetto);

• mode(oggetto): restituisce, sottoforma di stringa, la modalita dell’oggettoindicato;

• rm(oggetto1, ...,oggetton): consente la rimozione degli oggetti specificati.Desiderando rimuovere tutti gli oggetti definiti nel corso di una sessione di lavorosi puo ricorrere all’istruzione rm(list=ls()). La rimozione del solo contenutodi un oggetto avviene tramite l’assegnazione oggetto<-NULL

Esempio 1.2.2 Con riferimento ai tre oggetti introdotti all’Esempio 1.2.1, si osservi il com-portamento, autoesplicativo, delle istruzioni:

> ls.str()alpha : chr [1:3] "Valor medio" "Mediana" "Varianza"x : num 17y : num [1:4] 10 13 17 20> mode(alpha)[1] "character"> (y<-NULL)

2In alternativa si puo ricorrere al comando objects().

5

Page 8: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

NULL> ls()[1] "alpha" "x" "y"> rm(x)> ls()[1] "alpha" "y"> rm(y,alpha)> ls()character(0)

!

Puo a volte capitare di volere elencare (o rimuovere) solo alcuni degli oggetti definitidurante una sessione di lavoro; cio avviene ricorrendo all’opzione pattern=, propriadei comandi ls(), rm() e ls.str(). A tal riguardo, si osservi il comportamento delleistruzioni:

> C02<-c(0.011,0.012,0.013,0.012)> fattoreA<-c(1,2,1,2)> fattoreB<-c(1,2,1,2)> ls()[1] "C02" "fattoreA" "fattoreB"> ls.str(pattern="fat")fattoreA : num [1:4] 1 2 1 2fattoreB : num [1:4] 1 2 1 2> rm(list=ls(pattern="fat"))> ls()[1] "C02"

L’opzione pattern=, come la maggior parte delle opzioni R, puo essere abbreviata,qualora non sussistano ambiguita, ai primi tre caratteri; nel seguito tuttavia, permotivi di chiarezza espositiva, ricorreremo sempre alla forma estesa.

1.2.2 Creazione di oggetti contenenti sequenze regolari

La creazione di oggetti contenenti “sequenze regolari” di elementi numerici o alfanu-merici puo avvenire ricorrendo ai comandi:

• c(n1:n2): crea una sequenza di interi consecutivi da n1 a n2, in ordine crescentese n1 < n2, in ordine decrescente altrimenti;

• seq(n1,n2,by=passo): crea una sequenza di numeri consecutivi da n1 a n2 conincrementi pari a quanto specificato in passo, in ordine crescente se n1 < n2, in

6

Page 9: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

ordine decrescente altrimenti. Qualora l’opzione by=passo fosse omessa e n1 en2 fossero interi, l’istruzione verrebbe ad essere equivalente a c(n1:n2). Un’al-ternativa a by= e rappresentata dall’opzione length=, con la quale si stabilisceappunto la lunghezza della sequenza o, meglio, il numero dei suoi elementi;

• rep(k:n): crea un oggetto contenente i valori, numerici o alfanumerici, specifi-cati in k ripetuti n volte;

• letters[k:n] o LETTERS[k:n]: creano una sequenza di lettere, minuscole emaiuscole rispettivamente, dell’alfabeto latino comprese tra k ed n.

Altri comandi specifici, quali gl(), expand.grid(), ppoints() e sequence(), ver-ranno presentati al paragrafo 1.2.6.

Esempio 1.2.3 Creazione e visualizzazione dell’oggetto x che conterra i primi dieci interipositivi:

> (x<-c(1:10))[1] 1 2 3 4 5 6 7 8 9 10

Si noti che saremmo giunti allo stesso risultato ricorrendo all’istruzione seq():

> (x<-seq(1,10))[1] 1 2 3 4 5 6 7 8 9 10

!

Esempio 1.2.4 Creazione e visualizzazione dell’oggetto x che conterra 11 numeri progressivida 20 a 21 con passo 0.10:

> (x<-seq(20,21,by=0.10))[1] 20.0 20.1 20.2 20.3 20.4 20.5 20.6 20.7 20.8 20.9 21.0

Allo stesso risultato saremmo pervenuti con il comando:

> (x<-seq(20,21,length=11))[1] 20.0 20.1 20.2 20.3 20.4 20.5 20.6 20.7 20.8 20.9 21.0

!

Esempio 1.2.5 Creazione dell’oggetto x che conterra, nell’ordine, 3 elementi a valore nulloe 4 elementi a valore unitario.

> (x<-c(rep(0,3),rep(1,4)))[1] 0 0 0 1 1 1 1

7

Page 10: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

!

Esempio 1.2.6 Visualizzazione delle stringhe "Conforme" e "Difettoso" ripetute la primatre volte e la seconda una sola volta:

> c(rep("Conforme",3),rep("Difettoso",1))[1] "Conforme" "Conforme" "Conforme" "Difettoso"

!

Esempio 1.2.7 Creazione e visualizzazione dell’oggetto alfabeto che conterra le prime settelettere, in minuscolo, dell’alfabeto (latino):

> (alfabeto<-letters[1:7])[1] "a" "b" "c" "d" "e" "f" "g"

Si osservi il comportamento delle istruzioni:

> LETTERS[1:7][1] "A" "B" "C" "D" "E" "F" "G"> paste(letters[1:3],sep="",collapse="+")[1] "a+b+c"> paste("Fattore",letters[1:3],sep="",collapse="+")[1] "Fattorea+Fattoreb+Fattorec"

!

1.2.3 Manipolazione di oggetti elementari

In R esistono svariati comandi che consentono la manipolazione di oggetti, numericio alfanumerici; tra essi val qui la pena citare i seguenti di utilita generale:

• append(x,y): aggiunge agli elementi dell’oggeto x gli elementi di y;

• c(x,y): crea un nuovo oggetto a partire da due oggetti x e y;

• paste(x,y): crea un un nuovo oggetto contenente, sottoforma alfanumerica,gli elementi appaiati degli oggetti x e y; l’opzione sep="simbolo" consen-te di separare i diversi elementi con il simbolo desiderato, mentre l’opzionecollapse="simbolo" permette di separare i singoli risultati con il simboloprescelto;

• rev(x): posiziona in senso inverso gli elementi di x;

• sort(x): ordina in senso crescente gli elementi di x; altrimenti;

8

Page 11: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

• unique(x): restituisce gli elementi non ripetuti contenuti in x.

• x[posizione1,..,posizionen]: estrae dall’oggeto x gli elementi che occupanola posizione specificata in posizione1,..,posizionen;

Altri comandi verranno presentati al paragrafo 1.2.6.

Esempio 1.2.8 Ordinamento in senso crescente degli elementi di x<-c(10:1):

> sort(x)[1] 1 2 3 4 5 6 7 8 9 10

o, equivalentemente:

> rev(x)[1] 1 2 3 4 5 6 7 8 9 10

A proposito di rev(), si noti che:

> rev(c(10,11,9))[1] 9 11 10

e cio coerentemente con quanto detto a proposito. !

Esempio 1.2.9 Creazione di un nuovo oggetto a partire da due oggetti definiti:

> x<-c(1:5)> y<-rev(x)> (z<-c(x,y))[1] 1 2 3 4 5 5 4 3 2 1

!

Esempio 1.2.10 Creazione, a partire da due oggetti, di un nuovo oggetto che contiene,sottoforma alfanumerica, gli elementi appaiati degli oggetti iniziali.

> x<-c(1:5)> y<-c(-5:-1)> paste(x,y)[1] "1 -5" "2 -4" "3 -3" "4 -2" "5 -1"

Si ossservi che, coerentemente:

> paste(x)[1] "1" "2" "3" "4" "5"

Si noti, ancora, il comportamento dei seguenti comandi:

9

Page 12: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

> paste(y,x,sep="*")[1] "-5*1" "-4*2" "-3*3" "-2*4" "-1*5"> paste(y,x,sep="*",collapse="<->")[1] "-5*1<->-4*2<->-3*3<->-2*4<->-1*5"

!

Esempio 1.2.11 Estrazione dall’oggetto x, che contiene gli interi consecutivi da 1 a 20, deglielementi che occupano la terza e la dodicesima posizione.

> x<-c(1:20)> x[3][1] 3> x[12][1] 12

!

Esempio 1.2.12 Creazione, a partire dall’oggetto x, che contiene gli interi consecutivi da10 a 20, dell’oggetto y che conterra i tre elementi che occupano la prima, la terza e la sestaposizione in x.

> (x<-c(10:20))[1] 10 11 12 13 14 15 16 17 18 19 20> (y<-x[c(1,3,6)] )[1] 10 12 15

!

Esempio 1.2.13 Creazione dell’oggetto z che conterra, nell’ordine, i primi tre elementi di x,i due elementi di y quindi i restanti elementi di x.

> (x<-c(10:17))[1] 10 11 12 13 14 15 16 17> (y<-c(300,400))[1] 300 400> (z<-append(x, y, after=3))[1] 10 11 12 300 400 13 14 15 16 17

!

Esempio 1.2.14 Eliminazione ed ordinamento crescente degli elementi ripetuti di un ogget-to.

> (x<-c(c(5:8),c(1:7)))[1] 5 6 7 8 1 2 3 4 5 6 7> sort(unique(x))[1] 1 2 3 4 5 6 7 8

10

Page 13: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

!

Esempio 1.2.15 Creazione, a partire dall’oggetto x che contiene 3 elementi a valore nullo e 4elementi a valore unitario, dell’oggetto sesso che conterra l’etichetta Femmina se x=0 oppureMaschio se x=1.

> (x<-c(rep(0,3),rep(1,4)))[1] 0 0 0 1 1 1 1> (sex<-c(rep("Femmina",3),rep("Maschio",4)))[1] "Femmina" "Femmina" "Femmina" "Maschio" "Maschio" "Maschio" "Maschio"

Un’alternativa e o!erta dal ricorso al comando names(); ad esempio:

> (x<-c(rep(0,3),rep(1,4)))[1] 0 0 0 1 1 1 1> (names(x)<-c(rep("Femmina",3),rep("Maschio",4)))[1] "Femmina" "Femmina" "Femmina" "Maschio" "Maschio" "Maschio" "Maschio"

Per maggiori dettagli sul comando names(), cfr. paragrafo 1.2.6. !

1.2.4 Operatori aritmetici e funzioni matematiche

Sugli oggetti elementari con modalita numerica e possible eseguire le piu comuni ope-razioni aritmetiche, quali la somma (+), il prodotto (*), la divisione (/), l’elevamentoa potenza (^), proprie di un qualsiasi linguaggio di programmazione.

Esempio 1.2.16 Dati i due oggetti x e y ad elemeti numerici:

> x<-seq(1:5)> y<-x^2

le istruzioni che seguono si commentano da se:

> x-(1/y)[1] 0.000000 1.750000 2.888889 3.937500 4.960000> 100*(x+y)^(-1)[1] 50.000000 16.666667 8.333333 5.000000 3.333333> y^(.5)+x[1] 2 4 6 8 10

!

Vale qui la pena accennare alla presenza di due particolari operatori, %% e %/%, il cuiimpiego, a volte utile, e illustrato dagli esempi che seguono.

Esempio 1.2.17 Posto che l’oggetto x contenga gli interi consecutivi da 1 a 10, ci proponiamodi:

11

Page 14: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

— individuare quali di essi e divisibile per 2. A tal fine possiamo considerare il comandox%%2 che porge il resto della divisione di ciascun elemento di x per 2:

> x<-c(1:10)> x%%2[1] 1 0 1 0 1 0 1 0 1 0

— calcolare la parte intera della divisione tra ciascun elemento di x e 2. A tal finesopperisce il comando x%/%2, infatti:

> x<-c(1:10)> x%/%2[1] 0 1 1 2 2 3 3 4 4 5

Quanto alle funzioni matematiche, tra le quali figurano exp(), log(), log10(),log2(),..., sin(), cos(), tan(), asin(), acos(), atan(), sqrt(), abs()..., e im-pensabile o"rirne qui un’elenco seppur parziale; alcune di esse, di interesse sotto ilprofilo statistico, sono presentate al paragrafo che segue, mentre altre ancora sarannointrodotte piu oltre allorche verranno a"rontati problemi specifici.Accenniamo, infine, alla presenza di particolari funzioni che cosentono di eseguire lepiu comuni operazioni su insiemi:

• union(x,y): restituisce l’insieme costituito dall’unione degli insiemi x e y;

• intersect(x,y): restituisce l’insieme costituito dall’intersezione degli insiemix e y;

• setdiff(x,y): rstituisce l’insieme costituito dalla di"erenza tra insiemi x e y;

• setequal(x,y): restituisce il valore logico TRUE se gli insiemi contengono glistessi elementi, il valore logico FALSE altrimenti;

• is.element(el,set): restituisce il valore logico TRUE se l’elemento in el econtenuto in set, il valore logico FALSE altrimenti. Un alias del comando e%in%.

Esempio 1.2.18 Definiti gli oggetti A<-letters[1:4] e B<-letters[3:7], abbiamo:

> union(A,B)[1] "a" "b" "c" "d" "e" "f" "g"> intersect(A,B)[1] "c" "d"> setdiff(A,B)[1] "a" "b"> setdiff(B,A)

12

Page 15: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

[1] "e" "f" "g"> is.element(A,setdiff(A,B))[1] TRUE TRUE FALSE FALSE> "f"%in%union(A,B)[1] TRUE> is.element("q",setdiff(letters[1:24],union(A,B)))[1] TRUE

Si noti che tali operatori in ogni caso rimuovono gli elementi duplicati di un insieme. !

1.2.5 Su alcune funzioni statistiche

Tra le innumerevoli funzioni statistiche implementate, per il momento ci limitiamoa citare le piu comuni e precisamente, posto x un’oggetto elementare con modalitanumerica:

• cumsum(x): restituisce la somma cumulata degli elementi di x;

• length(x): restituisce il numero degli elementi3 contneuti in x;

• max(x), min(oggetto): porgono, rispettivamente, il massimo ed il minimo deivalori contenuti in x;

• mean(x): calcola la media aritmetica dei valori contenuti in x;

• median(x): calcola la mediana dei valori contenuti in x;

• prod(x): restituisce il prodotto degli elementi di x;

• quantile(x,alpha): porge il quantile di ordine alpha degli elementi di x;

• sum(x): restituisce la somma degli elementi di x;

• summary(x): visualizza4 il minimo, il primo quartile, la media aritmetica, lamediana, il terzo quartile ed il massimo degli elementi di x;

• table(x): porge la distribuzione di frequenze assolute generata dalle osserva-zioni individuali registrate in x;

• var(x) e sd(x): calcolano, rispettivamente, la varianza e lo scarto quadraticomedio dei valori contenuti in x. E bene ricordare, sin da ora, che la varianza, edi conseguenza lo scarto quadratico medio, e calcolata come:

1n ! 1

n!

i=1

(xi ! µx)2

3A bene vedere trattasi di una funzione “primitiva” di impiego assai generale.4Tale e il suo comportamento se applicata ad un oggetto numerico elemementare.

13

Page 16: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

quindi con un numero di gradi di liberta pari a length(x)-1. Tale grandezzaviene abitualmente detta varianza campionaria.

• weighted.mean(xi,ni): calcola la media aritmetica dei valori contenuti in xicon pesi ni.

Esempio 1.2.19 Si immagini che la rilevazione il voto conseguito all’esame di Statistica,espresso in trentesimi, conseguito da un gruppo di 20 studenti abbia fornito i risultati:

18 23 30 25 27 27 30 20 20 2527 25 27 23 30 25 23 20 25 23

Definito l’oggetto elementare voti.stat:

> voti.stat<-c(18,23,30,25,27,27,30,20,20,25,27,25,27,23,30,25,23,20,25,23)

facilmente possiamo ottenere:

— la distribuzione dei voti in termini di frequenze assolute:

> table(voti.stat)voti.stat18 20 23 25 27 301 3 4 5 4 3

nonche relative:

> table(voti.stat)/length(voti.stat)voti.stat18 20 23 25 27 30

0.05 0.15 0.20 0.25 0.20 0.15

Si osservi che, dal momento che table(voti.stat) restituisce un oggetto numerico, lamedia dei voti potrebbe essere calcolata ricorrendo all’istruzione:

> weighted.mean(sort(unique(voti.stat)),table(voti.stat)/20)[1] 24.65

— alcune misure di tendenza centrale:

% > summary(voti.stat)% Min. 1st Qu. Median Mean 3rd Qu. Max.% 18.00 23.00 25.00 24.65 27.00 30.00

Visto che summary(voti.stat) restituisce un oggetto composto da sei elementi, pos-siamo ottenere la di!erenza interquartilica come:

14

Page 17: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

> summary(voti.stat)[5]-summary(voti.stat)[2]+.

— la varianza campionaria nonche la devianza:

> var(voti.stat)[1] 12.02895> var(voti.stat)*(length(voti.stat)-1)[1] 228.55

!

1.2.6 Alcune funzioni di utilita generale

Dedichiamo questo paragrafo alla presentazione di alcune funzioni, oltre a quelle giacitate, a cui spesso puo essere fatto ricorso durante una sessione di lavoro.

• abbreviate(oggetto, mln=, dot=FALSE): abbrevia gli elementi dell’oggettospecificato al una lunghezza minima pari a mln=. Ponendo dot=TRUE vienevisualizzato il su!sso “.”. Ad esempio:

> x<-c("Ennio","Davide","Isaia")> abbreviate(x[1:2], minl=1)Ennio Davide

"E" "D"> abbreviate(x[1:2], minl=1,dot=TRUE)Ennio Davide"E." "D."

• all(oggetto) consente di confrontare tutti gli elementi di un oggetto rispettoad una condizione. Ad esempio:

> x<-c(-2.2,-1.8,-1.5,-1.4,-1.2,-1.0,-0.9,-0.8,-0.7 ,0.2)> all(x>0)[1] FALSE

Il suo complemento e la funzione any(oggetto).

> x<-c(-2.2,-1.8,-1.5,-1.4,-1.2,-1.0,-0.9,-0.8,-0.7 ,0.2)> any(x>0)[1] TRUE

15

Page 18: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

• all.names(expression) e all.vars(expression) porgono, rispettivamente,gli elementi e le variabili che compaiono nell’espressione indicata e definita viaexpression() o quote().

• append(oggetto, valori, after=posizione): aggiunge gli elementi conte-nuti in valori all’oggetto specificato, eventualmente nella posizione desiderata.Ad esempio:

> x<-integer(0)> (x<-append(x,1:10))[1] 1 2 3 4 5 6 7 8 9 10> (x<-append(x,120,after=2))[1] 1 2 120 3 4 5 6 7 8 9 10

Si osservi che la situazione di default prevede after=length(x).

Tale comando puo tornare utile qualora si desideri inserire in un oggetto glielementi via, via generati da specifiche funzioni.

• attr(oggetto,attributo): attribuisce all’oggetto indicato un particolare “at-tributo”. Ad esempio:

> x<-c(1:10)> attr(x,"dim")<-c(2, 5)> x

[,1] [,2] [,3] [,4] [,5][1,] 1 3 5 7 9[2,] 2 4 6 8 10> attr(x,"dim")<-NULL> x[1] 1 2 3 4 5 6 7 8 9 10

• cat(): acronimo di “concatenate & print” trasforma gli elementi indicati qualeargomento in strighe alfanumeriche e li visualizza. Il su!sso "\n" consente alcursore di ritornare in modalita “prompt” (>). Ad esempio:

> x<-c(1,2,3)> a<-c("degli elementi di x")> cat("La media ",a," e’:",sum(x)/length(x),"\n")La media degli elementi di x e’: 2>

16

Page 19: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

• date(): restituisce, sottoforma alfanumerica, la data di sistema.

> date()[1] "Tue Aug 28 05:16:51 2001"

• deparse(oggetto): trasforma la definizione dell’oggetto specificiato in unastringa. Cosı, ad esempio:

> a<-letters[1:3]> deparse(a)[1] "c(\"a\", \"b\", \"c\")"

• diff(oggetto,lag=): calcola le di"erenze tra i diversi elementi di un oggetto.Ad esempio:

> diff(c(10,23,21,30),1)[1] 13 -2 9

• duplicated(oggetto): indica, in forma logica, quali elementi dell’oggetto spe-cificato quale argomento sono ripetuti. Ad esempio:

> x<-c(1:4)> y<-c(2:6)> duplicated(c(paste(x),paste(rev(y))))[1] FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE

• eval(funzione): calcola il valore la funzione specificata in corrispondenza adeterminati valori di interesse. Quali esempi, valgano le seguenti istruzioni:

> eval(3 ^ 2 ^ 3)[1] 6561> eval(sin(.25*pi)+cos(.25*pi))[1] 1.414214> sin(.25*x)+cos(2*.25*x)Error: Object "x" not found> x<-pi/2> sin(.25*x)+cos(2*.25*x)[1] 1.089790

17

Page 20: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

Si vedano anche i comportamenti delle funzioni expression() e quote().

• expand.grid(x,y,z,...): crea un “data frame” (cfr. paragrafo 1.4.2) con-tenente tutte le combinazioni degli elementi dei vettori (o fattori) x, y, z, ...specificati. Ad esempio:

> expand.grid(temperatura=seq(100,120,10),pressione=seq(1,2,1))temperatura pressione

1 100 12 110 13 120 14 100 25 110 26 120 2

• expression(funzione): restituisce l’espressione di una funzione senza provve-dere al calcolo automatico. Si ossservi il comportamento delle istruzioni:

> (fx<-expression(x^2+2*x))expression(x^2 + 2 * x)> eval(fx)Error in eval(expr, envir, enclos) : Object "x" not found> x<-seq(-1,1)> eval(fx)[1] -1 0 3> all.names(expression(sin(x+y)))[1] "sin" "+" "x" "y"> all.vars(expression(sin(x+y)))[1] "x" "y"

Si veda anche il comportamento della funzione quote().

• factor(oggetto,levels=(n1,...,nn)): definisce in modo diretto l’oggettospecificato quale fattore a n livelli. Un’alternativa e il ricorso a as.factor(oggetto).Sono, pertanto, comandi validi:

> (temperatura<-factor(c(1,1,1,2,2,2),levels=c(1:2)))[1] 1 1 1 2 2 2Levels: 1 2> trattamento<-c("A","B","B","A","B","A","C","C","C")

18

Page 21: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

> (trattamento<-as.factor(trattamento))[1] A B B A B A C C CLevels: A B C

• format(oggetto,...): attribuisce all’oggetto specificato un formato per unamigliore visualizzazione dei suoi elementi. Per default il comando prevede l’al-lineamento a destra, justify="right", e un numero di decimali pari a quantodefinito (cfr. paragrafo 1.9) in getOption("digits"). A commento:

> (x<-c(2,15,21,25)/3)[1] 0.6666667 5.0000000 7.0000000 8.3333333> format(x,digits=3)[1] "0.667" "5.000" "7.000" "8.333"> format(x^3,digits=3,justify="right")[1] " 0.296" "125.000" "343.000" "578.704"> alpha<-c("Valor medio","Mediana","Varianza")> format(alpha,justify="left")[1] "Valor medio" "Mediana " "Varianza "> format(alpha,justify="right")[1] "Valor medio" " Mediana" " Varianza"> format(alpha,justify="none")[1] "Valor medio" "Mediana" "Varianza"

• formula("espressione"): consente di definire un nuovo oggetto con strutturatipo formula il cui impiego e principalmente riservato alle procedure di regres-sione (lm) e di analisi della varianza (aov). La trasformazione della struttura diun’opportuna stringa in formula avviene con il comando as.formula(striga).Alcuni esempi sono:

> (formulayx<-formula("y~x"))y ~ x> nomi.x<-paste("x",c(1:4),sep="")> (f<-as.formula(paste("y ~ ", paste(nomi.x, collapse= "+"))))y ~ x1 + x2 + x3 + x4

• gl(n,k): genera in modo automatico una sequenza di interi positivi da 1 a n,ciascuno dei quali viene ripetuto k volte5. Il risultato ha struttura factor. Adesempio:

5Si noti che length(gl(n,k))=n*k.

19

Page 22: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

> (temperatura<-gl(2,3))[1] 1 1 1 2 2 2Levels: 1 2

L’opzione labels =, che per default viene posta uguale a 1:n, consente di attri-buire, a discrezione dell’utente, etichette ai diversi livelli del fattore di interesse;ad esempio:

> (temperatura<-gl(2,3,labels=c(120,160)))[1] 120 120 120 160 160 160Levels: 120 160> (sesso<-gl(2,3,labels=c("Maschio","Femmina")))[1] Maschio Maschio Maschio Femmina Femmina FemminaLevels: Maschio Femmina

• levels(fattore): indica quali sono i livelli del fattore specificato. Infatti:

> temperatura<-gl(2,3,labels=c(120,160))> sesso<-gl(2,3,labels=c("Maschio","Femmina"))> levels(temperatura)[1] "120" "160"> levels(sesso)[1] "Maschio" "Femmina"

• match(x,y,nomatch=NA): confronta i due oggetti x e y e restituisce l’elenco deglielementi della loro intersezione. Gli elementi diversi sono, per default, definitimancanti (NA). Ad esempio:

> x<-c(1:10)> y<-c(7:20)> match(x,y)[1] NA NA NA NA NA NA 1 2 3 4

mentre:

> y[match(x,y,nomatch=0)][1] 7 8 9 10

20

Page 23: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

• names(oggetto): trattasi di un comando assai generale che, essenzialmente,consente di attribuire etichette ai diversi elementi di un oggetto. A tal proposito,si immagini che x contenga 5 elementi numerici di cui tre a valori 0 e due avalore 1 e che si desideri attribuire l’etichetta Maschio qualora x=0 e Femminaaltrimenti; le istruzioni necessarie sono:

> (x<-sort(c(0,1,0,1,1)))[1] 0 0 1 1 1> (names(x)<-c(rep("Maschio",3),rep("Femmina",2)))[1] "Maschio" "Maschio" "Maschio" "Femmina" "Femmina"

L’eliminazione delle etichette attribuite ad un’oggetto avviene con il comandonames(oggetto)<-NULL.

Si osservi che il semplice comando names(oggetto) consente di visualizzarele etichette associate all’oggetto specificato e, come vedremo nel seguito (cfr.paragrafi 1.4.1 e 1.4.2), qualora l’oggetto fosse una “lista” o un “data frame” neelencherebbe i nomi degli elementi.

• nchar(oggetto): restituisce il numero di caratteri di ciascun elemento alfanu-merico contenuto nell’oggetto specificato. Cosı:

> a<-c("sommatoria","produttoria")> nchar(a)[1] 10 11> sum(nchar(a))[1] 21

• noquote(oggetto): visualizza gli elementi dell’oggetto alfanumerico specificatosenza racchiuderli entro le consuete virgolette.

> noquote(c(letters[1:4],rev(letters[1:4])))[1] a b c d d c b a

• ppoints(n): genera una sequenza di n numeri in accordo a (1:n-.5)/n. Qualeargomento e possibile indicare un oggetto numerico.

> ppoints(6)[1] 0.10 0.26 0.42 0.58 0.74 0.90

21

Page 24: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

Tale funzione torna utile, ad esempio, per individuare i quantili di una distri-buzione.

• pretty(oggetto,n=): restituisce una sequenza di n numeri tali da suddividereil range dell’oggetto specificato in altrettanti intervalli di egual ampiezza. Acommento:

> x<-c(10,10.5,11,12,13,13.5,16.5,17,18,20)> pretty(x,n=2)[1] 10 15 20> pretty(x)[1] 10 12 14 16 18

• quote(oggetto): restituisce l’espressione di una funzione senza provvedere alcalcolo automatico. Si ossservi il comportamento delle istruzioni:

> (f<-quote((2*pi)^(-.5)*exp(-.5*x^2)))(2 * pi)^(-0.5) * exp(-0.5 * x^2)> x<-c(-1,0,1)> eval(f)[1] 0.2419707 0.3989423 0.2419707

• replace(oggetto,posizione,valori): rimpiazza gli elementi dell’oggetto spe-cificato nella posizione indicata con i valori elencati o con gli elementi di unsecondo oggetto. Ad esempio:

> x<-seq(1:10)> y<-c(100,120)> replace(x,2:3,y)[1] 1 100 120 4 5 6 7 8 9 10

• round(oggetto,decimali): trasforma gli elementi dell’oggetto ad elementi nu-merici indicato in numeri con tante cifre decimali quante specificate in decimali:

> round(seq(1:10)/seq(1,2,length=10),2)[1] 1.00 1.80 2.45 3.00 3.46 3.86 4.20 4.50 4.76 5.00

• sequence(n1:nmax): crea delle sequenze di numeri interi del tipo:

n1, n1, n2, n1, n2, n3, . . . , n1, n2, . . . , nmax

A tal proposito:

22

Page 25: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

> sequence(1:5)[1] 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5> sequence(5:1)[1] 1 2 3 4 5 1 2 3 4 1 2 3 1 2 1

• sign(oggetto): ricodifica in -1, 0 e 1 gli elementi numerici dell’oggetto speci-ficato a seconda che essi siano, rispettivamente, negativi, nulli o positivi.

> (x<-c(seq(-3,2)))[1] -3 -2 -1 0 1 2> sign(x)[1] -1 -1 -1 0 1 1> sign(abs(x))[1] 1 1 1 0 1 1

• substr(oggetto,start,stop): trasforma gli elementi dell’oggetto alfanumeri-co indicato in strighe con un mumero di caratteri compresi tra start e stop;ad esempio:

> (x<-c("Varianza","Devianza"))[1] "Varianza" "Devianza"> substr(x,1,3)[1] "Var" "Dev"> rev(substr(x, 1,3))[1] "Dev" "Var"

Per completezza, riportiamo i seguenti tre comandi di utilita:

• apropos(what,mode="any"): porge un elenco di tutti gli oggetti i cui nomicontengono quanto specificato in what e cio, per default, indipendentementedalla loro modalita (mode="any"):

> apropos(integrate)[1] "integrate" "print.integrate"

Si badi che digitando apropos(".") si otterrebbe l’elenco completo di tuttigli oggetti predefiniti in R, che sono ben 1456 (length(apropos("."))); diquesti quelli che poseggono modalita di tipo "function" risultano essere 1453(length(apropos(".",mode="function"))).

23

Page 26: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

• exists("oggetto",mode="any"): controlla l’esistenza dell’oggetto specificato,indipendentemente dalla sua modalita; il risultato e di tipo logico:

> exists("integrate")[1] TRUE> exists("f")[1] FALSE> f<-expression(x+2*x^2)> exists("f",mode="function")[1] TRUE

• find(what,mode="any"): riporta il nome della librebria in cui si trova l’oggettoindicati in what:

> find(cor)[1] "package:base"> find(cor.test)[1] "package:ctest"

1.3 Vettori e Matrici

Appare del tutto naturale, ora, dedicare la nostra attenzione alla creazione e la ma-nipolazione di oggetti che hanno struttura di vettore o di matrice e cio secondo lacomune accezione dell’algebra lineare.E comunque bene tenere a mente che abitualmente nel linguaggio informatico unaqualsiasi stringa di caratteri (numerici o alfanumerici) viene detta vettore. Tutti glioggetti definiti in R sono dunque vettori, a meno che non abbiano struttura di matrice(cfr. paragrafo 1.5).I principali comandi, nella forma piu semplice, che utilizzeremo nel seguito per definiree manipolare matrici algebriche sono:

• array(oggetto,dim=c(nrow,ncol)): trasforma l’oggetto indicato in una ma-trice di ordine nrow"ncol (cfr. Osservazione 1.3.1);

• cbind(oggetto): trasforma l’oggetto indicato in un vettore colonna;

• matrix(oggetto,nrow=,ncol=): trasforma l’oggetto indicato in una matricedi ordine nrow"ncol;

• rbind(oggetto): trasforma l’oggetto indicato in un vettore riga;

24

Page 27: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

Per comodita di esposizione, a fine paragrafo, riassumiamo in modo ordinato leprincipali funzioni predefinite che operano su oggetti con struttura, appunto, dimatrice.

Esempio 1.3.1 Creazione e visualizzazione del vettore riga x e del vettore colonna y checonterranno, entrambi, i primi quattro interi positivi:

> (x<-rbind(c(1:4)))[,1] [,2] [,3] [,4]

[1,] 1 2 3 4> (y<-cbind(c(1:4)))

[,1][1,] 1[2,] 2[3,] 3[4,] 4

Un’alternativa potrebbe essere la seguente:

> x<-matrix(c(1:4),nrow=1,ncol=4)> y<-matrix(c(1:4),nrow=4,ncol=1)

I precedenti comandi che definiscono le matrici x e y potrebbero essere scritti in forma com-patta, omettendo cioe gli identificativi nrow= e ncol=, ricordando che il numero delle righedve precedere quello delle colonne; in sostanza avremmo potuto impartire i comandi:

> x<-matrix(c(1:4),1,4)> y<-matrix(c(1:4),4,1)

Nel seguito tuttavia, per motivi di chiarezza espositiva, ricorreremo sempre alla forma estesadel comando. !

Esempio 1.3.2 Creazione della matrice X le cui righe corrispondono ai vettori x e y sudefiniti:

> (X<-rbind(x,t(y)))[,1] [,2] [,3] [,4]

[1,] 1 2 3 4[2,] 1 2 3 4

Si osservi che il comando t(y) porge la trasposta del vettore (colonna) y, infatti:

> t(y)[,1] [,2] [,3] [,4]

[1,] 1 2 3 4

!

25

Page 28: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

Esempio 1.3.3 Creazione dell’oggetto z, contenente gli elementi del vettore x ="1 2 3

#.

E su"ciente ricorrere all’istruzione drop(), infatti:

> (x<-rbind(c(1:3)))[,1] [,2] [,3]

[1,] 1 2 3> z<-drop(x)> z[1] 1 2 3

!

Esempio 1.3.4 Creazione e visualizzazione della matrice X le cui quattro colonne contengono,in progressione, gli interi da 1 a 12:

> (X<-matrix(c(1:12),nrow=3,ncol=4))[,1] [,2] [,3] [,4]

[1,] 1 4 7 10[2,] 2 5 8 11[3,] 3 6 9 12

Un’alternativa potrebbe essere la seguente:

> X<-c(1:12)> dim(X)<-c(3,4)

oppure:

> Y<-array(c(1:12),dim=c(3,4))

!

Osservazione 1.3.1 Il comando array() e assai versatile; con esso, ad esempio sipossono creare matrici, per cosı dire, “a piu dimensioni”.A tal proposito si immagini di volere creare due matrici, di ordine 3 " 3 ciascuna econtenenti gli interi da 1 a 9 e da 10 a 18 rispettivamente, da inserire in un’unicooggetto, Y con struttura di matrice. Cio puo avvenire tramite il comando:

> (Y<-array(c(1:18),dim=c(3,3,2))), , 1

[,1] [,2] [,3][1,] 1 4 7[2,] 2 5 8[3,] 3 6 9

26

Page 29: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

, , 2[,1] [,2] [,3]

[1,] 10 13 16[2,] 11 14 17[3,] 12 15 18

Esempio 1.3.5 Data la matrice:

A =

$

%1 2 14 3 21 2 1

&

'

ci proponiamo di calcolare(3

2

(21 aij . In R, gli elementi aij della matrice A vengono in-

dividuati con la notazione A[i,j], dove A e una matrice definita mentre i e j sono gli in-dici che ne identificano rispetttivamente le righe e le colonne, e quindi i=1,...,nrow(A) ej=1,...,ncol(A).Il calcolo indicato potrebbe essere risolto, perlomeno in prima battuta , come:

> A<-matrix(c(1,4,1,2,3,2,1,2,1),nrow=3,ncol=3)> A[2,1]+A[2,2]+A[3,1]+A[3,2][1] 10

A tal proposito, cfr. Esempio 1.3.14. !

Esempio 1.3.6 Data la matrice:

A =)

1 2 35 6 7

*

ne estraiamo i due vettori riga e i tre vettori colonna.In R la notazione A[1,] e A[,1] indicano, rispettivamente, gli oggetti costituiti dagli elementidella prima riga e, rispettivamente, della prima colonna di A. Cio premesso, possiamo pensaredi risolvere il problema mediante le istruzioni:

> A<-matrix(c(1,5,2,6,3,7),nrow=2,ncol=3)> riga1<-rbind(A[1,])> riga2<-rbind(A[2,])> col1<-cbind(A[,1])> col2<-cbind(A[,2])> col3<-cbind(A[,3])

infatti, ad esempio:

27

Page 30: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

> riga1[,1] [,2] [,3]

[1,] 1 2 3> col2

[,1][1,] 2[2,] 6

!

Esempio 1.3.7 Posto che Y sia una matrice contenente, a sua volta, due matrici di ordine3 " 3 ciascuna (cfr. Osservazione 1.3.1 ed Esempio 1.3.6), ci proponiamo di estrarre da essa:

— le singole matrici:

> (Y[,,1])[,1] [,2] [,3]

[1,] 1 4 7[2,] 2 5 8[3,] 3 6 9> (Y[,,2])

[,1] [,2] [,3][1,] 10 13 16[2,] 11 14 17[3,] 12 15 18

— il vettore corrispondente alla prima riga della prima matrice ed il vettore corrispondentealla prima colonna della seconda matrice:

> (rbind(Y[1,,1]))[,1] [,2] [,3]

[1,] 1 4 7> (cbind(Y[,1,2]))

[,1][1,] 10[2,] 11[3,] 12

!

Esempio 1.3.8 Costruzione della matrice A di ordine 4 " 4 con elementi nulli tranne sulladiagonale principale ove compaiono, in successione, i primi quattro interi. In sostanza dovraessere aij = 0 per i #= j e aij = i per i = j e i = 1, 2, 3, 4.Desiderando procedere, possiamo pensare di creare la matrice A ad elementi nulli e succesi-vamente rimpiazzare gli elementi della sua diagonale principale, cioe quelli per cui risulta6

row(A) ==col(A), con gli interi 1,2,3,4. In e!etti:6Si osservi il ricorso al simbolo ==; cfr. il paragrafo 1.6.

28

Page 31: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

> A<-matrix(0,nrow=4,ncol=4)> A[row(A) == col(A)]<-c(1:4)> A

[,1] [,2] [,3] [,4][1,] 1 0 0 0[2,] 0 2 0 0[3,] 0 0 3 0[4,] 0 0 0 4

Un’alternativa ci e o!erta dal ricorso alla funzione diag() che porge gli elementi della diago-nale principale della matrice indicata quale argomento; in tal caso

> A<-matrix(0,nrow=4,ncol=4)> diag(A)<-c(1:4)> A

[,1] [,2] [,3] [,4][1,] 1 0 0 0[2,] 0 2 0 0[3,] 0 0 3 0[4,] 0 0 0 4

Desiderando, quindi, costruire una matrice identita di dimensione n" n saranno su"cienti leistruzioni:

> X<-matrix(0,nrow=n,ncol=n)> diag(X)<-c(1)

lasciandone al Lettore la verifica sul campo. !

Esempio 1.3.9 Data la matrice:

A =

$

%1 2 34 1 56 7 1

&

'

definiamo due vettori riga, diciamo x e y, contenenti rispettivamente gli elementi posti allasinistra e alla destra della diagonale principale di A.Se osserviamo che gli elementi aij di A che giacciono a sinistra della diagonale sono quelliper cui i > j, cioe row(A)>col(A), mentre quelli che stanno alla destra della stessa sarannoquelli per cui i < j, cioe row(A)<col(A), abbiamo:

> A<-matrix(c(1,4,6,2,1,7,3,5,1),nrow=3,ncol=3)> x<-rbind(A[row(A) > col(A)])> y<-rbind(A[row(A) < col(A)])

ed infatti:

29

Page 32: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

> x[,1] [,2] [,3]

[1,] 4 6 7> y

[,1] [,2] [,3][1,] 2 3 5

!

Esempio 1.3.10 Dati i vettori:

x =)

35

*y =

"1 2

#

e noto che:

x · y =)

3 65 10

*x · y = 13 = xt · yt

In R impartiremo le istruzioni:

> x<-rbind(3,5)> y<-cbind(1,2)> x%*%y

[,1] [,2][1,] 3 6[2,] 5 10> y%*%x

[,1][1,] 13

Il prodotto tra vettori e/o matrici viene quindi introdotto mediante l’operatore %*%.Si noti che, coerentemente:

> t(x)%*%yError in x %*% t(y) : non-conformable arguments

!

Esempio 1.3.11 Ci proponiamo di risolvere il sistema di equazioni:+

2 x + y = 7x + 2 y = 8

Riscritto il sistema in forma matriciale:)

2 11 2

* )xy

*=

)78

*$ Ax = b $ x = A!1 b

in R impartiremo le istruzioni:

30

Page 33: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

> A<-matrix(c(2,1,1,2),nrow=2,ncol=2)> b<-cbind(c(7,8))> x<-solve(A)%*%b> x

[,1][1,] 2[2,] 3

o equivalentemente:

> A<-matrix(c(2,1,1,2),nrow=2,ncol=2)> b<-cbind(c(7,8))> x<-solve(A,b)> x

[,1][1,] 2[2,] 3

!

Esempio 1.3.12 Costruzione di matrice che contiene gli elementi di una semplice “tabellapitagorica” per gli interi da 1 a 4. Sono su"cienti le istruzioni:

> x<-cbind(c(1:4))> matrix(outer(x,x,"*"),4,4)

[,1] [,2] [,3] [,4][1,] 1 2 3 4[2,] 2 4 6 8[3,] 3 6 9 12[4,] 4 8 12 16

Al Lettore l’interpretazione dell’output dell’istruzione matrix(outer(x,x,"^"),4,4). !

Esempio 1.3.13 Calcolo delle somme di riga e di colonna della matrice:

A =

$

%30 25 20 155 10 15 203 7 10 15

&

'

Definita la matrice:

> A<-matrix(c(30,5,3,25,10,7,20,15,10,15,20,15),nrow=3,ncol=4)

i totali di riga e di colonna possono essere ottenuti applicando a ciascuna riga e colonnal’operatore sum(), cioe impartendo le istruzioni:

31

Page 34: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

> sum(A[1,]); sum(A[2,]); sum(A[3,])> sum(A[,1]); sum(A[,2]); sum(A[,3]); sum(A[,4])

Un’alternativa consiste nel ricorso alla funzione7 apply(.,.,.) i cui argomenti sono, nell’ordi-ne: la matrice su cui operare, l’identificativo per i vettori riga o colonna (1=righe, 2=colonne),nonche la funzione che si desidera applicare, nel caso in esame sum. Pertanto:

> apply(A, 1, sum)[1] 90 50 35> apply(A, 2, sum)[1] 38 42 45 50

Proprio sulla funzione apply() e basata la funzione margin.table(.,.), i cui argomenti sonola matrice di interesse e l’identificativo numerico per i vettori riga o colonna, che porge i totalidesiderati; infatti:

> margin.table(A,1)[1] 90 50 35> margin.table(A,2)[1] 38 42 45 50

Osservazione 1.3.2 E bene ricordare che, data una matrice Ar,s, cioe di ordine r " s, edindicando con 1! un generico vettore riga unitario di ordine ! si ha:

r!

i=1

aij = 1r Ar,s

s!

i=1

aij = Ar,s 1ts

r!

i=1

s!

j=1

aij = 1rAr,s 1ts

Cosı, ad esempio, nel caso della matrice A proposta:

> A<-matrix(c(30,5,3,25,10,7,20,15,10,15,20,15),nrow=3,ncol=4)> br<-rbind(c(rep(1,nrow(A))))> bs<-rbind(c(rep(1,ncol(A))))> tot.col<-br%*%A> tot.riga<-A%*%t(bs)> tot<-br%*%A%*%t(bs)> tot.col

[,1] [,2] [,3] [,4][1,] 38 42 45 50> tot.riga

[,1][1,] 90[2,] 50[3,] 35> tot

[,1][1,] 175

7Funzioni strettamente legate ad apply() sono tapply() (Esempio ??) e sapply() (Esempio ??).

32

Page 35: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

Si noti che i risultati richiesti risultano sottoforma di vettori.

Esempio 1.3.14 Data la matrice:

A =

$

%1 2 14 3 21 2 1

&

'

calcoliamo(3

2

(21 aij . Anziche operare come illustrato all’Esempio 1.3.5, in modo diretto

abbiamo:

> sum(A[c(2:3),c(1:2)])[1] 10

!

A conclusione del paragrafo, ci pare utile proporre un semplice elenco delle principalifunzioni predefinite che operano su oggetti con struttura di matrice.Con riferimento ad una generica matrice Y si ha:

• aperm(Y,k): consente di e"etturare una permutazione di Y rispetto all’argo-mento k. Evidentemente con aperm(Y) si ha la trasposta di Y;

• det(Y): calcola il determinante della matrice quadrata Y in accordo all’algoritmoQR (cfr. Esempio 1.6.7);

• diag(Y): porge gli elementi della diagonale principale di Y;

• diag(k): definisce una matrice identita di ordine (kxk);

• eigen(Y): fornisce in forma di “lista” (cfr. 1.4.1) gli autovalori e gli autovettoriassociati alla matrice simmetrica Y;

• qr(Y): procede alla decomposizione di Y secondo l’algoritmo QR, cosı come sug-gerito da Dongarra et al. (1978); la matrice dei coe!cienti della decomposizioneed altre informazioni quali il rango di Y, sono memorizzati sottoforma di “lista”(cfr. 1.4.1);

• solve(Y): porge la matrice inversa di Y;

• solve(Y,x): risolve l’equazione indicata; la soluzione e, dunque, xY!1;

• svd(Y): procede alla decomposizione di Y secondo l’algoritmo SVD, cosı comesuggerito da Dongarra et al. (1978); i risultati sono presentati sottoforma di“lista”. Per una semplice applicazione cfr. Esempio 1.6.7;

33

Page 36: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

• t(Y): porge la trasposta di Y;

• outer(x,y,funzione): costrusice una nuova matrice i cui elementi risultanoessere [i,j]=funzione(x[i],y[i],...). Se la funzione che si desidera appli-care e una funzione predefinita ( ad esempio +, *, /, , sum, ...) questa deveobbligatoriamente essere racchiusa entro virgolette, mentre cio non si applica see una funzione creata ad hoc dall’utente8. Per alcune semplici applicazioni, cfr.Esempio 1.3.12 e 2.1.11.

1.4 Oggetti complessi

Come si disse, in R e possibile costruire oggetti a loro volte costituiti da altri oggettielementari, non necessariamente della stessa modalita.Tali nuovi oggetti, che abbiamo definito complessi, sostanzialmente evitano il propa-garsi di variabili (nomi, etichette, ...) e rendono quindi piu chiara una sessione dilavoro in R. A seconda della loro natura, si distinguono in “liste” e “data frame”.

1.4.1 Liste

Le “liste” vengono definite mediante l’istruzione:

nomelista<-list(label1=object1,label2=object2,...,labeln=objectn)

dove nomelista e il nome della “lista” che si intende creare e gli argomenti di listsono oggetti elementari gia esistenti a cui si attribuisce un’etichetta (label) che ser-vira successivamente a riconoscerli ed eventualmente estrarli ad uno ad uno. Cioavviene semplicemente digitando il nome della lista seguito da quello dell’oggetto chesi desidera estrarre, preceduto, questo dal prefisso $, ad esempio nomelista$label1.I nomi che identificano gli elementi di una lista posono essere visualizzati in qualsiasimomento ricorrendo al comando names(nomelista).

Esempio 1.4.1 Creazione, a partire degli oggetti x<-seq(1:10) e a<-letters[1:5], dellalista mia.lista .Posto di attribuire all’oggetto elementare x l’etichetta dati e all’oggetto a l’etichetta stringa,il problema viene risolto ricorrendo all’istruzione:

> mia.lista<-list(dati=x,stringa=a)

La visualizzazione del contenuto di una lista avviene impartendo il comando mia.lista, ilquale porge:

8Si noti che il comando outer(x,y,*) puo essere sosituito da x %o% y.

34

Page 37: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

$dati[1] 1 2 3 4 5 6 7 8 9 10$stringa[1] "a" "b" "c" "d" "e"

In altri termini, la lista mia.lista contiene due diversi oggetti elementari, ciascuno dei qualiidentificabile dalla rispettiva etichetta preceduta dal simbolo riservato $. !

Esempio 1.4.2 Visualizzazione degli elementi contenuti in mia.lista e successiva estrazionedell’oggetto $dati. Sono suficienti i comandi:

> names(mia.lista)[1] "dati" "stringa"> mia.lista$dati[1] 1 2 3 4 5 6 7 8 9 10

E appena il caso di osservare che con nuova.x<-mia.lista$dati si crea un nuovo oggettoche conterra, appunto, gli elementi di $dati. !

Esempio 1.4.3 Si immagini che l’oggetto ms.AB, con struttura di matrice, rappresenti ladistribuzione congiunta dei caratteri colore degli occhi e colore dei capelli di 290 individui disesso maschile:

> ms.AB<-array(c(32,38,10,3,11,50,10,30,10,25,7,3,15,7,8,31),dim=c(4,4))> ms.AB

[,1] [,2] [,3] [,4][1,] 32 11 10 15[2,] 38 50 25 7[3,] 10 10 7 8[4,] 3 30 3 31

Desiderando attribuire alle modalita di ciascuna mutabile statistica (m.s.) le appropriateetichette, possiamo ricorrere ai comandi dimnames() e list() nel modo seguente:

> dimnames(ms.AB)<-list(Capelli=c("Neri","Castani","Rossi","Biondi"),Occhi = c("Neri","Castani","Verdi","Azzurri"))

ottenendo, coerentemente:

> ms.ABOcchi

Capelli Neri Castani Verdi AzzurriNeri 32 11 10 15Castani 38 50 25 7Rossi 10 10 7 8Biondi 3 30 3 31

35

Page 38: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

!

Osservazione 1.4.1 Molte procedure di analisi, oltre alla visualizzazione di un out-put standard, prevedono la creazione automatica di liste contenenti risultati intermediche possono essere riacquisiti per successive elaborazioni.E buona norma, inoltre, documentare, in fase di programmazione, le eventuali listecreate come sottoprodotto dalle funzioni via, via implementate.

1.4.2 Data frame

Analogamente alle liste, i “data frame” vengono definiti mediante l’istruzione:

nomedf<-data.frame(label1=object1,label2=object2,...,labeln=objectn)

dove manifestamente nomedf e il nome del data frame che si intende creare metre gliargomenti di data.frame sono oggetti elementari gia esistenti e di egual cardinalitaa cui e possibile attribuire un’etichetta (label) che consente di riconoscerli in modopiu spedito. Benche i data frame cosı creati abbiano struttura list, si di"erenzianodalle “liste” per come vengono estratti e gestiti i singoli componenti.Definito un data frame, a!nche i suoi elementi siano disponibili9, occorre impartireil comando attach(nomedf), in seguito al quale i singoli componenti si comportanoquali comuni variabili. Il comando detach(nomedf) scarica il data frame dall’area dilavoro.Ricordiamo, infine, che i nomi che identificano gli elementi di una data frame posonoessere visualizzati in qualsiasi istante ricorrendo al comando names(nomedf).

Esempio 1.4.4 Creazione del data frame mydata contenente, in forma compatta, due varia-bili di interesse per successive elaborazioni:

> rm(list=ls())> sex<-c("M","M","M","F","M","F","M","M","F","M","F")> age<-c(21,23,24,21,23,24,25,26,24,25,21)> mydata<-data.frame(sesso=sex,eta=age)> rm(sex, age)> mydata

sesso eta1 M 212 M 233 M 244 F 215 M 236 F 24

9Alcune funzioni, quali ad esempio lm() e +aov(), fanno tuttavia eccezione.

36

Page 39: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

7 M 258 M 269 F 2410 M 2511 F 21> ls()[1] "mydata"

> names(mydata)[1] "sesso" "eta"

> str(mydata)‘data.frame’: 11 obs. of 2 variables:$ sesso: Factor w/ 2 levels "F","M": 2 2 2 1 2 1 2 2 1 2 ...$ eta : num 21 23 24 21 23 24 25 26 24 25 ...

> mode(mydata)[1] "list"

Si noti che l’area di lavoro contiene il solo oggetto mydata, i cui componenti, peraltro, nonsono ancora disponibili, infatti:

> sessoError: Object "sesso" not found> etaError: Object "eta" not found

Desiderando e!ettuare alcune elaborazioni sui dati contenuti negli oggetti del data frame, enecessario, come gia si disse, ricorrere al comando attach(mydata); nel caso proposto, adesempio:

> attach(mydata)> cat("L’eta’ media e’:",round(sum(eta)/length(eta),2),"\n")L’eta’ media e’: 23.36> detach(mydata)

!

1.5 Modalita e struttura di un’oggetto

La modalita di un oggetto, verificabile, come si e gia detto, con il comando mode(),puo essere modificata, con le dovute cautele, ridefinendo l’oggetto tramite le istruzionias.numeric oppure as.character.Qualora un’oggetto possedesse modalita numerica, il comando typeof(oggetto), oequivalentemente storage.mode(oggetto), ci informa circa la rappresentazione in-terna degli elementi dell’oggetto indicato, che puo presentarsi come integer, real,double oppure complex, che potrebbe essere modificata con i comandi as.integer,

37

Page 40: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

as.real, as.double oppure as.complex. Si noti che in tal modo oggetti con strutturadi vettore o di matrice possono essere ridefiniti quali oggetti elementari.

Esempio 1.5.1 Definiti gli oggetti:

> x<-seq(1:5)> a<-letters[1:10]> y<-cbind(x)> Y<-matrix(log(c(1:5)),log10(c(1:5)),nrow=5,ncol=2)

si osservi il comportamento delle istruzioni:

verifica esito verifica esitomode(x) $ "numeric" storage.mode(x) $ "integer"mode(a) $ "character" storage.mode(a) $ "character"mode(y) $ "numeric" storage.mode(y) $ "integer"mode(Y) $ "numeric" storage.mode(Y) $ "double"

ed ancora:

> as.character(x)[1] "1" "2" "3" "4" "5"

> as.integer(as.character(x))[1] 1 2 3 4 5

> round(as.real(Y),3)[1] 0.000 0.693 1.099 1.386 1.609 0.000 0.693 1.099 1.386 1.609

> as.integer(Y)[1] 0 0 1 1 1 0 0 1 1 1

!

Quanto alla struttura di un oggetto, qusta puo esssere verificata con le istruzioniintuitive is.vector(), is.matrix(), is.list(), is.data.frame().

Esempio 1.5.2 Con riferimento agli oggetti di cui all’Esempio 1.5.1, abbiamo:

verifica esito verifica esitois.vector(x) $ TRUE is.matrix(x) $ FALSEis.vector(y) $ FALSE is.matrix(y) $ TRUEis.vector(Y) $ FALSE is.matrix(Y) $ TRUE

In sostanza solo gli oggetti y e Y hanno struttura di matrice secondo l’accezione dell’algebralineare; in tale ambito il primo risulta essere un vettore (riga), il secondo una matrice. !

In linea di massima, la struttura di un oggetto puo eventualmente essere modificataricorrendo ai comandi as.vector(), as.matrix(), as.data.frame(), tenendo contoche:

38

Page 41: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

• as.matrix() applicato ad un oggetto elementare lo trasforma in un vettorecolonna; quindi il comando equivale a rbind();

• se un’elemento di un data frame e alfanumerico, la matrice che si genera conas.matrix() avra modalita alfanumerica;

• data una matrice di ordine n " p, con as.data.frame() si definisce un dataframe i cui elementi corrispondono alle p colonne della matrice specificata.

1.6 Funzioni definibili dall’utente

R consente all’utente una diretta programmazione di funzioni di qualsiasi natura; inaltri termini egli potra, a seconda delle proprie esigenze, arricchire l’ambiente di lavorocon specifiche funzioni.Tra l’altro, quasi i tutti i comandi R che si utilizzano abitualmente sono funzionidefinite a partire da comandi elementari.Prima di a"rontare tale argomento, ci pare utile accennare alla possibilita di crearecicli iterativi ricorrendo, a seconda delle esigenze, ai costrutti autoesplicativi:

• for (variabile in (range)) {istruzioni}

• while (condizione) {istruzioni}

• repeat (condizione) {istruzioni}

Cosı il costrutto retto da for consente di ripetere le istruzioni contenute appunto in{istruzioni} fintanto che la variabile specificata appartiene all’insieme numericodefinito in range.Buona norma e comunque non fare ricorso a cicli iterativi quando esistono funzioniinterne che possono sopperire allo scopo che ci si prefigge.

Esempio 1.6.1 Creazione del vettore y che conterra il quadrato dei primi dieci interi:

> (y<-integer(10))[1] 0 0 0 0 0 0 0 0 0 0

> for(i in 1:10) {y[i]<-i^2}> y[1] 1 4 9 16 25 36 49 64 81 100

Ovviamente saremmo giunti allo stesso risultato in modo diretto impartendo le istruzioni:

> (y<-(c(1:10))^2)[1] 1 4 9 16 25 36 49 64 81 100

39

Page 42: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

!

Esempio 1.6.2 Creazione , a partire dall’oggetto y<-c("R"), del vettore x che conterra lareplicazione "R","R","R".Ricorrendo ad un ciclo retto da for:

> y<-c("R")> x<-for(i in 1:3){print(rep(y,i))}[1] "R"[1] "R" "R"[1] "R" "R" "R"> x[1] "R" "R" "R"

In modo diretto, ricorrendo alla funzione rep:

> y<-c("R")> (x<-rep(y,3))[1] "R" "R" "R"

!

Come un qualsiasi altro linguaggio di programmazione, R consente il ricorso a condi-zioni logiche mediante i costrutti:

• if (condizione){istruzioni}

• if (condizione){istruzioni} else {istruzioni}

• if (condizione){istruzioni} elseif {istruzioni}

tenendo a mente la tabella che segue:

simbolo significato simbolo significato== equal to != not equal to=> greater or equal to <= less or equal to&& and || or! not

Esempio 1.6.3 Si immagini che la rilevzione di un carattere quantitativo su un collettivo sta-tistico abbia fornito in corrispondenza ad un (solo) individuo una mancata risposta (“missingvalue”):

> x<-c(NA,20,21,20,23,27,25,27,25,23,20,21,27)

40

Page 43: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

Desiderando sostituire il valore mancante con la mediana delle osservazioni valide, possiamoricorrere all’istruzione:

> c(median(x[!is.na(x)]),x[!is.na(x)])[1] 23 20 21 20 23 27 25 27 25 23 20 21 27

dove median(x[!is.na(x)]) calcola appunto la mediana degli elementi di x depurati dalvalore mancante. !

Ritornando al problema inizialmente postoci, la sintassi atta alla creazione di unafunzione e:

nome<-function(parametri){comandi}

dove il nome e a cura dell’utente, in parametri e acclusa l’eventuale lista di para-metri (o meglio oggetti di natura qualsiasi) mentre in comandi sono annotate valideistruzioni R.Si noti che tutti gli oggetti definiti entro il corpo della funzione lo sono solo localmente;al fine di definirli globalmente, con le dovute cautele, si puo ricorrere, in fase didefinizione, all’assegnazione ra"orzativa <<-. A tal proposito, tuttavia, e buona normao"rire l’output sottoforma di lista o, eventualmente, di data frame.E importante, poi, osservare che una funzione puo contenere, al suo interno, altrefunzioni che, ovviamente, risulteranno definite solo localmente.Nel seguito presentiamo, a puro scopo didattico, alcuni esempi di function.

Esempio 1.6.4 Creazione della funzione ipotenusa(a,b) che calcola la misura dell’ipote-nusa di un triangolo rettangolo i cui cateti misurano a e b.

> ipotenusa<-function(a,b){sqrt(a^2+b^2)}1

Il successivo comando ipotenusa(10,12) porge il risultato 15.6205.Si osservi il comportamento delle istruzioni:

> ipotenusa(1,1)[1] 1.414214> ipotenusa(c(1:5),1)[1] 1.414214 2.236068 3.162278 4.123106 5.099020

!

Esempio 1.6.5 Creazione della funzione disp.nk che provvede al calcolo delle disposizionisenza ripetizione nk! = n (n % 1) · · · (n % k + 1). Sono su"cienti le istruzioni:

> disp.nk<-function(n,k){prod(n:(n-k+1))}1

41

Page 44: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

Cosı, ad esempio:

> for (n in 1:4) print(disp.nk(n,n))[1] 1[1] 2[1] 6[1] 24

Alla luce di quanto sopra, si e tentati di scrivere una semplice funzione per il calcolo dei coef-ficienti binomiali

,nk

-, con k & n; cio puo essere evitato ricorrendo al comando choose(n,k),

infatti, ad esempio:

> choose(10,c(0:10))[1] 1 10 45 120 210 252 210 120 45 10 1

!

Esempio 1.6.6 Creazione della funzione somma che, partendo da una matrice di input, prov-vede al calcolo della somma generale, nonche delle somme di riga e di colonna; i risutativerranno inseriti nell’oggetto temporaneo con struttura di lista somma.out, che potra esserevisualizzato o memorizzato a seconda delle esigenze dell’utente:

> somma<-function(X,print=TRUE,print.out=FALSE)1

{2

if(is.data.frame(X)) {X<-as.matrix(X)}3

if (!is.matrix(X)) {stop("X deve essere una matrice")}4

t.riga<-apply(X,1,sum)5

t.col<-apply(X,2,sum)6

t<-sum(X)7

somma.out<-list(tot.riga=t.riga,tot.col=t.col,tot=t)8

if(print==TRUE) {return(somma.out)}9

if(print.out==TRUE) {somma.out<<-somma.out}10

}11

A commento:

— in riga [1] viene definita la funzione somma che ha quale unico input l’oggetto matricecon struttura di matrice. Le due opzioni print=TRUE e print.out=FALSE fissano lasituazione di default: i risultati vengono visualizzati ma non memorizzati in un oggettoin uscita dalla funzione;

— il corpo della funzione e racchiuso entro le righe [2] e [11];

— le righe [3] e [4] eseguono un controllo sull’oggetto X di input, il quale deve averestruttura di matrice o di data frame; se tale condizione non e soddisfatta la funzionevisualizza un avviso di errore;

42

Page 45: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

— le righe [5], [6] e [7] provvedono ai calcoli richiesti ed in riga [8] viene definito l’oggettosomma.out con struttura di lista contenente, appunto, i risultati;

— in riga [9] a seconda del valore TRUE o FALSE assunto dalla variabile flag print vienevisualizzata la lsita somma.out;

— in riga [10] a seconda del valore TRUE o FALSE assunto dalla variabile flag print.outviene creata la lsita in uscita somma.out. Generalmente tali condizioni vengono scrittein modo compatto: if(print) e if(print.out).

Cosı con riferimento, ad esempio, alla matrice:

A =)

1 32 4

*

avremo:

> A<-matrix(c(1:4),nrow=2,ncol=2)> somma(A)$tot.riga[1] 4 6$tot.col[1] 3 7$tot[1] 10

> somma(A,print=FALSE,print.out=TRUE)> somma.out$tot.riga[1] 4 6$tot.col[1] 3 7$tot[1] 10

!

Esempio 1.6.7 Come gia si disse, il calcolo del determinante di una matrice quadrata Ypuo essere svolto tramite la funzione det() che, perlomeno nella situazione di default, ricorrealla funzione qr(Y). Lo stesso risultato lo si puo ottenere tramite la funzione svd(Y), la quale(Dongarra et al. 1978) procede alla decomposizione di Y come:

Y = UDVt

dove U e V sono matrici con colonne ortonormali di dimensione pari a ncol(Y) e ncol(Y)rispettivamente, mentre D e una matrice diagonale contenente i valori singolari di Y. I risul-tati di interesse della decomposizione, proposti sottoforma di lista sono $d, vettore contenentei valori singolari di Y, $u, matrice le cui colonne corrispondono agli autovettori sinistri di Ye $v, matrice le cui colonne corrispondono agli autovettori destri di Y.

43

Page 46: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

Il valore assoluto del determinante di Y corrisponde dunque al prodotto degli elementi delladiagonale principale di D. Quanto al segno del determinante, esso sara negativo se il numerodei valori singolari di Y e pari, positivo altrimenti; tale condizione viene verificata tramitelength(diag(Y))%%2. Possiamo, quindi, scrivere la seguente funzione:

> det.new<-function(Y)1

{2

det<-prod(svd(Y)$d)3

if (length(diag(Y))%%2 == 1) {-det}4

else {det}5

}6

Cosı, ad esempio:

> (M<-matrix(c(1,1,0,1,1,1,0,1,1),nrow=3,ncol=3))[,1] [,2] [,3]

[1,] 1 1 0[2,] 1 1 1[3,] 0 1 1

> det.new(M)[1] -1

> det(M)[1] -1

!

1.7 Su alcune funzioni matematiche

Presentiamo alcune funzioni matematiche che possono tornare utili per la risoluzionedi specifici problemi e necessitano in input di oggetti di tipo expression o function.In forma schematica, abbiamo:

• D(funzione,"variabile"): consente il calcolo simbolico della derivata primadi una funzione, definita quale expression(), rispetto alla variabile di interesse,che dovra essere indicata sottoforma di stringa.

Esempio 1.7.1 Data la funzione f(x, y) = exp(%(x2 + y2)), ci proponiamo di:

— calcolare simbolicamente le derivate prime parziali:

> f<-expression(exp(-(x^2+y^2)))> D(f,"x")-exp(-(x^2 + y^2)) * (2 * x)> D(f,"y")-exp(-(x^2 + y^2)) * (2 * y)

44

Page 47: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

— valutare il determinante (f!!

xx f!!

yy % f!!

xy) della matrice hessiana in corrispondenza alpunto di coordinate (x = 0, y = 0):

> x<-0> y<-0> eval(D(D(f,"x"),"x"))*eval(D(D(f,"y"),"y")) - 2*eval(D(D(f,"x"),"y"))[1] 4

Per inciso:

> D(D(f,"x"),"x")-exp(-(x^2 + y^2)) * 2 - exp(-(x^2 + y^2)) * (2 * x) * (2 * x)> D(D(f,"y"),"y")-exp(-(x^2 + y^2)) * 2 - exp(-(x^2 + y^2)) * (2 * y) * (2 * y)> D(D(f,"x"),"y")exp(-(x^2 + y^2)) * (2 * y) * (2 * x)

!

• uniroot(function(x) espressione,interval=c(a,b),tol=1e-30): ricercagli eventuali zeri della funzione f(x) definita quale function, nell’intervallo(a, b).

Esempio 1.7.2 A commento della funzione uniroot, proponiamo i seguenti problemi:

— data la funzione f(x) = x2 % 1, ricerchiamone gli zeri nell’intervallo (0, 2):

> str(uniroot(function(x) x^2-1,interval=c(0,2),tol=1e-30))List of 4$ root : num 1$ f.root : num 0$ iter : int 8$ estim.prec: num 6.51e-05

— data la funzione f(x) = (x % 1)2 (x + 1)2, ricerchiamo gli zeri della sua derivata primanell’intervallo10 (%.5, .5). Il problema sarebbe di semplice soluzione se immettessimodirettamente la derivata prima di f(x); qui, tuttavia, preferiamo calcolare (simboli-camente) f

!

x e passarne l’espressione alla funzione uniroot. A tal fine sfruttiamo leistruzioni:

> f<-expression((x-1)^2 * (x+1)^2)1

> dfdx<-as.function(list(x="x",D(f,"x")))2

> uniroot(dfdx,low=-.5,up=.5)$root3

[1] 04

10In e!etti, come si puo facilmente verificare algebricamente, f!x si annulla in corrispondenza a tre

distinti punti in (!2, 2).

45

Page 48: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

A commento e bene notare che, definita f(x) quale expression ai fini della derivazione,in riga [2] trasformiamo l’espressione ottenuta per f

!

x in function, con argomento x, :cioe:

> dfdxfunction (x = "x")2 * (x - 1) * (x + 1)^2 + (x - 1)^2 * (2 * (x + 1))

quindi passiamo l’oggetto dfdx alla funzione uniroot.

— data la funzione f(x) = exp(%x), ricerchiamo il piu piccolo valore di x per cui f(x)puo considerarsi “numericamente nulla”, cioe, ad esempio, se f(x) = 10!300. A tal finee su"ciente l’istruzione:

> str(uniroot(function(x) exp(-x)-10^(-300),interval=c(0,1000),tol=1e-30))

List of 4$ root : num 691$ f.root : num 2.37e-314$ iter : int 21$ estim.prec: num 3.41e-13

!

• optimize(function(x) espressione,interval=c(a,b),maximum=FALSE): ri-cerca un eventuale punto di minimo (o di massimo, ponendo maximum=TRUE)della funzione f(x) definita quale function, nell’intervallo (a, b).

Esempio 1.7.3 Data la funzione f(x) = sin(x), ci proponiamo di calcolarne il minimo ed ilmassimo nell’intervallo (0, 2 "). A tal fine sopperiscono le istruzioni:

> optimize(function(x) sin(x),interval=c(0,2*pi),tol=1e-30,maximum=FALSE)$minimum[1] 4.712389$objective[1] -1> optimize(function(x) sin(x),interval=c(0,2*pi),tol=1e-30,maximum=TRUE)$maximum[1] 1.570796$objective[1] 1

Si noti che, data ad esempio la funzione f(x) = x3, la ricerca di un punti di minimo (!) in(%2, 2) mediante optimize porgerebbe:

46

Page 49: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

> optimize(function(x) x^3,interval=c(-2,2),tol=1e-30,maximum=FALSE)$minimum[1] -2$objective[1] -8

risultato evidentemente privo di senso. !

• integrate(funzione,lower=, upper=,subdivisions=100): consente il cal-colo, per quadratura numerica, dell’integrale della funzione f(x) definita qualefunction nell’intervallo (a, b), finito o infinito.

Esempio 1.7.4 Data la funzione integranda f(x) = 1'2 "

exp(%x2

2 ):

> f<-function(x) (2*pi)^(-.5)*exp(-.5*x^2)

ci proponiamo di:

— calcolare il suo integrale nell’intervallo (%3, 3):

> str(integrate(f,lower=-3,upper=3))List of 5$ value : num 0.997$ abs.error : num 9.25e-07$ subdivisions: int 1$ message : chr "OK"$ call : language integrate(f = f, lower = -3, upper = 3)- attr(*, "class")= chr "integrate"

Ovviamente, per la simmetria di f(x), risulta. 3!3 f(x) dx = 2

. 30 f(x) dx; numerica-

mente, infatti:

***

— calcolare il suo integrale nell’intervallo (%(, t), con t = %3,%2.5, . . . , 0; ricorrendo adun semplice ciclo retto da for, abbiamo:

> for(b in seq(-3,0,by=.5)){cat(integrate(f, lower = -Inf, upper = b)$value,"\n")}

0.0013498990.0062096650.022750130.06680720.15865530.30853750.5

!

47

Page 50: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

1.8 Lettura e registrazione di archivi

In R vi sono sostanzialmente due modi per leggere e/o registrare archivi di dati equesti si basano sui comandi scan() - write() e read.table() - write.table()rispettivamente. A questi e giocoforza a!ancare il particolare comando data() chepermette di acquisire dati registrati in formato particolare che abitualmente fannoparte integrante dei “package” di base o aggiuntivi di R.Ricordiamo che comunque e possibile importare e/o esportare dati in formati ricono-scibili da altri pacchetti, ad esempio Excell, Oracle, SAS, Spss, ...; a tal fine, tuttavia,occorre disporre di “funzioni” o “package” ad hoc, facilmente reperibili consultandoil sito http://www.r-project.org.

1.8.1 I comandi scan() e write()

Lettura di un file di dati con struttura “blank or tab delimited” puo avvenire riccor-rendo al comando scan() la cui sintassi e:

nomelista<-scan("filename",list(label1=type,...,labeln=type))

dove filename e l’archivio dati di interesse, label sono le etichette attribuite a ciascunoggetto definito implicitamente per ciascuna colonna del file in lettura, mentre typeindica la modalita dei singoli oggetti che verranno inclusi nella lista (type=0 e type=""per oggetti con modalita numerica o alfanumerica rispettivamente). Si osservi chel’oggetto nomelista ha struttura list.

Esempio 1.8.1 La lettura del file di dati Mydata.dat con struttura “blank or tab delimited”

170 77 M182 81 M172 55 F........176 67 F

avverra previa definizione della lista mieidati ed estraendo da essa i singoli oggetti diinteresse. In pratica:

> mieidati<-scan("Mydata.dat",list(x=0,y=0,sex=""))> altezza<-mieidati$x> peso<-mieidati$y> sesso<-mieidati$sex

Una forma alternativa, meno elegante, ma forse piu chiara, potrebbe essere la creazione di unalista priva di etichette e l’attribuzione delle stesse in seconda battuta; ad esempio la letturadel file Mydata.dat potrebbe avvenire in accordo alle istruzioni:

48

Page 51: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

> mieidati<-scan("Mydata.dat",list(0,0""))> x<-mieidati[[1]]> y<-mieidati[[2]]> sex<-mieidati[[3]]

!

La scrittura, o registrazione, su file in formato “blank delimited” delle variabili diinteresse avviene con il semplice comando:

write(oggetto1,oggetto2,...,oggetton,file="filename")

Esempio 1.8.2 La scrittura sul file Mydata.dat degli oggeti x, y e w avviene con il comando

> write(x,y,w,file="Mydata.dat")

!

1.8.2 I comandi read.table() e write.table()

Mediante il comando read.table() e possibile acquisire in memeoria, sottoforma didata frame, i dati contenuti in archivi con struttura “tab delimited”. La sintassiminima del comando e:

nomedf<-read.table("filename",header = FALSE)

Gli oggetti, con struttura factors, del data frame acquisito in memoria vengonoindicati per default in V1,V2,V3,...Qualora la prima riga dell’archivio contenesse il nome delle variabili, una correttalettura si avrebbe ponendo header = TRUE e gli oggetti del data frame assumerebberotali nomi.

Esempio 1.8.3 La lettura del file di dati Mydata.tab con struttura “tab delimited”:

altezza peso sesso170 77 M182 81 M172 55 F... ... ...176 67 F

avviene tramite il semplice comando:

49

Page 52: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

> mieidati<-read.table(file="Mydata.tab",header=TRUE)> mieidati

altezza peso sesso1 170 77 M2 182 81 M3 172 55 F4 176 67 F5 170 77 M6 182 81 M7 170 77 M8 171 65 F9 170 77 M10 165 55 F11 180 77 M12 172 81 M13 160 77 M14 192 81 M15 170 77 M16 172 67 F

A questo punto con attach(mieidati) si rendono disponibili i tre oggetti altezza, peso esesso per succcessive elaborazioni. !

In modo del tutto naturale, la scrittura su file di un generico data frame avviene conil comando write.table(dataframe,file="filename").

1.8.3 Il comando data()

Sfruttando tale comando e possibile accedere in modo diretto agli archivi di datiregistrati direttamente sottoforma di lista o di data frame che, quale parte integrantedei “package” di base o aggiuntivi di R, sono abitualmente posti nelle corrispondentidirectory \library\<package>\data.A tal proposito, alcuni comandi utili sono:

• data(package=<package>): visualizza l’elenco ed eventualmente una breve de-scrizione degli archivi disponibili per il “package” specificato. Con data() si ot-tiene l’elenco del (o dei) “package” attualmente in uso, ad esempio base, ctest,modreg ..., mentre con data(package=.packages(all.available=TRUE)) si hal’elenco completo degli archivi di dati relativi a tutti i “package” presenti nelladirectory \library di R.

• help(package=<package>,<nome del file>): fornisce, se previsto, una brevedescrizione dell’archivio di dati specificato;

50

Page 53: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

• data(package=<package>,<nome del file>): carica in memoria l’archivio didati specificato.

Naturalmente l’utente puo creare *** non so dove inserirlo *** qui o, penso meglio,in un capitolo/paragrafo ad hoc sulle librerie.

1.9 Personalizzazione dell’ambiente di lavoro

L’ambiente di lavoro puo essere personalizzato, a seconda delle esigenze dell’utente,semplicemente modificando i valori di default delle diverse opzioni che definiscono adesempio il “prompt”, il numero di decimali visualizzati, la dimensione ed il layoutdella pagina in fase di stampa e molte cose ancora.Le modifiche, in linea di massima, possono essere attuate seguendo diverse vie, e piuprecisamente:

— nel corso di una sessione di lavoro. In tal caso esse avranno unicamente valoretemporaneo a meno che non si salvi l’ambiente stesso, creando cosı il file Rdata;lanciando successivamente R tramite questo, si ritroveranno modificate;

— direttamente sul file Rprofile, sı che esse divengono, per cosı dire, permanenti;

Senza entrare in dettagli, la creazione del file Rdata ci pare la soluzione migliore,anche perche in tal modo, lasciando integro il file Rprofile, si possono creare diverseconfigurazioni di R poste, ad esempio, in altrettante directory di lavoro.Desiderando ottenere l’elenco completo dei nomi delle opzioni su cui e possibileintervenire, e su!ciente digitare names(.Options), infatti:

> names(.Options)[1] "prompt" "continue" "editor"[4] "expressions" "width" "digits"[7] "contrasts" "echo" "verbose"

[10] "check.bounds" "keep.source" "keep.source.pkgs"[13] "error.messages" "ts.eps" "na.action"[16] "show.signif.stars" "show.coef.Pvalues" "warn"[19] "help.try.all.packages" "CRAN" "timeout"[22] "download.info" "encoding" "papersize"[25] "device" "pager" "unzip"[28] "mailer"

Per visualizzare i valori di default di ciascun parametro occorre digitare options()oppure str(options()); quest’ultimo porge11:

11Ovviamente a seconda della piattaforma su cui e installato R.

51

Page 54: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

> str(options())List of 28$ prompt : chr "> "$ continue : chr "+ "$ editor : chr "Nedit"$ expressions : int 500$ width : int 79$ digits : int 7$ contrasts : Named chr [1:2] "contr.treatment""contr.poly"..- attr(*, "names")= chr [1:2] "unordered" "ordered"$ echo : logi TRUE$ verbose : logi FALSE$ check.bounds : logi FALSE$ keep.source : logi TRUE$ keep.source.pkgs : logi FALSE$ error.messages : logi TRUE$ ts.eps : num 1e-05$ na.action : chr "na.omit"$ show.signif.stars : logi TRUE$ show.coef.Pvalues : logi TRUE$ warn : num 0$ help.try.all.packages: logi FALSE$ CRAN : chr "http://cran.r-project.org"$ timeout : num 60$ download.info : num 2$ encoding : int [1:256] 0 1 2 3 4 5 6 7 8 9 ...$ papersize : chr "a4"$ device : chr "X11"$ pager : chr "nedit"$ unzip : chr "tar"

Prima di procedere a modifiche dei parametri di default conviene creare una copiadegli stessi sı da poter ripristinare in qualsiasi istante la situazione di default; cio puoavvenire, ad esempio, impartendo le istruzioni:

> default.opt<-options()> ... modifiche dei parametri ...> ... elaborazioni ...> options(default.opt)

52

Page 55: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

Le modifiche dei parametri avvengono con il comando options(opzione=valore);ad esempio12:

> default.opt<-options()> pi[1] 3.141593> options(digits=20)> pi[1] 3.141592653589793> options(prompt="@->")@-> options(digits=2)@-> pi[1] 3.1@-> options(default.opt)> pi[1] 3.141593

1.10 Le librerie e loro gestione

Come si e detto, a seconda delle esigenze dell’utente,puo a volte capitare di dover di-sporre di particolari librerie matematiche, statistiche e/o grafiche aggiuntive, reperibilial sito u!ciale http://www.r-project.org oppure costruite ad hoc.Comunque sia, per un corretto funzionamento, i “package” dovranno essere posti nelladirectory \library, la quale potrebbe assumere la seguente struttura:

\library!# \base!# \ctest!# \modreg... ...!# \personale... ...!# \ts

Cio premesso, l’elenco che segue riporta in modo schematico alcuni comandi atti allagestione dei diversi “package” presenti \library:

• (.packages()): indica quali “package” sono attualmente in uso. Abitualmente,la configurazione di Rprofile prevede il caricamento della sola libreria \base;infatti:

12Si ricordi che nel numero di decimali da visualizzare e compreso il separatore.

53

Page 56: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

> (.packages())[1] "base"

• .packages(all=TRUE): fornisce la lista dei “package” disponibili in \library.Nel caso dello scrivente:

> .packages(all=TRUE)[1] "KernSmooth" "MASS" "base" "boot"[5] "bootstrap" "class" "cluster" "ctest"[9] "eda" "foreign" "integrate" "lqs"[13] "modreg" "mva" "nlme" "nls"[17] "nnet" "rnotes" "rpart" "scatterplot3d"[21] "spatial" "splines" "stepfun" "survival"[25] "ts" "xtable"

dove rnotes e una libreria creata ad hoc e contenente la maggior parte dellefunzioni introdotte nel corso del presente lavoro.

• library(): visualizza, in una finestra ad hoc, l’elenco di tutti i “package”disponibili con, a fianco, una breve descrizione degli stessi;

• library(help=<package>): porge, in una finestra apposita, un breve resocontocirca il “package” specificato;

• library(<package>): carica in memoria il “package” indicato. Cosı, ad esem-pio, desideando disporre delle funzioni definite in rnotes sara su!ciente ilcomando:

> library(rnotes)Library ‘rnotes’; Copyright (C) 2001 E.D.Isaiatype ‘help(package=rnotes)’ for summary information> (.packages())[1] "rnotes" "base"

• detach(package:<package>): scarica dalla memoria il “package” specificato.Ad esempio:

> detach(package:rnotes)> (.packages())[1] "base"

54

Page 57: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Capitolo 2

Cenni sulle procedure grafiche

Dedichiamo, ora, la nostra attenzione alla descrizione, seppur sommaria, delle prin-cipali funzioni che consentono, a partire da oggetti definiti, la creazione di grafici“standard”, precisando sin da ora che l’utente puo ridefinire tali funzioni o crearnenuove secondo le proprie necessita.E bene suddividere, perlomeno idealmente, le funzioni grafiche nelle seguenti duecategorie:

— funzioni grafiche di “primo livello”: generano il grafico specificato corredato diassi, etichette, legende, titoli. Tali funzioni, e bene ricordalo, reinizializzano lafinestra grafica;

— funzioni grafiche di “secondo livello”: consentono di sovraimporre al graficocorrente alcune informazioni aggiuntive, quali, nuovi punti, linee, commenti odaltro.

In R, inoltre, e possibile intervenire in modo diretto sui parametri di default dell’am-biente grafico, modificandone a piacere l’aspetto.

2.1 Funzioni grafiche di “primo livello”

Si tratta essenzialmente di una serie di funzioni predefinite che consentono la realiz-zazione di grafici “standard”. Tra esse val qui la pena citare le seguenti:

2.1.1 Funzione plot(x,y)

Si tratta di una funzione assai generica e il risultato e condizionato dalla modalita delprimo oggetto posto quale argomento.Infatti:

Page 58: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

— se x e y sono oggetti o vettori numerici, plot(x,y) porge il “classico” diagrammaa dispersione di y in funzione di x. Allo stesso risultato si perviene con plot(z),posto z sia una matrice (nx2) ad elementi numerici oppure una lista;

— se y rappresenta una serie storica, con plot(y) viene rappresentata la seriestessa, con in ascissa i valori dell’indice di y, cioe c(1:lenght(n)), salvo altraspecificazione.

— qualora x e y siano due oggetti con modalita factor il primo e numerica ilsecondo, plot(x,y) produce un diagramma a dispersione di y per ciascun livellodi x.

— se y e un vettore con modalita complessa, plot(y) produce un diagramma adispersione con in ordinata la parte immaginaria degli elementi di y ed in ascissaquella reale.

Tali sono gli argomenti obbligatori della funzione plot(). Il grafico o"erto, con leavvertenze di cui sopra, provvede in modo automatico (situazione di default1.) allarappresentazione dei punti di coordinate (x, y) mediante il simbolo $, alla suddivisionedegli assi x e y in intervalli uguali tra il massimo ed il minino dei valori osservati,nonche alla visualizzazione delle etichette per gli assi x e y e di un titolo che nellaforma standard e del tipo ‘Plot of ...”.Tale situazione di default puo essere modificata dall’utente ricorrendo ad un ventagliopiuttosto esteso di opzioni; tra queste val la pena menzionare:

— opzione che modifica la presentazione degli assi cartesiani:

frame.plot=TRUE grafico racchiuso in una scatola (default);frame.plot=FALSE visualizzati i soli assi delle ascisse e delle ordinate

— opzioni che alterano il campo di escursione degli assi x e/o y:

xlim(c(min,max)) ylim(c(min,max));

— opzioni che modificano il tipo di rappresentazione dei punti di coordinate (x, y).Per default essi vengono rappresentati mediante un punto ($); tale situazionepuo essere modificata ricorrendo a diverse opzioni; tra esse menzioninamo leseguenti:

1Salvo diversa configurazione dei prametri grafici; a tal proposito cfr. paragrafo 2.3

56

Page 59: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

type="l" coppie (x, y) congiunte da una linea;type="b" coppie (x, y) congiunte da una spezzata;type="s" coppie (x, y) congiunte da una spezzata a gradini;type="h" congiunge con un segmento x con il corrispondente y;type="n" coppie (x, y) non rappresentate;

— opzioni che modificano la natura degli assi x e/o y:

log="x" dati in ascissa in forma logaritmica;log="y" dati in ordinata in forma logaritmica;log="xy" entrambi gli assi in forma logaritmica;

— opzioni, valide per tutte le procedure grafiche, che permettono di modificaretitoli ed etichette:

main="stringa" il titolo presenta l’espressione in striga;xlab="stringa" l’asse x etichettato con l’espressione in striga;ylab="stringa" l’asse y etichettato con l’espressione in striga.

Evidentemente tutte le etichette scompaiono con le opzioni main="", xlab=""e ylab="". A volte puo essere utile sopprimere del tutto, con il comandoann=FALSE, le annotazioni ed inserirle successivamente a piacere tramite il co-mando title (cfr. paragrafo 2.2).

2.1.2 Funzione matplot(x,y)

Tale funzione, del tutto identica a plot per quanto concerne le diverse opzioni, se nedi"erenzia poiche permette di rappresentare piu curve su uno stesso grafico.

2.1.3 Funzione hist(x)

Tale funzione consente la creazione di un istogramma dell’oggetto numerico indicatoquale argomento.Nella situazione di default il numero delle classi dell’istogramma e calcolato suddi-videndo il campo di escursione di x in n intervalli di ugual ampiezza, avendo curadi porre n = {1 + log2 [length (x)]}. Infatti la funzione plot() contiene l’istruzionepretty(range(x),1+log2(length(x))).Tale situazione puo essere modificata a piacere dall’utente ricorrendo all’opzionebreaks=n, con n intero positivo. Ricorrendo a tale opzione, in R e possibile crea-re istogrammi di frequenze per dati raccolti in classi di modulo non costante; a talproposito, posto che x contenga 100 osservazioni comprese tra 10.5 e 29.7, l’istruzione:

> hist(x,breaks=c(10,15,20,30))

57

Page 60: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

porge un istogramma con classi (10 - 15], (15 - 20] e (20 - 30] ed in ordinata lecorrispondenti densita, ovvero i rapporti tra le frequenze assolute di classe ed il modulodella classe stessa. Una semplice applicazione e riportata all’Esempio ??.Sempre per default, in ordinata vengono riportate, per ciascuna classe, le frequenze as-solute; l’opzione freq=FALSE consente di riportare sull’asse delle ordinate le frequenzerelative2.Osserviamo, ancora, che il comando hist(...,plot=FALSE) non visualizza alcunistogramma ma crea una lista contenene i seguenti oggetti:

$breaks $counts $intensities$density $mids $xname

il cui significato e intuitivo. Per inciso, tale comportamento e proprio delle principalifunzioni grafiche, tranne plot().

2.1.4 Funzione boxplot(x,y,z,...)

Tale funzione consente di creare un diagramma a “scatola e ba!” degli oggetti nu-merici indicati quale argomento. Questi potrebbero alternativamnte corrispondereai diversi elementi di una lista o di un “data.frame”, a patto, in quest’ultimo caso,che essi abbiamo tutti la medesima cardinalita. A tal proposito, si immagini che glioggetti mate e stat contengano, rispettivamente, i voti di Matematica e di Statisticaottenuti da 10 studenti di un corso universitario:

> mate<-c(23,24,23,18,25,27,30,27,23,29)> stat<-c(24,27,21,20,27,20,30,25,18,30)

Ai fini della costruzione dei diagrammi a “scatola e ba!” di cisacuna variabile sipossono impartire i seguenti comandi del tutto equivalenti nel risultato:

> boxplot(mate,stat)> boxplot(list(mate,stat))> boxplot(data.frame(mate,stat))> boxplot(data.frame(cbind(mate,stat)))

Osserviamo, che in alcune situazioni puo accadere di avere a disposizione due oggettielementari, il primo dei quali contenente le osservazioni individuali di una variabile diinteresse, il secondo le corrispondenti modalita di un certo fattore di stratificazione; intali siuazioni, senza dovere modificare la struttura dei dati, si puo ricorrere, in fase didefinizione, all’espressione x~g, che indica che le osservazioni individuali contenute inx debbono essere stratificate in funzione delle modalita di g. Riprendendo l’esempioprecedente, potremmo impartire i comandi:

2Un’alternativa e rappresentata dall’opzione probability=TRUE.

58

Page 61: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

> voti<-c(mate,stat)> materia<-c(rep(1,10),rep(2,10))> boxplot(voti~materia)

Tra le numerose sono le opzioni, ci limitamo alle seguenti di carattere assai generale:

— range=n: consente di modificare la lunghezza dei “ba!”, che per default hannouna lughezza pari a 1.5 volte la di"erenza interquartile 3. Ponendo range=0 essisi dimensionano in modo da includere i valori estremi;

— border=colori: colora i bordi del diagramma in accordo a quanto specificatonel vettore colori;

— col=colore: la scatola viene riempita con il colore indicato;

— horizontal=FALSE: rappresenta la situazione di default; con horizontal=TRUEi diagrammi vengono ruotati di 90 gradi.

2.1.5 Funzioni qqplot(x,y) e qqnorm(x)

Il ricorso a qqplot(x,y) consente di ottenere il diagramma a dispersione dei quantilidella variabile x rispetto a quelli della variabile y, con, ovviamente, length(x) nonnecessariamente uguale a length(y).Se si ha cura di porre y<-qnorm(ppoints(length(x)),mean(x),sd(x)), allora iquantili di x sono ra"rontati con quelli di una N(µX ,"X). Un’alternativa consiste nelricorso al comando qqnorm(x), il quale porge il diagramma a dispersione dei quantilidella variabile x rispetto a quelli di una distribuzione normale standardizzata.Le opzioni di tali funzioni sono del tutto analoghe a quelle presentate a proposito diplot(x,y). Per una semplice applicazione, cfr. Esempio 4.2.3.

2.1.6 Funzione barplot(x) e piechart(x)

Tali funzioni permettono la creazione di semplici diagrammi a barre e a torta rispet-tivamente.Il loro output grafico puo essere arricchito, ad esempio,attribuendo delle etichette aciascun elemento dell’oggetto specficato quale argomento.

2.1.7 Funzione polygon(x,y)

Tramite tale funzione e possibile visualizzare poligoni i cui vertici sono contenuti neglioggetti x e y. A titolo di esempio:

3In altri termini,lasciano alla loro sinistra e destra circa il 5% delle osservazioni.

59

Page 62: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

> x<-c(9.154932,11.374214,9.313423,11.044401,8.634460,11.176227)> y<-c(12.66062,31.05207,17.42724,15.11586,22.99784,18.09190)> plot(x,y, type="n", xlab="", ylab="")> polygon(x,y,col="red")

2.1.8 Funzione curve(espressione)

Il ricorso a tale funzione consente di rappresentare graficamente sul piano cartesianodi riferimento (x, y) una qualsiasi funzione indicata in espressione, scritta qualefunzione in x. La sintassi completa, peraltro di facile interpretazione e:

curve(espressione,from,to,n = 101,add=FALSE)

Ponendo add=TRUE e possibile sovraimporre una seconda curva al grafico corrente.Un esempio di comando valido e, pertanto, curve(x^2*(1-x^2)), che potrebbe esseremigliorato definendo un intervallo in ascissa entro cui visualizzare la funzione stessa,ad esempio porre curve(x^2*(1-x^2),-1,1). In alternativa avremmo potuto definirela funzione f e successivamente rappresentarla graficamente con i comandi:

> f<-function(x) (x^2*(1-x^2))> curve(f,-1,1)

2.1.9 Funzione grid(nx,ny)

Tale funzione consente di aggiungere ad un grafico una “griglia” composta da nx"nycelle delimitate da altrettante linee tratteggiate. La situazione di default, ottenibilecon grid(), prevede un numero di celle pari al numero di “tick marks” presenti suentrambi gli assi.

2.1.10 La funzione rect(xmin,xmax,ymin,ymax)

Ricorrendo a tale funzione possiamo costruire e visualizzare rettangoli con vertici ipunti di coordinate (xmin, ymin) e (xmax, ymax) definite dall’utente.Quale esempio, suggeriamo all’utente di osservare il comportamento delle istruzioni:

> plot(c(0, 22), c(0, 22), type = "n")> k<-4*(0:5)> rect(0+k, 0+k, 2+k, 2+k)

Per inciso, e la funzione primitiva per la costruzione di istrogrammi.

60

Page 63: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

2.1.11 Funzione persp(x,y,z)

Tramite tale funzione possiamo rappresentare graficamente nello spazio cartesiano(x, y, z) una qualsiasi funzione z = f(x, y) che verra passata quale argomento. Argo-menti obbligatori di persp sono:

— i vettori x e y contenentI i punti (x, y) in corrispondenza ai quali calcolare ivalori di z = f(x, y);

— la matrice quadrata z, di dimensione length(x)"length(y), contenente ap-punto i valori di z = f(x, y).

Desiderando, ad esempio, rappresentare graficamente la funzione:

z =x2 y2

/(x2 + y2)

per x % (!10, 10) e y % (!10, 10), saranno su!cienti le istruzioni:

> x<-seq(-10, 10, length=50)1

> y<-x2

> f<-function(x,y){fz<-x^2*y^2/sqrt(x^2+y^2)}3

> z<-outer(x,y,f)4

> persp(x,y,z,theta=35,phi=35,col="lightgreen")5

A commento:

— in riga [1] e [2] si definiscono gli intervalli per x e y entro cui visualizzare lafunzione z;

— la riga [3] definisce in modo chiaro la funzione f(x, y) di interesse;

— in riga [4], per ogni coppia (x, y), calcoliamo i valori della funzione f che risul-teranno inseriti, tramite il comando outer(x,y,f), nella matrice z di ordinedim(z)=length(x)"length(x), ovvero 50 " 50;

— in riga [5] il comando persp(...) visualizza il grafico richiesto.

Se osserviamo che la sintassi completa del comando e:

persp(x=seq(0,1,len=nrow(z)),y=seq(0,1,len=ncol(z)),z,xlim=range(x),ylim=range(y),zlim=range(z,na.rm=TRUE),xlab=NULL,ylab=NULL,zlab=NULL,main=NULL,sub=NULL,theta=0,phi=15,r=sqrt(3),d=1,scale=TRUE,expand=1,col=NULL,border=NULL,ltheta=-135,lphi=0,shade=NA,box=TRUE,axes=TRUE,nticks=5,ticktype="simple",...)

61

Page 64: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

la sintassi minima sara dunque persp(z). Per ulteriori applicazioni, cfr. Esempi ??e **.

2.1.12 Funzione pairs(x)

Ricorrendo a tale funzione e possibile, partendo da una matrice x contenente poniamos & 2 colonne che rappresentano altrettante variabili di interesse, creare i diagrammia dispersione tra tutte le (s2 ! s) combinazioni delle variabili oggetto di studio. Lasintassi per accedere a tale funzione e, nella sua veste piu dimessa, pairs(x).Tra le diverse opzioni, vale la pena menzionare:

— panel=function(x,y,...): consente di sovraimprimere ai diagrammi a di-spersione una particolare funzione grafica definita dall’utente, ad esempio laseguente, che sovraimpone a ciascun diagramma a dispersione la corrispondenteretta di regressione:

panel.fit<-function(x,y,col=par("col"),pch=par("pch"),cex=1){

points(x,y,pch=pch,col=col,cex=cex)lines(x,lm(y~x)$coef[1]+lm(y~x)$coef[2]*x,col="red")

}

che puo essere attivata con il comando pairs(x,panel=panel.fit). Lasciamoal Lettore il commento della funzione proposta alla luce di quanto esposto aiparagrafi 2.2 e 2.3 e 6.2.1.

Una funzione predefinita in R e panel.smooth, la quale aggiunge, a ciascungrafico, una particolare curva di regressione cosı come proposto da Cleveland(1981);

— diag.panel=function(x,y,...): permette di inserire sulla diagonale princi-pale della “matrice dei diagrammi a dispersione”, in luogo dei nomi delle svariabili coinvolte (situazione di default), particolari funzioni grafiche a secon-da delle esigenze dell’utente. A tal proposito, pensando di rappresentare le sdistribuzioni marginali mediante semplici istogrammi di frequenze, potremmodefinire la seguente funzione4:

>panel.hist<-function(x, ...){

4Per ragioni di comodo, le altezze degli istogrammi corrispondono alle frequenze assolute diviseper il massimo di esse.

62

Page 65: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

usr<-par("usr")par(usr=c(usr[1:2],0,1.5) )istogramma<-hist(x,plot=FALSE)tagli<-istogramma$breaksntagli<-length(tagli)y<-istogramma$counts/max(istogramma$counts)rect(tagli[-ntagli],0,tagli[-1],y,col="lightblue")par(usr=c(0,1,0,1))

}

che puo essere attivata con il comando pairs(x,diag.panel=panel.hist). La-sciamo al Lettore il commento della funzione proposta, e cio alla luce di quantoesposto ai paragrafi 2.2 e 2.3. Per una semplice applicazione, cfr. Esempio 3.2.6.

— lower.panel=function(x,y,...) e upper.panel=function(x,y,...): con-sentono di inserire nelle celle, rispettivamente, a sinistra e a destra della diago-nale principale della matrice dei diagrammi a disersione, particolari funzionide-finite dall’utente. Per un’applicazione, cfr. Esempio 3.2.6.

2.1.13 Altre funzioni grafiche

Oltre a quelle citate, in R sono implementate diverse altre funzioni grafiche utiliqualora si a"ronti lo studio di particolari problemi. Senza entrare in dettaglio, cilimitano a fornirne un mero elenco, invitando il Lettore a consultare l’aiuto in lineao il manuale di riferimento R Core Team (2000):

contour(x,y,z) coplot(...) dotplot(x)image(x,y,z) stripplot(x) sunflowerplot(x,y)

2.2 Funzioni grafiche di “secondo livello”

A volte i grafici ottenuti in modo automatico mediante le funzioni di “primo livel-lo” non corrispondono a quanto desiderato, nel senso che possono mancare dettagli,informazioni aggiuntive, ...Le funzioni di “secondo livello” possono esserci di aiuto, dal momento che esse vengonosemplicemente sovraimposte all’output grafico corrente. Di esse ci limitamo a citarele seguenti:

• abline(a,b): aggiunge un segmento di retta di equazione y = a + bx al graficocorrente;

63

Page 66: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

• abline(h=y), abline(v=x): permettono di aggiungere un segmento di ret-ta orrizontale e verticale rispettivamente a partire dalle coordinate y e/o xspecificate;

• arrows(x0,y0,x1,y1,code=k,length=n,angle=m): disegna una freccia tra ipunti di coordinate (x0, y0) e (x1, y1). Quanto al parametro code: se code=1 lafreccia e disegnata nel punto (x0, y0), se code=2 nel punto (x1, y1) mentre se sispecifica code=3 si hanno due frecce, la prima in (x0, y0) e la seconda in (x1, y1).Il parametro length indica la lunghezza (in pollici) dei segmenti della freccia,mentre angle ne determina la divaricazione.

• lines(x,y): permette di tracciare una “linea”, secondo i valori contenuti in xe y, al grafico corrente;

• points(x,y): consente di aggiungere punti, in accordo alle coordinate specifi-cate, al grafico corrente;

• segments(x0,y0,x1,y1): traccia un segmento di retta congiungente i punti dicoordinate (x0, y0) e (x1, y1);

• text(x,y,stringa): permette di inserire, a partire dalle coordinate (x, y) spe-cificate, il testo contenuto in stringa. Consigliamo all’utente di osservarel’output generato dalle istruzioni:

> plot(1:20,type="n")> for (i in (1:20)){text(i,i, letters[i])}

• title(main="...",xlab="...",ylab="...",): consente di inserire etichetteper il titolo del grafico, per l’asse della ascisse e per quello delle ordinate. Si notiche occorre porre, al momento della creazione del grafico stesso, ann=FALSE.

2.3 Parametri grafici

Non sempre i grafici prodotti in modo automatico ed eventualmente arricchiti me-diante le funzioni di “secondo livello” soddisfano le esigenze, ad esempio tipografiche,dell’utente.Egli, tuttavia, puo agire direttamente sui parametri di default delle funzioni grafichedi R, che, identificate da un nome proprio, definiscono ad esempio il tipo di caratteri,lo stile delle linee e/o dei punti, la giustificazione del testo, il layout della finestragrafica e molte cose ancora.L’elenco completo dei nomi dei 68 parametri grafici si ottinene digitando .Pars:

64

Page 67: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

> .Pars[1] "adj" "ann" "ask" "bg" "bty"[6] "cex" "cex.axis" "cex.lab" "cex.main" "cex.sub"

[11] "cin" "col" "col.axis" "col.lab" "col.main"[16] "col.sub" "cra" "crt" "csi" "cxy"[21] "din" "err" "fg" "fig" "fin"[26] "font" "font.axis" "font.lab" "font.main" "font.sub"[31] "gamma" "lab" "las" "lty" "lwd"[36] "mai" "mar" "mex" "mfcol" "mfg"[41] "mfrow" "mgp" "mkh" "new" "oma"[46] "omd" "omi" "pch" "pin" "plt"[51] "ps" "pty" "smo" "srt" "tck"[56] "tcl" "tmag" "type" "usr" "xaxp"[61] "xaxs" "xaxt" "xlog" "xpd" "yaxp"[66] "yaxs" "yaxt" "ylog"

mentre con par() si ottiene corrispondente lista dei valori di default. Desiderandoottenere informazioni circa un parametro di interesse, possiamo impartire il comandopar("parametro"); ad esempio con:

> par("type")[1] "p"

veniamo a sapere che per default la rappresentazione dei punti avviene in accordoall’opzione type="p". Un’eventuale modifica dei parametri grafici puo avvenire conil comando par(parametro=nuovi valori); ad esempio:

> par(type="l")> par("type")[1] "l"

Prima di procedere a modifiche dei parametri di default, che come si e detto sonocontenuti in par(), conviene creare una copia degli stessi, sı da ripristinarne, a finesessione, l’originale; cio puo avvenire, ad esempio, impartendo le istruzioni:

> default.par<-par> ... modifiche dei parametri ...> ... rappresentazioni grafiche ad hoc ...> par(default.par)

Data la complessita dell’argomento, ci limitiamo ad elencare il comportamento deiseguenti parametri:

65

Page 68: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

• bg="colore": modifica il colore dello sfondo (“background”). Per default siha bg="white". I colori possibili, identificati da un nome e/o da un numeroprogressivo, sono ben 657; il loro elenco si puo ottenere con colors() oppure,piu elegantemente, con colours();

• cex=n: riduce o aumenta l’output grafico nella poporzione n specificata. Perdefault cex=1;

• col="colore": modifica il colore dell’output grafico (linee, punti, ...); perdefault si ha bg="white";

• fin=c(x,y): determina la dimensione, in pollici, dell’output grafico. La situa-zione di default prevede fin=c(5,5);

• font.lab=1, font.main=2: tipo dei caratteri per la rappresentazione delleetichette per gli assi cartesiani e del titolo. Generalmente 1=testo normale,2=grassetto, 3=corsivo e 4=corsivo grassetto;

• cex.lab=1, cex.main=1.2: ingrandimento dei caratteri per la rappresentazionedelle etichette per gli assi cartesiani e del titolo;

• lab=c(nx,ny): consente di modificare il numero delle etichette, “tickmarks”,da apporre su entrambi gli assi di un grafico;

• lty="tipo": modifica il tipo di tratteggio nella rappresentazione di linee (“linetype”); la situazione di default prevede lty="solid". I tipi di tratteggio pre-visti, identificabili da un nome e/o da un numero progressivo da 0 a 6, sono,nell’ordine, "blank", "solid", "dashed", "dotted" "dotdash", "longdash" e"twodash";

• mfrow=c(r, s) consente di suddividere la finestra grafica in una matrice r xs, i cui elementi saranno gli output generati dalle funzioni hist(), plot(), ...La situazione di default viene ristabilita mediante mfrow=c(1, 1). Il compor-tamento di mfcol=c(r, s) e del tutto analogo;

• pch=n: modifica il tipo di simbolo impiegato per la rappresentazione delle coppiedi punti (x, y) della funzione plot(); n e un intero compreso tra 0 e 20. Perdefault si ha pch=1;

• tmag=n: modifica la dimensione dei caratteri dei titoli, annotazioni, etichette,...Per default si ha tmag=1.

• usr=c(x1, x2, y1, y2): indica le coordinate “estreme” della regione grafica;per default si ha usr=c(0,1,0,1).

66

Page 69: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Capitolo 3

Argomenti di statistica descrittiva

Nel seguito vedremo come a"rontare in R alcuni semplici argomenti di Statistica de-scrittiva quali la costruzione di istogrammi, diagrammi a barre, diagrammi a disper-sione, diagrammi a “scatola e ba!”, la creazione di tabelle di frequenze per variabilie/o mutabili statistiche sia univariate che bivariate, il calcolo alcuni indici di posizionee/o di variabilita,

l’individuazione dei coe!cienti di un modello di interpolazione a minimi quadrati,il calcolo del coe!ciente di correlazione lineare, l’individuazione dei parametri di unaretta di regressione, ...Per comodita presenteremo i diversi problemi sottoforma di paragrafo *** comandi efunzioni ad hoc*** , poi, faremo riferimento, di volta in volta, alle variabili contenutenegli archivi:

— stat1.txt: misurazioni della statura (cm) e del peso (Kg) di 100 coscritti;

— stat2.txt: numero di televisori e numero di autovetture posseduti da 50 fami-glie;

— stat3.txt: reddito netto mensile, espresso in euro, percepito da 110 individui,di cui 50 lavoratori autonomi e 60 lavoratori dipendenti;

— stat4.txt: titolo di studio (licenza elementare, licenza media superiore, diplo-ma universitario e laurea), posizione professionale (operaio, impiegato e quadro)e sesso di 50 dipendenti di una grande azienda;

— stat5.txt: numero (in migliaia di unita) degli occupati, suddivisi per sesso, inItalia negli anni 1982 ! 1990, fonte ISTAT;

— stat6.txt: voti, espressi in trentesimi, degli esami di Matematica Generalee di Statistica di un gruppo di 40 studenti iscritti ad un corso di Diploma inEconomia.

che verranno acquisite in memoria via read.table(file="<nome del file>").

Page 70: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

3.1 Mutabili e variabili statistiche univariate

Nel seguito vedremo come a"rontare in R alcuni semplici argomenti di Statistica de-scrittiva quali la costruzione di istogrammi, diagrammi a barre, diagrammi a disper-sione, diagrammi a “scatola e ba!”, la creazione di tabelle di frequenze per variabilie/o mutabili statistiche sia univariate che bivariate, il calcolo alcuni indici di posizionee/o di variabilita,

3.1.1 Costruzione di semplici tabelle di frequenze

La costruzione di semplici distribuzioni di frequenze, in termini assoluti e/o relativi,per una mutabile o variabile statistica, le cui osservazioni individuali sono contenutenell’oggetto x, avviene semplicemente utilizzando il comando table(x).Tale modo di procedere puo dare luogo a tabelle di di!cile lettura e tale e il casoqualora la mutabile o la variabile statistica in esame presenti un elevato numero dimodalita. In tali situazioni, com’e noto, si suole procedere ad una classificazione dellemodalita, ovvero raccogliere le osservazioni individuali in “classi”. In R cio e possibilericorrendo al comando cut, la cui sintassi e:

cut(x,breaks=ncl,right=TRUE)

dove ncl indica appunto il numero delle classi desiderate1 o, in alternativa, i limitisuperiori di classe, mentre con right=TRUE, ciascuna classe viene ad essere “chiusa adestra”.

Esempio 3.1.1 Acquisite in memoria le due variabili contenute in stat1.txt mediante icomandi:

> stat1<-read.table(file="stat1.txt")> names(stat1)[1] "altezza" "peso"> attach(stat1)

ci proponiamo di visualizzarne la distribuzione di frequenze assolute. Con riferimento allasola variabile altezza, abbiamo:

> table(altezza)altezza164.7 166.3 167.2 167.4 167.8 167.9 168.5 169.1 169.2 169.3 169.4 170.6 170.8

1 1 1 1 1 1 1 1 1 1 1 1 1171 171.3 171.4 172 172.6 173.6 173.8 174.2 174.5 174.6 174.9 175 175.4

1In tal caso spetta ad R individuare l’ampiezza, costante, delle singole classi nonche i limiti inferioree superiore delle stesse.

68

Page 71: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

1 1 1 1 1 1 2 1 1 1 1 2 4175.6 175.9 176 176.2 176.5 176.7 177 177.2 178.1 178.2 178.5 178.6 178.9

3 1 1 2 2 1 1 2 3 1 1 1 1179.2 179.3 179.5 179.9 180 180.1 180.3 180.4 180.8 180.9 181.1 181.3 181.4

1 2 2 2 1 1 1 1 2 1 1 1 1181.5 181.9 182 182.4 182.5 182.8 183.1 183.6 184.2 184.8 184.9 185 185.1

1 1 2 1 1 1 2 2 2 1 1 2 1185.2 185.3 185.5 186.4 186.7 186.9 187.1 187.3 187.4 188.4 190.9 191 192.5

1 1 1 1 1 1 1 2 1 1 1 1 1

manifestamente di di"cile lettura. Una migliore leggibilita la si ottiene raccogliendo i datiindividuali in classi, ad esempio, di egual ampiezza; scelto di raccogliere i dati individuali in7 classi e lasciando a R individuare l’ampiezza ed i limiti di ciascuna di esse, avremo:

> table(cut(altezza,breaks=7))

(165,169] (169,173] (173,177] (177,181] (181,185] (185,189] (189,193]7 11 22 22 19 16 3

Una via alternativa consiste nell’indicare il limite inferiore della prima classe, l’ampiezza diclasse ed il loro numero. Nel caso dell’altezza possiamo porre immaginare di raccogliere i datiindividuali in 7 classi di modulo 5 cm a partire da 165 cm. In tal caso:

> table(cut(altezza,breaks=160+5*(0:7)))

(160,165] (165,170] (170,175] (175,180] (180,185] (185,190] (190,195]1 10 16 32 26 12 3

In sostanza, per le variabili in esame, definiti per chiarezza espositiva gli oggetti:

> (classi.alt<-160+5*(0:7))[1] 160 165 170 175 180 185 190 195> (classi.peso<-70+5*(0:5))[1] 70 75 80 85 90 95

abbiamo:

> table(cut(altezza,breaks=classi.alt))

(160,165] (165,170] (170,175] (175,180] (180,185] (185,190] (190,195]1 10 16 32 26 12 3

> table(cut(peso,breaks=classi.peso))

(70,75] (75,80] (80,85] (85,90] (90,95]12 31 41 15 1

69

Page 72: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

Qualora si operi su variabili statistiche, potrebbe essere interessante ripartire i valori indivi-duali in tre classi a seconda che essi cadano entro il primo quartile, tra il primo ed il terzo,oltre il terzo; a tal fine, abbiamo approntato la seguente funzione ad hoc:

> classi.speciali<-function(x){as.real(c(min(x),quantile(x,prob=.25),quantile(x,prob=.75),max(x)))

}

la quale ci consente di ottenere, per le variabili in esame, le seguenti distribuzioni di frequenze:

> table(cut(altezza,breaks=classi.speciali(altezza)))

(165,175] (175,183] (183,192]24 50 25

> table(cut(peso,breaks=classi.speciali(peso)))

(70.6,76.8] (76.8,84.1] (84.1,91.5]25 49 25

Cio facendo possono evidentemente ottenersi distribuzioni di frequenze con classi di modulonon necessariamente costante. !

A volte capita che alle osservazioni di un carattere di interesse sia asssociata unavariabile di stratificazione; ad esempio:

— la statura in funzione del sesso;

— il reddito annuo lordo in funzione del numero dei componenti il nucleo familiare;

— il rapporto tra prezzo ed utile di titoli azionari su diverse borse;

— ...

Se tale e il caso, possiamo immaginare di suddividere le osservazioni individuali delcarattere in tanti gruppi quanti indicato dalle modalita assunte dalla variabile distratificazione f; a cio sopperisce, appunto, il comando split, la cui sintassi e:

split(x,f)

dove f e generalmente un oggetto a valori numerici interi consecutivi di lunghezzapari a length(x), ovvero esso protrebbe possedere modalita factor.In ogni caso con split viene creata una lista i cui elementi sono gli elementi contenutiin x in corrispondenza a ciascuna modalita della stessa.

70

Page 73: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

Esempio 3.1.2 L’archivio stat3.dat contiene, sottoforma di data frame, i valori del redditonetto mensile, espresso in euro, percepito da 110 individui, di cui 50 lavoratori autonomi e60 lavoratori dipendenti. L’archivio in questione e strutturato in modo che la prima colonnariporti le misurazioni dei redditi e la seconda una variabile di tipo “flag” che assume valore 1se il reddito proviene da lavoro autonomo e valore 2 se esso proviene da lavoro dipendente.Aquisiti i dati individuali mediante le istruzioni:

> redditi<-read.table(file="stat3.txt")> names(redditi)[1] "reddito" "posizione"> attach(redditi)

e desiderando, nel seguito, analizzare separatamente la distribuzione dei redditi dei lavoratoriautonomi e quella dei lavoratori dipendenti, sfruttando la funzione split, che porgerebbe:

> split(reddito,posizione)$"1"[1] 1949 1967 1797 1812 1855 1698 1855 1703 1989 1865 2099 2054 2080

[14] 1801 1810 2020 2105 1767 2011 1986 1977 1882 1911 1868 1672 1963[27] 1929 1909 1868 2079 1793 1897 1977 1672 2012 1875 1689 1820 1631[40] 1906 2103 1616 1939 1703 1593 1782 1979 1630 1761 1761

$"2"[1] 1182 1652 1495 1770 1654 1430 1479 1357 1559 1625 1420 1858 1400

[14] 1688 1475 1386 1750 1629 1548 1468 1532 1435 1535 1306 1228 1191[27] 1532 1084 1602 1524 1563 1551 1202 1285 1177 1886 1604 1785 1428[40] 1249 1720 1098 1600 1301 1624 1392 1239 1492 1078 1530 1443 1566[53] 1396 1524 1418 1548 1367 1371 1419 1178

possiamo creare i due nuovi oggetti:

> reddito.aut<-split(reddito,posizione)$"1"> reddito.dip<-split(reddito,posizione)$"2"

su cui sara possibile operare, ad esempio:

> table(cut(reddito.aut,breaks=1550+150*(0:4)))

(1550,1700] (1700,1850] (1850,2000] (2000,2150]8 12 21 9

!

71

Page 74: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

3.1.2 Rappresentazioni grafiche

Parallelamente alla presentazione di tabelle di frequenze, il comportamento del carat-tere statistico sotto esame puo essere riassunto mediante opportuni grafici, ricordandoche in linea di massima:

— per le mutabili statistiche si fa ricorso a semplici diagrammi a barre ovvero adiagrammi circolari o a torta;

— per le variabili statistiche si ricorre ad istogrammi o a diagrammi a bastoncini,a seconda che la variabile sia di tipo continuo o discreto.

Inlotre, nel caso si operi su variabili statistiche, puo essere interessante evidenziarel’andamento della funzione delle frequenze cumulate oppure ricorrere a semplici “bo-xplot”, o diagrammi a “scatola e ba!”; com’e noto, tali rappresentazioni graficheo"rono informazioni intuitive circa i quantili, la variabilita e l’eventuale simmetriadella distribuzione del carattere in esame.

Esempio 3.1.3 Con riferimento alla variabile statistica altezza di cui all’Esempio 3.1.1,mantenendo il raggruppamento in classi:

> (classi.alt<-160+5*(0:7))[1] 160 165 170 175 180 185 190 195

l’istogramma di frequenze relative e la funzione delle frequenze relative cumulate, riportati infigura (3.1), sono ottenuti mediante le istruzioni:

> fcum.classi.alt<-c(0,cumsum(table(cut(altezza,breaks=classi.alt)))1

/length(altezza))2

> par(mfrow=c(1, 2))3

> hist(altezza,breaks=classi.alt,probability=TRUE,col="light yellow",4

main="",xlab="Classi di altezza",ylab="Frequenze relative")5

> plot(classi.alt,fcum.classi.alt,col="blue",xlab="Classi di altezza",6

ylab="Frequenze relative cumulate",main="",frame.plot=FALSE)7

> lines(classi.alt,fcum.classi.alt,col="red")8

> grid()9

> par(mfrow=c(1, 1))10

A commento, si noti che:

— al fine della rappresentazione grafica della funzione delle frequenze relative cumulatedella variabile statistica in esame, occorre dapprima procedere al calcolo2 delle frequenzerelative cumulate, calcolate, linee [1]-[2], ricorrendo alle funzioni cumsum(variabile) elength(variabile);

2Perlomeno per motivi di chiarezza espositiva.

72

Page 75: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

Classi di altezzaClassi di altezza

Freq

uenz

e re

lativ

e

160160 170170 180180 190190

0.00

0.02

0.04

0.06

160160 170170 180180 190190

0.0

0.2

0.4

0.6

0.8

1.0

Classi di altezzaClassi di altezza

Freq

uenz

e re

lativ

e cu

mul

ate

Figura 3.1: Istogramma e funzione di frequenze cumulate — Esempio 3.1.2

— desiderando rappresentare sul piano cartesiano anche i punti di coordinate del tipo(u, w), dove u rappresentano gli estremi superiori di classe e w i valori delle frequenzerelative cumulate, converra dapprima rappresentare tali punti e successivamente, trami-te il comando lines(), tracciare la spezzata che li congiunge. Si osservino le istruzioniin linea [6], [7] e [8].

A risultati simili a quelli sopra descritti saremmo potuti giungere mediante l’istruzione:

> plot(classi.alt,fcum.classi.alt,type="b")

lasciandone al Lettore la verifica sul campo. !

Esempio 3.1.4 Con riferimento alle variabile statistica reddito.aut definita all’Esempio3.1.2, i comandi che seguono producono gli istogrammi proposti in figura (3.2):

> par(mfrow=c(1,2))> hist(reddito.aut,probability=TRUE,col="light yellow",

main="",xlab="Calssi di reddito",ylab="Frequenze relative")> hist(reddito.aut,breaks=c(1500,1700,1800,2000,2150),col="light yellow",

main="",xlab="Calssi di reddito",ylab="Frequenze relative")> par(mfrow=c(1,1))

di immediata interpretazione. !

73

Page 76: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

Calssi di redditoCalssi di reddito

Freq

uenz

e re

lativ

e

15001500 17001700 19001900 21002100

0.00

000.

0010

0.00

20

Calssi di redditoCalssi di reddito

Freq

uenz

e re

lativ

e

15001500 17001700 19001900 21002100

0.00

000.

0010

0.00

20

Figura 3.2: Istogrammi con classi a modulo costante e non costante— Esempio 3.1.3

Esempio 3.1.5 Sempre con riferimento alle variabili reddito.aut e reddito.dip introdotteall’Esempio 3.1.2, il grafico a “scatola e ba"” riprodotto in figura (3.3) ed ottenuto mediantele istruzioni:

> boxplot(reddito.aut,reddito.dip,reddito,col="light yellow",names=c("Autonomo","Dipendente","Autonomo+Dipendente"))

evidenzia come ci si trovi in presenza di due diverse distribuzioni dei redditi. In particolare,si noti come la distribuzione dei redditi da lavoro autonomo sia tutta spostata verso l’altorispetto a quella dei redditi da lavoro dipendente. Inoltre, mentre entrambe le distribuzionitendano ad essere simmetriche (si noti la posizione delle rispettive mediane all’interno della“scatola”), i redditi da lavoro dipendente mostrano una maggiore variabilita.Volutamente il grafico di figura (3.3) riporta anche il “boxplot” relativo alla variabile reddito.I “diagrammi a scatola e ba"” delle sole due variabili reddito.aut e reddito.dip possonoessere ottenuti in modo diretto tramite il comando:

> boxplot(reddito.aut,reddito.dip,names=c("Autonomo","Dipendente"))

o, alternativamente:

74

Page 77: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

AutonomoAutonomo DipendenteDipendente Autonomo+DipendenteAutonomo+Dipendente

1200

1400

1600

1800

2000

Figura 3.3: Diagramma a “scatola e ba!” — Esempio 3.1.5

> boxplot(split(reddito,posizione),names=c("Autonomo","Dipendente"))

cioe senza dovere introdurre le variabili reddito.aut e reddito.dip !

Esempio 3.1.6 Per cose ormai note, introdotto per comodita l’oggetto:

> x<-nchar(apropos(".",mode="function"))

il successivo comando table(x) porge la distribuzione, in termini di frequenze assolute, delnumero di caratteri delle funzioni definite in R:

> table(x)x

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1724 34 59 85 115 122 129 104 114 91 90 82 70 51 42 32 2518 19 20 21 22 23 24 2629 14 18 13 3 2 1 1

La distribuzione di tale variable discreta puo essere riassunta graficamente mediante un dia-gramma a bastoncini e, per completezza, la corrispondente funzione delle frequenze relativecumulate; a tal fine sono su"cienti le istruzioni:

75

Page 78: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

020

4060

8010

012

0

Numero di caratteriNumero di caratteri

Freq

uenz

e as

solu

te

11 44 77 1010 1414 1818 2222 2626 00 55 1010 1515 2020 2525

0.0

0.2

0.4

0.6

0.8

1.0

Classi di altezzaClassi di altezza

Freq

uenz

e re

lativ

e cu

mul

ate

Figura 3.4: Diagramma a bastoncini e funzione cumulativa — Esempio 3.2.1

> fcum.x<-cumsum(table(x))/length(x)> par(mfrow=c(1,2))> plot(table(x),type="h",main="",xlab="Numero di caratteri",

ylab="Frequenze assolute",col="blue")> plot(sort(unique(x)),fcum.x,main="",xlab="Classi di altezza",

ylab="Frequenze relative cumulate",type="s",col="blue")> par(mfrow=c(1,1))

che producono i grafici desiderati riportati in figura (3.4). !

A conclusione del paragrafo, osserviamo che qualora si operi con variabili statistichecontinue, l’istogramma costituisce un’approssimazione della “curva di densita”, dicia-mo f(x), che caratterizza la variabile in esame; immaginando che le classi abbianoampiezza costante h, tale approssimazione avviene attribuendo a tutti i punti x % IRappartenenti alla i-esima classe, il medesimo valore ni/n h. Sotto tale profilo, appa-re evidente come la determinazione del numero delle classi sia quanto mai delicata;un numero di classi esiguo comporta in genere una perdita di informazione mentreun numero elevato di classi puo produrre grafici incoerenti, ad esempio alcune classipotranno avere frequenze nulle o quasi.Un diverso approccio al problema ci e o"erto da quelle tecniche che in Statistica vannosotto il nome di teoria della stima non parametrica di una densita; su tal argomento

76

Page 79: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

si possosno consultare i testi introduttivi di Bowman, Azzalini (1997) e Wand, Jones(1995).Senza entrare in dettagli, vale qui la pena accennare, perlomeno dal punto di vistaoperativo, al cosidetto metodo della finestra mobile o della stima a kernel, secondo ilquale in corrispondenza ad un prefissato x % IR si costruisce una classe ]x! h

2 ;x+ h2 [,

di ampiezza appunto h e, indicando con nx il numero delle osservazioni individuali checadono nella classe stessa, l’approssimazione di f(x) verra data dal rapporto nx/n h;naturalmente iterando tale processo su tutto IR si perverra all’approssimazione f(x)di f(x). Generalizzando, si potrebbe dimostrare che f(x) soddisfa la relazione:

f(x) =1

n hK(

x ! xi

h)

dove K, detta funzione kernel, e la funzione indicatrice in ] ! 1/2; 1/2[ e pertantoK(u) = 1 per !1/2 ' u < 1/2.In pratica, si preferisce ricorrere a funzioni kernel che o"rano una migliore “lisciatura”per f(x); tra queste citiamo il kernel gaussiano, per cui K(u) = (2#)!1 exp!u2/2.Ovviamente, resta aperto, come nel caso dell’approssimazione mediante un istogram-ma, il problema della scelta di h. A tal proposito la letteratura specialistica abbondadi proposte di metodi analitici ed empirici; per dettagli si rimanda ancora ai testi diBowman, Azzalini (1997) e Wand, Jones (1995) ed alla bibliografia ivi citata.In R e possibile eseguire una si"atta analisi ricorrendo alla funzione density, la cuisintassi minima, supponendo che le osservazioni individuali del carattere continuo inesame siano raccolte nell’oggetto x, e:

density(x)

che, ricorrendo per default ad una funzione kernel gaussiana, e visualizza alcune in-formazioni circa la variabile di input, il valore proposto per h, nonche alcune misureriassuntive sui 512 valori x e i corrispondenti valori di ordinata y = f(x). Questi, inparticolare, possono essere estratti dalla lista creata dalla funzione stessa con i con-sueti comandi density(x)$x e density(x)$y ed utilizzati per altri fini, ad esempiola visualizzazione della funzione f(x) mediante l’istruzione:

> plot(density(x)$x,density(x)$y)

Esempio 3.1.7 Riprendendo i dati relativi ai redditi e contenuti in stat3.txt:

> redditi<-read.table(file="stat3.txt")> attach(redditi)

77

Page 80: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

(a) 6 classi - modulo = 200(a) 6 classi - modulo = 200

Classi di redditoClassi di reddito

Freq

uenz

e re

lativ

e

10001000 14001400 18001800 220022000.00

000.

0006

0.00

12

(b) 8 classi - modulo = 150(b) 8 classi - modulo = 150

Classi di redditoClassi di reddito

Freq

uenz

e re

lativ

e

10001000 14001400 18001800 220022000.00

000.

0006

0.00

12(c) 12 classi - modulo = 100(c) 12 classi - modulo = 100

Classi di redditoClassi di reddito

Freq

uenz

e re

lativ

e

10001000 14001400 18001800 220022000.00

000.

0006

0.00

12

(d) 15 classi - modulo = 80(d) 15 classi - modulo = 80

Classi di redditoClassi di reddito

Freq

uenz

e re

lativ

e

10001000 14001400 18001800 220022000.00

000.

0006

0.00

12

Figura 3.5: Istogrammi della distribuzione dei redditi — Esempio 3.2.2

la figura (3.5) riporta alcuni istogrammi per la variabile reddito costruiti ipotizzando quattrodiversi raccoglimenti in classi dei dati individuali; in particolare l’istogramma (c) suggerisce uncomportamento bimodale della distribuzione in esame, il che fa supporre di essere in presenzadi due diverse distribuzioni quanto a parametri di scala e, probabilmente, di variabilita.Alle stesse conclusioni saremmo giunti e!ettuando una “stima a kernel” mediante la funzionedensity; infatti il comportamento bimodale della distribuzione dei redditi viene evidenziatodai grafici riportati in figura (3.6), ottenuti mediante le istruzioni:

> par(mfrow=c(1,2))1

> plot(density(reddito),main="Kernel normale - h = 92.55",xlab="Reddito",2

ylab="",col="red",cex.main=1,font.main=1,frame.plot=FALSE)3

> hist(reddito,breaks=12,probability=TRUE,main="",4

xlab="Classi di reddito",ylab="",col="light yellow",cex.main=1,5

font.main=1,xlim=c(min(density(reddito)$x),max(density(reddito)$x)))6

> lines(density(reddito)$x,density(reddito)$y,type="l",col="red")7

> par(mfrow=c(1,1))8

78

Page 81: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

10001000 15001500 20002000

0.00

000.

0004

0.00

080.

0012

Kernel normale - h = 92.55Kernel normale - h = 92.55

RedditoReddito Classi di redditoClassi di reddito

10001000 15001500 20002000

0.00

000.

0004

0.00

080.

0012

Figura 3.6: Stima a kernel della distribuzione dei redditi — Esempio 3.2.2

a commento delle quali, ci limitiamo ad osservare che, a parte alcune consuete opzioni diformato (main="...", xlab="...", ..., frame.plot=...):

— in riga [2] e [3] si richiede il grafico di f(x) nella forma plot(density(reddito)), inalternativa a:

plot(density(reddito)$x,density(reddito)$y,type="l",...)

— le righe [4], [5] e [6] consentono di visualizzare l’istogramma, articolato su 12 classi amodulo costante, della variabile in esame, nell’intervallo:

xlim=c(min(density(reddito)$x),max(density(reddito)$x))

— in riga [7], infine, all’istogramma viene sovraimposto il grafico di f(x).

Si noti che, in “modo automatico”, R propone quale valore per h:

> density(reddito)$bw[1] 92.54717

Valori maggiori o minori di h produrrebbero, come emerge dai grafici riportati in figura (3.7),curve o troppo “liscie” o troppo “aderenti” alle osservazioni individuali. !

79

Page 82: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

500500 10001000 15001500 20002000 25002500

0.00

000.

0005

0.00

100.

0015

Kernel normale - h = 200Kernel normale - h = 200

RedditoReddito

10001000 14001400 18001800 22002200

0.00

000.

0005

0.00

100.

0015

Kernel normale - h = 30Kernel normale - h = 30

RedditoReddito

Figura 3.7: Stime a kernel della distribuzione dei redditi — Esempio 3.2.2

3.1.3 Su alcune misure di sintesi

Sulle principali funzioni statistiche, per cosı dire “primitive”, si e gia detto in (1.2.5),pertanto nel seguito a"ronteremo alcuni problemi specifici che porteranno alla crea-zione di funzioni ad hoc o all’impiego di particolari funzioni predefinite.

La funzione stat.base

In molti casi, potrebbe essere di qualche utilita, perlomeno nella prima fase di descri-zione di un carattere statistico quantitativo, disporre di una semplice funzione che,a seconda del vettore di dati in ingresso, calcoli e visualizzi le principali misure diposizione e di variabilita. Tale funzione, a cui daremo il nome stat.base, potrebbeassumere la forma:

stat.base <-function(x,digits=4)1

{2

n.oss<-length(x)3

ris<-c(1:10)4

ris[1]<-round(mean(x),digits)5

ris[2]<-round(median(x),digits)6

ris[3]<-round(quantile(x,0.25),digits)7

80

Page 83: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

ris[4]<-round(quantile(x,0.75), digits)8

ris[5]<-round(quantile(x,0.75)-quantile(x,0.25),digits)9

ris[6]<-round(max(x)-min(x), digits)10

ris[7]<-round(var(x)*(sum(x)-1)/(sum(x)),digits)11

ris[8]<-round((var(x)*(sum(x)-1)/(sum(x)))^.5,digits)12

ris[9]<-round(sum(x),digits)13

ris[10]<-round(var(x)*(sum(x)-1),digits)14

ris<-matrix(ris,ncol=1)15

dimnames(ris)<-list(c("Media","Mediana:","I quartile:",16

"III quartile:","Diff. Interquartile:","Range:","Varianza:",17

"S.q.m.:","Somma:","Devianza"),"")18

cat("Vettore dei dati individuali: ", deparse(substitute(x)),19

"\nOsservazioni: ", n.oss,20

"\n--------------------","\nStatistiche:","\n")21

return(ris)22

}23

A commento, si osservi:

— il ricorso alla definizione del vettore ris i, cui elementi sono ris[i] con eviden-temente i = 1, 2, . . . , 10;

— l’impiego della funzione dimnames(ris) quale lista contenente le stringhe diidentificazione di ciascun risultato proposto;

— l’uso della funzione deparse(substitute(x)) che fa apparire a fianco dell’eti-chetta "Vettore dei dati individuali:" il vero nome della variabile oggettodi studio;

— l’impiego di round(oggetto,digits) dove, per default, si ha digits=4; situa-zione che potrebbe essere modificata ricorrendo a stat(oggetto,digits=n),con n intero positivo.

Esempio 3.1.8 Con riferimento alla sola variabile altezza contenuta in stat1.txt, il ricorsoalla funzione stat.base produrrebbe:

> stat1<-read.table(file="stat1.txt")> attach(stat1)> stat.base(altezza)Vettore dei dati individuali: altezzaOsservazioni: 100--------------------Statistiche:

81

Page 84: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

Media 178.5150Mediana: 178.7500I quartile: 174.9750III quartile: 182.8750Diff. Interquartile: 7.9000Range: 27.8000Varianza: 36.8736S.q.m.: 6.0724Somma: 17851.5000Devianza 658248.4568

> detach(stat1)

!

Le di!erenze assolute medie

In R non e implementata alcuna funzione che permetta il calcolo delle di"erenzeassolute medie con (o senza) ripetizione, sicche l’utente e obbligato a ricorrere ad unafunzione creata ad hoc.Ricordando che, operando sui dati individuali x!, $ = 1, 2, . . . n, le di"erenze assolutemedie sono definite come:

#R =

!n

!=1

!n

"=1|x! ! x"|

n2 # =

!n

!=1

!n

"=1|x! ! x"|

n (n ! 1)

a seconda che esse siano, rispettivamente, con o senza ripetizione, a fini operativi sarasu!ciente calcolare la quantita posta a numeratore, la quale puo essere posta nellaforma:

1D1t (3.1)

dove D indica la matrice quadrata delle di"erenze in modulo |x! ! x"|, cioe:

D =

$

000000%

|x1 ! x1| . . . |x1 ! x"| . . . |x1 ! xn|. . . . . . . . . . . . · · ·

|x! ! x1| . . . |x! ! x"| . . . |x! ! xn|. . . . . . . . . . . . · · ·

|xn ! x1| . . . |xn ! x" | . . . |xn ! xn|

&

111111'

mentre 1 e un vettore riga ad elementi unitari.Cio premesso, osservando che la (3.1) equivale al calcolo della somma degli elementi diD ed ipotizzando che le n osservazioni individuali del carattere quantitaivo in esamesiano raccolte nell’oggetto x, si possono impartire direttamente i comandi:

82

Page 85: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

x<-rbind(x)1

s.dif<-sum(abs(matrix(outer(x,x,"-"),ncol(x),ncol(x))))2

s.dif/length(x)^23

s.dif/(length(x)*(length(x)-1))4

a commento dei quali osserviamo:

— in riga [1] si ridefinisce x quale vettore riga;

— in riga [2] si procede al calcolo della (3.1), il cui risultato viene inserito nell’og-getto s.dif. Si noti che la matrice D viene individuata mediante la sempliceistruzione:

abs(matrix(outer(x,x,"-"),ncol(x),ncol(x)))

— le righe [3] e [4] porgono, rispettivamente, le di"erenze assolute medie conripetizione e senza ripetizione.

Esempio 3.1.9 Posto che x contenga gli interi consecutivi da 1 a 4, abbiamo:

> x<-rbind(1:4)> s.dif<-sum(abs(matrix(outer(x,x,"-"),ncol(x),ncol(x))))> s.dif/length(x)^2[1] 1.25> s.dif/(length(x)*(length(x)-1))[1] 1.666667

In particolare:

> abs(matrix(outer(x,x,"-"),ncol(x),ncol(x)))[,1] [,2] [,3] [,4]

[1,] 0 1 2 3[2,] 1 0 1 2[3,] 2 1 0 1[4,] 3 2 1 0> sum(abs(matrix(outer(x,x,"-"),ncol(x),ncol(x))))[1] 20

come il Lettore puo facilmente verificare. !

Qualora l’utente non disponesse dei dati individuali x!, ma unicamente della distri-buzione di frequenze {xi, ni}i=1,2,...,k del carattere quantitativo in esame, allora la

83

Page 86: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

quantita posta a numeratore delle di"erenze assolute medie con o senza ripetizionerisulterebbe:

k!

i=1

k!

j=1

|xi ! xj |ni nj

e in tal caso si trattera di calcolare:

nDnt (3.2)

dove D indica la matrice quadrata, di dimensione k " k, delle di"erenze in modulo|xi ! xj|, mentre n e un vettore riga i cui k elementi corrispondono alle frequenzeassolute ni. Quindi, ipotizzando che gli oggetti xi e ni contengano, rispettivamente,le k modalita quantitative del carattere in esame e le corrispondenti frequenze assolute,si possono impartire direttamente i comandi:

> xi<-rbind(xi)> ni<-rbind(ni)> s.dif<-ni%*%abs(matrix(outer(xi,xi,"-"),ncol(xi),ncol(xi)))%*%t(ni)> s.dif/sum(ni)^2> s.dif/(sum(ni)*(sum(ni)-1))

Cio premesso, la funzione difemedie che segue si occupa del calcolo delle di"erenzeassolute medie con e senza ripetizione e cio indipendentemente dal fatto che qualeinput si immetta il solo vettore x delle osservazioni individuali oppure i due vettori, xe ni contenenti, rispettivamente, le k modalita rilevate del carattere e le corrispondentifrequenze assolute:

difmedie<-function(x,ni,decimali=4,print.out=TRUE)1

{2

if (!is.matrix(x)){x<-rbind(x)}3

if (missing(ni)){ni<-rep(1,length(x))}4

if (!missing(ni) && !is.matrix(ni)){ni<-rbind(ni)}5

s.dif<-ni%*%abs(matrix(outer(x,x,"-"),ncol(x),ncol(x)))%*%t(ni)6

delta.cr<-s.dif/sum(ni)^27

delta.sr<-s.dif/(sum(ni)*(sum(ni)-1))8

if (print.out)9

{10

cat(" Dif. medie CR -> ",round(delta.cr,decimali),"\n")11

cat(" Dif. medie SR -> ",round(delta.sr,decimali),"\n")12

}13

invisible(list(D.cr=as.real(delta.cr),D.sr=as.real(delta.sr)))14

}15

84

Page 87: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

A commento della funzione proposta:

— in riga [3] si controlla che l’oggetto in entrata sia un vettore; in caso contrariosi provvede alla sua trasformazione locale;

— in riga [4], si crea, qualora non sia stato definito in modo esplicito, il vettoreunitario ni, mentre in riga [5], verificata l’esistenza dell’oggetto in entrata nicontenente le frequenze assolute, lo si trasforma, se e il caso, in un vettore;

— in riga [6] si procede al calcolo della (3.2), mentre le righe [7] e [8] si occupanodel calcolo delle di"erenze assolute medie con ripetizione (delta.cr) e senzaripetizione (delta.sr);

— in riga [9] il controllo if (print.out) consente di visualizzare i risultati, apatto che print.out=TRUE (situazione di default);

— le righe [11] e [12] visualizzano i risulati desiderati;

— in riga [14] viene creata una lista contenente i risultati che puo servire a visua-lizzare, e se e il caso utilizzare per successive elaborazioni, uno dei due oggettidelta.cr o delta.cr.

Esempio 3.1.10 A puro scopo didattico, si immagini che da un’indagine e!ettuata su 60automobilisti italiani, al fine di indagare circa il numero di infrazioni al Codice della Stradacommesse nel corso dell’anno corrente, risultino i seguenti valori individuali:

0 1 0 0 4 4 0 7 0 1 0 0 0 1 1 0 2 0 0 01 0 3 1 0 4 0 0 1 0 2 0 3 0 0 0 0 0 0 00 0 0 3 0 1 0 0 2 0 0 0 1 0 0 4 0 0 1 0

Definito l’oggetto x contenente le 60 osservazioni e sfruttando la funzione difemedie, abbiamo:

> x<-c(0,1,0,0,4,4,0,7,0,1,0,0,0,1,1,0,2,0,0,0,1,0,3,1,0,4,0,0,1,0,2,0,3,0,0,0,0,0,0,0,0,0,0,3,0,1,0,0,2,0,0,0,1,0,0,4,0,0,1,0)

> difmedie(x)Dif. medie CR -> 1.2367Dif. medie SR -> 1.2576

Dal momento che la distribuzione di frequenze del carattere in esame e:

> table(x)x0 1 2 3 4 7

39 10 3 3 4 1

85

Page 88: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

saremmo giunti agli stessi risultati definendo gli oggetti xi e ni contenenti le k = 6 modalitadel carattere e le corrispondenti frequenze assolute, infatti:

> (xi<-sort(unique(x)))[1] 0 1 2 3 4 7> (ni<-as.real(table(x)))[1] 39 10 3 3 4 1> difmedie(xi,ni)

Dif. medie CR -> 1.2367Dif. medie SR -> 1.2576

Si noti che, desiderando visualizzare unicamente la di!erenza assoluta media con ripetizione,potremmo, a questo punto, impartire indi!erentemente i comandi:

> difmedie(x,print.out=FALSE)$D.cr[1] 1.236667> difmedie(xi,ni,print.out=FALSE)$D.cr[1] 1.236667

ottenendo, coerentemente, gli stessi risultati. !

Sulla stratificazione

Come gia si osservo, a volte capita che le n osservazioni individuali di un caratterepossano essere ripartite in piu gruppi (o “strati”) a seconda dalle modalita assunteda una variabile di stratificazione.Nel seguito vedremo come sia possibile, qualora di operi con un carattere quantitativo,ottenere le piu comuni misure di posizione e di variabilita per ciascun strato. A tal fine,per scioltezza espositiva, supporremo che le n osservazioni individuali del caratterein esame siano raccolte nell’oggetto x e che flag contenga le k ' n modalita, nonnecessariamente numeriche, della variabile di stratificazione.Un primo modo di procedere consiste ovviamente nel creare, ricorrendo al comandosplit, tante nuove variabili quante indicato dalla variabile di stratificazione e suciascuna di esse applicare la funzione statistica di interesse.Agli stessi risutlati, ma in modo piu “elegante”, si puo giungere sfruttando le funzionitapply o sapply, le cui sintassi, perlomeno nella veste piu dimessa, si presentano:

tapply(x,flag,funzione)

sapply(split(x,flag),funzione)

dove funzione e, in linea di massima, una qualsiasi funzione predefinita o eventual-mente definita dall’utente.Un terzo modo di risolvere il problema consiste nel ricorso alla funzione aggregate,la cui sintassi minima e:

86

Page 89: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

aggregate(x,list(flag),funzione)

la quale, sfruttando la funzione tapply, porge i risultati desiderati in forma tabellare.L’esempio che segue illustra i tre diversi approcci teste descritti.

Esempio 3.1.11 A puro scopo didattico, si immagini che su un un collettivo costituito 14 stu-denti universitari, di cui 8 di sesso maschile, si sia rilevato il voto conseguito ad un particolareesame di profitto; definiti gli oggetti elementari:

voto<-c(23,27,27,30,25,20,27,27,18,27,27,30,30,23)sesso<-c("M","M","M","M","M","M","M","M","F","F","F","F","F","F")aggregate(stat,list(sex),mean)

ci proponiamo di calcolare il voro medio in funzione del sesso:

— introducendo due nuove varibili:

> (femmine<-split(voto,sesso)$"F")[1] 18 27 27 30 30 23> (maschi<-split(voto,sesso)$"M")[1] 23 27 27 30 25 20 27 27> mean(femmine)[1] 25.83333> mean(maschi)[1] 25.75

— ricorrendo alla funzione tapply:

> tapply(voto,sesso,mean)F M

25.83333 25.75000

per cui il voto medio dei maschi e:

> as.real(tapply(voto,sesso,mean)[2])[1] 25.75

— sfruttando la funzione sapply:

> sapply(split(voto,sesso),mean)F M

25.83333 25.75000

per cui il voto medio delle femmine risulta:

> as.real(sapply(split(voto,sesso),mean)[1])[1] 25.83333

87

Page 90: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

— ricorrendo alla funzione aggregate:

> aggregate(voto,list(sesso),mean)Group.1 x

1 F 25.833332 M 25.75000

per cui il voto medio dei maschi e:

> as.real(aggregate(voto,list(sesso),mean)[2,2])[1] 25.75

!

Sui valori mancanti

Se un oggetto contiene valori mancanti, classificati come NA (acronimo di “Not Avai-lable”) l’applicazione delle funzioni statistiche comporta alcuni problemi poiche essi,per default, vengono conteggiati in length(oggetto). In e"etti le funzioni in que-stione tengono conto della possiblita di escludere i valori mancanti; ad esempio lafunzione mean e definita:

mean<-function(x,na.rm=FALSE){

if(na.rm) {x<-x[!is.na(x)]}else if(any(is.na(x))) {return(NA)}sum(x)/length(x)

}

sicche e su!ciente modificare la situazione di default na.rm=FALSE in na.rm=TRUE.Ad esempio:

> x<-c(NA,12,NA,14,15,17,21)> mean(x)[1] NA> mean(x,na.rm=TRUE)[1] 15.8

Nel seguito proponiamo due semplici alternative che a nostro avviso permettono unmaggior controllo dei valori mancanti.Le funzioni off.na(x) e rep.na(x) consentono di modificare un oggetto che presentaelementi mancanti (NA). La prima funzione si limita ad eliminarli, mentre la secondasostituisce tali valori con il valor medio o, a discrezione dell’utente, con la mediana dix. *** Per comodita i nuovi valori in uscita sono messi negli oggetti w.off e w.reprispettivamente. I listati delle due funzioni sono:

88

Page 91: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

off.na<-function(x){x<-x[!is.na(x)]}1

Cosı ad esempio:

> x<-c(NA,12,NA,14,15,17,21)> mean(off.na(x))[1] 15.8

rep.na<-function(x, media=TRUE)1

{2

if (!media){valore<-median(x[!is.na(x)])}3

else {valore<-mean(x[!is.na(x)])}4

for (i in (1:length(x))){if (is.na(x[i])==TRUE) {x[i]<-valore}}5

x<-x6

}7

> rep.na(x)The new w.rep object has been created> w.rep[1] 15.8 12.0 15.8 14.0 15.0 17.0 21.0> rep.na(x,media=FALSE)The new w.rep object has been created> w.rep[1] 15 12 15 14 15 17 21

3.1.4 Sulla concentrazione

3.2 Mutabili e variabili statistiche bivariate

3.2.1 Tabelle di frequenze doppie

3.2.2 L’indice di dipendenza chi-quadro

3.2.3 L’indice di dipendenza in media

3.2.4 Sulla correlazione lineare

Esempio 3.2.1 Con riferimento alle variabili qualitative contenute in stat4.dat, ci propo-niamo di costruire la distribuzione congiunta del titolo di studio (studio) e della posizioneprofessionale (posizio) dei 50 individui intervistati. Acquisiti i dati mediante le consueteistruzioni:

> esempio4<-read.table(file="stat4.txt")> names(esempio4)

89

Page 92: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

[1] "studio" "posizio" "sex"> attach(esempio4)

la distribuzione congiunta di frequenze assolute desiderata la si ottiene mediante l’istruzione:

> table(studio,posizio)posizio

studio 0 1 20 10 1 11 6 14 12 0 10 33 0 1 3

Desiderando migliorare la leggibilita della tabella proposta, possiamo ricorrere ai comandiarray() e dimnames(); infatti, impartite le istruzioni:

>tutti<-array(table(studio,posizio),c(length(unique(studio)),length(unique(posizio))))

> dimnames(tutti)<-list(studio = c("L.Elem.", "M.Sup.", "Dipl.","Laurea"),posizio = c("Operaio", "Impiegato", "Quadro"))

L.Elem.L.Elem.

M.Sup.M.Sup.

Dipl.Dipl.

LaureaLaurea

Titolo di studioTitolo di studio

OperaioOperaio

ImpiegatoImpiegato QuadroQuadro

Posizione professionalePosizione professionale

Figura 3.8: Diagrammi a torta — Esempio 3.1.1

otteniamo la seguente tabella:

90

Page 93: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

> tuttiposizio

studio Operaio Impiegato QuadroL.Elem. 10 1 1M.Sup. 6 14 1Dipl. 0 10 3Laurea 0 1 3

di cui in figura (3.8) riportiamo i diagrammi delle rispettive distribuzioni marginali. !

Esempio 3.2.2 Con riferimento alla situazione di cui all’Esempio 3.2.1, ci proponiamo diindividuare le distribuzioni congiunte i frequenze assolute del titolo di studio (studio) e dellaposizione professionale (posizio) condizionatamente al sesso.A tal fine (cfr. Esempio 3.1.4) possiamo ricorrere al comando split(variabile,flag); leistruzioni:

> studio.f<-split(matrice[,1],matrice[,3])$"0"> studio.m<-split(matrice[,1],matrice[,3])$"1"> posizio.f<-split(matrice[,2],matrice[,3])$"0"> posizio.m<-split(matrice[,2],matrice[,3])$"1"

ci consentono, infatti, di generare le seguenti due tabelle

> table(studio.m,posizio.m)posizio.m

studio.m 0 1 20 7 1 11 2 7 02 0 5 13 0 0 2

> table(studio.f,posizio.f)posizio.f

studio.f 0 1 20 3 0 01 4 7 12 0 5 23 0 1 1

Anche in questo caso (cfr. Esempio 3.2.1) possiamo migliorare la leggibilita delle tabellaricorrendo ai comandi array() e dimnames(); tuttavia ci pare utile disporre di una sola lista,che chiameremo ms.sex, contenente le tabelle in esame sottoforma di matrice. A tal fine:

— creiamo l’oggetto ms.sex i cui elementi sono le frequenze assolute delle distribuzionicongiunte table(studio.m,posizio.m) e table(studio.m,posizio.m); cioe:

> ms.sex<-c(c(table(studio.m,posizio.m)),c(table(studio.f,posizio.f)))

91

Page 94: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

— trasformiamo l’oggetto ms.sex in array(), con dimensioni pari al numero delle moda-lita di ciascuna m.s. considerata, mediante l’istruzione:

> ms.sex<-array(ms.sex,dim=c(length(unique(studio)),length(unique(posizio)),length(unique(sex)))

— miglioriamo la leggibilita della matrice attribuendo le appropriate etichette alla suemodalita con il comando:

> dimnames(ms.sex)<-list(studio = c("L.Elem.","M.Sup.","Dipl.","Laurea"),posizio = c("Operaio","Impiegato","Quadro"),sesso =c("Maschi","Femmine"))

In definitiva in ms.sex avremo:

> ms.sex, , sesso = Maschi

posiziostudio Operaio Impiegato Quadro

L.Elem. 7 1 1M.Sup. 2 7 0Dipl. 0 5 1Laurea 0 0 2

, , sesso = Femmineposizio

studio Operaio Impiegato QuadroL.Elem. 3 0 0M.Sup. 4 7 1Dipl. 0 5 2Laurea 0 1 1

Osservazione 3.2.1 Desiderando estrarre, per ulteriori elaborazioni, le distribuzioni con-giunte condizionate alla mutabile sesso, possiamo ricorrere ai consueti comandi, ricordandoche ms.sex e un array a tre dimensioni; ad esempio:

> ms.sex.maschi<-ms.sex[,,sesso="Maschi"]> ms.sex.femmine<-ms.sex[,,sesso="Femmine"]

!

Esempio 3.2.3 Con riferimento alla situazione descritta agli Esempi 3.2.1 e 3.2.2, ci propo-niamo ora il calcolo, per ciascuna delle due distribuzioni congiunte presenti in ms.sex, del-l’indice di dipendenza globale #2 del Pearson nonche dell’indice normalizzato V del Cramer,definiti, con ovvio significato dei simboli:

#2 =r!

i=1

r!

i=1

(nij % n2ij)

n2ij

V =)

#2

Max(#2)

*0.5

=)

#2

inf [n (r % 1); n (s % 1)]

*0.5

92

Page 95: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

A tal fine, possiamo creare una funzione ad hoc, di nome ad esempio chi.sqr, che potraassumere la forma:

chi.sqr<-function(x,decimali=4,print.out=TRUE)1

{2

if (!is.matrix(x)){3

stop("X ust be a matrix")}4

rig.tot<-apply(x, 1, sum)5

col.tot<-apply(x, 2, sum)6

tot<-sum(col.tot)7

Teor<- outer(rig.tot, col.tot, "*")/sum(x)8

Teor.out<-round(Teor,decimali)9

C<-round(x-Teor,decimali)10

Chi<-round(sum((x-Teor)^2/Teor),decimali)11

VCr<-round(Chi/(min(c(tot*(nrow(x)-1),tot*(ncol(x)-1)))),decimali)12

if (print.out)13

{14

cat("X =", Chi, "\n")15

cat("V =", VCr, "\n")16

}17

invisible(list(chi.sq=Chi,V=VCr,teorici=Teor.out,cont=C))18

}19

A commento:

— input della funzione e un oggetto con struttura di matrice; in caso contrario (riga [3] e[4]) viene visualizzato un messaggio di errore. Si noti il valore di default attribuito allavariabile logica print.out;

— i comandi in riga [5], [6] e [7] si calcolano le somme di riga, di colonna nonche la sommatotale;

— il comando outer(rig.tot, col.tot, "*")/sum(x) calcola la matrice delle frequenzeteoriche (Teor);

— le righe [9] e [10] calcolano la matrice delle frequenze teoriche (Teor.out) e la matricedelle contingenze (C.out) che verranno inserite nella lista dei risultati in uscita;

— le righe [11] e [12] si occupano del calcolo dei due indici richiesti;

— in riga [13] il controllo if (print.out) consente di procedere alla visualizzazione (inriga [15] e [16]) dei risultati, a patto che print.out=TRUE; in riga [18] si crea, nonvisualizzandola, una lista che contiene i due indici richiesti, la matrice delle matricedelle frequenze teoriche e la matrice delle contingenze.

Osservazione 3.2.2 Si noti che nella funzione chi.sqr proposta non si e fatto ricorso adalcun ciclo di calcolo iterativo.

Tornando al problema postoci, abbiamo:

93

Page 96: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

> x.m<-taglio[,,sesso="Maschi"]> x.f<-taglio[,,sesso="Femmine"]> chi.sqr(x.m)X = 25.2623V = 0.4858> chi.sqr(x.f)X = 12.8407V = 0.2675

Desiderando visualizzare il contenuto della lista in uscita dalla funzione chi.sqr, e su"cientedigitare print(chi.sqr() o print(chi.sqr(...,print.out=FALSE))). Qualora si desideriestrarre alcuni risultati per successive elaborazioni si e obbligati ad assegnare l’output dichi.sqr ad una nuova variabile (di tipo list) e successivamente da questa estrarre gli oggettidi interesse; ad esempio:

> contingenze.m<-chi.sqr(x.m,print.out=FALSE)$cont> contingenze.m

posizionestudio Operaio Impiegato Quadro

L.Elem. 3.8846 -3.5 -0.3846M.Sup. -1.1154 2.5 -1.3846Dipl. -2.0769 2.0 0.0769Laurea -0.6923 -1.0 1.6923

!

Esempio 3.2.4 L’archivio stat5.dat contiene il numero, espresso in migliaia di unita, de-gli occupati totali e suddivisi per sesso in Italia negli anni 1982 % 1990; come di consuetoacquisiamo tali dati mediante le istruzioni:

> esempio5<-read.table(file="stat5.txt")> names(esempio5)[1] "tempo" "maschi" "femmine" "mf"> attach(esempio5)

Volendo in qualche modo evidenziare l’eventuale diversita della dinamica del fenomeno inesame, conviene ragionare, piu che in valori assoluti, in termini di numeri indice a base fissa.A tal fine trasformiamo le serie maschi femmine e mf nelle corrsipondenti serie di numeriindice percentuali, ponendo quale base la situazione dell’anno iniziale, mediante i comandi:

> ind.m<-(maschi/maschi[1])*100> ind.f<-(femmine/femmine[1])*100> ind.mf<-(mf/mf[1])*100

In figura (3.9) e evidenziato l’andamento delle tre serie sia in termini di valori assoluti sia intermini di numeri indici, in base al quale si nota una “esplosione” dell’occupazione femminile.Per inciso, che il numero degli occupati di sesso femminile e aumentato, nei nove anniconsiderati, del 12.7%, mentre quello dei maschi rimasto all’incirca costante; infatti:

94

Page 97: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

19821982 19841984 19861986 19881988 19901990

5000

10000

15000

20000

25000

(a) - Valori assoluti(a) - Valori assoluti

annianni

FemmineFemmineMaschiMaschiEntrambiEntrambi

19821982 19841984 19861986 19881988 19901990

100

102

104

106

108

110

112

(b) - Numeri indice (base 1982)(b) - Numeri indice (base 1982)

annianni

FemmineFemmineMaschiMaschiEntrambiEntrambi

Figura 3.9: Occupazione italiana nel periodo 1982-1990 — Esempio 3.2.4

> ind.f[length(ind.f)]-100[1] 12.70693> ind.m[length(ind.m)]-100[1] -0.1288568

Procedendo, ci pare corretto adottare, per ciascuna serie di numeri indice, un modello inter-polante del tipo yi = a0 + a1 ti, con i = 1, 2, . . . , n, dove, ricorrendo al metodo dei minimiquadrati:

a1 =Cov(T, Y )

$2T

a0 = µY % a1 µT

Possiamo, dunque, ricorrere3 ai comandi cov(x,y) e var(x):

> n<-length(tempo)> a1<-cov(ind.m,tempo)*((n-1)/n)/var(tempo)*((n-1)/n)> a0<-mean(ind.m)-a1*mean(tempo)> a0[1] 208.1988> a1[1] -0.05458331

3Si rammenta che, come nel caso del calcolo della varianza (cfr Osservazione??), la covarianza tradue o piu v.s. viene calcolata ponendo a denominatore n ! 1 in luogo di n.

95

Page 98: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

sı che il modello interpolante a minimi quadrati risulta Maschiyi = 208.1988% 0.0546 ti.Operando in modo analogo per le altre serie di numeri indici otteniamo:

Femmineyi = %2771.763 + 1.4488 ti

Femmine+Maschiyi = %740.4797 + 0.4240 ti

I valori teorici in base ai modelli sono stati raccolti nel vettori modello.m, modello.f emodello.mf ottenuti mediante le semplici istruzioni:

> a1<-cov(ind.m,tempo)*((n-1)/n)/var(tempo)*((n-1)/n)> a0<-mean(ind.m)-a1*mean(tempo)> modello.m<-a0+a1*tempo> a1<-cov(ind.f,tempo)*((n-1)/n)/var(tempo)*((n-1)/n)> a0<-mean(ind.f)-a1*mean(tempo)> modello.f<-a0+a1*tempo> a1<-cov(ind.mf,tempo)*((n-1)/n)/var(tempo)*((n-1)/n)> a0<-mean(ind.mf)-a1*mean(tempo)> modello.mf<-a0+a1*tempo

Per completezza, in figura (3.10) e riportato l’andamento delle tre rette interpolanti.

Osservazione 3.2.3 I passi necessari ai fini della costruzione del grafico proposto in figura(3.10) sono stati:

— introduzione della variabile yrange che definisce il campo di variazione (a, b) dei valoriin ordinata:

> a<-min(min(ind.f),min(ind.m),min(ind.mf))> b<-max(max(ind.f),max(ind.m),max(ind.mf))> yrange<-c(a,b)> rm(a,b)

— costruzione del grafico di base “vuoto” (opzione type="n") con suddivisione (opzioneylim=) dell’asse delle ordinate in accordo ai valori posti in yrange, munito di titolo(opzione main=) e etichette per l’asse delle ascisse (opzione xlab=) e quello delle ordinate(opzione ylab=):

> plot(tempo,modello.m,,type="n",ylim=yrange,xlab="anni",ylab="",main="(b) - Numeri indice (base 1982)")

— rappresentazione delle coppie di punti (Y , t) con i comandi:

> points(tempo,modello.m,col="red")> points(tempo,modello.f,col="black")> points(tempo,modello.mf,col="blue")

96

Page 99: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

19821982 19841984 19861986 19881988 19901990

100

102

104

106

108

110

112

(b) - Numeri indice (base 1982)(b) - Numeri indice (base 1982)

annianni

FemmineFemmineMaschiMaschiFemmine+MaschiFemmine+Maschi

Figura 3.10: Occupazione italiana nel periodo 1982-1990 — Esempio 3.2.4

— rappresentazione delle tre rette interpolanti ricorrendo alla funzione lines(x,y); permigliorarne la leggibilita impieghiamo altrettanti tipi di tratteggio (opzione lty=). Icomandi impartiti sono:

> lines(tempo,modello.m,col="red",lty=3)> lines(tempo,modello.f,,col="black",lty=1)> lines(tempo,modello.mf,,col="blue",lty=5)

— introduzione della variabile testo, contenente il testo della legenda, e visualizzazionedella legenda stessa a partire dai punti di coordinate indicati in coord.leg:

> coord.leg<-c(min(tempo),max(ind.f))> testo<-c("Femmine","Maschi","Femmine+Maschi")> legend(coord.leg,legend=testo,col=seq(testo),lty = c(1,3,5))

E superfluo osservare che la maggior parte dei comandi presentati potrebbere essere inseritain una funzione ad hoc, sı da automatizzare le procedure. !

97

Page 100: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

Esempio 3.2.5 Con riferimento alle due variabili contenute in stat6.dat, che acquisiamomediante i consueti comandi:

> esempio6<-read.table(file="stat6.txt")> names(esempio6)[1] "mate" "stat"> attach(esempio6)

puo essere interessante evidenziare ed analizzare l’eventuale legame di dipendenza tra le v.s.Y =voto conseguito in Statistica e X =voto di ottenuto in Matematica.A tal fine, iniziamo con la presentazione della distribuzione congiunta delle v.s. in esame, che,come di consueto, otteniamo ricorrendo al comando table(); pertanto:

> table(mate,stat)

statmate 18 19 20 21 22 23 25 26 27 29 30

18 2 0 1 0 0 0 0 0 0 0 019 0 0 1 1 0 1 0 0 0 0 020 0 1 3 0 0 1 0 0 0 0 021 0 0 0 1 1 1 0 0 0 0 023 0 0 1 1 0 1 2 0 0 0 025 0 0 1 0 0 0 2 0 1 0 026 0 0 0 0 0 0 1 0 4 0 027 0 0 0 0 0 0 0 1 3 0 128 0 0 0 0 0 0 0 0 1 1 130 0 0 0 0 0 0 0 0 0 1 3

E su"ciente una rapida lettura della tabella per accorgersi di una dipendenza (in sensostatistico) tra le variabili oggetto di studio. A tal proposito4:

> chi.sqr(table(mate,stat))X = 129.637V = 0.3601

Anzi, la circostanza che buona parte delle frequenze osservate giaccia sulla diagonale principalepuo indurci a ritenere il legame di dipendenza positivo e di tipo, approssimativamente, lineare.Per sincerarsene, possiamo costruire un semplice diagramma a dispersione tra le variabilioriginarie mate e stat oppure ricorrere ad un diagramma a dispersione dei voti medi diStatistica condizionati a ciascun voto riportato in Matematica.Prima di presentare i risultati, occupiamoci del calcolo delle medie della v.s. condiziona-ta Y |X , in simboli µY |X=xi

. A tale scopo, ricorriamo alla ormai nota funzione split() esuccessivamente al nuovo comando5 sapply(). In particolare:

4Si tratta dell funzione presentata all’Esempio 3.2.3.5Il cui comportamento e simile a quello dei comandi apply() e tapply(). Argomenti sonol’oggetto

su cui operare e la funzione che si desidera applicare.

98

Page 101: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

— definiamo l’oggetto stat.m che conterra, sottoforma di lista, i voti di Statistica incorrispondenza a ciascuna modalita (o livello) del voto di Matematica;

— calcoliamo le medie di ciascun oggetto contenuto in stat.m, cioe le medie condizio-nate µY |X=xi

, con il comando sapply(stat.m,mean); i risultati, utili per successiveelaborazioni, verranno inseriti nel nuovo oggetto medie.cond.

!"!" #$#$ #### #%#% #&#& #"#" '$'$

!"#$

###%

#&#"

'$

()*+,-+,./*01/*+2/()*+,-+,./*01/*+2/

,()*+,10-+,-+,3*/*+4*+2/

Figura 3.11: Medie condizionate e spezzata di regressione — Esempio 3.2.5

Cio premesso, le istruzioni6:

> stat.m<-split(stat, mate)> media.cond<-round(sapply(stat.m, mean),4)

In definitiva le medie condizionate µY |X=xi, espresse a solo due decimali, risultano:

> round(media.cond,2)18 19 20 21 23 25 26 27 28 30

18.67 21.33 20.40 22.00 22.80 24.25 26.60 27.40 28.67 29.75

A questo punto possiamo procedere alla costruzione di un diagramma a dispersione doverappresenteremo le coppie (xi, µY |X=xi

); le istruzioni:

6Sarebbe su"ciente la sola istruzione: medie.cond<-sapply(split(stat, mate), mean).

99

Page 102: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

> plot(unique(sort(mate)),media.cond,type="p",cex=2.5,pch=20,col="red",frame.plot=FALSE,ann=FALSE,cex.main=1,font.main=1,ylim=c(18,30))

> lines(unique(sort(mate)),media.cond,col="blue")> title(main="",xlab="Voti di Matematica",ylab=" Voti medi di Statistica")

porgono il grafico riportato in figura (3.11).A questo punto, evidenziata l’esistenza, perlomeno graficamente, di un legame lineare trale variabili considerate possiamo “quantizzarla”. Innanzitutto possiamo procedere al calcolodel coeficiente di correlazione lineare del Pearson (%) che “a occhio” dovra risultare prossimoall’unita7; infatti abbiamo:

> (rho<-cor(stat,mate))[1] 0.9052952

!"!" #$#$ #### #%#% #&#& #"#" '$'$

!"#$

###%

#&#"

'$

()*+,-+,./*01/*+2/()*+,-+,./*01/*+2/

,()*+,10-+,-+,3*/*+4*+2/

Figura 3.12: Retta di regressione — Esempio 3.2.5

7Nel caso di adozione di un modello lineare esso viene a coincidere, com’e noto, con il coe"cientedi determinazione.

100

Page 103: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

Inoltre possiamo individuare i parametri della retta di regressione yi = a0 +a1 xi. Ricordandoche:

a1 =Cov(X, Y )

$2X

= %$Y

$Xa0 = µY % a1 µX

le istruzioni:

> a1<-rho*sqrt(var(stat))/sqrt(var(mate))> a0<-mean(stat)-a1*mean(mate)> modello<-a0+a1*mate

porgono:

> a1[1] 0.9078971> a0[1] 2.605864

sı che la retta di regressione viene ad assumere la forma yi = 2.6059 + 0.9079 xi, il cuiandamento e riportato in figura (3.12), ottenuto mediante le istruzioni:

> plot(unique(sort(mate)),media.cond,type="p",cex=2.5,pch=20,col="red",frame.plot=FALSE,ann=FALSE,cex.main=1,font.main=1,ylim=c(18,30))lines(mate,modello,col="blue")

!

Esempio 3.2.6 Si immagini di avere rilevato, su gruppo di n = 10 autovetture europeemedio-piccole ad alimentazione a benzina, la cilindrata (x1), la potenza espressa in CV-Din(x2), la velocita massima dichiarata (x3) ed il consumo di carburante (x4), ottenendo i risultatiche seguono:

x1 1100 1200 1000 1300 1400 1000 1100 1200 1400 1250x2 45 54 45 50 60 45 50 54 70 60x3 135 145 140 140 150 140 140 145 165 155x4 5 5.5 4.8 6.2 6.7 5 4.8 5.2 6.7 6.2

Definito8 il data frame auto, contenente tutte le informazioni:

> x1<-cbind(c(11, 12, 10, 13, 14, 10, 11, 12, 14, 12)*100)> x2<-cbind(c(45, 54, 45, 50, 60, 45, 50, 54, 70, 60))> x3<-cbind(c(135, 145, 140, 140, 150, 140, 140, 145, 165, 155))> x4<-cbind(c(5, 5.5, 4.8, 6.2, 6.7, 5, 4.8, 5.2, 6.7, 6.2))

8Meno elegantemente avremmo potuto definire la matrice X<-cbind(x1,x2,x3,x4) ed operare sudi essa attribuendo nomi appropriati ai suoi vettori colonna.

101

Page 104: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

> (auto<-data.frame(Cilindrata=x1,CV.Din=x2,Vel.max=x3,Consumo=x4))Cilindrata CV.Din Vel.max Consumo

1 1100 45 135 5.02 1200 54 145 5.53 1000 45 140 4.84 1300 50 140 6.25 1400 60 150 6.76 1000 45 140 5.07 1100 50 140 4.88 1200 54 145 5.29 1400 70 165 6.710 1200 60 155 6.2

calcoliamo la matrice dei coe"cienti di correlazione lineare tramite il semplice comando9:

> round(cor(auto),4)Cilindrata CV.Din Vel.max Consumo

Cilindrata 1.0000 0.8305 0.6889 0.9194CV.Din 0.8305 1.0000 0.9637 0.8282Vel.max 0.6889 0.9637 1.0000 0.7661Consumo 0.9194 0.8282 0.7661 1.0000

Per avere un’idea “globale” delle relazioni tra le variabili conteute in auto, possiamo pensare dicreare i diagrammi a dispersione tra tutte le 42 % 4 = 12 combinazioni delle variabili oggettodi studio. Cio puo essere attuato ricorrendo alla funzione pairs(). Tuttavia desiderandomigliorare la situazione di default, scegliamo di:

— rappresentare sulla diagonale principale gli istogrammi delle variabili x1,x2,x3 e x4; atal fine ricorriamo alla funzione panel.hist presentata in 2.1.12;

— visualizzare, nelle celle a destra della diagonale principale, i diversi coe"cienti di cor-relazione lineare; a tal fine consideriamo la nuova funzione:

panel.cor <- function(x, y, digits=2,pch=20){

par(usr = c(0, 1, 0, 1))r <- cor(x, y)txt <- paste(format(r, digits=digits),sep="")text(0.5, 0.5, txt, cex = 2)

}

A questo punto il comando:

> pairs(auto,pch = 20,diag.panel=panel.hist,upper.panel=panel.cor)

9Si osservi che stiamo operando sull’intero data frame e non sui suoi singoli componenti, per ilmomento non disponibili (cfr. paragrafo 1.4.2).

102

Page 105: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

CilindrataCilindrata

4545 5050 5555 6060 6565 7070

0.830.83 0.690.69

5.05.0 5.55.5 6.06.0 6.56.5

1000

1200

1400

0.920.92

4555

65 CV-DinCV-Din

0.960.96 0.830.83

Vel. max.Vel. max.

135

145

155

165

0.770.77

10001000 12001200 14001400

5.05.5

6.06.5

135135 145145 155155 165165

ConsumoConsumo

Figura 3.13: Matrice dei diagrammi a dispersione — Esempio 3.2.6

porge il grafico riportato in figura (3.13). Lasciamo al Lettore la verifica sul campo delcomando:

> pairs(auto,pch = 20,diag.panel=panel.hist,lower.panel=panel.cor)

!

Esempio 3.2.7 A volte capita, nel caso di analisi di una variabile statistica doppia, di di-sporre non gia dei singoli dati individuali, bensı degli stessi raccolti in distribuzione congiuntadi frequenze. In tali situazioni e sempre possibile procedere ad analisi statistiche dei dati inR, purche questi vengano acquisiti in modo corretto.Distinguiamo i casi:

— abbiamo a disposizione una tabella a doppia entrata per due caratteri qualitativi, adesempio:

103

Page 106: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

m.s. B $ b1 b2

m.s. A )a1 200 150a2 400 100a3 100 250

I dati potranno essere correttamente acquisiti in R tramite le istruzioni:

> ms.AB<-array(c(200,400,100,150,100,250),dim=c(3,2))> dimnames(ms.AB)<-list(A = c("a1", "a2", "a3"),B = c("b1", "b2"))

infatti:

> ms.ABB

A b1 b2a1 200 150a2 400 100a3 100 250

— abbiamo a disposizione una tabella a doppia entrata per due caratteri quantitativi, adesempio:

v.s. Y $ 0 1v.s. X )

0 10 201 30 10

I dati potranno essere correttamente acuisiti in R tramite le istruzioni:

> vs.XY<-array(c(10,30,20,10),dim=c(2,2))> vs.XY> vs.XY

YX 0 10 10 201 30 10

e, per ulteriori elaborazioni:

> XY<-array(c(0,0,1,1,0,1,0,1,10,20,30,10),dim=c(4,3))> XY

[,1] [,2] [,3][1,] 0 0 10[2,] 0 1 20[3,] 1 0 30[4,] 1 1 10

104

Page 107: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

!

Esempio 3.2.8 Se un oggetto contiene valori mancanti (NA) l’applicazione delle funzionistatistiche standard elencate, ad esempio, in (3.1.3) comporta alcuni problemi poiche essi, perdefault, vengono conteggiati in length(oggetto). In e!etti le funzioni in questione tengonoconto della possiblita di escludere i valori mancanti; ad esempio la funzione mean e definita:

mean<-function (x,na.rm = FALSE)1

{2

if(na.rm) {x <- x[!is.na(x)]}3

else if(any(is.na(x))) {return(NA)}4

sum(x)/length(x)5

}6

sicche e su"ciente modificare la situazione di default na.rm = FALSE in na.rm = TRUE. Adesempio:

> x<-c(NA,12,NA,14,15,17,21)> x[1] NA 12 NA 14 15 17 21> mean(x)[1] NA> mean(x,na.rm=TRUE)[1] 15.8

Nel seguito proponiamo due semplici alternative che a nostro avviso consentono un maggiorcontrollo dei valori mancanti.Le funzioni off.na(x) e rep.na(x) consentono di modificare un oggetto che presenta elementimancanti (NA). La prima funzione si limita ad eliminarli, mentre la seconda sostituisce talivalori con il valor medio o, a discrezione dell’utente, con la mediana di x. Per comodita inuovi valori in uscita sono messi negli oggetti w.off e w.rep rispettivamente. I listati delledue funzioni sono:

off.na<-function(x)1

{2

w.off<<-x[!is.na(x)]3

cat("The new w.off object has been created","\n")4

}5

Cosı ad esempio:

> x<-c(NA,12,NA,14,15,17,21)> x[1] NA 12 NA 14 15 17 21> off.na(x)The new w.off object has been created

105

Page 108: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

> w.off[1] 12 14 15 17 21> mean(w.off)[1] 15.8

rep.na<-function(x, media=TRUE)1

{2

if (!media){valore<-median(x[!is.na(x)])}3

else {valore<-mean(x[!is.na(x)])}4

for (i in (1:length(x)))5

{6

if (is.na(x[i])==TRUE) {x[i]<-valore}7

}8

w.rep<<-x9

cat("The new w.rep object has been created","\n")10

}11

> rep.na(x)The new w.rep object has been created> w.rep[1] 15.8 12.0 15.8 14.0 15.0 17.0 21.0> rep.na(x,media=FALSE)The new w.rep object has been created> w.rep[1] 15 12 15 14 15 17 21

!

106

Page 109: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Capitolo 4

Elementi di calcolo delle probabilita

In ambiente R sono implementate le principali distribuzioni di probabilita univariate.Esse sono identificate da un nome proprio che deve obbligatoriamente essere precedutoda un su!sso che indica quale aspetto di esse si desidera, ed infine dalla lista deiparametri che contraddistinguono ciascuna v.c..Quanto ai su!ssi, comuni a tutte le v.c.:

— d porge i valori della densita in corrispondenza ai valori specificati in x;

— p porge i valori della funzione di ripartizione in corrispondenza ai valori indicatiin x;

— q porge i valori dei quantili in corrispondenza ai valori elencati in prob;

— r estrae casualmente noss elementi dalla densita specificata;

Quanto alle distribuzioni di probabilita implementate, citiamo:

! binomiale

f (x) =2

nx

3px (1 ! p)n!x

dbinom(x,n, p) pbinom(x, n, p)qbinom(prob, n, p) rbinom(noss, n, p)

! binomiale negativa

f(x) =2

x + r ! 1x

3pr (1 ! p)x

dnbinom(x, r, p) pnbinom(x, r, p)qnbinom(prob, r, p) rnbinom(noss, r, p)

Page 110: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

! geometrica

f(x) = p(1 ! p)x

dgeom(x, p) pgeom(x, p)qgeom(prob, p) rgeom(noss, p)

! ipergeometrica

f(x) =

2N1

x

32N2

n ! x

3

2N1 + N2

n

3

dhyper(x, N1, N2) phyper(x, N1, N2)qhyper(prob, N1, N2) rhyper(noss, N1, N2)

! di Poisson

f(x) =%xe!#

x!

dpois(x, lambda) ppois(x, lambda)qpois(prob, lambda) rpois(noss, lambda)

! Chi-Quadro

f(x) =1

2n/2$ (n/2)xn/2!1e!x/2

dchisq(x, df) pchisq(x, df)qchisq(prob, df) rchisq(noss, df)

! esponenziale

f(x) = %e!#x

dexp(x, rate) pexp(x, rate)qexp(prob, rate) rexp(noss, rate)

! F di Snedecor

f(x) =$ (n1/2 + n2/2)$ (n1/2)$ (n2/2)

(n1

n2)

n12 xn1/2!1(1 +

n1x

n2)!(n1+n2)/2

df(x, n1, n2) pf(x, n1, n2)qf(prob, n1, n2) rf(noss, n1, n2)

108

Page 111: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

! gamma

f(x) =1

ba$ (a)xa!1e!x/b

dgamma(x, shape, scale) pgamma(x, shape, scale)qgamma(prob, shape, scale) rgamma(noss, shape, scale)

! normale

f(x) =1

"(

2#e!(x!µ)/2$2

dnorm(x, mean, sd) pnorm(x, mean, sd)qnorm(prob, mean, sd) rnorm(noss, mean, sd)

! t di Student

f(x) =$ (n + 1/2)$ (n/2)

(n#

41 + x2

526!(n+1)/2

dt(x, df) pt(x, df)qt(prob, df) rlt(noss, df)

! uniforme

f(x) =1

max ! min

dunif(x, min, max) punif(x, min, max)qunif(prob, min, max) runif(noss, min, max)

Osservazione 4.0.4 La v.c. Chi-Quadro precedentemente introdotta non e altro cheun particolare caso della distribuzione Chi-Quadro non centrale. Questa rappresentala distribuzione della somma dei quadrati di n v.c. indipendenti e normalmentedistribuite ciascuna con varianza unitaria e valor medio µi, i = 1, 2, . . . , n. La densitadi una v.c. Chi-Quadro non centrale con & gradi di liberta e parametro di noncentralita % =

(ni=1 µ2, per x & 0, e:

fnc(x) = e(!#/2)+"!

r=0

(%/2)r

r!f(x; & + 2 r)

dove f(x) indica la densita di una v.c. Chi-Quadro con & + 2 r gradi di liberta.Per una v.c. Chi-Quadro con parametro di non centralita % =ncp, si ha:

109

Page 112: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

dchisq(x, df, ncp=0) pchisq(x, df, ncp=0)qchisq(prob, df, ncp=0) rchisq(noss, df, ncp=0)

A tal proposito, osserviamo ancora la possibilita di calcolare particolari valori diinteresse della funzione di ripartizione delle distribuzioni F di Snedecor e t di Stu-dent con parametro di non centralita ncp tramite i comandi pf(t, df =,ncp=) ept(t, df =, ncp=)

4.1 Semplici esercizi sul calcolo delle probabilita

Nel seguito i limitiamo a fornire alcuni semplici esempi applicativi che coinvolgono inmodo diretto le v.c. introdotte al paragrafo precedente.

Esempio 4.1.1 Visualizzare la funzione di distribuzione di probabilita e la funzione di ripar-tizione di una v.c. binomiale di parametri n = 9, p = 0.5; le istruzioni possono essere:

> x<-c(0:9)> par(mfrow=c(1, 2))> plot(x,pbinom(x,9,.5),col="red",type="s",ann=FALSE)> title(main="(a) - Funzione di ripartizione",

xlab="Determinazioni x",ylab="P(Xx)")> plot(x,dbinom(x,9,.5),col="blue",type="h",ann=FALSE)> title(main="(b) - Distribuzione di probabilita’",

xlab="Determinazioni x",ylab="P(X=x)")> par(mfrow=c(1, 1))

il cui output e riprodotto in figura (4.1). !

Esempio 4.1.2 Ci proponiamo di visualizzare la funzione di ripartizione di una v.c. condistribuzione binomiale di parametri n = 9 e p = 0.10, 0.25, 0.50, 0.75, 0.90; le istruzionipossono essere:

> x<-c(0:9)> plot(x,pbinom(x,9,.5),xlim=c(-1,10),type="n",ann=FALSE)> title(main="",xlab="Numero di prove",ylab="P[X x]")> for(p in c(0.10,0.25,0.50,0.75,0.90))

{lines(x,pbinom(x,9,p),col=p*10,type="s")}> text(0.65,0.80,"p=0.10",cex=.75)> text(1.70,0.65,"p=0.25",cex=.75)> text(3.25,0.30,"p=0.50",cex=.75)> text(5.25,0.20,"p=0.75",cex=.75)> text(6.20,0.10,"p=0.90",cex=.75)

il cui output e riprodotto in figura (4.2).

110

Page 113: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

00 22 44 66 88

0.0

0.2

0.4

0.6

0.8

1.0

(a) - Funzione di ripartizione(a) - Funzione di ripartizione

Determinazioni xDeterminazioni x

P(X!

x)

00 22 44 66 88

0.00

0.05

0.10

0.15

0.20

0.25

(b) - Distribuzione di probabilita'(b) - Distribuzione di probabilita'

Determinazioni xDeterminazioni x

P(X=

x)

Figura 4.1: Distribuzione binomiale, n=9 e p=0.5 — Esempio 4.1.1

Esempio 4.1.3 Calcolare la probabilita all’evento {5 & X & 7}, posto che X sia una v.c.binomiale con parametri n = 10, p = 0.75; le istruzioni possono essere:

> pbinom(7,10,.75)-pbinom(5,10,.75)[1] 0.3962803

Tutto cio e piuttosto ripetitivo; la seguente funzione, in base ai parametri essenziali, porge lasoluzione desiderata:

> evento<-function(x1,x2,n,p){print(pbinom(x2,n,p)-pbinom(x1,n,p))}1

A questo punto l’istruzione evento(5,7,10,.75) restutuisce il risultato desiderato. !

Esempio 4.1.4 Calcolare i percentili di ordine 5, 15, ..., 85, 95 di una distribuzione Chi-Quadro con 10 gradi di liberta.A tal fine e su"ciente impartire l’istruzione:

> qchisq(ppoints(10), 10)[1] 3.940299 5.570059 6.737201 7.783243 8.812352[6] 9.892216 11.097142 12.548861 14.533936 18.307038

111

Page 114: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

00 22 44 66 88 1010

0.0

0.2

0.4

0.6

0.8

1.0

Numero di proveNumero di prove

P[X !

x]

p=0.10p=0.10

p=0.25p=0.25

p=0.50p=0.50

p=0.75p=0.75

p=0.90p=0.90

)

Figura 4.2: Funzioni di ripartizione di v.c. Bin(n = 9, p) — Esempio 4.1.2

!

Esempio 4.1.5 Posto X una v.c. N(µX = 120, $2X = 25), calcolare la probabilita attinente

agli eventi {X * (µX % $X)} e {(µX % $X) & X & (µX + $X)}.Sono su"cienti le istruzioni:

> mu<-120 : s<-5> 1-pnorm(115,mu,s)[1] 0.8413447> pnorm(125,mu,s)-pnorm(115,mu,s)[1] 0.6826895

!

Esempio 4.1.6 Posto X una v.c. N(0, 1), calcolare la probabilita attinente all’evento {X *x}, con x = 0, 3, (0.05).Si tratta di calcolare le probabilita della coda destra di una N(0, 1) in corrispondenza adeterminati quantili; il problema viene risolto mediante le istruzioni:

112

Page 115: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

> x<-seq(0,3,by=0.05)> n.prob.coda.dx<-1-pnorm(x,0,1)> round(n.prob.coda.dx,4)[1] 0.5000 0.4801 0.4602 0.4404 0.4207 0.4013 0.3821 0.3632 0.3446

[10] 0.3264 0.3085 0.2912 0.2743 0.2578 0.2420 0.2266 0.2119 0.1977[19] 0.1841 0.1711 0.1587 0.1469 0.1357 0.1251 0.1151 0.1056 0.0968[28] 0.0885 0.0808 0.0735 0.0668 0.0606 0.0548 0.0495 0.0446 0.0401[37] 0.0359 0.0322 0.0287 0.0256 0.0228 0.0202 0.0179 0.0158 0.0139[46] 0.0122 0.0107 0.0094 0.0082 0.0071 0.0062 0.0054 0.0047 0.0040[55] 0.0035 0.0030 0.0026 0.0022 0.0019 0.0016 0.0013

Si osservi che coerentemente:

> (n.quantili<-(qnorm(1-n.prob.coda.dx,0,1)))[1] 0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60

[14] 0.65 0.70 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25[27] 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90[40] 1.95 2.00 2.05 2.10 2.15 2.20 2.25 2.30 2.35 2.40 2.45 2.50 2.55[53] 2.60 2.65 2.70 2.75 2.80 2.85 2.90 2.95 3.00

!

Esempio 4.1.7 Per una v.c. N(0, 1) si ha P [X > 1.959964 = x"] = 0.025. Ci proponiamodi calcolare il corrispondente quantile x" per una v.c. con distribuzione t di Student congdl = 5, 200, (5) gradi di liberta.Rsiolviamo il problema ricorrendo alle istruzioni:

> prob<-0.025> gdl<-seq(5,200,by=5)> quantile.t<-qt(1-prob,gdl)> round(quantile.t,4)[1] 2.5706 2.2281 2.1314 2.0860 2.0595 2.0423 2.0301 2.0211 2.0141

[10] 2.0086 2.0040 2.0003 1.9971 1.9944 1.9921 1.9901 1.9883 1.9867[19] 1.9853 1.9840 1.9828 1.9818 1.9808 1.9799 1.9791 1.9784 1.9777[28] 1.9771 1.9765 1.9759 1.9754 1.9749 1.9744 1.9740 1.9736 1.9732[37] 1.9729 1.9725 1.9722 1.9719

!

Esempio 4.1.8 Data una v.c. Gamma(10, 5), il quantile di ordine, poniamo, 0.67 viene otte-nuto in modo diretto tramite il comando qgamma(0.67,10,5). Un’alternativa e rappresentatadal ricorso (cfr. paragrafo ??) alla funzione uniroot(); infatti:

> uniroot(function(x) pgamma(x ,10, 5) - 0.67, c(0, 100))$root[1] 55.48862> qgamma(0.67 ,10, 5)[1] 55.48862

!

113

Page 116: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

4.2 Generazione di numeri pseudo-casuali

La generazione di realizzazioni di variabili casuali1 ha diverse motivazioni, ad esempioin ambito statistico puo essere utilizzata al fine della verifica di modelli teorici odell’applicazione di metodi di simulazione quali Monte Carlo ed analoghi.Le v.c. possono essere generate a partire da numeri casuali o, meglio, dovremmodire numeri pseudo-casuali dal momento che la loro generazione avviene in accordo aspecifici algoritmi numerici. La generazione di un numero casuale puo essere intesacome la generazione di un’osservazione da una v.c. con distribuzione uniforme in(0, 1). Dal momento che la funzione di ripartizione F (·) di qualsiasi v.c. X assumevalori in (0, 1), se generiamo un numero, sia esso w, tra 0 e 1, esistera smpre un valorex tale che x = F!1(w), ovvero tale che w = F (x). In generale e assai complessoindividuare l’inversa di F (·).A titolo di esempio, si immagini di voler generare una v.c. distribuzione Bernoullianadi parametro p, ovvero:

X =+

0 1 ! p1 p

con funzione di ripartizione:

F (x) =

78

9

0 x < 01 0 ' x < 11 x & 1

Iniziamo generando un numero w da una v.c. uniforme in (0, 1); se w < 1!p possiamodefinire F!1(w) = 0, mentre se w & 1 ! p definiamo F!1(w) = 1. In altri termini,per generare una v.c. di Bernoulli di parametro p e su!ciente generare un numerocompreso tra 0 e 1 e se risulta piu piccolo di 1 ! p diciamo che X = 0 altrimenti 1.Dal momento che la condizione w < 1!p e equivalente, in probabilita, alla condizionew > p, diremo che X = 0 se w > p.

Esempio 4.2.1 Generazione di 5 realizzazioni di una v.c. con distribuzione Bernoullia-na di parametro p = 0.25. Estraiamo dapprima cinque numeri da un’uniforme in (0, 1) everifichiamo se sono minori di p:

> (w<-runif(5))[1] 0.29534834 0.21283447 0.26371730 0.93382201 0.07352568> (esito<-(w<.25)[1] FALSE TRUE FALSE FALSE TRUE

Trasformiamo, ora, gli elementi del vettore logico esito in un vettore numerico binario:1Alternativamente: generazione di numeri casuali

114

Page 117: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

> (binario<-1*esito)[1] 0 1 0 0 1

!

Come gia si disse in (4), in R sono implementate funzioni basate su algoritmi ottimiz-zati per la generazione di numeri pseudo-cauali. A commento valgano gli esempi cheseguono.

Esempio 4.2.2 Generazione di n = 10 numeri casuali tratti da una N(µX = 200, $2X = 225):

> rnorm(10,200,(225)^.5)[1] 210.0311 198.6509 216.4558 203.8878 199.0929 190.8120 199.3914[8] 188.4484 201.6433 203.5893

!

Esempio 4.2.3 Desiderando verificare, perlomeno graficamente, se n osservazioni campiona-rie possono considerarsi tratte da una distribuzione normale si puo ricorrere ad un diagrammaa dispersione avendo cura di porre in ascissa i quantili di una N(µ, $) ed in ordinata i quantilicampionari (o empirici) calcolati sulla base della n-pla osservata.Tenendo a mente quanto detto a tal proposito al paragrafo 2.1.5, cio puo essere ottenutoricorrendo al comando qqplot(x,y), dove x contiene le osservazioni campionarie e y e definitocome qnorm(ppoints(length(x)),mean(x),sd(x)), oppure tramite il comando qqnorm(x).A titolo di esempio la figura (4.3) riporta i diagrammi a dispersione dei quantili di sei campionitratti da una N(120, 20) di numerosita n = 25, (25), 150, in accordo alle seguenti istruzioni:

> par(mfrow=c(2,3))> for(n in c(25,50,75,100,125,150)){

.Random.seed<-c(1,2037680562,1033614556)qqnorm(rnorm(n),main=paste("n=",n),xlab="Quantili teorici N(0,1)",ylab=" Quantili campionari",pch=20,col=1+n)

}> par(mfrow=c(1,1))

Si noti la presenza del comando .Random.seed<-c(1,2037680562,1033614556) che consentedi rigenerare una stessa sequenza di numeri casuali; a tal proposito valga l’Osservazione 4.2.1.

!

Esempio 4.2.4 La generazione di n = 1000 numeri casuali da una v.c. con distribuzioneChi-quadro con gdl = 12 gradi di liberta puo avvenire tramite il semplice comando:

> valori.chi<-rchisq(1000,12)

115

Page 118: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

-2-2 -1-1 00 11 22

-10

12

n= 25n= 25

Quantili teorici N(0,1)Quantili teorici N(0,1)

Qua

ntili

cam

pion

ari

-2-2 -1-1 00 11 22

-2-1

01

n= 50n= 50

Quantili teorici N(0,1)Quantili teorici N(0,1)

Qua

ntili

cam

pion

ari

-2-2 -1-1 00 11 22

-2-1

01

2

n= 75n= 75

Quantili teorici N(0,1)Quantili teorici N(0,1)

Qua

ntili

cam

pion

ari

-2-2 -1-1 00 11 22

-2-1

01

2

n= 100n= 100

Quantili teorici N(0,1)Quantili teorici N(0,1)

Qua

ntili

cam

pion

ari

-2-2 -1-1 00 11 22

-2-1

01

2

n= 125n= 125

Quantili teorici N(0,1)Quantili teorici N(0,1)

Qua

ntili

cam

pion

ari

-2-2 -1-1 00 11 22

-2-1

01

2

n= 150n= 150

Quantili teorici N(0,1)Quantili teorici N(0,1)

Qua

ntili

cam

pion

ari

Figura 4.3: Campionamento da una v.c. N(0, 1): QQ-plot — Esempio 4.2.3

In figura (4.4) e riportato l’istogramma della variabile valori.chi generata nonche il dia-gramma a dispersione tra i quantili empirici e quelli teorici di una distribuzione N(0, 1); igrafici proposti sono stati generati dalle istruzioni:

> hist(valori.chi,main="",xlab="x",ylab="Frequenze assolute",col="lightgreen")

> qqnorm(valori.chi,main="",xlab="Quantili teorici N(0,1)",ylab=" Quantili campionari",pch=20,col="magenta")

Lasciamo al Lettore l’interpretazione, in termini grafici, dei risultati ottenuti. !

Osservazione 4.2.1 A volte puo tornare utile rigenerare una stessa sequenza di nu-meri casuali. A tal fine occerre conoscere e reimmettere il seme che ha generato laprima sequenza e che e immaganizzato nella variabile .Random.seed. Un modo perrisolvere il problema e il ricorso alle seguenti istruzioni:

> rbinom(5,4,.36)[1] 1 1 0 1 1

116

Page 119: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

xx

Freq

uenz

e as

solu

te

00 55 1010 2020 3030

010

020

030

0

-3-3 -2-2 -1-1 00 11 22 33

510

1520

2530

Quantili teorici N(0,1)Quantili teorici N(0,1)

Qua

ntili

cam

pion

ari

Figura 4.4: Istogramma e QQ-plot — Esempio 4.2.3

> seme<-.Random.seed> seme[1] 1 14739194 782820522> .Random.seed<-seme> rbinom(5,4,.36)[1] 1 1 0 1 1

Per approfondimenti, si vedano gli articoli di Marsaglia (1997) e Wichmann, Hill(1982) e la bibliografia ivi citata.

4.3 Il campionamento

In R e definita una particolare funzione che consente l’estrazione di un campionecasuale, di dimensione specificata, da un dato oggetto; tale estrazione puo avvenirecon o senza rimessa a seconda delle esigenze dell’utente.La sintassi estesa del comando necessario per accedere a tale funzione e:

sample(oggetto,n,replace=FALSE)

dove:

117

Page 120: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

— l’oggetto specificato puo avere modalita numerica o alfanumerica indi"erente-mente;

— n indica la dimensione del campione che si desidera estrarre. Si ricordi che perdefault si ha n=length(oggetto);

— replace=FALSE indica che l’estrazione avviene senza rimessa; tale e la situazionedi default.

Esempio 4.3.1 Estrazione senza rimessa di un campione casuale di dimensione n = 5 dalle26 lettere dell’alfabeto anglosassone. Il probbema e risolto con:

> sample(letters,5)[1] "a" "m" "t" "g" "u"

!

Esempio 4.3.2 Estrazione senza rimessa di 4 campioni casuali di dimensione ni = 1, . . . , 4,con i = 1, . . . , 4, dalle 26 lettere dell’alfabeto anglosassone. Ricorrendo ad un ciclo retto dafor, abbiamo:

> for(n in 1:4){print(sample(letters,n))}[1] "m"[1] "b" "c"[1] "e" "o" "c"[1] "d" "y" "g" "m"

!

Esempio 4.3.3 Campionamento con rimessa da un oggetto con modalita alfanumerica:

a<-LETTERS[1:7]for(i in 1:4){print(sample(a,4,replace=TRUE))}

il cui risultato potrebbe essere:

[1] "C" "F" "D" "G"[1] "C" "E" "C" "D"[1] "G" "G" "A" "F"[1] "E" "E" "G" "G"

Osservazione 4.3.1 Ricorrendo all’istruzione:

for(i in 1:4); print(sample(a,replace=TRUE))

si ottengono quattro permutazioni degli elementi di a; ad esempio le seguenti:

118

Page 121: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

[1] "D" "B" "E" "A" "G" "C" "F"[1] "F" "D" "E" "G" "C" "A" "B"[1] "D" "A" "B" "G" "G" "F" "D"[1] "E" "G" "C" "D" "C" "D" "F"

!

Esempio 4.3.4 Estrazione senza rimessa di 4 campioni di 5 elementi ciascuno, da una v.c.N(10, 2).

> for(i in 1:4){print(sample(rnorm(1000,10,2),5))}[1] 7.500336 11.596424 11.279172 10.808307 9.332722[1] 11.683638 11.538254 9.494141 8.657761 8.943494[1] 8.721086 11.026309 6.303418 8.370027 11.259078[1] 8.636034 9.080102 12.447917 11.931348 7.070856

Esempio 4.3.5 Simulazione del lancio di una moneta ripetuto 10000 volte. Eseguiamo un’e-strazione con rimessa, che ripetiamo 10000 volte, da un oggetto che contiene i valori 0 e 1. Atal fine e su"ciente l’istruzione:

> sample(c(0,1),10000,replace=TRUE)> ## non mandare in esecuzione!!

Meglio potremmo fare riassumendo i risultati in una tabella di frequenza, ad esempio mediantele istruzioni:

> lancio<-table(sample(c(0,1), 10000, replace = TRUE))> dimnames(lancio)<-list(Lancio=c("Testa","Croce"))> lancioLancioTesta Croce4973 5027

Manifestamente resta aperto il problema della bonta della simulazione, ma su tale argomentotorneremo nel seguito. !

119

Page 122: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Capitolo 5

Elementi di statistica inferenziale

Nel seguito ci occuperemo del problema della costruzione di intervalli di confidenza edella verifica di ipotesi statsitiche, perlomeno in situazioni, per cosı dire, classiche. Inparticolare vedremo come sia possibile e parimenti facile costruire funzioni ad hoc e, alcontempo, come si possano sfruttare funzioni gia implementate e piuttosto sofisticate,presenti nella libreria ctest.Ricordiamo1 che la stima puntuale dei parametri " = ('1, '2, . . . , 'k) % % * IRk,che caratterizzano la densita fX(x;") della una v.c. X, che descrive un fenomenoaleatorio oggetto di indagine, avviene ricorrendo ad una opportuna funzione appli-cata sulle n & 2 v.c. X1,X2, . . . ,Xn indipendenti e identicamente distribuite (i.i.d.)come X. La funzione T = t(X1,X2, . . . ,Xn) = t(X), abitualmente detta stimatoreed individuata in genere in accordo a particolari criteri, ad esempio quello della mas-simaverosomiglianza o quello dei momenti, e a sua volta una v.c. con densita fT (() etale che2 IE[T ] = ' e IE

"(T ! IE[T ])2

#= V ar[T ] + 0, per n , -.

5.1 Intervalli di confidenza per un parametro !

Dato il campione casuale X = (X1,X2, . . . ,Xn) con densita fX (x, '), dove ' eun parametro unidimensionale e date le due statistiche T1 = t1 (X1,X2, . . . ,Xn) eT2 = t2 (X1,X2, . . . ,Xn), con T1 ' T2, l’intervallo [T1, T2] viene detto intervallo diconfidenza al livello 1 ! $ per il parametro ' se . ' % % * IR:

P [T1 ' ' ' T2; '] = 1 ! $ (5.1)

con 0 ' $ ' 1. In particolare la (5.1) a"erma che la probabilita che l’intervallo casuale[T1, T2] contenga il vero ed ignoto valore del parametro ' e 1!$, qualunque sia il verovalore del parametro assunto nello spazio parametrico. In tal modo le n osservazioni

1Per approfondimenti: Shao (1999), Schervish (1997).2Trattasi delle note proprieta di correttezza e di consistenza, perlomeno asintotica, di uno

stimatore.

Page 123: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

campionarie, raccolte nel vettore x, vengono impiegate per individuare un insieme divalori che, con una certa “fiducia”, conterra il vero valore del parametro.E bene tenere a mente che oltre agli intervalli di confidenza corrispondenti alla (5.1),possiamo considerare intervalli di confidenza unilaterali del tipo:

P [T1 ' '; '] = 1 ! $ (5.2)

P [T2 & '; '] = 1 ! $ (5.3)

Dal punto di vista pratico, tra i diversi metodi che consentono la costruzione diintervalli di confidenza, vale la pena ricordare quello basato sulla “quantita pivo-tale”, cioe una funzione3 delle osservazioni campionarie e del parametro ', diciamoq (X1,X2, . . . ,Xn; '), la cui distribuzione non dipende dal parametro '. Cio premesso,sara possibile individuare due valori q1;! e q2;! che verranno a dipendere unicamenteda $ e tali che:

P [q1;! ' q (X1,X2, . . . ,Xn; ') ' q2;!; '] = 1 ! $ (5.4)

A questo punto, se possiamo esprimere l’insieme:

{x1, x2, . . . , xn : q1;! ' q (x1, x2, . . . , xn; ') ' q2;!}

nella forma:

{x1, x2, . . . , xn : t1 (x1, x2, . . . , xn) ' ' ' t2 (x1, x2, . . . , xn)}

dove t1 (·) e t2 (·) sono funzioni non dipendenti da ', allora l’intervallo:

[t1 (X1,X2, . . . ,Xn) , t2 (X1,X2, . . . ,Xn)]

e un intervallo di confidenza al livello 1 ! $ per '.A ben vedere, la relazione (5.4) non necessariamente e soddisfatta da un’unica coppia(q1;!, q2;!); generalmente questi vengono individuati in modo da lasciare una ugualeprobabilita, pari ad $/2, nelle code sinistra e destra della distribuzione della quantitapivotale q (X1,X2, . . . ,Xn; ').Dal punto di vista applicativo, grande importanza rivestono gli intervalli di confidenzaper campioni tratti da una distribuzione normale, cioe qualora si ipotizzi che le v.c.X1,X2, . . . ,Xn siano i.i.d. / N(µ,"2). Sotto tale ipotesi, per gli stimatori:

X = n!1n!

i=1

Xi S2 = (n ! 1)!1n!

i=1

,Xi ! X

-2

3In genere una quantita pivotale non e uno stimatore, dal momento che viene a dipendere da !.

121

Page 124: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

risultano le seguenti quantita pivotali:

Z =(

nX ! µ

"/ N(0, 1) W = (n ! 1)

S2

"2 / )2n!1

Ricordando, inoltre, che le v.c. Z e W sono stocasticamente indipendenti, la v.c.:

U =(

n ! 1Z(W

=(

nX ! µ

S

viene a possedere distribuzione t di Student con & = n ! 1 gradi di liberta.

Cio premesso, vediamo come applicare quanto esposto in alcuni casi pratici.

Esempio 5.1.1 La costruzione di un intervallo di confidenza per il parametro & = µ av-

viene ricorrendo allo stimatore X = n!1(n

i=1 Xi. Dal momento che U ='

n X % µS ha

distribuzione t di Student con ' = n % 1 gradi di liberta, allora +µ, $2:

1 % ! = P"|U | & n!1t1!!/2

#= P

)|'

nX % µ

S| & n!1t1!!/2

*=

= P

)X % n!1t1!!/2

S'n& µ & X + n!1t1!!/2

S'n

*

dove n!1t1!!/2 indica il quantile di ordine 1%!/2 della distribuzione t di Student con ' = n%1gradi di liberta.Pertanto, stabilito il livello di confidenza 1 % !, avremo:

ICµ =)X % "t1!!/2

S'n

; X + "t1!!/2S'n

*

Si osservi che la v.c. S/'

n, detta abitualmente errore standard, rappresenta la stima dellavarianza dello stimatore X , media campionaria.Desiderando automatizzare quanto esposto, possiamo considerare la seguente:

Funzione 5.1.1 (I.C. per µ, !2 ignota)> ic.mu<-function(x,alpha=0.05,decimali=4)1

{2

n<-length(x)3

media.x<-mean(x)4

sd.x<-sd(x)5

se.x<-sd(x)/sqrt(n)6

ic.inf<-media.x-qt(1-alpha/2,n-1)*se.x7

ic.sup<-media.x+qt(1-alpha/2,n-1)*se.x8

cat("I.C.: ",round(ic.inf,decimali),round(ic.sup,decimali),"\n")9

}10

122

Page 125: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

Cosı, ad esempio, per le n = 12 osservazioni:

> x<-c(14.2,13.8,10.1,12.4,11.1,11.3,8.1,11.3,7.8,8.0,9.3,5.9)

otteniamo:

> ic.mu(x,alpha=.05)I.C.: 8.6576 11.8924

Esempio 5.1.2 La costruzione di un intervallo di confidenza per il parametro & = $2 avvienericorrendo allo stimatore S = (n % 1)!1

(ni=1 Xi. Dal momento che W = (n % 1) S2

$2 hadistribuzione Chi-Quadro con ' = n % 1 gradi di liberta:

1 % ! = P [W & #n!1;1!!] = P

)(n % 1)

S2

$2 & #n!1;1!!

*= P

)$2 & (n % 1)S2

#n!1;1!!

*

da cui l’intervallo di confidenza:

IC#2 =)0;

(n % 1)S2

#n!1;1!!

*

Anche in questo caso, desiderando automatizzare quanto esposto, possiamo considerare laseguente:

Funzione 5.1.2 (I.C. per !2)> ic.var<-function(x,alpha=0.05,decimali=4)1

{2

n<-length(x)3

var.x<-(n-1)*var(x)4

ic.inf<-05

ic.sup<-var.x/qchisq(1-alpha/2,n-1)6

cat("I.C.: ",round(ic.inf,decimali),round(ic.sup,decimali),"\n")7

}8

Cosı, ad esempio, per le n = 12 osservazioni:

> x<-c(14.2,13.8,10.1,12.4,11.1,11.3,8.1,11.3,7.8,8.0,9.3,5.9)

abbiamo:

> ic.var(x,alpha=.05)I.C.: 0 3.2519

!

123

Page 126: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

Esempio 5.1.3 Siano X1 e X2 due campioni casuali indipendenti, di numerosita rispetti-vamente n1 e n2, tratti da altrettante v.c. N(µi, $2

i ), con i = 1, 2. La costruzione di unintervallo di confidenza per la di!erenza tra due valori medi µ1 % µ2 prende le mosse dallav.c. X1 % X2, a componenti indipendenti. Se le varianze $2

1 e $22 , entrambe ignote, si possano

ritenere uguali tra loro, allora la v.c.:

U ='

n1 + n2(X1 % X2) % (µ1 % µ2)

Sp(5.5)

con:

S2p =

(n1 % 1)S21 + (n2 % 1)S2

2

n1 + n2 % 2

risulta avere distribuzione t di Student con ' = n1 + n2 % 2 gradi di liberta. Pertanto:

1 % ! = P

)|'

n1 + n2(X1 % X2) % (µ1 % µ2)

Sp| & n1+n2!2t1!!/2

*

= P

)(X1 % X2) % n1+n2!2t1!!/2

Sp'n1 + n2

& µ1 % µ2

& (X1 % X2) + n1+n2!2t1!!/2Sp'

n1 + n2

*

Quindi l’intervallo di confidenza (ICµ1!µ2) per la di!erenza tra due valori medi risulta:)(X1 % X2) % n1+n2!2t1!!/2

Sp'n1 + n2

; (X1 % X2) + n1+n2!2t1!!/2Sp'

n1 + n2

*

Anche in questo caso, desiderando automatizzare quanto esposto, possiamo considerare laseguente:

Funzione 5.1.3 (I.C. per µX ! µY , !2X = !2

X ma ignote)> ic.muxy<-function(x,y,alpha=0.05,decimali=4)1

{2

nx<-length(x)3

ny<-length(y)4

media.dif<-mean(x)-mean(y)5

sp<-sqrt(((nx-1)*var(x)+(ny-1)*var(y))/6

(nx+ny-2))*sqrt((1/nx)+(1/ny))7

ic.inf<-media.dif-qt(1-alpha/2,nx+ny-2)*sp8

ic.sup<-media.dif+qt(1-alpha/2,nx+ny-2)*sp9

cat("I.C.: ",round(ic.inf,decimali),round(ic.sup,decimali),"\n")10

}11

> ic.muxy(x,y,alpha=.05)I.C.: -5.1259 0.6502

124

Page 127: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

Osservazione 5.1.1 Se l’ipotesi di uguaglianza4 tra le due varianze "21 e "2

2 nonpotesse essere assunta, allora si dimostra che la funzione test (5.5) viene ad essere di-stribuita approssimativamente secondo una t di Student i cui gradi di liberta vengonostimati mediante l’approssimatione di Welch-Satterthwaite:

& =

4S2

1 n!11 + S2

2 n!12

6

S21 n!1

1

n1 ! 1+

S22 n!1

2

n2 ! 1

Evidentemente, & non e necessariamente un intero: in tal caso lo si approssima al-l’intero immediatamente precedente. Quello che ne risulta e una distribuzione t diStudent con numero di gradi di liberta minore di n1 + n2 ! 2 .

L’output delle funzioni precedentemente introdotte, puo ovviamente essere arricchitocon l’aggiunta di commenti ed altre informazioni, oltre al desiderato intervallo diconfidenza.Cosı, ad esempio, la funzione (5.1.1) potrebbe esere riscritta come:

ic.mu<-function(x,alpha=0.05,decimali=4)1

{2

n<-length(x)3

media.x<-mean(x)4

sd.x<-sd(x)5

se.x<-sd(x)/sqrt(n)6

ic.inf<-media.x-qt(1-alpha/2,n-1)*se.x7

ic.sup<-media.x+qt(1-alpha/2,n-1)*se.x8

ris<-c(1:3)9

ris[1]<-round(media.x, decimali)10

ris[2]<-round(sd.x, decimali)11

ris[3]<-round(se.x, decimali)12

ris<-matrix(ris,ncol=1)13

dimnames(ris)<-list(c("Media campionaria","Deviazione standard:",14

"Standard error:"),"")15

cat("Vettore dei dati individuali: ", deparse(substitute(x)),16

"\nOsservazioni: ", n,"\n","\n---------------------------",17

"\n","I.C.: ",round(ic.inf,decimali)," ; ",18

round(ic.sup,decimali),"\n----------------------------",19

"\n","\nStatistiche:","\n")20

ris21

}22

4In termini tecnici si parla di ipotesi di omoschedasticita tra le varianze.

125

Page 128: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

A tal proposito, per le n = 12 osservazioni precedentemente impiegate:

> x<-c(14.2,13.8,10.1,12.4,11.1,11.3,8.1,11.3,7.8,8.0,9.3,5.9)

otteniamo:

> ic.mu(x,alpha=.05,decimali=3)Vettore dei dati individuali: xOsservazioni: 12

---------------------------I.C.: 8.658 ; 11.892

----------------------------

Statistiche:

Media campionaria 10.275Deviazione standard: 2.546Standard error: 0.735

I risultati proposti in questo paragrafo, in virtu del Teorema Limite Centrale, pos-sono essere approssimativamente applicati a campioni tratti da distribuzioni nonnecessariamente normali, a patto pero che la cardinalita n sia su!cientemente grande.

Esempio 5.1.4 Una moneta, di cui si ignora se sia equilibrata o no, viene lanciata n = 100volte. Indicando con " la probabilita, costante, di ottenere “Croce” in un singolo lancio, ciproponiamo la costruzione di un intervallo di confidenza per ", a partire dal campione casualeX1, X2, . . . , Xn, le cui componenti Xi risultano v.c. indipendenti con, ciascuna, distribuzionebernoulliana, cioe, + i = 1, 2, . . . , n:

Xi =+

0 1 % "1 "

A tal fine (cfr. Esempio 4.3.5), si immagini che l’esperimento casuale abbia dato luogo aiseguenti valori:

> lancio<-sample(c(0,1), 100, replace = TRUE)> lancio[1] 0 1 0 1 1 1 0 0 0 1 1 0 0 0 1 1 0 1 1 1 0 1 1 1 1 1[27] 0 1 0 1 0 0 0 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 0 1[53] 0 0 0 1 1 0 0 0 1 0 0 0 1 0 0 1 0 0 1 1 1 1 1 1 1 1[79] 1 1 0 1 1 0 0 1 1 0 1 1 1 1 1 1 1 1 1 0 1 0> dimnames(table(lancio))<-list(Lancio=c("Testa","Croce"))

126

Page 129: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

> table(lancio)LancioTesta Croce

40 60

Stimatore di " viene ad essere la v.c. X =(n

i=1 n!1 Xi, detta in tal caso proporzione cam-pionaria, che indica, appunto, la proporzione delle Croci ottenute nella n-pla osservata. Dalmomento che n e grande, possiamo fare appello al Teorema Limite Centrale ed a!ermare che

la distrbuzione di X e approssimativamente Normale con parametri " e " (1 % ")n . L’intervallo

di confidenza sara, dunque:

ICµ =

:x % "t1!!/2

;x (1 % x)

n; x + "t1!!/2

;x (1 % x)

n

<

la cui valutazione in R avviene mediante l’istruzione:

> ic.mu(lancio,alpha=.05)Vettore dei dati individuali: lancioOsservazioni: 100

---------------------------I.C.: 0.5337 ; 0.7263

----------------------------

Statistiche:

Media campionaria 0.63Deviazione standard: 0.4852Standard error: 0.0485

Si osservi che l’intervallo di confidenza ottenuto non contiene il valore 0.5. !

Va da se che qualora non si possa ricorrere al Teorema Limite Centrale occorre in-dividuare la distribuzione esatta degli stimatori dei parametri di interesse, il chegeneralmente comporta alcuni problemi sopratutto ai fini del calcolo numerico.Senza voler entrare in dettagli, tentiamo di illustrare il problema prendendo spuntodalla situazione di cui all’Esempio 5.1.4. Supponiamo, dunque, che X sia una v.c.con distribuzione bernoulliana di parametro ignoto #. Al fine di stimare #, estratto ilcampione casuale X1,X2, . . . ,Xn, di dimensione n, possiamo ricorrere allo stimatoreT =

(ni=1 Xi che rappresenta il nmero dei successi ottenuti in X. Manifestamente

tale stimatore, in quanto somma di n v.c. i.i.d. bernoulliane, possiede distribuzionebinomiale di parametri n e # con5 con IE[T ] = n # e V ar[T ] = n # (1 ! #).

5Si noti che tra lo stimatore X di cui all’Esempio 5.1.4 e lo stimatore T qui introdotto intercorrela semplice relazione X = n!1 T .

127

Page 130: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

Al fine della costruzione di un intervallo di confidenza per #, al livello di confidenza1! $, occorre individuare i quantili di ordine $/2 e 1! $/2 della distribuzione di T ,ossia risolvere rispetto a ki, i = 1, 2, le equazioni:

P [T ' k1] =k1!

t=0

px (1 ! p)n!x = $ (5.6)

P [T ' k2] =k2!

t=0

px (1 ! p)n!x = 1 ! $ (5.7)

dove p rappresenta la stima puntuale di #, ovvero p = t(x)/n.Il calcolo dei quantili k1 e k2, in accordo alle (5.6) e (5.7), puo essere eseguito ricor-rendo al comando uniroot (cfr. paragrafo ??) applicato sulla funzione di ripartizionedi una binomiale di parametri n, p. Pertanto possiamo considerare la seguente:

Funzione 5.1.4 (I.C. esatto per #)ic.p<-function(x,n,livello.conf=0.95)1

{2

p<-x/n3

alpha<-(1-livello.conf)/24

LI<-function(x,alpha)5

{6

uniroot(function(p) pbinom(x-1,n,p)-livello.conf,c(0,1))$root7

}8

LS<-function(x, alpha)9

{10

uniroot(function(p) pbinom(x,n,p)-alpha,c(0,1))$root11

}12

IC<-{c(LI(x,alpha), LS(x,alpha))}13

stima.p<-x/n14

cat("Stima =",stima.p ,"\n")15

cat("IC =",IC,"\n")16

}17

Esempio 5.1.5 Con riferimento all’esperimento casuale di cui all’Esempio 5.1.4, avendo os-servato 60 Croci in 100 lanci di una stessa moneta, l’intervallo di confidenza esatto per ilparametro " risulta:

> ic.p(60,100)Stima = 0.6IC = 0.5129658 0.6967233

piu piccolo rispetto a quanto ottenuto applicando il Teorema Limite Centrale. !

128

Page 131: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

5.2 Verifica di ipotesi statistiche

Dato un campione casuale (X1,X2, . . . ,Xn) di dimensione n tratto da una v.c. X condensita fX(x;") nota a meno dei parametri " = ('1, '2, . . . , 'k) % % * IRk, un’ipotesistatistica puo essere intesa quale asserzione sul vettore dei parametri della densita deltipo H : " % %0, ove %0 e un sottoinsieme dello spazio parametrico %. In particolarel’ipotesi H viene detta semplice se %0 contiene un solo elemento, composta qualoracontenga piu elementi. Il problema che ci si pone e stabilire se " % %0 oppure no.Abitualmente il problema viene posto ricorrendo ad un sistema di ipotesi del tipo:

+H0 : " % %0

H1 : " % %1

con %00%1 = % e %01%1 = 2. La prima asserzione e detta ipotesi nulla e rappresental’ipotesi che si desidera testare, la seconda viene detta ipotesi alternativa.Sulla base dei risultati forniti dalla n-pla osservata, si perverra a decidere se l’ipotesinulla e sostenuta dai dati o se questi invece sono a favore dell’ipotesi alternativa. Conil termine test statistico si intende appunto la procedura di decisione in favore di H0

o di H1.Piu precisamente, un test statistico # (x) viene ad essere una funzione che assumevalore #0 se i dati campionari portano all’accettazione di H0 e #1 in caso contrario.In sostanza, esso viene a creare una partizione dello spazio campionario; tutti glielementi dello spazio campionario per cui # (x) = #0 vengono a costituire la regionedi accettazione di H0, A = {x : # (x) = #0}, mentre l’insieme complementare, A ={x : # (x) = #1}, costituisce regione di rifiuto di H0. In definitiva, dunque, se x % Asi accetta l’ipotesi nulla, la si rigetta qualora x % A.Tale modo di procedere, tuttavia, ci espone a due particolari rischi:

— rigettare l’ipotesi nulla, quando in realta essa e vera;

— accettare l’ipotesi nulla, quando in realta essa e falsa.

In letteratura, tali errori vengono, rispettivamente detti errore del primo tipo ederrore del secondo tipo. Appare, quindi, intuitivo che un test statistico debba tentaredi minimizzare la probabilita di commettere entrambi i due tipi di errore. Per ognitesto statistico possiamo definire la funzione di potenza:

K (") = P"X % A;"

#= P [# (X) = #1;"] (5.8)

cioe come la probabilita di rifiutare l’ipotesi nulla per ogni valore del parametro ".Sotto tale profilo, dunque, un test statistico verra considerato “ottimo” se al con-tempo minimizza la (5.8) per " % %0 e viceversa massimizza la (5.8) per " % %1.

129

Page 132: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

Evidentemente, tale condizione non puo essere verificata poiche i due requisiti sonoin conflitto tra loro. In pratica, la risoluzione del problema avviene fissando in modoarbitrario il cosidetto livello di significativita del test, definito:

$ = sup!#!0

K (") = sup!#!0

P"X % A;"

#(5.9)

cioe la probabilita di commettere l’errore del primo tipo. Osserviamo ancora che,qualora %0 sia semplice, allora il livello del test e $ = P

"X % A; '0

#. Quanto alla

probabilita di commettere il secondo tipo di errore, questa viene indicata con * (") =P [X % A;" % %1] = 1 ! K (").A questo punto, fissato il livello di significativita, nella famiglia dei test di livellopreassegnato, verra scelto un test tale che * (") sia uniformemente minimizzata su%1, ovvero tale che K (") venga uniformemente massimizzata in %1. Un si"atto testviene detto uniformemente piu potente. Quindi un test ottimo sara definito comequel test che per $ assegnato ha potenza massima.E importante osservare che alla partizione dello spazio campionario, indotta dal teststatistico, viene associata una funzione a valori reali detta abitualmente funzione test,e coincidente con una statistica t (x) che assume valori piccoli quando H0 e vera evalori elevati quando e vera H1. Possiamo quindi dire che un test statistico e unaprocedura basata su un campione casuale tramite una funzione test con la quale H0

e rigettata a favore di H1 per certi valori estremi della funzione test ed accettata peri restanti valori possibili.Ne seguito ci limitiamo a presentare una collezione di funzioni test6 utili in svariatesituazioni ed implementate in R, mentre non ci occuperemo della costruzione di testottimali.E importante osservare, Gibbon, Pratt (1975), che e norma comune stabilire qual’e ilpiu piccolo livello per il quale la n-pla osservata conduce al rifiuto dell’ipotesi nulla.Cio avviene valutando il valore osservato t della funzione test tramite il livello disignificativita osservato o p-value, definito:

p ! value = sup!#!0

P [t (X) > t;"] (5.10)

Tanto piu il p ! value e piccolo, tanto minore sara la probabilita che sotto l’ipotesinulla la funzione test produca un valore maggiore di quello osservato, mentre e altala probabilita sotto l’ipotesi alternativa. In pratica tanto piu e piccolo il p ! value,tanto piu saremo propensi ad accettare H0.Posto che ' sia il parametro unidimensionale di interesse e indicando con T = t (X)una funzione test, i diversi tipi di ipotesi su ' che a"ronteremo nel seguito saranno:

6Funzioni test a potenza massima e basati sul rapporto tra le funzioni di verosomiglianza calcolatesotto H0 e H1.

130

Page 133: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

Ipotesi nulla Ipotesi altenativeH0 : ' = '0 H1 : ' 3= '0 ipotesi bidirezionale

H1 : ' > '0 ipotesi unidirezionaleH1 : ' < '0 ipotesi unidirezionale

mentre i corrispondenti p ! value saranno calcolati in base alla distrbuzione dellafunzione test T = t (X) sotto l’ipotesi nulla, ponendo cioe ' = '0.

Desiderando in qualche modo chiarire quanto sin qui riassunto, valga il seguente:

Esempio 5.2.1 I responsabili di un Istituto di Credito ritengono che l’importo dei prelievie!ettuati con il Bancomat, presso il proprio sportello, abbiano una distribuzione approssima-tivamente normale con valor medio pari a 300.000 lire. Al fine di verificare tale a!ermazione, estato estratto un campione casuale di dimensione n = 40 il quale ha fornito i seguenti risultati(in lire x 1000):

350 300 200 450 250 350 250 350 250 300150 350 250 300 250 250 550 150 250 350150 400 350 550 500 250 350 350 550 450200 350 500 450 250 350 250 100 350 350

Si immagini che il sistema di ipotesi statistiche che si desidera sottoporre a verifica sia:+

H0 : µ = µ0 = 300H1 : µ > µ0 = 300

Manifestamente trattasi di una verifica di ipotesi, con alternativa unilaterale, sul valor mediodi una distribuzione normale con varianza ignota; la funzione test che verra utilizzata e quellache prevede la stima di $2 mediante la varianza campionaria corretta S2, e pertanto:

T = t (X) ='

nX % µ

S

che, sotto H0, ha distribuzione t di Student con ' = n % 1 gradi di liberta. Per la naturadell’ipotesi alternativa H1, segue che la regione di rifiuto e A = {x : t(x) > k}, dove k indicail valore critico della funzione test determinato in modo da soddisfare la (5.9), cioe:

P"X , A; µ0

#= P [T > k; µ0] = !

Se si sceglie di porre ! = 0.05, otteniamo, per ' = 39, quale valore critico k = 1.6849 e laregola di decisione portera al rigetto di H0 qualora sia tSper. =

'40 x % 300

s > k.In R possiamo impartire i comandi:

> x<-c(350,300,200,450,250,350,250,350,250,300,150,350,250,300,250,250,550,150,250,350,150,400,350,550,500,250,350,350,550,450,200,350,500,450,250,350,250,100,350,350)

> alpha<-0.05> k.critico<-qt(1-alpha,length(x)-1)> t.sper<-(sqrt(40))*(mean(x)-300)/sd(x)

131

Page 134: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

donde i risulati:

> k.critico[1] 1.684875> t.sper[1] 1.320101

che, per le ipotesi di lavoro fatte, condurrebbero all’accettazione di H0.

Osservazione 5.2.1 Per la simmetria della distribuzione della funzione test risulta t1!!;" =%t!;" , pertanto ai fini del calcolo del valore critico del test avremmo potuto impartire ilcomando:

> k.critico<-qt(alpha, length(x)-1, lower=FALSE)

del tutto equivalente a:

> k.critico<-qt(1-alpha, length(x)-1)

oppure a:

> k.critico<- -qt(alpha, length(x)-1)

Tale approccio, tuttavia, non viene in pratica utilizzato dai pacchetti statistici in commercio,i quali forniscono il p% value associato alla verifica di ipotesi richiesta in accordo alla (5.10).Nel caso in esame, indicando con fT (t; µ0) la densita della funzione test sotto H0, avremo:

p.value == +#

tSper.

fT (t; µ0) dt = 1 %= tSper.

!#fT (t; µ0) dt

e di conseguenza in R:

> p.value<-1-pt(t.sper,length(x)-1)> p.value[1] 0.09724868

il che indica che l’area della coda a destra del quantile tSper. della distribuzione t di Studentcon ' = 39 gradi di liberta e all’incirca il 10%. Anche sotto tale ottica si e propensi adaccettare H0.A questo punto, per avere un’idea del potere discriminatorio del test approntato, potrebbeessere interessante calcolare la funzione di potenza del test, K (µ) = P

"X , A; µ

#, perlomeno

in corrispondenza ad alcuni valori di µ sotto H1. Cio equivale a calcolare il complemento aduno della funzione di ripartizione di una ditribuzione t di Student, con ' = n % 1 gradi diliberta e parametro di non centralita

'n µ1 % µ0

S , in corrispondenza a k = 1.6849.Scelto di porre, sotto H1, µ1 = 310 e ricordando le Osservazioni 4.0.4 e 5.2.1, in R possiamoimpartire i comandi:

132

Page 135: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

> mu1<-310> mu0<-300> sqm<-sd(x)> nonc<-sqrt(length(x))*(mu1-mu0)/sd(x)> pt(qt(alpha, df=length(x)-1), df=length(x)-1, ncp = nonc, lower = FALSE)[1] 0.98578

La potenza del test, in corrispondenza dell’ipotesi alternativa µ1 = 310, vale pertanto 0.98578.In altri termini ( (µ1 = 310) = P [X , A; µ1 = 310] = 0.01422, ovvero una probabilita di circail 1.4% di commettere l’errore del II tipo in corrsIpondenza a µ1 = 310. !

Alla luce dell’Esempio proposto, appare evidente come in R possano essere imple-mentate funzioni ad hoc per la verifica di ipotesi statistiche e a tal proposito valga ilseguente:

Esempio 5.2.2 Desiderando verificare l’ipotesi di omoschedasticita tra due varianze H0 :$2

X/$2Y = 1 contro l’alternativa H1 : $2

X/$2Y > 1, in base alle realizzazioni di due campioni

indipendenti tratti dalle v.c. X - N(µX , $2X) e Y - N(µY , $2

Y ), ricordando che la statisticacampionaria S2

X/S2Y , sotto l’ipotesi nulla, ha distribuzione F di Snedecor con nX %1 e nY %1

gradi di liberta rispettivamente a numeratore e denominatore, posiamo introdurre la seguentefunzione ad hoc:

Funzione 5.2.1 (Verifica di ipotesi per due varianze)> var.equal<-function(x,y)1

{2

ok <- (!is.na(x) & !is.na(y))3

x <- x[ok]; y <- y[ok]4

nx <- length(x); ny <- length(y)5

if(nx <= 2 || ny <= 2) stop("not enough observations")6

Fsper<-sqrt(var(x))/sqrt(var(y))7

pvalue<-1-pf(Fsper, nx-1, ny-1)8

sigma<-list(vx=var(x),vy=var(y),rapporto=Fsper,pval=pvalue)9

return(sigma)10

}11

A commento della funzione proposta:

— le righe da [2] a [5] si occupano del controllo dei vettori x e y immessi;

— la riga [6] provvede al calcolo del valore sperimentale della funzione test impiegata;

— in riga [7] si procede al calcolo del p % value associato al test in accordo alla (5.10).

— in riga [8] si crea la lista sigma che contiene i risultati del test (varianze campionarie,valore sperimentale della funzione test e corrispondente p % value);

— l’istruzione in riga [9] visualizza la lista sigma.

133

Page 136: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

Lasciamo come esercizio al Lettore il problema del calcolo della potenza del test in corrispon-denza ad un particolare valore del rapporto $2

X/$2Y sotto l’ipotesi alternativa7. !

Prima di concludere, desideriamo accennare al problema dell’individuazione della di-mensione n del campione casuale sı che essa garantisca, a fronte di un dato sistemadi ipotesi statistiche, prefissate probabilita di commettere sia l’errore del I tipo chel’errore del II tipo, questa valutata in corrispondenza di un particolare valore cruciale' % %1. Il problema viene superato, fissate le probabilita $ e *(' % %1), risolvendorispetto ad n l’equazione:

K(' % %1) = 1 ! *(' % %1) (5.11)

Dal momento che generalmente le funzioni test coinvolte hanno, perlomeno sottol’ipotesi alternativa, una distribuzione non centrale, il problema puo essere risoltoricercando per via numerica le radici dell’equazione (5.11), sfruttando, ad esempio, ilcomando uniroot, di cui al paragrafo (??).Esempio 5.2.3 Si immagini che il contenuto, in ml, di flaconi di un certo medicinale sianoimbottigliati mediante due processi produttivi possa essere modellizzato mediante le due v.c.X1 - N(µ1, $2) e X2 - N(µ2, $2), dove, in base a indagini precedenti, si ha la stima S2 = 6.Desiderando sottoporre a verifica le seguenti ipotesi statistiche:

+H0 : µ1 % µ2 = 0H1 : µ1 % µ2 > 0

si vuole determinare la numerosita campionaria che rispetti le seguenti condizioni:

— probabilita dell’errore del I tipo pari al 5%, ossia ! = 0.05;

— potenza del test, in corrispondenza all’ipotesi alternativa µ1 %µ2 = 2 = ), pari al 98%.

Ora, sappiamo che la funzione test, sotto l’ipotesi alternativa, ha distribuzione t di Studentcon 2 (n%1) gradi di liberta e parametro di non centralita

>n/2 )

S2 ; sicche possiamo scriverel’espressione per K()) come:

> potenza<-quote({

pt(qt(0.05, df=2*(n-1), lower = FALSE), df=2*(n-1), ncp=sqrt(n/2) *2/sqrt(6), lower = FALSE)

})

Quindi, ricorrendo alla funzione uniroot (cfr. Esempio ??), e ricordando che per le ipotesifatte K()) = 0.98, abbiamo:

> n<-uniroot(function(n) eval(potenza) - 0.98, c(2, 1e+07))$root> n[1] 33.16656

sı che la numerosita campionaria atta a garantire i vincoli posti sara n = 2 · 34 = 68. !7Cfr. Osservazione 4.0.4 ed Esempio 5.2.1.

134

Page 137: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

5.3 La libreria ctest

In R e possibile procedere alla verifica di di ipotesi statistiche ricorrendo, come gia sidisse, alle funzioni contenute nella libreria ctest, acronimo di “Common Tests”.Prima di passare in rassegna ad alcune di esse, vediamo come e possibile accedere aduna libreria, visualizzarne il contenuto ed eventualmente liberare l’area di lavoro dallelibrerie in eccesso. I comandi essenzialmente sono:

— library(nome della libreria): carica nell’area di lavoro corrente la libreriaspecificata;

— (.packages()): elenca le librerie attive;

— help(package=nome della libreria): fornisce, nella finestra di Help, l’elencodelle funzioni della libreria specificata;

— detach("package:nome della libreria"): libera l’area di lavoro correntedalla libreria specificata.

Nel nostro caso, essendo interessati alla libreria ctest, potremmo impartire i comandi:

> (.packages())[1] "base"> library(ctest)> (.packages())[1] "ctest" "base"> detach("package:ctest")> (.packages())[1] "base"

In particolare, poi, il comando help(package=ctest) porge il seguente elenco8:

ansari.test Ansari-Bradley Testbartlett.test Bartlett Test for Homogeneity of Variancesbinom.test Exact Binomial Testchisq.test Pearson’s Chi-squared Test for Count Datacor.test Test for Zero Correlationfisher.test Fisher’s Exact Test for Count Datafligner.test Fligner-Killeen Test for Homogeneity of Variancesfriedman.test Friedman Rank Sum Testkruskal.test Kruskal-Wallis Rank Sum Test

8Aggiornamento alla data 01.02.2001.

135

Page 138: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

ks.test Kolmogorov-Smirnov Testsmantelhaen.test Cochran-Mantel-Haenszel Chi-Squared Testfor Count Datamcnemar.test McNemar’s Chi-squared Test for Count Datamood.test Mood Two-Sample Test of Scalewise.prop.test Pairwise comparisons of proportionspairwise.t.test Pairwise t testspairwise.table Tabulate p values for pairwise comparisonspairwise.wilcox.test Pairwise Wilcoxon rank sum testspower.prop.test Power calculations two sample test for of proportionspower.t.test Power calculations for one and two sample t testsprint.pairwise.htest Print method for pairwise testsprint.power.htest Print method for power calculation objectprop.test Test for Equal or Given Proportionsprop.trend.test Test for trend in proportionsquade.test Quade Testshapiro.test Shapiro-Wilk Normality Testt.test Student’s t-Testvar.test F Test to Compare Two Varianceswilcox.test Wilcoxon Rank Sum and Signed Rank Tests

Test su valori medi — t.test

La funzione t.test e assai versatile, consentendo all’utente di e"ettuare una seriepiuttosto ampia di verifiche di ipotesi statistiche circa un valor medio o la di"erenzatra due valori medi. La sintassi estesa della funzione in oggetto e:

t.test(x, y=NULL, alternative="two.sided", mu=0,paired = FALSE, var.equal = FALSE, conf.level = 0.95)

Volendo procedere, conviene distinguere il caso in cui la verifica di ipotesi coinvolgaun solo valor medio da quello in cui si essa sia concentrata sulla di"erenza tra duevalori medi in base alle osservazioni di due campioni indipendenti ovvero appaiati.

In tutti i casi, l’output della funzione t.test consiste nella creazione e visualizzazionedella lista rval contenente tutte le informazioni relative al test richiesto (valore dellastatistica test, p-value, intervallo di confidenza, ...)

Un solo campione Premesso che la semplice istruzione t.test(x) verifica, sulla basedella statistica campionaria x, le seguenti ipotesi H0 : µ = µ0 = 0 contro H1 : µ 3= µ0,il che e raramente di interesse, ci pare utile so"ermarci sugli argomenti della funzionein esame; pertanto:

136

Page 139: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

— indicato l’oggetto che contiene le determinazioni campionarie, occorre specificareil valore di µ sotto l’ipotesi nulla, poiche come si e detto la situazione di defaultlo pone uguale a zero;

— successivamente, a seconda della struttura dell’ipotesi alternativa si dovra in-dicare se il test e di tipo bilaterale ovvero unilaterale a protezione inferiore osuperiore; a tal fine, valga la tabella riassuntiva che segue:

Ipotesi nulla Ipotesi altenative parametriH0 : µ = µ0 H1 : µ 3= µ0 (...alternative="two.sided",...)

H1 : µ > µ0 (...,alternative="greater",...)H1 : µ < µ0 (...,alternative="less",...)

— in ultimo l’utente puo specificare il livello 1!$ desiderato nella costruzione del-l’intervallo di confidenza per il valor medio incognito µ; la situazione di defaultprevede conf.level=0.95.

Esempio 5.3.1 Un produttore di lampade fluorescenti asserisce che le proprie lampade hannouna durata media di corretto funzionamento di 1200 ore. A fine di verificare tale a!ermazione,abbiamo sottoposto a prova di durata un campione casuale di n = 10 lampade, ottenendo iseguenti risultati circa la durata di corretto funzionamento (espressa in ore):

1179 1235 1180 1250 1220 1010 1000 1150 1277 1129

Il sistema di ipotesi a conflitto e il seguente:

H0 : µ = 1200 H1 : µ < 1200

Desiderando procedere, ricorriamo alla funzione t.test:

> x<-c(1179,1235,1180,1250,1220,1010,1000,1150,1277,1129)> t.test(x,y=NULL, alternative="less", mu=1200,paired = FALSE,

var.equal = FALSE, conf.level = 0.95)

One Sample t-test

data: xt = -1.2345, df = 9, p-value = 0.1241alternative hypothesis: true mean is less than 120095 percent confidence interval:

NA 1217.941sample estimates:mean of x

1163

137

Page 140: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

Dal momento che il p-value associato al test e maggiore, seppur di poco, di 0.10, siamoportati ad accettare l’ipotesi nulla. Si osservi che il valore di µ sotto l’ipotesi nulla H0 rientranell’intervallo di confidenza [0; 1217.941]. !

Due campioni indipendenti Nel caso si operi su due campioni casuali indipen-denti, (X1,X2, . . . ,XnX ) e (Y1, Y2, . . . , YnY ), e si desideri verificare l’ipotesi che essiprovengano da densita caratterizzate da un ugual valor medio, occorrera:

— indicare gli oggetti, ad esempio x e y, che contengono le determinazioni campio-narie;

— scegliere il tipo di test idoneo a seconda della struttura dell’ipotesi alternativa,come si e visto al punto precedente (alternative="...");

— indicare che trattasi di determinazioni provenienti appunto da campioni indi-pendenti (paired=FALSE);

— specificare se le varianze ignote "2X e "2

Y possono ritenersi tra loro uguali o non,ricordando che la situazione di default prevede var.equal=FALSE e in tal casoi gradi di liberta della t di Student coinvolta sono stimati in accordo al metodoproposto da Welch-Satterthwaite (cfr. Osservazione 5.1.1);

— stabilire il livello 1!$ desiderato nella costruzione dell’intervallo di confidenzaper la di"erenza tra i valori medi µX e µY .

Esempio 5.3.2 Si immagini che i responsabili della Qualita, di un’azienda operante in campoinformatico, al fine di monatre dischi fissi di nuova generazione su propri PC si trovino adover scegliere tra due fornitori (A e B) che, a parita di prestazioni dichiarate, o!rono prezziunitari tra loro diversi. Ai fini della scelta del componente a prezzo unitario minore, sono statee!ettuate, per ciascun tipo di prodotto, piu misurazioni (espresse in millesimi di secondo) deitempi di accesso al disco fisso e cio al fine di verificare, in base ai dati campionari ottenuti, seesistono di!erenze significative tra i corrispondenti valori medi di universo µA e µB, ottenendoi seguenti risultati:

fornitore A 30.0 29.9 29.2 29.8 30.8 29.8 30.4 28.9 30.5 29.7fornitore B 28.7 28.6 29.4 29.7 29.9 30.2 28.7 29.4 30.4 29.7

Il sistema di ipotesi a conflitto e il seguente:

H0 : µA = µB H1 : µA #= µB

Desiderando procedere, supponendo che le corrispondenti varianze, pur ignote, possano rite-nersi uguali, e ricorrendo alla funzione t.test, si ha:

138

Page 141: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

> x<-c(30.0,29.9,29.2,29.8,30.8,29.8,30.4,28.9,30.5,29.7)> y<-c(28.7,28.6,29.4,29.7,29.9,30.2,28.7,29.4,30.4,29.7)> t.test(x,y, alternative="two.sided", mu=0,paired = FALSE,

var.equal = TRUE, conf.level = 0.95)

Two Sample t-test

data: x and yt = 1.5854, df = 18, p-value = 0.1303alternative hypothesis: true difference in means is not equal to 095 percent confidence interval:-0.1398368 0.9998368

sample estimates:mean of x mean of y

29.90 29.47

Dal momento che il p-value associato al test e maggiore del 10%, i responsabili della Qualitasaranno portati ad accettare l’ipotesi nulla9 e, pertanto, a preferire il fornitore che o!re unprezzo unitario minore. !

Due campioni appaiati In tal caso le osservazioni del primo campione non sonoindipendenti da quelle del secondo ed il problema coinvolge, per cosı dire, la nuova v.c.D = X ! Y , mentre l’ipotesi nulla risulta H0 : µD = µ0 = 0. Specificati gli oggetti,ad esempio x e y, contenenti le realizzazioni campionarie, si trattera unicamente dispecificare paired=TRUE.A commento, osserviamo che se definissimo il nuovo oggetto w<-x-y e ricorressimoall’istruzione t.test(w), otterremmo ovviamente gli stessi risultati dell’istruzionet.test(x,y,paired=TRUE).

Esempio 5.3.3 Si supponga che al fine di verificare l’e"cacia di un nuovo farmaco anti-coagulante, si sono e!ettuate n = 8 misurazione della concentrazione (in %) di protrombinasu altrettanti pazienti prima e dopo la somministrazione del farmaco, ottenendo i seguentirisultati:

prima X 0.016 0.018 0.023 0.015 0.018 0.015 0.017 0.024dopo Y 0.014 0.016 0.020 0.012 0.018 0.014 0.018 0.022

Il sistama di ipotesi che si desidera sottoporre a verifica si presenta:+

H0 : µX % µY = 0H1 : µX % µY > 0

Dal momento che l’analisi e stata condotta sui medesimi pazienti, siamo di fronte a duecampioni appaiati (non indipendenti) e pertanto al fine della verifica delle ipotesi poste,abbiamo:

9Si osservi che l’intervallo di confidenza [!0.1398368; 0.9998368] contiene lo zero.

139

Page 142: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

> x<-c(0.016,0.018,0.023,0.015,0.018,0.015,0.017,0.024)> y<-c(0.014,0.016,0.020,0.012,0.018,0.014,0.018,0.022)> t.test(x,y, alternative="greater", mu=0,paired = TRUE,

var.equal = TRUE, conf.level = 0.95)

Paired t-test

data: x and yt = 3, df = 7, p-value = 0.009971alternative hypothesis: true difference in means is greater than 095 percent confidence interval:0.0005527107 NA

sample estimates:mean of the differences

0.0015

Risultati che indicano come il nuovo farmaco abbia e!ettivamente potere anti-coagulante. !

Osservazione 5.3.1 Desiderando visualizzare o porre in un nuovo oggetto, per suc-cessive elaborazioni, un (solo) risultato di interesse, ad esempio il valore della funzionetest, l’intervallo di confidenza, ..., sara su!ciente aggiungere al comando t.test(...)il su!sso $ seguito da uno dei seguenti nomi convenzionali: statistic per il valoredella funzione test, p.value per il p!value associato al test, conf.int per l’intervallodi confidenza.

Potenza e progettazione di test su valori medi - power.t.test

Come si e gia sottolineato, due problemi, essenzialmente, sorgono qualora si conside-rino test di ipotesi statistiche e precisamente:

— valutare il potere discriminatorio della funzione test in corrispondenza ad alcunivalori di interesse del parametro ' sotto l’ipotesi alternativa;

— individuare la dimensione n del campione casuale sı che essa garantisca prefissateprobabilita di commettere sia l’errore del I tipo che l’errore del II tipo, questavalutata in corrispondenza di un particolare valore critico ' % %1.

La risposta al primo quesito e data calcolando la funzione di potenza del test, K ('),o equivalentemente la probablita di commettere l’errore del II tipo, * ('), in corri-spondenza ai diversi valori di interesse di ' % %1.Quanto al secondo problema, che va sotto il nome di progettazione di un test, si trattadi risolvere rispetto ad n l’equazione gia posta in (5.11) e precisamente:

K(' % %1) = 1 ! *(' % %1)

140

Page 143: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

una volta fissate le probabilita $ e *(' % %1).Nel caso di verifiche di ipotesi statistiche su un valor medio o sulla di"erenza tradue valori medi, i precedenti problemi in R possono essere risolti facendo ricorso allafunzione power.t.test la cui sintassi completa e:

power.t.test(n=NULL, delta=NULL, power=NULL, sd=1, sig.level=0.05,type = c("two.sample","one.sample", "paired"),alternative = c("two.sided", "one.sided"))

dove10 n rappresenta la numerosita del campione casuale, delta la di"erenza tra lemedie µ1 ! µ0, power la potenza del test in corrispondenza a µ1 cioe K(µ1), sd loscarto quadratico medio " o la sua stima s ed infine sig.level la probabilita $dell’errore del I tipo.Il parametro incognito, nel nostro caso power oppure n, deve obbligatoriamente esserepassato alla funzione come NULL. L’output della funzione porge il valore numerico ditutti i parametri della stessa. Analogamente ad altre funzioni, possiamo visualizzareed eventualmente porre in un nuovo oggetto un (solo) risultato di interesse aggiun-gendo al comando power.t.test(...) il su!sso $ seguito dal nome del parametrodi interesse.

Esempio 5.3.4 L’Esempio 5.2.1, concernente un test unidirezionale a protezione superioreper un valor medio, proponeva, tra le altre cose, il calcolo della funzione di potenza deltest in corrispondenza all’ipotesi alternativa µ1 = 310, calcolo che venne eseguito applicandodirettamente la (5.8) e ricorrendo alla distribuzione t di Student, con ' = n%1 gradi di libertae parametro di non centralita

'n µ1 % µ0

S in corrispondenza a k = 1.6849. In alternativaavremmo potuto ricorrere alla funzione power.t.test nel seguente modo11:

> power.t.test(n=40,power=NULL,delta=10,sd=113.7854,sig.level=0.95,alternative="one.sided",type="one.sample")

One-sample t test power calculation

n = 40delta = 10sd = 113.7854sig.level = 0.95power = 0.98578alternative = one.sided

Si osservi che la probabilita dell’errore del II tipo in corrispondenza a µ1 = 310, ossia ((µ1)puo essere ottenuta con il comando:

10Perlomeno nel caso di test su un solo valor medio.11Per i dati dell’Esempio 5.2.1 lo scarto quadratico medio vale 113.7854.

141

Page 144: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

> power.t.test(n=40,power=NULL,delta=-10,sd=113.7854,sig.level=0.05,alternative="one.sided",type="one.sample")

One-sample t test power calculation

n = 40delta = -10sd = 113.7854sig.level = 0.05power = 0.01422000alternative = one.sided

Per concludere, si noti il comportamento del comando:

> power.t.test(n=40,power=NULL,delta=delta=10,sd=113.7854,sig.level=0.95alternative="one.sided",type="one.sample")$power

[1] 0.98578

quantita che, come sempre, potrebbe essere immessa in un nuovo oggetto per successiveelaborazioni. !

Esempio 5.3.5 Sia X v.c. distribuita normalmente con parametri µ ignoto e $2 stimata,in base a indagini precedenti, in 225. Desiderando sottoporre a verifica le seguenti ipotesistatistiche:

+H0 : µ = µ0 = 100H1 : µ #= µ0 = 100

si desidera progettare un test che rispetti le seguenti condizioni:

— probabilita dell’errore del I tipo pari al 5%, ossia ! = 0.05;

— potenza del test in corrispondenza all’ipotesi alternativa µ!

1 = 120 o µ!!

1 = 80 pari al98%, ovvero K(µ

!

1) = K(µ!!

1 ) = 0.98.

Desiderando fare ricorso, in alternativa a quanto fatto a tal riguardo all’Esempio 5.2.3, allafunzione power.t.test, possiamo porre:

n=NULL,power=0.98,delta=20,sd=sqrt(225),sig.level=0.05,alternative="two.sided",type="one.sample"

ottenendo:

> power.t.test(n=NULL,power=0.98,delta=20,sd=sqrt(225),sig.level=0.05,alternative="two.sided",type="one.sample")

One-sample t test power calculation

142

Page 145: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

n = 11.20446delta = 20sd = 15sig.level = 0.05power = 0.98alternative = two.sided

sı che la numerosita campionaria atta a garantire i vincoli posti sara n = 12. !

Test su due varianze — var.test

Desiderando sottoporre a verifica, sulla base delle realizzazioni di due campioni indi-pendenti tratti dalle v.c. X / N(µX ,"2

X) e Y / N(µY ,"2Y ), l’ipotesi di omoscheda-

sticita tra le due varianze, cioe H0 : "2X/"2

Y = 1, contro una delle alternative:

H1 : "2X/"2

Y 3= 1 H1 : "2X/"2

Y > 1 H1 : "2X/"2

Y < 1

a parte la funzione (5.2.1) da noi creata ad hoc, possiamo ricorrere alla funzionevar.test, la cui sintassi e:

var.test(x,y,ratio=1,alternative="less","greater",two.sided",conf.level=0.95)

con ovvio significato dei parametri che vi compaiono12.

Esempio 5.3.6 La verifica di ipotesi sull’uguaglianza tra due valori medi, di cui all’Esempio5.3.2, venne condotta presupponendo l’uguaglianza tra le due varianze $2

A e $2B . Al fine di

testare tale ipotesi, ricorrendo a var.test, abbiamo:

> x<-c(30.0,29.9,29.2,29.8,30.8,29.8,30.4,28.9,30.5,29.7)> y<-c(28.7,28.6,29.4,29.7,29.9,30.2,28.7,29.4,30.4,29.7)> var.test(x,y)

F test to compare two variances

data: x and yF = 0.8185, num df = 9, denom df = 9, p-value = 0.7702alternative hypothesis: true ratio of variances is not equal to 195 percent confidence interval:0.203293 3.295101

sample estimates:ratio of variances

0.8184565

12Cfr. Osservazione 5.3.2.

143

Page 146: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

Visto che il p-value associato al test e decisamente elevato (77%), siamo propensi ad accettarel’ipotesi nulla, nonostante il rapporto tra le varianze campionarie sia 0.81846. !

Osservazione 5.3.2 Si noti che la funzione var.test prevede l’opzione ratio=k,con k > 0, consente la verifica dell’ipotesi H0 : "2

X/"2Y = k contro le alternative:

H1 : "2X/"2

Y = k H1 : "2X/"2

Y > k H1 : "2X/"2

Y < k

Test su piu varianze — bartlett.test

Se consideriamo k > 2 campioni casuali indipendenti, Xj / N(µ,"2j ), ciascuno di

cardinalita nj , con j = 1, 2, . . . , k, la verifica dell’ipotesi di omoschedasticita tra levarianze e cioe:

H0 : "21 = "2

1 = . . . = "2k H1 : 4 (i, j)i$=j "2

i = "2j

puo essere e"ettuata ricorrendo alla funzione bartlett.test.Dal momento che per ciascun campione la stima della varianza e:

S2j =

1nj ! 1

nj!

i=1

,Xij ! Xj

-2

il test prende le mosse dalla constatazione che, per ciascun campione, il rapporto:

V =1

n ! k

k!

j=1

S2j (nj ! 1)/

?

@kA

j=1

S2 (nj!1)j

B

C

1n ! k

e uguale13 all’unita se e solo se tutte le varianze campionarie sono uguali tra loro,altrimenti esso assume valori maggiori dell’unita e aumenta via via con l’accrescersidelle di"erenze tra le S2

i . Percio se sotto H0 il rapporto V tendera ad assumere valoriprossimi a 1, mentre sotto H1 esso assumera valori tendenzialmente maggiori.Ora14, sotto l’ipotesi nulla, una certa funzione del rapporto V , e precisamente:

K2 =n ! k

Qln V

dove:

Q = 1 +1

3 (k ! 1)

k!

j=1

1nj ! 1

! 1n ! k

13Trattasi, a ben vedere, del rapproto tra la media aritmetica e la media geometrica delle varianzecampionarie pesate con i rispettivi gradi di liberta.

14Per approfondimenti Bartlett (1937) e, ad esempio, Gartside (1972).

144

Page 147: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

descrive una v.c. la cui distribuzione puo essere approssimata da quella di Chi-Quadrocon & = n ! k gradi di liberta, viceversa sotto l’ipotesi alternativa essa descrive unav.c. che tende ad assumere valori sistematicamente maggiori.Scelto, quindi, un appropriato livello di significativita 1!$, si rifiutera l’ipotesi di omo-geneita delle varianze "2

i se e solo se la variabile test K2 assume valori appartenentialla regione critica [)2

n!k;1!!; +-].Ritornando alla funzione bartlett.test, la sua sintassi e quanto mai semplice,infatti:

bartlett.test(x, g)

Tuttavia, in linea di massima, occorre osservare che:

— x potrebbe essere un vettore ad elementi numerici corrispondenti alle n osser-vazioni campionarie; in tal caso e d’obbligo indicare l’oggetto g, di dimensioneuguale a x, i cui elementi indicheranno il campione di appartenenza di ciascunelemento di x;

— x potrebbe essere una lista i cui k elementi corrispondono alle osservazioni deik campioni considerati; in tal caso e su!ciente il comando bartlett.test(x).

Output della funzione sono la funzione test K2 di Bartlett (statistic), i corrispon-denti gradi di liberta (parameter), nonche il p ! value (p.value).

Esempio 5.3.7 Si immagini che tre macchinari, A, B e C producano uno stesso componentemeccanico una cui caratteristica di vitale importanza e rappresentata dal diametro. Si sup-ponga, altresı che il diametro del componente meccanico possa essere descritto tramite unav.c. X - N(µ, $2

i ), i = 1, 2, 3. Onde verificare se i tre macchinari mostrino una uguale va-riabilita nel corso della produzione, sono stati approntati altrettanti campioni casuali i qualihanno fornito i seguenti risultati (in mm):

A B C30.0 26.7 28.729.9 28.6 28.629.2 27.4 29.429.8 28.7 29.730.8 29.9 29.929.8 26.2 28.730.4 27.7 29.428.9 29.730.529.7

Definiti i tre oggetti a, b e c che contengono i singoli dati campionari, creiamo la lista abcche passeremo alla funzione bartlett.test; pertanto:

145

Page 148: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

> a<-c(30.0,29.9,29.2,29.8,30.8,29.8,30.4,28.9,30.5,29.7)> b<-c(28.7,28.6,29.4,29.7,29.9,28.7,29.4,29.7)> c<-c(26.7,28.6,27.4,28.7,29.9,26.2,27.7)> abc<-list(a,b,c)> bartlett.test(abc)

Bartlett test for homogeneity of variances

data: abcBartlett’s K-squared = 6.7661, df = 2, p-value = 0.03394

Essendo il p%value associato alla funzione test decisamente piccolo, siamo propensi a rigettarel’ipotesi di uguaglianza tra tre le varianze.La figura (5.1) riporta i diagrammi a “scatola e ba"” dei valori campionari del diametro deicomponenti meccanici, ed e stata ottenuta tramite il comando:

> boxplot(abc,main="",xlab="Macchinari",ylab="Diametro (mm)",col="lightgray",names=c("A","B","C"))

AA BB CC

2728

2930

MacchinariMacchinari

Dia

met

ro (m

m)

Figura 5.1: Diagrammi a “scatola e ba!” — Esempio 5.3.7

Osserviamo che avremmo e!ettuare il test organizzando i dati campionari nel seguente modo:

146

Page 149: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

> dati<-c(30.0,29.9,29.2,29.8,30.8,29.8,30.4,28.9,30.5,29.7,28.7,28.6,29.4,29.7,29.9,28.7,29.4,29.7,26.7,28.6,27.4,28.7,29.9,26.2,27.7)

> gruppi<-c(rep(1,10),rep(2,8),rep(3,7))> bartlett.test(dati,gruppi)

Bartlett test for homogeneity of variances

data: dati and gruppiBartlett’s K-squared = 6.7661, df = 2, p-value = 0.03394

ottenendo, coerentemente, lo stesso risultato. !

Il test di Bartlett trova applicazione sopratutto nell’ambito dell’Analisi delal Varianza(ANOVA) e in generale nello studio dei modelii lineari.

Test esatto su una proporzione — binom.test

Ricorrendo alla funzione binom.test possiamo sottoporre a verifica l’ipotesi statisticaH0 : # = #0 contro una delle alternative:

H1 : # 3= #0 H1 : # < #0 H1 : # > #0

sulla base15 delle realizzazioni della funzione test T = n!1 (ni=1 Xi, la quale, sotto

l’ipotesi nulla, ha distribuzione binomiale di parametri n, #0.Senza entrare in dettagli, la sintassi per accedere a tale funzione e:

binom.test(x, n, p = 0.5, alternative = c("two.sided", "less","greater"), conf.level = 0.95)

dove x indica il numero di Successi osservati in n prove indipendenti di un esperimentocasuale. L’utente, come sempre, puo specificare l’ipotesi alternativa nonche il livellodi confidenza richiesto. Si osservi che la situazione di default prevede #0 = 0.5.

Esempio 5.3.8 Da precedenti indagini la proporzione di neonate a!ette da displasia all’ancaera approssimativamente pari al 3%. In base ad una recente indagine condotta su un campionecasuale di 120 neonate solo tre sono risultate a!ette da displasia all’anca. Possiamo a!ermarela proporzione sia dinimuita?Il sistema di ipotesi a conflitto risulta:

+H0 : " = "0 = 0.03H1 : " < "0

Ricorrendo alla funzione binom.test, abbiamo:15Si ricordi quanto detto a tal proposito alla fine del paragrafo5.1 e riassunto dalla Funzione 5.1.4

e dall’Esempio 5.1.5.

147

Page 150: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

> binom.test(3,120,p=0.03,alternative="less",conf.level=0.95)Exact binomial test

data: 3 and 120number of successes = 3, number of trials = 120, p-value = 0.5133alternative hypothesis: true probability of success is less than 0.0395 percent confidence interval:0.00000000 0.06333852

sample estimates:probability of success

0.025

Essendo decisamente elevato il p%value associato al test, siamo propensi ad accettare l’ipotesinulla e concludere quindi che la proporzione di neonate a!ette da displasia all’anca non siamutata nel corso del tempo. !

Osservazione 5.3.3 Qualora si desideri e"ettuare una verifica di ipotesi sulla dif-ferenza tra due proporzioni, sulla base di due campioni indipendenti di numerositaelevata, si puo ricorrere alla funzione t.test.

Esempio 5.3.9 Da un indagine condotta su un campione casuale di 200 individui adulti, dicui 100 di sesso femminile e i restanti di sesso maschile, risulta che il 75% dei maschi fuma,mentre le fumatrici sono il 55%. Si desidera sottoporre a verifica il seguente sistema di ipotesistatistiche:

+H0 : "maschi = "femmine

H1 : "maschi > "femmine

Ricorrendo alla funzione t.test, occorre dapprima creare i due vettori, maschi e femmine,delle osservazioni campionarie; tali vettori conterranno 100 elementi con opportuna alternanzadi 0 (non fumatore/fumatrice) e di 1 (fumatore/fumatrice). Cio premessso:

> maschi<-c(rep(1,75),rep(0,25))> femmine<-c(rep(1,55),rep(0,45))> t.test(maschi,femmine, alternative="two.sided", mu=0,

paired = FALSE, var.equal = TRUE, conf.level = 0.95)

Two Sample t-test

data: maschi and femminet = 3.0172, df = 198, p-value = 0.002886alternative hypothesis: true difference in means is not equal to 095 percent confidence interval:0.06928128 0.33071872

sample estimates:mean of x mean of y

0.75 0.55

148

Page 151: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

Essendo decisamente piccolo il p% value associato al test, siamo propensi a rigettare l’ipotesidi uguaglianza tra le due proporzioni. !

Test sul coe"ciente di correlazione lineare — cor.test

Desiderando verificare se due due campioni casuali, X e Y di egual cardinalita n,provengono da altrettante v.c. X / N(µX ,"2

X) e Y / N(µY ,"2Y ) linearmente indi-

pendenti16, possiamo e"ettuare un test teso a verificare se il coe!ciente di correlazionelineare + tra le v.c. X e Y possa ritenersi nullo oppure no. In sostanza, si tratta disottoporre a verifica le seguenti ipotesi statistiche:

+H0 : + = +0 = 0H1 : + 3= +0 = 0

In tali situazioni abitualmente si ricorre alla funzione test corrispondente al coe!cientedi correlazione campionario r del Pearson, definito come:

r =SX,Y

SX SY

o, meglio, alla sua trasformata:

r

1 ! r2

(n ! 2

che sotto H0 viene a possedere distribuzione t di Student con & = n!2 gradi di liberta.Sotto tali condizioni si possono applicare le tecniche generali esposte al paragrafo (5.2).In R possiamo procedere ad un si"atto test di ipotesi ricorrendo alla particolarefunzione cor.test, la quale, bene qui sottolinearlo, prevede anche altri tipi di testnon parametrici. Nel seguito, tuttavia, considereremo unicamente il caso di testparametrico basato sul rapporto di correlazione del Pearson17. Sotto tale profilo, lasintassi della funzione in esame si riduce a:

cor.test(x, y)

dove, ovviamente, x e y sono due vettori ad elementi numerici e di egual dimensione,cioe tali che length(x)=length(y).Output essenziali sono la funzione test r di Pearson (statistic), i corrispondentigradi di liberta (parameter), nonche il p ! value (p.value).

16Il che equivale a chiedersi se essi siano estratti da una v.c. Normale bivariata a componentilinearmente indipendenti.

17Che d’altronde corrisponde alla situazione di default.

149

Page 152: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

Esempio 5.3.10 Si immagini di avere rilevato, su un campione di n = 10 autovetture medio-piccole ad alimentazione a benzina e trazione anteriore, la potenza espressa in CV-Din e lavelocita massima dichiarata espressa in km/h, ottenendo i seguenti risultati:

Potenza (CV-Din) Velocita (km/h)45 13554 14545 13750 14060 15065 14070 16054 14570 15060 150

Organizzate, per comodita, le osservazioni campionarie nel data frame dati, la figura (5.2)porge alcune informazioni circa la dipendenza tra le variabili in esame.

CV.DinCV.Din

135135 140140 145145 150150 155155 160160

4550

5560

6570

0.80.8

4545 5050 5555 6060 6565 7070

135

145

155 Vel.maxVel.max

Figura 5.2: Correlazione tra velocita massima e potenza — Esempio 5.3.10

I comandi atti allo scopo sono:

150

Page 153: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

> x<-cbind(c(45, 54, 45, 50, 60, 65, 70, 54, 70, 60))> y<-cbind(c(135, 145, 137, 140, 150, 140, 160, 145, 150, 150))> dati<-data.frame(CV.Din=x,Vel.max=y)> pairs(dati,panel=panel.fit,diag.panel=panel.hist,

upper.panel=panel.cor)

Desiderando sottoporre a verifica le seguenti ipotesi statistiche:+

H0 : % = %0 = 0H1 : % #= %0 = 0

ricorrendo alla funzione cor.test avremo:

> attach(dati)> cor.test(CV.Din,Vel.max)

Pearson’s product-moment correlation

data: CV.Din and Vel.maxt = 3.6893, df = 8, p-value = 0.006137alternative hypothesis: true correlation is not equal to 0sample estimates:

cor0.7936084

> detach(dati)

ed evidentemente saremo portati al rigetto di H0. !

E bene notare che a volte si e interessati a verificare, sulla base dei valori campionariosservati, l’ipotesi che il coe!ciente di correlazione della popolazione sia uguale ad unvalore specificato non nullo, poniamo +0 3= 0. In altri termini si desidera sottoporre avericfica le le ipotesi statistiche:

+H0 : + = +0 3= 0H1 : + 3= +0

In tal caso, si puo ricorre alla funzione test:

z =(

n ! 3+

0.5 ln)1 + r

1 ! r

*! 0.5 ln

)1 + +0

1 ! +0

*D

la quale sotto H0 tende a distribuirsi, perlomeno asintoticamente, secondo una N(0, 1).Se tale e il caso, allora possiamo pensare di implementare una funzione ad hoc chepotrebbe presentarsi come:

151

Page 154: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

Funzione 5.3.1rho.test<-function(rho,x,y)1

{2

covar(x,y,print=F)3

r<-rxy.out4

n<-length(!is.na(x))5

z<-(sqrt(n-3))*(0.5*log((r+1)/(1-r))-0.5*log((rho+1)/(1-rho)))6

pval<-2*pnorm(-abs(z))7

cat("r =",r,"rho =",rho,"p-value=",pval,"\n")8

}9

Test di indipendenza chisq.test

Dedichiamo questo paragrafo alla presentazione di un particolare test di ipotesi sta-tistiche che si di"erenzia dai precedenti per il fatto che non viene ipotizzata alcunaforma per la densita della v.c. da cui viene tratto il campione casuale. Tali testvengono abitualmente detti test “non parametrici”Si immagini che due caratteri possano essere descritti in modo congiunto mediante lav.c. bivariata (X,Y ); il problema che tenteremo di risolvere e verificare, sulla basedelle realizzazioni di due campioni di ugual numerosita X e Y tratti da (X,Y ), se lav.c. in esame e a componenti stocasticamente indipendenti, in simboli X 5 Y .In sostanza si tratta di verificare il seguente sistema di ipotesi statistiche:

+H0 : X 5 YH1 : X 35 Y

(5.12)

Abitualmente le realizzazioni campionarie x e y vengono organizzate in una tabellaa doppia entrata di dimensione r " s, dove r indica il numero delle modalita di x es il numero delle modalita di y, che riporta il numero delle unita campionarie chepresentano al contempo modalita i di X e j di Y , cioe le frequenze congiunte nij, coni = 1, 2, . . . , r e j = 1, 2, . . . , sAl fine della verifica del sistema di ipotesi (5.12) si ricorre alla funzione test, dovutaal Pearson:

X2 =r!

i=1

s!

j=1

(nij ! nij)2

n2ij

(5.13)

dove nij rappresentano le frequenze congiunte che ci si attenderebbe osservare nelcaso di indipendenza stocastica18 tra le componenti la v.c. doppia (X,Y ).

18E cioe, com’e facile accertare: nij =(r

i=1nij

(sj=1

nij/(r

i=1

(sj=1

nij = n.j ni./n. A talproposito si veda anche l’Esempio 3.2.3.

152

Page 155: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

Sotto H0, la funzione test (5.13) e distribuita approssimativamente socondo una Chi-Quadro con (r ! 1) (s ! 1) gradi di liberta. Il test tendera, dunque, ad accettarel’ipotesi nulla se e solo se il valore osservato della (5.13) e non maggiore di q1!!, dove,coerentemente con quanto precedentemente esposto:

P [X2 ' q1!!;H0] 6 1 ! $

Al fine della verifica del sistema di ipotesi (5.12), organizzate le frequenze osservatein una martrice, diciamo x, di dimensione r " s, possiamo ricorrere alla funzionechisq.test ed impartire il comando:

chisq.test(x, correct = FALSE)

Senza entrare in dettagli, osserviamo che ponendo correct=TRUE, che rappresenta lasituazione di default, la funzione provvede in modo automatico ad applicare correzionedello Yates, cioe ricorre alla funzione test:

X2 =r!

i=1

s!

j=1

(nij ! nij ! 0.5)2

n2ij

qualora si operi su campioni poco numerosi.

Esempio 5.3.11 Un campione casuale di 200 individui adulti e stato classificato in base alsesso e l’occupazione, ottenendo la seguente ditribuzione congiunta di frequenze:

Occupazione ) Sesso $ Maschio FemminaOccupato 100 50Disoccupato 20 30

Al fine di verificare se vi sia una relazione di dipendeza tra il sesso e l’occupazione, ricorriamoal test chisq.test():

> x<-matrix(c(100,20,50,30),2,2)> chisq.test(x,correct=FALSE)

Pearson’s Chi-squared test

data: xX-squared = 11.1111, df = 1, p-value = 0.0008581

Dal momento che il p%value associato al test e decisamente piccolo, saremo portati a rigettarel’ipotesi di indipendenza tra i caratteri considerati. !

Esempio 5.3.12 Un dado viene lanciato 1000 volte dando luogo alla seguente distribuzioneempirica:

153

Page 156: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

Punteggi xi 1 2 3 4 5 6Frequenze ni 142 186 157 177 176 162

Possiamo pensare che il dado sia equilibrato?Il problema puo essere risolto confrontando la distribuzione delle frequenze empiriche con ladistribuzione delle frequenze che ci aspetteremo di osservare qualora il dado fosse regolare,cioe sotto l’ipotesi H0 : ni = 1000/6 = 166.6667. Ricorriamo, pertanto, ad una verifica diipotesi basata sulla funzione test (5.13).

> dadi<-sample(c(1:6), 1000, replace = TRUE)> table(dadi)1 2 3 4 5 6142 186 157 177 176 162> chisq.test(table(dadi))

Chi-squared test for given probabilities

data: table(dadi)X-squared = 7.748, df = 5, p-value = 0.1707

In sostanza possiamo accettare l’ipotesi che il dado sia equilibrato. Si osservi che, se e il caso,possiamo passare in modo diretto i valori delle frequenze teoriche alla funzione chisq.testcon l’opzione p=(...), che per default e rep(1/length(x), length(x)). !

154

Page 157: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Capitolo 6

Alcune note sui modelli lineari

Nel seguito vedremo come sia possibile a"rontare e risolvere in R alcuni problemi checoncernono modelli statistici lineari e, in particolare, ci occuperemo, seppur a grandilinee data la vastita dell’argomento, dell’analisi della regressione e dell’analisi dellavarianza.Diciamo subito che non ci occuperemo della costruzione di routine di caclolo ad hoc,ma piuttosto illustreremo come sfruttare le principali funzioni presenti in R e raccoltenella libreria base che in linea di massima si basano sui comandi lm, acronimo di“linear model”, e aov, acronimo di “analysis of variance”.

6.1 La regressione lineare semplice: il modello teorico

Se consideriamo una v.c. doppia (X,Y ) a componenti non indipendenti, e chiaro chela conoscenza del valore assunto da X viene a modificare il nostro grado di incertezzacirca la realizzazione di Y ; in generale tale incertezza viene a diminuire, dal momentoche la distribuzione di Y condizionata all’evento X = x viene a possedere in mediauna varianza piu piccola1 della varianza di Y .In tutte quelle situazioni in cui si puo ipotizzare che un fenomeno, descrivibile me-diante la v.c. X abitualmente detta variabile esplicativa o predittiva, possa essereimpiegato per “spiegare” quello descritto dalla v.c. Y , detta variabile variabile rispo-sta, si e portati a ricercare un legame funzionale del tipo Y % = f(X) che possa o"rireuna previsione per Y tramite X; in particolare si tratta di individuare una funzione ftale che IE[Y ! f(X)] = 0 ed al contempo sia il piu vicino possibile ad Y ad esempioin media quadratica, ovvero minimizzi IE[(Y ! f(X))2].Dalla teoria e noto che tali condizioni sono soddisfatte ponendo f(X) = IE[Y |X].Tale funzione, che ad una determinazione x di X associa IE[(Y |X = x], viene dettafunzione di regressione di Y rispetto a X e, fissato un sistema di riferimento ortogonalecartesiano, il corrispondente grafico viene indicato quale curva di regressione di Y

1Il fatto che IE[V ar(Y |X)] " V ar[Y ] discende dal teorema della Scissione della Varianza Totale.

Page 158: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

rispetto a X. La bonta dell’approssimazione di Y mediante IE[Y |X], lo ricordiamo,viene misurata attraverso il rapporto di correlazione di Pearson, definto come:

,2Y |X =

V ar[IE[Y |X]]V ar[Y ]

Alla luce di tali considerazioni, possiamo, dunque, porre:

Y = IE[Y |X] + - (6.1)

dove - = Y ! IE[Y |X] rappresenta il residuo della regressione o componente di distur-bo; piu in particolare si puo dimostrare che trattasi di una v.c. non correlata ne conX ne con IE[Y |X], per la quale si ha IE[-] = 0 e V ar[-] = V ar[Y ] (1 ! ,2

Y |X).

6.2 La regressione lineare

Sorge naturale, a questo punto, il problema della scelta del legame funzionale f(X); atal proposito, perlomeno dal punto di vista applicativo, notevole importanza2 rivesteil caso in cui per esso si scelga un polinomio di primo grado, cioe si ponga:

IE[Y |X] = $ + * X

sı che la (6.1) diviene:

Y = $ + * X + - (6.2)

Sotto tale ipotesi di lavoro, e facile dedurre:

$ = IE[Y ] ! * IE[X]

* =Cov(X,Y )

V ar[X]= +

"Y

"X

Cio premesso, la funzione di regressione di Y rispetto a X viene ad assumere la forma:

Y = IE[Y ] + +"Y

"X(X ! IE[X]) + - (6.3)

e viene abitualmente detta retta di regressione di Y rispetto a X.Se si considera la varianza di ambo i membri della (6.3): V ar[Y ] = +2 V ar[Y ] +V ar[-],segue:

V ar[-] = V ar[Y ] (1 ! +2) (6.4)

a riprova che nel caso di regressione lineare: ,2Y |X = +2.

2Si osservi che qualora la v.c. doppia (X, Y ) possegga distribuzione normale bivariata, alloraIE[Y |X = µY + "XY "!2

X (X ! µX), dove "XY = Cov(X, Y ).

156

Page 159: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

6.2.1 Stima della retta di regressione in base ai valori campionari

Supponendo ora vera l’ipoesi IE[Y |X] = $ + * X, e dispondendo di un campione ca-suale (X,Y) = ((X1, Y1), (X2, Y2), . . . , (Xn, Yn)) di dimensione n > 2 tratto dalla v.c.bivariata (X,Y ), il problema che ci si pone, perlomeno dal punto di vista statistico, equello della stima dei parametri $ e * nonche della varianza del termine di disturbo.Data la n-pla campionaria (xi, yi)i=1,2,...,n, si trattera, dunque, di individuare i para-metri della retta, di equazione poniamo y = a + b x, interpolante la “nuvola di punti”di coordinate (xi, yi); il ricorso al metodo dei minimi quadrati comporta, com’e noto,la minimizzazione della funzione:

F (a, b) =n!

i=1

(yi ! yi)2 =n!

i=1

(yi ! a ! b xi)2

La condizione . F. a = . F

. b = 0, porge il sistema delle “equazioni normali”:

78

9

(ni=1(yi ! a ! b xi) = 0

(ni=1(yi ! a ! b xi)xi = 0

(6.5)

da cui facilmente:

b =

!n

i=1(yi ! y) (xi ! x)

!n

i=1(xi ! x)2

=Cov(x, y)

s2x

= rsy

sx(6.6)

a = y ! b x (6.7)

e quindi y = y + rsysx

(x! x) viene a rappresentare la versione empirica della retta diregressione posta in (6.3).Chiaramente, al variare della n-pla campionaria (xi, yi), le grandezze x, y, s2

x, s2y,

r, y, a e b altro non sono che realizzazioni di altrettante v.c.; queste ultime due inparticolare sono determinazioni, rispettivamente, degli stimatori A e B definiti:

A = Y ! B X (6.8)

B =

!n

i=1(Yi ! Y ) (Xi ! X)

!n

i=1(Xi ! X)2

(6.9)

157

Page 160: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

Desiderando procedere, si puo dimostrare che trattasi3 di stimatori corretti, nel sensoche IE[A] = $ e IE[B] = *, con varianza4, fissate le realizzazioni xi delle n v.c. Xi:

V ar [B] ="2

!n

i=1(xi ! x)2

(6.10)

V ar [A] = "2

?

@ 1n

+x2

!n

i=1(xi ! x)2

B

C ="2

n+ x2 V ar [B] (6.11)

Senza voler verificare la veridicita di tale a"ermazione, ci limitiamo ad osservareche le dimostrazioni partono dalla semplice considerazione che il valore atteso delvalore atteso di uno stimatore condizionatamente alle realizzazioni xi delle n v.c. Xi

corrisponde al valor medio dello stimatore stesso.Dal momento poi che IE[Y |X = x] = $ + * x, possiamo a"ermare che y = a + b x euna stima corretta di $ + * x. Quanto alla varianza dello stimatore Y , avremo:

V arEYF

= "2

?

@ 1n

+(x ! x)2

!n

i=1(xi ! x)2

B

C (6.12)

E bene osservare che il parametro incognito "2, che compare in modo esplicito nelle(6.10), (6.11) e (6.12), altro non e che la varianza delle Yi, date le realizzazioni xi

delle v.c. Xi, cioe:

"2 = V ar[Yi|Xi = xi] = V ar[-]

Quale sua stima sorge spontaneo ricorrere alla varianza campionaria dei residui:

S2e =

!n

i=1(Yi ! Yi)2

n ! 1

tuttavia tale stimatore non risulta corretto. Infatti si puo dimostrare che:n!

i=1

(Yi ! Yi)2 = "2n!

i=1

(1 ! hi) = "2 (n !n!

i=1

hi) = "2 (n ! 2) (6.13)

dove, per X = xi fissato:

hi =

!n

i=1x2

i ! 2xi

!n

i=1xi + n x2

i

n!n

i=1x2

i ! (!n

i=1xi)2

(6.14)

3In verita essi risultano stimatori corretti a varianza minima. Per inciso tali stimatori non risultanotra loro stocasticamente inipendenti.

4E cio indipendentemente dalla legge di distribuzione delle v.c. coinvolte.

158

Page 161: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

e quindi stimatore corretto di "2 risulta:

S2 =

!n

i=1(Yi ! Yi)2

n ! 2(6.15)

6.2.2 Verifiche di ipotesi circa i parametri della retta di regressione

I risultati sin qui proposti prendevano le mosse dalla semplice considerazione che lafunzione di regressione di Y rispetto a X fosse esprimibile mediante un polinomio diprimo grado, cioe IE[Y |X] = $ + * X; in sostanza senza fare alcuna ipotesi circa ledistribuzioni delle v.c. coinvolte.Ipotizzando, ora, che la v.c. - abbia distribuzione N

,0,"2

-, allora la v.c. Y |X = x

segue una distribuzione N,$ + * x,"2

-e pertanto:

A / N

?

@*,"2 (1n

+x2

!n

i=1(xi ! x)2

)

B

C

B / N

?

@*,"2

!n

i=1(xi ! x)2

B

C

Y / N

?

@$ + * x,"2 (1n

+(x ! x)2

!n

i=1(xi ! x)2

)

B

C

mentre la v.c. (n ! 2)S2

"2 viene a possedere distribuzione )2n!2; inoltre, si dimostra

che essa e indipendente da Y , A e B.Sotto tali ipotesi, dunque, le v.c. (statistiche test):

Ta =A ! $

S

GHHI 1n

+x2

!n

i=1(xi ! x)2

(6.16)

Tb =B ! *

S

GHHI1

!n

i=1(xi ! x)2

=(B ! *)SX

S

(n ! 1 (6.17)

vengono entrambe a possedere distribuzione t di Student con n ! 2 gradi di liberta.

159

Page 162: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

Tali considerazioni consentono di costruire di intervalli di confidenza o e"ettuare veri-fiche di ipotesi sui parametri del modello. A tal proposito, le ipotesi che abitualmentevengono poste a confronto sono del tipo:

+H0 : $ = 0H1 : $ 3= 0 (6.18)

+H0 : * = 0H1 : * 3= 0 (6.19)

Per completezza, presentiamo un test che, basandosi sull’analisi della varianza dellaregressione, o"re indicazioni circa la la bonta di adattamento dei dati alla retta diregressione.Dal momento che la devianza (totale) di Y puo essere scissa come:

n!

i=1

(Yi ! Y )2

J KL MSSTot

=n!

i=1

(Yi ! Y )2

J KL MSSE

+n!

i=1

(Yi ! Y )2

J KL MSSR

(6.20)

abbiamo:

— per cose ormai note:

n!

i=1

(Yi ! Y )2

"2 =SSE

"2 / )2n!2

— se, e solo se, e vera l’ipotesi H0 : * = 0:

n!

i=1

(Yi ! Y )2

"2 =SSTot

"2 / )2n!1

ed inoltre5:

n!

i=1

(Yi ! Y )2

"2 =SSR

"2 =

n!

i=1

B (Xi ! X)2

"2 / )21

5Si ricordi che per le ipotesi di lavoro "!2(n

i=1(B ! #) (Xi ! X)2 # $2

1 in quanto quadrato diuna N(0, 1).

160

Page 163: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

Osservando infine, l’indipendenza tra le v.c.(n

i=1(Yi ! Y )2 e(n

i=1(Yi ! Y )2, veral’ipotesi H0 : * = 0, il rapporto tra le devianze SSR e SSE ciascuna delle quali divisaper i rispettivi gradi di liberta, cioe:

(n ! 2)

n!

i=1

(Yi ! Y )2

n!

i=1

(Yi ! Y )2=

(n ! 2) SSR

SSE(6.21)

viene a possedere6 distribuzione F di Snedecor con un grado di liberta a numeratoreed n ! 2 gradi di liberta a denominatore.L’adeguatezza del modello di regressione puo pertanto essere verificata in base alp ! value associato al valore di F sperimentale. Valori di F sperimentale prossimiallo zero possono essere spiegati da elevati valori di "2 oppure possono suggerire cheil modello non spieghi in modo esaustivo il comportamento della variabile risposta.

Osservazione 6.2.1 Nel caso di modello di regressione lineare, il test di adeguatezzaappena illustrato viene a corrispondere al test circa il coe!ciente di correlazionelineare:

+H0 : + = 0H1 : + 3= 0 (6.22)

Infatti, nel caso in esame, se osserviamo che:

1n

!n

i=1(Yi ! Y )2 =

41 ! R2

6S2

Yn ! 1

n

il rapporto posto in (6.21) puo essere riscritto come:

(n ! 2)R2

1 ! R2

Tale v.c., sotto l’ipotesi nulla + = 0 viene a possedere distribuzione t di Student con(n ! 2) gadi di liberta; ora, per cose note, risulta (Tn!2)2 = F (1;n ! 2).

6In virtu del Teorema di Cochran.

161

Page 164: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

6.2.3 Alcune considerazioni circa la previsione

Si immagini di volere prevedere, tramite il modello di regressione, il valore dellavariabile risposta Y in corrispondenza ad un’ulteriore determinazione di interesse x0

di X non osservata. Una sua stima puntuale,Y0, la si ottiene semplicemente ponendoY0 = a + b x0, ma per cose ovvie essa di per se e di scarso interesse. Nel seguito sivedra come sia possibile pervenire alla costruzione di un “intervallo di previsione” perper la stima stessa.Da quanto esposto al paragrafo precedente, le v.c. Y0 e Y |X = x0 posseggonodistribuzione Normale entrambe con valor medio $+* x0 e varianza rispettivamente:

V ar[Y0] = "2

?

@ 1n

+(x0 ! x)2

!n

i=1(xi ! x)2

B

C

e:

V ar[Y |X = x0] = "2

Ora, mentre Y0 dipende dalla n-pla di valori osservati x1, x2, . . . , xn, Y |X = x0 dipen-de unicamente dal valore “futuro” x0; quindi, supponendo indipendenti le realizzazionidella v.c. disturbo -, possiamo a"ermare l’indipendenza tra le v.c. Y0 e Y |X = x0.Segue, dunque, che la v.c. (Y |X = x0)! Y0 possiede distribuzione Normale con valormedio nullo e varianza:

V ar[(Y |X = x0) ! Y0] = "2

?

@1 +1n

+(x0 ! x)2

!n

i=1(xi ! x)2

B

C

Si osservi come la varianza dell’errore di previsione dipende da due fattori e preci-samente: dalla varianza intrinseca della v.c. Y |X = x0, cioe "2, e dalla variabilitaindotta dalle stime dei parametri $ e * del modello di regressione, che contrariamentealla prima puo essere ridotta aumentando la dimensione del campione.Da quanto sopra, la v.c. standardizzata:

(Y |X = x0) ! Y0

S

GHHI1 +1n

+(x0 ! x)2

!n

i=1(xi ! x)2

viene a possedere distribuzione t di Student con n ! 2 gradi di liberta, per cuil’intervallo di previsione per la stima y0, sara:

y0 ± n!2t1!!/2 s

GHHI1 +1n

+(x0 ! x)2

!n

i=1(xi ! x)2

(6.23)

162

Page 165: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

Si noti come l’intervallo di previsione sia piu ampio, a parita di $, del corrispondenteintervallo di confidenza per yi:

yi ± n!2t1!!/2 s

GHHI 1n

+(xi ! x)2

!n

i=1(xi ! x)2

(6.24)

6.2.4 Alcune considerazioni sull’analisi dei residui

L’analisi dei residui yi ! yi riveste un ruolo non secondario in quanto essa puo esseredi aiuto per

(a) la verifica di alcune ipotesi di base, quali la linearita, l’omoshedasticita, lanormalita degli errori stessi, ...;

(b) l’individuazione di eventuali valori anomali e/o di osservazioni che hanno unpeso determinante nel processo di stima del modello di regressione.

Generalmente e sicuramente in prima battuta, tale analisi viene condotta per viaempirica ricorrendo ai seguenti diagrammi a dispersione:

— residui yi ! yi in funzione dei valori teorici yi;

— residui standardizzati7 yi ! yi

s>

1 ! hiin funzione dei valori teorici yi;

— quantili empirici dei residui in funzione dei quantili teorici di una N(0, 1).

i quali non devono lasciare trasparire alcuna tendenza.Quanto al precedente punto (b), oltre all’analisi grafica teste proposta, puo essere diaiuto lo studio delle cosidette “distanze di Cook” le quali (Cook, Weisberg 1982) con-sentono di individuare l’influenza esercitata sulla stima del coe!ciente di regressione* da ciascuna osservazione xi. Senza entrare in dettagli, osserviamo che, per ciascunxi, esse possono essere definite:

di =2

yi ! yi

s (1 ! hi)

32 hi

2(6.25)

Dal punto di vista pratico, un valore di di prossimo o maggiore dell’unita indicaun’influenza anormale sulla stima.Si tenga presente, per concludere, che ad un residuo elevato puo corrispondere unvalore anomalo, tuttavia un’osservazione anomala puo presentare un residuo piccoloo adirittura nullo. Per approfondimenti sull’argomento si confronti, ad esempio, iltesto di Belsley, Kuh e Welsch (1980).

7A tal proposito si ricordi la (6.13) e la (6.14).

163

Page 166: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

6.3 La regressione lineare semplice in R

Desiderando e"ettuare un’analisi della regressione lineare in R, cosı come delineata neiparagrafi precedenti, si puo ricorrere alla funzione lm(), il cui output e un oggetto construttura di lista, i cui elementi possono essere visualizzati e/o acquisiti per successiveelaboarazioni nel corso di una seduta di lavoro. Dal momento che trattasi di unafunzione assai flessibile e ricca di una vasta gamma di opzioni, nel seguito introdurremodapprima i comandi di base, rimandando ai paragrafi successivi la descrizione di alcuneopzioni di interesse.

6.3.1 La funzione lm(): definizione del modello di regressione

Raccolte le osservazioni campionarie (xi, yi)i=1,2,...,n nei due oggetti x e y, il primopasso consiste nella definizione del modello di regressione; per il modello lineare postoin (6.2), e su!ciente il comando:

> lm(formula = y~x)

o piu semplicemente:

> lm(y~x)

In seguito a tale comando, R visualizza, per default, le stime dei parametri $ e * delmodello e cio in accordo alla (6.7) e (6.6).

Esempio 6.3.1 Com’e noto la concentrazione di ozono (Y ), espressa in mg per m3, nellegrandi aree metropolitane dipende, oltre che da altri fattori, in gran misura dalla temperaturaambientale (X). I dati che seguono riguardano un campione di n = 26 osservazioni, trattecasualmente da una banca dati delle misurazioni registrate da una centralina di controllo inaltrettanti giorni feriali dei mesi di giugno e luglio alle ore 12.00 nei pressi di un’importantecrocevia:

xi 22 24 25 25 26 26 26 26 27 27 27 27 28yi 9 23 21 22 31 44 45 59 9 39 65 128 16xi 28 29 30 30 30 31 32 32 32 34 34 36 36yi 28 35 44 73 78 66 89 110 122 85 118 76 84

Posto che la relazione che lega la concentrazione di ozono e la temperatura ambientale possaessere riassumibile dal modello lineare Y = ! + ( X , la stima dei parametri ci viene o!ertadalle istruzioni:

> x<-c(22,24,25,25,26,26,26,26,27,27,27,27,28,28,29,30,30,30,31,32,32,32,34,34,36,36)

> y<-c(9,23,21,22,31,44,45,59,9,39,65,128,16,

164

Page 167: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

28,35,44,73,78,66,89,110,122,85,118,76,84)> lm(y~x)Call:lm(formula = y ~ x)

Coefficients:(Intercept) x

-131.332 6.578

sı che la stima della retta di regressione diviene yi = %131.332 + 6.578 xi. !

A proposito della fase di definizione del modello di regressione lineare, e bene tenere amente che, posti x e y gli oggetti contenenti le n osservazioni campionarie, le istruzioni:

> lm(y~x)> lm(y~+1+x)

sono equivalenti e definiscono entrambe il modello di regressione Y = $+* X, mentrele istruzioni:

> lm(y~0+x)> lm(y~-1+x)> lm(y~x-1)

definiscono il modello Y = * X, privo quindi della costante $.

Concludiamo osservando che, anche se non necessario, e tuttavia buona norma:

— strutturare le osservazioni campionarie sottoforma di data frame e impartiresuccessivamente il comando lm(formula=...,data=data.frame); in tal caso, idati sono disponibili senza dover ricorrere all’istruzione attach();

— introdurre un nuovo oggetto, con struttura di formula, che servira appuntoa definire il modello di regresione lineare di interesse. Ad esempio valgano leistruzioni:

> x<-c(...)> y<-c(...)> dati<-data.frame(Risposta=y,Predittore=x)> formulayx<-as.formula(paste(names(dati)[1],"~",names(dati)[2]))> formulayxRisposta ~ Predittore

165

Page 168: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

— definire un nuovo oggetto che conterra sia il modello che i risultati dell’ana-lisi di regressione richiesta; a tal fine sara su!ciente, ad esempio, l’istruzionemodello.analisi.1<-lm(formula=...,data=...). L’espressione del modellodi regressione in esame puo essere visualizzata in qualsiasi istante con l’istruzioneformula(modello.analisi.1)

Esempio 6.3.2 Con riferimento alla situazione di cui all’Esempio 6.3.1, risultati del tuttoequivalenti, ma in forma piu ordinata, si ottengono ricorrendo alle seguenti istruzioni:

> x<-c(22,24,25,25,26,26,26,26,27,27,27,27,28,28,29,30,30,30,31,32,32,32,34,34,36,36)

> y<-c(9,23,21,22,31,44,45,59,9,39,65,128,16,28,35,44,73,78,66,89,110,122,85,118,76,84)

> (ozono.yx<-data.frame(Temperatura=x,Risposta=y))Temperatura Risposta

1 22 92 24 233 25 21... ... ...24 34 11825 36 7626 36 84> (formula.es1<-as.formula(paste(names(ozono.yx)[2],"~",names(ozono.yx)[1])))Risposta ~ Temperatura> modello.es1<-lm(formula.es1,data=ozono.yx)> modello.es1Call:lm(formula = formula.es1, data = ozono.yx)

Coefficients:(Intercept) Temperatura

-131.332 6.578> formula(modello.es1)Risposta ~ Temperatura

Va da se che, alla luce di quanto sopra, avremmo potuto definire:

> formula.es1<-as.formula(paste(names(ozono.yx)[2],"~1+",names(ozono.yx)[1]))> formula.es1Risposta ~ 1 + Temperatura

ottenendo, coerentemente, gli stessi risultati. !

166

Page 169: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

6.3.2 La funzione lm(): oggetti creati in modo automatico

Come gia si e detto, l’output completo della funzione lm() consiste in un oggettocon struttura di lista, i cui elementi possono essere elencati mediante il comandonames(lm(formula=...,...)), il quale porge, appunto:

> names(lm(formula=...,...))[1] "coefficients" "residuals" "effects"[4] "rank" "fitted.values" "assign"[7] "qr" "df.residual" "xlevels"

[10] "call" "terms" "model"

Ciascun elemento di tale lista puo essere visualizzato o acquisito per successive elabo-razioni tramite il comando lm(...)$nome.elemento o, in modo del tutto equivalente,con nome.elemento(lm(...)); ad esempio:

lm(...)$coefficients 7 coefficients(lm(...))lm(...)$fitted.values 7 fitted.values(lm(...))lm(...)$residuals 7 residuals(lm(...))

Esempio 6.3.3 Sempre con riferimento alla situazione di cui agli Esempi 6.3.1 e 6.3.2, lestime del modello di regressione lineare in esame nonche i valori teorici (o stimati) yi, coni = 1, 2, . . . , n, possono essere visualizzati, con un’approssimazione alla seconda cifra decimale,mediante le istruzioni:

> coefficients(modello.es1)(Intercept) Temperatura-131.332357 6.578188> round(fitted.values(modello.es1),2)

1 2 3 4 5 6 7 8 9 10 1113.39 26.54 33.12 33.12 39.70 39.70 39.70 39.70 46.28 46.28 46.28

12 13 14 15 16 17 18 19 20 21 2246.28 52.86 52.86 59.44 66.01 66.01 66.01 72.59 79.17 79.17 79.17

23 24 25 2692.33 92.33 105.48 105.48

A questo punto, siamo in grado di costruire un grafico come quello proposto in figura (??.a);a tal fine, infatti, sopperiscono le istruzioni:

> attach(ozono.yx)> plot(Temperatura,Risposta,xlim=c(20,40),ylim=c(0,150),frame.plot = FALSE,

xlab="Temperatura (x)",ylab="Ozono (y)",pch=20,col="blue")> lines(Temperatura,modello.es1$fitted,col="red",cex=1.5)> detach(ozono.yx)> grid()

167

Page 170: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

oppure, in modo piu diretto:

> plot(ozono.yx,xlim=c(20,40),ylim=c(0,150),frame.plot = FALSE,xlab="Temperatura (x)",ylab="Ozono (y)",pch=20,col="blue")

> abline(modello.es1,col="red",cex=1.5)> grid()

ottenendo il grafico proposto in figura (??.b).

6.3.3 La funzione lm(): verifiche di ipotesi sulle stime

Come e noto, alla stima puntuale dei parametri di un modello di regressione si dovraa!ancare la verifica di ipotesi cosı come poste in (6.18) e (6.19). In R cio e possibile,ferma restando l’assunzione che - / N

,0,"2

-, ricorrendo all’istruzione:

> summary(lm(formula=... ,...))$coefficients

la quale porge, quale sottoforma di tabella, le stime (puntuali) dei parametri delmodello specificato, i rispettivi errori standard, i corrispondenti valori sperimentalidelle statistiche test adottate, in accordo alle (6.16) e (6.17), nonche il p ! value adessi associato.A tal propostio e bene tenere a mente che, nonostante l’equivalenza, asserita alparagrafo precedente, tra le istruzioni:

> lm(formula=... ,...)$coefficients> coefficients(lm(formula=... ,...))

l’output del comando summary(coefficients(lm(formula=... ,...))) non avreb-be alcun senso, in quanto esso porgerebbe, per le stime ottenute, la media, i quartili,nonche il minimo ed il massimo.

Esempio 6.3.4 Con riferimento alla situazione di cui all’Esempio 6.3.1, abbiamo:

> summary(modello.es1)$coefficientsEstimate Std. Error t value Pr(>|t|)

(Intercept) -131.332357 42.474389 -3.092036 0.0049817779Temperatura 6.578188 1.460964 4.502636 0.0001471189

Dal momento che i p % value ottenuti sono prossimi allo zero, siamo portati a rifiutare leipotesi nulle H0 : ! = 0 e H0 : ( = 0.Si noti come il risultato dell’istruzione:

> summary(coefficients(modello.es1))Min. 1st Qu. Median Mean 3rd Qu. Max.

-131.300 -96.850 -62.380 -62.380 -27.900 6.578

168

Page 171: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

verrebbe ad essere del tutto privo di senso. !

Desiderando visualizzare anche il valore sperimentale della statistica test (6.21) edil corrispondente p ! value, onde avere un’idea circa la bonta di adattamento delmodello di regressione specificato, conviene ricorrere all’istruzione:

> summary(lm(formula=... ,...))

la quale porge:

— alcune statistiche riassuntive circa i residui della regressione;

— la tabella riguardante la verifica delle ipotesi (6.18) e (6.19) concernenti le stimedei parametri del modello;

— l’errore standard dei residui s, in accordo alla (6.15), con i rispettivi gradi diliberta;

— il valore del quadrato del coe!ciente di correlazione lineare r, nonche il corri-spondente valore “corretto” (cfr. Osservazione 6.4.1);

— il valore sperimentale della statistica (6.21), con i relativi gradi di liberta anumeratore e denominatore, nonche il p ! value corrispondente.

Esempio 6.3.5 Sempre con riferimento alla situazione di cui all’Esempio 6.3.1, da quantosopra, abbiamo:

> summary(modello.es1)

Call:lm(formula = formula.es1, data = ozono.yx)

Residuals:Min 1Q Median 3Q Max

-37.28 -19.14 -5.49 11.45 81.72

Coefficients:Estimate Std. Error t value Pr(>|t|)

(Intercept) -131.332 42.474 -3.092 0.004982 **Temperatura 6.578 1.461 4.503 0.000147 ***---Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 26.99 on 24 degrees of freedomMultiple R-Squared: 0.4579,Adjusted R-squared: 0.4353F-statistic: 20.27 on 1 and 24 degrees of freedom,p-value: 0.0001471

169

Page 172: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

Nonostante un basso valore sperimentale del coe"ciente di correlazione lineare (r = 0.2097),il p % value prossimo a zero associato al valore sperimentale della statistica test (6.21) ciconsente di a!ermare che i dati campionari ben si adeguano al modello di regressione lineareproposto. !

Qui nel seguito riportiamo i comandi permettono di estrarre in modo diretto alcunielementi dell’output generato da summary(lm(formula=...,...)):

— summary(lm(formula=...,...))$sigma: l’errore standard s;

— df.residual(lm(formula=...,...)): i gradi di liberta impiegati per il calcolodi s2;

— deviance(lm(formula=...,...)): la devianza tra valori e"ettivi e teorici, cioeil numeratore di s2;

— summary(lm(formula=...,...))$r.squared: la “frazione della varianza spie-gata dalla retta di regressione” ovvero il quadrato del coe!ciente di correlazione;

— summary(lm(formula=...,...))$fstatistic: il valore sperimentale della sta-tistica F con i corrispondenti gradi di liberta.

Esempio 6.3.6 Con riferimento all’analisi di cui all’Esempio 6.3.5 ed alla luce di quantosopra, si considerimo le istruzioni:

> summary(modello.es1)$sigma[1] 26.99364> df.residual(modello.es1)[1] 24> deviance(modello.es1)[1] 17487.76> (summary(modello.es1)$sigma)^2*df.residual(modello.es1)[1] 17487.76> summary(modello.es1)$r.squared[1] 0.4579178> summary(modello.es1)$fstatistic

value numdf dendf20.27373 1.00000 24.00000

L’output di summary(modello.es1)$fstatistic e un vettore numerico di tre elementi, ilprimo dei quali, il valore di F sperimentale, puo essere acquisito, ad esempio, con l’istruzione

> summary(modello.es1)$fstatistic[1]value

20.27373

170

Page 173: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

Si osservi, infine, che l’output dell’istruzione summary(modello.es1)$coefficients e rap-presentato da una matrice di ordine 2 " 4 e quindi desiderando estrarre, ad esempio, l’errorestandard associato alla stima del coe"ciente (, sara su"ciente l’istruzione:

> summary(modello.es1)$coefficients[2,3][1] 4.502636

!

Osservazione 6.3.1 La funzione summary(...) sin qui impiegata e assai generica;nel caso dell’analisi della regressione si dovrebbe, a rigore di logica, ricorre alla fun-zione specifica summary.lm(...), nonostante i risultati siano del tutto equivalenti.Il lettore, tuttavia, puo ottenere utili informazioni consultando l’aiuto in linea disummary.lm.

6.3.4 La funzione predict.lm(): intervalli di confidenza e di previ-sione

Una volta stimata la retta di regressione e verificatane la bonta di adattamento,puo essere di interesse determinare, perlomeno in corrispondenza ad alcuni valori diinteresse del predittore, gli itervalli di condifenza e/o gli intervalli di previsione per lavariabile risposta, cosı come indicato al paragrafo 6.2.3.A tal fine, nonostante sia sempre possibile redarre una funzione ad hoc basata sulle(6.24) e (6.23), vediamo come sfruttare la particolare funzione predict.lm(...), lacui sintassi minima e:

predict.lm(object,data,interval=...,level=...)

dove:

— object: e l’oggetto, di classe lm, che definisce il modello di regressione in esame;

— data: e il data frame contenente le osservazioni campionarie di interesse (valoriosservati e/o valori “futuri” del predittore);

— interval=: indica se trattasi di un intervallo di confidenza (confidence) ovverodi previsione (prediction);

— level=: specifica il consueto livello di significativita 1 ! $ da utilizzare. Perdefault, level=0.95.

L’output della funzione e una matrice di dimensione n " 3 contenente, in corrispon-denza a ciascuno degli n valori del data frame specificato in data, la stima y (fit), illimite inferiore (lwr) e quello superiore (upr) dell’intervallo di interesse.

171

Page 174: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

A tal proposito, desiderando ottenere un intervallo di confidenza e/o di previsione peruno o piu particolari valori del predittore, siano essi interni e/o esterni al range deivalori osservati, si dovra creare un nuovo data fame ad hoc, contenente, appunto, talivalori.

Esempio 6.3.7 Sempre con riferimento alla situazione di cui all’Esempio 6.3.1, gli intervallidi confidenza e di previsione, al livello di condifenza del 95%, in corrispondenza a ciascunadelle n = 26 osservazioni campionarie, si ottengono facilmente con le istruzioni:

> predict.lm(modello.es1,ozono.yx,interval="confidence",level=0.95)fit lwr upr

1 13.38779 -9.968481 36.744062 26.54416 8.298502 44.789833 33.12235 17.188915 49.05579... ... ... ...24 92.32605 73.329223 111.3228725 105.48242 81.302257 129.6625926 105.48242 81.302257 129.66259> predict.lm(modello.es1,ozono.yx,interval="prediction",level=0.95)

fit lwr upr1 13.38779 -47.022124 73.797702 26.54416 -32.079605 85.167933 33.12235 -24.823454 91.06816... ... ... ...24 92.32605 33.464163 151.1879325 105.48242 44.749216 166.2156326 105.48242 44.749216 166.21563

Desideando, ora, costruire un intervallo di previsione, al livello di condifenza del 90%, per laconcentrazione di ozono in corrispondenza ad una temperatura ambientale di 23 e 38 gradiCelsius, possiamo impartire le istruzioni:

> ozono.yx.new<-data.frame(Temperatura=c(23,38))> predict.lm(modello.es1,ozono.yx.new,interval="prediction",level=0.90)

fit lwr upr1 19.96598 -29.3131 69.245052 118.63880 66.3090 170.96861

Si osservi che le istruzioni:

> new<-data.frame(Temperatura=c(20:40))> IC.modello.es1<-predict(modello.es1,new,interval="confidence",level=.95)> IP.modello.es1<-predict(modello.es1,new,interval="prediction",level=.95)> matplot(new$Temperatura,cbind(IC.modello.es1,IP.modello.es1[,-1]),

xlim=c(20,40),ylim=c(0,150),frame.plot=FALSE,type="l",lty=c(1,2,2,5,5),col=c("blue","red","red","black","black"),

172

Page 175: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

ylab="Concentrazione di ozono",xlab="Temperatura ambientale")> testo<-c("Stime","Retta di regressione","I.C. (95%)","I.P. (95%)")> legend(20,148,lty=c(0,1,2,5),merge=TRUE,pch=c("+",-1,-1,-1),

legend=testo,col=c("green","blue","red","black"),cex=.85,bty="n")> grid()> points(ozono.yx$Temperatura,drop(modello.es1$fitted),type="p",pch="+",

cex=2,col="green")

consentono di ottenere la figura (??) che riporta il grafico della nuvola di punti di coordinate(xi, yi), della stima della retta di regressione, nonche i rami di iperbole corrispondenti ai limitiinferiore e superiore degli intervalli di confidenza e di previsione teste ottenuti. !

6.3.5 Per un’analisi dei residui

Alla stima ed alla verifica delle ipotesi statistiche concernenti i parametri di un modellodi regressione e buona norma, per i motivi di cui gia si e detto, far seguire un’analisiempirica dei residui,In R cio e possibile semplicemente ricorrendo alla funzione plot(lm(formula=...)),la quale porge, in modo del tutto automatico, i grafici di cui si disse al paragrafo6.2.4.

Esempio 6.3.8 Sempre riprendendo i dati di cui all’Esempio 6.3.1, le istruzioni:

> par(mfrow=c(2,2))> plot(modello.es1,col="blue")> par(mfrow=c(1,1))

producono i grafici riportati in figura (??). *** eventuale commento ***

Val qui la pena vedere in dettaglio le possibili istruzioni che consentono di ottenerei residui standardizzati nonche le “distanze di Cook”. Dal momento che entrambedipendono in modo esplicito dalle quantia hi, che come si e visto concorrono alla stimadella varianza dei residui "2, vediamo dapprima come calcolare tali grandezze.Posto che gli oggetti xi e yi contengano le n osservazioni campionarie (xi, yi), definitoil modello di regressione lineare modello<-lm(yi~xi), ricordando la (6.14), abbiamo:

> hi<-(sum(xi^2)-2*xi*sum(xi)+n*xi^2)/(n*sum(xi^2)-(sum(xi))^2)

da cui, introdotti gli oggetti:

> residui<-modello$residuals> summary.lm(modello)$sigma

essendo i residui standardizzati yi ! yi

s>

1 ! hi, si ha:

173

Page 176: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

> residui.std<-residui/(s*sqrt(1-hi))

ed infine, ricordando la (6.25):

distanze.cook<-(residui/(s*(1-hi)))^2*(hi/2)

Tuttavia R prevede una particolari funzioni che consentono il calcolo diretto di taligrandezze, piu precisamente trattasi delle funzioni:

— lm.influence(lm(formula=...,...)): essa fornisce, sottoforma di lista, iseguenti oggetti:

– hat: i valori hi in corrispondenza a ciascuna realizzazione xi di X;

– coefficients: le di"erenze8 a ! a!i, b ! b!i, ovvero le di"erenze tra lestime di $ e di * e quelle che si otterrebbero qualora si escludesse la i-esimaosservazione campionaria, e cio . i = 1, 2, . . . , n;

– sigma: le stime s2!i di "2 qualora si escludesse la i-esima osservazione

campionaria, e cio . i = 1, 2, . . . , n;

I valori contenuti in coefficients e sigma possono essere utilizzati per indi-viduare quali sono le realizzazioni xi di X che hanno un peso determinante nelprocesso di stima del modello di regressione.

— rstandard(lm(formula=...,...)): fornisce i residui standardizzati;

— cook.distance(lm(formula=...,...)): porge le “distanze di Cook”.

Esempio 6.3.9 Sempre riprendendo i dati di cui all’Esempio 6.3.1, le istruzioni: *** DAFARE ***

> ***

*** eventuale commento ***

Ricordiamo, infine, la possibilita di ricorrere alle seguenti due funzioni:

— rstudent(lm(formula=...,...)): fornisce i residui “studentizzati”, cioe i re-sidui standardizzati ricorrendo alla stima s2

!i di "2;

8Acquisibili ricorrendo alle istruzioni lm.influence(lm(formula=...,...))$coefficients[,1] elm.influence(lm(formula=...,...))$coefficients[,2].

174

Page 177: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

— influence.measures(lm(formula=...,...)): porge, sottoforma di tabella edin corrispondenza a ciascuna determinazione xi di X, alcune misure riassuntivedi diagnosi dei residui9 con indicazione, mediante asterisco, dei valori campionari“sospetti”.

Esempio 6.3.10 Sempre riprendendo i dati di cui all’Esempio 6.3.1, le istruzioni: *** DAFARE ***

> influence.measures(modello.es1)

*** eventuale commento ***

6.4 Sulla regressione multipla: il modello4y,X!, "2 In

6

CappellinoSi immagini che le misurazioni, e"ettuate su n individui, di p+1 variabili quantitativesiano rappresentabili mediante i vettori di y,x1,x2, . . . ,xp % IRn, ed altresı si suppon-ga di volere “spiegare” la variabile y mediante i p predittori (o variabili esplicative)xj . Abitualmente tali predittori vengono supposti essere linearmente indipendenti, ilche non implica che essi lo siano anche sotto il profilo statistico10.Si immagini che i vettori x1,x2, . . . ,xp,y % IRn costituiscano un campione casuale didimensione n di altrettante realizzazioni di p + 1 v.c. X1,X2, . . . ,Xp, Y .Per cose note, la migliore approssimazione di Y mediante una funzione delle p v.c.Xj , abitualmente dette predittori o variabili esplicative, corrisponde al valor mediocondizionato IE[Y |X1,X2, . . . ,Xp]. Se introduciamo, ora, l’ipotesi:

IE[Y |X1,X2, . . . ,Xp] = *0 +p!

j=0

*0 Xj (6.26)

perveniamo al modello di regressione lineare multipla:

Y = *0 +p!

j=0

*0 Xj + -

dove - e una v.c. non correlata con le v.c. Xj , con valor medio nullo e varianza "2.Per le ipotesi fatte, tra le realizzazioni campionarie xi1, xi2, . . . , xip, -i, yi delle v.c.X1,X2, . . . ,Xp, -, Y sussiste, per j = 1, 2, . . . , p e i = 1, 2, . . . , n, la relazione:

yi = *0 +p!

j=0

*0 Xij + -i

9Tra esse i valori di hi e di di.10Inserire in nota un esempio semplice e breve.

175

Page 178: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

che puo essere posta nella forma compatta:

y = X$ + % (6.27)

dove y = [y1, y2, . . . , yn]t e il vettore delle n realizzazioni campionarie indipendenti yi

di Y , $ = [*0,*1, . . . ,*p]t rappresenta il vettore dei parametri incogniti del modello,% = [-1, -2, . . . , -n]t e il vettore degli errori -i mentre:

X =

$

000%

1 x11 x12 . . . x1p

1 x21 x22 . . . x2p

. . . . . . . . . . . . . . .1 xn1 xn2 . . . xnp

&

111' (6.28)

e una matrice di ordine n " (p + 1) la cui prima colonna contiene i coe!cienti dellacostante del modello e le colonne successive le realizzazioni campionarie indipendentidelle p v.c. Xj .Seguento la letteratura, indichiamo il modello di regressione lineare multipla corri-spondente alla (6.27) con la tripla

,y,X$,"2 In

-, dove chiaramente In e una matrice

identita di dimensione n " n.

6.4.1 Stima e verifica di ipotesi sui parametri del modello

Il problema che ci si pone e la stima dei parametri *O,*1, . . . ,*p del modello nonchedella varianza del termine di disturbo -.Il ricorso al metodo dei minimi quadrati comporta la minimizzazione, rispetto ai p+1parametri del modello, della funzione:

F (*0,*1, . . . ,*p) =n!

i=1

(yi ! *0 !p!

j=1

*j xij)2

Ora, come facilmente si puo verificare, i coe!cienti del sistema delle equazioni normalicorrispondono al prodotto matriciale Xt X, infatti:

Xt X =

$

000000000%

n(n

i=1 xi1(n

i=1 xi2 . . .(n

i=1 xip(n

i=1 xi1(n

i=1 x2i1

(ni=1 xi1 xi2 . . .

(ni=1 xi1 xip

(ni=1 xi2

(ni=1 xi1 xi2

(ni=1 x2

i2 . . .(n

i=1 xi2 xip

......

... . . ....(n

i=1 xip(n

i=1 xi1 xip(n

i=1 xi2 xip . . .(n

i=1 x2ip

&

111111111'

176

Page 179: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

mentre i termini noti del sistema delle equazioni normali corrispondono al vettoreXy, infatti:

Xy =

$

000000000%

(ni=1 yi

(ni=1 xi1 yi

(ni=1 xi2 yi

...(ni=1 xip yi

&

111111111'

Pertanto la condizione dei minimi quadrati porge, quale stima di $, il vettore:

b =4Xt X

6!1Xt y (6.29)

Cio premesso, e immediato dimostare che lo stimatore b,ottenuto in accordo al metododei minimi quadrati, e uno stimatore corretto di $.Infatti, dal momento che X e una costante ed osservando che IE[y] = X$, si ha:

IE[b] = IE[(Xt X)!1 Xt y] = (Xt X)!1 Xt X$ = $

Con un ragionamento simile, otteniamo la varianza dello stimatore b; ricordando cheV ar[y] = V ar[%] = "2 In, sara:

V ar[b] = V ar[(Xt X)!1 Xt y] = (Xt X)!1 (Xt X)!1 Xt V ar[y]X == "2 (Xt X)!1 (Xt X)!1 Xt In X = "2 (Xt X)!1 (6.30)

mentre una stima corretta della varianza "2 e o"erta dallo stimatore:

S2 =||y ! y||2

n ! p ! 1=

||y ! Xb||2

n ! p ! 1(6.31)

E qui appena il caso di osservare che tra tutti gli stimatori corretti di $, b e quelloa varianza minima; tale proprieta nonche quella circa la correttezza dello stimatoreposto in (6.31) discendono dal teorema di Gauss-Markov generalizzato.Per approfondimenti a tal riguardo, si rimanda ai testi di McCullagh, Nelder (2000)e Saporta (1990).

Se introdiciamo, ora, l’ipotesi che . i = 1, 2, . . . , n -i / N(0, 1), y puo allora essereinteso quale vettore gaussiano multidimensionale, cioe:

y / Nn

4X$,"2 In

6)

177

Page 180: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

con densita di probabilita, quindi:

L(y,$,"2) =1

"n((

2#)nexp

:

!(y ! X$)t (y ! X$)2"2

<

=1

"n((

2#)nexp

:

!yyt ! 2$t Xt y ! $t Xt X$

2"2

<

Sotto tale ipotesi, la stima di massimaverosomiglianza per $ viene a coincidere con lastima proposta in (6.29) e ottenuta con il metodo dei minimi quadrati; in piu, essendob una trasformata lineare di un vettore gaussiano, si ha:

b / Np+1

4$,"2 (Xt X)!1

6(6.32)

Quanto alla varianza "2, il metodo della massimaverosomiglianza porge la stiman!1 ||y!Xb||2, la quale dovra, quindi, essere corretta, in accordo alla (6.31), medianteil fattore n

n ! p ! 1 . A tal proposito, si dimostra, poi, che:

||y ! Xb||2

"2 =(n ! p ! 1)S2

"2 / )2n!p!1 (6.33)

Focalizzando l’attenzione sul j-esimo coe!ciente di regressione empirico bj, in virtudella (6.30) sara:

V ar[bj] = "2bj

= "2 (Xt X)!1jj (6.34)

dove (Xt X)jj indica l’elemento jj-esimo di (Xt X)!1 e, ricordando la (6.31), la stimacorretta di "2

bje o"erta da:

s2bj

=||y ! Xb||2

n ! p ! 1(Xt X)!1

jj

Ne segue11, che la variabile test:

Tbj =bj ! *j

sbj

=bj ! *jN

||y ! Xb||2

n ! p ! 1(Xt X)!1

jj

(6.35)

viene a possedere ditribuzione t di Student con n ! p ! 1 gradi di liberta.11Si noti che, per le ipotesi fatte, bj # N(#j , "

2bj

).

178

Page 181: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

Tali considerazioni consentono di pervenire alla costruzionione di intervalli di confi-denza, ad un prefissato livello 1 ! $, per i p + 1 parametri incogniti *0,*1, . . . ,*p odi sottoporre a verifica le seguenti ipotesi statistiche, . j = 0, 1, 2, . . . , p:

+H0 : *j = 0H1 : *j 3= 0 (6.36)

con l’avvertenza che le statistiche test coinvolte non risultano tra loro indipendenti,non essendolo i coe!cienti bj tra loro.

6.4.2 Sul coe!ciente di correlazione multipla

Com’e noto, il coe!ciente di correlazione multipla tra Y e le p+1 variabili esplicative12

puo essere calcolato direttamente in base alla matrice X dei coe!cienti del modellodi regressione lineare; infatti, indicando con X% la matrice “centrata” di X13 e cony% il vettore “centrato” di y14, risulta:

R2 =y%t

X% (X%tX%)!1 X%t

y%

y%ty% (6.37)

Ora, un semplice calcolo consente di porre la (6.37) nella forma:

R2 =||y ! y||2 ! ||y ! Xb||2

||y ! y||2

il che indica che il quadrato del coe!ciente di regressione multipla puo essere intesoquale rapporto tra la varianza spiegata dal modello di regressione e la varianza totaledi Y . Tale considerazione (cfr. Osservazione 6.4.1) ci permette e"ettuare un testcirca la bonta di adattamento del modello di regressione sulla base di un’opportunatrasformata di R2.Infatti, dal momento che:

||y ! y||2 = ||y ! Xb||2 + ||Xb ! y||2

e tenendo presente l’ipotesi intordotta sulle -i, si ha:

— .$: ||y ! Xb||2"2 / )2

n!p!1

12Includendo la costante.13Ossia la matrice di di dimensione n $ p + 1 le cui colonne contengono gli scarti xij ! ¯xj , con

ovviamente ¯xj =(n

i=1

(p

j=1xij .

14Leggasi il vettore degli scarti yi ! y.

179

Page 182: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

— vera l’ipotesi *j = 0, con j = 1, 2, . . . , p e *0 qualsiasi: ||Xb ! y||2"2 / )2

p

— vera l’ipotesi *j = 0, con j = 1, 2, . . . , p e *0 qualsiasi: ||y ! y||2"2 / )2

n!1

La bonta di adattamento del modello di regressione multipla puo essere misurataricorrendo al rapporto tra la varianza spiegata dal modello di regressione e la varianza

residua, in simboli ||Xb ! y||2||y !Xb||2

= R2

1 ! R2 .

Ora, sotto l’ipotesi *j = 0, con j = 1, 2, . . . , p e *0 qualsiasi, risulta:

R2

1 ! R2

n ! p ! 1p

/ Fp;n!p!1

dove, come di consueto, Fp;n!p!1 indica la ditribuzione F di Snedecor con, rispetti-vamente, p gradi di liberta a numeratore e n! p! 1 gradi di liberta a denominatore.Si tenga presente che la lettura del solo valore empirico del coe!ciente di correlazionemultipla potrebbe trarre in inganno; infatti si potrebbe osservare un R2 prossimoall’unita e al contempo accettare “in blocco” le ipotesi H0 : bj = 0. Tale e certamenteil caso se i predittori sono fortemente correlati tra loro (cfr. paragrafo 6.4.4).

Osservazione 6.4.1 L’accettazione, .j = 1, 2, . . . , p, delle ipotesi di nullita dei coef-ficienti di regressione (H0 : *j = 0, con *0 qualunque) equivale pertanto all’accetta-zione che il coe!ciente di correlazione multiplo (teorico) + sia nullo, cioe dell’ipotesidi non-regressione. Se tale e il caso, allora + viene a possedere distribuzione Beta diparametri p/2 e (n ! p ! 1)/2, per cui:

IE[R2] =p

n ! 1V ar[R2] =

2 p (n ! p ! 1(n2 ! 1) (n ! 1)

Viceversa se l’ipotesi di non-regressione e rifiutata (+ 3= 0), allora la distribuzione diR2 assume una forma piu complessa ed R2 viene ad essere uno stimatore distorto. Atal propostito si dimostra che IE[R2] = +2 + p

n ! 1 (1 ! +) + O(n!1). Per tali motivia volte si ricorre ad un valore di R2 “corretto” (adjusted R squared):

R2" =(n ! 1)R2 ! p

n ! p ! 1

che presenta, pero, lo svantaggio di condurre a valori negativi (!) se il coe!ciente dicorrelazione multipla e prossimo allo zero.

180

Page 183: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

6.4.3 Sulla previsione e l’analisi dei residui

Dal momento che su tali argomenti valgono, in generale, le considerazioni fatte inoccasione dell’analisi della regressione lineare semplice, nel seguito ci limitiamo apresentare alcuni risultati di interesse, rimandando per dettagli ai paragrafi 6.2.3 e6.2.4.

— intervallo di previsione: posto x0 = [1, x10, x20, . . . , xp0]t il vettore contenente ivalori di interesse dei predittori i corrispondenza ai quali si desidera “prevedere”il valore di y, la v.c. y0 = xt

0 b, sotto le ipotesi fatte circa le -i, ha distribuzionenormale di parametri xt

0 $0 e "2 xt0 (XtX)!1 x0.

Posto y0 = IE[y|X1 = x10 1 . . . 1 Xp = xp0] la v.c. standardizzata y0 ! y0,utilizzando lo stimatore corretto posto in (6.31):

y0 ! y0

S/

1 + xt0 (XtX)!1 x0

viene a possedere distribuzione t di Student con n ! p ! 1 gradi di liberta., dacui l’intervallo di previsione per y0:

y0 ± n!p!1t1!!/2 s/

1 + xt0 (XtX)!1 x0

— i residui standardizzati: prendendo le mosse dall’uguaglianza y = y!Xb+Xbe ricordando che (y ! Xb) 5 Xb, si ha:

V ar[y] = V ar[y ! Xb] + V ar[Xb]

da cui:

V ar[y ! Xb] = "2 [In ! X (Xt X)!1 Xt]

Indicando con hi il generico i-esimo termine della diagonale di X (Xt X)!1 Xt,con n!1 ' hi ' 1 e

(ni=1 hi = n ! p ! 1, abbiamo "2

yi!yi= "2 (1 ! hi), donde,

sostituendo a "2 la sua stima corretta, la stima della varianza dei residui:

s2yi!yi

= s2 (1 ! hi)

181

Page 184: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

6.4.4 Sulla multicollinearita

La principale fonte di instabilita della stima di $ e rappresentata dall’ordine di gran-dezza delle varianze "2

bj; tenendo a mente la (6.34), e facile intuire che qualora il

determinante di Xt X fosse prossimo a zero, gli elementi di (Xt X)!1 tenderebberoad assumere valori elevati e di conseguenza le "2

bj, sı che i parametri del modello

verrebbero ad essere stimati in modo impreciso.Tra le svariate cause che producono tale anomalia, una e certamente la la corre-lazione tra le variabili esplicative; tale situazione viene indicata con il termine dimulticollinearita.Desiderando, in qualche modo, verificare tale a"ermazione, posto, per semplicita,%X una matrice “standardizzata”15 di dimensione n " p ed indicando con con R lamatrice di correlazione tra i p predittori, e facile verificare la relazione nR = %Xt %X.Cio premesso, si ha V ar[b] = "2 n!1 R!1 e, pertanto, con riferimento al suo j-esimoelemento, la corrispondente stima corretta puo essere posta nella forma:

s2bj

="2

n(R!1)jj (6.38)

dove, chiaramente, (R!1)jj indica il j-esimo termine della diagonale di R!1.Per inciso, si osservi che (R!1)jj = (1 ! R2

j )!1, dove R2j corrisponde al quadrato del

coe!ciente di correlazione multipla tra j-esimo predittore e le restanti p! 1 variabiliesplicative. Evidentemente, qualora i predittori fossero tra loro ortogonali si avrebbe,. j = 1, 2, . . . , p, R2

j = 0 e di conseguenza s2bj

= "2 n!1. In particolare, poi, i termini(1!R2

j )!1 vengono abitulamente detti fattori di inflazione della varianza (VIF), e laloro media puo essere considerata quale indice globale di multicollinearita.

Il problema della multicollinearita tra i predittori puo essere risolto, o perlomenoattenuato, ricorrendo a diverse strategie16 proposte in letteratura, quali ad esempio,la regressione per componenti principali, la ridge regression, o le tecniche di selezione,quali la backward regression, la forward regression o, ancora, la stepwise regression.

Gli algoritmi piu di"usi, e implementati sulla maggior parte dei pacchetti statistici incommercio, sono senza dubbio quelli basati sulle tecniche di selezione, anche se questenon sono esenti da critiche, ad esempio mal si prestano la dove si richiede la stima diun modello di previsione.Sostanzialmente tali tecniche tendono a ridurre un problema di regressione multiplaa p variabili esplicative ad un analogo a q < p predittori, questi ultimi scelti tra quelliche apportano il maggior contributo ad R2. In particolare:

15In altri termini, si suppone, cioe che tutte le variabili del modello di regressione multipla sianostandardizzate. Ovviamente, sotto tali ipotesi, si ha b = (Xt X)!1 = ("Xt "X)!1.

16Presupponendo una certa discrezionalita, da parte del ricercatore, sul numero dei predittori checoncorrono a spiegare y.

182

Page 185: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

— con la backward regression si inizia con la stima del modello completo a ppredittori e si elimina la variabile esplicativa che ha la minore influenza su R2,o equivalentemente quella che presenta il maggior p ! value associato al testsu *j . Quindi si e"ettua una nuova stima del modello a p ! 1 predittori e cosıvia sino all’eliminazione di p! 1 variabili esplicative o al raggiungimento di unacondizione di arresto.

— con la forward regression si inizia con la stima del modello ad una sola variabileesplicativa, quella che ha maggior influenza su R2, e via, via, secondo lo stessocriterio, si aggiungono i restanti predittori. Il processo iterativo ha termine nonappena R2 raggiunge una soglia prefissata.

— la stepwise regression puo essere intesa come un perfezionamento dell’algoritmodella forward regression, nel senso che ad ogni passo viene e"ettuato un test(su *j o su R2) teso a non introdurre un predittore non significativo oppure adeliminare le eventuali variabili esplicative non piu significative una volta inseritanel modello l’ultima variabile selezionata. Abitualmente il processo ha terminenon appena R2 raggiunge una soglia prefissata.

6.5 La regressione multipla in R

Nel caso si debba a"rontare un’analisi di regressione lineare multipla in R si ricorrealla funzione lm() gia a"rontata in dettaglio e per la quale, in linea generale, valgonole considerazioni fatte ai paragrafi 6.3 e successivi.Nel seguito, pertanto, focalizzeremo la nostra attenzione alla risoluzione di problemipiu specifici, quali ... ***

6.5.1 Definizione del modello e l’istruzione model.matrix(lm(...))

Come gia si disse, in R e buona norma organizzare le ossevazioni campionarie inun data frame, introdurre in modo esplicito il modello di regressione lineare medianteun’opportuna formula, che nel caso del modello

,y,X$,"2 In

-a p predittori potrebbe

presentarsi:

> formula<-as.formula(Risposta~var1+var2+ ... +varp)

o, in modeo del tutto equivalente:

> formula<-as.formula(Risposta~.)

e successivamente definire l’oggetto di classe lm che conterra i risultati di interessenonche altre informazioni necessarie per uleriori elaborazioni; ad esempio mediantel’istruzione:

183

Page 186: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

> modello<-lm(formula,data=data frame)

Un di"erente modo di procedere consiste nel definire la formula a partire dal vettoredelle n osservazioni campionarie di Y e dalla matrice delle realizzazioni campionariedei p predittori Xj, oggetti che potrebbero coincidere con gli elementi del data frame;seguendo tale approccio, potrebbero valere le istruzioni:

> formula<-as.formula(y~Xp)> modello<-lm(formula)

dove, e bene tenerlo a mente, Xp e una matrice di ordine n " p.

Esempio 6.5.1 A puro scopo didattico, si immagini che per un modello di regressione linearemultipla a due sole variabili esplicative si siano ottenute le seguenti osservazioni campionarie:

xi1 8.04 6.95 7.58 8.81 8.33 9.96 7.24 4.26 10.84 4.82 5.68xi2 7.46 6.77 12.74 7.11 7.81 8.84 6.08 5.39 8.15 6.42 5.73yi 10.2 8.5 13.1 9.0 11.5 14.9 6.5 4.0 12.2 7.0 5.5

Scelto di raccogliere tali informazioni nel data frame dati composto dai tre oggetti x1, x2 eRisposta:

> dati<-data.frame(x1=c(8.04,6.95,7.58,8.81,8.33,9.96,7.24,4.26,10.84,4.82,5.68),x2=c(7.46,6.77,12.74,7.11,7.81,8.84,6.08,5.39,8.15,6.42,5.73),Risposta=c(10.2,8.5,13.1,9.0,11.5,14.9,6.5,4.0,12.2,7.0,5.5))

possiamo definire la formula per il modello di regressione Y = (0 + (1 X1 + (2 X2 + * e,successivamente, l’oggetto modello.1 di classe lm tramite le consuete istruzioni:

> formula.1<-as.formula(Risposta~.)> modello.1<-lm(formula,data=dati)

Alternativamente, ferma restando la sruttura del data frame dati, introdotta la matrice Xpdelle n realizzazioni campionarie yi1 e xi2:

> attach(dati)> Xp<-as.matrix(cbind(x1,x2))> detach(dati)

possiamo definire la formula e successivamente l’oggetto modello.2 di classe lm come:

> formula.2<-as.formula(Risposta~Xp)> modello.2<-lm(formula.2,data=dati)

184

Page 187: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

Naturalmente, i due oggetti modello.1 e modello.2 sono equivalenti e si riferiscono almedesimo modello di regressione. !

Ora, perlomeno in alcune situazioni, potrebbe tornare utile operare direttamente sullamatrice X del modello

,y,X$,"2 In

-. Naturalmente, questa potrebbe essere definita

in modo esplicito, ricorrendo ad esempio all’struzione:

> X<-cbind(c(rep(1,length(var1))),var1+var2+ ... +varp)

dove c(rep(1,length(var1))) crea un vettore colonna di n =length(var1) ele-menti unitari. Tuttavia in R possiamo automatizzare tale processo ricorrendo allasemplice istruzione:

> X<-model.matrix(modello)

Esempio 6.5.2 Come si disse, gli oggetti modello.1 e modello.2, definiti all’Esempio 6.5.1,si riferiscono entrambi al modello di regressione Y = (0 +

(2j=1 (j Xj + *; entrambi, quindi,

saranno dotati della stessa matrice X , la cui trasposta (X t) risulta infatti:

> t(model.matrix(modello.1))1 2 3 4 5 6 7 8 9 10 11

(Intercept) 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00x1 8.04 6.95 7.58 8.81 8.33 9.96 7.24 4.26 10.84 4.82 5.68x2 7.46 6.77 12.74 7.11 7.81 8.84 6.08 5.39 8.15 6.42 5.73attr(,"assign")[1] 0 1 2> t(model.matrix(modello.2))

1 2 3 4 5 6 7 8 9 10 11(Intercept) 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00Xpx1 8.04 6.95 7.58 8.81 8.33 9.96 7.24 4.26 10.84 4.82 5.68Xpx2 7.46 6.77 12.74 7.11 7.81 8.84 6.08 5.39 8.15 6.42 5.73attr(,"assign")[1] 0 1 1

Nonostante l’aspetto, l’output di model.matrix(...) e, a tutti gli e!etti una matrice, infatti:

> is.matrix(model.matrix(modello.1))[1] TRUE

e di conseguenza puo essere utilizzato per successive elaborazioni. !

Palesemente, le considerazioni sin’ora fatte si applicano, mutatis mutandi, ad unmodello di regressione lineare semplice, per cui evidentemente risulta p = 1.

185

Page 188: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

Esempio 6.5.3 Con riferimento alla situazione di cui all’Esempio 6.3.1, definita la matriceX come X<-model.matrix(modello.es1), il vettore delle stime dei parametri (0 e (1 delmodello di regressione semplice Y = (0 +(1 X1 + * puo essere calcolato in modo diretto come:

> solve(t(X)%*%X)%*%t(X)%*%y

[,1][1,] -131.332357[2,] 6.578188

risultato ovviamente coincidente con l’ouput di modello.es1. !

6.5.2 Ridefinizione del modello: l’istruzione update(lm(...))

A volte, per svariati motivi, nel corso di una sessione di lavoro puo accadere di dovereridefinire un modello di regressione: aggiungere o eliminare alcuni predittori, sop-primere la costante, ... Anziche ridefinire il modello ex-novo, R prevede la funzioneupdate(lm(...)), la cui sintassi autoesplicativa e:

update(lm(<old>),lm(<new>))

Posto di avere precedentemente definito l’oggetto modello<-lm(y~x1), si immaginidi volere vedere l’e"etto sul coe!ciente di correlazione multipla R dell’inserimento diun secondo predittore x2; cio puo avvenire ricorrendo alla semplice istruzione:

> sqrt(summary(update(modello,y~x1+x2))$r.squared)

o, tpiu brevemente ancora:

> sqrt(summary(update(modello,.~.+x2))$r.squared)

Naturalmente desiderando ridefinire il modello in modo permanente si potra ricorreread un assegnazione del tipo modello<-update(modello,. .+x2).E appena il caso di ricordare che, qualora l’oggetto di classe lm fosse definito in basead una formula, questa puo essere “aggiornata”, nel senso di cui sopra, ricorrendoall’istruzione update.formula().

Esempio 6.5.4 Con riferimento alla situazione di cui all’Esempio 6.3.1, definito, per ilmodello di regressione Y = (0 + (1 X1 + *, l’oggetto di classe lm:

> modello<-lm(Risposta~x1,data=dati)

la frazione della varianza totale di Y spiegata dal modello, ovvero R2, e circa il 68%, infatti:

186

Page 189: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

> summary(modello)$r.squared[1] 0.6796644

L’introduzione nel modello del secondo predittore X2 riduce ulteriormente tale indicatore eprecisamente del 21%, risultando:

> summary(update(modello,.~.+x2))$r.squared[1] 0.8933146

A tal proposito si osservi il comportamento delle istruzioni:

> formula<-as.formula(Risposta~x1)> summary(lm(formula,data=dati))$r.squared[1] 0.6796644> summary(lm(update.formula(formula, ~ . + x2),data=dati))$r.squared[1] 0.8933146

che evidentemente porgono gli stessi risultati. !

6.5.3 Sulla multicollinearita e la stepwise regression

Come si e gia osservato, in alcune situazioni, puo accadere che i test sui parametri*j conducano all’accettazione delle ipotesi nulle e cio indipendentemente dal valoreassunto da R2. Una delle possibili cause di tale comporamento e imputabile allavarianza delle stime, la quale, come si accenno al paragrafo 6.4.4, viene a sua voltadipendere dalla matrice di correlazione tra le variabili esplicative. Nel caso, dunque,di multicollinearita, si puo tentare di pervenire ad un modello di regressione stabileoperando discrezionalmente sul numero dei predittori da inserire nel modello stesso.L’Esempio che segue presenta un semplice problema di regressione multipla in presen-za di multicollarineita tra i predittori, risolvibile e"ettuando una selezione “manuale”delle variabili esplicative.Esempio 6.5.5 Un campione casuale di n = 10 autovetture di piccola cilindrata ad ali-mentazione a benzina ha fornito i seguenti risultati in corrispondenza a quattro variabili diinteresse:

Cilindrata Potenza Peso Consumi(cc) (cv.Din) (kg) (l $ 100)

1075 45 750 5.01255 62 805 6.51075 45 710 4.81306 72 805 6.71455 60 820 6.51055 53 850 6.31175 57 755 4.81175 54 815 5.91375 72 810 6.41255 75 805 6.5

187

Page 190: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

Desiderando spiegare il Consumo di carburante in funzione dei tre predittori, scegliamo diricorrere al modello di regressione multipla Y = (0 +

(3j=1 (j Xj + *.

Dal punto di vista pratico, inserite le osservazioni campionarie nel data frame auto e definitoil modello di regressione a tre predittori:

> auto<-data.frame(Cilindrata=c(10.75, 12.55, 10.75, 13.06, 14.55, 10.55,

11.75,11.75, 13.75, 12.55)*100,CV.Din=c(45, 62, 45, 72, 60, 53, 57, 54, 72, 75),Peso=c(750, 805, 710, 805, 820, 850, 755, 815, 810, 805),Consumo=c(5, 6.5, 4.8, 6.7, 6.5, 6.3, 4.8, 5.9, 6.4, 6.5))

> modello<-lm(Consumo~.,data=auto)

otteniamo17 i seguenti risultati:

> summary(modello)$coefficientsEstimate Std. Error t value Pr(>|t|)

(Intercept) -5.7378368 2.288926 -2.5068 0.046103Cilindrata 0.0009164 0.001188 0.7713 0.469800CV.Din 0.0230951 0.015522 1.4879 0.187354Peso 0.0115907 0.003114 3.7221 0.009828

sicche saremo propensi ad accettare le ipotesi nulle circa i coe"cienti (1 e (2. Tuttavia, talesoluzione non e certo soddisfaciente! La natura stessa dei predittori Cilindrata e Potenza fası che essi siano correlati tra loro, ed infatti18:

> (R<-cor(model.matrix(update(modello,.~.-1))))Cilindrata CV.Din Peso

Cilindrata 1.0000 0.7167 0.4091CV.Din 0.7167 1.0000 0.5015Peso 0.4091 0.5015 1.0000

donde i fattori di inflazione della varianza (VIF):

> (vif<-diag(solve(R)))[1] 2.070 2.303 1.345

nonche i coe"cienti di correlazione multipla tra i predittori:

> 1-(1/vif)[1] 0.5170 0.5658 0.2566

Si noti che questi ultimi potrebbero essere calcolati in modo diretto ricorrendo, ad esempio,all’istruzione:

17Ipotizzando la normalita del termine di disturbo.18Per una migliore leggibilita dei risultati, si e scelto di porre options(digits=4).

188

Page 191: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

> cbind(summary(update(modello,Cilindrata~CV.Din+Peso))$r.squared,summary(update(modello,CV.Din~Cilindrata+Peso))$r.squared,summary(update(modello,Peso~Cilindrata+CV.Din))$r.squared)[,1] [,2] [,3]

[1,] 0.517 0.5658 0.2566

Cio premesso, possiamo pensare di eliminare una delle due variabili esplicative al modello eri-sottoporre a verifica i parametri dello stesso.

> summary(update(modello,.~Cilindrata+Peso))$coefficientsEstimate Std. Error t value Pr(>|t|)

(Intercept) -6.963191 2.3133772 -3.010 0.019663Cilindrata 0.002062 0.0009802 2.103 0.073507Peso 0.013107 0.0031873 4.112 0.004502> summary(update(modello,.~CV.Din+Peso))$coefficients

Estimate Std. Error t value Pr(>|t|)(Intercept) -5.23809 2.130841 -2.458 0.043579CV.Din 0.03085 0.011476 2.689 0.031152Peso 0.01179 0.003012 3.913 0.005798

Un’attenta lettura dei risultati, ci porta a ritenere che il Consumo possa essere “spiegato”mediante le varibili Peso e Potenza.Si noti che saremmo giunti alle stesse conclusioni valutando:

— la frazione della varianza spiegata dai due modelli a due predittori:

> summary(update(modello,.~Cilindrata+Peso))$r.squared[1] 0.8298> summary(update(modello,.~CV.Din+Peso))$r.squared[1] 0.8633

— la sitma della varianza $2 o!erta dai due modelli a due predittori:

> summary(update(modello,.~Cilindrata+Peso))$sigma[1] 0.3605> summary(update(modello,.~CV.Din+Peso))$sigma[1] 0.3230

!

Il problema della identificazione dei predittori nel caso di multicollinearita puo esserea"rontato, come si disse al paragrafo 6.4.4, ricorrendo alla stepwise regression, tenicaimplementata in R quale funzione step, la cui sintassi, perlomeno nella sua veste piudimessa, e:

step(modello, trace=1, test="F")

189

Page 192: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

A tal proposito e bene tenere a mente che:

— modello e un oggetto di classe lm definito via lm(formula=..., ...);

— con l’opzione trace=0 viene soppressa la visualizzazione dei passi intermedi checonducono al modello definitivo; la situazione di default prevede trace=1;

— l’opzione test="F" stabilisce quale criterio di selezione dei predittori quellobasato su R2;

— in modo automatico, alla fine del processo, vengono elencati i predittori selezio-nati e le corrispondenti stime dei parametri;

— step(...) e, a sua volta, un oggetto di classe lm e, in quanto tale, per essovalgono le considerazioni fatte a proposito di tali oggetti. Ad esempio conmodel.matrix(step(...,...)) viene visualizzata la matrice X associata almodello di regressione con i k ' p predittori selezionati.

Esempio 6.5.6 Con riferimento alla situazione di cui all’Esempio 6.5.6, la risoluzione delproblema di multicollinearita viene risolta, ricorrendo alla funzione step, mediante le istru-zioni:

> step(modello,trace=1,test="F")Start: AIC= -19.11Consumo ~ Cilindrata + CV.Din + Peso

Df Sum of Sq RSS AIC F value Pr(F)- Cilindrata 1 0.0659 0.7303 -20.1685 0.5949 0.469800<none> 0.6644 -19.1139- CV.Din 1 0.2451 0.9096 -17.9735 2.2137 0.187354- Peso 1 1.5342 2.1987 -9.1474 13.8542 0.009828 **---Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Step: AIC= -20.17Consumo ~ CV.Din + Peso

Df Sum of Sq RSS AIC F value Pr(F)<none> 0.7303 -20.1685- CV.Din 1 0.7541 1.4845 -15.0754 7.2282 0.031152 *- Peso 1 1.5979 2.3282 -10.5750 15.3151 0.005798 **---Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Call:

190

Page 193: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

lm(formula = Consumo ~ CV.Din + Peso, data = auto)

Coefficients:(Intercept) CV.Din Peso

-5.23809 0.03085 0.01179

Per concludere, osserviamo che la matrice delle osservazioni associata al modello di regressionea due predittori e il data frame contenente le sole realizzazioni delle (tre) variabili di interesse,possono ottenersi con le istruzioni19:

> t(model.matrix(step(modello,trace=0,test="F")))1 2 3 4 5 6 7 8 9 10

(Intercept) 1 1 1 1 1 1 1 1 1 1CV.Din 45 62 45 72 60 53 57 54 72 75Peso 750 805 710 805 820 850 755 815 810 805attr(,"assign")[1] 0 1 2> t(model.frame(step(modello,trace=0,test="F")))

1 2 3 4 5 6 7 8 9 10Consumo 5 6.5 4.8 6.7 6.5 6.3 4.8 5.9 6.4 6.5CV.Din 45 62.0 45.0 72.0 60.0 53.0 57.0 54.0 72.0 75.0Peso 750 805.0 710.0 805.0 820.0 850.0 755.0 815.0 810.0 805.0

utili al fine di successive elaborazioni. !

6.6 L’analisi della varianza

Una delle tecniche statistiche di impiego piu frequente nelle ricerche sperimentali erappresentata dall’analisi della varianza (ANOVA); com’e noto, essa consente essen-zialmente, a partire da campioni indipendenti estratti da popolazioni con distribuzionenormale, di verificare se le medie delle popolazioni poste a confronto possono essereritenute statisticamente uguali, ad un prefissato livello di significativita.Data la vastita dell’argomento, nel seguito considereremo unicamente l’analisi dellavarianza per esperimenti ad uno e due fattori.In R possiamo procedere in modo diretto all’analisi della varianza ricorrendo al co-mando aov(formula=,data=). Oltre alla consueta tabella ANOVA riassuntiva, talefunzione restituisce, sottoforma di lista, una serie piuttosto estesa di risultati chepossono, come vedremo, essere ripresi per ulteriori analisi mirate ***

ANOVA per esperimenti ad un fattore Immaginiamo di voler studiare l’influenzadi un certo fattore A su di una grandezza quantitativa Y . Indicati con a1, a2, . . . , ak

19Per ovvi motivi si presentano le trasposte delle corrispondenti matrici.

191

Page 194: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

le varie e distinte condizioni sperimentali (livelli, classi o trattamenti) in cui puopresentarsi il fattore A, organizziamo un esperimento che preveda:

n1 misurazioni di Y con il fattore A al livello a1

n2 misurazioni di Y con il fattore A al livello a2

... ......................................nk misurazioni di Y con il fattore A al livello ak

E quasi il caso di notare come il problema posto sia analogo a quello di avere a che farecon k diversi campioni indipendenti, ciascuno di dimensione ni, tratti da altrettantepopolazioni.Supposto che i k campioni casuali (Yi1, Yi2, . . . , Yini), siano indipendenti e provenga-no da popolazioni normali con valor medio µ + $i e comune varianza "2, possiamointrodurre un modello che considera le v.c. Yij come una combinazione lineare deltipo Yij = µ + $i + -ij, dove le eij sono v.c. i.i.d. N(0,"2).Se i diversi livelli del fattore A influenzano i dati del campione allo stesso modo, e lecitoformulare l’ipotesi nulla che siano uguali i corrispondenti valori medi da sottoporrea verifica contro l’ipotesi alternativa che almeno due di essi siano diversi tra loro; insimboli:

+H0 : µ1 = µ2 = . . . = µk = µ0

H1 : 4 i, j; i 3= j : µi 3= µj(6.39)

L’ANOVA e lo strumento adatto appunto alla verifica di tali ipotesi statistiche; essa sibasa essenzialmente sul concetto di scissione della devianza di Y nelle due componentiSSA e SSE; la prima rappresenta la devianza imputabile ai diversi livelli del fattoreA, la seconda quella derivante dall’e"etto di altre cause non esplicitamente prese inconsiderazione. Se H0 e vera, SSA dipendera unicamente dalla varianza "2, mentrein caso contrario dipendera, oltre che dalla varianza, anche dai parametri ai. Aifini dell’ANOVA e pertanto necessario confrontare tra loro la devianza SSA con ladevianza SSE . Se SSA e significativamente maggiore di SSE , si puo concludere chele quantita ai risultano diverse da zero; in altri termini, il fattore A influenza il valormedio della v.c. osservata Y , ovvero la popolazione oggetto di studio non e omogenearispetto al fattore di classificazione.Ricordando che il rapporto tra due v.c. )2 indipendenti divise per i rispettivi gradidi liberta ha distribuzione F di Snedecor, l’ANOVA assumera quale funzione test ilrapporto:

n ! k

k ! 1SSA

SSE

che, vera H0, ha appunto distribuzione F di Snedecor con (k ! 1) gradi di liberta anumeratore e (n ! k) gradi di liberta a denominatore.

192

Page 195: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

Esempio 6.6.1 Si immagini che i dati che seguono rappresentino il risultato di una seriedi misurazioni (espresse in Kg/m2) del valore di resistenza a compressione di esemplari dicemento sottoposti a cinque diversi trattamenti Ai, i = 1, 2, . . . , 5:

A1 A2 A3 A4 A5

59.1 62.7 58.9 60.5 59.860.2 62.3 60.2 62.0 60.658.9 59.9 59.7 62.3 61.760.1 60.3 60.5 59.7 61.359.3 59.7 59.9 61.4 60.2

E interessante verificare se i risultati sperimentali ottenuti siano, in media, influenzati dalparticolare tipo di trattamento a cui sono stati sottoposti gli esemplari.Creato, per comodita, il data frame cemento contenente i risultati sperimentali:

> y<-c(59.1,62.7,58.9,60.5,59.8,60.2,62.3,60.2,62.0,60.6,58.9,59.9,59.7,62.3,61.7,60.1,60.3,60.5,59.7,61.3,59.3,59.7,59.9,61.4,60.2)

> a<-factor(c(rep(c(1:5),5)))> (cemento<-data.frame(tratta=factor(a),risposta=y))tratta risposta1 1 59.12 2 62.73 3 58.94 4 60.55 5 59.8..................21 1 59.322 2 59.723 3 59.924 4 61.425 5 60.2> rm(y,a)> attach(cemento)

e facile verificare che, per ciascun tipo di trattamento, media e varianza campionarie risultano:

> for (i in 1:length(unique(tratta))){cat("A=",i," media =>",round(mean(split(risposta,tratta)[[i]]),2)," varianza =>",var(split(risposta,tratta)[[i]]),"\n")}

A= 1 media => 59.52 varianza => 0.352A= 2 media => 60.98 varianza => 1.992A= 3 media => 59.84 varianza => 0.368A= 4 media => 61.18 varianza => 1.157A= 5 media => 60.72 varianza => 0.607

193

Page 196: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

Verificata l’omoschedasticita delle varianze tramite il test di Bartlett (cfr. paragrafo 5.3):

> bartlett.test(risposta,tratta)

Bartlett test for homogeneity of variances

data: risposta and trattaBartlett’s K-squared = 4.1982, df = 4, p-value = 0.3798> detach(cemento)

se assumiamo che i risultati sperimentali siano determinazioni di altrettanti campioni casualiXj - N(µj , $), ciascuno di cardinalita n = 5, con j = 1, 2, . . . , 5, possiamo procedere allaverifica delle seguenti ipotesi statistiche:

H0 : µ1 = µ2 = µ3 = µ4 = µ5 H1 : . (i, j)i$=j µi = µj

cioe e!ettuare un’analisi della varianza ad un solo fattore di classificazione (il tipo di tratta-mento) sulla grandezza quantitativa Y , la resistenza a compressione.A tal fine, definiamo l’oggetto my.anova, che conterra il modello statistico, la sorgente deidati e le informazioni di base per la verifica delle ipotesi di interesse, tramite il comando:

> (my.anova<-aov(risposta ~ tratta,data=cemento))Call:

aov(formula = risposta ~ tratta, data = cemento)

Terms:tratta Residuals

Sum of Squares 10.6184 17.9040Deg. of Freedom 4 20

Residual standard error: 0.94615

Desiderando procedere, ovvero calcolare il p % value associato al test, possiamo ricorrere alcomando summary(), il quale coerentemente fornisce:

> summary(my.anova)Df Sum Sq Mean Sq F value Pr(>F)

tratta 4 10.6184 2.6546 2.9654 0.04486 *Residuals 20 17.9040 0.8952---Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

In sostanza saremo portati (ad un livello di significativita di poco inferiore al 5%) a rifiutarel‘ipotesi nulla e a ritenere che i diversi tipi di trattamento e!ettivamente influiscono sullacapacita di resistenza a compressione del cemento.Osserviamo che il ricorso al comando model.tables() consente di visualizzare alcune utiliinformazioni circa i valori medi campionari; infatti:

194

Page 197: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

> model.tables(my.anova, type="means")Tables of meansGrand mean

60.448

tratta1 2 3 4 5

59.52 60.98 59.84 61.18 60.72

!

ANOVA per esperimenti a due fattori senza replicazioni Si immagini, ora, divoler studiare l’e"etto di due fattori, diciamo A e B, su di una certa grandezza quanti-tativa Y e si supponga che al fattore A siano associati r distinti livelli a1, . . . , ai, . . . , ar,convenzionalmente detti trattamenti, ed analogamente al fattore B siano associati sdistinti livelli b1, . . . , bj, . . . , bs, convenzionalmente detti blocchi, di modo che sianocomplessivamente possibili r " s di"erenti condizioni sperimentali. Si ipotizzi, al-tresı, di e"ettuare per ciascuna combinazione dei livelli dei fattori in esame un’unicaosservazione Yij, con i = 1, 2, . . . , r; j = 1, 2, . . . , s. Tali risultati sperimentali sonointerpretabili come determinazioni campionarie di altrettante v.c. Yij i.i.d. secondouna N(µ + $i + *j ,"2).In altri termini possiamo modellizzare le v.c. Yij come una combinazione lineare deltipo Yij = µ + $i + *j + -ij, dove µ indica il valor medio di Y , mentre $i = µi. ! µe *j = µ.j ! µ rappresentano, rispettivamente l’e"etto del i-esimo trattamento e delj-esimo blocco e le -ij sono v.c. i.i.d. N(0,"2).Se i diversi livelli del fattore A influenzano Y nella stessa misura, e lecito formularel’ipotesi che i diversi trattamenti abbiano ugual valor medio, cioe H (1)

0 : $i = 0, . i dasottoporre a verifica contro l’ipotesi alternativa H (1)

1 : 4 i : $i 3= 0. In modo del tuttoanalogo, per il fattore B possiamo ipotizzare che i diversi blocchi abbiano ugual valormedio, ovvero H (2)

0 : *j = 0, . j da sottoporre a verifica contro l’ipotesi alternativaH(2)

1 : 4 j : *j 3= 0. Riasumendo consideriamo i seguenti sistemi di ipotesi:O

H(1)0 : $i = 0

H(1)1 : 4 i : $i 3= 0

(6.40)

OH(2)

0 : *j = 0H(2)

1 : 4 i : *i 3= 0(6.41)

Anche in questo caso, con opportuni passaggi, si puo scindere la devianza totale diYij nei tre addendi SSA, SSB e SSE, che rappresentano, rispettivamente, la devianzatra i trattamenti, la devianza tra i blocchi e la devianza residua.

195

Page 198: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

Il procedimento per verificare le ipotesi statistiche precedentemente poste, si basasulla seguente osservazione: se H (1)

0 e H(2)0 sono vere, SSA e SSB dipendono uni-

camente da "2, mentre in caso contrario dipenderanno anche dai parametri $i e *j

rispettivamente.Ai fini dell’ANOVA si trattera, pertanto, di confrontare le devianze SSA e SSB

rispetto a SSE. Le funzioni test atte a tal fine sono:

SSA

r ! 1SSE

(r ! 1) (s ! 1)

SSB

s ! 1SSE

(r ! 1) (s ! 1)

che, vere le corrispondenti ipotesi nulle, si ditribuiscono secondo una F di Snedecorcon, rispettivamente, (r ! 1) e (s! 1) gradi di liberta a numeratore e (r ! 1) · (s! 1)gradi di liberta a denominatore.Esempio 6.6.2 Si immagini che al fine di una simulazione numerica siano state approntatetre routine di calcolo (r1, r2, r3), ciascuna delle quali redatta in accordo a tre diversi algoritmi;al fine di verificare la velocita di esecuzione (Y ), si e fatto ricorso ad un esperimento cheprevedeva la misurazione dei tempi di esecuzione (in secondi) delle tre routine (fattore A a trelivelli) su altrettanti PC (fattore B a tre livelli o blocchi),con uguali caratteristiche, ottenendoi seguenti risultati sperimentali:

Routine ) Pc $ pc1 pc2 pc3

r1 2.42 2.44 2.43r2 2.45 2.44 2.46r3 2.46 2.47 2.48

Trattasi evidentemente di un esperimento a due fattori (A,B) a tre livelli ciascuno con unasola replicazione per cella.Procedendo, creiamo, per comodita, il data frame dati contenente i risultati sperimentali:

> y<-c(2.44,2.42,2.43,2.45,2.44,2.46,2.46,2.47,2.48)> a<-factor(c(1,1,1,2,2,2,3,3,3))> b<-factor(c(1,2,3,1,2,3,1,2,3 ))> (dati<-data.frame(fattoreA=a,fattoreB=b,risposta=y))

fattoreA fattoreB risposta1 1 1 2.442 1 2 2.423 1 3 2.434 2 1 2.455 2 2 2.446 2 3 2.467 3 1 2.468 3 2 2.479 3 3 2.48> rm(a,b,y)

196

Page 199: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

e successivamente, al fine di verificare le ipotesi statistiche (6.40) e (6.41), definiamo l’oggettomy.anova, che conterra il modello statistico, la sorgente dei dati nonche le informazioni dibase per la verifica delle ipotesi di interesse, tramite il comando:

> (my.anova<-aov(risposta ~ fattoreA+fattoreB,data=dati))Call:

aov(formula = risposta ~ fattoreA + fattoreB, data = dati)

Terms:fattoreA fattoreB Residuals

Sum of Squares 0.0024000000 0.0002666667 0.0003333333Deg. of Freedom 2 2 4

Residual standard error: 0.00912871

A questo punto ricorrendo al comando summary(), otteniamo i risultati desiderati:

> summary(my.anova)Df Sum Sq Mean Sq F value Pr(>F)

fattoreA 2 0.00240000 0.00120000 14.4 0.01487 *fattoreB 2 0.00026667 0.00013333 1.6 0.30864Residuals 4 0.00033333 0.00008333---Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Risultati che ci portano a ritenere che le tre routine abbiano, perlomeno dal punto di vista sta-tistico, un diverso comportamento (si rifiuta H (1)

0 ), mentre, come auspicabile, non emergonodi!erenze significative circa il comportamento dei PC (si accetta H (2)

0 ). !

ANOVA per esperimenti a due fattori con replicazioni Nello schema di clas-sificazione illustrato al punto precedente si assumeva l’assenza di interazione tra ifattori A e B. Per potere individuare la presenza di un’eventuale interazione trai fattori, e necessario disporre di piu osservazioni per ciascuna delle r " s situazio-ni sperimentali. Nel seguito supporremo che ogni cella contenga un ugual numeron > 1 di osservazioni, sı che risultati sperimentali possano essere indicati Yijk, dovek = 1, 2, . . . , n rappresenta la k-esima osservazione relativa alla ij-esima cella. Pos-siamo a"ermare che i valori sperimentali costituiscono determinazioni campionarie dialtrettante v.c. Yijk i.i.d. N(µ + $i + *j + %ij,"2). Ricordando che µij. = E[Yij.],µi.. = E[Yi..], µ.j. = E[Y.j.], µ = E[Y...], possiamo esprimere le v.c. Yijk quale combi-nazione lineare Yijk = µ + $i + *j + %ij + -ijk, dove $i = µi.. ! µ rappresenta l’e"ettodel i-esimo livello del fattore A, *j = µ.j. ! µ quello del j-esimo livello del fattore B,%ij = µij. ! µi.. ! µ.j. + µ quello dell’e"etto congiunto del i-esimo livello del fattore Ae del j-esimo livello del fattore B, mentre -ijk sono v.c. i.i.d. N(O,"2).

197

Page 200: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

Le ipotesi statistiche che sottoponiamo a verifica saranno dunque:

H20 : $i = 0, . i H2

1 : 4 i : $i 3= 0 (6.42)

H20 : *j = 0, . j H2

1 : 4 j : *j 3= 0 (6.43)

H30 : %ij = 0, . i, j H3

1 : 4 i, j; i 3= j : %ij 3= 0 (6.44)

Anche in questo caso, con opportuni passaggi, si puo scindere la devianza totale diYijk nei quattro addendi SSA, SSB, SSAB e SSE , che rappresentano, rispettivamen-te, la devianza tra i trattamenti, la devianza tra i blocchi, la devianza imputabileall’interazione fra trattamenti e blocchi e la devianza residua.Ai fini dell’ANOVA si trattera di confrontare le devianze SSA, SSB e SSAB rispettoa SSE; le statistiche test atte a tal fine sono:

SSA

r ! 1SSE

r s (n ! 1)

SSB

s ! 1SSE

r s (n ! 1)

SSAB

(r ! 1) (s ! 1)SSE

r s (n ! 1)

che, vere le corrispondenti ipotesi nulle, si ditribuiscono secondo una F di Snedecorcon, rispettivamente, (r ! 1), (s ! 1) e (r ! 1) · (s ! 1) gradi di liberta a numeratoree r s (n ! 1) gradi di liberta a denominatore.

Esempio 6.6.3 I responsabili del Controllo di Qualita di un importante lanificio ritengonoche le proprieta meccaniche e dimensionali (individuabili ricorrendo a specifici parametri)del tessuto siano influenzate, nel corso del processo di decantissaggio in autoclave, da dueparticolari fattori; la posizione (fattore A) del tessuto all’interno del cilindro di decantissaggioe la di!erenza (fattore B) fra pezza e pezza di uno stesso tipo di tessuto. Per verificaretale convinzione venne progettato un esperimento che prevedeva la misurazione dei succitatiparametri su campioni di sto!a prelevati casualmente in corrispondenza a diverse combinazionidei due fattori A e B. In particolare, per ciascun fattore si sono considerati tre livelli e perciascuna delle nove condizioni sperimentali si sono e!ettuate cinque misurazioni. Trattasi,manifestamente, di un esperimento a due fattori di classificazione con un ugual numero diosservazioni per cella, di cui il fattore A costituisce il fattore di interesse dell’indagine mentreil fattore B esprime la variabilit, non eliminabile, del processo produttivo. Le ipotesi che sivogliono verificare, limitatamente alla sola grandezza di interesse Y sono:

H(1)0 : il fattore A non ha alcuna influenza su Y ;

H(2)0 : il fattore B non ha alcuna influenza su Y ;

H(3)0 : non esiste interazione tra i fattori A e B.

sulla base delle seguenti realizzazioni sperimentali:

198

Page 201: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

A B Y A B Y A B Y1 1 476 2 1 517 1 5131 1 474 2 1 499 1 4831 1 465 2 1 501 1 5071 1 477 2 1 503 1 5041 1 490 2 1 485 1 4831 2 481 2 2 491 2 5011 2 487 2 2 501 2 5171 2 492 2 2 487 2 5051 2 485 2 2 504 2 4951 2 469 2 2 498 2 5101 3 490 2 3 514 3 5331 3 486 2 3 495 3 5141 3 473 2 3 506 3 5251 3 475 2 3 525 3 5101 3 479 2 3 503 3 504

> y<-c(476,474,465,477,490,481,487,492,485,469,490,486,473,475,479,517,499,501,503,485,491,501,487,504,498,514,495,506,525,503,513,483,507,504,483,501,517,505,495,510,533,514,525,510,504)

> a<-c(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3)

> b<-c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3)

> dati<-data.frame(fattoreA=factor(a),fattoreB=factor(b),risposta=y)> my.anova<-aov(risposta ~ fattoreA+fattoreB+fattoreA*fattoreB,data=dati)

porgono la seguente tabella ANOVA:

> summary(my.anova)Df Sum Sq Mean Sq F value Pr(>F)

fattoreA 2 6190.0 3095.0 30.1690 2.019e-08 ***fattoreB 2 844.9 422.5 4.1181 0.02452 *fattoreA:fattoreB 4 586.7 146.7 1.4297 0.24407Residuals 36 3693.2 102.6---Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

In sostanza siamo portati a credere che i due fattori A e B influenzano singolarmente, ma noncongiuntamente la grandezza Y in esame. !

199

Page 202: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Capitolo 7

Elementi di simulazione *** da rifare

A"rontiamo, ora, alcuni specifici problemi connessi alla simulazione. Si tratta disemplici esempi di specie che tendono ad illustrare, ancora una volta, le potenzialitadel linguaggio di programmazione.

7.1 Sul lancio simultaneo di n monete

Con riferimento ad un esperimento casuale che consiste nel lancio simultaneo di n & 1monete, il numero di Teste apparse puo essere descritto mediante una v.c. X che, percose note, possiede distribuzione binomiale di parametri n e p, per x = 0, 1, . . . , n.Nel seuito ci proponiamo di simulare la ripetizione, poniamo k > 1 volte, di taleesperimento casuale e di ottenere la distribuzione di frequenze empirica del numerodi Teste apparse ad ogni lancio.A tal fine definiamo la seguente funzione lancio i cui input sono k, n e p:

> lancio<-function(k,n,p,graph=FALSE)1

{2

x<-sort(rbinom(k,n,p))3

fi<-diag(table(x,x))4

lancio.out<<-list(n.teste=x,detx=unique(x),freq=fi)5

if(graph)6

plot(unique(x),fi,type="h",xlim=c(-1,max(unique(x))+1),7

xlab="Determinazioni x",ylab="Frequenze empiriche")8

}9

A commento:

— in riga [3] viene definita e generata la sequenza delle determinazioni di X inciascuna delle k repliche dell’esperimento;

Page 203: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

— in fi immettiamo le frequenze corrispondenti ad ogni valore di xi (riga [4]). Sinoti il ricorso all’istruzione table di cui si considerano i valori appartenenti allasola diagonale principale, essendo nulli altrove;

— in riga [5] viene creata la lista lancio.out contenente i risultati della simula-zione;

— in riga [7] viene proposto, a patto che graph=TRUE, il grafico della distribu-zione empirica; si noti che unique(x) porge, in ordine crescente, le possibilideterminazioni x = 0, 1, . . . , n di X in ciascuna prova.

Cosı, ad esempio:

> lancio(20,5,.5,graph=FALSE)> lancio.out$freq0 1 2 3 4 51 3 4 5 5 2

simula il lancio, ripetuto 20 volte, di cinque monete regolari.

7.2 Sulle catene di Markov

Si immagini che un gioco consista nel lancio di una moneta e che in caso si ottengaTesta si vincano 100 lire, mentre in caso contrario se ne perdano 100 e che inoltre ilgioco abbia termine non appena si siano perse o guadagnate 500 lire. E interessanteindagare sui tempi di durata gioco, o perlomeno farsi un’idea della durata mediadello stesso. Se, accanto alla v.c. X che indica il numero di Teste ottenute dal lancio,introduciamo le v.c.:

g(Xt) =+!100 Xt = Croce+100 Xt =Testa Ct =

+ 0 t = 0Ct!1 + g(Xt) t = 1, 2, . . .

possiamo modelizzare il gioco quale catena di Markov a tempi discreti definita suglistati Ei per cui Ct = i, con i = !5,!4, . . . , 4, 5. Gli stati E!5 ed E5, in accordo allepremesse fatte, sono di tipo assorbente, mentre i restanti sono transienti.La catena proposta, a ben vedere, e la modellizzazione di un ben noto processo sto-castico abitualmente detto “passeggiata casuale tra due barriere assorbenti” che sipresta, anche in forme alternative a quella presentata, a diverse applicazioni anche incampo economico ed industriale.Se si osserva, poi, che i passaggi tra gli stati Ei a Ei+1 o ad Ei!1 avvengono conprobabilita p e 1 ! p rispettivamente, la matrice dei transizione del primo ordine

201

Page 204: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

della catena, avendo cura di riordinare gli stati come E!5, E5, E!4, . . . , E4, verra adassumere la forma:

P =

$

0000000000000000000%

1 0 0 0 0 0 0 0 0 0 00 1 0 0 0 0 0 0 0 0 0

1 ! p 0 0 p 0 0 0 0 0 0 00 0 1 ! p 0 p 0 0 0 0 0 00 0 0 1 ! p 0 p 0 0 0 0 00 0 0 0 1 ! p 0 p 0 0 0 00 0 0 0 0 1 ! p 0 p 0 0 00 0 0 0 0 0 1 ! p 0 p 0 00 0 0 0 0 0 0 1 ! p 0 p 00 0 0 0 0 0 0 0 1 ! p 0 p0 p 0 0 0 0 0 0 0 1 ! p 0

&

1111111111111111111'

In sostanza la matrice P puo essere vista come:

P =:

R SW Q

<

dove Q ne rappresenta cosidetta “matrice fondamentale”.Desiderando indagare sulla durata media della “passeggiata”, tralasciando voluta-mente la ricerca di una soluzione analitica che potremmo individuare ricorrendo adun’equazione alle di"erenze con opportuni vincoli, sfruttiamo il seguente risultato, do-vuto a Brook, Evans (1982), che consente, appunto di ottenere il vettore dei momentiprimi della v.c. TEi che rappresenta il numero di transizioni che occorrono, partendoda un prefissato stato “iniziale” non transiente Ei, i = !4, . . . , 4,, per raggiungereuno degli stati assorbenti:

µEi = (I ! Q)!1 1

Ancor piu interessante e analizzare il comportamento di µEi , abitualmente detto Ave-rage Run Length, al variare di p, cioe sotto l’ipotesi di non correttezza della moneta.A tal fine e su"ficiente far variare i valori di p in (0, 1) o meglio, per la simmetria, in(0.5, 1).Per il nostro scopo, ricordando che concentriamo la nostra attenzione al valor mediodi TE0 , sono su!cienti le istruzioni che seguono:

> n<-51; p<-.5; q<-1-p1

> I <- matrix(0,nrow=9,ncol=9); I[row(I)==col(I)] <- 12

> one<-cbind(diag(I))3

202

Page 205: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

> arl<-real(n)4

> for (i in 1:n){5

Q<-matrix(c(0,q,0,0,0,0,0,0,0,p,0,q,0,0,0,0,0,0,6

0,p,0,q,0,0,0,0,0,0,0,p,0,q,0,0,0,0,0,0,0,p,0,q,0,0,0,7

0,0,0,0,p,0,q,0,0,0,0,p,0,0,p,0,q,0,0,0,0,0,0,0,p,0,q,8

0,0,0,0,0,0,0,p,0),nrow=9,ncol=9)9

W<-((solve(I-Q))%*%one)10

arl[i]<-(((solve(I-Q))%*%one))[5,]11

p<-p+0.01; q<-1-p}12

> plot(seq(.5,1,by=0.01),arl,type="p",main="",ylab=" A.R.L.",13

xlab="p=P[X=1]",col="blue")14

> lines(seq(.5,1,by=0.01),arl,col="red")15

> grid()16

A commento, osserviamo:

— in riga [2] e [3] definiamo la matrice identita (9x9) ed il vettore colonna unitario;

— in riga [4] definiamo l’oggetto arl che conterra le soluzioni desiderate;

— dalla riga [5] alla [12] vi e il ciclo di calcolo vero e proprio. Si noti che arl dovracontenere il valor medio relativo allo stato E0, cioe il quinto elemento dei vettori(I ! Q)!1 1 via via calcolati.

I risultati ottenuti per i valori di p = 0.50, (0.01), 1 sono:

340.000 214.880 151.775 114.447 90.155 73.29761.042 51.813 44.665 39.005 34.436 30.69127.579 24.963 22.741 20.837 19.192 17.76216.500 15.406 14.430 13.561 12.784 12.08811.460 10.892 10.377 9.909 9.481 9.0898.729 8.397 8.092 7.808 7.546 7.3027.074 6.862 6.663 6.477 6.302 6.1375.982 5.835 5.697 5.565 5.441 5.3225.210 5.102 5.000

mentre in figura (7.1) se ne riporta il grafico.

7.3 Sul teorema limite centrale

Immaginiamo di estrarre k > 1 campioni di numerosita n da una specifica densitaf(x), di calcolare, per ciascuno di essi, il valor medio x e quindi rappresentare gra-ficamente la distribuzione empirica di X , che sappiamo distribuirsi asintoticamentesecondo una N(µ,"k!1/2) e cio indipendentemente dalla forma di f(x).

203

Page 206: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

0.50.5 0.60.6 0.70.7 0.80.8 0.90.9 1.01.0

050

100

150

200

250

300

350

p=P[X=1]p=P[X=1]

A.R

.L.

Figura 7.1: Numero medio di giocate al variare di p in (0.5, 1)

A titolo di esempio, posto:

densita n kf(x) = 2!1, 0 < x < 2 5 2000

il problema puo essere risolto semplicemente ricorrendo alle istruzioni:

> k<-2000> medie.x<-real(k)> for (i in 1:k) {x<-runif(5,0,2); medie.x[i]<-mean(x)}> hist(medie.x,breaks=20,freq=FALSE,main="",xlab="Medie campionarie",

ylab="Frequenze empiriche",col="lightgray",xlim=c(0,2))

In figura (7.2) e riportato l’istogramma dei risultati dalla simulazione.

Una variante, lasciando al Lettore il “gusto” della programmazione, potrebbe esserequella di ripetere la simulazione proposta per diversi valori di k.A titolo di esempio in figura (7.3) riportiamo i risultati di una simulazione caratteriz-zata da:

204

Page 207: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

Medie campionarieMedie campionarie

Freq

uenz

e em

piric

he

0.00.0 0.50.5 1.01.0 1.51.5 2.02.0

0.0

0.5

1.0

1.5

Figura 7.2: Distribuzione delle medie campionarie

densita n kf(x) = 2!1, 0 < x < 20 5 10i, i = 1, 2, 3, 4

7.4 Sulla funzione di ripartizione empirica

Dato un campione casuale ordinato (X(1),X(2), . . . ,X(n)) tratto da una v.c. X, lafunzione di ripartizione empirica o campionaria, Fn(x), e definita:

Fn(x) =

78

9

0 x < X(1)

i/n X(1) ' x < X(n)

1 x & X(n)

Evidentemente trattasi di una funzione a “scalini” che si avvicina alla funzione diripartizione F (x) della v.c. X; nel caso sia vera l’ipotesi che il campione provenga daX, le di"erenze Fn(x) ! F (x) sono da attribuirsi unicamente al caso.Per inciso, osserviamo che tali considerazioni costituiscono la base dei cosiddetti te-st basati sulla funzione di distribuzione empirica (EDF test), tra i quali merita un

205

Page 208: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

k=10k=10

Medie campionarieMedie campionarie

Freq

uenz

e em

piric

he

0.00.0 0.50.5 1.01.0 1.51.5 2.02.0

0.0

0.5

1.0

1.5

2.0

k=100k=100

Medie campionarieMedie campionarie

Freq

uenz

e em

piric

he

0.00.0 0.50.5 1.01.0 1.51.5 2.02.0

0.0

0.5

1.0

1.5

2.0

k=1000k=1000

Medie campionarieMedie campionarie

Freq

uenz

e em

piric

he

0.00.0 0.50.5 1.01.0 1.51.5 2.02.0

0.0

0.5

1.0

1.5

k=10000k=10000

Medie campionarieMedie campionarie

Freq

uenz

e em

piric

he

0.00.0 0.50.5 1.01.0 1.51.5 2.02.0

0.0

0.5

1.0

1.5

Figura 7.3: Distribuzione delle medie campionarie

posto, per cosı dire, di primo piano, perlomeno dal punto di vista storico, quello diKolmogorov-Smirnov.

Riprendendo in parte quanto detto in (7.3), la funzione di ripartizione empirica dellav.c. media campionaria, X = k!1 (k

i=1 Xi, dovrebbe, per k , -, avvicinarsi a quelladi una N(µ,"k!1/2).A titolo illustrativo, si immagini di aver tratto k > 1 campioni di numerosita n dauna distribuzione Uniforme in (80, 120) e di aver calcolato, per ciascuno di essi, ilvalor medio x e di volere rappresentare graficamente sia la funzione di ripartizioneempirica Fk(x) sia quella di una N(µ = 100, 10k!1/2).A tal fine, scelto arbitrariamente di porre k = 30 ed n = 20, sono su!cienti le seguentiistruzioni:

> k<-30> n<-20

206

Page 209: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

> medie.x<-real(k)> Femp<-real(0)> for (i in 1:k) {medie.x[i]<-mean(runif(20,80,120))}> medie.x<-sort(medie.x)> Fteor<-pnorm(medie.x,100,10/sqrt(k))> for (i in 1:k){Femp<-append(Femp,i/k)}> plot(medie.x,Femp,type="s",main="",ylab="Funzione di ripartizione

empirica e teorica",xlab="Determinazioni campionarie",col="blue")> lines(medie.x,Fteor,col="red")> grid()

L’andamento delle due funzioni di ripartizione e proposto in figura (7.4).

9696 9898 100100 102102 104104

0.0

0.2

0.4

0.6

0.8

1.0

Determinazioni campionarieDeterminazioni campionarie

Funz

ione

di r

ipar

tizio

ne e

mpi

rica

e te

oric

a

Figura 7.4: Funzioni di ripartizione empirica e teorica

207

Page 210: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

7.5 Sul bootstrap

Nel seguito descriviamo come sia possibile raggiungere alcuni semplici risultati concer-nenti la tecnica bootstrap. Tale tecnica non-parametrica, com’e noto, viene applicataad uno stimatore '(x1, x2, . . . , xn) mediante il ricampionamento con rimessa e"ettua-to k > 1 volte della n!pla campionaria osservata (x1, x2, . . . , xn) in modo da ottenerealtrettanti campioni bootstrap (x%

1, x%2, . . . , x

%n) su ciascuno dei quali verra calcolato

'% = '(x%1, x

%2, . . . , x

%n). La distribuzione dei valori '% servira quale base per la stima

del parametro '.Per maggiori ragguagli, il Lettore puo consultare il testo, assai ricco di spunti edesempi applicativi, di Efron, Tibshirani (1993).

Vediamo ora come sia possibile applicare tale tecnica perlomeno nel caso di stima delvalor medio µ.Pertanto, dati i seguenti valori campionari:

8.00 8.00 8.00 8.15 8.20 8.25 8.25 8.30 8.30 8.348.34 8.35 8.35 8.36 8.40 8.40 8.40 8.40 8.40 8.008.45 8.49 8.49 8.49 8.50 8.50 8.50 8.50 8.50 8.508.50 8.50 8.50 8.52 8.70 8.75 8.78 7.51 7.75 7.90

definiamo, ora, il massimo numero di itrazioni desiderate (maxloop) e al contem-po l’oggetto medie.bootstrap che conterra, appunto, le medie bootstrap via, viaottenute, mediante le istruzioni:

> maxloop<-5000; medie.bootstrap<-real(maxloop)

A questo punto, procediamo all’estrazione con rimessa di 5.000 campioni casualiestratti senza rimessa da (x1, x2, . . . , xn) e, per ciascuno di essi, calcoliamo il valormedio che inseriamo in media.bootstrap. A cio sopperisce il ciclo:

> for(i in (1:maxloop)){medie.bootstrap[i]<-mean(sample(x,replace=TRUE))}> hist(medie.bootstrap,xlim=c(8.1,8.5),breaks=20,main="",

xlab="Medie Boostrap",ylab="Frequenze empiriche",col="lightblue")

In figura (7.5) riportiamo l’istogramma dei risultati ottenuti che sintetizziamo in:

valor medio deviazione standard errore standardoriginale 8.338 0.2592019 0.04098342

bootstrap 8.340044 0.04044345 0.0005719567

208

Page 211: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

Medie BoostrapMedie Boostrap

Freq

uenz

e em

piric

he

8.18.1 8.28.2 8.38.3 8.48.4 8.58.5

010

020

030

040

050

0

Figura 7.5: Risultati del bootstrap

209

Page 212: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

7.6 La libreria rnotes e gli archivi di dati

Per completezza e a vantaggio dell’utente si e pensato di raccogliere tutte le fun-zioni presentate nel corso della trattazione nella libreria rnotes posta nella directo-ry ...\library\rnotes\R; parimenti la directory \library\rnotes\data conetienetutti gli archivi di dati *** formato ***

7.7 Esercizi vari

Riportiamo nel seguito, in modo piuttosto informale, alcuni esercizi che possono essererisolti facilmente in R ed o"rono, confidiamo, spunto per ulteriori applicazioni.

Esercizio 7.7.1Calcolare la media aritmetica, la media quadratica e la media armonica dei seguenti valori:12, 10, 11, 11, 12, 13, 15, 16, 17, 10. !

Esercizio 7.7.2Calcolare la mediana e la varianza dei valori riportati in (7.7.1). !

Esercizio 7.7.3Dato l’oggetto x contenente i primi dieci interi consecutivi, ridefinirlo in modo che essocontenga gli stessi elementi, la loro media e quindi gli stessi elementi ancora ma ordinatiin senso decrescente. !

Esercizio 7.7.4A partire dalle seguenti osservazioni individuali:

12 10 11 12 13 14 14 13 15 10 12 11 10 11

costruire una tabella di frequenze relative. !

Esercizio 7.7.5Dati i valori {20, 21, 24, 20, 21, 23, 24, 25, 27, 30, 25}, creare un oggetto che contega le fre-quenze relative cumulate di essi. !

Esercizio 7.7.6Date le seguenti osservazioni individuali:

sesso: M M M F F M F M F F F M FProv: To To Cn At To At Vc To Cn At AL Vc Cn

costruire una tabella doppia di frequenze relative. !

Esercizio 7.7.7Rappresentare graficamente nel piano (x, y) la funzione y2 = x2(1 % x2). !

210

Page 213: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

Esercizio 7.7.8Rappresentare graficamente nel piano (x, y) la funzione y2 = x1/2(1 % x1/2). !

Esercizio 7.7.9Dati:

x ="0.8 0.2

#Y =

$

%0.2 0.80.3 0.70.5 0.5

&

'

calcolare Z = xY e, successivamente, Zxt. !

Esercizio 7.7.10Una mutabile statistica doppia presenta la seguente distribuzione congiunta:

B/A a1 a2 a3 a4 a5 a6

b1 2 5 7 10 12 15b2 4 6 7 7 9 10b3 10 9 6 4 2 1

individuare le distribuzioni marginali dei due caratteri A e B e rappresentarle medianteun diagramma a torta. !

Esercizio 7.7.11Con riferimento all’Esempio posto in (7.7.10), costruire la tabella doppia delle frequenzerelative. !

Esercizio 7.7.12Con riferimento all’Esempio posto in (7.7.10), individuare le distribuzioni condizionateA|B = bi, con i = 1, 2, 3. !

Esercizio 7.7.13Le misurazioni del peso (Kg) e dell’altezza (cm) e!ettuate su un gruppo di individui disesso maschile porgono la seguente tabella a doppia entrata:

Altezza/Peso 50-60 60-70 70-80 80-90140-150 5 2 1 0150-160 4 12 7 1160-150 2 12 13 11170-180 1 2 8 10180-190 0 0 10 15

Si costruiscano, a partire da essa, le matrici di varianza-covarianza e di correlazione. !

Esercizio 7.7.14Con riferimento alla situazione di cui al punto (7.7.13), si rappresenti nel piano (x, y) laspezzata di regressione e si proceda, altresı al calcolo di +. !

211

Page 214: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

Esercizio 7.7.15Sia Data la seguente matrice delle varianze-covarianze:

CovX,Y =

$

%2 1 31 4 12 1 2

&

'

estrarre da essa gli elementi per cui risulta %X,Y * 0.35. !

Esercizio 7.7.16Si risolva il seguente sistema di equazioni:

O 1.2x + 2.5y % z = 102.5x% 1.5y + z = -10x + y + z = 0

e si verifichi la correttezza dei risultati ottenuti. !

Esercizio 7.7.17Rappresentare graficamente la funzione di ripartizione di una variabile casuale (v.c.) condistribuzione Binomiale di parametri n = 10 e p = .5 !

Esercizio 7.7.18Rappresentare graficamente le funzioni di densita di probabilita di una v.c. con distribu-zione Binomiale di parametri n = 10 e p = .75 !

Esercizio 7.7.19Posto X una v.c. con distribuzione Binomiale di parametri n = 50 e p = .15, calcolare laprobabilita attinente agli eventi {0 < X < 20} e {X * 20}. !

Esercizio 7.7.20Si rappresentino graficamente le v.c. #2 con, rispettivamente, 10, 20, 30 e 40 gradi diliberta. !

Esercizio 7.7.21Generare un campione casuale di dimensione n = 20 tratto da una densita Normale diparametri µ = 100 e $2 = 25 e calcolarne il valor medio x. !

Esercizio 7.7.22Generato un campione casuale di dimensione n = 50 tratto da una densita Uniforme in(20, 35), costruire l’intervallo di confidenza per il valor medio µ al 98.6%. !

Esercizio 7.7.23Generare un campione casuale di dimensione n = 60 tratto da una densita bimodale. !

Esercizio 7.7.24Con riferimento all’Esempio (7.7.23), si costruisca un’istogramma con 4 (7) (10) classi diegual modulo e ad esso si sovraimponga il grafico di una Normale di parametri (µ, $2)stimati in base ai valori campoionari ottenuti. !

212

Page 215: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

Esercizio 7.7.25I valori che seguono rappresentano i tassi medi di interesse sui obbligazioni triennaliapplicati da 29 diverse banche in un periodo di sei mesi:

8.40 8.50 8.51 7.82 7.82 7.90 8.00 8.65 8.71 8.008.00 8.00 8.00 8.05 8.05 8.06 8.11 8.17 8.30 8.338.33 7.56 7.57 7.71 8.55 8.57 8.65 8.00 8.00

Si costruisca e si visualizzi la funzione di ripartizione empirica Fn(x). !

Esercizio 7.7.26Con riferimento ai dati di cui al punto (7.7.25), si analizzi graficamente la trasformata“integrale” Y = Fn(x). !

Esercizio 7.7.27Da un’indagine condotta su 100 famiglie residenti in provicia di XX, i rediti mensili nettisono (x 1000 lit.):

3092.547 3469.574 3648.595 2966.232 3792.698 3341.3973190.741 3188.127 3143.831 3315.047 3065.804 3076.4972973.432 3367.155 2936.208 3492.316 3089.623 3050.5362866.213 2883.179 3312.634 2931.252 3593.312 2900.7123467.562 3578.601 3467.826 3214.972 3556.721 3270.3833261.697 2988.463 3595.635 3514.857 3297.671 3126.8003358.325 2970.571 3043.293 2615.924 3153.467 3531.5673306.863 3538.944 2907.338 3425.463 3388.534 3151.9452871.082 2957.559 3410.187 2860.557 3555.429 3344.4093452.798 3689.683 3212.386 3403.109 3048.985 3334.1463434.806 3300.451 2849.832 3277.373 3537.857 3206.5233285.799 3338.512 3580.035 3363.479 3219.749 3883.9423504.032 2870.496 3207.700 3306.835 3481.956 3451.2313627.119 2979.124 3132.004 3002.333 3353.335 3042.2903265.104 3522.844 3377.674 2979.684 3233.259 2866.3783616.714 3056.764 3391.259 3760.060 2970.686 3310.1313937.908 2982.205 3056.114 3670.399

Si costruiscano e si visualizzino la funzione di ripartizione empirica Fn(x) e la funzione diripartizione di una v.c. Normale con parametri µ = x e $ = s.“Ad occhio” e plausibile ipotizzare la normalita della distribuzione del reddito sulla basedel campione sorteggiato? !

Esercizio 7.7.28Approntare una funzione che, rispetto ad un vettore di dati x, porga il grafico della curvadi concentrazione del Lorenz con, a lato, il valore dell’indice del Gini. !

213

Page 216: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

Esercizio 7.7.29Si scriva una funzione che consenta di individuare la matrice delle contingenze delleseguente tabella a doppia entrata:

B/A a1 a2 a3 a4

b1 22 15 10 6b2 4 10 17 27

e si verifichi che essa e a somma nulla. !

Esercizio 7.7.30Si immagini che le misurazioni di una certa grandezza di interesse (Y ) siano influenzate daipossibili livelli di un fattore (X). Un eseprimento atto a verificare tale ipotesi, ha fornitoi seguenti risultati:

X ) Yx1 110.2 112.0 109.2 110.7 111.2x2 111.5 111.9 112.1 111.9 112.0x3 109.7 110.1 109.8 110.2 111.1x4 112.3 112.2 111.1 110.7 111.6

Approntare una funzione che, per ciascun livello del fattore, porga valor medio, scartoquadratico medio, numero di misurazioni e l’intervallo di confidenza al livello 1 % (1. !

Esercizio 7.7.31Al fine di analizzare il consumo di carburante (miglia x gallone) di un nuovo tipo di auto-vettura, e stato approntato un’esperimento che prevedeva l’impiego di quattro autovettureA, B, C e D ed altrettanti piloti a, b, c e d e l’assegnazione, in ciascuno dei quattro turnidi prove, dei piloti alle autovetture. I risultati ottenuti sono:

turno A B C D1 9.44 9.83 9.02 9.682 9.61 9.22 9.39 8.763 9.06 9.02 9.88 8.884 8.71 9.02 9.23 9.73

Si proceda all’analisi della varianza ed alla verifica dell’ipotesi che il consumo di carburantenon sia influenzato dal particolare pilota; !

Esercizio 7.7.32Si approntino due funzioni che consentano la stima dei parametri dei modelli:

— Y = (1 + ( I]10,#) x + *

— Y = ! + ( x2 + * !

214

Page 217: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

Esercizio 7.7.33Si costruisca una funzione che simuli il lancio ripetuto poniamo n > 1 volte di una moneta.Cio ipotizzando che la moneta sia regolare e sia che essa risulti irregolare. !

Esercizio 7.7.34Si scriva una funzione che consenta di individuare la distribuzione dell’ipotenusa di untriangolo rettangolo le cui misure dei cateti siano determinazioni di altrettante v.c. i.i.dsecondo una Uniforme di parametri a = 11 e b = 14. !

Esercizio 7.7.35Si immagini di lanciare quattro monete e di ripetere l’esperimento finche: o si ottiene unasequenza di quattro Teste o quattro Croci, oppure si ottengono in successione due sequenzecontenenti un egual numero di Croci e Teste.Si appronti una funzione che consenta il calcolo della durata media del gioco, tenendoconto della possibilita che le monete siano truccate.(Si modellizzi l’esperimento sottoforma di catena di Markov ...) !

Esercizio 7.7.36Si metta a punto una routine che consenta, mediante la tecnica boostrap, di ottenere unastima per il parametro ignoto $ e cio sulla base della n%pla campionaria:

{10.1, 11.0, 10.5, 11.7, 12.5, 10.2, 10.7, 12.9, 12.4}

!

Esercizio 7.7.37Con riferimento al punto (7.7.36), si costruisca un intervallo di confidenza per $ al livello1 % ! = .90(.01).95. !

215

Page 218: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Bibliografia

BARTLETT, M. S.,Properties of su!ciency and statistical tests, Proceedings of theRoyal Statistical Society, Series A, 160, 268-282, 1937

BELSLEY, D. A., KUH, E., WELSCH, R. E., Regression Diagnostics,John Wiley,New York, 1980

BOWMAN A.W., AZZALINI A. (1997), Applied Smoothing Techniques for DataAnalysis. The Kernel Approach with S-Plus, Clarendon Press, Oxford

BRENT R., Algorithms for Minimization without Derivatives,

BROOK D., EVANS D.A., An Approach to the Probability Distribution of CUSUMRun Length, Biometrika, 59, 539-549, 1982 Prentice Hall, Englewood Cli"s, NewJersey, 1973

CHAMBERS J. M., HASTIE T. J., Statistical models in S, Chapman and Hall, NewYork, 1992

CLEVELAND, W. S., LOWESS: A Program for Smoothing Scatterplots by RobustLocally Weighted Regression, The American Statistician, 35, 54, 1981

COOK, R. D., WEISBERG, S., Residuals and Influence in Regression, Chapmanand Hall, London, 1982

DONGARRA, J. J., BUNCH J. R., MOLER C. B., STEWART G. W., LINPACKUsers Guide, SIAM Publications, Philadelphia, 1978

EFRON B., TIBSHIRANI R., An Introduction to the Bootstrap, Chapman and Hall,New York, 1993

GARTSIDE P.S., A Study of Methods for Comparing Several Variances, Journal ofThe Ametican Statistical Association, 67, 1972

GENTLEMAN E., IHAKA R., Notes on R: A Programming Environment for DataAnalysis and Graphics, Dep. of Statistics, Univeristy of Auckland, 1997

Page 219: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

GIBBONS J.D., PRATT, J.W., P-Values: Interpretation and Methodology, TheAmerican Statistician, 29, 1975,

IHAKA R., GENTLEMAN E., R: A Language for Data Analysis and Graphics,Journal of Computational and Graphical Statistics, 5, 299-314, 1996

MARSAGLIA, G., A Random Number Generator for C, Discussion paper, Usenetnewsgroup ‘sci.stat.math’ on September 29, 1997.

McCULLAGH, P., NELDER, J. A., Generalized Linear Models, Chapman & Hall,II Edition, New York, 2000.

R Core Team, R Reference Index,The R Core Team, 2000

SAPORTA G., Probabilites, Analyse des Donnees et Statistique, Edition Technip,Paris, 1990

SCHERVISH J. M., Theory of Statistics, Springer-Verlag, New York, 1997

SHAO J., Mathematical Statistics, Springer-Verlag, New York, 1999

VENABLES W.N., RIPLEY B.D., Modern Applied Statistics with S-Plus, Springer,New York, 2nd edition, 1997

VENABLES B., SMITH D., Notes on R: A Programming Environment for DataAnalysis and Graphics, Dep. of Statistics, Univeristy of Adelaide, 1992

WAND M.P., JONES M.C. (1995), Kernel Smoothing, Chapman & Hall, London

WICHMANN, B. A., HILL I. D., Algorithm AS 183: An E!cient and PortablePseudo-random Number Generator, Applied Statistics, 31, 188-190, 1982

217

Page 220: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Indice

1 Introduzione ad R 11.1 L’ambiente di lavoro . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.2 Primi passi in R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

1.2.1 Creazione di oggetti elementari . . . . . . . . . . . . . . . . . . 41.2.2 Creazione di oggetti contenenti sequenze regolari . . . . . . . . 61.2.3 Manipolazione di oggetti elementari . . . . . . . . . . . . . . . 81.2.4 Operatori aritmetici e funzioni matematiche . . . . . . . . . . . 111.2.5 Su alcune funzioni statistiche . . . . . . . . . . . . . . . . . . . 131.2.6 Alcune funzioni di utilita generale . . . . . . . . . . . . . . . . 15

1.3 Vettori e Matrici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241.4 Oggetti complessi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

1.4.1 Liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341.4.2 Data frame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

1.5 Modalita e struttura di un’oggetto . . . . . . . . . . . . . . . . . . . . 371.6 Funzioni definibili dall’utente . . . . . . . . . . . . . . . . . . . . . . . 391.7 Su alcune funzioni matematiche . . . . . . . . . . . . . . . . . . . . . . 441.8 Lettura e registrazione di archivi . . . . . . . . . . . . . . . . . . . . . 48

1.8.1 I comandi scan() e write() . . . . . . . . . . . . . . . . . . . 481.8.2 I comandi read.table() e write.table() . . . . . . . . . . . 491.8.3 Il comando data() . . . . . . . . . . . . . . . . . . . . . . . . . 50

1.9 Personalizzazione dell’ambiente di lavoro . . . . . . . . . . . . . . . . . 511.10 Le librerie e loro gestione . . . . . . . . . . . . . . . . . . . . . . . . . 53

2 Cenni sulle procedure grafiche 552.1 Funzioni grafiche di “primo livello” . . . . . . . . . . . . . . . . . . . . 55

2.1.1 Funzione plot(x,y) . . . . . . . . . . . . . . . . . . . . . . . . 552.1.2 Funzione matplot(x,y) . . . . . . . . . . . . . . . . . . . . . . 572.1.3 Funzione hist(x) . . . . . . . . . . . . . . . . . . . . . . . . . 572.1.4 Funzione boxplot(x,y,z,...) . . . . . . . . . . . . . . . . . . 582.1.5 Funzioni qqplot(x,y) e qqnorm(x) . . . . . . . . . . . . . . . 59

Page 221: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

Dipartimento di Statistica e Matematica “Diego de Castro”, nota tecnica 2, 2OO1

2.1.6 Funzione barplot(x) e piechart(x) . . . . . . . . . . . . . . 592.1.7 Funzione polygon(x,y) . . . . . . . . . . . . . . . . . . . . . . 592.1.8 Funzione curve(espressione) . . . . . . . . . . . . . . . . . . 602.1.9 Funzione grid(nx,ny) . . . . . . . . . . . . . . . . . . . . . . . 602.1.10 La funzione rect(xmin,xmax,ymin,ymax) . . . . . . . . . . . . 602.1.11 Funzione persp(x,y,z) . . . . . . . . . . . . . . . . . . . . . . 612.1.12 Funzione pairs(x) . . . . . . . . . . . . . . . . . . . . . . . . . 622.1.13 Altre funzioni grafiche . . . . . . . . . . . . . . . . . . . . . . . 63

2.2 Funzioni grafiche di “secondo livello” . . . . . . . . . . . . . . . . . . . 632.3 Parametri grafici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

3 Argomenti di statistica descrittiva 673.1 Mutabili e variabili statistiche univariate . . . . . . . . . . . . . . . . . 68

3.1.1 Costruzione di semplici tabelle di frequenze . . . . . . . . . . . 683.1.2 Rappresentazioni grafiche . . . . . . . . . . . . . . . . . . . . . 723.1.3 Su alcune misure di sintesi . . . . . . . . . . . . . . . . . . . . . 803.1.4 Sulla concentrazione . . . . . . . . . . . . . . . . . . . . . . . . 89

3.2 Mutabili e variabili statistiche bivariate . . . . . . . . . . . . . . . . . 893.2.1 Tabelle di frequenze doppie . . . . . . . . . . . . . . . . . . . . 893.2.2 L’indice di dipendenza chi-quadro . . . . . . . . . . . . . . . . 893.2.3 L’indice di dipendenza in media . . . . . . . . . . . . . . . . . . 893.2.4 Sulla correlazione lineare . . . . . . . . . . . . . . . . . . . . . 89

4 Elementi di calcolo delle probabilita 1074.1 Semplici esercizi sul calcolo delle probabilita . . . . . . . . . . . . . . . 1104.2 Generazione di numeri pseudo-casuali . . . . . . . . . . . . . . . . . . 1144.3 Il campionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

5 Elementi di statistica inferenziale 1205.1 Intervalli di confidenza per un parametro ' . . . . . . . . . . . . . . . 1205.2 Verifica di ipotesi statistiche . . . . . . . . . . . . . . . . . . . . . . . . 1295.3 La libreria ctest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135

6 Alcune note sui modelli lineari 1556.1 La regressione lineare semplice: il modello teorico . . . . . . . . . . . . 1556.2 La regressione lineare . . . . . . . . . . . . . . . . . . . . . . . . . . . 156

6.2.1 Stima della retta di regressione in base ai valori campionari . . 1576.2.2 Verifiche di ipotesi circa i parametri della retta di regressione . 1596.2.3 Alcune considerazioni circa la previsione . . . . . . . . . . . . . 1626.2.4 Alcune considerazioni sull’analisi dei residui . . . . . . . . . . . 163

6.3 La regressione lineare semplice in R . . . . . . . . . . . . . . . . . . . 164

2

Page 222: Linguaggio R e applicazioni statistiche - torinor.nettorinor.net/download/EnnioDispense.pdf · Dipartimento di Statistica e Matematica Applicata “Diego de Castro” E senza dubbio

E. D. Isaia, Linguaggio R e applicazioni statistiche

6.3.1 La funzione lm(): definizione del modello di regressione . . . . 1646.3.2 La funzione lm(): oggetti creati in modo automatico . . . . . . 1676.3.3 La funzione lm(): verifiche di ipotesi sulle stime . . . . . . . . 1686.3.4 La funzione predict.lm(): intervalli di confidenza e di previsione1716.3.5 Per un’analisi dei residui . . . . . . . . . . . . . . . . . . . . . . 173

6.4 Sulla regressione multipla: il modello,y,X$,"2 In

-. . . . . . . . . . 175

6.4.1 Stima e verifica di ipotesi sui parametri del modello . . . . . . 1766.4.2 Sul coe!ciente di correlazione multipla . . . . . . . . . . . . . 1796.4.3 Sulla previsione e l’analisi dei residui . . . . . . . . . . . . . . . 1816.4.4 Sulla multicollinearita . . . . . . . . . . . . . . . . . . . . . . . 182

6.5 La regressione multipla in R . . . . . . . . . . . . . . . . . . . . . . . . 1836.5.1 Definizione del modello e l’istruzione model.matrix(lm(...)) 1836.5.2 Ridefinizione del modello: l’istruzione update(lm(...)) . . . . 1866.5.3 Sulla multicollinearita e la stepwise regression . . . . . . . . . . 187

6.6 L’analisi della varianza . . . . . . . . . . . . . . . . . . . . . . . . . . . 191

7 Elementi di simulazione *** da rifare 2007.1 Sul lancio simultaneo di n monete . . . . . . . . . . . . . . . . . . . . 2007.2 Sulle catene di Markov . . . . . . . . . . . . . . . . . . . . . . . . . . . 2017.3 Sul teorema limite centrale . . . . . . . . . . . . . . . . . . . . . . . . 2037.4 Sulla funzione di ripartizione empirica . . . . . . . . . . . . . . . . . . 2057.5 Sul bootstrap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2087.6 La libreria rnotes e gli archivi di dati . . . . . . . . . . . . . . . . . . 2107.7 Esercizi vari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210

3