24  Outlier

In questo capitolo imparerai a
  • comprendere il ruolo e gli effetti degli outlier;
  • individuare outlier con metodi univariati e multivariati;
  • utilizzare il pacchetto {performance} in R per rilevarli;
  • documentare e rendere riproducibili le procedure;
  • considerare alternative (es. winsorizzazione) e preregistrare le scelte.
Prerequisiti
  • Leggere “Check your outliers! An introduction to identifying statistical outliers in R with easystats” (Thériault et al., 2024).
Preparazione del Notebook
here::here("code", "_common.R") |> 
  source()

# Load packages
if (!requireNamespace("pacman")) install.packages("pacman")
pacman::p_load(performance, see, datawizard, MASS)

24.1 Introduzione

Quando analizziamo dati reali, ci imbattiamo spesso in osservazioni che sembrano molto diverse dalla maggior parte delle altre. Questi valori anomali, chiamati outlier, possono avere origini diverse. Ad esempio, potrebbero derivare da errori di misura o inserimento dati, oppure essere casi estremi ma comunque validi.

Identificare e trattare gli outlier in modo appropriato è importante per evitare che distorcano i risultati dell’analisi. Tuttavia, non esiste una definizione universale di outlier: dipende dal contesto e dall’obiettivo dell’analisi.

In questo capitolo, esploreremo diversi metodi per individuare gli outlier, concentrandoci su tecniche robuste che minimizzano l’influenza di questi valori anomali sulle statistiche descrittive (Simmons et al., 2011).

24.2 Individuare e Gestire gli outlier

Identificare ed eventualmente eliminare gli outlier rappresenta una fase cruciale dell’analisi dei dati, poiché la presenza di valori anomali può influenzare fortemente le conclusioni che si traggono da analisi statistiche. Gli outlier possono infatti alterare notevolmente statistiche descrittive come media e deviazione standard, ma anche misure di relazione come correlazioni e regressioni. Ciò avviene perché molte tecniche statistiche comuni (ad esempio, la media aritmetica o la regressione lineare con metodo dei minimi quadrati) sono particolarmente sensibili ai valori estremi.

Ad esempio, se stiamo analizzando il reddito medio di un gruppo di persone e includiamo erroneamente dati di reddito estremamente elevati o inseriti per errore, la media risultante sarà molto più alta del reale valore tipico del gruppo, producendo una rappresentazione fuorviante della situazione.

24.2.1 L’importanza della Visualizzazione dei Dati

La rappresentazione grafica dei dati è uno strumento fondamentale per individuare rapidamente la presenza di outlier. Grafici come boxplot, istogrammi e scatterplot consentono di identificare visivamente valori anomali che si discostano dalla distribuzione generale.

Tuttavia, queste tecniche sono efficaci principalmente per outlier unidimensionali o bidimensionali. Nel caso di outlier multidimensionali, l’analisi visiva diventa insufficiente e si rende necessario l’utilizzo di metodi statistici più avanzati, come il calcolo della distanza di Mahalanobis.

24.3 Come Identificare gli Outlier

Oltre alla visualizzazione grafica, esistono tecniche statistiche specifiche che consentono di identificare gli outlier in modo sistematico.

24.3.1 I Boxplot

Uno strumento semplice e intuitivo per individuare gli outlier è il boxplot. Il boxplot riassume la distribuzione di una variabile mostrando la mediana, il primo e il terzo quartile (Q1 e Q3) e due estremi, detti “whiskers”. I punti al di fuori di questi whiskers sono considerati potenziali outlier.

Esempio in R:

data <- data.frame(
  value = c(rnorm(100, mean = 10, sd = 2), 30)
  ) # Aggiungiamo un outlier

ggplot(data, aes(y = value)) +
  geom_boxplot() +
  coord_flip()

Se il boxplot mostra un punto isolato lontano dagli altri dati, potrebbe essere un outlier.

24.3.2 Metodi Basati sulla Variabilità

24.3.2.1 Intervallo Interquartile (IQR)

John Tukey ha introdotto una definizione operativa di outlier basata sull’Interquartile Range (IQR), ovvero la differenza tra il terzo e il primo quartile:

  • I valori inferiori a \(Q1 - 1.5 \times IQR\) o superiori a \(Q3 + 1.5 \times IQR\) sono considerati outlier moderati.
  • I valori oltre \(Q1 - 3 \times IQR\) o \(Q3 + 3 \times IQR\) sono definiti far out outliers.

Esempio in R:

Q1 <- quantile(data$value, 0.25)
Q3 <- quantile(data$value, 0.75)
IQR_value <- Q3 - Q1
lower_bound <- Q1 - 1.5 * IQR_value
upper_bound <- Q3 + 1.5 * IQR_value

outliers <- data$value[data$value < lower_bound | data$value > upper_bound]
outliers
#> [1]  4.687  4.014 30.000

Questo metodo è efficace per distribuzioni simmetriche, ma potrebbe non funzionare bene con dati asimmetrici.

24.3.2.2 Median Absolute Deviation (MAD)

Un metodo più robusto rispetto all’IQR è il Median Absolute Deviation (MAD), che utilizza la mediana anziché la media per stimare la dispersione:

mad_value <- mad(data$value)
threshold <- 3 * mad_value # Soglia classica per gli outlier

outliers_mad <- data$value[abs(data$value - median(data$value)) > threshold]
outliers_mad
#> [1]  4.014 30.000

Il MAD è meno sensibile agli outlier rispetto alla deviazione standard ed è spesso preferito per dati con distribuzioni non normali.

24.4 Outlier Multivariati

Quando si considerano più variabili contemporaneamente, un valore potrebbe non apparire anomalo su una singola variabile, ma esserlo nel contesto dell’intero dataset. Un metodo comune per individuare questi outlier è la Distanza di Mahalanobis, che tiene conto delle correlazioni tra variabili.

  • Con la distanza “normale” (come quella che misuri con un righello), se una persona è più alta o più pesante della media, la distanza è calcolata in modo “isolato”, senza considerare che altezza e peso sono spesso correlate (persone più alte tendono a pesare di più).
  • Con la distanza di Mahalanobis, invece, si osserva il “contesto” dei dati. Se tutti nel gruppo hanno un’altezza e un peso che crescono in modo coordinato (ad esempio, ogni 10 cm in più corrispondono a 8 kg in più), questa distanza valuta se la nuova persona si allontana da questo schema generale. Ad esempio, una persona molto alta ma con peso medio potrebbe essere considerata più “anomala” di una persona altrettanto alta ma più pesante, perché viola la relazione tipica del gruppo.

Per comprendere intuitivamente la distanza di Mahalanobis, immaginiamo di avere una nube di punti che rappresentano individui, ciascuno con i propri valori di altezza e peso. Il “centro” di questa nube è un punto ideale che rappresenta una sorta di media multivariata (tenendo conto sia dell’altezza sia del peso). La distanza di Mahalanobis misura quanto ogni singolo individuo si allontana da questo centro, considerando la variabilità congiunta delle variabili (ad esempio, la correlazione tra altezza e peso). Se un individuo presenta caratteristiche molto diverse rispetto alla maggioranza, la sua distanza di Mahalanobis sarà elevata, segnalando un potenziale outlier.

Figura 24.1: Soglie per la detezione degli outliers (bande grigie) nel caso di una metrica unidimensionale (pannello di sinistra) e nel caso di una rappresentazione multivariata della varianza (pannello di destra) – figura creata da Sergen Cansiz.

Consideriamo ora una definizione della distanza di Mahalanobis nel caso bivariato (due variabili). Immaginiamo di avere due variabili come altezza (\(X\)) e peso (\(Y\)), con:

  • Medie: \(\mu_X\) (altezza media del gruppo), \(\mu_Y\) (peso medio del gruppo).
  • Varianze: \(\sigma_X^2\) (quanto varia l’altezza), \(\sigma_Y^2\) (quanto varia il peso).
  • Correlazione: \(\rho\) (quanto \(X\) e \(Y\) sono legate, ad esempio: se l’altezza aumenta, di quanto aumenta solitamente il peso?).

Per un nuovo individuo con altezza \(x\) e peso \(y\), la distanza di Mahalanobis (\(D\)) si calcola così:

  1. Calcolare le differenze rispetto alla media:

    • Quanto si discosta l’altezza: \((x - \mu_X)\).
    • Quanto si discosta il peso: \((y - \mu_Y)\).
  2. Scalare le differenze con le varianze:

    • Dividere ogni differenza per la sua “variabilità tipica” (deviazione standard \(\sigma_X\) e \(\sigma_Y\)):

      \[ \frac{(x - \mu_X)}{\sigma_X} \quad \text{e} \quad \frac{(y - \mu_Y)}{\sigma_Y} . \]

  3. Correggere per la correlazione:

    • Se \(X\) e \(Y\) sono correlate (\(\rho \neq 0\)), modifica le differenze per tenere conto di come di solito si “muovono insieme”.
    • La formula finale combina tutto in un unico valore:
      \[ D = \sqrt{ \frac{ \left( \frac{(x - \mu_X)}{\sigma_X} \right)^2 + \left( \frac{(y - \mu_Y)}{\sigma_Y} \right)^2 - 2 \rho \left( \frac{(x - \mu_X)}{\sigma_X} \right)\left( \frac{(y - \mu_Y)}{\sigma_Y} \right) }{1 - \rho^2} } \]

Spiegazione:

  • Senza correlazione (\(\rho = 0\)), sarebbe come una distanza Euclidea “scalata” dalle varianze.
  • Con correlazione (\(\rho \neq 0\)), sottrai un termine che “aggiusta” la distanza in base a quanto \(X\) e \(Y\) tendono a variare insieme.
  • Il denominatore \(1 - \rho^2\) normalizza il risultato, per evitare che la correlazione distorca troppo la misura.

Esempio:
Se tutti gli alti sono anche pesanti (\(\rho\) positivo), un individuo alto ma magro avrà una distanza di Mahalanobis maggiore rispetto a uno altrettanto alto ma pesante, perché viola la relazione tipica del gruppo.

Ricordiamo che la distanza euclidea tra due punti \((x_1, y_1)\) e \((x_2, y_2)\) in un piano cartesiano è definita come:

\[ d = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2} \]

Esempio in R:

X <- as.matrix(mtcars[, c("mpg", "hp")])
center <- colMeans(X)
cov_matrix <- cov(X)
mahal_dist <- mahalanobis(X, center, cov_matrix)

threshold <- qchisq(0.975, df = ncol(X)) # Soglia al 97.5%
outliers_mahal <- X[mahal_dist > threshold, ]
outliers_mahal
#> mpg  hp 
#>  15 335

Questo metodo è utile per dataset con più variabili correlate, come misure biometriche (altezza e peso).

Tuttavia, la versione classica di questa misura non è particolarmente robusta: la presenza stessa di outlier può distorcere il calcolo del “centro” e della variabilità complessiva, rendendo meno affidabile l’individuazione di altri valori anomali. Per questo motivo, si preferisce utilizzare una variante più resistente, la Minimum Covariance Determinant (MCD), che diminuisce l’influenza degli outlier stessi nel processo di identificazione.

All’interno del pacchetto {performance} in R, è possibile applicare questa variante robusta utilizzando la funzione check_outliers() con l’argomento method = "mcd". In questo modo, è possibile individuare gli outlier multivariati in maniera più solida e coerente, anche quando si lavora con dati fortemente influenzati da valori estremi.

d <- mtcars[, c("mpg", "hp")]
outliers <- performance::check_outliers(d, method = "mcd", verbose = FALSE)
outliers
#> 2 outliers detected: cases 20, 31.
#> - Based on the following method and threshold: mcd (13.816).
#> - For variables: mpg, hp.

Si possono poi visualizzare questi outlier:

plot(outliers)

Sono disponibili anche altre varianti multivariate documentate nella help page della funzione.

24.5 Cosa Fare con gli Outlier?

Una volta identificati gli outlier, dobbiamo decidere se rimuoverli, correggerli o mantenerli (Leys et al., 2019). Alcuni approcci comuni includono:

  1. Verificare la fonte del dato: un errore di inserimento può essere corretto.
  2. Rimuovere gli outlier estremi: utile se il valore è chiaramente un errore di misura.
  3. Usare metodi robusti: strumenti come la mediana o il MAD sono meno influenzati dagli outlier.
  4. Trasformare i dati: applicare logaritmi o altre trasformazioni può ridurre l’impatto degli outlier.
  5. Winsorizzazione: invece di rimuovere gli outlier, possiamo limitarli a un massimo accettabile.

Nella Winsorizzazione, invece di eliminare gli outlier, si sostituiscono i valori troppo alti o troppo bassi con i valori più vicini considerati “accettabili”, mantenendo però la struttura generale dei dati.

Come funziona?
1. Definisci i limiti:

  • Decidi una “soglia” per identificare gli outlier, ad esempio il 5° percentile (valore sotto cui cade il 5% dei dati più bassi) e il 95° percentile (valore sopra cui cade il 5% dei dati più alti).
  • Queste soglie dipendono dal contesto: puoi usare percentili diversi (es. 1° e 99°) in base a quanto vuoi essere severo nel definire gli outlier.
  1. Sostituisci gli outlier:

    • Valori troppo bassi: Tutti i dati sotto il 5° percentile vengono sostituiti con il valore del 5° percentile.
    • Valori troppo alti: Tutti i dati sopra il 95° percentile vengono sostituiti con il valore del 95° percentile.

Esempio concreto:
Supponiamo di avere i seguenti dati su 10 esami (ordinati):
40, 55, 60, 65, 70, 75, 80, 85, 90, 200

  • 5° percentile: 55 (il valore sotto cui cade il 5% dei dati).
  • 95° percentile: 90 (il valore sopra cui cade il 5% dei dati).

Dopo la Winsorizzazione:
- Il valore più basso (40) diventa 55.
- Il valore più alto (200) diventa 90.
Nuovi dati: 55, 55, 60, 65, 70, 75, 80, 85, 90, 90.

Perché usarla?

  • Mantiene la dimensione del dataset: Non si eliminano dati, ma si modificano solo gli outlier.
  • Riduce la distorsione: Gli outlier estremi non “trascinano” la media o altre statistiche.
  • Utile in contesti sensibili: Ad esempio, in finanza (per gestire rendimenti anomali) o nelle analisi mediche (per evitare che valori estremi falsino i risultati).

Nel pacchetto easystats, la funzione winsorize() di datawizard semplifica il compito di Winsorizzazione:

winsorized_data <- 
  winsorize(data$value, method = "zscore", robust = TRUE, threshold = 3)

24.6 Importanza della Trasparenza

Qualunque decisione va documentata chiaramente: quanti outlier sono stati individuati, con quale metodo, a quale threshold, come sono stati gestiti, e preferibilmente con il codice R utilizzato. La preregistrazione e la condivisione dei dati e del codice (ad es. su OSF) sono pratiche consigliate per garantire riproducibilità e trasparenza.

24.7 Riflessioni Conclusive

Abbiamo mostrato come identificare gli outlier in modo coerente e trasparente, allineandoci alle buone pratiche correnti. Tuttavia, la buona pratica non si limita alla scelta degli algoritmi: è fondamentale anche preregistrare le decisioni, essere coerenti, trasparenti e fornire giustificazioni.

24.8 Esercizi

Domande teoriche

  1. Cos’è un outlier?
  2. Perché è importante identificare e trattare correttamente gli outlier?
  3. Descrivi brevemente il metodo del boxplot per identificare gli outlier.
  4. Cosa si intende per Interquartile Range (IQR) e come viene utilizzato per individuare gli outlier?
  5. Qual è la differenza tra il metodo IQR e il Median Absolute Deviation (MAD) per l’identificazione degli outlier?
  6. Cos’è la distanza di Mahalanobis e in che modo può aiutare nell’identificazione degli outlier multivariati?
  7. Perché la distanza di Mahalanobis classica potrebbe non essere robusta? Come si può migliorare l’approccio?
  8. Quali sono le opzioni per gestire gli outlier una volta identificati?
  9. Cos’è la Winsorizzazione e in quali casi potrebbe essere utile?
  10. Perché è importante la trasparenza nelle decisioni riguardanti gli outlier?
  1. Cos’è un outlier?

    • Un outlier è un’osservazione che si discosta significativamente dalla maggior parte delle altre osservazioni in un insieme di dati. Può essere dovuto ad errori di misura, errori di inserimento dati o a casi estremi ma validi.
  2. Perché è importante identificare e trattare correttamente gli outlier?

    • Gli outlier possono distorcere i risultati dell’analisi statistica, portando a conclusioni errate. Identificarli e trattarli correttamente aiuta a ridurre l’effetto di questi valori anomali sulle statistiche descrittive e sulle inferenze statistiche.
  3. Descrivi brevemente il metodo del boxplot per identificare gli outlier.

    • Il boxplot visualizza la distribuzione di una variabile, mostrando la mediana, il primo e il terzo quartile, e due estremi (“whiskers”). I punti al di fuori di questi whiskers sono considerati potenziali outlier.
  4. Cosa si intende per Interquartile Range (IQR) e come viene utilizzato per individuare gli outlier?

    • L’IQR è la differenza tra il terzo e il primo quartile di un insieme di dati. Valori inferiori a \(Q1 - 1.5 \times IQR\) o superiori a \(Q3 + 1.5 \times IQR\) sono considerati outlier moderati. Valori oltre \(Q1 - 3 \times IQR\) o \(Q3 + 3 \times IQR\) sono definiti “far out” outliers.
  5. Qual è la differenza tra il metodo IQR e il Median Absolute Deviation (MAD) per l’identificazione degli outlier?

    • Il metodo IQR si basa sulla differenza tra il terzo e il primo quartile, mentre il MAD utilizza la mediana delle deviazioni assolute dalla mediana per stimare la dispersione. Il MAD è meno sensibile agli outlier rispetto all’IQR e alla deviazione standard, rendendolo preferibile per dati con distribuzioni non normali.
  6. Cos’è la distanza di Mahalanobis e in che modo può aiutare nell’identificazione degli outlier multivariati?

    • La distanza di Mahalanobis misura quanto un punto si discosta dal centro della distribuzione di un set di dati multivariato, tenendo conto della correlazione tra le variabili. Valori con distanze di Mahalanobis elevate sono potenziali outlier multivariati.
  7. Perché la distanza di Mahalanobis classica potrebbe non essere robusta? Come si può migliorare l’approccio?

    • La distanza di Mahalanobis classica può essere distorta dalla presenza di outlier, che influenzano il calcolo del centro e della variabilità complessiva. Un approccio più robusto è la Minimum Covariance Determinant (MCD), che riduce l’influenza degli outlier nel processo di identificazione.
  8. Quali sono le opzioni per gestire gli outlier una volta identificati?

    • Le opzioni includono: verificare la fonte del dato per possibili errori, rimuovere gli outlier estremi, usare metodi robusti come la mediana o il MAD, trasformare i dati (ad esempio, logaritmi), e limitare gli outlier attraverso la Winsorizzazione.
  9. Cos’è la Winsorizzazione e in quali casi potrebbe essere utile?

    • La Winsorizzazione è una tecnica che consiste nel sostituire gli outlier estremi con il valore massimo o minimo accettabile. È utile quando si vuole mantenere la dimensione del dataset e ridurre l’impatto degli outlier senza rimuoverli completamente.
  10. Perché è importante la trasparenza nelle decisioni riguardanti gli outlier?

  • La trasparenza aiuta a garantire la riproducibilità e la validità dell’analisi. Documentare le decisioni, inclusi i metodi e i threshold utilizzati, consente ad altri di capire e valutare l’impatto di queste decisioni sui risultati dell’analisi.

Esercizio: Gestione degli Outlier nella Scala di Soddisfazione di Vita (SWLS)

Scopo:
Imparare a individuare e correggere gli outlier in un dataset che misura la soddisfazione di vita (SWLS). L’esercizio prevede l’inserimento artificiale di due outlier (uno molto alto e uno molto basso) nei dati raccolti, per poi gestirli con i metodi discussi nel capitolo. Infine, bisognerà consegnare:

  1. Un file .qmd (Quarto) con tutto il codice e i commenti delle operazioni svolte.
  2. Un file CSV finale con i dati “puliti” (ossia senza i due outlier anomali) o con i valori modificati mediante il metodo scelto (winsorizzazione, rimozione, correzione, ecc.).

Fasi e Istruzioni

  1. Scarica o carica il dataset SWLS
    • Nominare il dataset originale, ad esempio SWLS_raw.csv, contenente i punteggi dei partecipanti sulla Scala di Soddisfazione di Vita (SWLS).
    • Assicurati di avere nel dataset almeno le colonne:
      • id (identificatore univoco del partecipante)
      • swls_score (punteggio totale alla scala SWLS)
  2. Crea due outlier artificiali
    • Scegli un partecipante al quale assegnare un valore estremamente basso di swls_score (es. -999) e un altro partecipante con un valore estremamente alto (es. 999).
    • Spiega brevemente nel .qmd dove e come hai inserito questi valori.
  3. Analizza i dati alla ricerca di outlier
    • Visualizza la distribuzione tramite un boxplot e/o un istogramma.
    • Calcola i valori soglia utilizzando almeno uno dei metodi visti:
      • IQR (intervallo interquartile)
      • MAD (Median Absolute Deviation)
    • Mostra quali osservazioni vengono segnalate come potenziali outlier.
  4. Decidi come gestire gli outlier
    • Scegli se rimuoverli, winsorizzarli o correggerli.
    • Giustifica la tua scelta: spiega perché quel metodo è appropriato per questi dati o perché preferisci un approccio rispetto a un altro.
  5. Genera i dati “puliti”
    • Applica il metodo selezionato.
    • Salva il dataset risultante (senza i valori anomali o con i valori modificati) in un file CSV chiamato SWLS_clean.csv.
  6. Documenta tutto in un file .qmd
    • Includi codice R, commenti e brevi spiegazioni testuali dei vari passaggi.
    • Mostra i risultati rilevanti (boxplot, calcolo dei soglie IQR/MAD, elenco degli outlier individuati, ecc.).
    • Assicurati di eseguire il rendering del .qmd in modo che l’istruttore possa vedere sia l’output che il codice.
  7. Consegnare i file
    • File .qmd: deve contenere tutto il codice e i passaggi effettuati (inclusi grafici, calcoli e spiegazioni).
    • File CSV “pulito” (SWLS_clean.csv): con i dati finali dopo il trattamento degli outlier.

Suggerimenti

  • Struttura il tuo .qmd in sezioni (ad es. Caricamento dati, Creazione outlier artificiali, Identificazione outlier, Gestione outlier, Salvataggio dati puliti).
  • Motiva sempre le scelte, soprattutto se rimuovi o modifichi i dati originali: spiega perché il valore appare come un errore di misura o un valore estremo.
  • Fai controlli incrociati: potresti usare più di un metodo (boxplot, IQR, MAD) per vedere se l’outlier viene segnalato in tutti i casi.
  • Documenta la tua strategia di trasparenza nell’analisi: note sull’eventuale preregistrazione di come avresti gestito gli outlier o su come hai deciso i threshold.

Informazioni sull’Ambiente di Sviluppo

sessionInfo()
#> R version 4.4.2 (2024-10-31)
#> Platform: aarch64-apple-darwin20
#> Running under: macOS Sequoia 15.3.1
#> 
#> Matrix products: default
#> BLAS:   /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/lib/libRblas.0.dylib 
#> LAPACK: /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/lib/libRlapack.dylib;  LAPACK version 3.12.0
#> 
#> locale:
#> [1] C/UTF-8/C/C/C/C
#> 
#> time zone: Europe/Rome
#> tzcode source: internal
#> 
#> attached base packages:
#> [1] stats     graphics  grDevices utils     datasets  methods   base     
#> 
#> other attached packages:
#>  [1] MASS_7.3-65        datawizard_1.0.0   performance_0.13.0
#>  [4] thematic_0.1.6     MetBrewer_0.2.0    ggokabeito_0.1.0  
#>  [7] see_0.10.0         gridExtra_2.3      patchwork_1.3.0   
#> [10] bayesplot_1.11.1   psych_2.4.12       scales_1.3.0      
#> [13] markdown_1.13      knitr_1.49         lubridate_1.9.4   
#> [16] forcats_1.0.0      stringr_1.5.1      dplyr_1.1.4       
#> [19] purrr_1.0.4        readr_2.1.5        tidyr_1.3.1       
#> [22] tibble_3.2.1       ggplot2_3.5.1      tidyverse_2.0.0   
#> [25] rio_1.2.3          here_1.0.1        
#> 
#> loaded via a namespace (and not attached):
#>  [1] generics_0.1.3    stringi_1.8.4     lattice_0.22-6    hms_1.1.3        
#>  [5] digest_0.6.37     magrittr_2.0.3    evaluate_1.0.3    grid_4.4.2       
#>  [9] timechange_0.3.0  fastmap_1.2.0     rprojroot_2.0.4   jsonlite_1.9.1   
#> [13] viridisLite_0.4.2 mnormt_2.1.1      cli_3.6.4         rlang_1.1.5      
#> [17] munsell_0.5.1     withr_3.0.2       tools_4.4.2       parallel_4.4.2   
#> [21] tzdb_0.4.0        colorspace_2.1-1  pacman_0.5.1      vctrs_0.6.5      
#> [25] R6_2.6.1          lifecycle_1.0.4   htmlwidgets_1.6.4 insight_1.1.0    
#> [29] pkgconfig_2.0.3   pillar_1.10.1     gtable_0.3.6      glue_1.8.0       
#> [33] xfun_0.51         tidyselect_1.2.1  rstudioapi_0.17.1 farver_2.1.2     
#> [37] htmltools_0.5.8.1 nlme_3.1-167      labeling_0.4.3    rmarkdown_2.29   
#> [41] compiler_4.4.2

Bibliografia

Leys, C., Delacre, M., Mora, Y. L., Lakens, D., & Ley, C. (2019). How to classify, detect, and manage univariate and multivariate outliers, with emphasis on pre-registration. International Review of Social Psychology, 32(1).
Simmons, J. P., Nelson, L. D., & Simonsohn, U. (2011). False-positive psychology: Undisclosed flexibility in data collection and analysis allows presenting anything as significant. Psychological science, 22(11), 1359–1366.
Thériault, R., Ben-Shachar, M. S., Patil, I., Lüdecke, D., Wiernik, B. M., & Makowski, D. (2024). Check your outliers! An introduction to identifying statistical outliers in R with easystats. Behavior Research Methods, 56(4), 4162–4172.