class: center, middle, inverse, title-slide # Perché R ### Stefano Bussolon --- ## Perché io? Laurea in psicologia sperimentale, dottorato di ricerca in scienze cognitive. Ho iniziato a pacioccare con R nei primi anni 2000, e ad usarlo seriamente durante il dottorato. Nel 2011 docente a contratto di analisi dei dati nella triennale di psicologia, Unitn. Docente del corso di introduzione ad R per il dottorato in Scienze Cognitive, Unitn --- ## Perché la *virtual summer school*? * [statistica con r - Cerca con Google](https://www.google.com/search?q=statistica+con+r) * [analisi statistica dei dati con r pdf - Cerca con Google](https://www.google.com/search?q=analisi+statistica+dei+dati+con+r+pdf) * [r markdown guida - Cerca con Google](https://www.google.com/search?q=r+markdown+guida) Colleghi e rete sociale professionale che vogliono farsi un'idea della ricerca quantitativa --- [Analisi dei dati con R](https://www.bussolon.it/formazione/analisi-dei-dati-con-r.html) 9+1 lezioni a distanza. Prezzo del corso: 640 € Early bird : 560 € Iscritti alla newsletter "Prospettiva ux": 560 € Studenti o neolaureati: 320 € Iscritti ad Architecta: Sconto di 60 € (cumulabile) --- ## Perché R? Perché è gratuito, open source, disponibile su più sistemi operativi (windows, mac, linux). Perché dispone di una enorme catalogo di pacchetti per l'**importazione** di dati, la loro **pulizia** e manipolazione, l'**analisi** statistica, la **visualizzazione**, la creazione di report, articoli e **presentazioni**, e per elaborazioni più complesse (ad esempio machine learning). Questi pacchetti sono spesso molto aggiornati, e rappresentano lo stato dell'arte nell'analisi dei dati. Il linguaggio è stato specificamente creato e sviluppato per l'analisi dei dati. --- ## Perché R? Internet è ricco di risorse, anche gratuite, che permettono di imparare ad usare R. Per i più esperti, R offre anche delle **caratteristiche avanzate**: programmazione funzionale, possibilità di invocare funzioni in altri linguaggi (c, fortran). R è **estensibile**, attraverso l'installazione di pacchetti esterni. In ambito statistico e in psicometria R è sostanzialmente uno standard. --- ## R vs excel Ha senso usare Excel o i fogli di lavoro per cose semplici e che non ho bisogno di replicare. Quando è necessario fare delle analisi statistiche più complesse, integrare insiemi di dati, creare presentazioni grafiche, è decisamente meglio R. --- ## Reinhart-Rogoff excel error L'esempio più noto di come non usare excel per fare analisi dei dati è un citatissimo articolo di macroeconomia, le cui conclusioni erano errate a causa di un errore nell'uso di excel. Vi invito a cercare [Reinhart-Rogoff excel error](https://www.google.com/search?q=reinhart+rogoff+excel+error) sui motori di ricerca. --- ## Vantaggi di R rispetto ad Excel * R ha l'ecosistema più ricco ed avanzato di pacchetti per l'analisi dei dati. * Dietro ad R c'è una grossa comunità di utilizzatori che condivide pacchetti, librerie e che è disponibile ad aiutare, attraverso forum e spazi di collaborazione * R offre strumenti di visualizzazione più avanzati * R è gratuito ed open source * R è un linguaggio di programmazione * R riesce a leggere (importare) una vasta gamma di dati --- ## Vantaggi di R * R può manipolare file di dati molto grandi * negli insiemi di dati più grandi, R è più veloce * con R è possibile organizzare meglio i progetti (separando ed integrando dati, codice/script, testi, figure) * è molto più facile automatizzare i processi con R che con excel. Più in generale, è più facile automatizzare un processo in un ambiente di programmazione che con una GUI. * accuratezza: excel è meno accurato, e più soggetto a bug, rispetto ad R. --- ## Gli script in R * sono più facili da documentare * possono essere ri-utilizzati * è più facile replicare una analisi * possono essere utilizzati su basi di dati diverse * se il codice viene commentato, è più facile ricordare cosa si sta facendo (o capire cosa ha fatto chi ha scritto il codice). Documentare i passaggi fatti con excel è molto meno naturale. --- ## Riproducibilità È molto più facile riprodurre analisi anche complesse. Questo ha alcuni vantaggi: * è possibile applicare, in maniera piuttosto semplice, la stessa analisi su dati diversi * questo rende più facile la verifica e la riproducibilità delle analisi, ad esempio da parte di ricercatori o laboratori diversi (open science) * è possibile applicare al codice dei software di controllo di versione (ad esempio git) * è facile condividere il proprio codice, ed adottare delle metodologie di collaborazione --- ## Python Se Excel non è la soluzione migliore per fare analisi dei dati, R non è l'unico ambiente disponibile. Fra le alternative, una delle più accreditate è il linguaggio di programmazione Python, integrato con alcuni pacchetti quali pandas e numpy. Il dibattito Python vs R è molto acceso, in quanto entrambi i linguaggi costituiscono un'ottima scelta. --- ## R vs Python * nella manipolazione dei dati i due ambienti sono entrambi eccellenti * Python ha il vantaggio di essere un linguaggio di programmazione *generalista*, mentre R è solo per l'analisi dei dati * R è molto più specializzato all'analisi dei dati * nella statistica inferenziale, R è più usato di Python --- ## Approccio pragmatico Generalmente, l'approccio più utile è quello di conoscere diversi strumenti, ed utilizzarli per fare cose diverse. Excel, libreoffice o i fogli google per le operazioni più semplici, soprattutto se si deve collaborare con persone che non usano R. Gli editor di testo possono essere molto utili per pulire file in formato tsv o csv. Soprattutto in ambiente linux, vi sono programmi a linea di comando che permettono di fare semplici manipolazioni di dati. Per le analisi più complesse, e per le presentazioni professionali, usare R o python. --- # L'analisi descrittiva --- Le statistiche descrittive sono finalizzate a: * avere una prima visione, qualitativa, delle variabili raccolte; * controllare la presenza di errori, ad esempio di data-entry; * far emergere outliers e anomalie; * valutare qualitativamente ipotesi e assunti, determinare qualitativamente le relazioni fra le variabili; * identificare l’entità e la direzione delle relazioni fra le variabili; * selezionare i modelli statistici appropriati; --- Questo è un pezzo di codice R dentro Rmarkdown ```r # creiamo una variabile nominale con 3 livelli # (il testo dopo # è un commento, utile per spiegare cosa stiamo facendo) nominale <- factor( sample (c("rosso","bianco","verde"), 100,replace = TRUE)) # creiamo (e stampo) la tabella delle frequenze (frequenze<-table(nominale)) ``` ``` ## nominale ## bianco rosso verde ## 33 36 31 ``` ```r # calcoliamo la moda moda<-which(frequenze == max(frequenze)) names(frequenze)[moda] ``` ``` ## [1] "rosso" ``` --- ```r # creiamo un grafico a barre barplot(frequenze) ``` ![](why_r_files/figure-html/desc_nominale_2-1.png)<!-- --> --- ```r # creiamo una variabile ordinale con 5 livelli cat_ord <- c("A","B","C","D", "E") ordinale <- factor( sample (cat_ord, 100,replace = TRUE), levels = cat_ord, ordered = TRUE ) # summary su ordinale summary(ordinale) ``` ``` ## A B C D E ## 22 10 20 26 22 ``` --- ```r # summary mi da anche la media, che non ha senso summary(as.integer(ordinale)) ``` ``` ## Min. 1st Qu. Median Mean 3rd Qu. Max. ## 1.00 2.00 3.00 3.16 4.00 5.00 ``` ```r # meglio usare quantile # calcolare i quartili sul vettore sottostante quantile(as.integer(ordinale)) ``` ``` ## 0% 25% 50% 75% 100% ## 1 2 3 4 5 ``` --- ```r # generiamo una variabile numerica con distribuzione normale # rnorm = numeri Random con distribuzione NORMale # 100 osservazioni, media=10, ds=2 intervalli <- rnorm(100, mean=10, sd=2) summary(intervalli) # ~ 100 ``` ``` ## Min. 1st Qu. Median Mean 3rd Qu. Max. ## 5.260 8.768 10.115 10.086 11.286 14.228 ``` ```r sd(intervalli) # ~ 2 ``` ``` ## [1] 1.772537 ``` --- ```r boxplot(intervalli) ``` ![](why_r_files/figure-html/desc_intervalli_2-1.png)<!-- --> --- ```r hist(intervalli) ``` ![](why_r_files/figure-html/desc_intervalli_3-1.png)<!-- --> --- # L'analisi inferenziale --- Il fine dell'analisi inferenziale è di fare delle inferenze su di una popolazione a partire dalle osservazioni di un campione. Il fine dell'analisi inferenziale univariata è di stimare il valore di un parametro della popolazione a partire da una statistica calcolata sul campione. Il fine dell'analisi inferenziale bivariata è quello di stimare la significatività di una relazione fra due variabili. Le analisi multivariate sono concettualmente un'estensione dell'analisi bivariata. --- ```r osservazioni <- 900 varNominale1 <- sample(c("A","B"),osservazioni, replace = TRUE) varNominale2 <- sample(c("C","D"),osservazioni, replace = TRUE) plot(table(varNominale1,varNominale2)) ``` ![](why_r_files/figure-html/unnamed-chunk-1-1.png)<!-- --> --- ```r chi2_a <- chisq.test(varNominale1,varNominale2) chi2_a ``` ``` ## ## Pearson's Chi-squared test with Yates' continuity correction ## ## data: varNominale1 and varNominale2 ## X-squared = 2.575, df = 1, p-value = 0.1086 ``` --- ```r isNominaleA <- as.integer(varNominale1=="A") # genero una variabile nominale che "dipende" da varNominale1 varNominale3 <- rbinom(length(varNominale1),1,.35+isNominaleA*.2) plot(table(varNominale1,varNominale3)) ``` ![](why_r_files/figure-html/unnamed-chunk-3-1.png)<!-- --> --- ```r chi2_b <- chisq.test(varNominale1,varNominale3) chi2_b ``` ``` ## ## Pearson's Chi-squared test with Yates' continuity correction ## ## data: varNominale1 and varNominale3 ## X-squared = 62.707, df = 1, p-value = 2.399e-15 ``` --- # R e i grafici --- ## ggplot2 ggplot2 è un pacchetto per creare grafici in R. ggplot2 è molto popolare, in quanto * crea grafici esteticamente piacevoli * è molto potente * utilizza in maniera esplicita l'approccio di *Grammar of Graphics* --- ```r library(ggplot2) # carico la libreria ggplot partecipanti <- readRDS("../../dati/parole_nonparole_pulito.rds") # carico i dati ggBar1 <- ggplot(partecipanti, aes(scol)) + geom_bar(aes(fill=sex), width = 0.5) + theme(axis.text.x = element_text(angle=65, vjust=0.6)) + labs(title="Scolarità", subtitle="Scolarità, per sesso", caption="Parole non parole - barplot") ``` --- ```r print (ggBar1) ``` ![Grafico a barre](why_r_files/figure-html/plot_barchart-1.png) --- ```r ggDensity2 <- ggplot(data=partecipanti, aes(corrette)) + geom_density(aes(fill=factor(scol)), alpha=0.5) + labs(title="Corrette", x="Risposte corrette", y="", subtitle="Numero di risposte corrette", caption="Parole non parole - Density") ``` --- ```r plot(ggDensity2) ``` ![Density graph - per scolarità](why_r_files/figure-html/plot_density2-1.png) --- # Documentare --- ## Inserisco dei commenti nel codice ```r # creo una seconda variabile ad intervalli # che *correla* con la prima intervalli2 <- intervalli + rnorm(100, mean=2, sd=3) # calcolo la regressione lineare lineare <- lm(intervalli2 ~ intervalli) # il grafico di dispersione plot(intervalli,intervalli2) # disegno la retta di regressione abline(lineare) ``` --- ## Buone pratiche * Organizza i progetti in una struttura * Documenta il tuo codice * Usa RMarkdown * Usa uno stile, sii consistente * Trasforma gli script in funzioni * Usa il controllo di versione (git) --- ## Risorse * [R Best Practices](https://kdestasio.github.io/post/r_best_practices/) * [Best Practices for Writing R Code – Programming with R](https://swcarpentry.github.io/r-novice-inflammation/06-best-practices-R/) * [R Code – Best practices | R-bloggers](https://www.r-bloggers.com/2018/09/r-code-best-practices/) * [R Best Practices: R you writing the R way! | R-bloggers](https://www.r-bloggers.com/2017/04/r-best-practices-r-you-writing-the-r-way/) * [Putting the into Reproducible Research](https://annakrystalli.me/talks/r-in-repro-research-dc-srse.html#1) --- # Comunicare --- ## Rmarkdown RMarkdown si basa sull'idea di [literate programming](https://en.wikipedia.org/wiki/Literate_programming): integrare in uno stesso documento codice eseguibile e testo. RMarkdown utilizza `knitr` per * processare la parte di codice * creare l'output (compresi i grafici) * includere l'output e i grafici in un file markdown dinamicamente generato * trasformare il file markdown in un documento (ad esempio html, pdf o word) utilizzando `Pandoc`. Queste slide sono state generate con knitr :) --- ## Un esempio Questionario google form sul telelavoro. --- ## Conclusioni R è un eccellente strumento per fare analisi dei dati. Se volete imparare tutte queste cose, iscrivetevi al mio corso. In ogni caso potete utilizzare la [documentazione](https://www.bussolon.it/didattica/r_intro/materiale.html) che ho pubblicato sul mio sito. --- ## Grazie Domande?