Ejercicio 1

Utilizando las funciones citadas en este Laboratorio, comprobad qué paquetes tenéis instalados en vuestra versión de RStudio e instalad el paquete MASS y el paquete Survival y comprobad la información que contienen.

# Comprobamos qué paquetes tenemos instalados

library() 

print(.packages(all.available = TRUE)[1:25]) # Un ejemplo de los 25 primeros
##  [1] "abind"         "ade4"          "agricolae"     "AlgDesign"    
##  [5] "anytime"       "aplpack"       "arm"           "askpass"      
##  [9] "assertthat"    "backports"     "base64enc"     "BayesFactor"  
## [13] "bayesplot"     "bayestestR"    "bench"         "bestNormalize"
## [17] "BH"            "bigD"          "Biobase"       "BiocGenerics" 
## [21] "BiocManager"   "BiocVersion"   "bit"           "bit64"        
## [25] "bitops"
# Instalamos el paquete MASS y el paquete Survival

install.packages("MASS")
install.packages("survival")

# Hay diferentes formas de buscar información de los paquetes en R
# Por ejemplo, el comando 'help' ayuda a obtener la información detallada sobre los paquetes

help(package = "MASS")    # Muestra la documentación general del paquete MASS
help(package = "survival") # Muestra la documentación general del paquete Survival

# Por otra parte, el comando 'packageDescription' ayuda a obtener una breve descripción del paquete

packageDescription("MASS")    # Muestra la descripción del paquete MASS
packageDescription("survival") # Muestra la descripción del paquete Survival

Buscad información sobre el paquete Rcmdr (R Commander) desde la consola.

# Aunque en la solución del ejercicio se especifica el uso del siguiente comando

??Rcmdr

# También se puede usar el comando 'help' para buscar la información

help(package = "Rcmdr") 

Ejercicio 2

  1. Importad un archivo de texto y buscad un summary() de tres variables que escojáis.
# Importamos la librería del paquete 'readr' la cual es una versión actualizada de la que sale en los apuntes

library(readr) 

# Tras haber creado un archivo de manera externa, utilizamos la función 'read_csv' para cargar el archivo ya que en esta versión del paquete no existe 'read.txt'

archivo_txt <- read_csv("archivo_txt.txt")

# Imprimimos en la consola un resumen de las variables

print(archivo_txt)  
## # A tibble: 5 × 8
##      ID Nombre  Edad Ciudad     Peso Altura Presion_Arterial Glucosa
##   <dbl> <chr>  <dbl> <chr>     <dbl>  <dbl>            <dbl>   <dbl>
## 1     1 Ana       25 Madrid       55   1.65            12080      90
## 2     2 Beto      30 Barcelona    78   1.75            13085      95
## 3     3 Carlos    22 Valencia     68   1.8             11075      85
## 4     4 Diana     28 Sevilla      60   1.68            12582      92
## 5     5 Elena     35 Bilbao       72   1.7             13588      98
#Realizamos el 'summary' de tres variables:

#Peso

summary(archivo_txt$Peso)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    55.0    60.0    68.0    66.6    72.0    78.0
#Edad

summary(archivo_txt$Edad)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##      22      25      28      28      30      35
#Altura

summary(archivo_txt$Altura)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   1.650   1.680   1.700   1.716   1.750   1.800
# También se puede obtener en conjunto el 'summary' de todas las variables ejecutando el comando para toda la tabla

summary(archivo_txt)
##        ID       Nombre               Edad       Ciudad               Peso     
##  Min.   :1   Length:5           Min.   :22   Length:5           Min.   :55.0  
##  1st Qu.:2   Class :character   1st Qu.:25   Class :character   1st Qu.:60.0  
##  Median :3   Mode  :character   Median :28   Mode  :character   Median :68.0  
##  Mean   :3                      Mean   :28                      Mean   :66.6  
##  3rd Qu.:4                      3rd Qu.:30                      3rd Qu.:72.0  
##  Max.   :5                      Max.   :35                      Max.   :78.0  
##      Altura      Presion_Arterial    Glucosa  
##  Min.   :1.650   Min.   :11075    Min.   :85  
##  1st Qu.:1.680   1st Qu.:12080    1st Qu.:90  
##  Median :1.700   Median :12582    Median :92  
##  Mean   :1.716   Mean   :12482    Mean   :92  
##  3rd Qu.:1.750   3rd Qu.:13085    3rd Qu.:95  
##  Max.   :1.800   Max.   :13588    Max.   :98
  1. Importad un archivo «.csv» y buscad un fivenum() de dos variables que os parezcan relevantes para el estudio.
# Tras haber creado un archivo de manera externa, utilizamos la función 'read_csv' para cargar el archivo.

archivo_csv <- read_csv("archivo_csv.csv")

# Imprimimos en la consola un resumen de las variables

print(archivo_csv)  
## # A tibble: 10 × 10
##       ID Nombre     Edad Ciudad  Peso Altura Presion_Arterial Glucosa Colesterol
##    <dbl> <chr>     <dbl> <chr>  <dbl>  <dbl> <chr>              <dbl>      <dbl>
##  1     1 Ana          25 Madrid    55   1.65 120/80                90        180
##  2     2 Beto         30 Barce…    78   1.75 130/85                95        190
##  3     3 Carlos       22 Valen…    68   1.8  110/75                85        170
##  4     4 Diana        28 Sevil…    60   1.68 125/82                92        185
##  5     5 Elena        35 Bilbao    72   1.7  135/88                98        200
##  6     6 Francisco    40 Zarag…    85   1.78 140/90               105        210
##  7     7 Gloria       50 Murcia    70   1.6  145/95               110        220
##  8     8 Hugo         33 Grana…    90   1.82 135/87                97        195
##  9     9 Isabel       45 Alica…    65   1.67 128/83                94        175
## 10    10 Jose         29 Oviedo    76   1.74 122/79                88        165
## # ℹ 1 more variable: Frecuencia_Cardiaca <dbl>
# Realizamos un 'fivenum' de dos variables:

# Colesterol

fivenum(archivo_csv$Colesterol)
## [1] 165.0 175.0 187.5 200.0 220.0
# Glucosa

fivenum(archivo_csv$Colesterol)
## [1] 165.0 175.0 187.5 200.0 220.0

Ejercicio 3

A partir del conjunto de datos anorexia del paquete MASS, que corresponden a los datos de cambio de peso de pacientes jóvenes con anorexia, mostrad los tipos de datos que contiene y comprobad si existen valores NA y NULL. Para la variable Treat, transformad los valores «CBT», «Cont» y «FT» en «Cogn Beh Tr», «Contr» y «Fam Tr», respectivamente.

# Importamos la librería del paquete 'MASS'. En el caso de que no este instalado usamos install.packages("MASS").

library("MASS")

# Cargamos los datos del conjunto de datos llamado 'anorexia'

data("anorexia")
#Mostramos cuantos valores 'NA' hay

table(is.na(anorexia))
## 
## FALSE 
##   216
#Mostramos cuantos valores 'NULL' hay

table(is.null(anorexia))
## 
## FALSE 
##     1
# Definimos etiquetas para los valores especificados

anorexia$Treat <- factor(anorexia$Treat,levels=c("CBT","Cont","FT"),labels=c("Cogn Beh Tr","Contr","Fam Tr"))

# Vemos si los niveles de estos factores han cambiado

levels(anorexia$Treat)
## [1] "Cogn Beh Tr" "Contr"       "Fam Tr"

Ejercicio 4

  1. Exportad los datos biopsy del paquete MASS a un archivo «.csv.»
# Cargamos los datos del conjunto de datos llamado 'anorexia'. En esta ocasión no es necesario volver a llamar al paquete MASS

data("biopsy")

# Exportamos los datos de biopsy al formato “.csv”. El archivo se guardará en la en la ruta asignada

write.csv(biopsy, file = "D:/Esteban/Vida Academica/Master de Bioinformatica y bioestadistica/Software para el analisis de datos (R)/Laboratorio 1 y 2/Practicas/biopsy.csv")
  1. Exportad los datos melanoma del paquete MASS a archivos de tres diferentes formatos y comprobad que se han creado los diferentes archivos en los formatos y las rutas especificados. Podéis generar una captura de pantalla de su ubicación en la carpeta.
# Cargamos los datos del conjunto de datos llamado 'anorexia'. En esta ocasión no es necesario volver a llamar al paquete MASS

data("Melanoma")

# Importamos en 3 formatos diferentes:

# CSV

write_csv(Melanoma, file = "D:/Esteban/Vida Academica/Master de Bioinformatica y bioestadistica/Software para el analisis de datos (R)/Laboratorio 1 y 2/Practicas/Melanoma.csv")

# TSV

write_tsv(Melanoma, file = "D:/Esteban/Vida Academica/Master de Bioinformatica y bioestadistica/Software para el analisis de datos (R)/Laboratorio 1 y 2/Practicas/Melanoma.tvs")

# TXT

write.table(Melanoma, file = "D:/Esteban/Vida Academica/Master de Bioinformatica y bioestadistica/Software para el analisis de datos (R)/Laboratorio 1 y 2/Practicas/Melanoma.txt")
Figura 1: Prueba de los archivos generados en el apartado a) y b) del ejercicio 4
Figura 1: Prueba de los archivos generados en el apartado a) y b) del ejercicio 4
  1. Generad un resumen (summary) de la variable age de melanoma y guardad la salida que os aparece en un documento .doc
doc_document = summary(Melanoma$age)

capture.output(doc_document, file="D:/Esteban/Vida Academica/Master de Bioinformatica y bioestadistica/Software para el analisis de datos (R)/Laboratorio 1 y 2/Practicas/Melanoma$age.doc")

Prueba:

Figura 2: Prueba del documento .doc generado en el apartado c) del ejercicio 4
Figura 2: Prueba del documento .doc generado en el apartado c) del ejercicio 4
  1. Buscad un data frame en algún repositorio de datos de Biomedicina, descargad un conjunto de datos en «.csv» e importad este fichero a un documento R Markdown usando el código o el menú de importación de RStudio
# El dataframe seleccionado ha sido descargado de: https://archive.ics.uci.edu/datasets y cuyo DOI se corresponde con: https://doi.org/10.24432/C5DK8H

# Importamos del CSV

TestPad_PCB_XYRGB_V2 <- read.csv("D:/Esteban/Vida Academica/Master de Bioinformatica y bioestadistica/Software para el analisis de datos (R)/Laboratorio 1 y 2/Practicas/TestPad_PCB_XYRGB_V2.csv", header = TRUE, sep = ",", stringsAsFactors = FALSE)

# Comprobamos si ha sido importado. Si la respuesta es TRUE es por que el archivo se encuentra en la ventana 'Environment'

exists("TestPad_PCB_XYRGB_V2")
## [1] TRUE

Ejercicio 5

En el siguiente ejemplo veremos cómo utilizar diferentes operadores sobre el conjunto de datos birthwt, así como también algunas funciones que nos permiten obtener más información de las variables:

# Cargamos los datos del conjunto de datos llamado 'birthwt'. En esta ocasión no es necesario volver a llamar al paquete MASS

data("birthwt")
  1. ¿Cuál es la edad máxima de las madres del conjunto de datos?
# Solución. Usamos la función 'max' para encontrar el valor máximo

max(birthwt$age)
## [1] 45
  1. ¿Cuál es la edad mínima de las madres del conjunto de datos?
# Solución. Usamos la función 'min' para encontrar el valor mínimo

min(birthwt$age)
## [1] 14
  1. ¿Cuál es el rango de edad de las madres?
# Solución. Restamos el valor mínimo al valor máximo

max(birthwt$age)-min(birthwt$age)
## [1] 31
  1. ¿Fumaba la madre cuyo recién nacido era el de menor peso?
# Solución. Seleccionamos el valor de la columna 'smoke' que es igual al valor mínimo de la columna 'btw'

birthwt$smoke[birthwt$bwt == min(birthwt$bwt)]
## [1] 1
  1. ¿Cuánto pesó el recién nacido cuya madre tenía la edad máxima?
# Solución. Seleccionamos el valor de la columna 'btw' que es igual al valor máximo de la columna 'age'

birthwt$bwt[birthwt$age == max(birthwt$age)]
## [1] 4990
  1. Listad los pesos de los recién nacidos, cuyas madres visitarán menos de dos veces al médico durante el primer trimestre.
# Solución. Seleccionamos los valores de la columna 'btw' que son menores o iguales a2 de la columna 'ftv'

birthwt$bwt[birthwt$ftv<=2]
##   [1] 2523 2557 2594 2600 2622 2637 2637 2663 2665 2722 2733 2751 2750 2769 2769
##  [16] 2778 2807 2821 2835 2836 2863 2877 2877 2906 2920 2920 2920 2920 2948 2948
##  [31] 2977 2977 2977 2977 2922 3005 3033 3042 3062 3062 3062 3062 3062 3090 3090
##  [46] 3090 3100 3104 3132 3147 3175 3175 3203 3203 3203 3225 3225 3232 3232 3234
##  [61] 3260 3274 3274 3317 3317 3317 3321 3331 3374 3374 3402 3416 3444 3459 3460
##  [76] 3473 3544 3487 3544 3572 3572 3586 3600 3614 3614 3629 3629 3637 3643 3651
##  [91] 3651 3651 3651 3699 3728 3756 3770 3770 3770 3790 3799 3827 3856 3860 3884
## [106] 3884 3912 3940 3941 3941 3969 3983 3997 3997 4054 4054 4111 4153 4167 4174
## [121] 4238 4593 4990  709 1021 1135 1330 1474 1588 1588 1701 1729 1790 1818 1885
## [136] 1893 1899 1928 1928 1928 1936 1970 2055 2055 2082 2084 2084 2100 2125 2187
## [151] 2187 2211 2225 2240 2240 2282 2296 2296 2325 2353 2353 2367 2381 2381 2381
## [166] 2410 2410 2410 2424 2438 2442 2466 2466 2466 2495 2495 2495

Ejercicio 6

A partir del conjunto de datos anorexia trabajado en apartados anteriores, cread una matriz que tenga como columnas los valores de Prewt y Postwt, y cada fila sean los valores correspondientes para cada posición.

#Creamos la matriz

matriz_anorexia <- matrix(c(anorexia$Prewt,anorexia$Postwt),ncol=2) 

# Mostramos los primeros resultados

head(matriz_anorexia) 
##      [,1] [,2]
## [1,] 80.7 80.2
## [2,] 89.4 80.1
## [3,] 91.8 86.4
## [4,] 74.0 86.3
## [5,] 78.1 76.1
## [6,] 88.3 78.1

Ejercicio 7

Copia el código siguiente en tu consola para generar un data frame con veinticinco registros y seis variables, y responde a los siguientes apartados:

# Creamos el data frame

Identificador <- c("I1","I2","I3","I4","I5","I6","I7","I8","I9","I10","I11","I12","I13","I14",
"I15","I16","I17","I18","I19","I20","I21","I22","I23","I24","I25")

Edad <- c(23,24,21,22,23,25,26,24,21,22,23,25,26,24,22,21,25,26,24,21,25,27,26,22,29)

Sexo <-c(1,2,1,1,1,2,2,2,1,2,1,2,2,2,1,1,1,2,2,2,1,2,1,1,2) #1 para mujeres y 2 para hombres

Peso <- c(76.5,81.2,79.3,59.5,67.3,78.6,67.9,100.2,97.8,56.4,65.4,67.5,87.4,99.7,87.6
,93.4,65.4,73.7,85.1,61.2,54.8,103.4,65.8,71.7,85.0)

Alt <- c(165,154,178,165,164,175,182,165,178,165,158,183,184,164,189,167,182,179,165
,158,183,184,189,166,175) #altura en cm

Fuma <- c("SÍ","NO","SÍ","SÍ","NO","NO","NO","SÍ","SÍ","SÍ","NO","NO","SÍ","SÍ","SÍ",
"SÍ","NO","NO","SÍ","SÍ","SÍ","NO","SÍ","NO","SÍ")

Trat_Pulmon <- data.frame(Identificador,Edad,Sexo,Peso,Alt,Fuma)
# Mostramos los primeros resultados

head(Trat_Pulmon) 
##   Identificador Edad Sexo Peso Alt Fuma
## 1            I1   23    1 76.5 165   SÍ
## 2            I2   24    2 81.2 154   NO
## 3            I3   21    1 79.3 178   SÍ
## 4            I4   22    1 59.5 165   SÍ
## 5            I5   23    1 67.3 164   NO
## 6            I6   25    2 78.6 175   NO