Descriptive Statistics & EDA

Mode has no built-in function: names(which.max(table(x))).

25.1 Summary statistics

Mode has no built-in function: names(which.max(table(x))).

x <- penguins$body_mass_g
mean(x, na.rm = TRUE); median(x, na.rm = TRUE)
var(x, na.rm = TRUE); sd(x, na.rm = TRUE); IQR(x, na.rm = TRUE); mad(x, na.rm = TRUE)
quantile(x, c(0.1, 0.25, 0.5, 0.75, 0.9), na.rm = TRUE)
range(x, na.rm = TRUE); fivenum(x); summary(x)
scale(x)                                 # z-scores
cor(mtcars$mpg, mtcars$wt)               # Pearson
cor(mtcars$mpg, mtcars$wt, method = "spearman")
cor(mtcars[, 1:5])                       # correlation matrix
cov(mtcars$mpg, mtcars$wt)
table(penguins$species, penguins$island) # contingency table
prop.table(table(penguins$species))
xtabs(~ species + sex, data = penguins); addmargins(table(mtcars$cyl, mtcars$am))

25.2 An EDA workflow

Structure: glimpse(), str(), skimr::skim().

Missingness: colSums(is.na(df)), naniar::vis_miss(df).

Univariate: histograms, density, boxplots, count().

Bivariate: scatterplots, grouped boxplots, correlation matrices (GGally::ggpairs(), corrplot).

Outliers: boxplot stats (boxplot.stats(x)$out), z-scores, IQR rule.

Questions → transformations → visualizations → models, iterate.

Automated EDA packages: DataExplorer, dlookr, summarytools, gtsummary (publication-ready summary tables).