-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRintroduction.Rmd
489 lines (321 loc) · 12.6 KB
/
Rintroduction.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
---
title: "Introducción a R"
author: "Karen Guerrero | Joel Ricci | Ricardo Gómez"
date: "`r format(Sys.Date())`"
output:
ioslides_presentation:
smaller: true
widescreen: true
---
```{r setup, include=FALSE, echo = TRUE}
knitr::opts_chunk$set(echo = FALSE)
```
---
```{r, out.width="100%", out.height="100%", fig.align='center'}
knitr::include_graphics('/Users/cigom/dataScience_courses/iceberg_tip.png')
```
## ¿Para que R?
```{r, out.width="80%", out.height="60%", fig.align='center'}
knitr::include_graphics('/Users/cigom/dataScience_courses/datavis_workflow.png')
```
---
```{r, out.width="60%", out.height="35%"}
knitr::include_graphics('/Users/cigom/dataScience_courses/language_stats.png')
```
https://businessoverbroadway.com/2019/01/13/programming-languages-most-used-and-recommended-by-data-scientists/
---
```{r, out.width="100%", out.height="100%"}
knitr::include_graphics('/Users/cigom/dataScience_courses/sampleSheet.png')
```
<!-- RStudio es un entorno de desarrollo integrado que usaremos para editar y probar nuestro código durante el taller. -->
<!-- La siguiente [hoja de trucos](https://www.rstudio.com/wp-content/uploads/2016/01/rstudio-IDE-cheatsheet.pdf) de RStudio puede orientarlos en el uso de RStudio durante el talle -->
<!--  {#id .class width=2 height=2px} -->
## Tipos de datos
- Los datos `categóricos` son variables definidas por un pequeño número de grupos.
+ `Categóricos ordinales` tienen un orden inherente a las categorías (leve / medio / caliente, por ejemplo).
+ `Categóricos no ordinales` no tienen orden en las categorías.
- Los datos `numéricos` toman una variedad de valores numéricos.
+ Las `variables continuas` pueden tomar cualquier valor.
+ Las `variables discretas` se limitan a conjuntos de valores específicos.
<div class="red2">
- ¿Que tipo de datos son estos?
</div>
```{r A}
seq(0, 5,by = 1)
seq(0.5, 1,by = 0.1)
```
```{r C, echo=FALSE, eval=FALSE}
days <- c('Sunday',
'Monday', 'Thuesday',
'Wednesday', 'Thursday', 'Friday',
'Saturday')
print(days)
```
```{r D}
names <- c('Clara Galindo', 'Raquel Muñiz Salazar', 'Miguel A. Tripp Valdez', 'Claudia Ventura López', 'Laura Liliana López Galindo ', 'Javier Robles Flores', 'Silvia A. Arroyo Salazar', 'Alison C. Domínguez Estrada', 'Edgar Alfonso López Landavery', 'Anaid Saavedra Flores', 'Clara Hereu',
'Miguel Martinez', 'Brenda Ivette Iduarte Frias', 'Miguel Ángel del Río Portilla', 'Francesco Cicala', 'Diana Marisol Lara Pérez', 'Eugenio García Álvarez')
depto <- c('Biotecnología marina',
'Biotecnología marina', 'Escuela de Ciencias de Salud',
'Acuicultura', 'Biotecnología Marina', 'Biotecnología Marina', 'Biotecnología Marina', 'Biotecnología Marina', 'Biotecnología marina', 'Biotecnología marina', 'Biotecnología marina', 'Biotecnología marina', 'Biotecnologia Marina', 'Inovación Biomédica', 'Acuicultura', 'Inovación Biomédica', 'Biotecnología Marina', 'Acuicultura')
center <- c('CICESE', 'UABC', 'CICESE', 'CICESE', 'CICESE', 'CICESE', 'CICESE', 'CICESE', 'CICESE', 'CICESE', 'CICESE', 'CICESE', 'CICESE', 'CICESE', 'CICESE', 'CICESE', 'CICESE')
print(sample(names, 3))
```
<!-- Detalles [aqui](https://github.com/RJEGR/July_2018_bioinfo) -->
## End()
## Outlines
1. Introducción a R
- Operaciones matemáticas y asignaciones
- Tipos de objectos y manipulación de vectores
- Operaciones racionales
- Graficos con R
- Leyendo archivos
## Empezando con R
Copien y pegen el texto de arriba en su terminal, y R deberá regresarles algo así:
```{r print, echo = TRUE}
print("Esta función simplemente imprime un texto a la pantalla")
```
Para obtener ayuda en R de cualquier función, escribimos un signo de interrogación adelante del nombre de la función, por ejemplo:
```{r ?print, echo = TRUE}
?print
```
## Operaciones matemáticas y asignaciones
```{r, echo = TRUE}
2+1
```
```{r, echo = TRUE}
3-5
```
```{r, echo = TRUE}
4*4
```
```{r, echo = TRUE}
16/4
```
```{r, echo = TRUE}
7.15 * sqrt(4)
```
## Operaciones matemáticas y asignaciones
Para guardar uno de estos resultados, tenemos que asignarlo a un *objeto* en R. Podemos darle casi cualquier nombre a los *objetos*, pero una restricción importante es que no podemos nombrarlos comenzando por un número. Para guardar usamos el símbolo `=` o `<-`.
```{r, echo = TRUE}
x = 3+4.5
otro_numero <- x * sqrt(4)
otro_numero
```
Para ver el contenido de uno de estos objetos, simplemente tecleamos su nombre en R
<div class="blue2">
La ventaja de guardar así los resultados, es que podemos seguirlos usando en nuevas operaciones:
</div>
```{r, echo=TRUE}
x + 2*otro_numero
```
## Operaciones matemáticas y asignaciones
Una de las ventajas de R es que puede realizar operaciones sobre muchos números a la vez. Para ello, primero generamos un objeto que contenga varios números, usando la función `c()`. Esta instrucción es para combinar.
```{r, echo = TRUE}
edades = c(39,36,10,8,1,1,88)
```
Para ver los números que acabamos de guardar, simplemente tecleamos `edades`
```{r, echo=TRUE}
edades
```
## Operaciones matemáticas y asignaciones
```{r, echo = TRUE}
edades
```
<div class="red2">
- ¿Que operación nos lleva a tener los siguientes resultados?
</div>
```{r, echo=FALSE}
edades + 1
```
```{r, echo=FALSE}
edades * 10
```
```{r, echo=FALSE}
print((edades + 1)*10)
```
## Operaciones matemáticas y asignaciones
<div class="red2">
- ¿Que hace cada una de las siguientes funciones?
</div>
```{r, echo=TRUE, eval=FALSE}
sum(edades)
mean(edades)
max(edades)
min(edades)
range(edades)
sort(edades)
unique(edades)
table(edades)
```
## Operaciones matemáticas y asignaciones
Si no saben el nombre de la función que buscan, pueden tratar de encontrarla usando el comando `??` en la terminal:
```{r, eval=FALSE, echo = TRUE}
??deviation
```
<div class="red2">
- ¿Cuál es la función para calcular la standard deviation?
</div>
## Tipos de objectos y manipulación de vectores
```{r}
```
En R podemos tener valores de texto, los cuales se encierran entre comillas. Del mismo modo que guardamos una serie de números en el objeto edades, podemos guardar una serie de valores de texto en un nuevo objeto:
```{r, echo = TRUE}
nombres = c("Homero","Marge","Bart","Lisa","Maggie","Snowball","Abraham")
```
Muchas veces necesitamos el texto para etiquetar a los valores numéricos (por ejemplo, tener valores numéricos de expresión con etiquetas de texto para los nombres de los genes). Hay una función names() para asignar nombres o etiquetas de texto:
```{r, echo=TRUE}
names(edades) = nombres
```
y ahora si vemos el contenido de `edades`, veremos que ya tiene sus debidas etiquetas:
```{r, echo = TRUE}
edades
```
## Tipos de objectos y manipulación de vectores
```{r, echo = TRUE}
edades
```
<div class="blue">
Nuestro objecto edades tiene la particularidad de que contiene varios valores. A este tipo de objecto se le llama un “vector” en R.
</div>
Para obtener el primer elemento del vector:
```{r, echo = TRUE}
edades[1]
```
<div class="red2">
- ¿Como obtenemos el quinto elemento del vector edades?
</div>
```{r}
edades[5]
```
## Tipos de objectos y manipulación de vectores
Se puede también obtener una serie de elementos del vector a la vez. Para ello, necesitamos indicarle a R todos los `índices` o posiciones de los elementos que queremos usando la expresión `c()`.
```{r, echo = TRUE}
edades[c(1,5)]
```
Por último, podemos usar índices negativos para indicarle a R que queremos quitar temporalmente ciertos elementos de un vector:
```{r, echo = TRUE}
edades[-c(1,5)]
```
<div class="red2">
Ejercicios:
</div>
- ¿Cuál es el promedio de las edades, sin contar el de Maggie?
- Quiten a Snowball del vector, ordéna el vector por edades y guárdenlo como un nuevo objeto.
## Operaciones relacionales
Muchas veces queremos “preguntarle” cosas a los números, como por ejemplo, qué genes tienen un valor de expresión mayor a un umbral. Este tipo de preguntas se contestan mediante operaciones relaciones (mayor que, menor que, igual a, etc). Con nuestro objeto de edades podemos ver esto. Quiénes tienen una edad mayor a 10?
```{r, echo = TRUE}
edades
```
```{r, echo = TRUE}
edades > 10
```
## Operaciones relacionales
Del mismo modo podemos preguntar cuales son menores que, mayores o iguales que, o iguales a, un valor:
```{r, echo =TRUE}
edades < 10
```
```{r, echo = TRUE}
edades >= 10
```
```{r, echo = TRUE}
edades == 1
```
<div class="blue">
OJO! Se usa doble signo de igual, ¿Porque?
</div>
## Operaciones relacionales
En todos estos casos R nos regresa una serie de valores TRUE/FALSE, usualmente llamados valores lógicos. Un vector de valores lógicos puede resultar muy útil, como se verá en los siguientes ejemplos:
```{r, echo = TRUE}
sum(edades > 10)
```
```{r, echo = TRUE}
edades[edades > 10]
```
<div class="red2">
Ejercicios:
</div>
- ¿Qué hacen las últimas instrucciones?
- ¿Cómo obtienen aquellas edades que son mayores al promedio de todas las edades?
## Graficando con R | Visualización de datos
Las visualizaciones de información (*Datavis*) suelen ser menos estéticamente ricas que las infografías y tiene como objetivo:
- Contar una historia
- Transmitir un mensaje
> - Trazados con la ayuda de métodos computarizados (puede tener toques personalizados).
> - Fácil de regenerar con diferentes datos con dimensiones o características similares (reciclado de código).
> - Estéticamente estéril (los datos no están decorados); y relativamente rico en datos.
---
```{r}
knitr::kable(head(cars), caption = 'The data give the speed of cars and the distances taken to stop in the 1920s')
```
---
```{r, echo = TRUE}
plot(cars)
```
---
```{r, echo = TRUE}
barplot(edades)
```
---
```{r, echo = TRUE}
pie(edades)
```
---
```{r, echo = TRUE}
hist(edades)
```
---
Todas estas funciones tienen su página de ayuda, accesible por ejemplo con `?hist`. También existe una gran cantidad de información avanzada sobre los parámetros que podemos cambiar al graficar, en `?par`. Toma tiempo acostumbrarse a todos ellos. Por ahora veamos un ejemplo de complejidad media:
```{r, echo = TRUE}
hist(edades, col="skyblue", main="El Histograma Azul", ylab="Personas")
```
## Guardando figuras
Hay muchas maneras de guardar estas imágenes. Por ejemplo, para guardar la última en un archivo PDF hacemos lo siguiente:
```{r,echo = TRUE, eval=FALSE}
pdf("histograma.pdf")
hist(edades, col="skyblue", main="El Histograma Azul", ylab="Personas")
dev.off()
```
La función `pdf()` crea un archivo *“histograma.pdf”* y todas las instrucciones de graficación que hagamos de ahí en adelante se guardarán en este archivo (y no saldrán en pantalla). Para cerrar el archivo correctamente, tenemos que usar la función `dev.off()`.
# Leyendo archivos y manipulando tablas
---
Por lo general no queremos estar metiendo nuestros datos a mano en R. Si ya tenemos una serie de números en un archivo de texto, los podemos importar a R fácilmente. Para este ejercicio, bajen el archivo num.txt y guárdenlo en el directorio de trabajo de R.
Para esto pueden ser útiles las siguientes funciones, para saber cuál es el directorio de trabajo de nuestra sesión de R y para listar los archivos que se encuentran ahí:
```{r, echo =TRUE}
url <- "http://datos.langebio.cinvestav.mx/~cei/cursos/BP_2018/data/tab.txt"
tab = read.table(url, header = TRUE)
str(tab)
```
<div class="red2">
Ejercicio
</div>
- Averigua para que sirve la funcion `str`
---
```{r, echo = TRUE, fig.align='center'}
boxplot(tab, col=c("red","green","blue"))
```
---
Una tabla consta de dos dimensiones: renglones y columnas. En estos casos, los corchetes cuadrados van a aceptar dos series de índicies, separados por una coma:
```{r, echo = TRUE}
tab[10, 3]
tab[c(1,6,10), c(1,3)]
```
---
Podemos también especificar índices en sólo una de las dimensiones:
```{r, echo = TRUE}
tab[c(1,6,10), ] # Renglones
tab[, c(1,3)] # Columnas
```
<div class="blue">
OJO, no se les olvide poner la primera coma, ¿Porque?
</div>
---
<div class="red2">
Ejercicios (Puntos extras)
</div>
1. Muestren los valores de expresión del 3er gen
2. Cuál es el promedio de expresión en la 2da condición?
3. Cuántos genes tienen un valor de expresión mayor en la primera condición comparada con la tercera?
4. Avanzado: Revisen la ayuda de la función `apply()` para averiguar como calcular el promedio de expresión de cada uno de los genes, con una sola instrucción. Y para cada una de las condiciones?
```{r, echo = FALSE, out.height='10%', out.height='10%', fig.align='center'}
hist(apply(tab, 1, mean), main = '', xlab = 'Expresión', ylab = 'Numero de genes')
```