Caso 1

Se examina la relación entre la altura y la capacidad pulmonar. Los datos se encuentran en el archivo fumadores.txt.

# carga de datos
fum <- read.table("fumadores.txt", header = TRUE, stringsAsFactors = TRUE)
str(fum)

# inspección de datos 1: gráfico tipo Cleveland
plot(fum$ca.pulm)
plot(fum$alt)

# inspección de datos 2: gráfico bivariado
plot(fum$alt, fum$ca.pulm)

# modelo lineal (regresión)
fit<-lm(ca.pulm ~ alt, data=fum)

# El objeto fit contiene numerosos componentes, a los cuales podemos acceder de 
# diferentes formas (ver ?lm). Por ej.
fit$residuals

# resúmenes de información
summary(fit)
anova(fit)

# diagnósticos gráficos. Layout dividirá la ventana gráfica en lo que 
# indique la matriz (4 en este caso, en 2 filas y 2 columnas). Para que la 
# ventana gráfica vuelva a la normalidad usaremos layout(1)
# NOTA: ocasionalmente la ventanna gráfica de RStudio es muy pequeña
# Podemos llamar una nueva con x11()
layout(matrix(1:4,2,2))
plot(fit)
layout(1)

# diagnósticos numéricos
shapiro.test(fit$residuals)


# diagnósticos "explicados": performance
# (útil en modelos más complejos)
library(performance)
x11()
check_model(fit)
check_normality(fit)
check_homogeneity(fit, method = "auto")
model_performance(fit)

# validación cruzada
library(caret)

fitControl <- trainControl(method = "cv", number = 10)

lmFit1 <- train(ca.pulm ~ alt,
               data =fum,
               method = "lm", 
               trControl = fitControl)

lmFit2 <- train(ca.pulm ~ alt + I(alt^2),
                data =fum,
                method = "lm", 
                trControl = fitControl)

# Root mean squared error (RMSE)
# simple R2
# mean absolute error (MAE)

lmFit1
lmFit2

Caso 2

Muertes de mosquitos en respuesta a distintos insecticidas. Datos de ejemplo cargado en R: InsectSprays.

data(InsectSprays)
str(InsectSprays)

plot(sqrt(count) ~ spray, data = InsectSprays)

# utilizando la function lm
fit.spray1 <- lm(sqrt(count) ~ spray, data = InsectSprays)
anova(fit.spray1)
summary(fit.spray1)

# utilizando la function aov
fit.spray2 <- aov(sqrt(count)~spray, data = InsectSprays)
summary(fit.spray2)

#diagnósticos gráficos
layout(matrix(1:4,2,2))
plot(fit.spray2)
layout(1)

# diagnósticos numéricos
shapiro.test(resid(fit.spray2))
bartlett.test(resid(fit.spray2)~InsectSprays$spray)

# diagnósticos con performance
library(performance)
check_model(fit.spray2)
check_normality(fit.spray2)
check_homogeneity(fit.spray2, method = "auto")

# Test de Tukey
# notar que trabaja sobre un objeto aov, no sobre un objeto lm
tuk <- TukeyHSD (fit.spray2)
tuk

# Otros tests a posteriori y contrastes
library(emmeans)
EMM <- emmeans(fit.spray1, specs = "spray")
EMM
contrast(EMM, method = "pairwise")
?"contrast-methods"

Ejercicios

  1. Se intenta probar si el éxito reproductivo (medido como polinarios exportados) de la orquídea Cyclopogon elatus aumenta en flores con nectarios más profundos. El archivo cyclop.txt contiene las variables de interés nectario y pol.exp. Realizar gráficos exploratorios, ajustar un modelo de regresión lineal, extraer la tabla de parámetros y la tabla ANOVA y realizar gráficos de diagnóstico.

  2. Determinar si existen diferencias en el peso de pecaríes según el mes de su captura: febrero, mayo, agosto y noviembre, con los datos del archivo pecaries.txt. Explorar los datos gráficamente, realizar un análisis de la varianza, obtener la tabla de parámetros y la tabla ANOVA. Realizar diagnósticos gráficos y numéricos (pruebas de Shapiro-Wilks y Bartlett) y realizar un test de Tukey.