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).