Tolerancia a cobre y zinc en una herbácea nativa (Tripogandra diuretica, Fl. Commelinaceae) y su implicancia en la restauración

Carusso, Sofia; Corti, Juan Facundo; Helman, Elisa; Lugones, Carlos

Introducción

Con el objetivo de evaluar el potencial rol fitorremediador de una herbácea nativa (Tripogandra diuretica, Fl. Commelinaceae), se analizarán diferentes modelos para evaluar su tolerancia a metales pesados (Cobre y Zinc). Para tal fin, se considerarán los modelos de Cobre y Zinc (por separado) que mejor ajusten y predigan la cantidad de hojas promedio semana a semana en cada tratamiento. Se considera la cantidad de hojas como variable respuesta puesto que se relaciona directamente con el buen desarrollo de la planta en estudio.

Variable Respuesta: Número de hojas (potencial distribución POISSON)

Variables Explicativas:

  • Tratamiento

    • Cualitativa, 5 niveles (control y dos niveles por cada metal en tierra).
    • De efectos fijos.
    • Cruzada con semana.
  • Numero de replica

    • Cualitativa, 25 niveles (cinco réplicas por cada tratamiento).
    • De efectos aleatorios
    • Anidada en tratamiento.
  • Semana

    • Cualitativa de 5 niveles.
    • De efectos fijos.
    • Cruzada con tratamiento

Cobre

Tabla 1

tabla=tableby(Tratamiento~Nhojas, strata = Semana, data = datos[datos$Tratamiento%in%c("Control","Cu250","Cu500"),])
summary(tabla, text=T)
Semana Control (N=150) Cu250 (N=150) Cu500 (N=150) Total (N=450) p value
1 Nhojas 0.336
- Mean (SD) 16.200 (1.495) 16.400 (1.773) 15.800 (1.495) 16.133 (1.595)
- Range 14.000 - 18.000 13.000 - 18.000 14.000 - 18.000 13.000 - 18.000
2 Nhojas < 0.001
- Mean (SD) 17.800 (1.186) 17.000 (1.287) 16.200 (0.407) 17.000 (1.218)
- Range 16.000 - 19.000 15.000 - 18.000 16.000 - 17.000 15.000 - 19.000
3 Nhojas 0.032
- Mean (SD) 22.400 (3.191) 20.000 (3.913) 21.000 (3.343) 21.133 (3.595)
- Range 19.000 - 28.000 16.000 - 26.000 18.000 - 25.000 16.000 - 28.000
4 Nhojas 0.235
- Mean (SD) 29.200 (4.612) 31.800 (7.029) 30.000 (6.136) 30.333 (6.041)
- Range 26.000 - 38.000 20.000 - 39.000 23.000 - 39.000 20.000 - 39.000
5 Nhojas 0.010
- Mean (SD) 35.200 (6.217) 39.800 (9.974) 40.800 (5.202) 38.600 (7.736)
- Range 26.000 - 45.000 22.000 - 50.000 34.000 - 49.000 22.000 - 50.000
cobre <- bd %>%
  filter(Tratamiento %in% c("Control", "Cu250","Cu500")) %>%
  mutate(Tratamiento=factor(Tratamiento))

cobre$Tratamiento <- droplevels(cobre$Tratamiento)

Gráficos descriptivos

Se realizaron gráficos de perfiles con la librería ggplot2 para describir la cantidad de hojas según el nivel de cobre en cada tratamiento y su evolución semana a semana.

cobre %>%
  group_by(Tratamiento) %>%
  ggplot(aes(Tratamiento,Nhojas)) +
  geom_point(aes(color=Tratamiento)) + facet_grid (. ~ Semana) +
  theme(axis.text.x  = element_text(vjust=0.5, size=10,angle=45 ))+
  ggtitle("Cantidad de hojas por réplica según tratamiento y por semana")+
  ylab("Cantidad de hojas")+ 
  scale_color_manual(values=c("#264653", "#e9c46a", "#e76f51"))

# Perfiles
cobre %>% 
  group_by(Tratamiento) %>% 
  ggplot(aes(as.numeric(Semana), Nhojas, color=Tratamiento)) +
  geom_smooth(se=TRUE) + xlab("Semana") + ylab("Número de hojas por planta")+
  ggtitle("Gráfico de perfiles de cantidad de hojas según tratamiento y semana",
          "Media (EE)")+ 
  scale_color_manual(values=c("#264653", "#e9c46a", "#e76f51"))

Modelo de Poisson

m1.cu <- glmmTMB(Nhojas ~ Tratamiento*Semana + (1|Replica), data = cobre, family = poisson)

Se ajustó un modelo de Poisson utilizando la librería glmmTMB. Se incluyeron como predictores al tratamiento y la semana, como así también su interacción. A su vez, se incluyó a la réplica como variable de efectos aleatorios.

Verificación de supuestos

Se utilizó la libraría DHARMa para el análisis de residuos. Esta librería utiliza un método basado en simulación para reescalar los residuos entre 0 y 1 a partir de los cuantiles.

Con estos residuos se evidenciaron problemas en los supuestos (e.g., distribución, dispersión).

# Parámetro de Dispersion 

e1 <- resid(m1.cu, type = "pearson")
n  <- nrow(cobre)
k  <- length(fixef(m1.cu)) + 1 #parametros estimados; se suma 1varianza(Num replicas)
dispersion <- sum(e1^2) / (n - k)

Por otro lado, la estimación del parámetro de dispersión arrojó un valor de 0.236, por lo que se considera que el modelo presenta subdispersión.

Modelo de Poisson con basal como covariable

Se decidió probar el funcionamiento de un modelo en el que se controle el nivel basal de la cantidad de hojas en cada grupo, considerando ese nivel como una covariable predictora más.

cobre_wide <- spread(cobre, Semana, Nhojas)
tiempos <-cobre_wide[3:7]
colnames(tiempos) <- c("Semana 1","Semana 2","Semana 3","Semana 4","Semana 5")

ggpairs(tiempos) 

#Heatmap
ggcorr(tiempos, label = TRUE, label_size = 3,limits = FALSE, midpoint = NULL, label_round = 2) #heatmap

keycol <- "Semana"
valuecol <- "Nhojas"
gathercols <- c("2", "3", "4", "5")
cobre_medrep <- gather_(cobre_wide, keycol, valuecol, gathercols)

# Renombro col 1 como Basal
names(cobre_medrep)[names(cobre_medrep) == "1"] <- "Basal"

# Con cualquiera de las dos libreraias vale, glmmTMB es mas robusta creo 
m1.cu_basal <- glmmTMB(Nhojas ~ Tratamiento*Semana+Basal + (1|Replica) , data = cobre_medrep, family = poisson)

Verificación de supuestos

Se volvió a utilizar la libraría DHARMa para el análisis de residuos.

A partir del análisis gráfico de los residuos de este modelo también se evidenciaron problemas en los supuestos.

#  Parámetro de Dispersion 

e1 <- resid(m1.cu_basal, type = "pearson")
n  <- nrow(cobre_medrep)
k  <- length(fixef(m1.cu_basal)) + 1 #parametros estimados; se suma 1varianza(Num replicas)
dispersion <- sum(e1^2) / (n - k)

Por otro lado, la estimación del parámetro de dispersión arrojó un valor de 0.419, por lo que mejora respecta del modelo anterior, pero no demasiado.

La diferencia en el AIC entre el primer modelo (446.48) y el segundo (356.09) es de 90.39, por lo que el modelo con el nivel basal como predictor ajusta mejor.

Conway y Maxwell: Cuasi modelo de Poisson

Para resolver la subdispersión se decidió ajustar el cuasi modelo poisson de Conway y Maxwell. Se repitió el análisis con y sin el nivel basal de cantidad de hojas.

# Sin basal 

m2.cu <- glmmTMB(Nhojas ~ Tratamiento*Semana + (1|Replica), data = cobre, family = compois, REML = TRUE)


# Sacando basal
m2.cu_basal <- glmmTMB(Nhojas ~ Tratamiento*Semana+Basal + (1|Replica), data = cobre_medrep, family = compois, REML = TRUE)

Verificación de supuestos

Semanas con los 5 niveles

# Con DHARMA

simulationOutput <- simulateResiduals(m2.cu)
plot(simulationOutput)

hist(simulationOutput)

e1 <- resid(m2.cu, type = "pearson")
n  <- nrow(cobre)
k  <- length(fixef(m2.cu)) + 1 #parametros estimados; se suma 1varianza(Num replicas)
dispersion <- sum(e1^2) / (n - k)

Los supuestos mejoran ampliamente en ese modelo. Por otro lado, el parámetro de dispersión también mejora (ϕ = 0.682).

Nivel basal como covariable

# Con DHARMA

simulationOutput <- simulateResiduals(m2.cu_basal)
plot(simulationOutput)

hist(simulationOutput)

e1 <- resid(m2.cu_basal, type = "pearson")
n  <- nrow(cobre_medrep)
k  <- length(fixef(m2.cu_basal)) + 1 #parametros estimados; se suma 1varianza(Num replicas)
dispersion <- sum(e1^2) / (n - k)

La estimación del parámentro de dispersión también mejora (ϕ = 0.674). Sin embargo, la estructura de residuos no permite suponer linealidad.

Selección de modelo por LOOCV

Se calculó el error cuadrático medio mediante la técnica Leave-one-out cross-validation para los dos últimos modelos y así seleccionar el modelo que prediga de forma más robusta la cantidad de hojas por réplica a partir del tratamiento y la semana. Para ello, se ajustó el modelo con todas las observaciones excepto una y se comparó la cantidad de hojas en ese tratamiento en esa semana con la predicción realizada a partir del modelo. Este proceso se repitió para todos tratamientos y todas las semanas. Luego se promedió este error cuadrático. El modelo que mejor ajuste será aquel que tenga un menor error cuadrático medio.

# cinco semanas
ec <- c()

for(i in levels(droplevels(cobre$Replica))){
  for(j in levels(droplevels(cobre$Semana))){
    
    cobre.loocv <- glmmTMB(Nhojas ~ Tratamiento*Semana + (1|Replica), data = cobre[cobre$Replica!=i|cobre$Semana!=j,], family = compois, REML = TRUE)
    
    ec <- c(ec,(predict(cobre.loocv, newdata = cobre[cobre$Replica==i&cobre$Semana==j,])-cobre$Nhojas[cobre$Replica==i&cobre$Semana==j])^2)

  }
}

ecm <- mean(ec)




# sacando basal
cobre_medrep$Semana <- as.factor(cobre_medrep$Semana)

ec_basal <- c()

for(i in levels(droplevels(cobre_medrep$Replica))){
  for(j in levels(droplevels(cobre_medrep$Semana))){
    
    cobre.loocv <- glmmTMB(Nhojas ~ Tratamiento*Semana+Basal + (1|Replica), data = cobre_medrep[cobre_medrep$Replica!=i|cobre_medrep$Semana!=j,], family = compois, REML = TRUE)
    
    ec_basal <- c(ec_basal,(predict(cobre.loocv, newdata = cobre_medrep[cobre_medrep$Replica==i&cobre_medrep$Semana==j,])-cobre_medrep$Nhojas[cobre_medrep$Replica==i&cobre_medrep$Semana==j])^2)

  }
}


ecm_basal <- mean(ec_basal)

El error cuadrático medio del modelo sin controlar por el nivel basal de hojas por réplica (ECM = 552.41) fue menor que aquel obtenido controlando por dicho nivel (ECM = 645.3).

Conclusión: Dados estos análisis, se decide avanzar con el modelo de Conway y Maxwell sin controlar por el nivel basal.

Interpretación del modelo

tabla <- kable(as.data.frame(car::Anova(m2.cu)))%>%
   add_header_above(c("Tabla de Análisis de la Varianza" = 4))

for(i in 1:nrow(car::Anova(m2.cu))){
  if(car::Anova(m2.cu)$`Pr(>Chisq)`[i]<.05){
    tabla <- row_spec(tabla,i,background = "#94ccd4", bold = T)
  }
}
tabla
Tabla de Análisis de la Varianza
Chisq Df Pr(>Chisq)
Tratamiento 0.0636618 2 0.9686704
Semana 916.9040271 4 0.0000000
Tratamiento:Semana 15.5814436 8 0.0487781

El análisis de la varianza indica que tanto la semana como la interacción con el tratamiento resultaron significativas, pero no el tratamiento de forma independiente.

Las comparaciones de Dunnett de cada tratamiento vs. control indicaron que no habría diferencias significativas en ninguna de las semanas para ninguno de los dos niveles de cobre.

# Dunnett Comparacion contra control EN CADA SEMANA
comp2 <- emmeans(m2.cu, specs = trt.vs.ctrl ~ Tratamiento|Semana, ref = 1,type="response")
tabla <- kable(summary(comp2$contrasts))

for(i in 1:nrow(summary(comp2$contrasts))){
  if(summary(comp2$contrasts)$p.value[i]<.05){
    tabla <- row_spec(tabla,i,background = "#94ccd4", bold = T)
  }
}
tabla
contrast Semana ratio SE df null t.ratio p.value
Cu250 / Control 1 1.0019402 0.1274262 73 1 0.0152409 0.9994516
Cu500 / Control 1 0.9744070 0.1243172 73 1 -0.2032109 0.9602640
Cu250 / Control 2 0.9451153 0.1188085 73 1 -0.4490438 0.8511473
Cu500 / Control 2 0.9090803 0.1147537 73 1 -0.7551409 0.6652794
Cu250 / Control 3 0.8837193 0.1075734 73 1 -1.0155081 0.4982100
Cu500 / Control 3 0.9365462 0.1135295 73 1 -0.5407987 0.7992221
Cu250 / Control 4 1.0780750 0.1249584 73 1 0.6485872 0.7333982
Cu500 / Control 4 1.0264268 0.1193325 73 1 0.2243555 0.9530694
Cu250 / Control 5 1.1193260 0.1269288 73 1 0.9940844 0.5115756
Cu500 / Control 5 1.1578446 0.1311104 73 1 1.2942822 0.3383795

Gráficos

# Medias con IC
gfxcomp.cu <-as.data.frame(comp2$emmeans)


ggplot(gfxcomp.cu, aes(Tratamiento, y=response)) + 
  geom_errorbar(aes(ymin=lower.CL, ymax=upper.CL,colour = factor(gfxcomp.cu$Semana)), width=.1) +
  geom_point(aes(colour = factor(gfxcomp.cu$Semana)), size = 4)+ ylab("Numero de hojas predichas por replica") + 
  xlab("Tratamiento") +
  theme_grey(base_size = 10) +  
  ggtitle("Número de hojas predichas según semana en cada tratamiento",
          "Media (EE)") + guides(color=guide_legend("Numero de hojas\nen c/semana"))+
  theme(axis.text.x  = element_text(vjust=0.5, size=10,angle=0, ))+ 
  scale_color_manual(values=c("#264653", "#2a9d8f", "#e9c46a", "#f4a261", "#e76f51"))

ggplot(gfxcomp.cu, aes(Semana, y=response)) + 
  geom_errorbar(aes(ymin=lower.CL, ymax=upper.CL,colour = factor(gfxcomp.cu$Tratamiento)), width=.1) +
  geom_point(aes(colour = factor(gfxcomp.cu$Tratamiento)), size = 4)+ ylab("Numero de hojas predichas por replica") + 
  xlab("Semana") +
  theme_grey(base_size = 16) +  
  ggtitle("Número de hojas predichas según tratamientos en cada semana",
          "Media (EE)") + guides(color=guide_legend("Numero de hojas\nsegún tratamiento"))+
  theme(plot.title = element_text(size = 12),
        plot.subtitle = element_text(size = 10),
        axis.title = element_text(size=12),
        legend.title = element_text(size=12),
    axis.text.x  = element_text(vjust=0.5, size=10))+ 
  scale_color_manual(values=c("#264653", "#e9c46a", "#e76f51"))

Zinc

Tabla 2

datos$Tratamiento <- factor(datos$Tratamiento, levels = c("Control","Zn500","Zn1700","Cu250","Cu500"))

tabla=tableby(Tratamiento~Nhojas, strata = Semana, data = datos[datos$Tratamiento%in%c("Control","Zn500","Zn1700"),])
kable(summary(tabla, text=T))
Semana Control (N=150) Zn500 (N=150) Zn1700 (N=150) Total (N=450) p value
1 Nhojas < 0.001
  • Mean (SD)
16.200 (1.495) 15.200 (1.186) 16.400 (1.037) 15.933 (1.347)
  • Range
14.000 - 18.000 14.000 - 17.000 15.000 - 18.000 14.000 - 18.000
2 Nhojas 0.025
  • Mean (SD)
17.800 (1.186) 17.200 (1.495) 17.000 (0.643) 17.333 (1.199)
  • Range
16.000 - 19.000 16.000 - 20.000 16.000 - 18.000 16.000 - 20.000
3 Nhojas 0.088
  • Mean (SD)
22.400 (3.191) 24.400 (2.621) 22.600 (5.170) 23.133 (3.884)
  • Range
19.000 - 28.000 22.000 - 28.000 17.000 - 31.000 17.000 - 31.000
4 Nhojas < 0.001
  • Mean (SD)
29.200 (4.612) 37.600 (4.621) 33.200 (8.640) 33.333 (7.079)
  • Range
26.000 - 38.000 33.000 - 45.000 23.000 - 47.000 23.000 - 47.000
5 Nhojas < 0.001
  • Mean (SD)
35.200 (6.217) 47.800 (3.934) 50.200 (5.732) 44.400 (8.492)
  • Range
26.000 - 45.000 42.000 - 54.000 42.000 - 59.000 26.000 - 59.000
zinc <- bd %>%
  filter(Tratamiento %in% c("Control","Zn500","Zn1700")) %>%
  mutate(Tratamiento=factor(Tratamiento))

zinc$Tratamiento <- factor(zinc$Tratamiento, levels = c("Control","Zn500","Zn1700"))

Gráficos descriptivos

Se realizaron gráficos de perfiles con la librería ggplot2 para describir la cantidad de hojas según el nivel de zinc en cada tratamiento y su evolución semana a semana.

zinc %>%
  group_by(Tratamiento) %>%
  ggplot(aes(Tratamiento,Nhojas)) +
  geom_point(aes(color=Tratamiento)) + facet_grid (. ~ Semana) +
  theme(axis.text.x  = element_text(vjust=0.5, size=10,angle=45 ))+
  ggtitle("Número de hojas según semana en cada tratamiento")+
  ylab("Cantidad de hojas")+ 
  scale_color_manual(values=c("#264653", "#e9c46a", "#e76f51"))

# Perfiles
zinc %>% 
  group_by(Tratamiento) %>% 
  ggplot(aes(as.numeric(Semana), Nhojas, color=Tratamiento)) +
  geom_smooth(se=TRUE) + xlab("Semana") + ylab("Número de hojas por planta")+
  ggtitle("Número de hojas según tratamientos en cada semana",
          "Media (EE)")+ 
  scale_color_manual(values=c("#264653", "#e9c46a", "#e76f51"))

Modelo de Poisson

m1.zn <- glmmTMB(Nhojas ~ Tratamiento*Semana + (1|Replica), data = zinc, family = poisson)

Se ajustó un modelo de Poisson utilizando la librería glmmTMB. Se incluyeron como predictores al tratamiento y la semana, como así también su interacción. A su vez, se incluyó a la réplica como variable de efectos aleatorios.

Verificación de supuestos

También para los modelos de Zinc se utilizó la libraría DHARMa para el análisis de residuos.

Con estos residuos también se evidenciaron problemas en los supuestos.

# dispersion
e1 <- resid(m1.zn, type = "pearson")
n  <- nrow(zinc)
k  <- length(fixef(m1.zn)) + 1 #parametros estimados; se suma 1varianza(Num replicas)
dispersion <- sum(e1^2) / (n - k)

Por otro lado, la estimación del parámetro de dispersión arrojó un valor de 0.347, por lo que se considera que el modelo presenta subdispersión.

Modelo de Poisson con basal como covariable

Se decidió probar el funcionamiento de un modelo en el que se controle el nivel basal de la cantidad de hojas en cada grupo, considerando ese nivel como una covariable predictora más.

zinc_wide <- spread(zinc, Semana, Nhojas)
tiempos <-zinc_wide[3:7]
colnames(tiempos) <- c("Semana 1","Semana 2","Semana 3","Semana 4","Semana 5")

ggpairs(tiempos) 

#Heatmap
ggcorr(tiempos, label = TRUE, label_size = 3,limits = FALSE, midpoint = NULL, label_round = 2) #heatmap

keycol <- "Semana"
valuecol <- "Nhojas"
gathercols <- c("2", "3", "4", "5")
zinc_medrep <- gather_(zinc_wide, keycol, valuecol, gathercols)

# Renombro col 1 como Basal
names(zinc_medrep)[names(zinc_medrep) == "1"] <- "Basal"

# Con cualquiera de las dos libreraias vale, glmmTMB es mas robusta creo 
m1.zn_basal <- glmmTMB(Nhojas ~ Tratamiento*Semana+Basal + (1|Replica) , data = zinc_medrep, family = poisson)

Verificación de supuestos

Nuevamente, los residuos a partir de simulaciones presentaron problemas.

# Dispersion 

e1 <- resid(m1.zn_basal, type = "pearson")
n  <- nrow(zinc_medrep)
k  <- length(fixef(m1.zn_basal)) + 1 #parametros estimados; se suma 1varianza(Num replicas)
dispersion <- sum(e1^2) / (n - k)

Por otro lado, la estimación del parámetro de dispersión arrojó un valor de 0.33, por lo que empeora respecta del modelo anterior, pero no demasiado.

La diferencia en el AIC entre el primer modelo (447) y el segundo (369.74) es de 77.25, por lo que el modelo con el nivel basal como predictor ajusta mejor.

Conway y Maxwell: Cuasi modelo de Poisson

Para resolver la subdispersión se decidió ajustar el cuasi modelo poisson de Conway y Maxwell. Se repitió el análisis con y sin el nivel basal de cantidad de hojas.

# Sin basal 

m2.zn <- glmmTMB(Nhojas ~ Tratamiento*Semana + (1|Replica), data = zinc, family = compois, REML = TRUE)


# En este caso es habiendo sacado el basal 
# Presten atencion a que cuando se saca el basal, los datos tienen que estar en el 
# formato del dataset cobre_medrep

m2.zn_basal <- glmmTMB(Nhojas ~ Tratamiento*Semana+Basal + (1|Replica), data = zinc_medrep, family = compois, REML = TRUE)

Verificación de supuestos

Semanas con los 5 niveles

# Con DHARMA

simulationOutput <- simulateResiduals(m2.zn)
plot(simulationOutput)

hist(simulationOutput)

e1 <- resid(m2.zn, type = "pearson")
n  <- nrow(zinc)
k  <- length(fixef(m2.zn)) + 1 #parametros estimados; se suma 1varianza(Num replicas)
dispersion <- sum(e1^2) / (n - k)

Los supuestos mejoran ampliamente en ese modelo. Por otro lado, el parámetro de dispersión también mejora (ϕ = 0.705).

Nivel basal como covariable

# Con DHARMA

simulationOutput <- simulateResiduals(m2.zn_basal)
plot(simulationOutput)

hist(simulationOutput)

e1 <- resid(m2.zn_basal, type = "pearson")
n  <- nrow(zinc_medrep)
k  <- length(fixef(m2.zn_basal)) + 1 #parametros estimados; se suma 1varianza(Num replicas)
dispersion <- sum(e1^2) / (n - k)

La estimación del parámentro de dispersión también mejora (ϕ = 0.667), pero no tanto como en el modelo con los cinco niveles en la variable Semana. El resto de los supuestos también mejoran.

Selección de modelo por LOOCV

Se calculó el error cuadrático medio mediante la técnica Leave-one-out cross-validation para los dos últimos modelos y así seleccionar el modelo que prediga de forma más robusta la cantidad de hojas por réplica a partir del tratamiento y la semana.

# cinco semanas
ec <- c()

for(i in levels(droplevels(zinc$Replica))){
  for(j in levels(droplevels(zinc$Semana))){
    
    zinc.loocv <- glmmTMB(Nhojas ~ Tratamiento*Semana + (1|Replica), data = zinc[zinc$Replica!=i|zinc$Semana!=j,], family = compois, REML = TRUE)
    
    ec <- c(ec,(predict(zinc.loocv, newdata = zinc[zinc$Replica==i&zinc$Semana==j,])-zinc$Nhojas[zinc$Replica==i&zinc$Semana==j])^2)

  }
}

ecm <- mean(ec)

# sacando basal
zinc_medrep$Semana <- as.factor(zinc_medrep$Semana)

ec_basal <- c()

for(i in levels(droplevels(zinc_medrep$Replica))){
  for(j in levels(droplevels(zinc_medrep$Semana))){
    
    zinc.loocv <- glmmTMB(Nhojas ~ Tratamiento*Semana+Basal + (1|Replica), data = zinc_medrep[zinc_medrep$Replica!=i|zinc_medrep$Semana!=j,], family = compois, REML = TRUE)
    
    ec_basal <- c(ec_basal,(predict(zinc.loocv, newdata = zinc_medrep[zinc_medrep$Replica==i&zinc_medrep$Semana==j,])-zinc_medrep$Nhojas[zinc_medrep$Replica==i&zinc_medrep$Semana==j])^2)

  }
}


ecm_basal <- mean(ec_basal)

El error cuadrático medio del modelo sin controlar por el nivel basal de hojas por réplica (ECM = 691.73) fue menor que aquel obtenido controlando por dicho nivel (ECM = 820.73).

Conclusión: Dados estos análisis, se decide avanzar con el modelo de Conway y Maxwell sin controlar por el nivel basal.

Interpretación del modelo

tabla <- kable(as.data.frame(car::Anova(m2.zn)))%>%
   add_header_above(c("Tabla de Análisis de la Varianza" = 4))

for(i in 1:nrow(car::Anova(m2.zn))){
  if(car::Anova(m2.zn)$`Pr(>Chisq)`[i]<.05){
    tabla <- row_spec(tabla,i,background = "#94ccd4", bold = T)
  }
}
tabla
Tabla de Análisis de la Varianza
Chisq Df Pr(>Chisq)
Tratamiento 5.421345 2 0.0664921
Semana 951.420357 4 0.0000000
Tratamiento:Semana 34.983223 8 0.0000269

El análisis de la varianza indica que tanto la semana como la interacción con el tratamiento resultaron significativas, pero la significación del tratamiento fue marginal.

Las comparaciones de Dunnett de cada tratamiento vs. control indicaron que no habría diferencias significativas en ninguna de las semanas para ninguno de los dos niveles de cobre.

# Dunnett Comparacion contra control EN CADA SEMANA
comp2 <- emmeans(m2.zn, specs = trt.vs.ctrl ~ Tratamiento|Semana, ref = 1,type="response")
tabla <- kable(summary(comp2$contrasts))

for(i in 1:nrow(summary(comp2$contrasts))){
  if(summary(comp2$contrasts)$p.value[i]<.05){
    tabla <- row_spec(tabla,i,background = "#94ccd4", bold = T)
  }
}
tabla
contrast Semana ratio SE df null t.ratio p.value
Zn500 / Control 1 0.9406353 0.1066125 73 1 -0.5399619 0.7997152
Zn1700 / Control 1 1.0109211 0.1131882 73 1 0.0970110 0.9885043
Zn500 / Control 2 0.9688918 0.1060740 73 1 -0.2886594 0.9283717
Zn1700 / Control 2 0.9538501 0.1046388 73 1 -0.4307029 0.8609394
Zn500 / Control 3 1.0920641 0.1099188 73 1 0.8749881 0.5875542
Zn1700 / Control 3 1.0078373 0.1024948 73 1 0.0767643 0.9922176
Zn500 / Control 4 1.2909666 0.1193369 73 1 2.7627796 0.0140511
Zn1700 / Control 4 1.1357350 0.1063692 73 1 1.3590058 0.3059328
Zn500 / Control 5 1.3613871 0.1203340 73 1 3.4902310 0.0016210
Zn1700 / Control 5 1.4243317 0.1254086 73 1 4.0171895 0.0002806

Gráficos

# Medias con IC
gfxcomp.zn <-as.data.frame(comp2$emmeans)


ggplot(gfxcomp.zn, aes(factor(Tratamiento, levels = c("Control","Zn500","Zn1700")), y=response)) + 
  geom_errorbar(aes(ymin=lower.CL, ymax=upper.CL,colour = factor(gfxcomp.zn$Semana)), width=.1) +
  geom_point(aes(colour = factor(gfxcomp.zn$Semana)), size = 4)+ ylab("Numero de hojas predichas por replica") + 
  xlab("Tratamiento") +
  theme_grey(base_size = 10) +  ggtitle("Número de hojas predichas según semana en cada tratamiento","Media (EE)") + guides(color=guide_legend("Numero de hojas\nen cada semana"))+
  theme(axis.text.x  = element_text(vjust=0.5, size=12,angle=0))+ 
  scale_color_manual(values=c("#264653", "#2a9d8f", "#e9c46a", "#f4a261", "#e76f51"))

ggplot(gfxcomp.zn, aes(Semana, y=response)) + 
  geom_errorbar(aes(ymin=lower.CL, ymax=upper.CL,colour = factor(gfxcomp.zn$Tratamiento, levels = c("Control","Zn500","Zn1700"))), width=.1) +
  geom_point(aes(colour = factor(gfxcomp.zn$Tratamiento, levels = c("Control","Zn500","Zn1700"))), size = 4)+ ylab("Numero de hojas predichas por replica") + 
  xlab("Semana") +
  theme_grey(base_size = 16) +  ggtitle("Número de hojas predichas según tratamientos en cada semana", "Media (EE)") + guides(color=guide_legend("Numero de hojas\nsegún tratamiento"))+
  theme(plot.title = element_text(size = 12),
        plot.subtitle = element_text(size = 10),
        axis.title = element_text(size=12),
        legend.title = element_text(size=12),
        axis.text.x  = element_text(vjust=0.5, size=10))+ 
  scale_color_manual(values=c("#264653", "#e9c46a", "#e76f51"))

Conclusiones

Dados los resultados obtenidos con los modelos que mejor ajustaron se concluye que en el caso de cobre no se encontraron diferencias significativas en cantidad de hojas por réplica de acuerdo al nivel de contaminación de la tierra por este metal. Es decir, tripogandra diuretica tendría buena tolerancia a la contaminación por cobre.

En el caso del zinc, sí se encontraron diferencias significativas, pero no en la dirección esperada. Ambos tratamientos con contaminación por zinc obtuvieron un promedio de hojas por réplica mayor al control, como si esta condición favoreciera su crecimiento. Se requiere especial atención a este resultado en la discusión y líneas futuras de investigación.