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.