Alexis Anagunano

Me llamos Alexis Anaguano soy estudiante de Biotecnología en la “Universidad de las Fuerzas Armadas-ESPE”, soy de Quito,tengo 21 años, para mi la estadistica es una parte fundamental para la carrera por lo cual el manejo de datos es indispensable en las investigaciones que realizare.

Karol Balseca

Yo soy Karol Balseca,tengo 21 años, y me gustan los gatos y el medio ambiente, estudio en la “Universidad de las Fuerzas Armadas-ESPE”, soy de latacunga, y estoy cursando la carrera de Biotecnologia la cual me ha parecido muy interesante, me gusta investigar por lo cual es necesario tener muchos conocimientos de estadistica y biologia, ya que me permitiran en un futuro lograr poder mejorar o buscar soluciones para remediar el medio ambiente.

Joseph Quinga

Mi nombre es Joseph Quinga tengo 21 años, estudio en la “Universidad de las Fuerzas Armadas-ESPE”, en ingenieria en Biotecnologia, escogi esta carrera porque me gusta realizar experimentos en el laboratorio, mi fin es crear mi propia empresa y para ello utilizare los conocimientos que ire adquieriendo durante mi carrera.

PACIENTE

Base de datos de paciente
library(ggplot2)
library(dplyr)
library(foreign)
library(graphics)
library(corrplot)
library(reshape2)
library(stats)
library(caTools)

library(readxl)
pacientes <- read_excel("pacientes.xlsx", 
    col_types = c("text", "numeric", "numeric", 
        "numeric", "numeric", "text"), skip = 2)

Lectura de la base de datos, nombres de columnas adecuados, definir tipo de varibles y etiquetas a las tipo factor Las variabels tip factor es el género y las varibles numéricas son IMC TAD EDAD ya que son cuantitativas

View(pacientes)
str(pacientes)
## Classes 'tbl_df', 'tbl' and 'data.frame':    70 obs. of  6 variables:
##  $ PACIENTE  : chr  "1" "2" "3" "4" ...
##  $ EDAD      : num  42 64 47 56 54 48 57 52 67 46 ...
##  $ COLESTEROL: num  292 235 200 200 300 215 216 254 310 237 ...
##  $ IMC       : num  31.6 30.8 25.6 26.2 32 ...
##  $ TAD       : num  97 90 80 75 100 67 NA 70 105 70 ...
##  $ GENERO    : chr  "Hombre" "Hombre" "Hombre" "Mujer" ...
summary(pacientes)
##    PACIENTE              EDAD         COLESTEROL         IMC       
##  Length:70          Min.   :42.00   Min.   :175.0   Min.   :19.10  
##  Class :character   1st Qu.:49.00   1st Qu.:214.2   1st Qu.:22.36  
##  Mode  :character   Median :56.00   Median :230.0   Median :25.38  
##                     Mean   :55.24   Mean   :236.8   Mean   :25.47  
##                     3rd Qu.:60.00   3rd Qu.:254.0   3rd Qu.:27.81  
##                     Max.   :68.00   Max.   :315.0   Max.   :33.91  
##                                                     NA's   :2      
##       TAD            GENERO         
##  Min.   : 65.00   Length:70         
##  1st Qu.: 75.00   Class :character  
##  Median : 80.00   Mode  :character  
##  Mean   : 81.65                     
##  3rd Qu.: 90.00                     
##  Max.   :105.00                     
##  NA's   :1

** Genere diagramas de caja para variables continuas y diagramas de barras para variables discretas, describir resultados**

pacientes$GENERO <-factor(pacientes$GENERO,levels=c('Hombre','Mujer'))
par(mfrow=c(1,1))
boxplot(COLESTEROL~GENERO,pacientes,horizontal=T,xlab="COLESTEROL",ylab="GENERO")

El promedio de colesterol entre mujeres y hombres son distintos, se observa que el promedio del colesterol de hombres es mayor en comparación con las mujeres. Más del 75 porciento de hombres tienen sus nibles de Colesterol entre 180 a 280; enlas mujeres varia en un rango de 200 a 240 y existen tres datos atípicos

boxplot(IMC~GENERO,pacientes,horizontal=T,xlab="IMC",ylab="GENERO")

En este diagrama de cajas se puede observar que elpromedio del IMC entre ambos generos es similar

boxplot(TAD~GENERO,pacientes,horizontal=T,xlab="TAD",ylab="GENERO")

En este gráfico se puede observar que la media de la Tensión Aortica Diastólica es significativamente diferente, es decir, se aprecia que en los hombres el TAD es mayor.

library(ggplot2)
library(dplyr)
M=data.frame(pacientes %>% filter(GENERO=="Mujer") %>% select(EDAD,GENERO)) 
#M
barplot(M$EDAD,xlab ="Edad",ylab = "pacientesMujeres",names.arg = M$EDAD,main = "Diagrama de barras",col = rainbow(nrow(M)))

mean(M$EDAD)
## [1] 55.89655

El Promedio de las edades de las mujeres en que se realizaron los estudios es de 55.8 que equivale a 56 años

library(ggplot2)
library(dplyr)
H=data.frame(pacientes %>% filter(GENERO=="Hombre") %>% select(EDAD,GENERO)) 
#H
barplot(H$EDAD,xlab ="Edad",ylab = "pacientesHombres",names.arg = H$EDAD,main = "Diagrama de barras",col = rainbow(nrow(H)))

mean(H$EDAD)
## [1] 54.78049

El promedio de pacientes Hombres en que se realizaron los estudios fue de 54.7 lo que equivale a 55; lo que indica que en el estudio se realizó con hombres un poquito jóvenes que las mujeres, no hay mucha diferencias entre las edades de ambos géneros.

Calcule la correlación entre la variable dependiente y cada una de las variables explicativas (numéricas).

haz.cero.na=function(x){
ifelse(is.na(x),0,x)}
pacientes.2=data.frame(sapply(pacientes,haz.cero.na))
pacientes
## # A tibble: 70 x 6
##    PACIENTE  EDAD COLESTEROL   IMC   TAD GENERO
##    <chr>    <dbl>      <dbl> <dbl> <dbl> <fct> 
##  1 1           42        292  31.6    97 Hombre
##  2 2           64        235  30.8    90 Hombre
##  3 3           47        200  25.6    80 Hombre
##  4 4           56        200  26.2    75 Mujer 
##  5 5           54        300  32.0   100 Hombre
##  6 6           48        215  23.2    67 Hombre
##  7 7           57        216  21.2    NA Mujer 
##  8 8           52        254  27.0    70 Hombre
##  9 9           67        310  24.3   105 Hombre
## 10 10          46        237  21.9    70 Mujer 
## # ... with 60 more rows
View(pacientes.2)

levels(pacientes.2$GENERO) <- c("Hombre","Mujer")
tabla=table(pacientes.2$GENERO)#Tabla de frecuencias
tabla
## 
## Hombre  Mujer 
##     41     29
pacientes.2$EDAD<-as.numeric(pacientes.2$EDAD)
pacientes.2$COLESTEROL<-as.numeric(pacientes.2$COLESTEROL)
pacientes.2$IMC<-as.numeric(pacientes.2$IMC)
pacientes.2$TAD<-as.numeric(pacientes.2$TAD)

correlacion<-corrplot(cor(select(pacientes.2,-c(PACIENTE,GENERO))))

correlacion
##                   EDAD COLESTEROL        IMC         TAD
## EDAD        1.00000000 0.29995312 0.16273287 -0.01999005
## COLESTEROL  0.29995312 1.00000000 0.42735506  0.08814233
## IMC         0.16273287 0.42735506 1.00000000  0.08993568
## TAD        -0.01999005 0.08814233 0.08993568  1.00000000

Se puede determinar que existe una correlación directa entre las diversas variables además se puede determinar que existe relación entre edad-colesterol,IMC-colesterol. con esto se puede decir que la relación IMC-colesterol es la más significativa.También se determina que no existe correlación entre el TAD y la EDAD. En síntesis se puede saber que el IMC va a aumentar a medida que aumenta el colesterol.

** Muestre el efecto de las variables independientes con respecto a la variable dependiente**

pacientes.2 %>%
  select(c(EDAD,COLESTEROL,IMC,TAD)) %>%
  melt(id.vars = "TAD") %>%
  ggplot(aes(x = value, y = TAD, colour = variable)) +
  geom_point(alpha = 0.7) +
  stat_smooth(aes(colour = "TAD")) +
  facet_wrap(~variable, scales = "free", ncol = 2) +
  labs(x = "Variable Value", y = "pacientes.2") +
  theme_minimal()

No hay correlación del colesterol, IMC, TAD con respecto a la EDAD ##ANALISIS ANOVA

** Considere una variable categÓrica y realice un análisis ANOVA incluya resultados y conclusion al final** HIPOTESIS Ho : las medias del IMC en hombres y mujeres son iguales H1 = las medias del IMC en hombres y mujeres son distintas

boxplot(pacientes.2$IMC ~ pacientes.2$GENERO , col = c("yellow","blue"), ylab = "INDICE DE MASA CORPORAL")

Según la gráfica se dice que existe homocedasticidad

tapply(pacientes.2$IMC,pacientes.2$GENERO, mean)
##   Hombre    Mujer 
## 30.97561 28.06897

Según estos resultados el hombre tiene más indice de masa corporal,pero la diferencia no es mucha.

Analisis de variables tipo continua y otra tipo factor o categorica

hm = aov( lm(pacientes.2$IMC ~ pacientes.2$GENERO) )
summary(hm)#Analisis de Anova
##                    Df Sum Sq Mean Sq F value Pr(>F)
## pacientes.2$GENERO  1    144   143.5   0.478  0.492
## Residuals          68  20409   300.1
names(hm)
##  [1] "coefficients"  "residuals"     "effects"       "rank"         
##  [5] "fitted.values" "assign"        "qr"            "df.residual"  
##  [9] "contrasts"     "xlevels"       "call"          "terms"        
## [13] "model"

Valor crítico de F bajo la hipotesis nula con un nivel de significancia alfa = 0.05

qf(0.05, 2-1, 70-2, lower.tail = F)
## [1] 3.981896

Como el estadistico F= 0.478 es menor que el Valor critico de F=3.981896 Ho no se rechaza, por lo tanto estadisticamente las medias del IMC de hombres y mujeres es igual.

media <- mean(pacientes.2$IMC[pacientes.2$GENERO =="Hombre"]) 
valor_t <- pt(0.05/2, 70 - 2) 
sp <- sqrt(15.61 )  #desviación 
ee  <- valor_t * (sp/ sqrt(41))  
media
## [1] 30.97561
media2 <- mean(pacientes.2$IMC[pacientes.2$GENERO =="Mujer"]) 
valor_t <- pt(0.05/2, 70 - 2) 
sp <- sqrt(15.61 )  
ee  <- valor_t * (sp/ sqrt(29)) 
media2
## [1] 28.06897

Intervalos de confianza para Hombres

media + ee 
## [1] 31.34974
media - ee 
## [1] 30.60148

Intervalos de confianza para Mujeres

media2 + ee 
## [1] 28.44309
media2 - ee 
## [1] 27.69484

Diferencias significativas entre las medias del IMC entre hombres y mujeres

intervals = TukeyHSD(hm) #me indica si son diferentes
intervals
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = lm(pacientes.2$IMC ~ pacientes.2$GENERO))
## 
## $`pacientes.2$GENERO`
##                   diff       lwr      upr     p adj
## Mujer-Hombre -2.906644 -11.29463 5.481343 0.4916186

Graficando se tiene que:

plot(intervals)

Como el gráfico contiene al cero los grupos son iguales estadisticamente

Validacion del modelo ANOVA

Independencia

plot(hm$residuals) 

Mas dispersos quiere decir que están menos correlacionados

Normalidad

summary(hm$residuals)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## -29.976 -13.976   1.431   0.000  12.774  29.931
boxplot(hm$residuals) 

La distancia de los cuartiles nos muestra si hay homocedasticidad

hist(hm$residuals)

qqnorm(hm$residuals) 
qqline(hm$residuals) 

Test de Shapiro-Wilk

shapiro.test(hm$residuals) # p>=0.05 son normales p<0.05 no son normales 
## 
##  Shapiro-Wilk normality test
## 
## data:  hm$residuals
## W = 0.95526, p-value = 0.0138

En este caso como p=0.01447 y es menor a 0.05 no existe normalidad de residuos

Homocedasticidad

Los graficos y descriptivos nos informan si se verifica la igualdad de varianzas en los grupos descritos:

boxplot(hm$residuals~pacientes$GENERO, col = c("yellow","blue"))  # Este no sale toca revisar

La varianza de los grupos se obtiene a partir de los residuos

desviaciones <- tapply(hm$residuals, pacientes$GENERO, sd)

Comparando la desviacion maxima con la minima obtenemos una orientacion sobre la falta de homocedasticidad (>2 aproximadamente)

max(desviaciones) / min(desviaciones)   # no se puede hacer sin lo de arriba
## [1] 1.135675

El resultado es menor que dos por lo tanto hay homosedasticidad

Test de Bartlett

El test de Bartlett(homosedasticidad) indica que no tenemos evidencia suficiente para rechazar la hipotesis nula (las varianzas son iguales)

bartlett.test(hm$residuals ~ pacientes$GENERO) # Mismo problema debe tener la misma longitud 
## 
##  Bartlett test of homogeneity of variances
## 
## data:  hm$residuals by pacientes$GENERO
## Bartlett's K-squared = 0.51607, df = 1, p-value = 0.4725

las varianzas son iguales Kruskal-Wallis y pruebas post-hoc

Ho: las medias son iguales en todas las poblaciones

Ha: hay alguna media distinta

?Que hipotesis contrasta la prueba de Kruskal-Wallis?

Ho: la variable respuesta es la misma en todas las poblaciones valoradas

Ha: la variable respuesta es mayor en alguna de las poblaciones

kruskal.test(pacientes.2$IMC, pacientes.2$GENERO)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  pacientes.2$IMC and pacientes.2$GENERO
## Kruskal-Wallis chi-squared = 0.48656, df = 1, p-value = 0.4855

Bajo la Ho el estadistico de contraste H del test de Kruskal-Wallis se distribuye como una Chi-cuadrado de grados de libertad (I-1) (donde I es el numero de grupos que disponemos). Asi obtenemos el cuantil buscado:

qchisq(0.05, 2-1, lower.tail = F) 
## [1] 3.841459

En este caso con la prueba de Kruskal-Wallis el valor chi-cuadrado es 0.48656 siendo este menor a 3.841459 por lo cual no se rechaza Ho

kruskal.test(log(pacientes.2$IMC), pacientes.2$GENERO) 
## 
##  Kruskal-Wallis rank sum test
## 
## data:  log(pacientes.2$IMC) and pacientes.2$GENERO
## Kruskal-Wallis chi-squared = 0.48656, df = 1, p-value = 0.4855

Los resultados son exactamente los mismos. No se producen variaciones porque el test de Kruskal-Wallis trabaja sobre rangos, es decir, sobre ordenaciones de los valores de la variable en cada uno de los grupos. Aunque realicemos una transformacion logaratmica, el orden entre los valores de la variable se mantiene y por lo tanto la transformacion no afecta a los resultados del test.

Grupos que generan diferencias significativas

library(PMCMR)
posthoc.kruskal.nemenyi.test(pacientes.2$IMC,pacientes.2$GENERO, method = "Chisq")
## 
##  Pairwise comparisons using Tukey and Kramer (Nemenyi) test  
##                    with Tukey-Dist approximation for independent samples 
## 
## data:  pacientes.2$IMC and pacientes.2$GENERO 
## 
##       Hombre
## Mujer 0.49  
## 
## P value adjustment method: none

No hay homocedasticidad en los residuos

Construcciónn del modelo y predicción

Paquetes requeridos

library(readr)
library(ggplot2)
library(corrplot) 
library(mlbench) 
library(Amelia) # tratamientos de datos
library(plotly) 
library(reshape2) 
library(caret)  
library(caTools) 
library(dplyr)
library(raster)

Limpieza de datos

Comprobacion si hay NA en el marco de datos.

missmap(pacientes.2,col=c('yellow','black'),y.at=1,y.labels='',legend=TRUE) # Primer color datos perdidos,segundo color datos usados

Como se puede ver en la grafica tenemos 0% de datos perdidos

Construccion de modelo y prediccion:

# establecer una semilla
set.seed(123) # numero aleatorio depende de la semilla 



split <- sample.split(pacientes.2,SplitRatio =0.75)

train <- subset(pacientes.2,split==TRUE) # si se incluye dentro del data
test <- subset(pacientes.2,split==FALSE) # No se incluye en el ajuste del dato 

Entrenando nuestro modelo:

model <- lm( TAD~ COLESTEROL+IMC+EDAD  , data = train) 
summary(model) # En este caso no use genero porque es una variable categorica
## 
## Call:
## lm(formula = TAD ~ COLESTEROL + IMC + EDAD, data = train)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -6.2548 -1.0797 -0.2378  2.0406  3.7594 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  6.51276    1.11044   5.865 5.74e-07 ***
## COLESTEROL   0.04450    0.03367   1.322    0.193    
## IMC          0.01650    0.02448   0.674    0.504    
## EDAD        -0.04016    0.05811  -0.691    0.493    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2.602 on 43 degrees of freedom
## Multiple R-squared:  0.06516,    Adjusted R-squared:  -5.867e-05 
## F-statistic: 0.9991 on 3 and 43 DF,  p-value: 0.4024
#IMC y TAD no son sigificativas para la edad

Considerando los cálculos anteriores genere el modelo de regresión lineal múltiple que mejor se ajuste a los datos.

## [1] "TAD=  6.51 + 0.04 COLESTEROL + 0.02 IMC -0.04 EDAD"

No todas las variables fueron estadisticamente significativas, las que tuvieron mayor relevancia fueron el colesterol y el IMC.

Visualizando nuestro modelo

res <- residuals(model)

res <- as.data.frame(res)
ggplot(res,aes(res)) +  geom_histogram(fill='blue',alpha=0.5)

plot(model)

Predicciones

Probemos nuestro modelo prediciendo en nuestro conjunto de datos de prueba.

test$var.prediccion <- predict(model,test)
str(test)
## 'data.frame':    23 obs. of  7 variables:
##  $ PACIENTE      : Factor w/ 70 levels "1","10","11",..: 34 45 2 3 8 9 15 16 21 22 ...
##  $ EDAD          : num  15 13 5 17 23 25 25 8 7 10 ...
##  $ COLESTEROL    : num  4 41 23 15 33 26 31 14 3 21 ...
##  $ IMC           : num  37 57 15 33 48 23 46 34 35 40 ...
##  $ TAD           : num  7 2 6 6 10 9 3 9 9 8 ...
##  $ GENERO        : Factor w/ 2 levels "Hombre","Mujer": 2 1 2 1 2 2 1 1 2 1 ...
##  $ var.prediccion: num  6.7 8.76 7.58 7.04 7.85 ...
dim(test$var.prediccion)
## NULL
pl1 <-test %>% 
  ggplot(aes(TAD,var.prediccion)) +
  geom_point(alpha=0.5) + 
  stat_smooth(aes(colour='TAD')) +
  xlab('Actual value of TAD') +
  ylab('Predicted value ')+
  theme_bw()

ggplotly(pl1) # puedo aplicar ggploty a los graficos ggplot

Evaluemos nuestro modelo

usando Root Mean Square Error, una medida estandarizada de cuan lejos estabamos con nuestros valores predichos.

error <- test$TAD-test$var.prediccion
rmse <- sqrt(mean(error)^2)
rmse #si esta cercano a 1 significa que el modelo es bueno 
## [1] 0.5583846

Incluir los resultados obtenidos y las conclusiones.

El modelo que se realizó es bueno ya que tiene apxoximidad al 1, por lo tanto es posible hacer predicciones