library(readxl)
library(readr)
library(tableone)
library(knitr)
library(kableExtra)
library(dplyr)
##
## Adjuntando el paquete: 'dplyr'
## The following object is masked from 'package:kableExtra':
##
## group_rows
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(tibble)
library(survival)
library(ggplot2)
library(broom)
Tabla 2 usando la distancia de mahalanobis de los 20 biomarcadores
de M4 con la varianza más alta, las distancias de mahalanobis escaladas
por sd, log base 10 de las distancias de mahalanobis y ln de las
distancias de mahalanobis
Basecom2 = read_excel("C:\\Users\\gio73\\Documents\\Tesis\\Data\\tesis\\Base de mahalanobis\\Sin pacientes con datos erroneos\\base_completa1 mahal.xlsx")
Tabla 2
# Convertir group en binaria (0 = saludable, 1 = diabético)
Basecom2 <- Basecom2 %>%
mutate(Group_bin = ifelse(Group == 1, 1, 0))
# Distancias de mahal
dist_vars <- c("D_M_M4_20var", "D_M_M4_varscaled", "D_M_M4_varlog10", "D_M_M4_varln",
"DM_M4_20menor_cor", "DM_M4_20menor_cor_mayorvar")
# Para guardar resultados
resultados <- list()
# Ajustar modelo por cada distancia
for (dist in dist_vars) {
# Confirmar que sea num
Basecom2[[dist]] <- as.numeric(Basecom2[[dist]])
#Como genera error usar este, para una sola distancia usar el otro
formula_logit <- as.formula(paste0("Group_bin ~ `", dist, "`"))
# Modelo
modelo <- glm(formula_logit, data = Basecom2, family = binomial())
# Resultados
resumen <- summary(modelo)
beta <- coef(modelo)[2]
OR <- exp(beta)
# Intervalos de confianza IC 95%
conf <- exp(confint.default(modelo))
# Extraer AIC y BIC
AIC_val <- AIC(modelo)
BIC_val <- BIC(modelo)
# Crear tabla parcial
resultado <- tibble(
Predictor = dist,
Beta = round(beta, 4),
OR = round(OR, 4),
`IC 95% Inferior` = round(conf[2, 1], 4),
`IC 95% Superior` = round(conf[2, 2], 4),
`Valor p` = as.character(
ifelse(coef(summary(modelo))[2, 4] < 0.0001, "<0.0001",
round(coef(summary(modelo))[2, 4], 4))
),
AIC = round(AIC_val, 2),
BIC = round(BIC_val, 2)
)
resultados[[dist]] <- resultado
}
# Unir resultados
tabla_mahalanobis <- bind_rows(resultados)
# Mostrar con kableExtra
tabla_mahalanobis %>%
kable(format = "html",
caption = "Tabla 2: Relación entre las distancias de Mahalanobis de M4 y D/H") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE, position = "center")
Tabla 2: Relación entre las distancias de Mahalanobis de M4 y D/H
|
Predictor
|
Beta
|
OR
|
IC 95% Inferior
|
IC 95% Superior
|
Valor p
|
AIC
|
BIC
|
|
D_M_M4_20var
|
0.0140
|
1.0141
|
1.0019
|
1.0265
|
0.023
|
370.02
|
377.38
|
|
D_M_M4_varscaled
|
0.3151
|
1.3705
|
1.0443
|
1.7984
|
0.023
|
370.02
|
377.38
|
|
D_M_M4_varlog10
|
1.1734
|
3.2330
|
1.4870
|
7.0289
|
0.0031
|
367.06
|
374.42
|
|
D_M_M4_varln
|
0.5096
|
1.6646
|
1.1881
|
2.3324
|
0.0031
|
367.06
|
374.42
|
|
DM_M4_20menor_cor
|
0.0066
|
1.0066
|
0.9994
|
1.0138
|
0.0718
|
372.69
|
380.05
|
|
DM_M4_20menor_cor_mayorvar
|
0.0098
|
1.0099
|
1.0020
|
1.0178
|
0.014
|
368.80
|
376.16
|
Tabla 2 ajustada Edad y Sexo
# Distancias de Mahal
dist_vars <- c("D_M_M4_20var", "D_M_M4_varscaled", "D_M_M4_varlog10", "D_M_M4_varln",
"DM_M4_20menor_cor", "DM_M4_20menor_cor_mayorvar")
# Para guardar resultados
resultados <- list()
# Ajustar modelo para cada distancia por edad y sexo
for (dist in dist_vars) {
# Asegurar que las columnas sean del tipo correcto
Basecom2[[dist]] <- as.numeric(Basecom2[[dist]])
Basecom2$Age <- as.numeric(Basecom2$Age)
Basecom2$Gender <- as.factor(Basecom2$Gender)
# Igualmente es para evitar error
formula_logit <- as.formula(paste0("Group_bin ~ `", dist, "` + Age + Gender"))
# Ajustar modelo logístico
modelo <- glm(formula_logit, data = Basecom2, family = binomial())
# Extraer resumen y coeficientes
coefs <- summary(modelo)$coefficients
conf <- exp(confint.default(modelo))
# Guardar resultados de las distancias
beta <- coefs[2, 1]
OR <- exp(beta)
resultado <- tibble(
Predictor = dist,
Beta = round(beta, 4),
OR = round(OR, 4),
`IC 95% Inferior` = round(conf[2, 1], 4),
`IC 95% Superior` = round(conf[2, 2], 4),
`Valor p` = as.character(
ifelse(coefs[2, 4] < 0.0001, "<0.0001", round(coefs[2, 4], 4))
),
AIC = round(AIC(modelo), 2),
BIC = round(BIC(modelo), 2)
)
resultados[[dist]] <- resultado
}
# Unir resultados
tabla_mahalanobis_ajustada <- bind_rows(resultados)
# Mostrar tabla con kableExtra
tabla_mahalanobis_ajustada %>%
kable(format = "html",
caption = "Tabla 2: Relación entre las distancias de Mahalanobis de M4 y D/H, ajustada por edad y sexo") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE, position = "center")
Tabla 2: Relación entre las distancias de Mahalanobis de M4 y D/H,
ajustada por edad y sexo
|
Predictor
|
Beta
|
OR
|
IC 95% Inferior
|
IC 95% Superior
|
Valor p
|
AIC
|
BIC
|
|
D_M_M4_20var
|
0.0127
|
1.0127
|
1.0008
|
1.0249
|
0.0371
|
361.48
|
376.20
|
|
D_M_M4_varscaled
|
0.2842
|
1.3286
|
1.0171
|
1.7355
|
0.0371
|
361.48
|
376.20
|
|
D_M_M4_varlog10
|
1.1010
|
3.0072
|
1.3559
|
6.6693
|
0.0067
|
358.97
|
373.69
|
|
D_M_M4_varln
|
0.4782
|
1.6131
|
1.1414
|
2.2798
|
0.0067
|
358.97
|
373.69
|
|
DM_M4_20menor_cor
|
0.0057
|
1.0058
|
0.9984
|
1.0132
|
0.1257
|
364.07
|
378.79
|
|
DM_M4_20menor_cor_mayorvar
|
0.0084
|
1.0084
|
1.0004
|
1.0165
|
0.039
|
361.51
|
376.23
|
Tabla 2 ajustada por Edad, Sexo, Peso y SBP
# Distancias de Mahal
dist_vars <- c("D_M_M4_20var", "D_M_M4_varscaled", "D_M_M4_varlog10", "D_M_M4_varln",
"DM_M4_20menor_cor", "DM_M4_20menor_cor_mayorvar")
# Para guardar resultados
resultados <- list()
# Ajustar modelo para cada distancia por edad y sexo
for (dist in dist_vars) {
# Asegurar que las columnas sean del tipo correcto
Basecom2[[dist]] <- as.numeric(Basecom2[[dist]])
Basecom2$Age <- as.numeric(Basecom2$Age)
Basecom2$Gender <- as.factor(Basecom2$Gender)
# Igualmente es para evitar error
formula_logit <- as.formula(paste0("Group_bin ~ `", dist, "` + Age + Gender + Weight + `SBP (mmHg)`"))
# Ajustar modelo logístico
modelo <- glm(formula_logit, data = Basecom2, family = binomial())
# Extraer resumen y coeficientes
coefs <- summary(modelo)$coefficients
conf <- exp(confint.default(modelo))
# Guardar resultados de las distancias
beta <- coefs[2, 1]
OR <- exp(beta)
resultado <- tibble(
Predictor = dist,
Beta = round(beta, 4),
OR = round(OR, 4),
`IC 95% Inferior` = round(conf[2, 1], 4),
`IC 95% Superior` = round(conf[2, 2], 4),
`Valor p` = as.character(
ifelse(coefs[2, 4] < 0.0001, "<0.0001", round(coefs[2, 4], 4))
),
AIC = round(AIC(modelo), 2),
BIC = round(BIC(modelo), 2)
)
resultados[[dist]] <- resultado
}
# Unir resultados
tabla_mahalanobis_ajustada <- bind_rows(resultados)
# Mostrar tabla con kableExtra
tabla_mahalanobis_ajustada %>%
kable(format = "html",
caption = "Tabla 2: Relación entre las distancias de Mahalanobis de M4 y D/H, ajustada por edad, sexo, peso y SBP") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE, position = "center")
Tabla 2: Relación entre las distancias de Mahalanobis de M4 y D/H,
ajustada por edad, sexo, peso y SBP
|
Predictor
|
Beta
|
OR
|
IC 95% Inferior
|
IC 95% Superior
|
Valor p
|
AIC
|
BIC
|
|
D_M_M4_20var
|
0.0184
|
1.0186
|
1.0036
|
1.0338
|
0.0146
|
303.21
|
325.29
|
|
D_M_M4_varscaled
|
0.4132
|
1.5116
|
1.0849
|
2.1063
|
0.0146
|
303.21
|
325.29
|
|
D_M_M4_varlog10
|
1.3969
|
4.0428
|
1.6267
|
10.0469
|
0.0026
|
300.79
|
322.87
|
|
D_M_M4_varln
|
0.6067
|
1.8343
|
1.2353
|
2.7238
|
0.0026
|
300.79
|
322.87
|
|
DM_M4_20menor_cor
|
0.0066
|
1.0066
|
0.9986
|
1.0147
|
0.1075
|
307.61
|
329.69
|
|
DM_M4_20menor_cor_mayorvar
|
0.0079
|
1.0079
|
0.9997
|
1.0162
|
0.0595
|
306.20
|
328.28
|
Tabla 2 ajustada por Edad, Sexo, Peso, SBP y glucosa
# Distancias de Mahal
dist_vars <- c("D_M_M4_20var", "D_M_M4_varscaled", "D_M_M4_varlog10", "D_M_M4_varln",
"DM_M4_20menor_cor", "DM_M4_20menor_cor_mayorvar")
# Para guardar resultados
resultados <- list()
# Ajustar modelo para cada distancia por edad y sexo
for (dist in dist_vars) {
# Asegurar que las columnas sean del tipo correcto
Basecom2[[dist]] <- as.numeric(Basecom2[[dist]])
Basecom2$Age <- as.numeric(Basecom2$Age)
Basecom2$Gender <- as.factor(Basecom2$Gender)
# Igualmente es para evitar error
formula_logit <- as.formula(paste0("Group_bin ~ `", dist, "` + Age + Gender + Weight + `SBP (mmHg)` + `FBG (mM)` "))
# Ajustar modelo logístico
modelo <- glm(formula_logit, data = Basecom2, family = binomial())
# Extraer resumen y coeficientes
coefs <- summary(modelo)$coefficients
conf <- exp(confint.default(modelo))
# Guardar resultados de las distancias
beta <- coefs[2, 1]
OR <- exp(beta)
resultado <- tibble(
Predictor = dist,
Beta = round(beta, 4),
OR = round(OR, 4),
`IC 95% Inferior` = round(conf[2, 1], 4),
`IC 95% Superior` = round(conf[2, 2], 4),
`Valor p` = as.character(
ifelse(coefs[2, 4] < 0.0001, "<0.0001", round(coefs[2, 4], 4))
),
AIC = round(AIC(modelo), 2),
BIC = round(BIC(modelo), 2)
)
resultados[[dist]] <- resultado
}
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
## Warning: glm.fit: algorithm did not converge
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
# Unir resultados
tabla_mahalanobis_ajustada <- bind_rows(resultados)
# Mostrar tabla con kableExtra
tabla_mahalanobis_ajustada %>%
kable(format = "html",
caption = "Tabla 2: Relación entre las distancias de Mahalanobis de M4 y D/H, ajustada por edad, sexo, peso, SBP y glucosa") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE, position = "center")
Tabla 2: Relación entre las distancias de Mahalanobis de M4 y D/H,
ajustada por edad, sexo, peso, SBP y glucosa
|
Predictor
|
Beta
|
OR
|
IC 95% Inferior
|
IC 95% Superior
|
Valor p
|
AIC
|
BIC
|
|
D_M_M4_20var
|
-0.1556
|
0.8559
|
0
|
Inf
|
0.9998
|
14
|
39.76
|
|
D_M_M4_varscaled
|
-3.4906
|
0.0305
|
0
|
Inf
|
0.9998
|
14
|
39.76
|
|
D_M_M4_varlog10
|
-5.5585
|
0.0039
|
0
|
Inf
|
0.9998
|
14
|
39.76
|
|
D_M_M4_varln
|
-2.4140
|
0.0895
|
0
|
Inf
|
0.9998
|
14
|
39.76
|
|
DM_M4_20menor_cor
|
0.2107
|
1.2345
|
0
|
6.177617e+136
|
0.999
|
14
|
39.76
|
|
DM_M4_20menor_cor_mayorvar
|
0.2443
|
1.2768
|
0
|
3.646579e+156
|
0.9989
|
14
|
39.76
|