Explicación del dataframe ants: Este dataframe presenta datos sobre la Riqueza de Especies de Hormigas en Nueva Inglaterra. Se han realizado estudios para evaluar cuántas especies de hormigas existen en distintos tipos de hábitats, como pantanos y bosques.
Los datos analizados provienen de muestreos realizados en 44 sitios diferentes en Nueva Inglaterra, específicamente en los estados de Connecticut, Massachusetts y Vermont. Estos muestreos se llevaron a cabo en cuadrantes de 64 metros cuadrados y se centraron en 22 pantanos y 22 bosques.
El conjunto de datos ants incluye cinco variables clave:
Site: Abreviatura del nombre del sitio donde se recolectaron los datos. Srich: Riqueza de especies, que indica cuántas especies de hormigas se encontraron en cada sitio. Habitat: Tipo de hábitat (pantano (Bog) o bosque (Forest)). Latitude: Latitud en grados decimales del sitio de muestreo. Elevation: Elevación en metros sobre el nivel del mar del sitio.
La investigación sobre la riqueza de especies de hormigas es esencial para comprender la biodiversidad de los ecosistemas y el impacto de factores como el hábitat, la latitud y la elevación en la diversidad de especies. Este estudio en Nueva Inglaterra ofrece datos importantes sobre la distribución de hormigas en diferentes hábitats y cómo los factores ambientales influyen en su diversidad, lo que contribuye al conocimiento ecológico y a la conservación y manejo de los ecosistemas.
#A1. Cargar Librerías y Datos:
suppressPackageStartupMessages(library(dplyr))
suppressPackageStartupMessages(library(ggplot2))
suppressPackageStartupMessages(library(GLMsData))
suppressPackageStartupMessages(library(car))
suppressPackageStartupMessages(library(MASS, exclude = "select"))
suppressPackageStartupMessages(library(DescTools))
# Cargar la base de datos
data(ants) # Asegúrate de que la base de datos esté disponible
glimpse(ants)
Rows: 44
Columns: 5
$ Site <fct> TPB, HBC, CKB, SKP, CB, RP, PK, OB, SWR, ARC, BH, QP, HAW, W…
$ Srich <int> 6, 16, 18, 17, 9, 15, 7, 12, 14, 9, 10, 10, 4, 5, 7, 7, 4, 6…
$ Habitat <fct> Forest, Forest, Forest, Forest, Forest, Forest, Forest, Fore…
$ Latitude <dbl> 41.97, 42.00, 42.03, 42.05, 42.05, 42.17, 42.19, 42.23, 42.2…
$ Elevation <int> 389, 8, 152, 1, 210, 78, 47, 491, 121, 95, 274, 335, 543, 32…
CONCLUSIONES
El dataframe tiene 44 filas y 5 columnas.
Diversidad de sitios (Site): el conjunto de datos incluye varios sitios (TPB, HBC, CKB, etc.), lo que indica una amplia gama de ubicaciones para el estudio, todos identificados como con hábitats forestales. A continuacion se coloca su abreviatura y nombre.
Abreviatura | Nombre del Sitio |
---|---|
TPB | Tully Pond Bog |
HBC | Hockanum Bog |
CKB | Cockaponset Bog |
SKP | Skippack |
CB | Cedar Bog |
RP | Rocky Point |
PK | Pine Knoll |
OB | Oak Bog |
SWR | Swamp River |
ARC | Arcadia |
BH | Barlow Hollow |
QP | Quinebaug Pond |
HAW | Hawley |
WIN | Windsor |
SPR | Spring Hill |
SNA | Snafu |
PEA | Pease |
CHI | Chimney Hill |
MOL | Molasses Swamp |
COL | Cold Spring |
MOO | Moosup |
CAR | Carver |
Riqueza de especies: La columna “Riqueza de especies” muestra la riqueza de especies en diferentes sitios, que varía desde un mínimo de 6 hasta un máximo de 18. Esto sugiere diferentes niveles de biodiversidad en diferentes ubicaciones.
Distribución geográfica: Los valores de latitud indican que todos los sitios están relativamente cerca unos de otros, lo que sugiere que podrían compartir condiciones climáticas y ecológicas similares.
Variación de elevación: La columna “Elevación” muestra un rango significativo (de 1 a 491 metros), que podría influir en la composición y riqueza de especies en cada sitio.
Correlaciones potenciales: analizar la relación entre la riqueza de especies, la elevación y la latitud podría proporcionar información sobre cómo estos factores afectan la biodiversidad en las áreas forestales.
# Crear un vector con nombres únicos
unique_names <- make.unique(as.character(ants$Site))
# Asigna los nombres únicos como nombres de fila
rownames(ants) <- unique_names
# Luego, elimina la columna 'Site'
ants$Site <- NULL
head(ants)
Srich Habitat Latitude Elevation
TPB 6 Forest 41.97 389
HBC 16 Forest 42.00 8
CKB 18 Forest 42.03 152
SKP 17 Forest 42.05 1
CB 9 Forest 42.05 210
RP 15 Forest 42.17 78
# Convertir Variables
ants$Habitat <- ifelse(ants$Habitat == "Forest", 1, 0) # 1 para "Forest", 0 para "Bog"
head(ants)
Srich Habitat Latitude Elevation
TPB 6 1 41.97 389
HBC 16 1 42.00 8
CKB 18 1 42.03 152
SKP 17 1 42.05 1
CB 9 1 42.05 210
RP 15 1 42.17 78
# Crear modelo inicial de Poisson
modelo_poi_ants <- glm(Srich ~ ., data = ants, family = poisson(link='log')); summary(modelo_poi_ants)
Call:
glm(formula = Srich ~ ., family = poisson(link = "log"), data = ants)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 11.936812 2.621497 4.55 5.3e-06 ***
Habitat 0.635439 0.119566 5.31 1.1e-07 ***
Latitude -0.235793 0.061664 -3.82 0.00013 ***
Elevation -0.001141 0.000375 -3.04 0.00234 **
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for poisson family taken to be 1)
Null deviance: 102.76 on 43 degrees of freedom
Residual deviance: 40.69 on 40 degrees of freedom
AIC: 209
Number of Fisher Scoring iterations: 4
# Crear modelo de regresión binomial negativa
modelo_nb_ants <- glm.nb(Srich ~ ., data = ants); summary(modelo_nb_ants)
Warning in theta.ml(Y, mu, sum(w), w, limit = control$maxit, trace =
control$trace > : iteration limit reached
Warning in theta.ml(Y, mu, sum(w), w, limit = control$maxit, trace =
control$trace > : iteration limit reached
Call:
glm.nb(formula = Srich ~ ., data = ants, init.theta = 37888.17088,
link = log)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 11.936677 2.621721 4.55 5.3e-06 ***
Habitat 0.635435 0.119578 5.31 1.1e-07 ***
Latitude -0.235790 0.061669 -3.82 0.00013 ***
Elevation -0.001141 0.000375 -3.04 0.00234 **
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for Negative Binomial(37888) family taken to be 1)
Null deviance: 102.743 on 43 degrees of freedom
Residual deviance: 40.682 on 40 degrees of freedom
AIC: 211
Number of Fisher Scoring iterations: 1
Theta: 37888
Std. Err.: 1681590
Warning while fitting theta: iteration limit reached
2 x log-likelihood: -201
Modelo de Regresión Binomial Negativa:
Srich = 11.936677 + 0.635435 * Habitat - 0.235790 * Latitude - 0.001141 * Elevation
Modelo de Regresión Poisson:
Srich = 11.936812 + 0.635439 * Habitat - 0.235793 * Latitude - 0.001141 * Elevation
Comparación de Modelos
Característica | Modelo de Poisson | Modelo Binomial Negativo |
---|---|---|
Llamada | glm(formula = Srich ~ ., family = poisson(link = "log"), data = ants) |
glm.nb(formula = Srich ~ ., data = ants) |
Intercepto | 11.936812 (p < 0.001) | 11.936677 (p < 0.001) |
Habitat | 0.635439 (p < 0.001) | 0.635435 (p < 0.001) |
Latitud | -0.235793 (p < 0.001) | -0.235790 (p < 0.001) |
Elevación | -0.001141 (p = 0.002) | -0.001141 (p = 0.002) |
Parámetro de Dispersión | 1 (suponido) | 37888 (estimado) |
Desviación Nula | 102.76 | 102.743 |
Desviación Residual | 40.69 | 40.682 |
AIC | 209 | 211 |
Iteraciones de Fisher | 4 | 1 |
Advertencias | Ninguna | Límite de iteración alcanzado |
Log-verosimilitud | -204.5 | -201 |
Significancia de Coeficientes: Ambos modelos
presentan coeficientes significativos para las variables explicativas,
indicando que el hábitat, la latitud y la elevación tienen efectos sobre
la riqueza de especies (Srich
).
AIC y Ajuste: Aunque el AIC del modelo de Poisson es más bajo (209) que el del modelo binomial negativo (211), esto no necesariamente indica un mejor ajuste, especialmente si hay sobredispersión en los datos.
Parámetro de Dispersión: El modelo binomial negativo incluye un parámetro de dispersión (theta), que indica que los datos pueden tener más variabilidad de la que el modelo de Poisson puede manejar. Esto es importante si hay indicios de sobredispersión en los datos.
Desviaciones: Ambas desviaciones nula y residual son muy similares, lo que sugiere que ambos modelos ajustan de manera similar a los datos.
Elección del Modelo: Si los datos presentan sobredispersión (como podría sugerir el alto valor de theta en el modelo binomial negativo), este modelo puede ser más apropiado, a pesar de un AIC ligeramente mayor.
Pruebas Adicionales: Se recomienda realizar pruebas de ajuste y análisis de residuos para determinar la idoneidad del modelo elegido.
Establecer el mejor modelo utilizando AIC
# Establecer el mejor modelo utilizando AIC
# Realizar la selección de variables
step(modelo_nb_ants)
Start: AIC=209
Srich ~ Habitat + Latitude + Elevation
Df Deviance AIC
<none> 40.7 209
- Elevation 1 50.3 217
- Latitude 1 56.6 223
- Habitat 1 70.4 237
Call: glm.nb(formula = Srich ~ Habitat + Latitude + Elevation, data = ants,
init.theta = 37888.17088, link = log)
Coefficients:
(Intercept) Habitat Latitude Elevation
11.93668 0.63544 -0.23579 -0.00114
Degrees of Freedom: 43 Total (i.e. Null); 40 Residual
Null Deviance: 103
Residual Deviance: 40.7 AIC: 211
step(modelo_poi_ants)
Start: AIC=209
Srich ~ Habitat + Latitude + Elevation
Df Deviance AIC
<none> 40.7 209
- Elevation 1 50.3 217
- Latitude 1 56.6 223
- Habitat 1 70.4 237
Call: glm(formula = Srich ~ Habitat + Latitude + Elevation, family = poisson(link = "log"),
data = ants)
Coefficients:
(Intercept) Habitat Latitude Elevation
11.93681 0.63544 -0.23579 -0.00114
Degrees of Freedom: 43 Total (i.e. Null); 40 Residual
Null Deviance: 103
Residual Deviance: 40.7 AIC: 209
# Ajustar el mejor modelo de regresión Binomial Negativo
mejor_modelo_nb_ants <- glm.nb(Srich ~ ., data = ants); summary(mejor_modelo_nb_ants)
Warning in theta.ml(Y, mu, sum(w), w, limit = control$maxit, trace =
control$trace > : iteration limit reached
Warning in theta.ml(Y, mu, sum(w), w, limit = control$maxit, trace =
control$trace > : iteration limit reached
Call:
glm.nb(formula = Srich ~ ., data = ants, init.theta = 37888.17088,
link = log)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 11.936677 2.621721 4.55 5.3e-06 ***
Habitat 0.635435 0.119578 5.31 1.1e-07 ***
Latitude -0.235790 0.061669 -3.82 0.00013 ***
Elevation -0.001141 0.000375 -3.04 0.00234 **
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for Negative Binomial(37888) family taken to be 1)
Null deviance: 102.743 on 43 degrees of freedom
Residual deviance: 40.682 on 40 degrees of freedom
AIC: 211
Number of Fisher Scoring iterations: 1
Theta: 37888
Std. Err.: 1681590
Warning while fitting theta: iteration limit reached
2 x log-likelihood: -201
# Ajustar el mejor modelo de regresión Poisson
mejor_modelo_poi_ants <- glm(Srich ~., data = ants, family = poisson(link='log')); summary(mejor_modelo_poi_ants)
Call:
glm(formula = Srich ~ ., family = poisson(link = "log"), data = ants)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 11.936812 2.621497 4.55 5.3e-06 ***
Habitat 0.635439 0.119566 5.31 1.1e-07 ***
Latitude -0.235793 0.061664 -3.82 0.00013 ***
Elevation -0.001141 0.000375 -3.04 0.00234 **
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for poisson family taken to be 1)
Null deviance: 102.76 on 43 degrees of freedom
Residual deviance: 40.69 on 40 degrees of freedom
AIC: 209
Number of Fisher Scoring iterations: 4
Modelo Ajustado
Fórmula: Srich = 11.93668 + 0.63544 * Habitat - 0.23579 * Latitude - 0.00114 * Elevation
Fórmula: Srich = 11.93681 + 0.63544 * Habitat - 0.23579 * Latitude - 0.00114 * Elevation
Comparación del mejor modelo
Característica | Modelo Binomial Negativo | Modelo de Poisson |
---|---|---|
Llamada | glm.nb(formula = Srich ~ ., data = ants) |
glm(formula = Srich ~ ., family = poisson(link = "log"), data = ants) |
Intercepto | 11.936677 (p < 0.001) | 11.936812 (p < 0.001) |
Habitat | 0.635435 (p < 0.001) | 0.635439 (p < 0.001) |
Latitud | -0.235790 (p < 0.001) | -0.235793 (p < 0.001) |
Elevación | -0.001141 (p = 0.002) | -0.001141 (p = 0.002) |
Parámetro de Dispersión | 37888 (estimado) | 1 (suponido) |
Desviación Nula | 102.743 | 102.76 |
Desviación Residual | 40.682 | 40.69 |
AIC | 211 | 209 |
Iteraciones de Fisher | 1 | 4 |
Log-verosimilitud | -201 | -204.5 |
Advertencias | Límite de iteración alcanzado | Ninguna |
Significancia de Coeficientes: Ambos modelos
presentan coeficientes significativos para las variables explicativas,
indicando que el hábitat, la latitud y la elevación son relevantes para
la riqueza de especies (Srich
).
AIC: Aunque el AIC del modelo de Poisson es ligeramente más bajo (209) que el del modelo binomial negativo (211), la inclusión del parámetro de dispersión en el modelo binomial negativo sugiere que es más adecuado si hay sobredispersión en los datos.
Desviaciones: Las desviaciones nula y residual son muy similares entre los modelos, lo que sugiere que ambos ajustan de manera comparable a los datos.
Elección del Modelo: A pesar de un AIC ligeramente mayor, el modelo binomial negativo es preferible si hay indicios de sobredispersión en los datos, ya que proporciona una mayor flexibilidad.
Recomendaciones: Se sugiere realizar pruebas adicionales de ajuste y examinar residuos para confirmar la idoneidad del modelo elegido.
Graficar las predicciones del modelo inicial y final Binomial Negativo ants
# Configurar el área de gráficos para comparar modelos
par(mfrow=c(1, 2))
# Graficar las predicciones del modelo inicial
plot(predict(modelo_nb_ants),
col="blue",
main="Predicciones del Modelo Inicial",
xlab = "Índice",
ylab = "Predicciones")
grid() # Agregar cuadrícula
# Graficar las predicciones del mejor modelo
plot(predict(mejor_modelo_nb_ants),
col="red",
main="Predicciones del Mejor Modelo",
xlab = "Índice",
ylab = "Predicciones")
grid() # Agregar cuadrícula
Graficar las predicciones del modelo inicial y final Poisson ants
# Configurar el área de gráficos para comparar modelos
par(mfrow=c(1, 2))
# Graficar las predicciones del modelo inicial
plot(predict(modelo_poi_ants),
col="blue",
main="Predicciones del Modelo Inicial",
xlab = "Índice",
ylab = "Predicciones")
grid() # Agregar cuadrícula
# Graficar las predicciones del mejor modelo
plot(predict(mejor_modelo_poi_ants),
col="red",
main="Predicciones del Mejor Modelo",
xlab = "Índice",
ylab = "Predicciones")
grid() # Agregar cuadrícula
Medidas de bondad de ajuste
1. Pseudo R^2
pseudo_nb_ants=PseudoR2(mejor_modelo_nb_ants)
pseudo_poi_ants=PseudoR2(mejor_modelo_poi_ants)
# Imprimir los resultados usando cat
cat("Pseudo R² del Modelo Binomial Negativo:", pseudo_nb_ants, "\n")
Pseudo R² del Modelo Binomial Negativo: 0.1626
cat("Pseudo R² del Modelo de Poisson:", pseudo_poi_ants, "\n")
Pseudo R² del Modelo de Poisson: 0.2359
CONCLUSIONES PSEUDO R²
El Pseudo R² de McFadden es una medida que indica la proporción de variación explicada por el modelo. Los valores de Pseudo R² suelen ser más bajos en comparación con los R² de modelos lineales, y un valor más alto sugiere un mejor ajuste. En este caso, el modelo de Poisson presenta un Pseudo R² más alto (0.2359) en comparación con el modelo binomial negativo (0.1626). Esto sugiere que el modelo de Poisson explica una mayor proporción de la variación en los datos.
A pesar de que el modelo binomial negativo es útil para abordar la sobredispersión en los datos, el modelo de Poisson parece ajustarse mejor según esta medida de bondad de ajuste. Sin embargo, es importante tener en cuenta que un Pseudo R² más alto no siempre indica un modelo preferible si los supuestos de los modelos no se cumplen. Es crucial verificar la presencia de sobredispersión y la adecuación del modelo a los datos. Consideraciones Finales:
Si hay evidencia de sobredispersión en los datos, el modelo binomial negativo sigue siendo relevante a pesar de su menor Pseudo R². En este caso, se recomienda realizar análisis adicionales, como evaluar residuos y realizar pruebas de ajuste, para confirmar la validez del modelo. Al seleccionar un modelo, considera múltiples métricas de evaluación y no te limites a una sola medida, ya que cada una proporciona una perspectiva diferente sobre la calidad del ajuste.
2. Prueba de la Deviance
mejor_modelo_nb_ants:
Null deviance: 102.743 on 43 degrees of freedom Residual deviance: 40.682 on 40 degrees of freedom
options(scipen = 999)
# Calcular las diferencias
devianza = 102.743 - 40.682
grados_libertad = 43 - 40
# Calcular la desviación
deviance_mejor_modelo_nb_ants = 1 - pchisq(devianza, grados_libertad)
# Imprimir el resultado usando cat
cat("Desviación del Mejor Modelo Binomial Negativo:", deviance_mejor_modelo_nb_ants,
"con", grados_libertad, "grados de libertad\n")
Desviación del Mejor Modelo Binomial Negativo: 0.0000000000002132 con 3 grados de libertad
mejor_modelo_poi_ants:
Null deviance: 102.76 on 43 degrees of freedom Residual deviance: 40.69 on 40 degrees of freedom AIC: 209
options(scipen = 999)
# Calcular las diferencias
devianza = 102.76 - 40.69
grados_libertad = 43 - 40
# Calcular la desviación
deviance_mejor_modelo_nb_ants = 1 - pchisq(devianza, grados_libertad)
# Imprimir el resultado usando cat
cat("Desviación del Mejor Modelo Binomial Negativo:", deviance_mejor_modelo_nb_ants,
"con", grados_libertad, "grados de libertad\n")
Desviación del Mejor Modelo Binomial Negativo: 0.0000000000002123 con 3 grados de libertad
CONCLUSIONES
Ambos valores de desviación son extremadamente cercanos a cero, lo que indica que el modelo binomial negativo se ajusta muy bien a los datos. La desviación cercana a cero sugiere que la diferencia entre los datos observados y los valores esperados bajo el modelo es mínima.
La mención de 3 grados de libertad implica que se están comparando dos modelos donde el número de parámetros que difieren es 3. Esto es importante para evaluar si el modelo proporciona un ajuste significativamente mejor en comparación con un modelo nulo o más simple.
Aunque ambos valores son prácticamente equivalentes, su proximidad a cero refuerza la idea de que ambos modelo son adecuados.
3. Prueba sobre los Coeficientes Estimados
mejor_modelo_nb_ants
Coefficients: Estimate Std. Error z value Pr(>|z|)
(Intercept) 11.936812 2.621497 4.55 0.00000528 Habitat
0.635439 0.119566 5.31 0.00000011 Latitude -0.235793
0.061664 -3.82 0.00013 * Elevation -0.001141 0.000375 -3.04
0.00234
Rechace Ho: Todos los coeficientes tienen valores p muy bajos, lo que indica que hay evidencia sólida para rechazar la hipótesis nula de que cada coeficiente es igual a cero. Esto sugiere que todas las variables consideradas son predictores importantes de la riqueza de especies.
mejor_modelo_poi_ants
Coefficients: Estimate Std. Error z value Pr(>|z|)
(Intercept) 11.936812 2.621497 4.55 0.00000528 Habitat
0.635439 0.119566 5.31 0.00000011 Latitude -0.235793
0.061664 -3.82 0.00013 * Elevation -0.001141 0.000375 -3.04
0.00234
Rechace Ho: Todos los coeficientes tienen valores p muy bajos, lo que indica que hay evidencia sólida para rechazar la hipótesis nula de que cada coeficiente es igual a cero. Esto resalta la importancia de las variables consideradas como predictores en la riqueza de especies.
mejor_modelo_nb_ants
# Configurar el área de gráficos para mostrar dos gráficos
par(mfrow=c(1, 2))
# Graficar los residuos absolutos del modelo
plot(abs(residuals(mejor_modelo_nb_ants)),
main="Residuos Absolutos",
ylab="Residuos",
xlab="Índice")
abline(h=2, col="red") # Línea de corte en 2
# Graficar los residuos de Pearson
plot(abs(residuals(mejor_modelo_nb_ants, type="pearson")),
main="Residuos de Pearson",
ylab="Residuos",
xlab="Índice")
abline(h=2, col="red") # Línea de corte en 2
DF para residuos_mejor_modelo_nb_ants
# Crear un dataframe para los residuos
atipicos_nb_ants <- data.frame(
deviance_nb_ants = abs(residuals(mejor_modelo_nb_ants)),
pearson_nb_ants = abs(residuals(mejor_modelo_nb_ants, type="pearson"))
)
# Filtrar los puntos atípicos
atipicos_filtrados_nb_ants <- atipicos_nb_ants[atipicos_nb_ants$deviance > 2 & atipicos_nb_ants$pearson > 2, ]; atipicos_filtrados_nb_ants
deviance_nb_ants pearson_nb_ants
CKB.1 2.601 3.017
CONCLUSIONES
la deviance de 2.601 sugiere que el modelo se ajusta adecuadamente a los datos. Es importante comparar este valor con el valor esperado bajo una distribución chi-cuadrado con los grados de libertad correspondientes para obtener una evaluación más completa.
mejor_modelo_poi_ants
# Configurar el área de gráficos para mostrar dos gráficos
par(mfrow=c(1, 2))
# Graficar los residuos absolutos del modelo
plot(abs(residuals(mejor_modelo_poi_ants)),
main="Residuos Absolutos",
ylab="Residuos",
xlab="Índice")
abline(h=2, col="red") # Línea de corte en 2
#Graficar los residuos de Pearson
plot(abs(residuals(mejor_modelo_poi_ants, type="pearson")),
main="Residuos de Pearson",
ylab="Residuos",
xlab="Índice")
abline(h=2, col="red") # Línea de corte en 2
DF para residuos_mejor_modelo_poi_ants
# Crear un dataframe para los residuos
atipicos_poi_ants <- data.frame(
deviance = abs(residuals(mejor_modelo_poi_ants)),
pearson = abs(residuals(mejor_modelo_poi_ants, type="pearson"))
)
# Filtrar los puntos atípicos
atipicos_poi_ants <- atipicos_poi_ants[atipicos_poi_ants$deviance > 2 & atipicos_poi_ants$pearson > 2, ]; atipicos_poi_ants
deviance pearson
CKB.1 2.601 3.018
CONCLUSIONES
CKB: Con un valor de deviance de 2.60147 y un estadístico de Pearson de 3.01752, CKB es uno de los casos más destacados como potencialmente atípico, sugiriendo una discrepancia notable entre los datos observados y los predicciones del modelo.
PK: Tiene un valor de deviance de 2.20939 y un estadístico de Pearson de 1.87142, lo que también indica un ajuste cuestionable y sugiere que los datos de este sitio podrían no seguir el patrón esperado.
Sitios como HBC (0.44277 de deviance y 0.45133 de Pearson) y BH (0.24454 de deviance y 0.24780 de Pearson) presentan valores bajos, sugiriendo que estos datos se ajustan bien al modelo y no son considerados atípicos.
La identificación de sitios atípicos como CKB y PK podría señalar problemas en la recopilación de datos, la necesidad de considerar factores adicionales que el modelo actual no capta, o características ecológicas únicas de esos sitios.
No se cumplen los supuestos del modelo para los puntos OB y CKB.1, ya que tienen residuos estudentizados elevados. Esto sugiere que estos puntos son influyentes y podrían afectar la validez del modelo.
GRAFICOS INTERACTIVOS MODELO BINARIO NEGATIVO
# Instala y carga el paquete plotly
suppressPackageStartupMessages(library(plotly))
# Calcular los residuos
deviance_mejor_modelo_nb_ants <- abs(residuals(mejor_modelo_nb_ants))
pearson_mejor_modelo_nb_ants <- abs(residuals(mejor_modelo_nb_ants, type = "pearson"))
# Crear gráficos interactivos
p1 <- plot_ly(x = seq_along(deviance_mejor_modelo_nb_ants), y = deviance_mejor_modelo_nb_ants, type = 'scatter', mode = 'lines+markers',
name = 'Residuos Absolutos', marker = list(color = 'blue')) %>%
layout(title = "Residuos Absolutos",
xaxis = list(title = "Índice"),
yaxis = list(title = "Valor de Residuos")) %>%
add_lines(y = rep(2, length(deviance_mejor_modelo_nb_ants)), line = list(color = 'red', dash = 'dash'), name = "Línea de Corte")
p2 <- plot_ly(x = seq_along(pearson_mejor_modelo_nb_ants), y = pearson_mejor_modelo_nb_ants, type = 'scatter', mode = 'lines+markers',
name = 'Residuos de Pearson', marker = list(color = 'green')) %>%
layout(title = "Residuos de Pearson",
xaxis = list(title = "Índice"),
yaxis = list(title = "Valor de Residuos")) %>%
add_lines(y = rep(2, length(pearson_mejor_modelo_nb_ants)), line = list(color = 'red', dash = 'dash'), name = "Línea de Corte")
# Mostrar gráficos
p1
A marker object has been specified, but markers is not in the mode
Adding markers to the mode...
p2
A marker object has been specified, but markers is not in the mode
Adding markers to the mode...
GRAFICOS INTERACTIVOS MODELO POISSON
# Instala y carga el paquete plotly
suppressPackageStartupMessages(library(plotly))
# Calcular los residuos
deviance_mejor_modelo_poi_ants <- abs(residuals(mejor_modelo_poi_ants))
pearson_mejor_modelo_poi_ants <- abs(residuals(mejor_modelo_poi_ants, type = "pearson"))
# Crear gráficos interactivos
p1 <- plot_ly(x = seq_along(deviance_mejor_modelo_poi_ants), y = deviance_mejor_modelo_poi_ants, type = 'scatter', mode = 'lines+markers',
name = 'Residuos Absolutos', marker = list(color = 'blue')) %>%
layout(title = "Residuos Absolutos",
xaxis = list(title = "Índice"),
yaxis = list(title = "Valor de Residuos")) %>%
add_lines(y = rep(2, length(deviance_mejor_modelo_poi_ants)), line = list(color = 'red', dash = 'dash'), name = "Línea de Corte")
p2 <- plot_ly(x = seq_along(pearson_mejor_modelo_poi_ants), y = pearson_mejor_modelo_poi_ants, type = 'scatter', mode = 'lines+markers',
name = 'Residuos de Pearson', marker = list(color = 'green')) %>%
layout(title = "Residuos de Pearson",
xaxis = list(title = "Índice"),
yaxis = list(title = "Valor de Residuos")) %>%
add_lines(y = rep(2, length(pearson_mejor_modelo_poi_ants)), line = list(color = 'red', dash = 'dash'), name = "Línea de Corte")
# Mostrar gráficos
p1
A marker object has been specified, but markers is not in the mode
Adding markers to the mode...
p2
A marker object has been specified, but markers is not in the mode
Adding markers to the mode...
DETECCION DE DATOS INFLUYENTES MODELO BINOMIAL NEGATIVO
suppressPackageStartupMessages(library(car))
par(mfrow=c(1,1))
#influence.measures(mejor_modelo_grazing)
influencePlot(mejor_modelo_nb_ants)
StudRes Hat CookD
OB 1.5441 0.15413 0.1215866
COL 0.1404 0.18690 0.0011963
CAR -0.0783 0.15781 0.0002971
CKB.1 2.9532 0.07156 0.1889448
PK.1 -2.4006 0.08841 0.0931290
CONCLUSION
No se cumplen los supuestos del modelo para los puntos CKB.1 y OB, ya que presentan residuos estudentizados altos y una influencia significativa en los resultados. Los otros puntos (COL, CAR, y PK.1) sí cumplen con los supuestos del modelo.
DETECCION DE DATOS INFLUYENTES MODELO POISSON
suppressPackageStartupMessages(library(car))
par(mfrow=c(1,1))
#influence.measures(mejor_modelo_grazing)
influencePlot(mejor_modelo_poi_ants)
StudRes Hat CookD
OB 1.53218 0.15413 0.121613
COL 0.14340 0.18690 0.001197
CAR -0.07996 0.15781 0.000297
CKB.1 2.73303 0.07156 0.188978
PK.1 -2.28496 0.08841 0.093147
CONCLUSIONES
No se cumplen los supuestos del modelo para los puntos OB y CKB.1, ya que tienen residuos estudentizados elevados. Esto sugiere que estos puntos son influyentes y podrían afectar la validez del modelo.
CALCULO DE LA CORRELACION
# Crear un data frame con las variables deseadas
correlation_data_ants <- data.frame(
Habitat = ants$Habitat,
Latitude = ants$Latitude,
Elevation = ants$Elevation,
Srich = ants$Srich
)
# Calcular la correlación
correlation_matrix_ants <- cor(correlation_data_ants, use = "complete.obs"); correlation_matrix_ants
Habitat Latitude Elevation Srich
Habitat 1.0000 0.0000 0.0000 0.5145
Latitude 0.0000 1.0000 0.1790 -0.4384
Elevation 0.0000 0.1790 1.0000 -0.3812
Srich 0.5145 -0.4384 -0.3812 1.0000
GRAFICO INTERACTIVO DE CORRELACIÓN
suppressPackageStartupMessages(library(plotly))
suppressPackageStartupMessages(library(ggplot2))
suppressPackageStartupMessages(library(reshape2))
# Calcular la matriz de correlación
cor_matrix <- cor(data.frame(Srich = ants$Srich, Habitat = ants$Habitat,
Latitude = ants$Latitude, Elevation = ants$Elevation))
# Convertir la matriz de correlación en un formato largo
cor_long <- melt(cor_matrix)
# Crear el gráfico de correlación interactivo
p <- plot_ly(data = cor_long, x = ~Var1, y = ~Var2, z = ~value, type = "heatmap",
colorscale = "Viridis") %>%
layout(title = "Matriz de Correlación",
xaxis = list(title = ""),
yaxis = list(title = ""))
p
Modelo Regresion Binomial Negativo:
Srich = 11.936677 + 0.635435 * Habitat - 0.235790 * Latitude - 0.001141 * Elevation
Modelo Regresion Poisson:
Srich = 11.936812 + 0.635439 * Habitat - 0.235793 * Latitude - 0.001141 * Elevation
# Crear un dataframe para la nueva zona
nueva_zona_nb <- data.frame(
Srich = 4, # Número de especies
Latitude = 45.2, # Latitud
Elevation = 233, # Elevación
Habitat = 1 # 1 para "Forest"
)
# Predecir la probabilidad usando el mejor modelo
probabilidad_bosque_nb <- predict(mejor_modelo_nb_ants, newdata = nueva_zona_nb, type = "response")
#probabilidad_bosque_nb
#Mostrar la probabilidad usando cat
cat("La probabilidad de que las hormigas se encuentren en un bosque con",
nueva_zona_nb$Srich, "especies, una latitud de",
nueva_zona_nb$Latitude, "y una elevación de",
nueva_zona_nb$Elevation, "es:", probabilidad_bosque_nb, "\n")
La probabilidad de que las hormigas se encuentren en un bosque con 4 especies, una latitud de 45.2 y una elevación de 233 es: 5.199