INTRODUZIONE A 1 Cos’è R R può essere definito come un sistema per l’analisi statistica. È contemporaneamente un linguaggio ed un software. Lo stesso R Development Core Team[1], parlando di R, preferisce definirlo come “un ambiente integrato e coerente”, piuttosto che come la somma di un insieme di strumenti poco flessibili, oppure come un semplice software o package al pari di prodotti simili, stando implicitamente a significare la presenza di un maggior "valore aggiunto" nel "prodotto" R. 1 Cfr. la pagina web del sito The R Project for Statistical Computing, "What is R?" all'indirizzo: http://www.rproject. org/about.html [consultata in data 07/10/2008] Caratteristiche principali di R a) semplicità nella gestione dei dati; b) disponibilità di un gruppo di strumenti per calcoli su vettori, matrici ed altre operazioni complesse; c) accesso ad un vasto insieme di strumenti integrati per l'analisi statistica; d) produzione di numerose potenzialità grafiche particolarmente flessibili; e) possibilità di adoperare un linguaggio di programmazione orientato ad oggetti che consente l'uso di strutture condizionali (es. if) e cicliche (es. for), nonché di funzioni create dall'utente. Altro…su R E' distribuito gratuitamente Disponibile per diverse architetture hardware e sistemi operativi: Unix, Linux, Windows, MacOS. Sul sito http://www.r-project.org è possibile scaricare, oltre che il programma base, anche una serie di moduli aggiuntivi e un'ampia manualistica (in lingua inglese) sull'ambiente che va dall'installazione del software al suo utilizzo nell'analisi dei dati. Riflessioni su R ha un costo zero per l'utente finale e presenta una facilità nell'accesso a particolari categorie di utenti che non possono permettersi costosi software per analisi statistiche come gli studenti oppure gli utilizzatori e i ricercatori dei Paesi in via di sviluppo dispone di una vasta manualistica (non solo in lingua inglese) consultabile e scaricabile da Internet È possibile accedere tramite Internet ad una vasta gamma di librerie per analisi statistiche molte dettagliate È possibile contare sul supporto e sull'assistenza dell'R Development Core Team e di tutti gli utenti di R (una vera community a livello mondiale) Sempre su R Disponibilità di strumenti di analisi statistica dai più elementari ai più sofisticati Notevoli possibilità grafiche rispetto ad altri software statistici Possibilità di programmare R creando funzioni e programmi definiti dall'utente[2] Dotato di funzione di help in linea per ciascun comando facilmente richiamabile È un software in rapidissimo sviluppo Possiede tutti i vantaggi dei software multipiattaforma Può essere integrato facilmente con alcuni dei più diffusi prodotti di office automation come ad esempio Microsoft Excel in ambiente Windows Può essere interfacciato, con i principali programmi di gestione di database come MySql, Microsoft Access, Oracle, PostgreSQL per l'importazione ed esportazione di dati[3] Consente di importare i file dei dati da software statistici quali: Minitab, S, SAS, SPSS, Stata È semplice nell'impiego a livello didattico nell'insegnamento della statistica 2 Si veda: R Development Core Team, Writing R Extentions, versione 2.7.2 del 07/10/2008 all'indirizzo Internet: http://cran.r-project.org/doc/manuals/Rexts.pdf 3 Si veda: R Development Core Team, R Data Import/Export, versione 2.7.2 del 07/10/2008 all'indirizzo Internet: http://cran.r-project.org/doc/manuals/Rdata.pdf PRIMI PASSI… TORTE E GELATI Carichiamo i dati dei gusti dei gelati scelti da un gruppo di bambini : gelati<gelati<-read.table( read.table(file.choose()) file.choose()) #carica i dati gelati #contenuto del dataset str(gelati) #informazioni sul dataset names(table(gelati))=gusti #carica in gusti dei gelati gusti #visualizza il contenuto del vettore gusti table(gelati) #tabella delle freq.assolute pie(table(gelati),gusti, col=c("brown","pink","yellow","white","green")) pie(table(gelati),tipo, col=c("brown","pink","yellow","white","green"),main="Distribuzione dei gusti del gelato") 7 PRIMISSIME ANALISI IN R Consideriamo i dati relativi delle nostre altezze: altezze=scan altezze=scan() scan() #per terminare l’inserimento cliccare invio senza dati Proviamo a costruire una tabella di frequenza table(altezze) table(altezze) table(cut(altezze,breaks=5)) table(cut(altezze,breaks=5)) classi <<-150+10*(0:5) In questo caso abbiamo semplicemente una suddivisione in intervalli di uguale ampiezza del campo di variazione dei nostri dati. Dalla tabella delle frequenze si può ricavare quella delle frequenze cumulate tramite la funzione cumsum. cumsum Tale funzione calcola una somma cumulata degli elementi di un vettore creando un vettore di dimensione uguale al vettore cui viene applicata e i cui elementi contengono le somme cumulate parziali. Se vogliamo quindi ottenere le frequenze cumulate relative freqcum <- cumsum( cumsum(table(cut(altezze,breaks=5))/ table(cut(altezze,breaks=5))/length (cut(altezze,breaks=5))/length(altezze)) length(altezze)) 8 PRIMISSIME ANALISI IN R Costruiamo dapprima un istogramma di frequenza: hist(altezze) hist(altezze) Come per table anche hist anche permette di stabilire il numero di classi in cui vogliamo rappresentare i nostri dati ad esempio hist(altezze,breaks=5) hist(altezze,breaks=5) Se all’interno del comando hist aggiungiamo l’opzione freq=F che vuol dire di non usare le frequenze assolute otteniamo un grafico analogo ma con l’asse delle ordinate rappresentato dalle frequenze relative. hist(altezze, hist(altezze,freq=FALSE (altezze,freq=FALSE) freq=FALSE) Grafico della funzione di ripartizione, aggiungiamo un limite inferiore alle classi freqcum <- c(0,freqcum c(0,freqcum) freqcum) Quindi con il comando plot rappresentiamo la funzione di ripartizione empirica plot(classi,freqcum plot(classi,freqcum,type freqcum,type=’s ,type=’s’) =’s’) 9 INDICI DI POSIZIONE E VARIABILITÀ R dispone di un ampio insieme di funzioni che permettono di calcolare gli indici statistici comunemente usati. Vediamo brevemente quali sono: • min fornisce il valore della più piccola osservazione campionaria; • max fornisce il valore della più grande osservazione campionaria; • range fornisce i valori del minimo e del massimo dei dati campionari, ciò e gli estremi del campo di variazione; • mean calcola la media; • median calcola la mediana; • var calcola la varianza campionaria (fate molta attenzione a questo); • quantile calcola i quantili, di qualsiasi ordine, di una distribuzione di dati; • summary fornisce una tabella che riassume la maggior parte dei valori sopra esposti. QUALCHE COMANDO PER I GRAFICI Vogliamo indagare la relazione tra due variabili quantitative (ad es. durata della degenza ed età dei pazienti), possiamo disegnare il diagramma di dispersione con il comando: plot(var1,var2) Con la funzione points possiamo anche evidenziare, magari con un colore a piacimento, alcuni punti ad esempio, le unità che presentano durata di degenza >15 giorni points(var1[var1 > 15],var2[var1> 15], col=’blue’,pch=20) Con il comando identify(diametro,volume) possiamo identificare a quale/i unità statistiche appartengono i punti evidenziati. boxplot(var1~var2) #crea un diagramma a scatole e baffi 11 CARICARE I DATI dati = scan() #usa la console per caricare i dati scan() Se i dati sono su un file con estensione dat o txt dati = read.table(file, read.table(file, header = FALSE, sep = "", dec = ".", row.names, row.names, col.names,…) col.names,…) Se importiamo i dati da un file csv creato con excel, allora: dati = read.csv2(file, header = TRUE, sep = ";", quote="\ quote="\"", dec=",“,…) dec=",“,…) 12 PROVIAMO… Nella cartella dati della mia penna vi è un file .csv con dati relativi ad un campione di 1079 pazienti ricoverati in UCIC dal 2006 al 2008. Si richiede un’analisi descrittiva dei dati Indicare con dei grafici la relazione tra durata della degenza e le seguenti variabili: età, sesso, decesso, TnI > 20, diagnosi d’ingresso. Cosa possiamo affermare? 13