INTRODUCCION

Se buscará aplicar las técnicas estadísticas inferencial de Intervalo de confianza y contraste de hipótesis y regresión lineal simple, para poder comparar y predecir los diagnostico en problemas del corazón. Se tomó como muestra objetivo con 100 observaciones de pacientes. Donde se aplicará la estadística descriptiva e inferencial. Se aplicará la ayuda del software R Studio, que nos ayudará a procesar y facilitar el depurado de las variables, el resumen descriptivo y la creación de los modelos para la parte inferencial.

.

OBJETIVO GENERAL

Realizar un análisis inferencial a la base de datos de diagnóstico cardiaco usando el software R Studio.

DATOS

Este conjunto de datos se obtuvo de la página Machine Learning Repository con las fuentes Hungarian Institute of Cardiology. Budapest: Andras Janosi, M.D.; University Hospital, Zurich, Switzerland: William Steinbrunn, M.D.; University Hospital, Basel, Switzerland: Matthias Pfisterer, M.D.; V.A. Medical Center, Long Beach and Cleveland Clinic Foundation: Robert Detrano, M.D., Ph.D.: https://archive.ics.uci.edu/ml/datasets/Heart+Disease y https://www.kaggle.com/nareshbhat/eda-classification-interpretation-ensembling-92 Esta base de datos contiene 76 atributos, pero todos los experimentos publicados se refieren a la utilización de un subconjunto de 14 de ellos. En particular, la base de datos de Cleveland es la única que ha sido utilizada por los investigadores de la ML para esta fecha. (Machine Learning Repository, 2018)

############################################
library(tidyverse)
## -- Attaching packages --------------------------------------- tidyverse 1.3.0 --
## v ggplot2 3.3.2     v purrr   0.3.4
## v tibble  3.0.4     v dplyr   1.0.2
## v tidyr   1.1.2     v stringr 1.4.0
## v readr   1.4.0     v forcats 0.5.0
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library(moments)

Importamos la data de heart y la guardamos con el nombre corazón

corazon <- read.csv("https://archive.ics.uci.edu/ml/machine-learning-databases/heart-disease/processed.cleveland.data",header=FALSE,sep=",",na.strings = '?')
#RENOMBRAR LAS COLUMNAS
names(corazon) <- c( "age", "sex", "cp", "trestbps", "chol","fbs", "restecg","thalach","exang", "oldpeak","slope", "ca", "thal", "num")
set.seed(46)

la renombramos la variable con el nombre data

data <-corazon[sample(1:dim(corazon)[1],size=30,replace = FALSE),] 

names(data)
##  [1] "age"      "sex"      "cp"       "trestbps" "chol"     "fbs"     
##  [7] "restecg"  "thalach"  "exang"    "oldpeak"  "slope"    "ca"      
## [13] "thal"     "num"
str(data)
## 'data.frame':    30 obs. of  14 variables:
##  $ age     : num  51 55 46 58 38 38 62 43 64 41 ...
##  $ sex     : num  0 1 1 1 1 1 1 0 0 1 ...
##  $ cp      : num  3 4 3 4 1 3 3 3 3 3 ...
##  $ trestbps: num  140 140 150 100 120 138 130 122 140 112 ...
##  $ chol    : num  308 217 231 234 231 175 231 213 313 250 ...
##  $ fbs     : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ restecg : num  2 0 0 0 0 0 0 0 0 0 ...
##  $ thalach : num  142 111 147 156 182 173 146 165 133 179 ...
##  $ exang   : num  0 1 0 0 1 0 0 0 0 0 ...
##  $ oldpeak : num  1.5 5.6 3.6 0.1 3.8 0 1.8 0.2 0.2 0 ...
##  $ slope   : num  1 3 2 1 2 1 2 2 1 1 ...
##  $ ca      : num  1 0 0 1 0 NA 3 0 0 0 ...
##  $ thal    : num  3 7 3 7 7 3 7 3 7 3 ...
##  $ num     : int  0 3 1 2 4 0 0 0 0 0 ...

Seleccionamos las variables cuantitativas a utilizar.

##########################################
#seleccionar muestra cuantitativa
df<-subset(data,select = c(1,4,8,10))
str(df)
## 'data.frame':    30 obs. of  4 variables:
##  $ age     : num  51 55 46 58 38 38 62 43 64 41 ...
##  $ trestbps: num  140 140 150 100 120 138 130 122 140 112 ...
##  $ thalach : num  142 111 147 156 182 173 146 165 133 179 ...
##  $ oldpeak : num  1.5 5.6 3.6 0.1 3.8 0 1.8 0.2 0.2 0 ...
#################################
#cuantitativa
resumen2<-function(y){
  q<-quantile(y, prob=c(0.25,0.5,0.75))
  nombre<-c("min","max","media","sd","cuart 1","cuart 2","cuart 3","asimetria","kurtorsi")
  valor<-round(c(min(y),max(y),mean(y),sd(y),q[1],q[2],q[3],skewness(y),kurtosis(y)),3)
  data.frame(nombre,valor)}

resumen2(df$age)
##      nombre  valor
## 1       min 35.000
## 2       max 64.000
## 3     media 52.167
## 4        sd  8.129
## 5   cuart 1 46.750
## 6   cuart 2 52.000
## 7   cuart 3 58.000
## 8 asimetria -0.460
## 9  kurtorsi  2.258
resumen2(df$trestbps)
##      nombre   valor
## 1       min 100.000
## 2       max 150.000
## 3     media 127.833
## 4        sd  13.924
## 5   cuart 1 120.000
## 6   cuart 2 130.000
## 7   cuart 3 139.500
## 8 asimetria  -0.358
## 9  kurtorsi   2.293
resumen2(df$thalach)
##      nombre   valor
## 1       min  97.000
## 2       max 186.000
## 3     media 154.900
## 4        sd  20.777
## 5   cuart 1 146.250
## 6   cuart 2 156.500
## 7   cuart 3 171.250
## 8 asimetria  -0.929
## 9  kurtorsi   3.676
resumen2(df$oldpeak)
##      nombre valor
## 1       min 0.000
## 2       max 5.600
## 3     media 1.140
## 4        sd 1.366
## 5   cuart 1 0.125
## 6   cuart 2 0.600
## 7   cuart 3 1.750
## 8 asimetria 1.568
## 9  kurtorsi 5.203

Se calcula los resultados descriptivos a las variables cuantitativa, donde se encuentra que la mayoría tiene una media y mediana similares, por lo que ayuda a que se minimice el problema del sesgo, esto se puede evidencia con un valor cercano a cero en la asimetría. Sin embargo, las variables: oldpeak, tienen una mayor separación entre su media y mediana por lo que provoca problemas de sesgo, y se evidencia observando su asimetría con valores muy alejado del cero. También, estas mismas variables tienen una dispersión alta en su desviación estándar comparado el rango de su intervalo, por lo que también es propenso a sufrir de valores atípico. Esto se evidencia con un alto valor en su curtosis con un valor superior a 3.

library(gridExtra)
## 
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
## 
##     combine
Plot1<- ggplot(df,aes(age)) +geom_histogram( binwidth=5, fill="#0099ff",color="#cccccc") +
  labs(title="Histograma", y="Frecuencia", x="edad ")  +
  geom_vline(xintercept = mean(df$age), color="#3EFB3F",size=1.5)+  theme_classic(base_size=15)
Plot2 <- ggplot(df,aes(trestbps)) +geom_histogram( binwidth=12, fill="#0099ff",color="#cccccc") +
  labs(title="Histograma", y="Frecuencia", x="presión sanguínea en reposo")  +
  geom_vline(xintercept = mean(df$trestbps), color="#3EFB3F",size=1.5)+  theme_classic(base_size=15)
Plot3 <- ggplot(df,aes(thalach)) +geom_histogram( binwidth=14, fill="#0099ff",color="#cccccc") +
  labs(title="Histograma", y="Frecuencia", x="máxima frecuencia cardíaca alcanzada")  +
  geom_vline(xintercept = mean(df$thalach), color="#3EFB3F",size=1.5)+  theme_classic(base_size=15)
Plot4 <- ggplot(df,aes(oldpeak)) +geom_histogram( binwidth=0.8, fill="#0099ff",color="#cccccc") +
  labs(title="Histograma", y="Frecuencia", x="depresión ST por ejercicio en relación descanso")  +
  geom_vline(xintercept = mean(df$oldpeak), color="#3EFB3F",size=1.5)+  theme_classic(base_size=15)

grid.arrange(Plot1, Plot2, Plot3, Plot4, ncol = 2)

Se observa en los histogramas que las gráficas de age, trestbps, thalach y oldpeak, todas tienen sesgo en su distribución con respecto a la media. En especial la que tienen el sesgo más grande es la variable oldpeak(depresión) y thalach(máxima frecuencia) .

Plot1<- ggplot(df, aes(factor(0),y=age)) + 
  geom_boxplot()+labs(title="Diagrama de caja", y="", x="age",color=NULL)+
  theme_classic(base_size=15) + coord_flip()
Plot2 <- ggplot(df,aes(factor(0),y=trestbps)) +
  geom_boxplot()+labs(title="Diagrama de caja", y="", x="presión sanguínea en reposo")  +
  theme_classic(base_size=15) + coord_flip()
Plot3 <- ggplot(df,aes(factor(0),y=thalach)) +
  geom_boxplot()+labs(title="Diagrama de caja", y="", x="máxima frecuencia cardíaca alcanzada")  +
  theme_classic(base_size=15) + coord_flip()
Plot4 <- ggplot(df,aes(factor(0),y=oldpeak)) +
  geom_boxplot()+labs(title="Diagrama de caja", y="", x="depresión ST por ejercicio en relación descanso")  +
  theme_classic(base_size=15) + coord_flip()

grid.arrange(Plot1, Plot2, Plot3, Plot4, ncol = 2)

En los diagramas de caja, se observa como todos presentan problema de aberrancia en su extremo superior, a excepción de la edad, que no presenta aberrancias.

########################################
#bondad de ajuste distribucion normal

Supuesto de normalidad Se probará la normalidad de los residuos, por medio de la prueba de K-S

Hipótesis Nula H0: X siguen una distribución normal 

Hipótesis Alterna H1: X no siguen una distribución

Valor de la significancia =0.01

#normalidad de age
x<-df$age
xen <- seq(min(x), max(x), by=0.1)
plot(xen, pnorm(xen, mean=mean (x), sd=sd(x)), type="l", col="red", xlab="residuos", ylab="" ,main= "bondad de ajuste")
plot(ecdf(x), add=TRUE)

ks.test(df$thalach, "pnorm",alternative ="two.sided")
## Warning in ks.test(df$thalach, "pnorm", alternative = "two.sided"): ties should
## not be present for the Kolmogorov-Smirnov test
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  df$thalach
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided
#normalidad de trestbps
x<-df$trestbps
xen <- seq(min(x), max(x), by=0.1)
plot(xen, pnorm(xen, mean=mean (x), sd=sd(x)), type="l", col="red", xlab="residuos", ylab="" ,main= "bondad de ajuste")
plot(ecdf(x), add=TRUE)

ks.test(df$thalach, "pnorm",alternative ="two.sided")
## Warning in ks.test(df$thalach, "pnorm", alternative = "two.sided"): ties should
## not be present for the Kolmogorov-Smirnov test
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  df$thalach
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided
#normalidad de thalach
x<-df$thalach
xen <- seq(min(x), max(x), by=0.1)
plot(xen, pnorm(xen, mean=mean (x), sd=sd(x)), type="l", col="red", xlab="residuos", ylab="" ,main= "bondad de ajuste")
plot(ecdf(x), add=TRUE)

ks.test(df$thalach, "pnorm",alternative ="two.sided")
## Warning in ks.test(df$thalach, "pnorm", alternative = "two.sided"): ties should
## not be present for the Kolmogorov-Smirnov test
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  df$thalach
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided
#normalidad de oldpeak
x<-df$oldpeak
xen <- seq(min(x), max(x), by=0.1)
plot(xen, pnorm(xen, mean=mean (x), sd=sd(x)), type="l", col="red", xlab="residuos", ylab="" ,main= "bondad de ajuste")
plot(ecdf(x), add=TRUE)

ks.test(df$thalach, "pnorm",alternative ="two.sided")
## Warning in ks.test(df$thalach, "pnorm", alternative = "two.sided"): ties should
## not be present for the Kolmogorov-Smirnov test
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  df$thalach
## D = 1, p-value < 2.2e-16
## alternative hypothesis: two-sided

Su valor p esta por debajo de la significancia 0.01, por lo que se rechaza la hipótesis nula, entonces los residuos no siguen una distribución normal.

Su valor p esta por debajo de la significancia 0.01, por lo que se rechaza la hipótesis nula, entonces los residuos no siguen una distribución normal.

Su valor p está por debajo de la significancia 0.01, por lo que se rechaza la hipótesis nula, entonces los residuos no siguen una distribución normal.

Su valor p está por debajo de la significancia 0.01, por lo que se rechaza la hipótesis nula, entonces los residuos no siguen una distribución normal.

###############################################
#intervalos de confianza

• Se asume el supuesto que cada una de sus poblaciones vienen de una distribución normal. • El tamaño de la muestra es mayor a 30 datos por lo que se usara la Z de la normal

#intervalo de confianza de media
icmedia<-function(x,confianza){
  n<-length(x)
  med<-mean(x)
  s<-sd(x)
  confi<-confianza
  alpha<-1-confi
  z<-qnorm(alpha/2,lower.tail = F)
  error<-z*s/sqrt(n)
  lim.inf<-round(med-error,2)
  lim.sup<-round(med+error,2)
  cbind(lim.inf,lim.sup,error)
}

#intervalo de confianza varianza
icvari<-function(x,confianza){
  n<-length(x)
  s<-sd(x)
  confi<-confianza
  alpha<-1-confi
  inte.infer<-qchisq(alpha/2,n-1,lower.tail = F)
  inte.supe<-qchisq(1-alpha/2,n-1,lower.tail = F)
  lim.inf<-round((n-1)*s^2/inte.infer,2)
  lim.sup<-round((n-1)*s^2/inte.supe,2)
  cbind(lim.inf,lim.sup)
}

#variable age
icmedia(df$age,0.99)
##      lim.inf lim.sup    error
## [1,]   48.34   55.99 3.822734
icvari(df$age,0.99)
##      lim.inf lim.sup
## [1,]   36.61  146.04

La media poblacional en la variable age, solo puede tener con un 99% de confianza un intervalo de 52.29 a 57.09. La varianza poblacional en la variable age, solo puede tener con un 99% de confianza un intervalo de 61.89 a 129.32.

#variable trestbps
icmedia(df$trestbps,0.99)
##      lim.inf lim.sup   error
## [1,]  121.29  134.38 6.54801
icvari(df$trestbps,0.99)
##      lim.inf lim.sup
## [1,]  107.43  428.48

La media poblacional en la variable trestbps, solo puede tener con un 99% de confianza un intervalo de 125.14 a 133.82. La varianza poblacional en la variable trestbps, solo puede tener con un 99% de confianza un intervalo de 202.16 a 422.45

#varaible thalach
icmedia(df$thalach,0.99)
##      lim.inf lim.sup    error
## [1,]  145.13  164.67 9.770956
icvari(df$thalach,0.99)
##      lim.inf lim.sup
## [1,]   239.2  954.09

La media poblacional en la variable thalach, solo puede tener con un 99% de confianza un intervalo de 145.76 a 157.04. La varianza poblacional en la variable thalach, solo puede tener con un 99% de confianza un intervalo de 342.02 a 714.72

#variable oldpeak
icmedia(df$oldpeak,0.99)
##      lim.inf lim.sup     error
## [1,]     0.5    1.78 0.6422794
icvari(df$oldpeak,0.99)
##      lim.inf lim.sup
## [1,]    1.03    4.12

La media poblacional en la variable oldpeak, solo puede tener con un 99% de confianza un intervalo de 0.67 a 1.27 La varianza poblacional en la variable oldpeak, solo puede tener con un 99% de confianza un intervalo de 0.96 a 2.01

#################################################
#prueba de hipotesis de una prueba

Para la prueba se usará una significancia del 0.01, para contrastar si se acepta o rechaza la hipótesis planteada. Se asume el supuesto que sus poblaciones vienen de una distribución normal

Hipótesis Nula H0: La media promedio es igual a

Hipótesis Alterna H1: La media promedio diferente a

Valor de la significancia =0.01

t.test(df$age,mu=55,conf.level = 0.99)
## 
##  One Sample t-test
## 
## data:  df$age
## t = -1.9092, df = 29, p-value = 0.06618
## alternative hypothesis: true mean is not equal to 55
## 99 percent confidence interval:
##  48.07597 56.25736
## sample estimates:
## mean of x 
##  52.16667

El valor p =0.74, es mayor a la insignificancia α = 0.01, entonces no se rechazar la hipótesis nula, el cual su media poblacional para age es igual a =55

t.test(df$trestbps,mu=130,conf.level = 0.99)
## 
##  One Sample t-test
## 
## data:  df$trestbps
## t = -0.85231, df = 29, p-value = 0.401
## alternative hypothesis: true mean is not equal to 130
## 99 percent confidence interval:
##  120.8263 134.8403
## sample estimates:
## mean of x 
##  127.8333

El valor p =0.76, es mayor a la insignificancia α = 0.01, entonces no se rechazar la hipótesis nula, el cual su media poblacional para trestbps es igual a =130

t.test(df$thalach,mu=150,conf.level = 0.99)
## 
##  One Sample t-test
## 
## data:  df$thalach
## t = 1.2917, df = 29, p-value = 0.2066
## alternative hypothesis: true mean is not equal to 150
## 99 percent confidence interval:
##  144.4441 165.3559
## sample estimates:
## mean of x 
##     154.9

El valor p =0.52, es mayor a la insignificancia α = 0.01, entonces no se rechazar la hipótesis nula, el cual su media poblacional para thalach es igual

t.test(df$oldpeak,mu=1,conf.level = 0.99)
## 
##  One Sample t-test
## 
## data:  df$oldpeak
## t = 0.56146, df = 29, p-value = 0.5788
## alternative hypothesis: true mean is not equal to 1
## 99 percent confidence interval:
##  0.4526991 1.8273009
## sample estimates:
## mean of x 
##      1.14

El valor p =0.79, es mayor a la insignificancia α = 0.01, entonces no se rechazar la hipótesis nula, el cual su media poblacional para oldpeak es igual a =1

################################################
#matriz de correlacion
cor<-round(cor(df),2)
cor
##            age trestbps thalach oldpeak
## age       1.00     0.10   -0.32    0.00
## trestbps  0.10     1.00    0.00    0.19
## thalach  -0.32     0.00    1.00   -0.37
## oldpeak   0.00     0.19   -0.37    1.00

El valor p =0.79, es mayor a la insignificancia α = 0.01, entonces no se rechazar la hipótesis nula, el cual su media poblacional para oldpeak es igual a =1

#regresion lineal modelo 1
lr1<-lm(thalach~ age,df)
summary(lr1)
## 
## Call:
## lm(formula = thalach ~ age, data = df)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -49.789  -6.143   4.612  14.526  30.138 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 197.9283    24.1288   8.203 6.28e-09 ***
## age          -0.8248     0.4572  -1.804    0.082 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 20.01 on 28 degrees of freedom
## Multiple R-squared:  0.1041, Adjusted R-squared:  0.07214 
## F-statistic: 3.255 on 1 and 28 DF,  p-value: 0.08199

Se realiza la matriz de correlación entre todas las variables y se evidencia que no hay variables fuertemente correlacionadas entre sí. Donde la mayor correlación encontrada es -0.33 que no representa que haya una fuerte relación entre variables. • El thalach y age están correlacionado débilmente de manera inversa con un –0.33. • El thalach y oldpeak están correlacionado débilmente también de manera inversa con un –0.30.

#grafico de dispersion
ggplot(df, aes(thalach,age)) +geom_point()+geom_smooth(method = "lm",se=F,colour="#0099ff")+
  labs(title="Grafico de dispersion", y="thalach", x="age",color=NULL) +
  theme_classic(base_size=15)
## `geom_smooth()` using formula 'y ~ x'

Se buscará un modelo matemático para predecir el thalach (máxima frecuencia cardíaca alcanzada) con la edad. Se tiene que un R cuadrado igual a 0.111, entonces el 11.1% de los datos es explicado por el modelo, entonces el modelo no tiene una suficiente dependencia de linealidad para explicar el modelo. y=194 - 0.78x_ 

#validacion del modelo 
ggplot(df, aes(age, lr1$residuals)) +
  geom_point() + geom_smooth(color = "firebrick") + geom_hline(yintercept = 0, color="#0099ff",size=1) +
  theme_classic(base_size=15)
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

se observa como la dispersión del residuo es muy grande, por lo que tiene valores atípicos en sus residuos

Hipótesis Nula H0: El error aleatorio sigue una distribucion normal

Hipótesis Alterna H1:  El error aleatorio no sigue una distribucion normal

Valor de la significancia =0.01

#normalidad de residuos
x<-lr1$residuals
ks.test(x,"pnorm",mean(x),sd(x))
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  x
## D = 0.15301, p-value = 0.44
## alternative hypothesis: two-sided

Su valor p esta por debajo de la significancia 0.01, por lo que se rechaza la hipótesis nula, entonces los residuos siguen una distribución normal.

#regresion lineal modelo 2
lr2<-lm(thalach~ oldpeak,df)
summary(lr2)
## 
## Call:
## lm(formula = thalach ~ oldpeak, data = df)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -57.565  -8.088   2.086  11.639  41.945 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  161.262      4.711  34.231   <2e-16 ***
## oldpeak       -5.581      2.675  -2.087   0.0461 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 19.67 on 28 degrees of freedom
## Multiple R-squared:  0.1346, Adjusted R-squared:  0.1037 
## F-statistic: 4.354 on 1 and 28 DF,  p-value: 0.04614

Se buscará un modelo matemático para predecir el thalach (máxima frecuencia cardíaca alcanzada) con el oldpeak. Se tiene que un R cuadrado igual a 0.090, entonces el 9.0% de los datos es explicado por el modelo, entonces el modelo no tiene una suficiente dependencia de linealidad para explicar el modelo. y=156 - 5.67x_ 

#grafico de dispersion
ggplot(df, aes(thalach,oldpeak)) +geom_point()+geom_smooth(method = "lm",se=F,colour="#0099ff")+
  labs(title="Grafico de dispersion", x="oldpeak", y="thalach",color=NULL) +
  theme_classic(base_size=15)
## `geom_smooth()` using formula 'y ~ x'

se observa como la dispersión del residuo es muy grande, por lo que tiene valores atípicos en sus residuos

#validacion del modelo 
ggplot(df, aes(oldpeak, lr2$residuals)) +
  geom_point() + geom_smooth(color = "firebrick") + geom_hline(yintercept = 0, color="#0099ff",size=1) +
  theme_classic(base_size=15)
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

Hipótesis Nula H0: El error aleatorio sigue una distribucion normal

Hipótesis Alterna H1:  El error aleatorio no sigue una distribucion normal

Valor de la significancia =0.01

#normalidad de residuos
x<-lr2$residuals
ks.test(x,"pnorm",mean(x),sd(x))
## 
##  One-sample Kolmogorov-Smirnov test
## 
## data:  x
## D = 0.12605, p-value = 0.6807
## alternative hypothesis: two-sided

Su valor p esta por debajo de la significancia 0.01, por lo que se rechaza la hipótesis nula, entonces los residuos siguen una distribución normal.

###Conclusión

De la base de datos de diagnóstico de corazón, se tomaron una muestra de 100 casos en pacientes, las cuales se realizaron las diferentes pruebas estadísticas inferenciales y se llegó a los siguientes resultados:

• No existieron correlaciones o dependencia entre variables, El thalach y age están correlacionado débilmente de manera inversa con un –0.33. El thalach y oldpeak están correlacionado débilmente también de manera inversa con un –0.30.

• Para la regresión lineal simple al tener un bajo R2 el modelo no tendra una buena predicción. Esto se debe a la baja correlación que había entre la predicción y los predictores.

• En los contrastes para comprobar la normalidad en las variables para poder realizar el intervalo de confianza y contraste de hipótesis, todos sus valor p se rechazaron, debido a los problemas de sus valores atípicos que tenía en sus extremos, entonces ninguno seguía una distribución normal.