El objtivo del ejecicio es algunas variaciones que puede tener las interpretaciones de un modelo lineal a un modelo donde se tiene en cuenta una variable aleatoria
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.1.3
## Warning: package 'ggplot2' was built under R version 4.1.3
## Warning: package 'tibble' was built under R version 4.1.3
## Warning: package 'tidyr' was built under R version 4.1.3
## Warning: package 'readr' was built under R version 4.1.3
## Warning: package 'purrr' was built under R version 4.1.3
## Warning: package 'dplyr' was built under R version 4.1.3
## Warning: package 'stringr' was built under R version 4.1.3
## Warning: package 'forcats' was built under R version 4.1.3
## Warning: package 'lubridate' was built under R version 4.1.3
## -- 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.1.3
library(lme4)
## Warning: package 'lme4' was built under R version 4.1.3
## Loading required package: Matrix
## Warning: package 'Matrix' was built under R version 4.1.3
##
## Attaching package: 'Matrix'
##
## The following objects are masked from 'package:tidyr':
##
## expand, pack, unpack
library(ggplot2)
Para esto llamamos algunas librerias que nos ayudara usar una base de datos tidy, la cual nos permitira una discriminación de los datos por observaciones por cada individuo (siendo nuestro principal interés la planta) y así poder una comparación de un modelo lineal a un modelo lineal mixto.
Ahora bien, los datos con los que vamos trabajar estan enfocados a la captación de CO2 de una especie de pasto de dos sitios (Quebec y Mississippi) a diferentes niveles de concentración de CO2 (95,175, 250,350,500, 675 y 1000). En este ejercicio la mitad de las plantas recibieron un enfriamiento durante la noche previo a la realización del experimento y la otra mitad no se realizo dicho procedimiento.
data("CO2")
datos=CO2
datos2=datos %>% mutate(uptake2= uptake + runif(84,0.02,0.04))
datos2
## Grouped Data: uptake ~ conc | Plant
## Plant Type Treatment conc uptake uptake2
## 1 Qn1 Quebec nonchilled 95 16.0 16.033301
## 2 Qn1 Quebec nonchilled 175 30.4 30.433364
## 3 Qn1 Quebec nonchilled 250 34.8 34.826407
## 4 Qn1 Quebec nonchilled 350 37.2 37.231181
## 5 Qn1 Quebec nonchilled 500 35.3 35.331208
## 6 Qn1 Quebec nonchilled 675 39.2 39.233870
## 7 Qn1 Quebec nonchilled 1000 39.7 39.724019
## 8 Qn2 Quebec nonchilled 95 13.6 13.632533
## 9 Qn2 Quebec nonchilled 175 27.3 27.337327
## 10 Qn2 Quebec nonchilled 250 37.1 37.122287
## 11 Qn2 Quebec nonchilled 350 41.8 41.830542
## 12 Qn2 Quebec nonchilled 500 40.6 40.621048
## 13 Qn2 Quebec nonchilled 675 41.4 41.428868
## 14 Qn2 Quebec nonchilled 1000 44.3 44.321618
## 15 Qn3 Quebec nonchilled 95 16.2 16.233135
## 16 Qn3 Quebec nonchilled 175 32.4 32.424431
## 17 Qn3 Quebec nonchilled 250 40.3 40.322911
## 18 Qn3 Quebec nonchilled 350 42.1 42.123033
## 19 Qn3 Quebec nonchilled 500 42.9 42.933405
## 20 Qn3 Quebec nonchilled 675 43.9 43.927918
## 21 Qn3 Quebec nonchilled 1000 45.5 45.539384
## 22 Qc1 Quebec chilled 95 14.2 14.222619
## 23 Qc1 Quebec chilled 175 24.1 24.139661
## 24 Qc1 Quebec chilled 250 30.3 30.339143
## 25 Qc1 Quebec chilled 350 34.6 34.635674
## 26 Qc1 Quebec chilled 500 32.5 32.522596
## 27 Qc1 Quebec chilled 675 35.4 35.436848
## 28 Qc1 Quebec chilled 1000 38.7 38.729574
## 29 Qc2 Quebec chilled 95 9.3 9.336692
## 30 Qc2 Quebec chilled 175 27.3 27.329999
## 31 Qc2 Quebec chilled 250 35.0 35.038788
## 32 Qc2 Quebec chilled 350 38.8 38.823389
## 33 Qc2 Quebec chilled 500 38.6 38.634258
## 34 Qc2 Quebec chilled 675 37.5 37.525838
## 35 Qc2 Quebec chilled 1000 42.4 42.439918
## 36 Qc3 Quebec chilled 95 15.1 15.127012
## 37 Qc3 Quebec chilled 175 21.0 21.035854
## 38 Qc3 Quebec chilled 250 38.1 38.120143
## 39 Qc3 Quebec chilled 350 34.0 34.026317
## 40 Qc3 Quebec chilled 500 38.9 38.932325
## 41 Qc3 Quebec chilled 675 39.6 39.638946
## 42 Qc3 Quebec chilled 1000 41.4 41.423030
## 43 Mn1 Mississippi nonchilled 95 10.6 10.632470
## 44 Mn1 Mississippi nonchilled 175 19.2 19.224016
## 45 Mn1 Mississippi nonchilled 250 26.2 26.228520
## 46 Mn1 Mississippi nonchilled 350 30.0 30.034147
## 47 Mn1 Mississippi nonchilled 500 30.9 30.932403
## 48 Mn1 Mississippi nonchilled 675 32.4 32.422861
## 49 Mn1 Mississippi nonchilled 1000 35.5 35.536179
## 50 Mn2 Mississippi nonchilled 95 12.0 12.024597
## 51 Mn2 Mississippi nonchilled 175 22.0 22.028053
## 52 Mn2 Mississippi nonchilled 250 30.6 30.636523
## 53 Mn2 Mississippi nonchilled 350 31.8 31.837113
## 54 Mn2 Mississippi nonchilled 500 32.4 32.423034
## 55 Mn2 Mississippi nonchilled 675 31.1 31.121907
## 56 Mn2 Mississippi nonchilled 1000 31.5 31.536667
## 57 Mn3 Mississippi nonchilled 95 11.3 11.335626
## 58 Mn3 Mississippi nonchilled 175 19.4 19.427659
## 59 Mn3 Mississippi nonchilled 250 25.8 25.839482
## 60 Mn3 Mississippi nonchilled 350 27.9 27.929525
## 61 Mn3 Mississippi nonchilled 500 28.5 28.539691
## 62 Mn3 Mississippi nonchilled 675 28.1 28.127650
## 63 Mn3 Mississippi nonchilled 1000 27.8 27.836101
## 64 Mc1 Mississippi chilled 95 10.5 10.528489
## 65 Mc1 Mississippi chilled 175 14.9 14.932507
## 66 Mc1 Mississippi chilled 250 18.1 18.139590
## 67 Mc1 Mississippi chilled 350 18.9 18.935747
## 68 Mc1 Mississippi chilled 500 19.5 19.524247
## 69 Mc1 Mississippi chilled 675 22.2 22.232228
## 70 Mc1 Mississippi chilled 1000 21.9 21.935687
## 71 Mc2 Mississippi chilled 95 7.7 7.728417
## 72 Mc2 Mississippi chilled 175 11.4 11.429615
## 73 Mc2 Mississippi chilled 250 12.3 12.328193
## 74 Mc2 Mississippi chilled 350 13.0 13.028806
## 75 Mc2 Mississippi chilled 500 12.5 12.531404
## 76 Mc2 Mississippi chilled 675 13.7 13.737137
## 77 Mc2 Mississippi chilled 1000 14.4 14.429513
## 78 Mc3 Mississippi chilled 95 10.6 10.620625
## 79 Mc3 Mississippi chilled 175 18.0 18.024320
## 80 Mc3 Mississippi chilled 250 17.9 17.930472
## 81 Mc3 Mississippi chilled 350 17.9 17.939499
## 82 Mc3 Mississippi chilled 500 17.9 17.925626
## 83 Mc3 Mississippi chilled 675 18.9 18.933397
## 84 Mc3 Mississippi chilled 1000 19.9 19.930346
ggplot(datos2, aes(x=conc, y=uptake2, color=Type))+
geom_point(aes(shape=Treatment))+
geom_path(aes(group = Plant, lty=Treatment))+
theme_bw()
La grafica reflaja el compotamiento de la captación de CO2 de las plantas de pastos discriminada por los sitios Quebec y Missippi, además por plantas a las que se le realizo enfriamiento o no. Nos referiremos como tratamiento si se realizo enfriamiento o no y tipo a los lugares de procedencia de las plantas.
La grafica nos da cuenta que las plantas captan más CO2 a medida que se aumenta los niveles de concentración del mismo, primero de forma exponencial y despues se estabiliza aunmentado paulatinamente. Captan más CO2 las plantas de Quebec con respecto a Missippi; del mismo modo, podemos afirmar que las plantas a las que no se aplico el enfriamiento se captó más CO2. Entonces así se puede afirmar que las plantas procedentes de quebec y que no se les aplico enfriamiento obtuvieron una captación mayor de CO2, mientras que las plantas que proceden de Mississipi y que recibieron el enfriamiento captaron menos CO2.
Para la comparación de los modelos vamos a aplicarle a los datos las funciones glace y tidy del paquete bloom que nos ayudara primero ordenar los datos del tal forma pudieramos obtener metricas de calidad de los modelos, además de tener un resumen estadistico con los parametros de estimación, desviación estandar, estadistico y el p-value.
Se va utilizar bloom y lm para el caso de modelo lineal y bloom.mixed y lmer para el modelo mixto donde se contempla la variable aleatoria de planta.
fit1= lm(uptake2~I(log(conc))+Type:Treatment, data = datos2)
fit2= lmer(uptake2~I(log(conc))+Type:Treatment + (1| Plant), data = datos2)
## fixed-effect model matrix is rank deficient so dropping 1 column / coefficient
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 6.91e-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.23 3.16e-12
## 2 I(log(conc)) 8.48 0.678 12.5 2.00e-20
## 3 TypeQuebec:Treatmentnonchilled 19.5 1.44 13.6 2.59e-22
## 4 TypeMississippi:Treatmentnonchilled 10.1 1.44 7.04 6.24e-10
## 5 TypeQuebec:Treatmentchilled 15.9 1.44 11.1 9.82e-18
## 6 TypeMississippi:Treatmentchilled NA NA NA NA
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)
## # 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
Podemos ver que hay diferencias entre ambos modelos si utlizamos uno o el otro. Es de resaltar que analizando el modelo mixto la variable aleatoria nos proporciona información adicional en el experimento, teniendo una estimación propia cada planta considerandose así una división entre efectos fijos y efectos aleatorios.
Como conclusiones de la comparación de los modelos en primer lugar, se observa una variación de la interpretación de los datos si se considera un modelos lineal simbre o un modelo lineal mixto. En segundo lugar, al considerarse un modelo mixto, se emplea una variable aleatoria que nos dara información adicional al otro modelo, siendo por un lado la discriminación por observaciones o individuos (en este caso la planta) llevandonos a una interpretación que tiene en cuenta las variación de la captación de CO2 por planta y no el promedio del grupo en general. Además, puede aplicarse el experimento en otros conceptos al contemplar una variación entre diferentes sujetos.Por ultimo, en experimentos relacionados con la agricultura resulta ventajoso utilizar un modelo mixto donde contemplen la variación por planta de los tratamientos ya que entendemos que las plantas se pueden comportar de manera diferente y entre más entendamos y registremos esta diferencia podremos entender la gama de variaciones que se puedan presentar en campo que puede como respuesta la aplicación de los tratamientos en determinados sujetos. De esta manera, se puede llegar a interpretaciones más contundentes referentes a diferentes problematicas de interes agronomico.
datos3=ChickWeight
datos3%>%length()
## [1] 4
datos3%>%unique()%>%length()
## [1] 4
ggplot(datos3, aes(x=Time, y=weight))+
geom_point(aes(color= Diet))+
geom_path(aes(color= Diet, group= Chick))
fit1_Poisson = glm(weight ~ Diet:Time, data = datos3, family = poisson)
fit2_Poisson = glmer(weight ~ Diet:Time + (1|Chick), data = datos3, family = poisson)
## Warning in checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, : Model is nearly unidentifiable: very large eigenvalue
## - Rescale variables?
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::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