MODELO LINEAL MIXTO

Para llevar a cabo el análisis se descargan las siguientes librerias:

library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.3.1
## Warning: package 'ggplot2' 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 ──
## ✔ dplyr     1.1.2     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ ggplot2   3.4.2     ✔ tibble    3.2.1
## ✔ lubridate 1.9.2     ✔ tidyr     1.3.0
## ✔ purrr     1.0.1     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ 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

1. CREACIÓN DE BASE DE DATOS

Se usa una base de datos preestablecida donde se tienen datos de la captación de CO2 de las plantas sometidas a 7 diferentes tipos de concentraciones de CO2 (95,150,250,350,500,675,1000) y a distintas temperaturas, que sería el tratamiento experimental (chilled y nonchilled). No obstante, se le introduce ruido a los datos con la función “runif”.

#Base de datos original.
data("CO2")
view(CO2)

#Ruido de los datos.
ruido <- runif(84,0.02,0.04)

#Variable con el ruido con la que se va a trabajar.

uptake2= CO2$uptake + ruido

datos = data.frame(CO2$Plant, CO2$Treatment, CO2$Type, CO2$conc, uptake2)
datos
##    CO2.Plant CO2.Treatment    CO2.Type CO2.conc   uptake2
## 1        Qn1    nonchilled      Quebec       95 16.038466
## 2        Qn1    nonchilled      Quebec      175 30.433421
## 3        Qn1    nonchilled      Quebec      250 34.834564
## 4        Qn1    nonchilled      Quebec      350 37.226392
## 5        Qn1    nonchilled      Quebec      500 35.328485
## 6        Qn1    nonchilled      Quebec      675 39.235105
## 7        Qn1    nonchilled      Quebec     1000 39.730434
## 8        Qn2    nonchilled      Quebec       95 13.633556
## 9        Qn2    nonchilled      Quebec      175 27.339666
## 10       Qn2    nonchilled      Quebec      250 37.121054
## 11       Qn2    nonchilled      Quebec      350 41.832767
## 12       Qn2    nonchilled      Quebec      500 40.633768
## 13       Qn2    nonchilled      Quebec      675 41.422844
## 14       Qn2    nonchilled      Quebec     1000 44.321721
## 15       Qn3    nonchilled      Quebec       95 16.224039
## 16       Qn3    nonchilled      Quebec      175 32.420252
## 17       Qn3    nonchilled      Quebec      250 40.330528
## 18       Qn3    nonchilled      Quebec      350 42.126811
## 19       Qn3    nonchilled      Quebec      500 42.920128
## 20       Qn3    nonchilled      Quebec      675 43.936873
## 21       Qn3    nonchilled      Quebec     1000 45.525696
## 22       Qc1       chilled      Quebec       95 14.235426
## 23       Qc1       chilled      Quebec      175 24.134800
## 24       Qc1       chilled      Quebec      250 30.337718
## 25       Qc1       chilled      Quebec      350 34.620581
## 26       Qc1       chilled      Quebec      500 32.531210
## 27       Qc1       chilled      Quebec      675 35.422487
## 28       Qc1       chilled      Quebec     1000 38.720335
## 29       Qc2       chilled      Quebec       95  9.338500
## 30       Qc2       chilled      Quebec      175 27.333540
## 31       Qc2       chilled      Quebec      250 35.020420
## 32       Qc2       chilled      Quebec      350 38.837153
## 33       Qc2       chilled      Quebec      500 38.626433
## 34       Qc2       chilled      Quebec      675 37.536330
## 35       Qc2       chilled      Quebec     1000 42.437641
## 36       Qc3       chilled      Quebec       95 15.136937
## 37       Qc3       chilled      Quebec      175 21.028653
## 38       Qc3       chilled      Quebec      250 38.139335
## 39       Qc3       chilled      Quebec      350 34.034995
## 40       Qc3       chilled      Quebec      500 38.931279
## 41       Qc3       chilled      Quebec      675 39.629196
## 42       Qc3       chilled      Quebec     1000 41.437804
## 43       Mn1    nonchilled Mississippi       95 10.621642
## 44       Mn1    nonchilled Mississippi      175 19.228127
## 45       Mn1    nonchilled Mississippi      250 26.234757
## 46       Mn1    nonchilled Mississippi      350 30.039172
## 47       Mn1    nonchilled Mississippi      500 30.930955
## 48       Mn1    nonchilled Mississippi      675 32.432354
## 49       Mn1    nonchilled Mississippi     1000 35.533045
## 50       Mn2    nonchilled Mississippi       95 12.026602
## 51       Mn2    nonchilled Mississippi      175 22.034150
## 52       Mn2    nonchilled Mississippi      250 30.626697
## 53       Mn2    nonchilled Mississippi      350 31.829506
## 54       Mn2    nonchilled Mississippi      500 32.428483
## 55       Mn2    nonchilled Mississippi      675 31.136885
## 56       Mn2    nonchilled Mississippi     1000 31.527150
## 57       Mn3    nonchilled Mississippi       95 11.327043
## 58       Mn3    nonchilled Mississippi      175 19.424919
## 59       Mn3    nonchilled Mississippi      250 25.838789
## 60       Mn3    nonchilled Mississippi      350 27.929741
## 61       Mn3    nonchilled Mississippi      500 28.530645
## 62       Mn3    nonchilled Mississippi      675 28.121267
## 63       Mn3    nonchilled Mississippi     1000 27.826076
## 64       Mc1       chilled Mississippi       95 10.536184
## 65       Mc1       chilled Mississippi      175 14.929098
## 66       Mc1       chilled Mississippi      250 18.128453
## 67       Mc1       chilled Mississippi      350 18.926850
## 68       Mc1       chilled Mississippi      500 19.535367
## 69       Mc1       chilled Mississippi      675 22.234847
## 70       Mc1       chilled Mississippi     1000 21.921293
## 71       Mc2       chilled Mississippi       95  7.722971
## 72       Mc2       chilled Mississippi      175 11.427182
## 73       Mc2       chilled Mississippi      250 12.325896
## 74       Mc2       chilled Mississippi      350 13.026802
## 75       Mc2       chilled Mississippi      500 12.520670
## 76       Mc2       chilled Mississippi      675 13.721461
## 77       Mc2       chilled Mississippi     1000 14.429965
## 78       Mc3       chilled Mississippi       95 10.628221
## 79       Mc3       chilled Mississippi      175 18.031431
## 80       Mc3       chilled Mississippi      250 17.922757
## 81       Mc3       chilled Mississippi      350 17.921374
## 82       Mc3       chilled Mississippi      500 17.927478
## 83       Mc3       chilled Mississippi      675 18.935650
## 84       Mc3       chilled Mississippi     1000 19.935284
#Variable aleatoria: Plant.
view(uptake2)

2. ANÁLISIS DESCRIPTIVO

#Grafica 
ggplot(CO2, aes(x = conc, y = uptake2, color = Type)) +
  geom_point(aes(shape = Treatment)) +
  geom_path(aes(group = Plant, lty = Treatment)) + 
  theme_bw()

La grafica muestra la captación de CO2 de cada planta al ser sometidas a diferentes concentraciones y a diferentes tratamientos (nonchilled y chilled), asimismo, se podría observar que en general las plantas chilled captaron menos CO2 en comparación con las plantas nonchilled. No obstante, se observa una diferencia entre lugares, donde, Quebec presenta plantas nonchilled con mayor captación de CO2.

Por otro lado, se observa una diferencia entre las plantas de Quebec y las plantas de Mississippi, en donde las de Quebec presentan una mayor captación de CO2 que las de Mississippi.

3. MODELO LINEAL VS MODELO LINEAL MIXTO

#NOTA: Como se tiene un modelo exponencial se usa la función (Log).

#Modelo lineal
Fit1 <- lm(uptake2 ~ I(log(conc)) + Type: Treatment, data = CO2)
summary(Fit1)
## 
## Call:
## lm(formula = uptake2 ~ I(log(conc)) + Type:Treatment, data = CO2)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -11.711  -2.890   0.587   2.762   8.882 
## 
## Coefficients: (1 not defined because of singularities)
##                                     Estimate Std. Error t value Pr(>|t|)    
## (Intercept)                         -33.5238     4.0768  -8.223 3.20e-12 ***
## I(log(conc))                          8.4832     0.6784  12.505  < 2e-16 ***
## TypeQuebec:Treatmentnonchilled       19.5203     1.4403  13.553  < 2e-16 ***
## TypeMississippi:Treatmentnonchilled  10.1399     1.4403   7.040 6.26e-10 ***
## TypeQuebec:Treatmentchilled          15.9420     1.4403  11.069  < 2e-16 ***
## TypeMississippi:Treatmentchilled          NA         NA      NA       NA    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4.667 on 79 degrees of freedom
## Multiple R-squared:  0.8227, Adjusted R-squared:  0.8138 
## F-statistic: 91.67 on 4 and 79 DF,  p-value: < 2.2e-16

Para analizar los modelos aleatorios se usa:

#Modelo lineal mixto
#Aleatorizar los datos, factor aleatorio (1| Plant).Esto hace que cada una de las plantas tenga un intercepto distinto.

Fit2 <- lmer(uptake2 ~ I(log(conc)) + Type : Treatment + (1 | Plant), data = CO2)
## fixed-effect model matrix is rank deficient so dropping 1 column / coefficient
summary(Fit2)
## Linear mixed model fit by REML ['lmerMod']
## Formula: uptake2 ~ I(log(conc)) + Type:Treatment + (1 | Plant)
##    Data: CO2
## 
## REML criterion at convergence: 482.3
## 
## Scaled residuals: 
##     Min      1Q  Median      3Q     Max 
## -2.6926 -0.5375  0.1045  0.6900  1.8943 
## 
## Random effects:
##  Groups   Name        Variance Std.Dev.
##  Plant    (Intercept)  2.162   1.47    
##  Residual             20.249   4.50    
## Number of obs: 84, groups:  Plant, 12
## 
## Fixed effects:
##                                     Estimate Std. Error t value
## (Intercept)                         -33.5238     4.0214  -8.336
## I(log(conc))                          8.4832     0.6541  12.970
## TypeQuebec:Treatmentnonchilled       19.5203     1.8357  10.634
## TypeMississippi:Treatmentnonchilled  10.1399     1.8357   5.524
## TypeQuebec:Treatmentchilled          15.9420     1.8357   8.685
## 
## Correlation of Fixed Effects:
##                (Intr) I(l()) TypQbc:Trtmntn TypM:T
## I(log(cnc))    -0.946                             
## TypQbc:Trtmntn -0.228  0.000                      
## TypMssssp:T    -0.228  0.000  0.500               
## TypQbc:Trtmntc -0.228  0.000  0.500          0.500
## fit warnings:
## fixed-effect model matrix is rank deficient so dropping 1 column / coefficient

La diferencia entre los interceptos indica que las plantas responden de manera distinta ante los tratamientos.

MODELO LINEAL.

broom::glance(Fit1)
## # A tibble: 1 × 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.
## # ℹ 3 more variables: deviance <dbl>, df.residual <int>, nobs <int>

Debido a que se tiene un modelo lineal se analiza el r-squared.Para decidir si es un buen modelo ajustado, el valor nos debe cercano a 1. En este caso, nuestro valor da 0.82, lo que se considera un buen ajuste lineal.

broom::tidy(Fit1)
## # A tibble: 6 × 5
##   term                                estimate std.error statistic   p.value
##   <chr>                                  <dbl>     <dbl>     <dbl>     <dbl>
## 1 (Intercept)                           -33.5      4.08      -8.22  3.20e-12
## 2 I(log(conc))                            8.48     0.678     12.5   2.04e-20
## 3 TypeQuebec:Treatmentnonchilled         19.5      1.44      13.6   2.60e-22
## 4 TypeMississippi:Treatmentnonchilled    10.1      1.44       7.04  6.26e-10
## 5 TypeQuebec:Treatmentchilled            15.9      1.44      11.1   9.83e-18
## 6 TypeMississippi:Treatmentchilled       NA       NA         NA    NA
#El tidy nos indica cual sera el estimador de cada uno de los factores.

Modelo lineal mixto

broom.mixed::glance(Fit2) 
## # A tibble: 1 × 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
#En este modelo no se tienen R cuadrados.
broom.mixed::tidy(Fit2)
## # A tibble: 7 × 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.84      10.6 
## 4 fixed    <NA>     TypeMississippi:Treatmentnonch…    10.1      1.84       5.52
## 5 fixed    <NA>     TypeQuebec:Treatmentchilled        15.9      1.84       8.68
## 6 ran_pars Plant    sd__(Intercept)                     1.47    NA         NA   
## 7 ran_pars Residual sd__Observation                     4.50    NA         NA

Se observa los valores de las interacciones para la columna estimate y se puede decir que se cumple con el análisis descriptivo, debido a que Quebec-nonchilled presenta mayor valor (19.52) y en la grafica concuerda con que son las plantas que más captan CO2. Por otro lado, Mississipi - nonchilled presentan menor valor (10.14) y en la grafica concuerda que captan menos CO2 en comparación con las de Quebec.

EFECTOS FIJOS GLMER.

data("ChickWeight")

#Total pollos
ChickWeight$Chick %>% length()
## [1] 578
#Tipos de pollos
ChickWeight$Chick %>% unique ()%>% length
## [1] 50
head(ChickWeight)
## Grouped Data: weight ~ Time | Chick
##   weight Time Chick Diet
## 1     42    0     1    1
## 2     51    2     1    1
## 3     59    4     1    1
## 4     64    6     1    1
## 5     76    8     1    1
## 6     93   10     1    1

NOTA: Como se tienen valores positivos en el peso y no se tiene decimales, por tal motivo, se podría analizar como un gml tipo poisson.

ggplot(ChickWeight, aes(x = Time, y = weight)) +
  geom_point(aes(color = Diet)) + 
  geom_path(aes(color = Diet, group = Chick))

Hay pollos donde a pesar de que se tienen dietas simialres tienen comportamientos distintos. Esto indica que si se tiene estas medidades repetitas se puede hacer un glmer.

#gml tipo poisson
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?
broom::tidy(Fit1_Poisson)
## # A tibble: 5 × 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 × 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

Se observan diferencias entre los modelos, porque, en el modelo lineal da un estimate del intercepto de 3.85 y cuando se aleatorizan la variable individuo en el modelo mixtose observaun ligero cambio de ese intercepto a 3.83.

Por otro lado, se observa que la identidad del pollo capta alguna variabilidad y esto genera que no sean iguales los modelos.

Para concluir si se toma en cuenta la variablidad entre individuos esto mejora el modelo, asimismo, cuando se toma la indentidad del pollo es necesario que se tenga más de una medida por cada individuo para poder hacer el modelo aleatorio.

CONCLUSIÓN:

Se usa el modelo lineal mixto porque se observa que la identidad de los individuos genera un cambio en los resultados, por esta razón, este modelo permite dividir entre variables fijas (controlados) y aleatorias (no controlados). En cambio, el modelo lineal solo toma en cuenta un efecto.

Ventajas en el uso del modelo lineal mixto en la agricultura

1) Con este modelo se pueden establecer datos con estrucutra jerarquica para poder observar niveles, que pueden ser parcelas, regiones, lotes, etc y así poder determinar los efectos fijos y los efectos aleatorios de cada nivel, por otro lado, este modelo permite modelar la variabilidad de otros factores no explicados dentro de nuestro modelo.

2) Es utilizado en programas de mejoramiento genético enfocado en tres direcciones: predicción del comportamiento familiar, estimación de componentes de varianza y ensayos multiambientales.