GLMs, Mixed & Nonlinear Models

Families: gaussian, binomial, poisson, Gamma, inverse.gaussian, quasibinomial, quasipoisson.

29.1 Generalized linear models

Families: gaussian, binomial, poisson, Gamma, inverse.gaussian, quasibinomial, quasipoisson. Evaluate with deviance, AIC, pROC::roc() (AUC), confusion matrices.

# Logistic regression
logit <- glm(am ~ wt + hp, data = mtcars, family = binomial)
summary(logit)
exp(coef(logit))                                   # odds ratios
predict(logit, newdata = data.frame(wt = 3, hp = 100), type = "response")   # probability

# Poisson regression for counts
pois <- glm(count ~ treatment + offset(log(exposure)), family = poisson, data = df)
# Overdispersion → quasipoisson or negative binomial
MASS::glm.nb(count ~ treatment, data = df)

29.2 Multinomial, ordinal & survival models

nnet::multinom(species ~ bill_length_mm + bill_depth_mm, data = penguins)
MASS::polr(rating ~ x, data = df, Hess = TRUE)       # ordinal logistic
library(survival)
fit <- survfit(Surv(time, status) ~ sex, data = lung); plot(fit)  # Kaplan-Meier
coxph(Surv(time, status) ~ age + sex, data = lung)              # Cox proportional hazards
survminer::ggsurvplot(fit)

29.3 Mixed-effects (multilevel) models

Also: nlme, glmmTMB (zero-inflation, many families), brms (Bayesian).

library(lme4)
m <- lmer(Reaction ~ Days + (Days | Subject), data = sleepstudy)   # random intercept & slope
summary(m); fixef(m); ranef(m); VarCorr(m)
lmerTest::lmer(...)                                  # p-values for fixed effects
glmer(outcome ~ x + (1 | cluster), family = binomial, data = df)

29.4 Nonlinear & additive models

nls(y ~ a * exp(b * x), data = df, start = list(a = 1, b = 0.1))   # nonlinear least squares
library(mgcv)
gam(y ~ s(x1) + s(x2, k = 5) + te(x3, x4), data = df, method = "REML")   # generalized additive models
loess(y ~ x, span = 0.5); smooth.spline(x, y)

29.5 Multivariate methods

Structural equation modeling: lavaan; psychometrics: psych.

pca <- prcomp(scale(mtcars)); summary(pca); biplot(pca)       # PCA
factoextra::fviz_pca_biplot(pca)
km <- kmeans(scale(iris[, 1:4]), centers = 3, nstart = 25)    # k-means
hc <- hclust(dist(scale(mtcars))); plot(hc); cutree(hc, k = 4)  # hierarchical clustering
cmdscale(dist(x)); factanal(x, factors = 2)                   # MDS, factor analysis
MASS::lda(Species ~ ., iris)                                  # linear discriminant analysis
umap::umap(x); Rtsne::Rtsne(x)                                # nonlinear dimensionality reduction

29.6 Bayesian statistics

Ecosystem: Stan (cmdstanr, rstan), brms, rstanarm, bayesplot, tidybayes, loo, posterior, JAGS (rjags), INLA, greta.

library(brms)
fit <- brm(mpg ~ wt + (1 | cyl), data = mtcars, family = gaussian(), chains = 4, iter = 2000)
summary(fit); plot(fit); pp_check(fit); conditional_effects(fit)
rstanarm::stan_glm(mpg ~ wt, data = mtcars)