Base de datos de accidentes cerebrovasculares

Primero descargamos y seleccionamos la base de datos que utilizaremos, en este caso es una base de datos que nos habla sobre los accidentes cerebrovasculares de la población. Para consultar la base de datos vea https://www.kaggle.com/datasets/fedesoriano/stroke-prediction-dataset.

La base de datos cuenta con 12 variables para poder manipular, que son las siguientes:

Nosotros trabajaremos con aquellas variables que anteriormente se resaltaron en negritas, (8 de ellas), y a partir de dichas variables crearemos nuestro análisis.

Carga de Librerías

Para esto será fundamental la utilización de las siguientes librerías.

La librería de ggplot nos servirá para crear nuestros gráficos más adelante, tidyverse será útil para la limpieza, selección de variables y otras funciones más, readr nos ayudará a leer el csv de forma correcta, patchwork nos permite pegar las gráficas para presentarlas de manera más limpia y stargazer nos ayudará a crear una tabla de manera más limpia de nuestro modelo.

library(ggplot2)
library(tidyverse)
library(readr)
library(patchwork)
## Warning: package 'patchwork' was built under R version 4.4.1
library(stargazer)

Nota el parámetro message = FALSE fue agregado en el código del chunk para prevenir que se imprimiera el código de R que genera la carga de las librerías.

Preguntas de investigación

Seleccionamos esta base de datos ya que tenemos la hipótesis de que el sexo, la edad, hipertensión, enfermedades cardiacas, el nivel de glucosa en sangre, el índice de masa corporal (IMC) y si el paciente fuma o no, son variables que determinan la incidencia de un accidente cerebrovascular en una persona.

Entonces formulamos las siguientes hipótesis:

  1. Los hombres tienen más accidentes cerebrovasculares que las mujeres.
  2. El tener enfermedades o estar pasado de peso incrementa el riesgo.
  3. El fumar o no es un factor determinante.
  4. A mayor edad mayor probabilidad de padecer un accidente.

Limpieza y Formulación

Primero empezaremos por la carga de la base de datos, observamos mediante la ayuda de la función unique, que en las variables bmi y gender hace falta corregirlas, ya que en el bmi a pesar de contener números es de tipo carácter, esto ya que en lugar de tener NA en los datos no registrados hay un N/A de tipo texto, y en la variable gender hay 3 géneros registrados, pero en el tercer genero Other, solo hay una persona con esas características, por lo que procederemos a eliminarla, con la función which vemos en que posición del data frame se encuentran los errores para ver si son corregibles a mano, o si por el contrario necesitaremos un ciclo, en el caso de gender si se podrá corregir a mano con una máscara, y en el caso de bmi necesitaremos una ciclo for para corregir los errores, concluiremos esta parte con una impresión de la tabla para observar cómo quedo.

# Carga de datos.
ruta <- "C:/Users/fer_b/OneDrive/Escritorio/healthcare-dataset-stroke-data.csv"
stroke_predict <- read_csv(ruta)

# Determinar si hace falta limpiar la base de datos.
unique(stroke_predict$bmi)
##   [1] "36.6" "N/A"  "32.5" "34.4" "24"   "29"   "27.4" "22.8" "24.2" "29.7"
##  [11] "36.8" "27.3" "28.2" "30.9" "37.5" "25.8" "37.8" "22.4" "48.9" "26.6"
##  [21] "27.2" "23.5" "28.3" "44.2" "25.4" "22.2" "30.5" "26.5" "33.7" "23.1"
##  [31] "32"   "29.9" "23.9" "28.5" "26.4" "20.2" "33.6" "38.6" "39.2" "27.7"
##  [41] "31.4" "36.5" "33.2" "32.8" "40.4" "25.3" "30.2" "47.5" "20.3" "30"  
##  [51] "28.9" "28.1" "31.1" "21.7" "27"   "24.1" "45.9" "44.1" "22.9" "29.1"
##  [61] "32.3" "41.1" "25.6" "29.8" "26.3" "26.2" "29.4" "24.4" "28"   "28.8"
##  [71] "34.6" "19.4" "30.3" "41.5" "22.6" "56.6" "27.1" "31.3" "31"   "31.7"
##  [81] "35.8" "28.4" "20.1" "26.7" "38.7" "34.9" "25"   "23.8" "21.8" "27.5"
##  [91] "24.6" "32.9" "26.1" "31.9" "34.1" "36.9" "37.3" "45.7" "34.2" "23.6"
## [101] "22.3" "37.1" "45"   "25.5" "30.8" "37.4" "34.5" "27.9" "29.5" "46"  
## [111] "42.5" "35.5" "26.9" "45.5" "31.5" "33"   "23.4" "30.7" "20.5" "21.5"
## [121] "40"   "28.6" "42.2" "29.6" "35.4" "16.9" "26.8" "39.3" "32.6" "35.9"
## [131] "21.2" "42.4" "40.5" "36.7" "29.3" "19.6" "18"   "17.6" "19.1" "50.1"
## [141] "17.7" "54.6" "35"   "22"   "39.4" "19.7" "22.5" "25.2" "41.8" "60.9"
## [151] "23.7" "24.5" "31.2" "16"   "31.6" "25.1" "24.8" "18.3" "20"   "19.5"
## [161] "36"   "35.3" "40.1" "43.1" "21.4" "34.3" "27.6" "16.5" "24.3" "25.7"
## [171] "21.9" "38.4" "25.9" "54.7" "18.6" "24.9" "48.2" "20.7" "39.5" "23.3"
## [181] "64.8" "35.1" "43.6" "21"   "47.3" "16.6" "21.6" "15.5" "35.6" "16.7"
## [191] "41.9" "16.4" "17.1" "29.2" "37.9" "44.6" "39.6" "40.3" "41.6" "39"  
## [201] "23.2" "18.9" "36.1" "36.3" "46.5" "16.8" "46.6" "35.2" "20.9" "13.8"
## [211] "31.8" "15.3" "38.2" "45.2" "17"   "49.8" "27.8" "60.2" "23"   "22.1"
## [221] "26"   "44.3" "51"   "39.7" "34.7" "21.3" "41.2" "34.8" "19.2" "35.7"
## [231] "40.8" "24.7" "19"   "32.4" "34"   "28.7" "32.1" "51.5" "20.4" "30.6"
## [241] "71.9" "19.3" "40.9" "17.2" "16.1" "16.2" "40.6" "18.4" "21.1" "42.3"
## [251] "32.2" "50.2" "17.5" "18.7" "42.1" "47.8" "20.8" "30.1" "17.3" "36.4"
## [261] "12"   "36.2" "55.7" "14.4" "43"   "41.7" "33.8" "43.9" "22.7" "57.5"
## [271] "37"   "38.5" "16.3" "44"   "32.7" "54.2" "40.2" "33.3" "17.4" "41.3"
## [281] "52.3" "14.6" "17.8" "46.1" "33.1" "18.1" "43.8" "50.3" "38.9" "43.7"
## [291] "39.9" "15.9" "19.8" "12.3" "78"   "38.3" "41"   "42.6" "43.4" "15.1"
## [301] "20.6" "33.5" "43.2" "30.4" "38"   "33.4" "44.9" "44.7" "37.6" "39.8"
## [311] "53.4" "55.2" "42"   "37.2" "42.8" "18.8" "42.9" "14.3" "37.7" "48.4"
## [321] "50.6" "46.2" "49.5" "43.3" "33.9" "18.5" "44.5" "45.4" "55"   "54.8"
## [331] "19.9" "17.9" "15.6" "52.8" "15.2" "66.8" "55.1" "18.2" "48.5" "55.9"
## [341] "57.3" "10.3" "14.1" "15.7" "56"   "44.8" "13.4" "51.8" "38.1" "57.7"
## [351] "44.4" "38.8" "49.3" "39.1" "54"   "56.1" "97.6" "53.9" "13.7" "11.5"
## [361] "41.4" "14.2" "49.4" "15.4" "45.1" "49.2" "48.7" "53.8" "42.7" "48.8"
## [371] "52.7" "53.5" "50.5" "15.8" "45.3" "14.8" "51.9" "63.3" "40.7" "61.2"
## [381] "48"   "46.8" "48.3" "58.1" "50.4" "11.3" "12.8" "13.5" "14.5" "15"  
## [391] "59.7" "47.4" "52.5" "13.2" "52.9" "61.6" "49.9" "54.3" "47.9" "13"  
## [401] "13.9" "50.9" "57.2" "64.4" "92"   "50.8" "57.9" "45.8" "47.6" "14"  
## [411] "46.4" "46.9" "47.1" "13.3" "48.1" "51.7" "46.3" "54.1" "14.9"
which(stroke_predict$bmi == "N/A")
##   [1]    2    9   14   20   28   30   44   47   51   52   55   58   65   71   79
##  [16]   82   85  106  113  125  127  130  134  147  151  161  162  163  168  171
##  [31]  172  175  179  184  190  199  201  219  228  248  343  361  433  478  480
##  [46]  523  669  672  681  730  743  866  868  873  880  904  937  966 1103 1107
##  [61] 1116 1184 1195 1215 1236 1242 1278 1294 1301 1307 1325 1343 1353 1428 1458
##  [76] 1467 1469 1472 1504 1529 1540 1547 1597 1641 1645 1647 1651 1670 1671 1682
##  [91] 1719 1720 1731 1754 1757 1780 1817 1837 1838 1867 1895 1907 1913 1982 1994
## [106] 2031 2104 2106 2110 2193 2216 2264 2286 2322 2323 2340 2344 2478 2495 2503
## [121] 2516 2530 2533 2542 2583 2698 2740 2753 2769 2789 2817 2829 2856 2868 2880
## [136] 2898 2915 2961 2998 3008 3029 3049 3060 3075 3105 3112 3136 3162 3163 3165
## [151] 3177 3198 3215 3216 3217 3376 3383 3426 3432 3504 3563 3606 3630 3682 3700
## [166] 3706 3727 3735 3803 3809 3873 3914 3941 3946 3952 4047 4070 4165 4203 4231
## [181] 4256 4284 4287 4423 4452 4523 4562 4617 4685 4714 4751 4791 4922 4935 4950
## [196] 4985 5040 5049 5094 5100 5106
unique(stroke_predict$gender)
## [1] "Male"   "Female" "Other"
which(stroke_predict$gender == "Other")  
## [1] 3117
# Eliminar el género extra de la base de datos.
stroke_predict <-  stroke_predict[-3117,]

#Reemplazo de "N/A" por "NA" mediante un ciclo for.
for(i in 1:nrow(stroke_predict)) {
  stroke_predict[i, "bmi"] <- gsub("N/A", NA, stroke_predict[i, "bmi"])
}

# Hacer numérica la variable bmi.
stroke_predict$bmi <- stroke_predict$bmi %>% as.numeric()

# Observar la base de datos.
print(stroke_predict)
## # A tibble: 5,109 × 12
##       id gender   age hypertension heart_disease ever_married work_type    
##    <dbl> <chr>  <dbl>        <dbl>         <dbl> <chr>        <chr>        
##  1  9046 Male      67            0             1 Yes          Private      
##  2 51676 Female    61            0             0 Yes          Self-employed
##  3 31112 Male      80            0             1 Yes          Private      
##  4 60182 Female    49            0             0 Yes          Private      
##  5  1665 Female    79            1             0 Yes          Self-employed
##  6 56669 Male      81            0             0 Yes          Private      
##  7 53882 Male      74            1             1 Yes          Private      
##  8 10434 Female    69            0             0 No           Private      
##  9 27419 Female    59            0             0 Yes          Private      
## 10 60491 Female    78            0             0 Yes          Private      
## # ℹ 5,099 more rows
## # ℹ 5 more variables: Residence_type <chr>, avg_glucose_level <dbl>, bmi <dbl>,
## #   smoking_status <chr>, stroke <dbl>

Nota el parámetro message = FALSE fue agregado en el código del chunk para prevenir que se imprimiera el código de R que genera la carga de los datos.

Estadistíca

En este apartado, se crearon tablas para cada variable a utilizar, con el fin de obtener la frecuencia de cada suceso, su probabilidad, y si es necesario dividir esta tabla a su vez en diferentes subcategorías para poder graficarla de manera más sencilla, además se realizó una limpieza más a fondo a aquellas variables que lo necesitaban con el fin de obtener datos significativos, y al final se realiza un modelo de regresión lineal múltiple con las variables numéricas, con el fin de comprobar si existe una relación significativa entre la variable regresada con las regresora.

# 1 Determinar la probabilidad de tener un accidente cerebrovascular de acuerdo con el IMC.
tib_bmi_s <- stroke_predict %>% group_by(bmi,stroke) %>% summarize(n = length(stroke))

## 1.1 Observar si hay NAs.
which(is.na(tib_bmi_s$bmi))
## [1] 553 554
## 1.2 Eliminar los NAs.
tib_bmi_s <- na.omit(tib_bmi_s)

# 2.1 Determinar la probabilidad de tener un accidente cerebrovascular según la condición de fumador.
tib_ss_s <- stroke_predict %>% group_by(smoking_status,stroke) %>% summarize(n = length(stroke))

## 2.1 condición 1.
desconocido <- tib_ss_s [1:2,]
desconocido$n %>% sum()
## [1] 1544
desconocido <- tib_ss_s [1:2,] %>% cbind(c(desconocido$n[1]/1544,desconocido$n[2]/1544))
desconocido <- desconocido %>% rename(probability=...4)

## 2.2 condición 2.
antes_fumaba <- tib_ss_s [3:4,]
antes_fumaba$n %>% sum()
## [1] 884
antes_fumaba <- tib_ss_s [3:4,] %>% cbind(c(antes_fumaba$n[1]/885,antes_fumaba$n[2]/885))
antes_fumaba <- antes_fumaba %>% rename(probability=...4)

## 2.3 condición 3.
nunca_fumaba <- tib_ss_s [5:6,]
nunca_fumaba$n %>% sum()
## [1] 1892
nunca_fumaba <- tib_ss_s [5:6,] %>% cbind(c(nunca_fumaba$n[1]/1892,nunca_fumaba$n[2]/1892))
nunca_fumaba <- nunca_fumaba %>% rename(probability=...4)

## 2.4 condición 4.
fuma <- tib_ss_s [7:8,]
fuma$n %>% sum()
## [1] 789
fuma <- tib_ss_s [7:8,] %>% cbind(c(fuma$n[1]/789,fuma$n[2]/789))
fuma <- fuma %>% rename(probability=...4)

# 3 Determinar la probabilidad de tener un accidente cerebrovascular según nivel de glucosa en sangre.
tib_gluc_s <- stroke_predict %>% group_by(stroke,avg_glucose_level) %>% summarize(n = length(stroke))

## 3.01 Ya que los niveles de glucosa varían mucho, será necesario crear intervalos para poder determinar su probabilidad, por lo que procederemos a crear intervalos.
min(tib_gluc_s$avg_glucose_level)
## [1] 55.12
max(tib_gluc_s$avg_glucose_level)
## [1] 271.74
breaks <- seq(55, 275, by = 20)
tib_gluc_s$glucose_interval <- cut(tib_gluc_s$avg_glucose_level, breaks = breaks, include.lowest = TRUE)

## 3.02 Creación de una nueva tabla con los intervalos.
tib_glu_new <- tib_gluc_s %>% select(-avg_glucose_level)

## 3.03 Sumar los intervalos.
tib_glu_new <- tib_gluc_s %>% 
  select(-avg_glucose_level) %>% 
  group_by(glucose_interval, stroke) %>% 
  summarize(n = sum(n))

## 3.04 Prob int 1.
int_1 <- tib_glu_new [1:2,]
int_1 <- tib_glu_new [1:2,] %>% cbind(c(int_1$n[1]/(int_1$n %>% sum()),int_1$n[2]/(int_1$n %>% sum())))
int_1 <- int_1 %>% rename(probability=...4)

## 3.05 Prob int 2.
int_2 <- tib_glu_new [3:4,]
int_2 <- tib_glu_new [3:4,] %>% cbind(c(int_2$n[1]/(int_2$n %>% sum()),int_2$n[2]/(int_2$n %>% sum())))
int_2 <- int_2 %>% rename(probability=...4)

## 3.06 Prob int 3.
int_3 <- tib_glu_new [5:6,]
int_3 <- tib_glu_new [5:6,] %>% cbind(c(int_3$n[1]/(int_3$n %>% sum()),int_3$n[2]/(int_3$n %>% sum())))
int_3 <- int_3 %>% rename(probability=...4)

## 3.07 Prob int 4.
int_4 <- tib_glu_new [7:8,]
int_4 <- tib_glu_new [7:8,] %>% cbind(c(int_4$n[1]/(int_4$n %>% sum()),int_4$n[2]/(int_4$n %>% sum())))
int_4 <- int_4 %>% rename(probability=...4)

## 3.08 Prob int 5.
int_5 <- tib_glu_new [9:10,]
int_5 <- tib_glu_new [9:10,] %>% cbind(c(int_5$n[1]/(int_5$n %>% sum()),int_5$n[2]/(int_5$n %>% sum())))
int_5 <- int_5 %>% rename(probability=...4)

## 3.09 Prob int 6.
int_6 <- tib_glu_new [11:12,]
int_6 <- tib_glu_new [11:12,] %>% cbind(c(int_6$n[1]/(int_6$n %>% sum()),int_6$n[2]/(int_6$n %>% sum())))
int_6 <- int_6 %>% rename(probability=...4)

## 3.10 Prob int 7.
int_7 <- tib_glu_new [13:14,]
int_7 <- tib_glu_new [13:14,] %>% cbind(c(int_7$n[1]/(int_7$n %>% sum()),int_7$n[2]/(int_7$n %>% sum())))
int_7 <- int_7 %>% rename(probability=...4)

## 3.11 Prob int 8.
int_8 <- tib_glu_new [15:16,]
int_8 <- tib_glu_new [15:16,] %>% cbind(c(int_8$n[1]/(int_8$n %>% sum()),int_8$n[2]/(int_8$n %>% sum())))
int_8 <- int_8 %>% rename(probability=...4)

## 3.12 Prob int 9.
int_9 <- tib_glu_new [17:18,]
int_9 <- tib_glu_new [17:18,] %>% cbind(c(int_9$n[1]/(int_9$n %>% sum()),int_9$n[2]/(int_9$n %>% sum())))
int_9 <- int_9 %>% rename(probability=...4)

## 3.13 Prob int 10.
int_10 <- tib_glu_new [19:20,]
int_10 <- tib_glu_new [19:20,] %>% cbind(c(int_10$n[1]/(int_10$n %>% sum()),int_10$n[2]/(int_10$n %>% sum())))
int_10 <- int_10 %>% rename(probability=...4)

## 3.14 Prob int 11.
int_11 <- tib_glu_new [21:22,]
int_11 <- tib_glu_new [21:22,] %>% cbind(c(int_11$n[1]/(int_11$n %>% sum()),int_11$n[2]/(int_11$n %>% sum())))
int_11 <- int_11 %>% rename(probability=...4)

# 4 Determinar la probabilidad de tener un accidente cerebrovascular según la edad del paciente.
tib_age_s <- stroke_predict %>% group_by(stroke,age) %>% summarize(n = length(stroke))

# 5 Determinar la probabilidad de tener un accidente cerebrovascular según el género.
tib_gen_s <- stroke_predict %>% group_by(stroke,gender) %>% summarize(n = length(stroke))

# 5.1 Dividiremos la tabla en 2 tablas separadas, una con los datos de los pacientes masculinos y otra con los femeninos.
fem <- tib_gen_s[c(1,3),]
fem$percentage <- fem$n / sum(fem$n) * 100
masc <- tib_gen_s[c(2,4),]
masc$percentage <- masc$n / sum(masc$n) * 100

# 6 Determinar la probabilidad de tener un accidente cerebrovascular por enfermedades cardiacas.
tib_hea_s <- stroke_predict %>% group_by(stroke,heart_disease) %>% summarize(n = length(stroke))

## 6.1 Dividiremos la tabla en 2 tablas separadas, una con los datos de los pacientes sin enfermedades y otro con.
### 6.1.1 Sin.
wo_hea <- tib_hea_s[c(1,3),]
wo_hea$percentage <- wo_hea$n / sum(wo_hea$n) * 100

### 6.1.2 Con.
w_hea <- tib_hea_s[c(2,4),]
w_hea$percentage <- w_hea$n / sum(w_hea$n) * 100

# 7 Determinar la probabilidad de tener un accidente cerebrovascular por hipertensión.
tib_hyp_s <- stroke_predict %>% group_by(stroke,hypertension) %>% summarize(n = length(stroke))

## 7.1 Dividiremos la tabla en 2 tablas separadas, una con los datos de los pacientes sin enfermedades y otro con.
### 7.1.1 Sin.
wo_hyp <- tib_hyp_s[c(1,3),]
wo_hyp$percentage <- wo_hyp$n / sum(wo_hyp$n) * 100

### 7.1.2 Con.
w_hyp <- tib_hyp_s[c(2,4),]
w_hyp$percentage <- w_hyp$n / sum(w_hyp$n) * 100

# 8 Modelo de regresión múltiple.
options(scipen = 999)
modelo <- lm(stroke ~ age + hypertension + heart_disease + avg_glucose_level + bmi, data = stroke_predict)
summary(modelo)
## 
## Call:
## lm(formula = stroke ~ age + hypertension + heart_disease + avg_glucose_level + 
##     bmi, data = stroke_predict)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.26449 -0.06631 -0.02774  0.00552  1.03461 
## 
## Coefficients:
##                      Estimate  Std. Error t value             Pr(>|t|)    
## (Intercept)       -0.03868124  0.01186830  -3.259             0.001125 ** 
## age                0.00171951  0.00013960  12.318 < 0.0000000000000002 ***
## hypertension       0.05324396  0.01010413   5.270         0.0000001426 ***
## heart_disease      0.06492485  0.01334145   4.866         0.0000011721 ***
## avg_glucose_level  0.00035494  0.00006543   5.424         0.0000000609 ***
## bmi               -0.00131269  0.00037869  -3.466             0.000532 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1944 on 4902 degrees of freedom
##   (201 observations deleted due to missingness)
## Multiple R-squared:  0.07379,    Adjusted R-squared:  0.07284 
## F-statistic:  78.1 on 5 and 4902 DF,  p-value: < 0.00000000000000022
stargazer(modelo,type = "text")
## 
## ===============================================
##                         Dependent variable:    
##                     ---------------------------
##                               stroke           
## -----------------------------------------------
## age                          0.002***          
##                              (0.0001)          
##                                                
## hypertension                 0.053***          
##                               (0.010)          
##                                                
## heart_disease                0.065***          
##                               (0.013)          
##                                                
## avg_glucose_level            0.0004***         
##                              (0.0001)          
##                                                
## bmi                          -0.001***         
##                              (0.0004)          
##                                                
## Constant                     -0.039***         
##                               (0.012)          
##                                                
## -----------------------------------------------
## Observations                   4,908           
## R2                             0.074           
## Adjusted R2                    0.073           
## Residual Std. Error      0.194 (df = 4902)     
## F Statistic          78.103*** (df = 5; 4902)  
## ===============================================
## Note:               *p<0.1; **p<0.05; ***p<0.01

Nota el parámetro message = FALSE fue agregado en el código del chunk para prevenir que se imprimiera el código de R que genera la carga de los datos, además de que se utilizó la función options(scipen = 999) con el fin de eliminar la notación científica.

Gráficas

En este apartado se realizaron las gráficas correspondientes para cada variable para poder hacer nuestro análisis e interpretación.

Las gráficas de la a-d nos indican la condición del fumador y la probabilidad que tiene este de padecer un accidente cerebrovascular, la variable tiene en total 4 clasificaciones, desconocido, antes fumaba, nunca fumaba y fuma, con una probabilidad de sufrir un episodio de 3.04%, 7.91%, 4.76% y 5.32% respectivamente.

A pesar de lo que inferimos en la hipótesis, el no fumar no es la que tiene menos probabilidad, y además aquellos que dejaron de fumar tienen una mayor probabilidad de padecerlo en comparación con aquellos que siguen fumando.

Una de las razones por las cuales creo pasa esto es que en la gráfica a el estado del fumador es desconocido, y el más bajo de todos, por lo que es posible que una vez se le asignen a estas personas una clasificación la probabilidad de aquellas que nunca fumaba y de las que antes fumaban debería disminuir.

La gráfica e es una relación entre el IMC y la frecuencia con la que ocurren los accidentes cerebrovasculares, en dicha gráfica se representa el número de personas que han tenido accidentes con un tono azul cielo (1), y las que no con un azul marino (0).

Observamos que aquellas personas con un IMC de entre 19 y 45 son más propensas a sufrir un episodio.

La gráfica f es la relación entre la distribución por intervalos del nivel de glucosa en sangre y la frecuencia con la que ocurren los episodios. Notamos que conforme va aumentando el nivel de glucosa en sangre la probabilidad aumenta, esto ya que la frecuencia de un accidente y un no accidente se va haciendo más pequeña.

De la g-q es en base a estos mismos datos, pero ahora manejando la probabilidad de padecer un episodio, con un 4.22%, 3.2%, 3.85%, 3.46%, 2.98%, 8.42%, 14.16, 12.67, 12.23%, 15.94% y 25% respectivamente con cada intervalo, y sucede lo que se esperaba tanto en la hipótesis como en lo observado en la gráfica anterior, un aumento en el nivel de glucosa en la sangre conlleva una mayor posibilidad de tener ataques.

En la r la variable edad es ahora la estudiada, donde se infiere cuanto mas grande sea la persona, existe un incremento en la frequencia a padecer un episodio.

De la s-t donde se analiza la incidencia por género, suceden 2 cosas curiosas, la primera es que dentro de la población capturada, hay más mujeres en la muestra que hombres, alrededor de un 25% más, y los hombres tienen una mayor probabilidad de sufrir un accidente.

De la u-v los pacientes con enfermedades en el corazón son 4 veces más susceptibles a padecer un accidente cerebrovascular con un 17%, en comparación a un 4.2% a aquellos pacientes sin enfermedades en el corazón.

En estas últimas 2 (W y X), las personas con hipertensión son aproximadamente 3.3 veces más susceptibles a este riesgo que aquellas que no, con un 13.3% y en comparación un 4%.

Nota el parámetro echo = FALSE fue agregado en el código del chunk de las gráficas para prevenir que se imprimiera el código de R que genera la gráfica.

Resultados

En cuanto a los resultados obtenidos conforme a los datos de las gráficas, comprobamos que nuestras hipótesis eran acertadas exceptuando el caso de los pacientes fumadores, asimismo en relación con el modelo de regresión, un incremento en la edad, hipertensión, enfermedades cardiacas y nivel de glucosa en sangre reflejaran un aumento en la probabilidad de sufrir un ataque cardiovascular, y un aumento del IMC, la probabilidad de un accidente cerebrovascular disminuye.

En conclusión, el modelo sugiere que la edad, la hipertensión, la enfermedad cardíaca y el nivel promedio de glucosa tienen un impacto positivo y significativo en la probabilidad de sufrir un accidente cerebrovascular, mientras que el IMC tiene un impacto negativo pero también significativo. Sin embargo, el bajo valor de R-cuadrado sugiere que el modelo no captura toda la variabilidad en la ocurrencia de accidentes cerebrovasculares, y otras variables podrían ser relevantes.