Caso práctico

A partir de unos datos bioclínicos o biosanitarios que escojáis y que importéis a R, explicad sus variables (mínimo de ocho variables) y también: • Realizad un resumen estadístico completo del dataset y explicad los resultados.

#Para este caso uso los datos "Relationship between IQ and Brain Size" obtenidos de StatLib---Datasets Archive.
library(readr)
dataiq<-read.table("C:/Users/divad/OneDrive - Universitat de Barcelona/Universidad/Máster Bioinformática-Bioestadística/Semestre 1/Software para el análisis de datos/Unidad 1/Problemas/IQ_Brain_Size (data).txt", header=TRUE) #Importar datos a partir de un docuemnto .txt
summary(dataiq) #Resumen de los datos
##     CCMIDSA           FIQ              HC            ORDER          PAIR     
##  Min.   :5.730   Min.   : 85.0   Min.   :52.90   Min.   :1.0   Min.   : 1.0  
##  1st Qu.:6.295   1st Qu.: 92.0   1st Qu.:54.77   1st Qu.:1.0   1st Qu.: 3.0  
##  Median :6.715   Median : 96.5   Median :56.75   Median :1.5   Median : 5.5  
##  Mean   :6.992   Mean   :101.0   Mean   :56.12   Mean   :1.5   Mean   : 5.5  
##  3rd Qu.:7.633   3rd Qu.:105.5   3rd Qu.:57.20   3rd Qu.:2.0   3rd Qu.: 8.0  
##  Max.   :8.760   Max.   :127.0   Max.   :59.20   Max.   :2.0   Max.   :10.0  
##       SEX          TOTSA          TOTVOL         WEIGHT      
##  Min.   :1.0   Min.   :1685   Min.   : 963   Min.   : 57.61  
##  1st Qu.:1.0   1st Qu.:1772   1st Qu.:1035   1st Qu.: 61.58  
##  Median :1.5   Median :1864   Median :1079   Median : 75.98  
##  Mean   :1.5   Mean   :1906   Mean   :1126   Mean   : 77.80  
##  3rd Qu.:2.0   3rd Qu.:1983   3rd Qu.:1181   3rd Qu.: 85.05  
##  Max.   :2.0   Max.   :2264   Max.   :1439   Max.   :133.36
library(knitr)
pairs(dataiq) #Matriz de diagramas de dispersión entre pares de variables, donde podríamos ver si 2 variables estan correlacionadas. Para eso, deberíamos ver como se forma una recta de regresión , cosa que solo osbervamos levementa para algunos pares

str(dataiq) #Información sobre las variables
## 'data.frame':    20 obs. of  9 variables:
##  $ CCMIDSA: num  6.08 5.73 6.22 5.8 7.99 8.42 7.44 6.84 6.48 6.43 ...
##  $ FIQ    : int  96 89 87 87 101 103 103 96 127 126 ...
##  $ HC     : num  54.7 54.2 53 52.9 57.8 56.9 56.6 55.3 53.1 54.8 ...
##  $ ORDER  : int  1 2 1 2 1 2 1 2 1 2 ...
##  $ PAIR   : int  1 1 2 2 3 3 4 4 5 5 ...
##  $ SEX    : int  2 2 2 2 2 2 2 2 2 2 ...
##  $ TOTSA  : num  1914 1685 1902 1860 2264 ...
##  $ TOTVOL : int  1005 963 1035 1027 1281 1272 1051 1079 1034 1070 ...
##  $ WEIGHT : num  57.6 59 64.2 58.5 64 ...
cor_dataiq<-cor(dataiq) #Correlación
kable(cor_dataiq) #Tabla de correlaciones
CCMIDSA FIQ HC ORDER PAIR SEX TOTSA TOTVOL WEIGHT
CCMIDSA 1.0000000 0.1562515 0.6127741 -0.0768432 0.2693890 -0.2798889 0.3371980 0.6617891 0.0816945
FIQ 0.1562515 1.0000000 0.1378395 0.0465971 0.3325721 0.0388309 -0.2913192 -0.0633920 -0.0027025
HC 0.6127741 0.1378395 1.0000000 -0.0702084 0.6809937 -0.6711921 0.3366737 0.5079144 0.2399806
ORDER -0.0768432 0.0465971 -0.0702084 1.0000000 0.0000000 0.0000000 -0.2035206 0.0349003 0.0110321
PAIR 0.2693890 0.3325721 0.6809937 0.0000000 1.0000000 -0.8703883 -0.0147580 0.3908962 0.3356126
SEX -0.2798889 0.0388309 -0.6711921 0.0000000 -0.8703883 1.0000000 -0.0298205 -0.3633739 -0.1387483
TOTSA 0.3371980 -0.2913192 0.3366737 -0.2035206 -0.0147580 -0.0298205 1.0000000 0.6009954 0.0641067
TOTVOL 0.6617891 -0.0633920 0.5079144 0.0349003 0.3908962 -0.3633739 0.6009954 1.0000000 0.2079227
WEIGHT 0.0816945 -0.0027025 0.2399806 0.0110321 0.3356126 -0.1387483 0.0641067 0.2079227 1.0000000

Estos datos constan de 9 variables que son: superificie de area del Corpus Collasum en cm^2 (CCMIDSA), el IQ en escala total (FIQ), circumferencia de la cabeza en cm (HC), orden de nacimiento (ORDER), ID de parejas -genotipo (PAIR), sexo donde 1=Hombre y 2=Mujer (SEX), área total de la superficie en cm^2 (TOTSA), volumen total del cerebro en cm^3 (TOTVOL) y peso corporal en kg (WEIGHT). Al hacer el estudio de correlaciones, no vemos que ninguna variable tenga una alta correlación con el valor FIQ, que nos indica el IQ. Aún así, hay que hacer más análisis.

• Realizad cinco gráficos básicos con las variables, explicad su significado y guardadlos como imágenes (jpeg o bmp).

plot(dataiq$FIQ, dataiq$TOTSA, main="Gráfico IQ total vs Área de superficie total", xlab="IQ", ylab="Área de superficie total (cm^2)", col="coral") #Gráfico 1: vemos que aparentemente no hay ninguna relación líneal entre ambas variables

boxplot(TOTVOL ~ SEX, data = dataiq, main="Gráfico sexo vs volumen total del cerebro", col="chocolate") #Gráfico 2: podrían verse diferencias entre sexos por lo que hace referencia al volumen total del cerebro, pero haría falta hacer un test para estar seguros.

plot(CCMIDSA ~ HC, data = dataiq,  main="Gráfico CCMIDA vs HC", xlab="Área de la superficie del Corpus Collasum (cm^2)", ylab="Circumferencia de la cabeza (cm)", col="blue")
rec3 <- lm(CCMIDSA ~ HC, data = dataiq)
abline(rec3, col = "black") #Gráfico 3: en el caso de las variables CCMIDSA y HC sí que parece observarse una relación lineal entre ambas variables, siendo esta positiva

boxplot(FIQ ~ ORDER, data = dataiq, main="Gráfico orden de nacimiento vs IQ", col="green") #Gráfico 4: parece que no habría diferencias respecto orden de crecimiento al relacionarlo con el IQ, pero habría que hacer más test.

plot(TOTVOL~WEIGHT, data = dataiq, main="Gráfico Peso vs Área de superficie total", xlab="Peso", ylab="Área de superficie total (cm^2)", col="coral") #Gráfico 5: vemos que aparentemente no hay ninguna relación líneal entre ambas variables

Gráfico 1: Gráfico 2: Gráfico 3: Gráfico 4: Gráfico 5:

• Realizad dos gráficos con el comando ggplot(), explicad su significado y guardadlos como imágenes (jpeg o bmp).

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ purrr     1.0.2
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.0     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
#Gráfico 1
grafGG1<-ggplot(dataiq, aes(x = CCMIDSA, y = HC)) +
  geom_point() +
  geom_smooth(method = "lm", color="darkred") +
  labs(title = "Gráfico CCMIDA vs HCe",
       x = "Área de la superficie del Corpus Collasum (cm^2)",
       y = "Circumferencia de la cabeza (cm)")
grafGG1
## `geom_smooth()` using formula = 'y ~ x'

ggsave("grafGG1.jpg", plot = grafGG1, width = 6, height = 4, dpi = 300) #Guardar como .jpg
## `geom_smooth()` using formula = 'y ~ x'
#La explicación es la misma que para el gráfico 3 del aparatado anterior
#Gráfico 2
grafGG2<-ggplot(dataiq, aes(FIQ)) +
  geom_histogram()+
  facet_grid(~ORDER) +
  labs(title = "Gráfico IQ vs Orden de nacimiento",
       x = "Orden de nacimiento",
       y = "IQ")
grafGG2
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

ggsave("grafGG2.jpg", plot = grafGG2, width = 6, height = 4, dpi = 300) #Guardar como .jpg
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
#Con este gráficos podemos ver un histograma separado por las 2 clasificaciones por el orden de crecimiento.

• Generad una regresión lineal entre dos de sus variables paso a paso y comentad los resultados obtenidos.

library(knitr)
#Acceder a los datos
data(dataiq)
## Warning in data(dataiq): data set 'dataiq' not found
#Resumen de todas variables
str(dataiq)
## 'data.frame':    20 obs. of  9 variables:
##  $ CCMIDSA: num  6.08 5.73 6.22 5.8 7.99 8.42 7.44 6.84 6.48 6.43 ...
##  $ FIQ    : int  96 89 87 87 101 103 103 96 127 126 ...
##  $ HC     : num  54.7 54.2 53 52.9 57.8 56.9 56.6 55.3 53.1 54.8 ...
##  $ ORDER  : int  1 2 1 2 1 2 1 2 1 2 ...
##  $ PAIR   : int  1 1 2 2 3 3 4 4 5 5 ...
##  $ SEX    : int  2 2 2 2 2 2 2 2 2 2 ...
##  $ TOTSA  : num  1914 1685 1902 1860 2264 ...
##  $ TOTVOL : int  1005 963 1035 1027 1281 1272 1051 1079 1034 1070 ...
##  $ WEIGHT : num  57.6 59 64.2 58.5 64 ...
summary(dataiq)
##     CCMIDSA           FIQ              HC            ORDER          PAIR     
##  Min.   :5.730   Min.   : 85.0   Min.   :52.90   Min.   :1.0   Min.   : 1.0  
##  1st Qu.:6.295   1st Qu.: 92.0   1st Qu.:54.77   1st Qu.:1.0   1st Qu.: 3.0  
##  Median :6.715   Median : 96.5   Median :56.75   Median :1.5   Median : 5.5  
##  Mean   :6.992   Mean   :101.0   Mean   :56.12   Mean   :1.5   Mean   : 5.5  
##  3rd Qu.:7.633   3rd Qu.:105.5   3rd Qu.:57.20   3rd Qu.:2.0   3rd Qu.: 8.0  
##  Max.   :8.760   Max.   :127.0   Max.   :59.20   Max.   :2.0   Max.   :10.0  
##       SEX          TOTSA          TOTVOL         WEIGHT      
##  Min.   :1.0   Min.   :1685   Min.   : 963   Min.   : 57.61  
##  1st Qu.:1.0   1st Qu.:1772   1st Qu.:1035   1st Qu.: 61.58  
##  Median :1.5   Median :1864   Median :1079   Median : 75.98  
##  Mean   :1.5   Mean   :1906   Mean   :1126   Mean   : 77.80  
##  3rd Qu.:2.0   3rd Qu.:1983   3rd Qu.:1181   3rd Qu.: 85.05  
##  Max.   :2.0   Max.   :2264   Max.   :1439   Max.   :133.36
#Miramos correlación entre 2 variables a estudiar
kable(cor(dataiq$CCMIDSA, dataiq$HC))
x
0.6127741
#Generamos el modelo de la regresión lineal entre ambas variables
modelreg<-lm(CCMIDSA ~ HC, data=dataiq)
summary(modelreg)
## 
## Call:
## lm(formula = CCMIDSA ~ HC, data = dataiq)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.29232 -0.48586  0.02473  0.43259  1.43768 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)   
## (Intercept) -10.22700    5.23686  -1.953  0.06656 . 
## HC            0.30681    0.09326   3.290  0.00407 **
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.7426 on 18 degrees of freedom
## Multiple R-squared:  0.3755, Adjusted R-squared:  0.3408 
## F-statistic: 10.82 on 1 and 18 DF,  p-value: 0.004072
#Obtenemos que la pendiente es 0.30681 y la variable independiente es -10.22700
#Generamos el gráfico de dispersión así como la representación de la recta del modelo
plot(dataiq$CCMIDSA, dataiq$HC,
     xlab="Área de la superficie del Corpus Collasum (cm^2)",
     ylab="Circumferencia de la cabeza (cm)")
abline(modelreg)

#Hacemos validación del modelo
residuos<-rstandard(modelreg)
valores.ajustados<-fitted(modelreg)
plot(valores.ajustados, residuos)

#Como no se observa nigún aptrón , se asume homocedasticidad y linealidad
#Comprobamos la hipótesis de normalidad
qqnorm(residuos)
qqline(residuos)

#Se asume noramlidad por observarse una línea recta
#Finalmente generamos un intervalo de confianza para nuestro modelo.
confint(modelreg)
##                   2.5 %    97.5 %
## (Intercept) -21.2292438 0.7752408
## HC            0.1108738 0.5027387
#Con esto tendríamos un modelo de regresión lineal entre CCMIDSA y HC.