R per la tesi: dalla prima riga di codice all'analisi finita
Apri RStudio per la prima volta e vedi una schermata bianca con una console nera. Ti chiedi: "Ma qui dove clicco?" e niente. Non ci sono pulsanti. Devi scrivere il codice. Questo spaventa — lo sappiamo, l'abbiamo visto dire decine di volte dai ragazzi che affianchiamo.
Ma se hai il tempo, se sei curioso, e se hai almeno una persona che ti mostra i primi passi, R non è più terrifying di imparare a guidare — è solo diverso. In questa guida completa vediamo come portare i dati da "ho un file CSV" a "ho un grafico che metto nella tesi" e i risultati dei test statistici bene interpretati. Non ti insegniamo a essere un data scientist. Ti mostriamo dove cliccare (anzi, cosa scrivere), e il resto lo capisci da solo.
R per analisi dati è diventato lo standard in ricerca universitaria. Non solo per tesi magistrali, ma anche triennali — molte università ora chiedono ai ragazzi di imparare R almeno a livello basico. Il motivo è semplice: R per l'analisi dati è trasparente, documentabile, e professionalmente utile anche dopo la laurea.
Se non sei ancora sicuro se R è il software giusto per la tua tesi, abbiamo una guida completa su quale software scegliere per l'analisi dati. In questa guida su R per analisi dati, invece, diamo per scontato che hai già deciso di usare questo linguaggio — e vogliamo portarti dalla prima riga di codice ai risultati finali pronti per la tesi.
Installare R e RStudio
Il primo passo è separato ma fondamentale: R e RStudio sono due cose diverse. R è il linguaggio. RStudio è l'interfaccia dove lo usi (bellissima, molto più semplice di R da solo).
Vai su r-project.org, scarica R per il tuo sistema operativo (Windows, Mac, Linux), e installa. È un installer standard. Dopo installi RStudio — scarichi la versione gratuita (RStudio Desktop Open Source Edition).
Una volta aperto RStudio, vedi quattro pannelli:
- In alto a sinistra: il tuo script (il file .R dove scrivi il codice)
- In basso a sinistra: la console (dove gli output compaiono)
- In alto a destra: l'ambiente con le variabili che hai creato
- In basso a destra: file, grafici, help, pacchetti
La prima cosa che fai è installare i pacchetti che ti servono. Nella console, scrivi:
install.packages("tidyverse")
install.packages("ggplot2")
Questi sono insiemi di funzioni che ti facilitano la vita. "tidyverse" contiene dplyr (per pulire i dati) e ggplot2 (per i grafici). Una volta installati, li carichi all'inizio dello script così:
library(tidyverse)
library(ggplot2)
Fatto. Ora sei pronto.
Caricare il dataset (CSV, Excel, SPSS .sav)
Hai un file con i dati. Può essere:
- CSV (il più semplice):
dati_questionario.csv - Excel:
dati_questionario.xlsx - SPSS:
dati.sav
Se è un CSV, lo carichi così:
dati <- read.csv("percorso/al/file/dati_questionario.csv", sep = ",")
Se è un Excel:
library(readxl)
dati <- read_excel("percorso/al/file/dati_questionario.xlsx", sheet = 1)
Se è un SPSS .sav:
library(haven)
dati <- read_sav("percorso/al/file/dati.sav")
Una volta caricato, vedi il dataset nel pannello "Environment" in alto a destra. Per dare un'occhiata veloce:
head(dati) # Visualizza le prime 6 righe
nrow(dati) # Quante righe (quanti rispondenti)
ncol(dati) # Quante colonne (quanti items)
Una cosa importante: i nomi delle colonne. Se nel tuo file sono "Domanda 1", "Domanda 2", R le riconosce, ma è comodo rinominarle subito così:
colnames(dati) # Vedi i nomi attuali
dati <- dati %>%
rename(età = Domanda_1, genere = Domanda_2, soddisfazione = Domanda_3)
Vedrai %>% tanto — è il "pipe" di R. Leggi così: "prendi dati E POI rinomina". È il flusso logico del codice.
Pulizia dei dati con dplyr
Quasi sempre i dati hanno problemi: valori mancanti (NA), errori di battitura, variabili che servono solo per identificare il rispondente, righe duplicate.
Supponiamo che i tuoi dati abbiano valori mancanti (NA). Se vuoi rimuovere le righe con almeno un NA:
dati_puliti <- dati %>%
drop_na()
Se vuoi rimuovere solo gli NA in colonne specifiche:
dati_puliti <- dati %>%
drop_na(età, soddisfazione)
Se hai una variabile che non ti serve (es. l'ID della risposta):
dati_puliti <- dati %>%
select(-ID) # Toglie la colonna ID
Se vuoi tenere solo alcune colonne:
dati_puliti <- dati %>%
select(età, genere, soddisfazione, benessere)
Se il tuo dataset è enorme e vuoi solo i rispondenti di una certa età:
dati_giovani <- dati %>%
filter(età < 25)
Se vuoi creare una variabile nuova (es. raggruppi le risposte in categorie):
dati <- dati %>%
mutate(
categoria_età = case_when(
età < 25 ~ "Giovane",
età >= 25 & età < 45 ~ "Adulto",
età >= 45 ~ "Maturo"
)
)
Questi comandi — select, filter, mutate, drop_na — sono il 90% di quello che farai nella pulizia dei dati. Una volta che conosci questi, il resto è dettagli. E ricorda: sempre meglio scrivere i comandi in uno script (.R) che non fare click su SPSS, perché il tuo codice è documentazione di cosa hai fatto. Se senti che R per analisi dati è ancora una montagna troppo alta in questo momento, non sei sola/o — è normale. Abbiamo sessioni guidate proprio per questo.
Statistiche descrittive
Una volta che i dati sono puliti, la prima cosa è "che aspetto hanno?"
Le medie, le deviazioni standard, i conteggi di frequenze:
mean(dati$soddisfazione) # Media
sd(dati$soddisfazione) # Deviazione standard
median(dati$soddisfazione) # Mediana
range(dati$soddisfazione) # Min e max
Se vuoi le statistiche descrittive di tutto insieme:
summary(dati) # Ti da min, Q1, mediana, media, Q3, max per ogni colonna
Se vuoi una tabella di frequenze (conteggi di categorie):
table(dati$genere) # Conta "M" e "F"
prop.table(table(dati$genere)) # Percentuali
Se vuoi le medie separate per genere:
dati %>%
group_by(genere) %>%
summarise(
media_soddisfazione = mean(soddisfazione),
sd_soddisfazione = sd(soddisfazione),
n = n()
)
Questo comando: raggruppa per genere, poi calcola la media e la deviazione standard per ogni gruppo. È esattamente quello che poi scrivi nella tesi nella sezione "Risultati descrittivi". Le statistiche descrittive sono il primo step di qualsiasi analisi con R per analisi dati — prima di fare test inferenziali, devi capire la forma dei tuoi dati.
Test e modelli base
Qui arriviamo ai test statistici veri.
t.test()
Il test t confronta due gruppi. Esempio: la soddisfazione cambia tra uomini e donne?
t.test(soddisfazione ~ genere, data = dati)
Questo ti da:
- Il valore t
- Il p-value
- L'intervallo di confidenza
- Le medie dei due gruppi
Se il p-value è < 0.05, la differenza è statisticamente significativa (il dettaglio è nella tesi, qui conta il codice).
aov()
ANOVA invece confronta tre o più gruppi. Esempio: la soddisfazione cambia tra le fasce di età?
modello <- aov(soddisfazione ~ categoria_età, data = dati)
summary(modello)
Ti da la tabella ANOVA: Sum of Squares, Mean Square, F-value, p-value. Di nuovo, se p < 0.05, la differenza è significativa tra i tre gruppi di età.
Una cosa importante: dopo ANOVA significativa, di solito fai un post-hoc test (es. Tukey) per vedere quali coppie di gruppi differiscono davvero:
TukeyHSD(modello)
Questo ti da le differenze medie tra ogni coppia di gruppi. Lo metti nella tesi nella sezione risultati — è quello che mostra al relatore che hai fatto l'analisi consapevolmente, non solo "lanciato un test".
lm()
La regressione lineare mette in relazione una variabile con una o più altre variabili. Esempio: la soddisfazione dipende dall'età (lineare) e dal genere?
modello_reg <- lm(soddisfazione ~ età + genere, data = dati)
summary(modello_reg)
Ti da:
- I coefficienti (intercetta e slope per ogni variabile)
- Gli errori standard
- I p-value per ogni coefficiente
- L'R-squared (quanto della variabilità è spiegato dal modello)
Se vuoi verificare le assunzioni (normalità dei residui, omoschedasticità):
plot(modello_reg) # Ti fa quattro grafici di diagnostica
La lettura dei quattro grafici di diagnostica non è banale, ma quello che vedi ti dice se il modello è affidabile. Se le assunzioni sono violate pesantemente, potrebbe servire una trasformazione dei dati o un modello diverso. Per una tesi basata su R per analisi dati, se le assunzioni vanno bene, lo scrivi nella metodologia ("verificate le assunzioni di normalità e omoschedasticità tramite visual inspection dei residuals plot").
Riepilogo: tre test, tre contesti
Questi tre test (t.test, aov, lm) coprono il 95% delle analisi che vedrai in una tesi quantitativa triennale. La regola pratica è:
- t.test: due gruppi, una variabile dipendente continua
- aov: tre+ gruppi, una variabile dipendente continua (segui con Tukey post-hoc)
- lm: una variabile dipendente continua, una o più predittori (continui o categorici)
Grafici professionali con ggplot2
La parte che rende R davvero diverso da SPSS è la capacità di fare grafici personalizzati. ggplot2 è fantastico per questo.
Istogramma della soddisfazione:
ggplot(dati, aes(x = soddisfazione)) +
geom_histogram(binwidth = 1, fill = "#128CA0", alpha = 0.8) +
labs(title = "Distribuzione della soddisfazione", x = "Punteggio", y = "Frequenza") +
theme_minimal()
Questo legge: "Prendi dati, mappa soddisfazione sull'asse x, fai un istogramma con bin ampiezza 1, colore azzurro, e tema minimal". Il risultato è un grafico che metti direttamente nella tesi.
Grafico a scatola (boxplot) della soddisfazione per genere:
ggplot(dati, aes(x = genere, y = soddisfazione)) +
geom_boxplot(fill = "#94D39E", alpha = 0.7) +
geom_jitter(width = 0.2, alpha = 0.4) +
labs(title = "Soddisfazione per genere", x = "Genere", y = "Punteggio") +
theme_minimal()
Grafico a dispersione (scatterplot) di soddisfazione vs età con una linea di tendenza:
ggplot(dati, aes(x = età, y = soddisfazione)) +
geom_point(alpha = 0.6, size = 3, color = "#128CA0") +
geom_smooth(method = "lm", se = TRUE, color = "black") +
labs(title = "Relazione tra età e soddisfazione", x = "Età", y = "Soddisfazione") +
theme_minimal()
La cosa bella di ggplot2 è che i colori, i temi, gli stili sono consistenti. Una volta che definisci il tuo stile, tutti i grafici della tesi hanno lo stesso aspetto professionale. Questo è uno dei vantaggi principali di R per analisi dati rispetto a SPSS: la ripetibilità e la consistenza visiva dei tuoi output.
Se vuoi esportare il grafico:
ggsave("grafico_soddisfazione.png", width = 8, height = 6, dpi = 300)
Questo salva il grafico come PNG con qualità sufficiente per la stampa.
Esportare risultati per la tesi
Una volta finito con i test e i grafici, devi esportare i risultati in una forma che metti nella tesi.
Se vuoi la tabella ANOVA come CSV:
modello <- aov(soddisfazione ~ categoria_età, data = dati)
risultati <- as.data.frame(anova(modello))
write.csv(risultati, "risultati_anova.csv")
Se vuoi la tabella della regressione:
modello_reg <- lm(soddisfazione ~ età + genere, data = dati)
library(broom)
tidy(modello_reg) # Ti da una tabella ordinata con coefficienti, p-value etc
write.csv(tidy(modello_reg), "risultati_regressione.csv")
Una cosa utile: scrivere un report automatico che raccoglie statistiche descrittive, grafici, e risultati dei test tutto insieme. Ma questo è avanzato — per una prima tesi, i tre passi qui sopra bastano.
Analisi dati senza tempo per imparare un software
Sai come va: hai il dataset, sai quale test serve, ma R sembra un muro di codice. Oppure hai iniziato, scritto 50 righe, e improvvisamente la console dice Error e non capisci dove sia il problema.
Non serve imparare R come se fossi un programmatore. Serve imparare abbastanza R per la tua tesi. Disegniamo insieme il flusso: che dati hai, quale test serve, come caricarlo, come farlo girare, come leggere l'output. In tre o quattro sessioni sai farlo da solo e la tesi è analizzata.
Scrivici su WhatsApp — consulenza gratuita 15 min, zero obblighi.
Consiglio pratico: come non arrendersi al primo errore
La frustrazione maggiore con R è quando scrivi qualcosa e la console dice Error. Una parentesi mancante, un nome di colonna sbagliato, un comando digitato male.
Il mindset giusto è: ogni errore è una domanda che R ti pone. Non significa che sei incapace — significa che R non ha capito quello che hai chiesto. Leggi l'errore con calma (anche se è in inglese, è descrittivo). Controlla:
- Parentesi matching
- Nomi delle colonne — se sono scritti diversamente, R non li trova
- Maiuscole/minuscole — R è case-sensitive
- Virgole nel posto giusto
Se ancora non capisci, copia l'errore in Google Scholar (o in ChatGPT), metti il comando che hai scritto, e il 90% delle volte qualcuno ha avuto lo stesso errore. Non è debolezza — è come lavora la programmazione vera.
Un'altra cosa: mantieni il tuo script ordinato. Commenti all'inizio che dicono cosa fai:
# Caricamento dati
library(tidyverse)
dati <- read.csv("miei_dati.csv")
# Pulizia
dati_puliti <- dati %>%
drop_na() %>%
filter(età > 18)
# Descrittive
summary(dati_puliti)
# Test t
t.test(soddisfazione ~ genere, data = dati_puliti)
Così a distanza di due settimane, quando apri lo script, capisci subito cosa stavi facendo.
Risorse esterne e prossimi step
Se dopo questa guida vuoi approfondire R per l'analisi dati (dataset più grandi, modelli più complessi, pacchetti specializzati), le risorse principali sono:
- R for Data Science — il libro definitivo in inglese, ma è scritto chiaramente
- RStudio Cheat Sheets — una pagina di ggplot2, dplyr, tidyr che stampi e tieni sulla scrivania
- Stack Overflow tag R — il 95% dei tuoi errori è già stato risolto qui
Ma per una tesi, quello che hai in questa guida è sufficiente. Il passo successivo non è imparare più R — è imparare a interpretare i risultati statistici che il codice ti da. Quello è il vero bottleneck: non sai cosa significhi p-value < 0.05? non sai leggere una tabella di regressione? Qui entra in gioco una diversa storia di apprendimento. Se sei in uno step come questo, è tempo di avere una guida metodologica che non parla di R, ma di cosa significano i tuoi numeri e come scriverlo nella tesi.
Se il tuo relatore ti ha detto "usa R", ma non ti ha insegnato come, e tu senti che il codice è solo una scatola nera in cui trovi numeri senza capire da dove vengono, ricevi supporto metodologico specializzato per R. Abbiamo lavorato con decine di ragazzi esattamente in questa situazione. Non ti facciamo la tesi — ti insegniamo il workflow, e da lì sei autonomo.
In alternativa, se la tesi richiede analisi dati più complessa di quella descritta qui (modelli misti, series temporali, analisi multivariata), o se hai scelto SPSS come software, abbiamo guide dedicate per ogni strumento. Il principio è sempre lo stesso: non imparare il software fine a sé stesso, ma imparare abbastanza da fare l'analisi della tua tesi consapevolmente.
Serve guida operativa, non tutorial generico
Online trovi mille tutorial su R — ma il 90% non parla della tua tesi. Parla di casi diversi, di sintassi astratta, di cose che non ti servono subito.
La guida che serve è quella che ti dice: apri RStudio, carica il tuo file qui, pulisci così, fai il test lì, metti il grafico nella tesi. Operativa, con il tuo dataset, con il tuo relatore che sa cosa vuole vedere.
