Este conjunto de datos fue generado con el objetivo de simular información clínica destinada a predecir la presencia de diabetes en mujeres adultas. La población estudiada comprende mujeres entre 20 y 60 años de edad, todas con al menos un embarazo previo. Las variables consideradas incluyen características antropométricas y antecedentes de salud relevantes: índice de masa corporal (BMI), nivel de glucosa en sangre, edad, antecedentes familiares de diabetes y tipo de alimentación. Estas mediciones buscan aproximar factores de riesgo conocidos en el desarrollo de la enfermedad, permitiendo evaluar su asociación con la probabilidad de diagnóstico de diabetes en esta población.
Variables
| Variable | Tipo | Descripción |
|---|---|---|
| Diabetes | Numérica (0 = No, 1 = Sí) | Indicador de diagnóstico de diabetes en la paciente. |
| BMI | Numérica continua | Índice de masa corporal (kg/m²) de la paciente. |
| Antecedentes | Categórica (Sí / No) | Presencia de antecedentes familiares de diabetes. |
| Alimentacion | Categórica (3 niveles) | Tipo de alimentación reportada: Saludable, Intermedia o No saludable. |
| Edad | Numérica continua | Edad de la paciente (años), comprendida entre 20 y 60 años. |
| Glucosa | Numérica continua | Concentración de glucosa en sangre medida en mg/dL. |
library(readxl)
datos5 <- read_excel("datos5.xlsx")
datos5 <- na.omit(datos5)
head(datos5)
## # A tibble: 6 × 6
## Diabetes Antecedentes Alimentacion BMI Glucosa Edad
## <dbl> <chr> <chr> <dbl> <dbl> <dbl>
## 1 0 No Saludable 30.2 86.2 28
## 2 1 Si Intermedia 33.2 115. 44
## 3 0 Si Saludable 23.1 134. 41
## 4 1 Si No saludable 35.2 86.7 50
## 5 1 Si Intermedia 30.3 101. 49
## 6 1 No No saludable 38.2 97.8 20
modelo_poisson <- glm(Diabetes ~ BMI + Antecedentes + Alimentacion+Edad+Glucosa, family = poisson(link = "log"),data = datos5)
\[ \begin{aligned} \log ({ E( \operatorname{Diabetes} ) }) &= \beta_{0} + \beta_{1}(\operatorname{BMI}) + \beta_{2}(\operatorname{Antecedentes}_{\operatorname{Si}}) + \beta_{3}(\operatorname{Alimentacion}_{\operatorname{No\ saludable}})\ + \\ &\quad \beta_{4}(\operatorname{Alimentacion}_{\operatorname{Saludable}}) + \beta_{5}(\operatorname{Edad}) + \beta_{6}(\operatorname{Glucosa}) \end{aligned} \]
Reemplazando
\[ \begin{aligned} \log ({ \widehat{E( \operatorname{Diabetes} )} }) &= -0.09 + 0(\operatorname{BMI}) + 0.02(\operatorname{Antecedentes}_{\operatorname{Si}}) + 0(\operatorname{Alimentacion}_{\operatorname{No\ saludable}})\ + \\ &\quad 0(\operatorname{Alimentacion}_{\operatorname{Saludable}}) + 0(\operatorname{Edad}) + 0(\operatorname{Glucosa}) \end{aligned} \]
# Verificación del modelo
check_model(modelo_poisson)
fancy_plot = ggeffect(modelo_poisson) |> plot() |> plot_grid()
se_robust <- sqrt(diag(sandwich(modelo_poisson)))
se_robust
## (Intercept) BMI AntecedentesSi
## 0.165912046 0.002788761 0.035243740
## AlimentacionNo saludable AlimentacionSaludable Edad
## 0.034495575 0.053985600 0.001512368
## Glucosa
## 0.000662932
exp(coef(modelo_poisson))
## (Intercept) BMI AntecedentesSi
## 0.2403564 1.0091694 0.8684073
## AlimentacionNo saludable AlimentacionSaludable Edad
## 1.1338673 0.7882504 1.0094810
## Glucosa
## 1.0052491
emmeans(modelo_poisson, pairwise ~ Antecedentes,
type = 'response', infer = T)
## $emmeans
## Antecedentes rate SE df asymp.LCL asymp.UCL null z.ratio p.value
## No 0.852 0.0558 Inf 0.750 0.969 1 -2.440 0.0147
## Si 0.740 0.0519 Inf 0.645 0.849 1 -4.290 <.0001
##
## Results are averaged over the levels of: Alimentacion
## Confidence level used: 0.95
## Intervals are back-transformed from the log scale
## Tests are performed on the log scale
##
## $contrasts
## contrast ratio SE df asymp.LCL asymp.UCL null z.ratio p.value
## No / Si 1.15 0.109 Inf 0.957 1.39 1 1.493 0.1355
##
## Results are averaged over the levels of: Alimentacion
## Confidence level used: 0.95
## Intervals are back-transformed from the log scale
## Tests are performed on the log scale
nice_table = tbl_regression(modelo_poisson,
exponentiate = TRUE,
add_pairwise_contrasts = TRUE,
weights= 'prop',
pairwise_reverse = FALSE) |>
# pimp your table
add_significance_stars(hide_p = FALSE, hide_se = TRUE, hide_ci = FALSE) |>
modify_header(label = '**Predictor**') |>
modify_caption('Table 1. Nice looking table!') |>
modify_footnote(abbreviation = TRUE) |>
bold_labels() |>
italicize_levels() |>
bold_p()
tidy_fun = broom.helpers::tidy_parameters
nice_table
| Predictor | IRR1 | 95% CI | p-value |
|---|---|---|---|
| BMI | 1.01 | 0.99, 1.02 | 0.2 |
| Antecedentes | |||
| No / Si | 1.15 | 0.96, 1.39 | 0.14 |
| Alimentacion | |||
| Intermedia / No saludable | 0.88 | 0.68, 1.14 | 0.5 |
| Intermedia / Saludable | 1.27 | 0.95, 1.69 | 0.13 |
| No saludable / Saludable | 1.44** | 1.09, 1.90 | 0.006 |
| Edad | 1.01* | 1.00, 1.02 | 0.017 |
| Glucosa | 1.01*** | 1.00, 1.01 | <0.001 |
| Abbreviations: CI = Confidence Interval, IRR = Incidence Rate Ratio | |||
| 1 *p<0.05; **p<0.01; ***p<0.001 | |||
library(logbin)
modelo_logbin <- logbin(Diabetes ~ Antecedentes+ Alimentacion + BMI+ Edad + Glucosa, data = datos5)
\[ \begin{aligned} \operatorname{Diabetes} &\sim Bernoulli\left(\operatorname{prob}_{\operatorname{Diabetes} = \operatorname{1}}= \hat{P}\right) \\ \log ({ \hat{P} }) &= \beta_{0} + \beta_{1}(\operatorname{BMI}) + \beta_{2}(\operatorname{Antecedentes}_{\operatorname{Si}}) + \beta_{3}(\operatorname{Alimentacion}_{\operatorname{No\ saludable}})\ + \\ &\quad \beta_{4}(\operatorname{Alimentacion}_{\operatorname{Saludable}}) + \beta_{5}(\operatorname{Edad}) + \beta_{6}(\operatorname{Glucosa}) \end{aligned} \]
Reemplazando
\[ \begin{aligned} \operatorname{Diabetes} &\sim Bernoulli\left(\operatorname{prob}_{\operatorname{Diabetes} = \operatorname{1}}= \hat{P}\right) \\ \log ({ \hat{P} }) &= -0.07 + 0.02(\operatorname{Antecedentes}_{\operatorname{Si}}) - 0.01(\operatorname{Alimentacion}_{\operatorname{No\ saludable}}) + 0(\operatorname{Alimentacion}_{\operatorname{Saludable}})\ + \\ &\quad 0(\operatorname{BMI}) + 0(\operatorname{Edad}) + 0(\operatorname{Glucosa}) \end{aligned} \]
nice_table = tbl_regression(modelo_logbin,
exponentiate = TRUE,
add_pairwise_contrasts = TRUE,
weights= 'prop',
pairwise_reverse = FALSE) |>
# pimp your table
add_significance_stars(hide_p = FALSE, hide_se = TRUE, hide_ci = FALSE) |>
modify_header(label = '**Predictor**') |>
modify_caption('Table 1. Nice looking table!') |>
modify_footnote(abbreviation = TRUE) |>
bold_labels() |>
italicize_levels() |>
bold_p()
tidy_fun = broom.helpers::tidy_parameters
nice_table
| Predictor | RR1 | 95% CI | p-value |
|---|---|---|---|
| Antecedentes | |||
| No / Si | 1.03 | ||
| Alimentacion | |||
| Intermedia / No saludable | 0.95 | ||
| Intermedia / Saludable | 1.25 | ||
| No saludable / Saludable | 1.31 | ||
| BMI | 1.00 | ||
| Edad | 1.00 | ||
| Glucosa | 1.00 | ||
| Abbreviations: CI = Confidence Interval, RR = Relative Risk | |||
| 1 *p<0.05; **p<0.01; ***p<0.001 | |||
RR_logbin <- exp(coef(modelo_logbin))
RR_poisson <- exp(coef(modelo_poisson))
comparacion_RR <- data.frame(
Variable = names(RR_poisson),
RR_Poisson = round(RR_poisson,3),
RR_LogBinomial = round(RR_logbin,3)
)
print(comparacion_RR)
## Variable RR_Poisson RR_LogBinomial
## (Intercept) (Intercept) 0.240 0.732
## BMI BMI 1.009 0.969
## AntecedentesSi AntecedentesSi 0.868 1.048
## AlimentacionNo saludable AlimentacionNo saludable 1.134 0.800
## AlimentacionSaludable AlimentacionSaludable 0.788 1.000
## Edad Edad 1.009 1.004
## Glucosa Glucosa 1.005 1.000