#install.packages("tidyverse")
#install.packages("broom.mixed")
#install.packages("lme4")
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.3.1
## Warning: package 'lubridate' was built under R version 4.3.1
## -- Attaching core tidyverse packages ------------------------ tidyverse 2.0.0 --
## v dplyr 1.1.2 v readr 2.1.4
## v forcats 1.0.0 v stringr 1.5.0
## v ggplot2 3.4.2 v tibble 3.2.1
## v lubridate 1.9.2 v tidyr 1.3.0
## v purrr 1.0.1
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
## i Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(broom.mixed)
## Warning: package 'broom.mixed' was built under R version 4.3.1
library(lme4)
## Warning: package 'lme4' was built under R version 4.3.1
## Loading required package: Matrix
##
## Attaching package: 'Matrix'
##
## The following objects are masked from 'package:tidyr':
##
## expand, pack, unpack
#Datos co2
data("CO2")
uptake2 = CO2$uptake + runif(84,0.02,0.04)
#Analisis descriptivo
ggplot(CO2, aes(x = conc, y = uptake2, color = Type)) +
geom_point(aes(shape = Treatment)) +
geom_path(aes(group = Plant, lty = Treatment)) +
theme_bw()
De acuerdo al grafico, podemos decir que existe un bajo consumo y una baja variacion a una concentracion baja. Se observa que las plantas de Quebec captan mayor co2 que las de Misisipi, aunque en misisipi se observa una mayor diferencia en los tratamientos de enfriado y no enfriado.
Fit1 <- lm(uptake2 ~ I(log(conc)) + Type:Treatment, data = CO2)
Fit2 <- lmer(uptake2 ~ I(log(conc)) + Type:Treatment + (1 | Plant), data = CO2)
## fixed-effect model matrix is rank deficient so dropping 1 column / coefficient
En este caso, se usa el “lmer” para poder utilizar este modelo en plantas que no estan dentro de este experimento (variable aleatoria), en donde cada una tendra un intercepto diferente.
#Modelo lineal simple
broom::glance(Fit1)
## # A tibble: 1 x 12
## r.squared adj.r.squared sigma statistic p.value df logLik AIC BIC
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0.823 0.814 4.67 91.7 7.00e-29 4 -246. 504. 519.
## # i 3 more variables: deviance <dbl>, df.residual <int>, nobs <int>
broom::tidy(Fit1)
## # A tibble: 6 x 5
## term estimate std.error statistic p.value
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 (Intercept) -33.5 4.08 -8.22 3.19e-12
## 2 I(log(conc)) 8.48 0.678 12.5 2.03e-20
## 3 TypeQuebec:Treatmentnonchilled 19.5 1.44 13.6 2.61e-22
## 4 TypeMississippi:Treatmentnonchilled 10.1 1.44 7.04 6.30e-10
## 5 TypeQuebec:Treatmentchilled 15.9 1.44 11.1 9.91e-18
## 6 TypeMississippi:Treatmentchilled NA NA NA NA
Con “Tidy” obtenemos el estimado de cada factor.
#MOdelo lineal mixto
broom.mixed::glance(Fit2)
## # A tibble: 1 x 7
## nobs sigma logLik AIC BIC REMLcrit df.residual
## <int> <dbl> <dbl> <dbl> <dbl> <dbl> <int>
## 1 84 4.50 -241. 496. 513. 482. 77
broom.mixed::tidy(Fit2)
## # A tibble: 7 x 6
## effect group term estimate std.error statistic
## <chr> <chr> <chr> <dbl> <dbl> <dbl>
## 1 fixed <NA> (Intercept) -33.5 4.02 -8.34
## 2 fixed <NA> I(log(conc)) 8.48 0.654 13.0
## 3 fixed <NA> TypeQuebec:Treatmentnonchilled 19.5 1.83 10.6
## 4 fixed <NA> TypeMississippi:Treatmentnonch~ 10.1 1.83 5.53
## 5 fixed <NA> TypeQuebec:Treatmentchilled 15.9 1.83 8.69
## 6 ran_pars Plant sd__(Intercept) 1.47 NA NA
## 7 ran_pars Residual sd__Observation 4.50 NA NA
broom.mixed::tidy(Fit2) %>% view()
*En “tidy” podemos ver los valores estimados para la interacción entre las plantas y el enfriamento. la de mayor estimacion es en el tratamiento no enfriado en Quebec seguida por el tratamiento enfiado en Quebec, confirmando lo interpretado en el analisis gráfico en donde con cualquiera de los dos tratamientos las plantas de Quebec tienen mayor consumo de CO2.
#GLMER Con esta función se agrega la familia poisson porque no se tienen datos decimales y son valores positivos. La base de datos “peso de pollos” es muy similar a la anterior, se tiene el peso, tiempo, dieta y la identidad del pollo.
data("ChickWeight")
ggplot(ChickWeight, aes(x = Time, y = weight)) +
geom_point(aes(color = Diet)) +
geom_path(aes(color = Diet, group = Chick))
-En la gráfica se observa que los pollos tienen dietas similares, pero
van a tener comportamientos distinto aun partiendo de un mismo
punto.
Fit1_Poisson <- glm(weight ~ Diet:Time, data =ChickWeight, family = poisson)
Fit2_Poisson <- glmer(weight ~ Diet:Time + (1|Chick), data =ChickWeight, family = poisson)
## Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, : Model is nearly unidentifiable: very large eigenvalue
## - Rescale variables?
-El peso es explicado por la dieta en interacción con el tiempo
broom::tidy(Fit1_Poisson)
## # A tibble: 5 x 5
## term estimate std.error statistic p.value
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 (Intercept) 3.86 0.00931 415. 0
## 2 Diet1:Time 0.0656 0.000722 90.8 0
## 3 Diet2:Time 0.0754 0.000768 98.1 0
## 4 Diet3:Time 0.0862 0.000729 118. 0
## 5 Diet4:Time 0.0823 0.000756 109. 0
broom.mixed::tidy(Fit2_Poisson)
## # A tibble: 6 x 7
## effect group term estimate std.error statistic p.value
## <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
## 1 fixed <NA> (Intercept) 3.84 0.0315 122. 0
## 2 fixed <NA> Diet1:Time 0.0666 0.00105 63.7 0
## 3 fixed <NA> Diet2:Time 0.0749 0.00129 57.9 0
## 4 fixed <NA> Diet3:Time 0.0868 0.00123 70.5 0
## 5 fixed <NA> Diet4:Time 0.0763 0.00126 60.4 0
## 6 ran_pars Chick sd__(Intercept) 0.213 NA NA NA
con la funcion “tidy” nos muestra un aumento de peso en el tiempo y una interración donde cada dieta es diferente
*La dieta con un mayor aumento en el peso es la 3 con una ganancia diaria de 0,086 y seguida por la dieta 4.
*Para poder realizar este tipo de modelo es necesario que se tenga más de una medida por cada individuo
Conclusión
Este modelo es muy importante en la agricultura, como tambien para otros campos, porque nos permite llevar a campo experimentos que son evaluados con factores requeridos por un cultivo, teniendo en cuenta la variable aleatoria