Para el conjunto de datos de Excel llamado poissonoffset.xlsx ajuste un modelo de Poisson para las variables edad de la planta(años)[ manejarla de modo numérica (no factor)] y para el tipo de híbrido usando como respuesta el número de abortos contados para ese año. Existen dos variables llamadas plantas y plantas2 que nos sirven para ajustar el modelo en dos escenarios, uno para ajustar offset pues el número de plantas contadas fue diferente y el otro fue el mismo en todos los muestreos. El offset nos permite ajustar tasas y no solo conteos.
Importando los datos
#Se importan los datos y se cambia a numeric la variable abortos
library(readxl)
datos1 <- read_excel("C:/Users/ginna/Desktop/ModelacionCultivos/quiz/datos1.xlsx", col_types = c("numeric", "numeric", "numeric",
"numeric", "text", "numeric", "numeric"))
## creando el data frame
dfdatos = data.frame(datos1)
• Involucre en el modelo la edad y la edad al cuadrado • Ajuste ambos modelos (con y sin offset) • Escriba ambas ecuaciones
#Para el modelo poisson 1 que se crea se utiliza offset para estandarizar los datos ya que el numero de plantas muestreado es desigual en los conteos
mod1<- glm(abortos ~ edad + I(edad^2)
+ hibrido + (hibrido*edad) + (hibrido*I(edad^2))
+ offset(log(plantas)), family = poisson(link = "log"),
data=dfdatos)
summary(mod1)
##
## Call:
## glm(formula = abortos ~ edad + I(edad^2) + hibrido + (hibrido *
## edad) + (hibrido * I(edad^2)) + offset(log(plantas)), family = poisson(link = "log"),
## data = dfdatos)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -0.59230 -0.29255 -0.04407 0.28813 0.67432
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -2.660908 1.461440 -1.821 0.0686 .
## edad 0.258879 0.269497 0.961 0.3368
## I(edad^2) -0.002283 0.011917 -0.192 0.8481
## hibridoh2 -0.189849 2.165070 -0.088 0.9301
## edad:hibridoh2 0.050225 0.396211 0.127 0.8991
## I(edad^2):hibridoh2 -0.001993 0.017419 -0.114 0.9089
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 87.5202 on 47 degrees of freedom
## Residual deviance: 6.2911 on 42 degrees of freedom
## AIC: 171.41
##
## Number of Fisher Scoring iterations: 4
Ecuacion Modelo 1
\[log() = -2,7 + 0,3(edad) -0,002(edad^{2}) - 0,3(h2) + 0,07(edad:h2) - 0,003 (edad^{2}:h2)\]
#Para el modelo poisson 2 se elimina offset
mod2<- glm(abortos ~ edad + I(edad^2)
+ hibrido + (hibrido*edad) + (hibrido*I(edad^2)),
family = poisson(link = "log"),
data=dfdatos)
summary(mod2)
##
## Call:
## glm(formula = abortos ~ edad + I(edad^2) + hibrido + (hibrido *
## edad) + (hibrido * I(edad^2)), family = poisson(link = "log"),
## data = dfdatos)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -0.44194 -0.26641 0.08525 0.27340 0.46031
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.936936 1.453066 -0.645 0.519
## edad 0.229571 0.268007 0.857 0.392
## I(edad^2) -0.001067 0.011856 -0.090 0.928
## hibridoh2 -0.628668 2.159554 -0.291 0.771
## edad:hibridoh2 0.131838 0.395308 0.334 0.739
## I(edad^2):hibridoh2 -0.005984 0.017385 -0.344 0.731
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 80.2678 on 47 degrees of freedom
## Residual deviance: 3.7591 on 42 degrees of freedom
## AIC: 168.88
##
## Number of Fisher Scoring iterations: 4
Ecuacion Modelo 2
\[log() = -0,9 + 0,2(edad) -0,001(edad^{2}) - 0,7(h2) + 0,1(edad:h2) - 0,006 (edad^{2}:h2)\]
# Para realizar la comparacion entre los modelos se utiliza la funcion cbind
library(arm)
## Loading required package: MASS
## Loading required package: Matrix
## Loading required package: lme4
## Warning: package 'lme4' was built under R version 4.0.5
##
## arm (Version 1.13-1, built: 2022-8-25)
## Working directory is C:/Users/ginna/Desktop
coef1 = coef(mod1)
# extract coefficients from second model
coef2 = coef(mod2)
# extract standard errors from first model using 'se.coef()'
se.coef1 = se.coef(mod1)
# extract standard errors from second model
se.coef2 = se.coef(mod2)
# use 'cbind()' to combine values into one dataframe
models.both <- cbind(coef1, se.coef1, coef2, se.coef2, exponent = exp(coef1))
# show dataframe
models.both
## coef1 se.coef1 coef2 se.coef2 exponent
## (Intercept) -2.660908161 1.46144025 -0.936936138 1.45306584 0.06988473
## edad 0.258879044 0.26949727 0.229570540 0.26800666 1.29547710
## I(edad^2) -0.002282629 0.01191696 -0.001067061 0.01185573 0.99771997
## hibridoh2 -0.189848919 2.16507004 -0.628667830 2.15955449 0.82708408
## edad:hibridoh2 0.050224824 0.39621063 0.131838095 0.39530774 1.05150747
## I(edad^2):hibridoh2 -0.001993064 0.01741864 -0.005984131 0.01738457 0.99800892
• Juzgue la dispersión del modelo • Seleccione el modelo que no muestre problemas de sobre o sub-dispersión
En la prueba de dispersiontest se evalua si nos da un valor >1 puede ser sobredispersion; si es < 1 entonces es subdispersion y si es igual entonces no presenta dispercion
library(AER)
## Loading required package: car
## Warning: package 'car' was built under R version 4.0.5
## Loading required package: carData
## Warning: package 'carData' was built under R version 4.0.3
##
## Attaching package: 'car'
## The following object is masked from 'package:arm':
##
## logit
## Loading required package: lmtest
## Warning: package 'lmtest' was built under R version 4.0.3
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 4.0.5
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
## Loading required package: sandwich
## Loading required package: survival
dt1 <- dispersiontest(mod1,alternative = "t")
dt1
##
## Dispersion test
##
## data: mod1
## z = -27.935, p-value < 2.2e-16
## alternative hypothesis: true dispersion is not equal to 1
## sample estimates:
## dispersion
## 0.1194403
dt2 <- dispersiontest(mod2,alternative = "t")
dt2
##
## Dispersion test
##
## data: mod2
## z = -35.003, p-value < 2.2e-16
## alternative hypothesis: true dispersion is not equal to 1
## sample estimates:
## dispersion
## 0.07902589
Para ambos modelos la dispersion no es la mas adecuada sin embargo entre los dos modelos se selecciona el modelo 1 donde se utiliza offset
• Elimine términos “no significativos” para reducir el modelo y demuestre si este modelo reducido resulta más conveniente que el modelo ampliado (función step para quitar mugre)
stats::step(mod1)
## Start: AIC=171.41
## abortos ~ edad + I(edad^2) + hibrido + (hibrido * edad) + (hibrido *
## I(edad^2)) + offset(log(plantas))
##
## Df Deviance AIC
## - I(edad^2):hibrido 1 6.3042 169.43
## - edad:hibrido 1 6.3071 169.43
## <none> 6.2911 171.41
##
## Step: AIC=169.43
## abortos ~ edad + I(edad^2) + hibrido + edad:hibrido + offset(log(plantas))
##
## Df Deviance AIC
## - edad:hibrido 1 6.3154 167.44
## - I(edad^2) 1 6.4421 167.56
## <none> 6.3042 169.43
##
## Step: AIC=167.44
## abortos ~ edad + I(edad^2) + hibrido + offset(log(plantas))
##
## Df Deviance AIC
## - I(edad^2) 1 6.4508 165.57
## - hibrido 1 6.9761 166.10
## <none> 6.3154 167.44
## - edad 1 8.4160 167.54
##
## Step: AIC=165.57
## abortos ~ edad + hibrido + offset(log(plantas))
##
## Df Deviance AIC
## - hibrido 1 7.110 164.23
## <none> 6.451 165.57
## - edad 1 86.293 243.41
##
## Step: AIC=164.23
## abortos ~ edad + offset(log(plantas))
##
## Df Deviance AIC
## <none> 7.11 164.23
## - edad 1 87.52 242.64
##
## Call: glm(formula = abortos ~ edad + offset(log(plantas)), family = poisson(link = "log"),
## data = dfdatos)
##
## Coefficients:
## (Intercept) edad
## -2.3747 0.2105
##
## Degrees of Freedom: 47 Total (i.e. Null); 46 Residual
## Null Deviance: 87.52
## Residual Deviance: 7.11 AIC: 164.2
Al evaluar las variables que deberian quedarse se selecciona las siguientes variables
\[glm(formula abortos ~ edad + offset(log(plantas)), family = poisson(link = "log"), data = dfdatos)\]
por lo tanto el modelo quedaria de la siguiente manera:
modfinal<- glm(abortos ~ edad,
offset(log(plantas)),
family = poisson(),
data=dfdatos)
summary(modfinal)
##
## Call:
## glm(formula = abortos ~ edad, family = poisson(), data = dfdatos,
## weights = offset(log(plantas)))
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -0.61440 -0.34189 0.04171 0.35003 0.50880
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.78063 0.24283 -3.215 0.00131 **
## edad 0.20480 0.01973 10.381 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
## Null deviance: 122.5647 on 47 degrees of freedom
## Residual deviance: 6.4536 on 46 degrees of freedom
## AIC: 244.12
##
## Number of Fisher Scoring iterations: 4
\[log() = -2,3 + 0,2(edad) \]
• Estime los conteos esperados para las diferentes edades del híbrido 2 (dar valores)
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.0.5
dfdatos$pred=fitted.values(modfinal)
g1 <- ggplot(dfdatos, aes(abortos, pred, color = hibrido))+
geom_point()+
theme_classic()
g1
g1 <- ggplot(dfdatos, aes(edad, pred, color = hibrido))+
geom_point(size = (dfdatos$edad))+
theme_classic()
g1
¿percibe alguna tendencia que sugiera alguna relación clara con la edad? Si parece estar relacionado que a mayor edad mayor es el numero de abortos