Asignatura:

Estadística Aplicada a la Computación

Integrantes:

Yennifer Alyshender Ñañajuari Villalta
Abraham Elías Cueva Rico

Asesor:

Victor Manuel Guevara Ponce

Periodo académico

Cuarto Periodo Académico

ICA – PERÚ

2024

Resumen

Este conjunto de datos proviene del Instituto Nacional de Diabetes y Enfermedades Digestivas y Renales. El objetivo es predecir en base a mediciones diagnósticas si un paciente tiene diabetes.

Se impusieron varias restricciones a la selección de estas instancias de una base de datos más grande. En particular, todos los pacientes aquí son mujeres de al menos 21 años de edad de ascendencia india Pima.

I. Aspectos generales

1.1 Nombre de la Organización

Instituto Nacional de Diabetes y Enfermedades Digestivas y Renales (NIDDK por sus siglas en inglés).

1.2 Descripción del caso

El caso que se va a analizar implica un conjunto de datos relacionado con la diabetes, proporcionado por el Instituto Nacional de Diabetes y Enfermedades Digestivas y Renales. Este conjunto de datos se centra en predecir si una paciente, de ascendencia india Pima y con al menos 21 años de edad, tiene diabetes. Las variables incluidas en el conjunto de datos son:

  1. Embarazos: Número de veces que la paciente ha estado embarazada.

  2. Glucosa: Concentración de glucosa plasmática a las 2 horas en una prueba de tolerancia oral a la glucosa.

  3. Presión arterial: Presión arterial diastólica (mm Hg).

  4. Grosor de la piel: Grosor del pliegue cutáneo del tríceps (mm).

  5. Insulina: Insulina sérica de 2 horas (mu U/ml).

  6. IMC (Índice de Masa Corporal): Peso en kg dividido por el cuadrado de la altura en metros.

  7. DiabetesPedigreeFunction: Función de pedigrí de diabetes.

  8. Edad: Edad de la paciente en años.

  9. Resultado: Variable de clase (0 o 1) que indica si la paciente tiene diabetes (1) o no (0).

II. Fundamentos básicos de la Estadística

2.1 Objetivo de Estudio

  • El objetivo principal de nuestro estudio estadístico es analizar el conjunto de datos sobre diabetes con el fin de desarrollar modelos predictivos que permitan diagnosticar de forma efectiva si una paciente tiene diabetes o no, basándonos en las mediciones proporcionadas en el conjunto de datos.

2.2 Población de Estudio

  • La población de estudio está compuesta por mujeres de al menos 21 años de edad y de ascendencia india Pima. Todas estas mujeres forman parte de la base de datos del Instituto Nacional de Diabetes y Enfermedades Digestivas y Renales.

2.3 Muestra

  • La muestra consiste en un subconjunto de la población de estudio. Dado que se impusieron restricciones en la selección de instancias de una base de datos más grande, la muestra específica incluirá mujeres de ascendencia india Pima, mayores de 21 años, con datos disponibles en el conjunto de datos proporcionado.

2.4 Unidad de Análisis

  • La unidad de análisis es cada individuo representado en el conjunto de datos. En este caso, cada entrada corresponde a una mujer de ascendencia india Pima, mayor de 21 años, con mediciones específicas de diagnóstico.

III. Variables y tipo de variables

A continuación, se especifica las variables y tipo de variables con su descripción

  1. Embarazos:
    • Tipo: Cuantitativa discreta.
    • Descripción: Número de embarazos que ha tenido la paciente.
  2. Glucosa:
    • Tipo: Cuantitativa continua.
    • Descripción: Nivel de glucosa en sangre medido en mg/dL.
  3. BloodPressure (Presión Arterial):
    • Tipo: Cuantitativa continua.
    • Descripción: Medición de la presión arterial en mm Hg.
  4. SkinThickness (Grosor de la Piel):
    • Tipo: Cuantitativa continua.
    • Descripción: Grosor de la piel en mm.
  5. Insulina:
    • Tipo: Cuantitativa continua.
    • Descripción: Nivel de insulina en sangre medido en mu U/ml.
  6. IMC (Índice de Masa Corporal):
    • Tipo: Cuantitativa continua.
    • Descripción: Índice de masa corporal, calculado como el peso en kg dividido por el cuadrado de la altura en metros.
  7. DiabetesPedigreeFunción (Porcentaje de Diabetes en la Ascendencia):
    • Tipo: Cuantitativa continua.
    • Descripción: Porcentaje de diabetes en la ascendencia de la paciente basado en la función de pedigree.
  8. Edad:
    • Tipo: Cuantitativa discreta.
    • Descripción: Edad de la paciente en años.
  9. Resultado:
    • Tipo: Categórica binaria.
    • Descripción: Variable de resultado donde 1 indica la presencia de diabetes y 0 indica la ausencia de diabetes.

IV. Manejo de base de datos

# Asignacion de directorio

setwd("C:/Users/ricoa/Documents/cuarto ciclo/Estadística Aplicada a la Computación/EFINAL")
getwd()
## [1] "C:/Users/ricoa/Documents/cuarto ciclo/Estadística Aplicada a la Computación/EFINAL"
# Cargar el conjunto de datos CSV

PacientesConDiabetes<- read.csv("diabetes.csv")
# Mostrar datos

head(PacientesConDiabetes)
##   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

V. Tablas de frecuencia (Para cada variable)

VI. Representación gráfica de datos

library(ggplot2)
library(dplyr)
library(readr)

6.1 Cuantitativas Discretas

6.1.1 Histograma

# Embarazos 

ggplot(PacientesConDiabetes, aes(x = Pregnancies)) +
  geom_histogram(fill = "purple",
                 color = "black",
                 binwidth = 1) +
  labs(x = "Embarazos",
       y = "Cantidad",
       title = "Distribucion de las pacientes segun los embarazos que ha tenido") + 
  theme_classic()

# Edad 

ggplot(PacientesConDiabetes, aes(x = Age)) +
  geom_histogram(fill = "purple",
                 color = "black",
                 binwidth = 1) +
  labs(x = "Edad",
       y = "Cantidad",
       title = "Distribucion de las pacientes segun las Edades") + 
  theme_classic()

6.2 Cuantitativas Continuas

6.2.1 Histograma

# Glucosa

ggplot(PacientesConDiabetes, aes(x = Glucose)) +
  geom_histogram(fill = "purple",
                 color = "black",
                 binwidth = 1) +
  labs(x = "Glucosa medido en mg/dL",
       y = "Cantidad",
       title = "Distribucion de las pacientes segun del Nivel de Glucosa en sangre") + 
  theme_classic()

# Presión Arterial 

ggplot(PacientesConDiabetes, aes(x = BloodPressure)) +
  geom_histogram(fill = "purple",
                 color = "black",
                 binwidth = 1) +
  labs(x = "Presión arterial en mm Hg",
       y = "Cantidad",
       title = "Distribucion de las pacientes segun la medición de la presión arterial") + 
  theme_classic()

# Grosor de la piel 

ggplot(PacientesConDiabetes, aes(x = SkinThickness)) +
  geom_histogram(fill = "purple",
                 color = "black",
                 binwidth = 1) +
  labs(x = "Grosor de la piel en mm",
       y = "Cantidad",
       title = "Distribucion de las pacientes segun el grosor de la piel") + 
  theme_classic()

# Nivel de insulina en sangre 

ggplot(PacientesConDiabetes, aes(x = Insulin)) +
  geom_histogram(fill = "purple",
                 color = "black",
                 binwidth = 1) +
  labs(x = "Nivel de insulina en sangre en mu U/ml",
       y = "Cantidad",
       title = "Distribucion de las pacientes segun el nivel de insulina en sangre ") + 
  theme_classic()

# Índice de Masa Corporal 

ggplot(PacientesConDiabetes, aes(x = BMI)) +
  geom_histogram(fill = "purple",
                 color = "black",
                 binwidth = 1) +
  labs(x = "Índice de Masa Corporal",
       y = "Cantidad",
       title = "Distribucion de las pacientes segun el índice de masa corporal") + 
  theme_classic()

# Porcentaje de Diabetes en la Ascendencia 

ggplot(PacientesConDiabetes, aes(x = Pregnancies)) +
  geom_histogram(fill = "purple",
                 color = "black",
                 binwidth = 1) +
  labs(x = "Porcentaje de diabetes en la ascendencia",
       y = "Cantidad",
       title = "Distribucion de las pacientes segun el porcentaje de diabetes en la ascendencia
") + 
  theme_classic()

6.2.2 Diagrama de Cajas

# Glucosa

boxplot(PacientesConDiabetes$Glucose)

# Presión Arterial 

boxplot(PacientesConDiabetes$BloodPressure)

# Grosor de la piel 

boxplot(PacientesConDiabetes$SkinThickness)

# Nivel de insulina en sangre 

boxplot(PacientesConDiabetes$Insulin)

# Índice de Masa Corporal 


boxplot(PacientesConDiabetes$BMI)

# Porcentaje de Diabetes en la Ascendencia 

boxplot(PacientesConDiabetes$Pregnancies)

6.2.3 Densidad

# Glucosa

ggplot(PacientesConDiabetes, aes(x = Glucose)) + 
  geom_density(fill = "blue") + 
  labs(x = "Glucosa medido en mg/dL",
       y = "Densidad",
       title = "Densidad de las pacientes segun del nivel de glucosa en sangre") +
  theme_classic()

# Presión Arterial 

ggplot(PacientesConDiabetes, aes(x = BloodPressure)) + 
  geom_density(fill = "blue") + 
  labs(x = "Presión arterial en mm Hg",
       y = "Densidad",
       title = "Densidad de las pacientes segun la medición de la presión arterial") +
  theme_classic()

# Grosor de la piel 

ggplot(PacientesConDiabetes, aes(x = SkinThickness)) + 
  geom_density(fill = "blue") + 
  labs(x = "Grosor de la piel en mm",
       y = "Densidad",
       title = "Densidad de las pacientes segun el grosor de la piel") +
  theme_classic()

# Nivel de insulina en sangre 

ggplot(PacientesConDiabetes, aes(x = Insulin)) + 
  geom_density(fill = "blue") + 
  labs(x = "Nivel de insulina en sangre en mu U/ml",
       y = "Densidad",
       title = "Densidad de las pacientes segun el nivel de insulina en sangre") +
  theme_classic()

# Índice de Masa Corporal 

ggplot(PacientesConDiabetes, aes(x = BMI)) + 
  geom_density(fill = "blue") + 
  labs(x = "Índice de Masa Corporal",
       y = "Densidad",
       title = "Densidad de las pacientes segun el índice de masa corporal") +
  theme_classic()

# Porcentaje de Diabetes en la Ascendencia 

ggplot(PacientesConDiabetes, aes(x = Pregnancies)) + 
  geom_density(fill = "blue") + 
  labs(x = "Porcentaje de diabetes en la ascendencia",
       y = "Densidad",
       title = "Densidad de las pacientes segun el porcentaje de diabetes en la ascendencia") +
  theme_classic()

VII. Medidas estadísticas de tendencia central

7.1 Media aritmética

promedio = sum(PacientesConDiabetes$Age)/length(PacientesConDiabetes$Age)
promedio
## [1] 33.24089

Interpretacion: La edad promedio de las pacientes es 33.24089 años

7.2 Mediana

median(PacientesConDiabetes$Age)
## [1] 29

El valor de la mediana es: 29 años

Interpretacion: El 50% de las pacientes su edad maxima es 29 años. El otro 50% (la mitad) su valor minimo es 29 años.

7.3 Moda

library(modeest)
mfv(PacientesConDiabetes$Age)
## [1] 22

Interpretacion: La edad mas frecuente (que mas se repite) es 22 años respectivamente.

VIII. Medidas estadísticas de posición

8.1 Cuartiles

quantile(PacientesConDiabetes$DiabetesPedigreeFunction)
##      0%     25%     50%     75%    100% 
## 0.07800 0.24375 0.37250 0.62625 2.42000

Segun los resultados:

El valor minimo de los porcentajes de diabetes en la ascendencia 0.07800

Cuartil 1 \((Q_1)\) Interpretacion: es 0.24375 ; El 25% de las pacientes de ascendencia india Pima mayores de 21 años, su porcentajes de diabetes máximo en la ascendencia 0.24375

Cuartil 2 \((Q_2)\) Interpretación: es 0.37250 ; El 50% de las pacientes de ascendencia india Pima mayores de 21 años, su porcentajes de diabetes máximo en la ascendencia 0.37250

Cuartil 3 \((Q_3)\) Interpretación: es 0.62625 ; El 75% de las pacientes de ascendencia india Pima mayores de 21 años, su porcentajes de diabetes máximo en la ascendencia 0.62625

8.2 Asimetria

library(fBasics)
skewness(PacientesConDiabetes$DiabetesPedigreeFunction)
## [1] 1.912418
## attr(,"method")
## [1] "moment"

Resultado: 1.912418, como el valor es positivo, entonces la distribucion de los datos es asimétrica positiva, esto quiere decir que los valores están concentrados en los puntos minimos (la mayoria de las pacientes tienen porcentajes de diabetes bajo en la ascendencia).

8.3 Curtosis

kurtosis(PacientesConDiabetes$DiabetesPedigreeFunction)
## [1] 5.528539
## attr(,"method")
## [1] "excess"

Resultado: 5.528539, el valor es mayor que 3, por lo tanto, la distribución de los datos es leptocurtica, quiere decir que los datos estan muy concentrados alrededor de las medidas de endencia central (El apuntamiento es alto).

IX. Manejo de datos Missing

# Mostramos la estructura de los datos 
str(PacientesConDiabetes)
## '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 ...

9.1 Verificación de valores perdidos

# Verificamos las columnas que tienen valores perdidos
which(colSums(is.na(PacientesConDiabetes))!=0)
## named integer(0)
# Verificamos las filas que tienen valores perdidos
a<-which(rowSums(is.na(PacientesConDiabetes))!=0)
length(a)*100/dim(PacientesConDiabetes)[1]
## [1] 0
# Verificamos si hay patrón de los datos faltantes
library(VIM)
library(mice)
missingraf=aggr(PacientesConDiabetes,numbers=T)

# Mostramos el resumen de la gráfica
summary(missingraf)
## 
##  Missings per variable: 
##                  Variable Count
##               Pregnancies     0
##                   Glucose     0
##             BloodPressure     0
##             SkinThickness     0
##                   Insulin     0
##                       BMI     0
##  DiabetesPedigreeFunction     0
##                       Age     0
##                   Outcome     0
## 
##  Missings in combinations of variables: 
##       Combinations Count Percent
##  0:0:0:0:0:0:0:0:0   768     100
# Representación matricial missing (Esto se realiza con el fin de evaluar patrones de comportamiento)
matrixplot(PacientesConDiabetes)

# Otra forma de representación
library(mice)
md.pattern(PacientesConDiabetes,rotate.names = T)
##  /\     /\
## {  `---'  }
## {  O   O  }
## ==>  V <==  No need for mice. This data set is completely observed.
##  \  \|/  /
##   `-----'

##     Pregnancies Glucose BloodPressure SkinThickness Insulin BMI
## 768           1       1             1             1       1   1
##               0       0             0             0       0   0
##     DiabetesPedigreeFunction Age Outcome  
## 768                        1   1       1 0
##                            0   0       0 0
# Visualización diferenciando tipo de datos
library(visdat)
vis_dat(PacientesConDiabetes)

vis_miss(PacientesConDiabetes)

Resultado: Según los resulatos se muestra que este conjunto de datos se observa completamente.

9.2 Corrección de missing

# a.    Eliminado todos los valores missing
pacientes_correccion1<- na.omit(PacientesConDiabetes)
which(colSums(is.na(pacientes_correccion1))!=0)
## named integer(0)
# Verificamos las dimensiones (comparemos la perdida de información)
dim(pacientes_correccion1)
## [1] 768   9
# b.    Aplicando técnicas de imputación
# Imputación por medidas de tendencia central
library(DMwR2)
pacientes_correccion2<-centralImputation(PacientesConDiabetes) #DMwR, mediana (númerico), moda(no númerico)
which(colSums(is.na(pacientes_correccion2))!=0)
## named integer(0)
# Verificamos las dimensiones
dim(pacientes_correccion2)
## [1] 768   9
# Imputación por medidas de tendencia central utilizando la mediana
library(VIM)
pacientes_correccion3<-initialise(PacientesConDiabetes,method="median") #media (continuos) mediana (discretos), moda(no númerico)
#Verificamos las dimensiones
dim(pacientes_correccion3)
## [1] 768   9
# Utilizando K-Vecinos más cercanos
pacientes_correccion4<-knnImputation(PacientesConDiabetes, k=10)
## Warning in knnImputation(PacientesConDiabetes, k = 10): No case has missing
## values. Stopping as there is nothing to do.
dim(pacientes_correccion4)
## [1] 768   9

X. Manejo de valores outliers

10.1 Gráfico de cajas y bigotes

10.1.1 Edad

boxplot(PacientesConDiabetes$Age)

Según los resultados, se identifica valores atípicos. Vamos a identificarlo y plantear estrategia de corrección

# Calcular el RIC (RIC = Q3 - Q1)

q1_Edad <- quantile(PacientesConDiabetes$Age, 0.25)
q3_Edad <- quantile(PacientesConDiabetes$Age, 0.75)
RIC_Edad <- q3_Edad-q1_Edad
RIC_Edad
## 75% 
##  17
# Limites o bigotes (Superior e inferior)
bigote_inferior_Edad <- q1_Edad-1.5*RIC_Edad
bigote_inferior_Edad
##  25% 
## -1.5
bigote_superior_Edad <- q3_Edad+1.5*RIC_Edad
bigote_superior_Edad
##  75% 
## 66.5
# Identificar lo valores atípicos
outliers_det_Edad <- PacientesConDiabetes$Age[PacientesConDiabetes$Age < bigote_inferior_Edad | PacientesConDiabetes$Age > bigote_superior_Edad]
outliers_det_Edad
## [1] 69 67 72 81 67 67 70 68 69

XI. Transformación de variables

11.1 Transformación de raíz cuadrada

# Original
hist(PacientesConDiabetes$Age, 12)

Para sacar la raiz cuadrada, simplemente se puede utilizar la función sqrt

pcd <- sqrt(PacientesConDiabetes$Age)
head(pcd)
## [1] 7.071068 5.567764 5.656854 4.582576 5.744563 5.477226

Gráfico

hist(sqrt(PacientesConDiabetes$Age))

11.2 Transformación exponencial

pcd <- exp(PacientesConDiabetes$Age)
head(pcd)
## [1] 5.184706e+21 2.904885e+13 7.896296e+13 1.318816e+09 2.146436e+14
## [6] 1.068647e+13

Gráfico

hist(exp(PacientesConDiabetes$Age))

Forma 2

edad_exp<- exp(PacientesConDiabetes$Age)
hist(edad_exp)

11.3 Transformación logaritmica

pcd <- log(PacientesConDiabetes$Age)
head(pcd)
## [1] 3.912023 3.433987 3.465736 3.044522 3.496508 3.401197

Gráfico

hist(log(PacientesConDiabetes$Age))

Cambiar la base 2

pcd <- log(PacientesConDiabetes$Age, base=2)
head(pcd)
## [1] 5.643856 4.954196 5.000000 4.392317 5.044394 4.906891

Gráfico 2

hist(log(PacientesConDiabetes$Age, base=2))

11.3 Comparación de transformaciones

#Obtener solo tranaformaciones
edad_sqrt <- sqrt(PacientesConDiabetes$Age)
edad_exp <- exp(PacientesConDiabetes$Age)
edad_ln <- log(PacientesConDiabetes$Age)
edad_log2 <- log(PacientesConDiabetes$Age, base=2)
edad_log5 <- log(PacientesConDiabetes$Age, base=5)

Gráfico

par(mfrow=c(3,2))
hist(PacientesConDiabetes$Age)
hist(edad_sqrt)
hist(edad_exp)
hist(edad_ln)
hist(edad_log2)
hist(edad_log5)

La visualización de la distribucion puede mejorarse con la gráfica de densidad

par(mfrow=c(3,2))

plot(density(PacientesConDiabetes$Age), main = "Distribucion de edad originales")
plot(density(edad_sqrt), main = "Distribucion de edad tranformadas - sqrt")
plot(density(edad_exp), main = "Distribucion de edad tranformadas - exp")
plot(density(edad_ln), main = "Distribucion de edad tranformadas - ln")
plot(density(edad_log2), main = "Distribucion de edad tranformadas - log2")
plot(density(edad_log5), main = "Distribucion de edad tranformadas - log5 ")

par(mfrow=c(1,1))

XII. Estandarización y normalización de variables

12.1 Estandarización

Edad

Método 1: Por partes

pcd <- PacientesConDiabetes$Age
head(pcd)
## [1] 50 31 32 21 33 30
media_edad <- mean(PacientesConDiabetes$Age)
media_edad
## [1] 33.24089
desv_est_edad <- sd(PacientesConDiabetes$Age)
desv_est_edad
## [1] 11.76023
edad_estandar <- (PacientesConDiabetes$Age)/desv_est_edad
head(edad_estandar)
## [1] 4.251617 2.636003 2.721035 1.785679 2.806067 2.550970

Método 2: Directo

edad_estandar2 <- (PacientesConDiabetes$Age-mean(PacientesConDiabetes$Age))/sd(PacientesConDiabetes$Age)
head(edad_estandar2)
## [1]  1.42506672 -0.19054773 -0.10551539 -1.04087112 -0.02048305 -0.27558007

Método 3: Apoyarse en las funciones de R Función scale

edad_estandar3 <- scale(PacientesConDiabetes$Age)
head(edad_estandar3)
##             [,1]
## [1,]  1.42506672
## [2,] -0.19054773
## [3,] -0.10551539
## [4,] -1.04087112
## [5,] -0.02048305
## [6,] -0.27558007

12.2 Normalización

Edad

Método 1:

edad_normal <- (PacientesConDiabetes$Age-min(PacientesConDiabetes$Age))/(max(PacientesConDiabetes$Age)-min(PacientesConDiabetes$Age))
head(edad_normal)
## [1] 0.4833333 0.1666667 0.1833333 0.0000000 0.2000000 0.1500000

Método 2: Función

library(scales)
pcda <- rescale(PacientesConDiabetes$Age)
head(pcda)
## [1] 0.4833333 0.1666667 0.1833333 0.0000000 0.2000000 0.1500000
library(caret)
## Loading required package: ggplot2
## Loading required package: lattice
head(pre_procesamiento<-preProcess(PacientesConDiabetes[,4:9])) # Así por defecto muestra la est. Z
## $dim
## [1] 768   6
## 
## $bc
## NULL
## 
## $yj
## NULL
## 
## $et
## NULL
## 
## $invHyperbolicSine
## NULL
## 
## $mean
##            SkinThickness                  Insulin                      BMI 
##               20.5364583               79.7994792               31.9925781 
## DiabetesPedigreeFunction                      Age                  Outcome 
##                0.4718763               33.2408854                0.3489583
head(predict(pre_procesamiento, PacientesConDiabetes[,4:9]))
##   SkinThickness    Insulin        BMI DiabetesPedigreeFunction         Age
## 1     0.9066791 -0.6924393  0.2038799                0.4681869  1.42506672
## 2     0.5305558 -0.6924393 -0.6839762               -0.3648230 -0.19054773
## 3    -1.2873733 -0.6924393 -1.1025370                0.6040037 -0.10551539
## 4     0.1544326  0.1232213 -0.4937213               -0.9201630 -1.04087112
## 5     0.9066791  0.7653372  1.4088275                5.4813370 -0.02048305
## 6    -1.2873733 -0.6924393 -0.8108128               -0.8175458 -0.27558007
##      Outcome
## 1  1.3650064
## 2 -0.7316434
## 3  1.3650064
## 4 -0.7316434
## 5  1.3650064
## 6 -0.7316434
library(caret)
head(pre_procesamiento<-preProcess(PacientesConDiabetes[,4:9], method = "range"))
## $dim
## [1] 768   6
## 
## $bc
## NULL
## 
## $yj
## NULL
## 
## $et
## NULL
## 
## $invHyperbolicSine
## NULL
## 
## $mean
## NULL
head(predict(pre_procesamiento, PacientesConDiabetes[,4:9]))
##   SkinThickness   Insulin       BMI DiabetesPedigreeFunction       Age Outcome
## 1     0.3535354 0.0000000 0.5007452               0.23441503 0.4833333       1
## 2     0.2929293 0.0000000 0.3964232               0.11656704 0.1666667       0
## 3     0.0000000 0.0000000 0.3472429               0.25362938 0.1833333       1
## 4     0.2323232 0.1111111 0.4187779               0.03800171 0.0000000       0
## 5     0.3535354 0.1985816 0.6423249               0.94363792 0.2000000       1
## 6     0.0000000 0.0000000 0.3815201               0.05251921 0.1500000       0

XIII. Modelamiento predictivo

13.1 Modelo de regresión

Variable dependiente e independiente

# Conjunto de datos con las variables Age y Outcome
conjunto <- data.frame(Bmi = PacientesConDiabetes$BMI,
                             BloodPressure = PacientesConDiabetes$BloodPressure)
head(conjunto)
##    Bmi BloodPressure
## 1 33.6            72
## 2 26.6            66
## 3 23.3            64
## 4 28.1            66
## 5 43.1            40
## 6 25.6            74

Pasos para construir un modelo de regresion:

Paso 1: Determinar las variables X, Y

  • Variable independiente(X): Bmi (Índice de masa corporal)
  • Variable dependiente(Y): BloodPressure (Presión arterial)

Paso 2: Evaluar la realacion entre variables(Correlacion)graficamente

Diagrama de dispersion o diagrama de puntos

# Graficar Bmi vs BloodPressure
plot(x = conjunto$Bmi, y = conjunto$BloodPressure)

# También se puede utilizar la función pairs
pairs(conjunto)

Interpretación: Según los resultados hay relacion negativa entre la Edad y el Resultado

Coeficiente de correlacion

# Mediante la funcion cor
cor(conjunto) # Matriz de correlaciones
##                     Bmi BloodPressure
## Bmi           1.0000000     0.2818053
## BloodPressure 0.2818053     1.0000000

Coeficiente de correlacion: r = 0.2818053

Interpretación: Existe correlación lineal positiva entre Bmi y BloodPressure.

Recordar(si r es mejor que 0.35 para algunos autores, no es viable la regresion, para otros autores se puede probar la hipotesis)

Paso 3: Regresion

Regresion lineal simple

Modelo general: \(\hat{Y} = b_o + b_1X\)
Modelo para el caso: \(\hat{Age} = b_0 + B_1 BloodPressure\)

#Mmodelo de regresión lineal
modelo <- lm(Bmi ~ BloodPressure, data = conjunto)

# Resumen de resultados
summary(modelo)
## 
## Call:
## lm(formula = Bmi ~ BloodPressure, data = conjunto)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -35.080  -4.792  -0.134   4.408  30.413 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   24.06016    1.01334  23.743  < 2e-16 ***
## BloodPressure  0.11479    0.01412   8.129 1.74e-15 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 7.57 on 766 degrees of freedom
## Multiple R-squared:  0.07941,    Adjusted R-squared:  0.07821 
## F-statistic: 66.08 on 1 and 766 DF,  p-value: 1.738e-15
## 
## Call:
## lm(formula = Bmi ~ BloodPressure, data = conjunto)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -35.080  -4.792  -0.134   4.408  30.413 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   24.06016    1.01334  23.743  < 2e-16 ***
## BloodPressure  0.11479    0.01412   8.129 1.74e-15 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 7.57 on 766 degrees of freedom
## Multiple R-squared:  0.07941,    Adjusted R-squared:  0.07821 
## F-statistic: 66.08 on 1 and 766 DF,  p-value: 1.738e-15

Modelo fnal con los resultados sería:

Modelo general:

\(\hat{y} = 24.060164 + 0.11479 X\)
Modelo para el caso:

\(\hat{Age} = 24.060164 + 0.11479 BloodPressure\)