—7 title: “Diabetes” author: “Mariana Castañeda & Shadia Jaafar” date: “2024-04-03” output: html_document —

Librerias

library(readr)
## Warning: package 'readr' was built under R version 4.3.3
library(lattice)
## Warning: package 'lattice' was built under R version 4.3.3
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.3.1
library(gridExtra)
## Warning: package 'gridExtra' was built under R version 4.3.2
library(visdat)
## Warning: package 'visdat' was built under R version 4.3.3
library(outliers)
## Warning: package 'outliers' was built under R version 4.3.1
library(EnvStats)
## Warning: package 'EnvStats' was built under R version 4.3.3
## 
## Attaching package: 'EnvStats'
## The following objects are masked from 'package:stats':
## 
##     predict, predict.lm
library(mice)
## Warning: package 'mice' was built under R version 4.3.3
## 
## Attaching package: 'mice'
## The following object is masked from 'package:stats':
## 
##     filter
## The following objects are masked from 'package:base':
## 
##     cbind, rbind
library(VIM)
## Warning: package 'VIM' was built under R version 4.3.3
## Loading required package: colorspace
## Loading required package: grid
## VIM is ready to use.
## Suggestions and bug-reports can be submitted at: https://github.com/statistikat/VIM/issues
## 
## Attaching package: 'VIM'
## The following object is masked from 'package:datasets':
## 
##     sleep
library(ggplot2)
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.3.1
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.3     ✔ stringr   1.5.0
## ✔ forcats   1.0.0     ✔ tibble    3.2.1
## ✔ lubridate 1.9.2     ✔ tidyr     1.3.0
## ✔ purrr     1.0.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::combine() masks gridExtra::combine()
## ✖ dplyr::filter()  masks mice::filter(), stats::filter()
## ✖ dplyr::lag()     masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(hrbrthemes)
## Warning: package 'hrbrthemes' was built under R version 4.3.3
library(gridExtra)
library(foreign)
## Warning: package 'foreign' was built under R version 4.3.2
url <- "https://raw.githubusercontent.com/lihkir/Data/main/diabetes.csv"
diabetes<- read.csv(url)
names(diabetes)
## [1] "Pregnancies"              "Glucose"                 
## [3] "BloodPressure"            "SkinThickness"           
## [5] "Insulin"                  "BMI"                     
## [7] "DiabetesPedigreeFunction" "Age"                     
## [9] "Outcome"
head(diabetes)
##   Pregnancies Glucose BloodPressure SkinThickness Insulin  BMI
## 1           6     148            72            35       0 33.6
## 2           1      85            66            29       0 26.6
## 3           8     183            64             0       0 23.3
## 4           1      89            66            23      94 28.1
## 5           0     137            40            35     168 43.1
## 6           5     116            74             0       0 25.6
##   DiabetesPedigreeFunction Age Outcome
## 1                    0.627  50       1
## 2                    0.351  31       0
## 3                    0.672  32       1
## 4                    0.167  21       0
## 5                    2.288  33       1
## 6                    0.201  30       0
str(diabetes)
## 'data.frame':    768 obs. of  9 variables:
##  $ Pregnancies             : int  6 1 8 1 0 5 3 10 2 8 ...
##  $ Glucose                 : int  148 85 183 89 137 116 78 115 197 125 ...
##  $ BloodPressure           : int  72 66 64 66 40 74 50 0 70 96 ...
##  $ SkinThickness           : int  35 29 0 23 35 0 32 0 45 0 ...
##  $ Insulin                 : int  0 0 0 94 168 0 88 0 543 0 ...
##  $ BMI                     : num  33.6 26.6 23.3 28.1 43.1 25.6 31 35.3 30.5 0 ...
##  $ DiabetesPedigreeFunction: num  0.627 0.351 0.672 0.167 2.288 ...
##  $ Age                     : int  50 31 32 21 33 30 26 29 53 54 ...
##  $ Outcome                 : int  1 0 1 0 1 0 1 0 1 1 ...
summary(diabetes)
##   Pregnancies        Glucose      BloodPressure    SkinThickness  
##  Min.   : 0.000   Min.   :  0.0   Min.   :  0.00   Min.   : 0.00  
##  1st Qu.: 1.000   1st Qu.: 99.0   1st Qu.: 62.00   1st Qu.: 0.00  
##  Median : 3.000   Median :117.0   Median : 72.00   Median :23.00  
##  Mean   : 3.845   Mean   :120.9   Mean   : 69.11   Mean   :20.54  
##  3rd Qu.: 6.000   3rd Qu.:140.2   3rd Qu.: 80.00   3rd Qu.:32.00  
##  Max.   :17.000   Max.   :199.0   Max.   :122.00   Max.   :99.00  
##     Insulin           BMI        DiabetesPedigreeFunction      Age       
##  Min.   :  0.0   Min.   : 0.00   Min.   :0.0780           Min.   :21.00  
##  1st Qu.:  0.0   1st Qu.:27.30   1st Qu.:0.2437           1st Qu.:24.00  
##  Median : 30.5   Median :32.00   Median :0.3725           Median :29.00  
##  Mean   : 79.8   Mean   :31.99   Mean   :0.4719           Mean   :33.24  
##  3rd Qu.:127.2   3rd Qu.:36.60   3rd Qu.:0.6262           3rd Qu.:41.00  
##  Max.   :846.0   Max.   :67.10   Max.   :2.4200           Max.   :81.00  
##     Outcome     
##  Min.   :0.000  
##  1st Qu.:0.000  
##  Median :0.000  
##  Mean   :0.349  
##  3rd Qu.:1.000  
##  Max.   :1.000
diabetes$Glucose <- ifelse(diabetes$Glucose == 0.0, NA, diabetes$Glucose)
diabetes$BloodPressure <- ifelse(diabetes$BloodPressure == 0.0, NA, diabetes$BloodPressure)
diabetes$SkinThickness <- ifelse(diabetes$SkinThickness == 0.0, NA, diabetes$SkinThickness)
diabetes$Insulin <- ifelse(diabetes$Insulin == 0.0, NA, diabetes$Insulin)
diabetes$BMI <- ifelse(diabetes$BMI == 0.0, NA, diabetes$BMI)
table(diabetes$Outcome)
## 
##   0   1 
## 500 268

Variable Respuesta

g <- ggplot(diabetes, aes(x = factor(Outcome), fill = factor(Outcome))) +
  geom_bar() +
  scale_x_discrete(labels = c("No diabetes", "Diabetes")) +
  scale_fill_manual(values = c("green", "red")) +
  labs(title = "Histograma de Outcome", x = "Outcome", y = "Frecuencia") +
  theme(legend.position = "none")

# Mostrar el gráfico
print(g)

Según el histograma, hay más observaciones de individuos sin diabetes que de aquellos con diabetes en este conjunto de datos. Esto puede indicar una prevalencia más baja de diabetes dentro de la población estudiada

Relación de Variables explicativas con respecto a el Outcome

# Crear el gráfico
g0 <- ggplot(diabetes, aes(x = factor(Pregnancies), fill = factor(Outcome))) +
  geom_bar(position = "dodge") + 
  scale_fill_manual(values = c("green", "red")) +
  labs(title = "Histograma de Embarazos por Outcome", x = "Embarazos", y = "Frecuencia")

# Mostrar el gráfico
print(g0)

Hay mayor frecuencia de personas sin diabetes en todo el rango de embarazos. La frecuencia de embarazos disminuye a medida que aumenta su número, y hay una mayor proporción de personas sin diabetes en el rango de 0 a 2 embarazos. La diferencia entre las frecuencias de personas con y sin diabetes se reduce en aquellos con un mayor número de embarazos.

g1 <- ggplot(diabetes, aes(x = factor(Glucose), fill = factor(Outcome))) +
  geom_bar(position = "dodge") +  
  scale_fill_manual(values = c("green", "red"), name = "Outcome") + 
  labs(title = "Histograma de glucosa por Outcome", x = "Glucosa", y = "Frecuencia")

# Mostrar el gráfico
print(g1)

Las barras verdes, representativas de individuos sin diabetes, muestran una distribución más concentrada en niveles de glucosa más bajos, mientras que las barras rojas, correspondientes a individuos con diabetes, se observan en todo el rango de glucosa, siendo más frecuentes en niveles más altos. Esta mayor concentración de barras verdes en el rango inferior es coherente con la idea de que los individuos sin diabetes tienden a tener niveles de glucosa más bajos.

# Crear el gráfico para BloodPressure y Outcome
g2 <- ggplot(diabetes, aes(x = factor(BloodPressure), fill = factor(Outcome))) +
  geom_bar(position = "dodge") +
  scale_fill_manual(values = c("green", "red"), name = "Outcome") + 
  labs(title = "Presión Sanguínea por Outcome", x = "Presión Sanguínea", y = "Frecuencia")

print(g2)

La mayoría de las observaciones, tanto para individuos sin diabetes como con diabetes, se concentran en lo que parece ser el rango medio de presión sanguínea. Las barras verdes (sin diabetes) son generalmente más altas que las rojas (con diabetes), lo que indica una mayor frecuencia de presión sanguínea en el grupo sin diabetes. Sin emabrgo,el histograma que sugiere que la presión sanguínea por sí sola no es un indicador definitivo de diabetes dado que ambos grupos parecen distriburise se manera similar.

g3 <- ggplot(diabetes, aes(x = factor(SkinThickness), fill = factor(Outcome))) +
  geom_bar(position = "dodge") +
  scale_fill_manual(values = c("green", "red"), name = "Outcome") + 
  labs(title = "Grosor de Piel por Outcome", x = "Grosor de Piel", y = "Frecuencia")

print(g3)

las barras de ambas categorias están distribuidas a lo largo del eje del grosor de la piel, con alturas que varían pero generalmente menores en el grupo con diabetes. Esto podría interpretarse como que no hay una diferencia sustancial en la distribución del grosor de la piel entre tener y no tener diabetes

(vemos que hay una cantidad de Nas en ambos casos)

g4 <- ggplot(diabetes, aes(x = factor(Insulin), fill = factor(Outcome))) +
  geom_bar(position = "dodge") + 
  scale_fill_manual(values = c("green", "red"), name = "Outcome") +
  labs(title = "Insulina por Outcome", x = "Insulina", y = "Frecuencia")

print(g4)

la distribución, tanto verde como roja, se mantienen relativamente bajas y dispersas a lo largo del eje de insulina, sin embargo hay una presenecia significativa de Nas.

# Gráfico para Age y Outcome
g5 <- ggplot(diabetes, aes(x = factor(Age), fill = factor(Outcome))) +
  geom_bar(position = "dodge") + 
  scale_fill_manual(values = c("green", "red"), name = "Outcome") +
  labs(title = "Edad por Outcome", x = "Edad", y = "Frecuencia")

print(g5)

las personas sin diabetes, tienen una frecuencia más alta en edades menores, y la frecuencia de estas disminuye de manera más pronunciada con la edad que las barras rojas. Esto puede sugerir que hay mayor proporción de individuos más jóvenes sin diabetes. Las barras rojas, que representan a las personas con diabetes, también disminuyen con la edad, pero la disminución parece más gradua

# Gráfico para DiabetesPedigreeFunction y Outcome
g6 <- ggplot(diabetes, aes(x = factor(DiabetesPedigreeFunction), fill = factor(Outcome))) +
  geom_bar(position = "dodge") + 
  scale_fill_manual(values = c("green", "red"), name = "Outcome") +
  labs(title = "Función de Pedigrí de Diabetes por Outcome", x = "Función de Pedigrí de Diabetes", y = "Frecuencia")
print(g6)

El gráfico muestra que mientras hay una amplia variabilidad en los valores de la función de pedigrí en ambos grupos, no hay una distinción clara entre los dos grupos basada únicamente en esta medida, aunque vemos que la clase sin diabetes presenta en general, picos mas altos

# Gráfico para BMI y Outcome
g7 <- ggplot(diabetes, aes(x = factor(BMI), fill = factor(Outcome))) +
  geom_bar(position = "dodge") + 
  scale_fill_manual(values = c("green", "red"), name = "Outcome") +
  labs(title = "Índice de Masa Corporal (BMI) por Outcome", x = "BMI", y = "Frecuencia") +
  theme(legend.position = "none")

print(g7)

Se observa que las barras verdes son predominantes en la mayoría de los rangos de BMI, indicando una mayor frecuencia de individuos sin diabetes a través de varios niveles de BMI. Las barras rojas, que señalan individuos con diabetes, también están presentes a lo largo de todo el rango, pero con menos frecuencia y sesgado un poco mas a la derecha

Boxplot y Outliers

out <- boxplot.stats(diabetes$Pregnancies)$out
boxplot(diabetes$Pregnancies,
        ylab = "Embarazos",
        main = "Boxplot de Embarazo"
)
mtext(paste("Outliers: ", paste(out, collapse = ", ")))

length(out)
## [1] 4

la mayoría de las mujeres han tenido un número de embarazos que cae dentro del rango de la caja y los bigotes. La presencia de valores atípicos sugiere que hay algunas mujeres que han tenido un número significativamente más alto de embarazos comparado con el resto (14, 15 17 embarazos), sin embargo, más de la mitad de las mujeres han tenido menos de 5 embarazos.

out <- boxplot.stats(diabetes$Glucose)$out
boxplot(diabetes$Glucose,
       ylab = "Glucosa",
        main = "Boxplot de Glucosa"
)
mtext(paste("Outliers: ", paste(out, collapse = ", ")))

length(out)
## [1] 0

Parece que no hay valores atípicos, ya que no se observan puntos individuales que excedan los límites de los bigotes. La mediana está ubicada por debajo del nivel de glucosa de 120 mg/dl, que es el umbral comúnmente utilizado para determinar el nivel de glucosa en ayunas. Esto sugiere que más de la mitad de los individuos en el conjunto de datos tienen niveles normales en glucosa

out <- boxplot.stats(diabetes$BloodPressure)$out

boxplot(diabetes$BloodPressure,
        ylab = "Presión Sanguíneo",
        main = "Boxplot de Presión Sanguínea"
)
mtext(paste("Outliers: ", paste(out, collapse = ", ")))

length(out)
## [1] 14

La mediana está en un rango que podría considerarse normal para la presión sanguínea, probablemente alrededor de 70-80 mmHg. ademáas, este gráfico indica que, si bien la mayoría de los datos se agrupan dentro de un rango considerado normal o prehipertenso, hay una cantidad notable de valores extremadamente bajos y altos.

out <- boxplot.stats(diabetes$SkinThickness)$out

boxplot(diabetes$SkinThickness,
        ylab = "Grosor de Piel",
        main = "Boxplot de Grosor de Piel"
)
mtext(paste("Outliers: ", paste(out, collapse = ", ")))

length(out)
## [1] 3

El grosor de la piel se concentra principalmente en el rango de aproximadamente 20 a 30 unidades, con la mediana alrededor de 25.

Se identifican tres valores atípicos: 60, 63 y 99. Estos valores están notablemente más altos que la mayoría de las otras medidas de grosor de piel en el conjunto de datos.

out <- boxplot.stats(diabetes$Insulin)$out

boxplot(diabetes$Insulin,
        ylab = "Insulina",
        main = "Boxplot de Insulina"
)
mtext(paste("Outliers: ", paste(out, collapse = ", ")))

length(out)
## [1] 24

Existen numerosos valores atípicos identificados en la parte superior del gráfico, los cuales están significativamente por encima del tercer cuartil, indicando que hay individuos con niveles de insulina excepcionalmente altos. La mediana de los niveles de insulina está cerca del borde inferior de la caja, lo que sugiere que la mayoría de los individuos tienen niveles de insulina más bajos, mientras que una menor cantidad de individuos tiene niveles significativamente más altos.

out <- boxplot.stats(diabetes$BMI)$out

boxplot(diabetes$Insulin,
        ylab = "BMI",
        main = "Boxplot de BMI"
)
mtext(paste("Outliers: ", paste(out, collapse = ", ")))

length(out)
## [1] 8

La caja del boxplot, se sitúa relativamente baja en la escala, lo que sugiere que la mayoría de los valores de BMI se encuentran en un rango más bajo.Por otro lado, la mediana, está más cercana al primer cuartil que al tercer cuartil, sugiriendo un sesgo en la distribución. Los valores atípicos están todos en el extremo superior de la escala, y hay un número significativo de ellos, lo que indica que hay individuos con BMIs muy altos en comparación con el resto. No hay valores atípicos en el extremo inferior de la escala.

out <- boxplot.stats(diabetes$Age)$out

boxplot(diabetes$Age,
        ylab = "Edad",
        main = "Boxplot de Edad"
)
mtext(paste("Outliers: ", paste(out, collapse = ", ")))

length(out)
## [1] 9

Hay varios valores atípicos indicados, todos los cuales están en el extremo superior de la escala de edad, con edades como 69, 67, 72, 81, etc., que están por encima del rango normal. La mediana parece estar en los 30 años, indicando que más de la mitad de las personas en el conjunto de datos están por debajo de esta edad

out <- boxplot.stats(diabetes$DiabetesPedigreeFunction)$out

boxplot(diabetes$DiabetesPedigreeFunction,
        ylab = "Pedigrí",
        main = "Boxplot de Pedigrí"
)
mtext(paste("Outliers: ", paste(out, collapse = ", ")))

length(out)
## [1] 29

Hay una serie de valores atípicos en el extremo superior, lo que indica que hay individuos con valores altos de la función de pedigrí de la diabetes, considerablemente más altos que la mayoría de los datos. La distribución de la función de pedigrí de la diabetes tiene un sesgo positivo, con una cola de valores que se extiende hacia la derecha, más allá del tercer cuartil. ## Percentiles

find_outliers <- function(data, variable) {
df_omit<-na.omit(data)

  lower_bound <- quantile(df_omit[[variable]], 0.025, na.rm = TRUE)
  upper_bound <- quantile(df_omit[[variable]], 0.975, na.rm = TRUE)

  outlier_ind <- which(df_omit[[variable]] < lower_bound | df_omit[[variable]] > upper_bound)
  outliers_df <- df_omit[outlier_ind, ]

  return(outliers_df)
}

Embarzo

outliers_Pregnancies <- find_outliers(diabetes, "Pregnancies")
outliers_Pregnancies
##     Pregnancies Glucose BloodPressure SkinThickness Insulin  BMI
## 29           13     145            82            19     110 22.2
## 89           15     136            70            32     110 37.1
## 160          17     163            72            41     114 40.9
## 299          14     100            78            25     184 36.6
## 324          13     152            90            33      29 26.8
## 745          13     153            88            37     140 40.6
##     DiabetesPedigreeFunction Age Outcome
## 29                     0.245  57       0
## 89                     0.153  43       1
## 160                    0.817  47       1
## 299                    0.412  46       1
## 324                    0.731  43       1
## 745                    1.174  39       0
num_outliers<- nrow(outliers_Pregnancies)
num_outliers
## [1] 6

Tomando los percentiles 25% y 75% se identifican los anteriores 6 datos atipicos.

Glucosa

outliers_Glucose <- find_outliers(diabetes, "Glucose")
outliers_Glucose
##     Pregnancies Glucose BloodPressure SkinThickness Insulin  BMI
## 9             2     197            70            45     543 30.5
## 14            1     189            60            23     846 30.1
## 98            1      71            48            18      76 20.4
## 175           2      75            64            24      55 29.7
## 207           8     196            76            29     280 37.5
## 229           4     197            70            39     744 36.7
## 235           3      74            68            28      45 29.7
## 259           1     193            50            16     375 25.9
## 261           3     191            68            15     130 30.9
## 274           1      71            78            50      45 33.2
## 360           1     196            76            36     249 36.5
## 361           5     189            64            33     325 31.2
## 463           8      74            70            40      49 35.3
## 467           0      74            52            10      36 27.8
## 499           7     195            70            33     145 25.1
## 521           2      68            70            32      66 25.0
## 562           0     198            66            32     274 41.3
## 618           2      68            62            13      15 20.1
## 673          10      68           106            23      49 35.5
## 681           2      56            56            28      45 24.2
##     DiabetesPedigreeFunction Age Outcome
## 9                      0.158  53       1
## 14                     0.398  59       1
## 98                     0.323  22       0
## 175                    0.370  33       0
## 207                    0.605  57       1
## 229                    2.329  31       0
## 235                    0.293  23       0
## 259                    0.655  24       0
## 261                    0.299  34       0
## 274                    0.422  21       0
## 360                    0.875  29       1
## 361                    0.583  29       1
## 463                    0.705  39       0
## 467                    0.269  22       0
## 499                    0.163  55       1
## 521                    0.187  25       0
## 562                    0.502  28       1
## 618                    0.257  23       0
## 673                    0.285  47       0
## 681                    0.332  22       0
num_outliers<- nrow(outliers_Glucose)
num_outliers
## [1] 20

Tomando los percentiles 25% y 75% se identifican los anteriores 20 datos atipicos.

Presión de sangre

outliers_BloodPressure <- find_outliers(diabetes, "BloodPressure")
outliers_BloodPressure
##     Pregnancies Glucose BloodPressure SkinThickness Insulin  BMI
## 5             0     137            40            35     168 43.1
## 19            1     103            30            38      83 43.3
## 25           11     143            94            33     146 36.6
## 44            9     171           110            24     240 45.4
## 126           1      88            30            42      99 55.0
## 178           0     129           110            46     130 67.1
## 188           1     128            98            41      58 32.0
## 347           1     139            46            19      83 28.7
## 370           1     133           102            28     140 32.8
## 380           0      93           100            39      72 43.4
## 429           0     135            94            46     145 40.6
## 576           1     119            44            47      63 35.5
## 577           6     108            44            20     130 24.0
## 598           1      89            24            19      25 27.8
## 600           1     109            38            18     120 23.1
## 663           8     167           106            46     231 37.6
## 673          10      68           106            23      49 35.5
## 674           3     123           100            35     240 57.3
## 708           2     127            46            21     335 34.4
## 742           3     102            44            20      94 30.8
##     DiabetesPedigreeFunction Age Outcome
## 5                      2.288  33       1
## 19                     0.183  33       0
## 25                     0.254  51       1
## 44                     0.721  54       1
## 126                    0.496  26       1
## 178                    0.319  26       1
## 188                    1.321  33       1
## 347                    0.654  22       0
## 370                    0.234  45       1
## 380                    1.021  35       0
## 429                    0.284  26       0
## 576                    0.280  25       0
## 577                    0.813  35       0
## 598                    0.559  21       0
## 600                    0.407  26       0
## 663                    0.165  43       1
## 673                    0.285  47       0
## 674                    0.880  22       0
## 708                    0.176  22       0
## 742                    0.400  26       0
num_outliers<- nrow(outliers_BloodPressure)
num_outliers
## [1] 20

Tomando los percentiles 25% y 75% se identifican los anteriores 20 datos atipicos.

Grosor de piel

outliers_SkinThickness <- find_outliers(diabetes, "SkinThickness")
outliers_SkinThickness
##     Pregnancies Glucose BloodPressure SkinThickness Insulin  BMI
## 58            0     100            88            60     110 46.8
## 100           1     122            90            51     220 49.7
## 121           0     162            76            56     100 53.2
## 151           1     136            74            50     204 37.4
## 255          12      92            62             7     258 27.6
## 274           1      71            78            50      45 33.2
## 276           2     100            70            52      57 40.5
## 280           2     108            62            10     278 25.3
## 314           3     113            50            10      85 29.5
## 383           1     109            60             8     182 25.4
## 446           0     180            78            63      14 59.4
## 467           0      74            52            10      36 27.8
## 520           6     129            90             7     326 19.6
## 533           1      86            66            52      65 41.3
## 592           2     112            78            50     140 39.4
##     DiabetesPedigreeFunction Age Outcome
## 58                     0.962  31       0
## 100                    0.325  31       1
## 121                    0.759  25       1
## 151                    0.399  24       0
## 255                    0.926  44       1
## 274                    0.422  21       0
## 276                    0.677  25       0
## 280                    0.881  22       0
## 314                    0.626  25       0
## 383                    0.947  21       0
## 446                    2.420  25       1
## 467                    0.269  22       0
## 520                    0.582  60       0
## 533                    0.917  29       0
## 592                    0.175  24       0
num_outliers<- nrow(outliers_SkinThickness)
num_outliers
## [1] 15

Tomando los percentiles 25% y 75% se identifican los anteriores 15 datos atipicos.

Insulina

outliers_Insulin <- find_outliers(diabetes, "Insulin")
outliers_Insulin
##     Pregnancies Glucose BloodPressure SkinThickness Insulin  BMI
## 9             2     197            70            45     543 30.5
## 14            1     189            60            23     846 30.1
## 53            5      88            66            21      23 24.4
## 109           3      83            58            31      18 34.3
## 226           1      87            78            27      32 34.6
## 229           4     197            70            39     744 36.7
## 248           0     165            90            33     680 52.3
## 287           5     155            84            44     545 38.7
## 324          13     152            90            33      29 26.8
## 410           1     172            68            49     579 42.4
## 446           0     180            78            63      14 59.4
## 567           1      99            72            30      18 38.6
## 585           8     124            76            24     600 28.7
## 598           1      89            24            19      25 27.8
## 618           2      68            62            13      15 20.1
## 656           2     155            52            27     540 38.7
## 712           5     126            78            27      22 29.6
## 754           0     181            88            44     510 43.3
## 761           2      88            58            26      16 28.4
##     DiabetesPedigreeFunction Age Outcome
## 9                      0.158  53       1
## 14                     0.398  59       1
## 53                     0.342  30       0
## 109                    0.336  25       0
## 226                    0.101  22       0
## 229                    2.329  31       0
## 248                    0.427  23       0
## 287                    0.619  34       0
## 324                    0.731  43       1
## 410                    0.702  28       1
## 446                    2.420  25       1
## 567                    0.412  21       0
## 585                    0.687  52       1
## 598                    0.559  21       0
## 618                    0.257  23       0
## 656                    0.240  25       1
## 712                    0.439  40       0
## 754                    0.222  26       1
## 761                    0.766  22       0
num_outliers<- nrow(outliers_Insulin)
num_outliers
## [1] 19

Tomando los percentiles 25% y 75% se identifican los anteriores 19 datos atipicos.

BMI

outliers_BMI <- find_outliers(diabetes, "BMI")
outliers_BMI
##     Pregnancies Glucose BloodPressure SkinThickness Insulin  BMI
## 51            1     103            80            11      82 19.4
## 58            0     100            88            60     110 46.8
## 69            1      95            66            13      38 19.6
## 93            7      81            78            40      48 46.7
## 98            1      71            48            18      76 20.4
## 100           1     122            90            51     220 49.7
## 121           0     162            76            56     100 53.2
## 126           1      88            30            42      99 55.0
## 178           0     129           110            46     130 67.1
## 204           2      99            70            16      44 20.4
## 248           0     165            90            33     680 52.3
## 317           3      99            80            11      64 19.3
## 336           0     165            76            43     255 47.9
## 446           0     180            78            63      14 59.4
## 520           6     129            90             7     326 19.6
## 527           1      97            64            19      82 18.2
## 608           1      92            62            25      41 19.5
## 618           2      68            62            13      15 20.1
## 640           1     100            74            12      46 19.5
## 674           3     123           100            35     240 57.3
##     DiabetesPedigreeFunction Age Outcome
## 51                     0.491  22       0
## 58                     0.962  31       0
## 69                     0.334  25       0
## 93                     0.261  42       0
## 98                     0.323  22       0
## 100                    0.325  31       1
## 121                    0.759  25       1
## 126                    0.496  26       1
## 178                    0.319  26       1
## 204                    0.235  27       0
## 248                    0.427  23       0
## 317                    0.284  30       0
## 336                    0.259  26       0
## 446                    2.420  25       1
## 520                    0.582  60       0
## 527                    0.299  21       0
## 608                    0.482  25       0
## 618                    0.257  23       0
## 640                    0.149  28       0
## 674                    0.880  22       0
num_outliers<- nrow(outliers_BMI)
num_outliers
## [1] 20

Tomando los percentiles 25% y 75% se identifican los anteriores 19 datos atipicos.

Diabetes Pedigree

outliers_Pedigree <- find_outliers(diabetes, "DiabetesPedigreeFunction")
outliers_Pedigree
##     Pregnancies Glucose BloodPressure SkinThickness Insulin  BMI
## 5             0     137            40            35     168 43.1
## 40            4     111            72            47     207 37.1
## 136           2     125            60            20     140 33.8
## 148           2     106            64            35     119 30.5
## 226           1      87            78            27      32 34.6
## 229           4     197            70            39     744 36.7
## 230           0     117            80            31      53 45.2
## 260          11     155            76            28     150 33.3
## 309           0     128            68            19     180 30.5
## 326           1     157            72            21     168 25.6
## 329           2     102            86            36     120 45.5
## 330           6     105            70            32      68 30.8
## 371           3     173            82            48     465 38.4
## 396           2     127            58            24     275 27.7
## 446           0     180            78            63      14 59.4
## 528           3     116            74            15     105 26.3
## 568           6      92            62            32     126 32.0
## 594           2      82            52            22     115 28.5
## 634           1     128            82            17     183 27.5
## 705           4     110            76            20     100 28.4
##     DiabetesPedigreeFunction Age Outcome
## 5                      2.288  33       1
## 40                     1.390  56       1
## 136                    0.088  31       0
## 148                    1.400  34       0
## 226                    0.101  22       0
## 229                    2.329  31       0
## 230                    0.089  24       0
## 260                    1.353  51       1
## 309                    1.391  25       1
## 326                    0.123  24       0
## 329                    0.127  23       1
## 330                    0.122  37       0
## 371                    2.137  25       1
## 396                    1.600  25       0
## 446                    2.420  25       1
## 528                    0.107  24       0
## 568                    0.085  46       0
## 594                    1.699  25       0
## 634                    0.115  22       0
## 705                    0.118  27       0
num_outliers<- nrow(outliers_Pedigree)
num_outliers
## [1] 20

Tomando los percentiles 25% y 75% se identifican los anteriores 20 datos atipicos.

Filtro de Hampel

Pregnancies

lower_bound <- median(diabetes$Pregnancies) - 3 * mad(diabetes$Pregnancies, constant = 1)
upper_bound <- median(diabetes$Pregnancies) + 3 * mad(diabetes$Pregnancies, constant = 1)
outlier_ind <- which(diabetes$Pregnancies < lower_bound | diabetes$Pregnancies > upper_bound)
outliersP <- diabetes[outlier_ind, ]

print(paste("Número de outliers de'Pregnancies':", length(outlier_ind)))
## [1] "Número de outliers de'Pregnancies': 58"
outliersP
##     Pregnancies Glucose BloodPressure SkinThickness Insulin  BMI
## 8            10     115            NA            NA      NA 35.3
## 12           10     168            74            NA      NA 38.0
## 13           10     139            80            NA      NA 27.1
## 25           11     143            94            33     146 36.6
## 26           10     125            70            26     115 31.1
## 29           13     145            82            19     110 22.2
## 35           10     122            78            31      NA 27.6
## 37           11     138            76            NA      NA 33.2
## 73           13     126            90            NA      NA 43.4
## 87           13     106            72            54      NA 36.6
## 89           15     136            70            32     110 37.1
## 144          10     108            66            NA      NA 32.4
## 160          17     163            72            41     114 40.9
## 194          11     135            NA            NA      NA 52.3
## 216          12     151            70            40     271 41.8
## 247          10     122            68            NA      NA 31.2
## 255          12      92            62             7     258 27.6
## 260          11     155            76            28     150 33.3
## 271          10     101            86            37      NA 45.6
## 275          13     106            70            NA      NA 34.2
## 282          10     129            76            28     122 35.9
## 299          14     100            78            25     184 36.6
## 307          10     161            68            23     132 25.5
## 324          13     152            90            33      29 26.8
## 328          10     179            70            NA      NA 35.1
## 334          12     106            80            NA      NA 23.6
## 358          13     129            NA            30      NA 39.9
## 359          12      88            74            40      54 35.3
## 376          12     140            82            43     325 39.2
## 437          12     140            85            33      NA 37.4
## 456          14     175            62            30      NA 33.6
## 459          10     148            84            48     237 37.6
## 465          10     115            98            NA      NA 24.0
## 506          10      75            82            NA      NA 33.3
## 511          12      84            72            31      NA 29.7
## 519          13      76            60            NA      NA 32.8
## 543          10      90            85            32      NA 34.9
## 559          11     103            68            40      NA 46.2
## 560          11      85            74            NA      NA 30.1
## 579          10     133            68            NA      NA 27.0
## 583          12     121            78            17      NA 26.5
## 591          11     111            84            40      NA 46.8
## 615          11     138            74            26     144 36.1
## 635          10      92            62            NA      NA 25.9
## 636          13     104            72            NA      NA 31.2
## 649          11     136            84            35     130 28.3
## 659          11     127           106            NA      NA 39.0
## 661          10     162            84            NA      NA 27.7
## 668          10     111            70            27      NA 27.5
## 673          10      68           106            23      49 35.5
## 692          13     158           114            NA      NA 42.3
## 707          10     115            NA            NA      NA   NA
## 713          10     129            62            36      NA 41.2
## 718          10      94            72            18      NA 23.1
## 741          11     120            80            37     150 42.3
## 745          13     153            88            37     140 40.6
## 746          12     100            84            33     105 30.0
## 764          10     101            76            48     180 32.9
##     DiabetesPedigreeFunction Age Outcome
## 8                      0.134  29       0
## 12                     0.537  34       1
## 13                     1.441  57       0
## 25                     0.254  51       1
## 26                     0.205  41       1
## 29                     0.245  57       0
## 35                     0.512  45       0
## 37                     0.420  35       0
## 73                     0.583  42       1
## 87                     0.178  45       0
## 89                     0.153  43       1
## 144                    0.272  42       1
## 160                    0.817  47       1
## 194                    0.578  40       1
## 216                    0.742  38       1
## 247                    0.258  41       0
## 255                    0.926  44       1
## 260                    1.353  51       1
## 271                    1.136  38       1
## 275                    0.251  52       0
## 282                    0.280  39       0
## 299                    0.412  46       1
## 307                    0.326  47       1
## 324                    0.731  43       1
## 328                    0.200  37       0
## 334                    0.137  44       0
## 358                    0.569  44       1
## 359                    0.378  48       0
## 376                    0.528  58       1
## 437                    0.244  41       0
## 456                    0.212  38       1
## 459                    1.001  51       1
## 465                    1.022  34       0
## 506                    0.263  38       0
## 511                    0.297  46       1
## 519                    0.180  41       0
## 543                    0.825  56       1
## 559                    0.126  42       0
## 560                    0.300  35       0
## 579                    0.245  36       0
## 583                    0.259  62       0
## 591                    0.925  45       1
## 615                    0.557  50       1
## 635                    0.167  31       0
## 636                    0.465  38       1
## 649                    0.260  42       1
## 659                    0.190  51       0
## 661                    0.182  54       0
## 668                    0.141  40       1
## 673                    0.285  47       0
## 692                    0.257  44       1
## 707                    0.261  30       1
## 713                    0.441  38       1
## 718                    0.595  56       0
## 741                    0.785  48       1
## 745                    1.174  39       0
## 746                    0.488  46       0
## 764                    0.171  63       0

Realizando el filtro de Hampel, donde se consideran como valores atípicos los valores entre más o menos 3 desviaciones absolutas de la mediana, obtenemos 58 datos atipicos. ### Glucose

df_omit<-na.omit(diabetes)
lower_bound <- median(df_omit$Glucose) - 3 * mad(df_omit$Glucose, constant = 1)
upper_bound <- median(df_omit$Glucose) + 3 * mad(df_omit$Glucose, constant = 1)
outlier_ind <- which(df_omit$Glucose < lower_bound | df_omit$Glucose > upper_bound)
outliersP <-diabetes[outlier_ind, ]

print(paste("Número de outliers de'Glucose':", length(outlier_ind)))
## [1] "Número de outliers de'Glucose': 17"
print(outliersP)
##     Pregnancies Glucose BloodPressure SkinThickness Insulin  BMI
## 4             1      89            66            23      94 28.1
## 5             0     137            40            35     168 43.1
## 26           10     125            70            26     115 31.1
## 100           1     122            90            51     220 49.7
## 111           3     171            72            33     135 33.3
## 124           5     132            80            NA      NA 26.8
## 126           1      88            30            42      99 55.0
## 179           5     143            78            NA      NA 45.0
## 180           5     130            82            NA      NA 39.1
## 218           6     125            68            30     120 30.0
## 255          12      92            62             7     258 27.6
## 281           0     146            70            NA      NA 37.9
## 282          10     129            76            28     122 35.9
## 289           4      96            56            17      49 20.8
## 307          10     161            68            23     132 25.5
## 368           0     101            64            17      NA 21.0
## 386           1     119            54            13      50 22.3
##     DiabetesPedigreeFunction Age Outcome
## 4                      0.167  21       0
## 5                      2.288  33       1
## 26                     0.205  41       1
## 100                    0.325  31       1
## 111                    0.199  24       1
## 124                    0.186  69       0
## 126                    0.496  26       1
## 179                    0.190  47       0
## 180                    0.956  37       1
## 218                    0.464  32       0
## 255                    0.926  44       1
## 281                    0.334  28       1
## 282                    0.280  39       0
## 289                    0.340  26       0
## 307                    0.326  47       1
## 368                    0.252  21       0
## 386                    0.205  24       0

Omitiendo datos faltantes y realizando el filtro de Hampel, se tiene 17 datos atipicos. ### BloodPressure

df_omit<-na.omit(diabetes)
lower_bound <- median(diabetes$BloodPressure) - 3 * mad(diabetes$BloodPressure, constant = 1)
upper_bound <- median(diabetes$BloodPressure) + 3 * mad(diabetes$BloodPressure, constant = 1)
outlier_ind <- which(diabetes$BloodPressure < lower_bound | diabetes$BloodPressure > upper_bound)
outliers <- diabetes[outlier_ind, ]

print(paste("Número de outliers de'BloodPressure':", length(outlier_ind)))
## [1] "Número de outliers de'BloodPressure': 0"
print(outliers)
## [1] Pregnancies              Glucose                  BloodPressure           
## [4] SkinThickness            Insulin                  BMI                     
## [7] DiabetesPedigreeFunction Age                      Outcome                 
## <0 rows> (or 0-length row.names)

en este caso se obtienen 0 datos atipicos ### SkinThickness

df_omit<-na.omit(diabetes)
lower_bound <- median(df_omit$SkinThickness) - 3 * mad(df_omit$SkinThickness, constant = 1)
upper_bound <- median(df_omit$SkinThickness) + 3 * mad(df_omit$SkinThickness, constant = 1)
outlier_ind <- which(df_omit$SkinThickness < lower_bound | df_omit$SkinThickness > upper_bound)
outliersS<-diabetes[outlier_ind, ]
print(paste("Número de outliers de'SkinThickness':", length(outlier_ind)))
## [1] "Número de outliers de'SkinThickness': 3"
print(outliersS)
##     Pregnancies Glucose BloodPressure SkinThickness Insulin  BMI
## 27            7     147            76            NA      NA 39.4
## 56            1      73            50            10      NA 23.0
## 226           1      87            78            27      32 34.6
##     DiabetesPedigreeFunction Age Outcome
## 27                     0.257  43       1
## 56                     0.248  21       0
## 226                    0.101  22       0

aqui obtenemos 3 datos atipicos. ### Insulin

df_omit<-na.omit(diabetes)
lower_bound <- median(df_omit$Insulin) - 3 * mad(df_omit$Insulin, constant = 1)
upper_bound <- median(df_omit$Insulin) + 3 * mad(df_omit$Insulin, constant = 1)
outlier_ind <- which(df_omit$Insulin < lower_bound | df_omit$Insulin > upper_bound)
outliersI<-diabetes[outlier_ind, ]
print(paste("Número de outliers de'Insulin':", length(outlier_ind)))
## [1] "Número de outliers de'Insulin': 41"
print(outliersI)
##     Pregnancies Glucose BloodPressure SkinThickness Insulin  BMI
## 4             1      89            66            23      94 28.1
## 5             0     137            40            35     168 43.1
## 24            9     119            80            35      NA 29.0
## 25           11     143            94            33     146 36.6
## 26           10     125            70            26     115 31.1
## 52            1     101            50            15      36 24.2
## 68            2     109            92            NA      NA 42.7
## 74            4     129            86            20     270 35.1
## 89           15     136            70            32     110 37.1
## 97            2      92            62            28      NA 31.6
## 107           1      96           122            NA      NA 22.4
## 111           3     171            72            33     135 33.3
## 113           1      89            76            34      37 31.2
## 120           4      99            76            15      51 23.2
## 121           0     162            76            56     100 53.2
## 124           5     132            80            NA      NA 26.8
## 136           2     125            60            20     140 33.8
## 145           4     154            62            31     284 32.8
## 180           5     130            82            NA      NA 39.1
## 181           6      87            80            NA      NA 23.2
## 185           4     141            74            NA      NA 27.6
## 189           8     109            76            39     114 27.9
## 201           0     113            80            16      NA 31.0
## 207           8     196            76            29     280 37.5
## 209           1      96            64            27      87 33.2
## 212           0     147            85            54      NA 42.8
## 246           9     184            85            15      NA 30.0
## 250           1     111            86            19      NA 30.1
## 266           5      96            74            18      67 33.6
## 299          14     100            78            25     184 36.6
## 302           2     144            58            33     135 31.6
## 311           6      80            66            30      NA 26.2
## 317           3      99            80            11      64 19.3
## 330           6     105            70            32      68 30.8
## 338           5     115            76            NA      NA 31.2
## 358          13     129            NA            30      NA 39.9
## 363           5     103           108            37      NA 39.2
## 365           4     147            74            25     293 34.9
## 367           6     124            72            NA      NA 27.6
## 368           0     101            64            17      NA 21.0
## 388           8     105           100            36      NA 43.3
##     DiabetesPedigreeFunction Age Outcome
## 4                      0.167  21       0
## 5                      2.288  33       1
## 24                     0.263  29       1
## 25                     0.254  51       1
## 26                     0.205  41       1
## 52                     0.526  26       0
## 68                     0.845  54       0
## 74                     0.231  23       0
## 89                     0.153  43       1
## 97                     0.130  24       0
## 107                    0.207  27       0
## 111                    0.199  24       1
## 113                    0.192  23       0
## 120                    0.223  21       0
## 121                    0.759  25       1
## 124                    0.186  69       0
## 136                    0.088  31       0
## 145                    0.237  23       0
## 180                    0.956  37       1
## 181                    0.084  32       0
## 185                    0.244  40       0
## 189                    0.640  31       1
## 201                    0.874  21       0
## 207                    0.605  57       1
## 209                    0.289  21       0
## 212                    0.375  24       0
## 246                    1.213  49       1
## 250                    0.143  23       0
## 266                    0.997  43       0
## 299                    0.412  46       1
## 302                    0.422  25       1
## 311                    0.313  41       0
## 317                    0.284  30       0
## 330                    0.122  37       0
## 338                    0.343  44       1
## 358                    0.569  44       1
## 363                    0.305  65       0
## 365                    0.385  30       0
## 367                    0.368  29       1
## 368                    0.252  21       0
## 388                    0.239  45       1

realizando el filtro de Hampel, se tiene 41 datos atipicos ### BMI

df_omit<-na.omit(diabetes)
lower_bound <- median(df_omit$BMI) - 3 * mad(df_omit$BMI, constant = 1)
upper_bound <- median(df_omit$BMI) + 3 * mad(df_omit$BMI, constant = 1)
outlier_ind <- which(df_omit$BMI < lower_bound | df_omit$BMI > upper_bound)
outliersB<-diabetes[outlier_ind, ]
print(paste("Número de outliers de'BMI':", length(outlier_ind)))
## [1] "Número de outliers de'BMI': 16"
print(outliersB)
##     Pregnancies Glucose BloodPressure SkinThickness Insulin  BMI
## 21            3     126            88            41     235 39.3
## 27            7     147            76            NA      NA 39.4
## 30            5     117            92            NA      NA 34.1
## 45            7     159            64            NA      NA 27.4
## 56            1      73            50            10      NA 23.0
## 58            0     100            88            60     110 46.8
## 87           13     106            72            54      NA 36.6
## 120           4      99            76            15      51 23.2
## 159           2      88            74            19      53 29.0
## 169           4     110            66            NA      NA 31.9
## 226           1      87            78            27      32 34.6
## 266           5      96            74            18      67 33.6
## 269           0     102            52            NA      NA 25.1
## 312           0     106            70            37     148 39.4
## 327           1     122            64            32     156 35.1
## 349           3      99            62            19      74 21.8
##     DiabetesPedigreeFunction Age Outcome
## 21                     0.704  27       0
## 27                     0.257  43       1
## 30                     0.337  38       0
## 45                     0.294  40       0
## 56                     0.248  21       0
## 58                     0.962  31       0
## 87                     0.178  45       0
## 120                    0.223  21       0
## 159                    0.229  22       0
## 169                    0.471  29       0
## 226                    0.101  22       0
## 266                    0.997  43       0
## 269                    0.078  21       0
## 312                    0.605  22       0
## 327                    0.692  30       1
## 349                    0.279  26       0

hay un total de 16 outliears ### DiabetesPedigreeFunction

df_omit<-na.omit(diabetes)
lower_bound <- median(df_omit$DiabetesPedigreeFunction) - 3 * mad(df_omit$DiabetesPedigreeFunction, constant = 1)
upper_bound <- median(df_omit$DiabetesPedigreeFunction) + 3 * mad(df_omit$DiabetesPedigreeFunction, constant = 1)
outlier_ind <- which(df_omit$DiabetesPedigreeFunction < lower_bound | df_omit$DiabetesPedigreeFunction > upper_bound)
outliersD<-diabetes[outlier_ind, ]
print(paste("Número de outliers de'DiabetesPedigreeFunction':", length(outlier_ind)))
## [1] "Número de outliers de'DiabetesPedigreeFunction': 28"
print(outliersD)
##     Pregnancies Glucose BloodPressure SkinThickness Insulin  BMI
## 2             1      85            66            29      NA 26.6
## 18            7     107            74            NA      NA 29.6
## 71            2     100            66            20      90 32.9
## 73           13     126            90            NA      NA 43.4
## 90            1     107            68            19      NA 26.5
## 107           1      96           122            NA      NA 22.4
## 111           3     171            72            33     135 33.3
## 118           5      78            48            NA      NA 33.7
## 125           0     113            76            NA      NA 33.3
## 142           5     106            82            30      NA 39.5
## 153           9     156            86            28     155 34.3
## 185           4     141            74            NA      NA 27.6
## 195           8      85            55            20      NA 24.4
## 203           0     108            68            20      NA 27.3
## 209           1      96            64            27      87 33.2
## 226           1      87            78            27      32 34.6
## 251           9     106            52            NA      NA 31.2
## 253           2      90            80            14      55 24.4
## 274           1      71            78            50      45 33.2
## 282          10     129            76            28     122 35.9
## 303           5      77            82            41      42 35.8
## 305           3     150            76            NA      NA 21.0
## 311           6      80            66            30      NA 26.2
## 340           7     178            84            NA      NA 39.9
## 341           1     130            70            13     105 25.9
## 383           1     109            60             8     182 25.4
## 385           1     125            70            24     110 24.3
## 389           5     144            82            26     285 32.0
##     DiabetesPedigreeFunction Age Outcome
## 2                      0.351  31       0
## 18                     0.254  31       1
## 71                     0.867  28       1
## 73                     0.583  42       1
## 90                     0.165  24       0
## 107                    0.207  27       0
## 111                    0.199  24       1
## 118                    0.654  25       0
## 125                    0.278  23       1
## 142                    0.286  38       0
## 153                    1.189  42       1
## 185                    0.244  40       0
## 195                    0.136  42       0
## 203                    0.787  32       0
## 209                    0.289  21       0
## 226                    0.101  22       0
## 251                    0.380  42       0
## 253                    0.249  24       0
## 274                    0.422  21       0
## 282                    0.280  39       0
## 303                    0.156  35       0
## 305                    0.207  37       0
## 311                    0.313  41       0
## 340                    0.331  41       1
## 341                    0.472  22       0
## 383                    0.947  21       0
## 385                    0.221  25       0
## 389                    0.452  58       1

28 datos atipicos ### Age

df_omit<-na.omit(diabetes)
lower_bound <- median(df_omit$Age) - 3 * mad(df_omit$Age, constant = 1)
upper_bound <- median(df_omit$Age) + 3 * mad(df_omit$Age, constant = 1)
outlier_ind <- which(df_omit$Age < lower_bound | df_omit$Age > upper_bound)
outliersA<-diabetes[outlier_ind, ]
print(paste("Número de outliers de'Age':", length(outlier_ind)))
## [1] "Número de outliers de'Age': 58"
print(outliersA)
##     Pregnancies Glucose BloodPressure SkinThickness Insulin  BMI
## 4             1      89            66            23      94 28.1
## 5             0     137            40            35     168 43.1
## 6             5     116            74            NA      NA 25.6
## 11            4     110            92            NA      NA 37.6
## 14            1     189            60            23     846 30.1
## 18            7     107            74            NA      NA 29.6
## 20            1     115            70            30      96 34.6
## 24            9     119            80            35      NA 29.0
## 38            9     102            76            37      NA 32.9
## 52            1     101            50            15      36 24.2
## 78            5      95            72            33      NA 37.7
## 79            0     131            NA            NA      NA 43.2
## 89           15     136            70            32     110 37.1
## 99            6      93            50            30      64 28.7
## 100           1     122            90            51     220 49.7
## 108           4     144            58            28     140 29.5
## 113           1      89            76            34      37 31.2
## 116           4     146            92            NA      NA 31.2
## 123           2     107            74            30     100 33.6
## 125           0     113            76            NA      NA 33.3
## 127           3     120            70            30     135 42.9
## 135           2      96            68            13      49 21.1
## 147           9      57            80            37      NA 32.8
## 151           1     136            74            50     204 37.4
## 162           7     102            74            40     105 37.2
## 173           2      87            NA            23      NA 28.9
## 178           0     129           110            46     130 67.1
## 184           5      73            60            NA      NA 26.8
## 189           8     109            76            39     114 27.9
## 198           3     107            62            13      48 22.9
## 221           0     177            60            29     478 34.6
## 235           3      74            68            28      45 29.7
## 236           4     171            72            NA      NA 43.6
## 237           7     181            84            21     192 35.9
## 251           9     106            52            NA      NA 31.2
## 253           2      90            80            14      55 24.4
## 255          12      92            62             7     258 27.6
## 265           4     123            62            NA      NA 32.0
## 266           5      96            74            18      67 33.6
## 277           7     106            60            24      NA 26.5
## 282          10     129            76            28     122 35.9
## 284           7     161            86            NA      NA 30.4
## 294           1     128            48            45     194 40.5
## 302           2     144            58            33     135 31.6
## 303           5      77            82            41      42 35.8
## 310           2     124            68            28     205 32.9
## 318           3     182            74            NA      NA 30.5
## 342           1      95            74            21      73 25.9
## 345           8      95            72            NA      NA 36.8
## 346           8     126            88            36     108 38.5
## 347           1     139            46            19      83 28.7
## 348           3     116            NA            NA      NA 23.5
## 355           3      90            78            NA      NA 42.7
## 357           1     125            50            40     167 33.3
## 358          13     129            NA            30      NA 39.9
## 380           0      93           100            39      72 43.4
## 384           1      90            62            18      59 25.1
## 391           1     100            66            29     196 32.0
##     DiabetesPedigreeFunction Age Outcome
## 4                      0.167  21       0
## 5                      2.288  33       1
## 6                      0.201  30       0
## 11                     0.191  30       0
## 14                     0.398  59       1
## 18                     0.254  31       1
## 20                     0.529  32       1
## 24                     0.263  29       1
## 38                     0.665  46       1
## 52                     0.526  26       0
## 78                     0.370  27       0
## 79                     0.270  26       1
## 89                     0.153  43       1
## 99                     0.356  23       0
## 100                    0.325  31       1
## 108                    0.287  37       0
## 113                    0.192  23       0
## 116                    0.539  61       1
## 123                    0.404  23       0
## 125                    0.278  23       1
## 127                    0.452  30       0
## 135                    0.647  26       0
## 147                    0.096  41       0
## 151                    0.399  24       0
## 162                    0.204  45       0
## 173                    0.773  25       0
## 178                    0.319  26       1
## 184                    0.268  27       0
## 189                    0.640  31       1
## 198                    0.678  23       1
## 221                    1.072  21       1
## 235                    0.293  23       0
## 236                    0.479  26       1
## 237                    0.586  51       1
## 251                    0.380  42       0
## 253                    0.249  24       0
## 255                    0.926  44       1
## 265                    0.226  35       1
## 266                    0.997  43       0
## 277                    0.296  29       1
## 282                    0.280  39       0
## 284                    0.165  47       1
## 294                    0.613  24       1
## 302                    0.422  25       1
## 303                    0.156  35       0
## 310                    0.875  30       1
## 318                    0.345  29       1
## 342                    0.673  36       0
## 345                    0.485  57       0
## 346                    0.349  49       0
## 347                    0.654  22       0
## 348                    0.187  23       0
## 355                    0.559  21       0
## 357                    0.962  28       1
## 358                    0.569  44       1
## 380                    1.021  35       0
## 384                    1.268  25       0
## 391                    0.444  42       0

hay un total de 58 datos atipicos en la variable Age

Prueba de Grubbs

H0: El valor más alto/bajo no es un valor atípico

H1: El valor más alto/bajo es un valor atípico

Pregnancies

testD <- grubbs.test(diabetes$Pregnancies)
testD
## 
##  Grubbs test for one outlier
## 
## data:  diabetes$Pregnancies
## G = 3.9040, U = 0.9801, p-value = 0.03367
## alternative hypothesis: highest value 17 is an outlier
testD <- grubbs.test(diabetes$Pregnancies, opposite = TRUE)
testD
## 
##  Grubbs test for one outlier
## 
## data:  diabetes$Pregnancies
## G = 1.1411, U = 0.9983, p-value = 1
## alternative hypothesis: lowest value 0 is an outlier

Con un nivel de significación del 5%, rechazamos la hipótesis nula de que el valor más alto no es un valor atípico, ya que el valor p es menor que 0.05. Por lo tanto, tenemos evidencia suficiente para considerar que el valor más alto es un valor atípico.

Para el valor más bajo en los datos de embarazos: Con un nivel de significación del 5%, no rechazamos la hipótesis nula de que el valor más bajo no es un valor atípico, ya que el valor p es mayor que 0.05. No tenemos evidencia suficiente para decir que un valor de 0 embarazos es un valor atípico. ### Glucose

testG <- grubbs.test(diabetes$Glucose)
testG
## 
##  Grubbs test for one outlier
## 
## data:  diabetes$Glucose
## G = 2.54413, U = 0.99149, p-value = 1
## alternative hypothesis: lowest value 44 is an outlier
testG <- grubbs.test(diabetes$Glucose,opposite = TRUE )
testG
## 
##  Grubbs test for one outlier
## 
## data:  diabetes$Glucose
## G = 2.53190, U = 0.99158, p-value = 1
## alternative hypothesis: highest value 199 is an outlier

En ambas pruebas, la falta de evidencia para rechazar la hipótesis nula indica que, según el test de Grubbs, no hay valores atípicos significativos en los extremos bajo o alto de los niveles de glucosa en este conjunto de datos. ### BloodPressure

testG <- grubbs.test(diabetes$BloodPressure)
testG
## 
##  Grubbs test for one outlier
## 
## data:  diabetes$BloodPressure
## G = 4.00535, U = 0.97805, p-value = 0.02077
## alternative hypothesis: highest value 122 is an outlier
testG <- grubbs.test(diabetes$BloodPressure,opposite = TRUE)
testG
## 
##  Grubbs test for one outlier
## 
## data:  diabetes$BloodPressure
## G = 3.90927, U = 0.97909, p-value = 0.03132
## alternative hypothesis: lowest value 24 is an outlier

el valor más bajo y el más alto de presión arterial, se consideran estadísticamente valores atípicos en el conjunto de datos.

testS <- grubbs.test(diabetes$SkinThickness)
testS
## 
##  Grubbs test for one outlier
## 
## data:  diabetes$SkinThickness
## G = 6.66667, U = 0.91754, p-value = 2.687e-09
## alternative hypothesis: highest value 99 is an outlier
testS <- grubbs.test(diabetes$SkinThickness,opposite = TRUE)
testS
## 
##  Grubbs test for one outlier
## 
## data:  diabetes$SkinThickness
## G = 2.1145, U = 0.9917, p-value = 1
## alternative hypothesis: lowest value 7 is an outlier

Con un nivel de significación del 5%, rechazamos la hipótesis nula de que el valor más alto no es un valor atípico, lo que sugiere que 99 es un valor atípico estadísticamente significativo.

Con un valor p de 1, no hay evidencia estadística para rechazar la hipótesis nula; por lo tanto, no consideramos que el valor más bajo sea un valor atípico. ### Insulin

testI <- grubbs.test(diabetes$Insulin)
testI
## 
##  Grubbs test for one outlier
## 
## data:  diabetes$Insulin
## G = 5.8131, U = 0.9138, p-value = 5.589e-07
## alternative hypothesis: highest value 846 is an outlier
testI <- grubbs.test(diabetes$Insulin, opposite = TRUE)
testI
## 
##  Grubbs test for one outlier
## 
## data:  diabetes$Insulin
## G = 1.19173, U = 0.99638, p-value = 1
## alternative hypothesis: lowest value 14 is an outlier

Para el valor más alto (posiblemente 846): Con un valor p tan bajo, rechazamos la hipótesis nula y concluimos que el valor más alto es un valor atípico significativo.Para el valor más bajo (posiblemente 14):Con un valor p de 1, no hay evidencia para rechazar la hipótesis nula, por lo que no consideramos que el valor más bajo sea un valor atípico. ### BMI

testB <- grubbs.test(diabetes$BMI)
testB
## 
##  Grubbs test for one outlier
## 
## data:  diabetes$BMI
## G = 5.00254, U = 0.96685, p-value = 0.0001734
## alternative hypothesis: highest value 67.1 is an outlier
testB <- grubbs.test(diabetes$BMI, opposite = TRUE)
testB
## 
##  Grubbs test for one outlier
## 
## data:  diabetes$BMI
## G = 2.05884, U = 0.99439, p-value = 1
## alternative hypothesis: lowest value 18.2 is an outlier

En ambos casos, los valores extremos se consideran estadísticamente atípicos en este conjunto de datos de BMI.

Age

testA <- grubbs.test(diabetes$Age)
testA
## 
##  Grubbs test for one outlier
## 
## data:  diabetes$Age
## G = 4.06107, U = 0.97847, p-value = 0.01716
## alternative hypothesis: highest value 81 is an outlier
testA <- grubbs.test(diabetes$Age, opposite = TRUE)
testA
## 
##  Grubbs test for one outlier
## 
## data:  diabetes$Age
## G = 1.04087, U = 0.99859, p-value = 1
## alternative hypothesis: lowest value 21 is an outlier

En conclusión, hay suficiente evidencia estadística para clasificar el valor más alto de edad como un valor atípico, mientras que el valor más bajo no se considera atípico según la prueba de Grubbs.

Prueba de Dixon

Dado que este prueba es ultil para muestras de pequeño tamaño (normalmente n≤25 ) esta no sera tomada en cuenta ya que contamos con una muestra de tamaño de 768.

Prueba de Rosner

Tomando los k datos atipicos teniendo en el grafico Boxplot, realizaremos la prueba de Rosner

Pregnancies

test <- rosnerTest(diabetes$Pregnancies, k = 4)
test$all.stats
##   i   Mean.i     SD.i Value Obs.Num    R.i+1 lambda.i+1 Outlier
## 1 0 3.845052 3.369578    17     160 3.904034   3.974092   FALSE
## 2 1 3.827901 3.338063    15      89 3.346880   3.973762   FALSE
## 3 2 3.813316 3.315699    14     299 3.072258   3.973432   FALSE
## 4 3 3.800000 3.297310    14     456 3.093431   3.973102   FALSE

segun la prueba, ninguno de los 5 datos que señala el boxplot, no son ### Glucose

test <- rosnerTest(diabetes$Glucose, k = 5)
## Warning in rosnerTest(diabetes$Glucose, k = 5): 5 observations with NA/NaN/Inf
## in 'x' removed.
test$all.stats
##   i   Mean.i     SD.i Value Obs.Num    R.i+1 lambda.i+1 Outlier
## 1 0 121.6868 30.53564    44      63 2.544134   3.972440   FALSE
## 2 1 121.7887 30.42548   199     662 2.537718   3.972108   FALSE
## 3 2 121.6873 30.31622   198     562 2.517225   3.971776   FALSE
## 4 3 121.5868 30.20929   197       9 2.496357   3.971443   FALSE
## 5 4 121.4875 30.10469   197     229 2.508331   3.971110   FALSE

Tomando los datos atipicos sugeridos en el grafico Boxplot, ningun dato es atipico bajo esta prueba. ### BloodPressure

test <- rosnerTest(diabetes$BloodPressure, k=14)
## Warning in rosnerTest(diabetes$BloodPressure, k = 14): 35 observations with
## NA/NaN/Inf in 'x' removed.
## Warning in rosnerTest(diabetes$BloodPressure, k = 14): The true Type I error may be larger than assumed.
## Although the help file for 'rosnerTest' has a table with information
## on the estimated Type I error level,
## simulations were not run for k > 10 or k > floor(n/2).
test$all.stats
##     i   Mean.i     SD.i Value Obs.Num    R.i+1 lambda.i+1 Outlier
## 1   0 72.40518 12.38216   122     107 4.005345   3.962273    TRUE
## 2   1 72.33743 12.25391    24     598 3.944655   3.961926   FALSE
## 3   2 72.40356 12.13090    30      19 3.495498   3.961579   FALSE
## 4   3 72.46164 12.03706    30     126 3.527576   3.961231   FALSE
## 5   4 72.51989 11.94194   114     692 3.473483   3.960883   FALSE
## 6   5 72.46291 11.85057   110      44 3.167534   3.960534   FALSE
## 7   6 72.41128 11.77650   110     178 3.191841   3.960185   FALSE
## 8   7 72.35950 11.70153   110     550 3.216716   3.959835   FALSE
## 9   8 72.30759 11.62563   108      85 3.070149   3.959484   FALSE
## 10  9 72.25829 11.55758   108     363 3.092490   3.959133   FALSE
## 11 10 72.20885 11.48873    38     600 2.977600   3.958782   FALSE
## 12 11 72.25623 11.42579   106     659 2.953298   3.958430   FALSE
## 13 12 72.20943 11.36426   106     663 2.973407   3.958077   FALSE
## 14 13 72.16250 11.30202   106     673 2.993933   3.957724   FALSE

con un k de 14, solo el valor más alto fue el unico clasificado como valor atipico segun la prueba ### SkinThickness

test <- rosnerTest(diabetes$SkinThickness, k = 3)
## Warning in rosnerTest(diabetes$SkinThickness, k = 3): 227 observations with
## NA/NaN/Inf in 'x' removed.
test$all.stats
##   i   Mean.i      SD.i Value Obs.Num    R.i+1 lambda.i+1 Outlier
## 1 0 29.15342 10.476982    99     580 6.666670   3.883895    TRUE
## 2 1 29.02407 10.045046    63     446 3.382357   3.883409   FALSE
## 3 2 28.96104  9.946902    60      58 3.120465   3.882923   FALSE

En la prueba de Rosner se identifica que solo un dato es atipico

Insulin

test <- rosnerTest(diabetes$Insulin, k = 24)
## Warning in rosnerTest(diabetes$Insulin, k = 24): 374 observations with
## NA/NaN/Inf in 'x' removed.
## Warning in rosnerTest(diabetes$Insulin, k = 24): The true Type I error may be larger than assumed.
## Although the help file for 'rosnerTest' has a table with information
## on the estimated Type I error level,
## simulations were not run for k > 10 or k > floor(n/2).
test$all.stats
##     i   Mean.i      SD.i Value Obs.Num    R.i+1 lambda.i+1 Outlier
## 1   0 155.5482 118.77586   846      14 5.813065   3.799155    TRUE
## 2   1 153.7913 113.68582   744     229 5.191576   3.798462    TRUE
## 3   2 152.2857 109.83778   680     248 4.804488   3.797768    TRUE
## 4   3 150.9361 106.67422   600     585 4.209677   3.797071    TRUE
## 5   4 149.7846 104.34994   579     410 4.113231   3.796373    TRUE
## 6   5 148.6812 102.18094   545     287 3.878598   3.795672    TRUE
## 7   6 147.6598 100.30461   543       9 3.941396   3.794970    TRUE
## 8   7 146.6382  98.39272   540     656 3.997875   3.794265    TRUE
## 9   8 145.6192  96.45376   510     754 3.777777   3.793558    TRUE
## 10  9 144.6727  94.76757   495     112 3.696700   3.792850    TRUE
## 11 10 143.7604  93.18297   495     187 3.769354   3.792139    TRUE
## 12 11 142.8433  91.55324   485     154 3.737242   3.791426    TRUE
## 13 12 141.9476  89.97732   480     487 3.757084   3.790711    TRUE
## 14 13 141.0604  88.40644   480     696 3.833879   3.789994    TRUE
## 15 14 140.1684  86.78946   478     221 3.892542   3.789275    TRUE
## 16 15 139.2770  85.14463   474     416 3.931228   3.788554    TRUE
## 17 16 138.3915  83.49171   465     371 3.911867   3.787830    TRUE
## 18 17 137.5252  81.88374   440     646 3.693954   3.787104   FALSE
## 19 18 136.7207  80.48728   415     393 3.457432   3.786377   FALSE
## 20 19 135.9787  79.29637   402     249 3.354773   3.785646   FALSE
## 21 20 135.2674  78.19552   392     716 3.283214   3.784914   FALSE
## 22 21 134.5791  77.15776   387     711 3.271491   3.784180   FALSE
## 23 22 133.9005  76.13910   375     259 3.166566   3.783443   FALSE
## 24 23 133.2507  75.20174   370     232 3.148189   3.782704   FALSE

17 de los 24 datos ### BMI

test <- rosnerTest(diabetes$BMI, k = 8)
## Warning in rosnerTest(diabetes$BMI, k = 8): 11 observations with NA/NaN/Inf in
## 'x' removed.
test$all.stats
##   i   Mean.i     SD.i Value Obs.Num    R.i+1 lambda.i+1 Outlier
## 1 0 32.45746 6.924988  67.1     178 5.002541   3.970442    TRUE
## 2 1 32.41164 6.813761  59.4     446 3.960861   3.970107   FALSE
## 3 2 32.37589 6.746971  57.3     674 3.694118   3.969772   FALSE
## 4 3 32.34284 6.689992  55.0     126 3.386725   3.969437   FALSE
## 5 4 32.31275 6.643189  53.2     121 3.144160   3.969101   FALSE
## 6 5 32.28497 6.603713  52.9     304 3.121733   3.968764   FALSE
## 7 6 32.25752 6.565042  52.3     194 3.052909   3.968427   FALSE
## 8 7 32.23080 6.528422  52.3     248 3.074127   3.968089   FALSE

En el caso de BMI el valor más alto clasifica como valor atipico ### Edad

test <- rosnerTest(diabetes$Age, k = 9)
test$all.stats
##   i   Mean.i     SD.i Value Obs.Num    R.i+1 lambda.i+1 Outlier
## 1 0 33.24089 11.76023    81     460 4.061069   3.974092    TRUE
## 2 1 33.17862 11.64053    72     454 3.335018   3.973762   FALSE
## 3 2 33.12794 11.56315    70     667 3.188755   3.973432   FALSE
## 4 3 33.07974 11.49346    69     124 3.125278   3.973102   FALSE
## 5 4 33.03272 11.42714    69     685 3.147531   3.972771   FALSE
## 6 5 32.98558 11.36006    68     675 3.082239   3.972440   FALSE
## 7 6 32.93963 11.29634    67     364 3.015167   3.972108   FALSE
## 8 7 32.89488 11.23596    67     490 3.035354   3.971776   FALSE
## 9 8 32.85000 11.17491    67     538 3.055953   3.971443   FALSE

Tomando los 9 datos atipicos sugeridos en el grafico Boxplot y realizando la prueba de Rosner se identifica que solo un dato es atipico ### pedigri

test <- rosnerTest(diabetes$DiabetesPedigreeFunction, k = 29)
## Warning in rosnerTest(diabetes$DiabetesPedigreeFunction, k = 29): The true Type I error may be larger than assumed.
## Although the help file for 'rosnerTest' has a table with information
## on the estimated Type I error level,
## simulations were not run for k > 10 or k > floor(n/2).
test$all.stats
##     i    Mean.i      SD.i Value Obs.Num    R.i+1 lambda.i+1 Outlier
## 1   0 0.4718763 0.3313286 2.420     446 5.879733   3.974092    TRUE
## 2   1 0.4693364 0.3239768 2.329     229 5.740114   3.973762    TRUE
## 3   2 0.4669086 0.3171301 2.288       5 5.742410   3.973432    TRUE
## 4   3 0.4645281 0.3104137 2.137     371 5.387880   3.973102    TRUE
## 5   4 0.4623390 0.3046509 1.893      46 4.696067   3.972771    TRUE
## 6   5 0.4604640 0.3004070 1.781      59 4.395823   3.972440    TRUE
## 7   6 0.4587310 0.2967633 1.731     372 4.287150   3.972108    TRUE
## 8   7 0.4570591 0.2933457 1.699     594 4.233710   3.971776    TRUE
## 9   8 0.4554250 0.2900522 1.698     622 4.283971   3.971443    TRUE
## 10  9 0.4537879 0.2867083 1.600     396 3.997834   3.971110    TRUE
## 11 10 0.4522757 0.2838528 1.476     331 3.606533   3.970776   FALSE
## 12 11 0.4509234 0.2815864 1.461     623 3.587093   3.970442   FALSE
## 13 12 0.4495873 0.2793614 1.441      13 3.548854   3.970107   FALSE
## 14 13 0.4482742 0.2772021 1.400     148 3.433329   3.969772   FALSE
## 15 14 0.4470119 0.2752064 1.394     662 3.441011   3.969437   FALSE
## 16 15 0.4457543 0.2732126 1.391     309 3.459744   3.969101   FALSE
## 17 16 0.4444973 0.2712070 1.390      40 3.486277   3.968764   FALSE
## 18 17 0.4432383 0.2691797 1.353     260 3.379755   3.968427   FALSE
## 19 18 0.4420253 0.2672975 1.321     188 3.288376   3.968089   FALSE
## 20 19 0.4408518 0.2655357 1.318     244 3.303315   3.967751   FALSE
## 21 20 0.4396791 0.2637656 1.292     660 3.231358   3.967412   FALSE
## 22 21 0.4385382 0.2620886 1.282     619 3.218232   3.967073   FALSE
## 23 22 0.4374075 0.2604350 1.268     384 3.189250   3.966734   FALSE
## 24 23 0.4362926 0.2588225 1.258     607 3.174792   3.966394   FALSE
## 25 24 0.4351882 0.2572339 1.251     535 3.171479   3.966053   FALSE
## 26 25 0.4340902 0.2556565 1.224     219 3.089731   3.965712   FALSE
## 27 26 0.4330256 0.2541757 1.224     293 3.111920   3.965370   FALSE
## 28 27 0.4319582 0.2526776 1.222     101 3.126679   3.965028   FALSE
## 29 28 0.4308905 0.2511705 1.213     246 3.113858   3.964686   FALSE

la prueba rosner identifico 10 outliers ## Valores Faltantes

pMiss <- function(x){sum(is.na(x))/length(x)*100}
apply(diabetes,2,pMiss)
##              Pregnancies                  Glucose            BloodPressure 
##                0.0000000                0.6510417                4.5572917 
##            SkinThickness                  Insulin                      BMI 
##               29.5572917               48.6979167                1.4322917 
## DiabetesPedigreeFunction                      Age                  Outcome 
##                0.0000000                0.0000000                0.0000000

esta función da cuenta de cuantos datos flatantes hay en cada columna de datos

vis_miss(diabetes)

md.pattern(diabetes, rotate.names = TRUE)

##     Pregnancies DiabetesPedigreeFunction Age Outcome Glucose BMI BloodPressure
## 392           1                        1   1       1       1   1             1
## 140           1                        1   1       1       1   1             1
## 192           1                        1   1       1       1   1             1
## 2             1                        1   1       1       1   1             0
## 26            1                        1   1       1       1   1             0
## 1             1                        1   1       1       1   0             1
## 1             1                        1   1       1       1   0             1
## 2             1                        1   1       1       1   0             1
## 7             1                        1   1       1       1   0             0
## 1             1                        1   1       1       0   1             1
## 4             1                        1   1       1       0   1             1
##               0                        0   0       0       5  11            35
##     SkinThickness Insulin    
## 392             1       1   0
## 140             1       0   1
## 192             0       0   2
## 2               1       0   2
## 26              0       0   3
## 1               1       1   1
## 1               1       0   2
## 2               0       0   3
## 7               0       0   4
## 1               1       1   1
## 4               1       0   2
##               227     374 652

aqui podemos ver que tenemos un 9,4% de datos faltantes. Glucose: 5 datos faltantes.

BMI: 11 datos faltantes.

BloodPressure: 35 datos faltantes.

SkinThickness: 227 datos faltantes.

Insulin: 374 datos faltantes.

En total el data set Diabetes presenta 652 datos faltantes.

aggr_plot <- aggr(diabetes, col=c('navyblue','red'), numbers=TRUE, sortVars=TRUE, labels=names(diabetes),
                  cex.axis=.7, gap=3, ylab=c("Histogram of missing data","Pattern"))

## 
##  Variables sorted by number of missings: 
##                  Variable       Count
##                   Insulin 0.486979167
##             SkinThickness 0.295572917
##             BloodPressure 0.045572917
##                       BMI 0.014322917
##                   Glucose 0.006510417
##               Pregnancies 0.000000000
##  DiabetesPedigreeFunction 0.000000000
##                       Age 0.000000000
##                   Outcome 0.000000000

Histograma de datos faltantes:

Este gráfico de barras muestra la proporción de datos faltantes para cada variable. La barra más alta corresponde a la variable ‘Insulina’, lo que indica que esta es la variable con la mayor cantidad de datos faltantes. Le sigue ‘Grosor de Piel’, que también tiene una cantidad significativa de datos faltantes. Las variables ‘BMI’, ‘Glucosa’, ‘Embarazos’, ‘Edad’ y ‘Outcome’ tienen menos datos faltantes, como se indica por las barras más cortas.

Patrón de datos faltantes:

La matriz de la derecha parece mostrar los patrones de datos faltantes en el conjunto de datos. Las celdas azules representan observaciones donde los datos están presentes, mientras que las celdas rojas indican la ausencia de datos (datos faltantes). La proporción de patrones de ausencia se muestra en el eje derecho, con algunos patrones que ocurren con mayor frecuencia, como indican los valores mayores (0.5104, 0.2500, etc.).

Borrar NAs

na_omit <- na.omit(diabetes)
head(na_omit)
##    Pregnancies Glucose BloodPressure SkinThickness Insulin  BMI
## 4            1      89            66            23      94 28.1
## 5            0     137            40            35     168 43.1
## 7            3      78            50            32      88 31.0
## 9            2     197            70            45     543 30.5
## 14           1     189            60            23     846 30.1
## 15           5     166            72            19     175 25.8
##    DiabetesPedigreeFunction Age Outcome
## 4                     0.167  21       0
## 5                     2.288  33       1
## 7                     0.248  26       1
## 9                     0.158  53       1
## 14                    0.398  59       1
## 15                    0.587  51       1
plot_comparison <- function(df_original, df_no_na, column_name) {

  ggp1 <- ggplot(data.frame(value = df_original[[column_name]]), aes(x = value)) +
    geom_histogram(fill = "#FBD000", color = "#E52521", alpha = 0.9) +
    ggtitle("Original data") +
    xlab(column_name) + ylab('Frequency') +
    theme_minimal() +
    theme(plot.title = element_text(size = 15))
  
  ggp2 <- ggplot(data.frame(value = df_no_na[[column_name]]), aes(x = value)) +
    geom_histogram(fill = "#43B047", color = "#049CD8", alpha = 0.9) +
    ggtitle("Data without NAs") +
    xlab(column_name) + ylab('Frequency') +
    theme_minimal() +
    theme(plot.title = element_text(size = 15))
  
  grid.arrange(ggp1, ggp2, ncol = 2)
}

tomamos las variables con datos faltantes

Glucose

plot_comparison(diabetes, na_omit, "Glucose")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 5 rows containing non-finite values (`stat_bin()`).
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

El histograma de la derecha, en verde, muestra la distribución de los niveles de glucosa después de eliminar los valores no disponibles (NAs). La distribución sigue siendo similar a la de los datos originales, pero las frecuencias son más bajas, lo que sugiere que se han eliminado algunos datos. La moda parece estar en el mismo rango, aunque la distribución de la izquierda parece más suave, lo que puede indicar que al eliminar los datos faltantes, se ha perdido algo de la variabilidad natural. ### BloodPressure

plot_comparison(diabetes, na_omit, "BloodPressure")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 35 rows containing non-finite values (`stat_bin()`).
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Aunque la forma general de la distribución es similar a la de los datos originales, las frecuencias son menores, lo que indica que se han removido algunas observaciones. La moda y la distribución central parecen consistentes con los datos originales, aunque el histograma parece menos suave, lo cual puede ser resultado de una menor cantidad de datos y, por tanto, de una menor frecuencia en cada bin. ### SkinThickness

plot_comparison(diabetes, na_omit, "SkinThickness")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 227 rows containing non-finite values (`stat_bin()`).
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

La distribución es similar a la de los datos originales, pero la concentración de las frecuencias es más alta en un rango estrecho y el histograma parece menos suave, probablemente debido a la reducción del tamaño del conjunto de datos. Esto podría ser indicativo de que los valores NAs estaban distribuidos uniformemente a través del rango de datos. ### Insulin

plot_comparison(diabetes, na_omit, "Insulin")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 374 rows containing non-finite values (`stat_bin()`).
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

La distribución general se mantiene, pero la frecuencia en los bins de insulina baja es mayor en proporción a los bins de insulina alta, en comparación con los datos originales. ### BMI

plot_comparison(diabetes, na_omit, "BMI")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 11 rows containing non-finite values (`stat_bin()`).
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Esta distribución mantiene una forma similar a la de los datos originales, pero con una frecuencia más alta en el pico, lo que sugiere que los valores eliminados pueden haber estado más dispersos o en los extremos de la distribución.

Imputación de Datos

Metodo PMM

imp <- mice(diabetes, m=5, maxit=50, method ='pmm', seed=500, printFlag = FALSE)
imp_df <- complete(imp)
head(imp_df)
##   Pregnancies Glucose BloodPressure SkinThickness Insulin  BMI
## 1           6     148            72            35      83 33.6
## 2           1      85            66            29      55 26.6
## 3           8     183            64            20     175 23.3
## 4           1      89            66            23      94 28.1
## 5           0     137            40            35     168 43.1
## 6           5     116            74            24     175 25.6
##   DiabetesPedigreeFunction Age Outcome
## 1                    0.627  50       1
## 2                    0.351  31       0
## 3                    0.672  32       1
## 4                    0.167  21       0
## 5                    2.288  33       1
## 6                    0.201  30       0
xyplot(imp, Insulin ~ SkinThickness 
       + BloodPressure 
       + BMI 
       + Glucose 
       + Outcome
       + Age
       + DiabetesPedigreeFunction
       + Pregnancies, pch=18, cex=1)

Esta similitud en la distribución nos indica que los valores imputados representan de manera fiable y plausible la información ausente.

densityplot(imp)

Para cada conjunto de datos imputados, la densidad se muestra en rojo, en contraposición a la densidad de los datos observados, que se presenta en azul. esperamos que ambas distribuciones exhiban una similitud significativa.

plot(imp);

La media (mean): Muestra cómo la media de cada variable fluctúa en cada uno de los conjuntos imputados. Las líneas se mantienen relativamente consistentes entre sí, indicando que la imputación es estable en términos de la media. La desviación estándar (sd): Muestra las fluctuaciones en la variabilidad de cada variable a través de los distintos conjuntos imputados. De nuevo, las líneas son bastante consistentes, lo que indica que la imputación mantiene una variabilidad similar entre los conjuntos.

Metodo Norm.predict

imp_regress <- mice(diabetes, method="norm.predict", m=1, maxit=1)
## 
##  iter imp variable
##   1   1  Glucose  BloodPressure  SkinThickness  Insulin  BMI
imp_data <- complete(imp_regress)
head(imp_data)
##   Pregnancies Glucose BloodPressure SkinThickness   Insulin  BMI
## 1           6     148            72      35.00000 220.65056 33.6
## 2           1      85            66      29.00000  69.90585 26.6
## 3           8     183            64      21.09747 256.47480 23.3
## 4           1      89            66      23.00000  94.00000 28.1
## 5           0     137            40      35.00000 168.00000 43.1
## 6           5     116            74      22.11040 117.65456 25.6
##   DiabetesPedigreeFunction Age Outcome
## 1                    0.627  50       1
## 2                    0.351  31       0
## 3                    0.672  32       1
## 4                    0.167  21       0
## 5                    2.288  33       1
## 6                    0.201  30       0
xyplot(imp_regress, Insulin ~ SkinThickness 
       + BloodPressure 
       + BMI 
       + Glucose 
       + Outcome
       + Age
       + DiabetesPedigreeFunction
       + Pregnancies, pch=18, cex=1)

densityplot(imp_regress)

plot(imp_data);

En los graficos podemos notar, que si bien en la imputación no se pierde la distribución y el comportamiento de los datos, aparetemente en la imputacion, se oscilaron en valores mas cercanos entre ellos en cada columna.

Metodo Norm.nob

imp_regress <- mice(diabetes, method="norm.nob", m=1, maxit=1)
## 
##  iter imp variable
##   1   1  Glucose  BloodPressure  SkinThickness  Insulin  BMI
imp_data <- complete(imp_regress)
head(imp_data)
##   Pregnancies Glucose BloodPressure SkinThickness   Insulin  BMI
## 1           6     148            72      35.00000 300.57436 33.6
## 2           1      85            66      29.00000  91.20010 26.6
## 3           8     183            64      12.60417 271.47221 23.3
## 4           1      89            66      23.00000  94.00000 28.1
## 5           0     137            40      35.00000 168.00000 43.1
## 6           5     116            74      23.59787 -22.44932 25.6
##   DiabetesPedigreeFunction Age Outcome
## 1                    0.627  50       1
## 2                    0.351  31       0
## 3                    0.672  32       1
## 4                    0.167  21       0
## 5                    2.288  33       1
## 6                    0.201  30       0
xyplot(imp_regress, Insulin ~ SkinThickness 
       + BloodPressure 
       + BMI 
       + Glucose 
       + Outcome
       + Age
       + DiabetesPedigreeFunction
       + Pregnancies, pch=18, cex=1)

densityplot(imp_regress)

como podemor notar en los graficos, esta imputación se ajusta mejor al comportamiento de los datos originales en comparacion a la anterior.

Metodo Norm

imp_regress <- mice(diabetes, method="norm", m=1, maxit=1)
## 
##  iter imp variable
##   1   1  Glucose  BloodPressure  SkinThickness  Insulin  BMI
imp_data <- complete(imp_regress)
head(imp_data)
##   Pregnancies Glucose BloodPressure SkinThickness   Insulin  BMI
## 1           6     148            72      35.00000 133.56778 33.6
## 2           1      85            66      29.00000  42.64137 26.6
## 3           8     183            64      18.89756 110.87973 23.3
## 4           1      89            66      23.00000  94.00000 28.1
## 5           0     137            40      35.00000 168.00000 43.1
## 6           5     116            74      19.09168  70.14276 25.6
##   DiabetesPedigreeFunction Age Outcome
## 1                    0.627  50       1
## 2                    0.351  31       0
## 3                    0.672  32       1
## 4                    0.167  21       0
## 5                    2.288  33       1
## 6                    0.201  30       0
xyplot(imp_regress, Insulin ~ SkinThickness 
       + BloodPressure 
       + BMI 
       + Glucose 
       + Outcome
       + Age
       + DiabetesPedigreeFunction
       + Pregnancies, pch=18, cex=1)

densityplot(imp_regress)

Se puede percibir en ambos gráficos que en esta imputación se logró capturar de mejor manera el comportamiento general de los datos.