Se intenta realizar un modelo que prediga el contenido de azúcar en el néctar en flores de Salvia polystachia, a partir de 7 variables morfológicas medidas. Los datos se encuentran en el archivo s_poly.txt.
library(arm)
library(car)
library(GGally)
library(glmnet)
library(leaps)
library(MASS)
library(MuMIn)
library(performance)
read.table("s_poly.txt", header = TRUE)
dat <-
# exploración de los datos
layout(matrix(1:8,2,4))
plot(dat$azucar); plot(dat$largo.l.tot); plot(dat$largo.tubo)
plot(dat$caliz.sup); plot(dat$caliz.med); plot(dat$caliz.inf)
plot(dat$labio.sup); plot(dat$labio.inf)
layout(1)
# exploración bivariada de los datos
pairs(dat)
# Detección de la colinealidad
# A) Matrices de correlación
cor(dat[, c(
CORR <-"largo.l.tot", "largo.tubo", "caliz.sup",
"caliz.med", "caliz.inf", "labio.sup", "labio.inf")],
use = "complete.obs")
# B) scatterplot matrix
ggpairs(dat, aes(alpha = 0.4),
upper = list(continuous = wrap('cor', size = 3)))
# cuando aumenta el número de variables, puede ser útil
# no visualizar los datos individuales
ggcorr(dat, method = c("pairwise", "pearson"))
# C) Factores de inflación de la varianza
lm(azucar ~ largo.l.tot + largo.tubo + caliz.sup + caliz.med +
fit1 <- caliz.inf + labio.sup + labio.inf, data = dat)
vif(fit1)
check_collinearity(fit1)
ckeck_model(fit1)
# Para debatir: descartamos el cáliz inferior y construimos un nuevo modelo
lm(azucar ~ largo.l.tot + largo.tubo + caliz.sup + caliz.med +
fit2 <- labio.sup + labio.inf, data = dat)
vif(fit2)
check_model(fit)
summary(fit2)
anova (fit2)
# LIBRARY leaps
# Selección de modelos. Best subset selection.
# Construyendo todos los modelos posibles
# (pueden utilizarse forward o backward cambiando el argumento method)
regsubsets(azucar ~ largo.l.tot + largo.tubo + caliz.sup +
BS.fit <- caliz.med + labio.sup + labio.inf, data = dat, method = "exhaustive")
summary(BS.fit)
BS.summary <-
BS.summary
plot(BS.summary$cp, xlab = "número de variables", ylab = "Cp", type ="l")
plot(BS.summary$bic, xlab = "número de variables", ylab = "BIC", type ="l")
plot(BS.fit, scale = "Cp")
plot(BS.fit, scale = "bic")
coef(BS.fit, 3)
coef(BS.fit, 1)
# LIBRARY MASS
# stepAIC realiza una búsqueda automática del mejor modelo
stepAIC(fit2, direction = "both") # para AIC
nrow(dat)
n <-stepAIC(fit2, direction = "both", k = log(n)) # para BIC
# LIBRARY Arm; MuMIn
# Model averaging
lm(azucar ~ largo.l.tot + largo.tubo + caliz.sup +
global <- caliz.med + labio.sup + labio.inf, data = dat, na.action = na.fail)
standardize(global, standardize.y = FALSE)
std.model <- dredge(std.model)
set <-
set
get.models(set, subset = delta < 2)
top.mod <-model.sel(top.mod)
model.avg(top.mod)
AVG <-summary(AVG)
sw(AVG)
# LIBRARY glmnet
# Selección de Modelos. Shrinkage - Lasso
model.matrix(azucar ~ largo.l.tot + largo.tubo + caliz.sup +
x <- caliz.med + labio.sup + labio.inf, data = dat)[, -1]
dat$azucar
y <-
glmnet(x, y, alpha = 1)
lasso.mod <-plot(lasso.mod)
coef(lasso.mod, s = 0.1) # ejemplo
# Cross validation.
cv.glmnet(x, y, alpha = 1, nfolds = 10)
cv.out <-plot(cv.out)
$lambda.min
cv.outcoef(cv.out, s = "lambda.min")