Vous êtes sur la page 1sur 71

R desde el principio: curso

ceRo de R
Presentación Taller VI Jornadas de Usuarios de R

Comunidad R-Hispano

I http://r-es.org
I @R_Hisp
I Jornadas de Usuarios de R (anual)
I Grupos de interés local
I Grupos de interés temático

2
Finalidad R-es
I Fomentar el avance del conocimiento y uso del lenguaje de
programación R y el desarrollo de la profesión en todas sus
vertientes, especialmente la investigadora, docente y
empresarial.
I Favorecer el estudio y difusión de los conocimientos propios de
la Estadística, análisis de datos y campos afines.
I Elegir a los representantes en los aspectos científicos, técnicos y
administrativos, frente a otras sociedades o Administración
pública, tribunales o comisiones, cuando su presencia sea
requerida.
I Organizar, patrocinar y promover los cursos, congresos o
reuniones propuestos por miembros de R-es y aprobados en
Asamblea General.
I Establecer relaciones con otras sociedades científicas y técnicas
españolas o extranjeras.
3
I Crear y coordinar los grupos de trabajo de R-es.
I

VI Jornadas de Usuarios de R

I Conferencias plenarias
I Comunicaciones orales
I Presentaciones breves
I Talleres

4
Taller R desde el principio

I Descarga e instalación de R y RStudio


I Manejo de estructuras de datos con R
I Interacción con R y RStudio
I Descripción numérica y gráfica de datos
I Generación de informes

Ponente
I Emilio López Cano
I Dr. Ing. Sistemas de Información, Master Ing. de Sistemas de
Decisión, Graduado en Estadística Aplicada, Diplomado en
Estadística
I Investigador en Universidad Rey Juan Carlos
I Profesor asociado en Universidad de Castilla-La Mancha
I Vocal junta directiva Comunidad R-Hispano
I Vocal AENOR AEN/CTN66/SC3 Métodos Estadísticos
I Formador en la Asociación Española para la Calidad (AEC)
I Experto en Control Estadístico de Procesos y en el software R
I Experiencia en empresas de diversos sectores
I Web personal: http://www.proyectum.es

6
emilio.lopez@urjc.es
+34 665 676 225
Taller

Agenda
Jueves 24 de octubre de 12:00 a 14:00

Lugar
CNTG (Centro de Novas Tecnoloxías de Galicia). Sala ***

Requisitos
Ordenador portátil Linux, Windows o Mac con conexión a Internet.

Taller (cont.)
Materiales
La documentación del taller consiste en un manual en formato pdf con
el contenido de las presentaciones que incluye también la explicación
correspondiente, así como el código y las prácticas a realizar. Se
pueden proporcionar ficheros de datos o código adicionales.

Modalidades
I Taller VI Jornadas R
I Curso In company
I Curso on-line
I Seminario

8
Referencias
IcebreakeR.
http://cran.r-project.org/doc/contrib/Robinson-icebreaker.pdf.
Tutorial de R.
Try R.
http://www.openclipart.org.
Para practicar.
E. L. Cano, J. M. Moguerza, and A. Redchuk.
Six Sigma with R. Statistical Engineering for Process Improvement, volume 36 of Use R!
Springer, New York, 2012.
M. Crawley.
The R Book.
Wiley, 2012.
P. Dalgaard.
Introductory Statistics with R.
Statistics and Computing. Springer, 2008.
A. de Vries and J. Meys.
R For Dummies.
–For dummies. Wiley, 2012.

Referencias (cont.)
J. Verzani.
Getting Started with RStudio.
O’Reilly Media, 2011.

10
¿Preguntas?

11

¿Preguntas?

¡ Empecemos !

11
R desde el principio
Taller VI Jornadas de Usuarios de R

Contenido
Introducción a R
Qué es R
Trabajar con R y RStudio
Trabajar con datos en R
Estructuras de datos
Importación y exportación de datos
Análisis exploratorio de datos
Resúmenes de datos
Representación gráfica de datos
Informes con RStudio
Problema y enfoques
Exportación de resultados
Enfoque reproducible
Markdown
2 Más opciones
Software comercial para análisis de datos

Software comercial para análisis de datos

Programas
I SPSS
I Minitab
I StatGraphics
I JMP & SAS
I Stata, Statistica, . . .
I Cualquier paquete estadístico,
incluso hojas de cálculo

3
El proyecto R

I Sistema para computación estadística: software de análisis de


datos y lenguaje de programación
I Ampliamente utilizado en investigación y docencia, grandes
empresas lo usan: Google, Pfizer, . . .
I Ross Ihaka y Robert Gentleman, continuando el trabajo de los
laboratorios Bell a partir del lenguaje S

http://www.r-project.org/

5
http://cran.r-project.org/

Paquetes – Librerías

7
Task Views

¿Cómo se mantiene R?

I R Foundation
I R Core Team
I R Contributors
I Institute for Statistics and Mathematics of WU
(Wirtschaftsuniversität Wien, Vienna University of Economics and
Business).

9
R Foundation

10

Comunidad R Hispano

http://r-es.org/

I Jornadas (2014: VI
jornadas, Santiago de
Compostela)
I Grupos locales
I Grupos temáticos
I Lista de correo
I Twitter: @R_Hisp

11
Componentes de R

12

Componentes de R

La Consola

12
Componentes de R

Editor de código (scripts)

12

Componentes de R

Salida gráfica

12
Componentes de R

El historial

12

Componentes de R

El espacio de trabajo

12
Componentes de R

El directorio de trabajo

12

RStudio

13
Práctica 1

Instalación de R y RStudio
Sigue el guión de la práctica en el Capítulo 2 del taller.

14

La consola de R(Studio)
I CTRL + 2 va a >
I Directorio de trabajo
(wd) en título
I Flecha va al wd
I Ayudas: TAB o CTRL +
ESPACIO
I ESC para cancelar
I CTRL + L para limpiar
En la consola podemos introducir expresiones que son evaluadas una a una.

1 + 1

## [1] 2

x <- log(pi)
15
Funciones

log(pi)

## [1] 1.145

str(log)

## function (x, base = exp(1))

log()

## Error: 0 arguments passed to ’log’ which requires 1 or 2

seq()

## [1] 1

16

Funciones (cont.)
seq

## function (...)
## UseMethod("seq")
## <bytecode: 0x7fcdd2b80170>
## <environment: namespace:base>

17
Práctica 2

Empezando con R
Sigue el guión de la práctica en el Capítulo 2 del taller.

18

El editor de código

I CTRL + 1
I Run
I Source
I Ayudas: TAB o
CTRL + ESPACIO
I Expresiones
I En la misma línea con ;
I Comentarios con #
source("rutina.R")

19
La salida gráfica

Histórico de gráficos, exportación de gráficos


20

El historial

Guardar, recuperar, búsqueda, . . .


21
El espacio de trabajo (workspace)

Limpiar, guardar, recuperar, búsqueda, importar


22

El espacio de trabajo – funciones

## Listado de objetos
# ls()

## Estructura de un objeto
str(mivariable)

## num [1:50] -0.66 2.919 0.677 -0.684 0.186 ...

23
El directorio de trabajo

I Ayudas: TAB o
CTRL + ESPACIO
I Buscar carpeta
I Establecer wd
I Mostrar wd
I Manejar ficheros

24

El directorio de trabajo – funciones


## Obtener el directorio de trabajo
getwd()

## [1] "/home/emilio/eclipse_workspace/2014_06_SPC_AEC/content/6"

## Establecer el directorio de trabajo


setwd("../../scripts")

## Obtener una lista de ficheros en el directorio de trabajo


dir()

## [1] "3" "config.R" "functions.R"


## [4] "generarContenido.R" "pmap.R"

## Correcto:
setwd("C:/micodigo")
setwd("C:\\micodigo")

## Incorrecto:
setwd("C:\micodigo")
25
Librerías y paquetes

I Instalar: Install
I Cargar: marcar casilla
I Buscar
I Ayuda

26

Librerías y paquetes – funciones

## Cargar paquete
library("qcc")

## Instalar paquete
install.packages("qcc")
## Desinstalar paquete
remove.packages("qcc")
## Desconectar paquete
detach("package:qcc", unload = TRUE)

## Consultar rutas a las librerías


.libPaths()

27
Ayuda

I CTRL+3
I Tecla F1
I Búsqueda
I Viñetas
I Web
I Ejemplos y demos

28

Ayuda – funciones

## Buscar nombres de funciones


apropos("qcc.")
## Ayuda de una función
?qcc
help("qcc")
## Búsqueda general
??group
## Viñetas
vignette("HelicopterInstructions", "SixSigma")
## Ejemplos
example(boxplot)
## Demos
demo(graphics)
demo() ## Lista de demos disponibles

29
Práctica 3

Más fácil con RStudio


Sigue el guión de la práctica en el Capítulo 2 del taller.

30

Contenido
Introducción a R
Qué es R
Trabajar con R y RStudio
Trabajar con datos en R
Estructuras de datos
Importación y exportación de datos
Análisis exploratorio de datos
Resúmenes de datos
Representación gráfica de datos
Informes con RStudio
Problema y enfoques
Exportación de resultados
Enfoque reproducible
Markdown
31 Más opciones
Clases y tipos
Estructuras
vector Conjunto de datos del mismo tipo
matrix Vector organizado en filas y columnas
list Lista de objetos
data.frame Conjunto de datos en filas y columnas

32

Clases y tipos
Estructuras
vector Conjunto de datos del mismo tipo
matrix Vector organizado en filas y columnas
list Lista de objetos
data.frame Conjunto de datos en filas y columnas

Clases
numeric Número real
integer Número entero
character Cadena de texto
factor Categorías
logical Verdadero/Falso
32
POSIXct, Date Fecha
Crear vectores
x1 <- c(10, 20, 30); x1

## [1] 10 20 30

x2 <- 1:10; x2

## [1] 1 2 3 4 5 6 7 8 9 10

x3 <- seq(0, 1, 0.1); x3

## [1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0

x4 <- c(rep("IBERICO", 3), rep("SERRANO", 2)); x4

## [1] "IBERICO" "IBERICO" "IBERICO" "SERRANO" "SERRANO"

x5 <- seq_along(x4); x5

##
33 [1] 1 2 3 4 5

Más vectores

## x <- scan()
miFactor <- factor(1:5, labels = letters[1:5]); miFactor

## [1] a b c d e
## Levels: a b c d e

factorNiveles <- gl(5, 3, labels = letters[1:5]); factorNiveles

## [1] a a a b b b c c c d d d e e e
## Levels: a b c d e

vectorLogico <- 1:10 > 5; vectorLogico

## [1] FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE

34
Vectores: longitud y nombres

names(x1) <- c("semana1", "semana2", "semana3")


x1

## semana1 semana2 semana3


## 10 20 30

length(x1)

## [1] 3

1:length(x1)

## [1] 1 2 3

35

Selección en vectores

x1[1]

## semana1
## 10

x1["semana1"]

## semana1
## 10

x1[c(1,3)]

## semana1 semana3
## 10 30

x1[-c(1)]

## semana2 semana3
## 20 30
36
Selección lógica

x1 >= 15

## semana1 semana2 semana3


## FALSE TRUE TRUE

x1[x1 >= 15] # Equivale a x1[c(2, 3)

## semana2 semana3
## 20 30

x4[x4 != "IBERICO"]

## [1] "SERRANO" "SERRANO"

x4[x4 == "IBERICO"]

## [1] "IBERICO" "IBERICO" "IBERICO"


37

Ordenación

x6

## [1] 1 6 6 6 8 6 0 2 6 5

sort(x6)

## [1] 0 1 2 5 6 6 6 6 6 8

rev(sort(x6))

## [1] 8 6 6 6 6 6 5 2 1 0

order(x6)

## [1] 7 1 8 10 2 3 4 6 9 5

38
Operaciones con vectores

x1

## semana1 semana2 semana3


## 10 20 30

x1 + 2

## semana1 semana2 semana3


## 12 22 32

39

Operaciones con vectores

x1 x2

## semana1 semana2 semana3 ## [1] 1 2 3 4 5 6 7 8 9 10


## 10 20 30
x5
x1 + 2
## [1] 1 2 3 4 5
## semana1 semana2 semana3
## 12 22 32 x2 + x5

## [1] 2 4 6 8 10 7 9 11 13 15

39
Operaciones con vectores

x1 + x3

## Warning: longer object length is not a multiple of shorter object


length

## [1] 10.0 20.1 30.2 10.3 20.4 30.5 10.6 20.7 30.8 10.9 21.0

mean(x1)

## [1] 20

sqrt(x1)

## semana1 semana2 semana3


## 3.162 4.472 5.477

40

Creación y acceso a matrices


miMatriz <- matrix(c(10, 20, 30, 40, 12, 26, 34, 39),
nrow = 4, ncol = 2); miMatriz

## [,1] [,2]
## [1,] 10 12
## [2,] 20 26
## [3,] 30 34
## [4,] 40 39

miMatriz[1, ]

## [1] 10 12

miMatriz[, 1]

## [1] 10 20 30 40

miMatriz[3, 2]

41 [1] 34
##
Más matrices

colnames(miMatriz) <- c("variable1", "variable2")


rownames(miMatriz) <- c("caso1", "caso2", "caso3", "caso4")
miMatriz

## variable1 variable2
## caso1 10 12
## caso2 20 26
## caso3 30 34
## caso4 40 39

rowSums(miMatriz)

## caso1 caso2 caso3 caso4


## 22 46 64 79

colMeans(miMatriz)

## variable1 variable2
## 25.00 27.75
42

Creación de listas

miLista <- list(matriz = miMatriz, vector1 = x1, x2); miLista

## $matriz
## variable1 variable2
## caso1 10 12
## caso2 20 26
## caso3 30 34
## caso4 40 39
##
## $vector1
## semana1 semana2 semana3
## 10 20 30
##
## [[3]]
## [1] 1 2 3 4 5 6 7 8 9 10

43
Acceso a listas

miLista$vector1 miLista[3]

## semana1 semana2 semana3 ## [[1]]


## 10 20 30 ## [1] 1 2 3 4 5 6 7 8 9 10

miLista[[1]] miLista$matriz[, 2]

## variable1 variable2 ## caso1 caso2 caso3 caso4


## caso1 10 12 ## 12 26 34 39
## caso2 20 26
## caso3 30 34
## caso4 40 39

miLista["vector1"]

## $vector1
## semana1 semana2 semana3
## 10 20 30
44

Crear conjuntos de datos (data.frame)

misDatos <- data.frame(tipo = c("A", "A", "B", "C", "C", "C"),


peso = c(10, 20, 15, 13, 23, 8)); misDatos

## tipo peso
## 1 A 10
## 2 A 20
## 3 B 15
## 4 C 13
## 5 C 23
## 6 C 8

str(misDatos)

## ’data.frame’: 6 obs. of 2 variables:


## $ tipo: Factor w/ 3 levels "A","B","C": 1 1 2 3 3 3
## $ peso: num 10 20 15 13 23 8

nrow(misDatos)

##
45 [1] 6
Acceso a datos

misDatos$peso

## [1] 10 20 15 13 23 8

misDatos[3, ]

## tipo peso
## 3 B 15

misDatos$peso < 15

## [1] TRUE FALSE FALSE TRUE FALSE TRUE

misDatos[misDatos$peso < 15, ]

## tipo peso
## 1 A 10
## 4 C 13
## 6 C 8
46

Ordenación, subconjuntos y subtotales


subset(misDatos, peso < 15)

## tipo peso
## 1 A 10
## 4 C 13
## 6 C 8

aggregate(peso ~ tipo, data = misDatos, mean)

## tipo peso
## 1 A 15.00
## 2 B 15.00
## 3 C 14.67

misDatos[order(misDatos$peso), ]

## tipo peso
## 6 C 8
## 1 A 10
##
47
4 C 13
## 3 B 15
## 2 A 20
## 5 C 23
Modificar conjuntos de datos

misDatos$prueba <- NA; misDatos

## tipo peso prueba


## 1 A 10 NA
## 2 A 20 NA
## 3 B 15 NA
## 4 C 13 NA
## 5 C 23 NA
## 6 C 8 NA

misDatos$prueba <- NULL; misDatos

## tipo peso
## 1 A 10
## 2 A 20
## 3 B 15
## 4 C 13
## 5 C 23
## 6 C 8
48

Columnas calculadas

misDatos$mitad <- misDatos$peso/sum(misDatos$peso)


misDatos$suma <- misDatos$peso + misDatos$mitad
misDatos

## tipo peso mitad suma


## 1 A 10 0.11236 10.11
## 2 A 20 0.22472 20.22
## 3 B 15 0.16854 15.17
## 4 C 13 0.14607 13.15
## 5 C 23 0.25843 23.26
## 6 C 8 0.08989 8.09

49
Nombres en objetos data.frame

colnames(misDatos)

## [1] "tipo" "peso" "mitad" "suma"

colnames(misDatos)[4] <- "miSuma"


rownames(misDatos)

## [1] "1" "2" "3" "4" "5" "6"

rownames(misDatos) <- paste("caso", rownames(misDatos), sep = "_")


misDatos

## tipo peso mitad miSuma


## caso_1 A 10 0.11236 10.11
## caso_2 A 20 0.22472 20.22
## caso_3 B 15 0.16854 15.17
## caso_4 C 13 0.14607 13.15
## caso_5 C 23 0.25843 23.26
## caso_6 C 8 0.08989 8.09
50

Valores faltantes

x <- c(1, 3, NA, 5, 6)


mean(x)

## [1] NA

mean(x, na.rm = TRUE)

## [1] 3.75

x[is.na(x)] <- 0; x

## [1] 1 3 0 5 6

mean(x)

## [1] 3

51
Otros valores especiales

NULL
1/0

## [1] Inf

sqrt(-1)

## Warning: NaNs produced

## [1] NaN

1i

## [1] 0+1i

pi

## [1] 3.142
52

Otros valores especiales


letters

## [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q"
## [18] "r" "s" "t" "u" "v" "w" "x" "y" "z"

LETTERS

## [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q"
## [18] "R" "S" "T" "U" "V" "W" "X" "Y" "Z"

month.name

## [1] "January" "February" "March" "April" "May"


## [6] "June" "July" "August" "September" "October"
## [11] "November" "December"

month.abb

## [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov"
##
53 [12] "Dec"
Conversión entre tipos de datos
x <- c("1", "2", "tres")
str(x)

## chr [1:3] "1" "2" "tres"

y <- as.numeric(x)

## Warning: NAs introduced by coercion

str(y)

## num [1:3] 1 2 NA

class(y)

## [1] "numeric"

is.numeric(y)

54
## [1] TRUE

Trabajar con fechas

str(vectorfechas)

## chr [1:100] "30/09/2011" "28/09/2011" "28/09/2011" ...

table(vectorfechas)

## vectorfechas
## 01/11/2011 02/11/2011 03/10/2011 03/11/2011 04/10/2011 04/11/2011
## 4 2 2 2 8 1
## 05/10/2011 05/11/2011 06/11/2011 12/11/2011 13/11/2011 16/10/2011
## 1 1 2 1 1 2
## 17/10/2011 18/10/2011 19/10/2011 22/10/2011 23/10/2011 24/10/2011
## 5 3 2 9 20 9
## 25/10/2011 28/09/2011 28/10/2011 29/09/2011 30/09/2011 30/10/2011
## 6 4 1 5 4 3
## 31/10/2011
## 2

vectorfechas <- as.Date(vectorfechas, format("%d/%m/%Y"))


55
Trabajar con fechas

vectornumeromes <- format(vectorfechas, "%m")


table(vectornumeromes)

## vectornumeromes
## 09 10 11
## 13 73 14

vectormes <- format(vectorfechas, "%Y-%m")


table(vectormes)

## vectormes
## 2011-09 2011-10 2011-11
## 13 73 14

vectordiasemana <- format(vectorfechas,"%A")


table(vectordiasemana)

## vectordiasemana
## domingo jueves lunes martes miércoles sábado viernes
56
## 28 7 18 21 9 11 6

Trabajar con fechas – semanas

library(ISOweek)
vectorsemana <- ISOweek(vectorfechas)
table(vectorsemana)

## vectorsemana
## 2011-W39 2011-W40 2011-W41 2011-W42 2011-W43 2011-W44 2011-W45
## 13 11 2 39 19 14 2

57
Importación con RStudio

58

Visualización de conjunto de datos

59
Importación y exportación – funciones

ejDatos <- read.csv("practica/ejdatos.csv", sep=";", dec=",")


View(datospeso)

ejDatos <- read.csv2("practica/ejdatos.csv")

summary(ejDatos$merma)

## Min. 1st Qu. Median Mean 3rd Qu. Max. NA’s


## 0.249 0.448 0.497 0.493 0.534 0.770 1

60

Importación y exportación – funciones

ejDatos <- read.csv("practica/ejdatos.csv", sep=";", dec=",")


View(datospeso)

ejDatos <- read.csv2("practica/ejdatos.csv")

summary(ejDatos$merma)

## Min. 1st Qu. Median Mean 3rd Qu. Max. NA’s


## 0.249 0.448 0.497 0.493 0.534 0.770 1

ejDatos[is.na(ejDatos$merma), ]

## maquina merma manchas defecto defecto2 temp


## 4 maquina1 NA 8 No 0 7.24
60
Limpieza de datos y exportación

## Guardar fichero original para mantener historia


write.csv2(ejDatos, "practica/ejdatos_ori.csv", row.names = FALSE)
## corregir el dato faltante
## Incluir comentarios sobre lo que se ha hecho
ejDatos$merma[4] <- 0.1879618
## Guardar el fichero limpio con el que trabajaremos
write.csv2(ejDatos, "practica/ejdatos_limpio.csv", row.names = FALSE)

summary(ejDatos$merma)

## Min. 1st Qu. Median Mean 3rd Qu. Max.


## 0.188 0.448 0.496 0.490 0.534 0.770

61

Otras formas de importar datos

I Paquete foreign: Minitab, S, SAS, SPSS, Stata, o Systat, entre


otros;
I Paquete RODBC: Open Database Connectivity (ODBC) sources,
incluyendo Microsoft SQL Server, Access, MySQL, PostgreSQL,
Oracle e IBM DB2;
I Los paquetes RMySQL, RSQLite, y RPostgreSQL manejan sus
correspondientes sistemas de bases de datos;
I ROracle RJDBC para bases de datos Oracle y Java;
I Paquete XML para ficheros XML;
I El paquete XLConnect puede leer y escribir ficheros Microsoft
I Con las funciones download.file y url podemos obtener
ficheros desde la red
62
Práctica 4

Trabajar con datos


Sigue el guión de la práctica en el Capítulo 2 del taller.

63

Contenido
Introducción a R
Qué es R
Trabajar con R y RStudio
Trabajar con datos en R
Estructuras de datos
Importación y exportación de datos
Análisis exploratorio de datos
Resúmenes de datos
Representación gráfica de datos
Informes con RStudio
Problema y enfoques
Exportación de resultados
Enfoque reproducible
Markdown
64 Más opciones
Explorar variables

ejDatos <- read.csv2("practica/ejdatos_limpio.csv")


str(ejDatos)

## ’data.frame’: 100 obs. of 6 variables:


## $ maquina : Factor w/ 2 levels "maquina1","maquina2": 1 1 1 1 1 1 1 1 1 1 ...
## $ merma : num 0.59 0.77 0.442 0.188 0.591 ...
## $ manchas : int 4 8 8 8 10 8 2 5 8 7 ...
## $ defecto : Factor w/ 2 levels "No","Sí": 2 2 1 1 2 1 1 1 1 2 ...
## $ defecto2: int 1 1 0 0 1 0 0 0 0 1 ...
## $ temp : num 10.63 14.81 9.29 7.24 11.15 ...

65

Explorar variables

head(ejDatos)

## maquina merma manchas defecto defecto2 temp


## 1 maquina1 0.5898 4 Sí 1 10.630
## 2 maquina1 0.7700 8 Sí 1 14.814
## 3 maquina1 0.4424 8 No 0 9.285
## 4 maquina1 0.1880 8 No 0 7.240
## 5 maquina1 0.5905 10 Sí 1 11.150
## 6 maquina1 0.3135 8 No 0 9.864

tail(ejDatos)

## maquina merma manchas defecto defecto2 temp


## 95 maquina2 0.5227 6 Sí 1 11.25
## 96 maquina2 0.4681 7 No 0 10.43
## 97 maquina2 0.5276 8 Sí 1 10.55
## 98 maquina2 0.4560 7 No 0 12.53
## 99 maquina2 0.4713 5 No 0 11.41
## 100 maquina2 0.4606 9 No 0 12.35
66
Tablas de frecuencias

table(ejDatos$defecto)

##
## No Sí
## 53 47

table(cut(ejDatos$merma, breaks = 5))

##
## (0.187,0.304] (0.304,0.421] (0.421,0.537] (0.537,0.654] (0.654,0.771]
## 3 14 60 19 4

67

Tablas de frecuencias

datoshist <- hist(ejDatos$merma, plot = FALSE)


data.frame(marcaclase = datoshist$mids, frecuencia = datoshist$counts)

## marcaclase frecuencia
## 1 0.15 1
## 2 0.25 2
## 3 0.35 9
## 4 0.45 41
## 5 0.55 40
## 6 0.65 5
## 7 0.75 2

68
Medidas de posición central

mean(ejDatos$merma)

## [1] 0.49

mean(ejDatos$merma)

## [1] 0.49

median(ejDatos$merma)

## [1] 0.4958

#moda
datoshist$mids[which(datoshist$counts == max(datoshist$counts))]

## [1] 0.45

69

Medidas de posición central (cont.)

Recordemos que si hay valores faltantes no podemos hacer cálculos a menos que indiquemos
que no se tengan en cuenta esas observaciones.

ejDatos_ori <- read.csv2("practica/ejdatos_ori.csv")


mean(ejDatos_ori$merma)

## [1] NA

mean(ejDatos_ori$merma, na.rm = TRUE)

## [1] 0.4931

70
Medidas de posición

quantile(ejDatos$merma, 0.05)

## 5%
## 0.3371

summary(ejDatos$merma)

## Min. 1st Qu. Median Mean 3rd Qu. Max.


## 0.188 0.448 0.496 0.490 0.534 0.770

summary(ejDatos$manchas)

## Min. 1st Qu. Median Mean 3rd Qu. Max.


## 2.00 5.00 7.00 6.82 8.00 14.00

71

Estratificación

tapply(ejDatos$merma, ejDatos$maquina, summary)

## $maquina1
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.188 0.405 0.488 0.483 0.583 0.770
##
## $maquina2
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.418 0.464 0.497 0.497 0.521 0.589

72
Medidas de dispersión
range(ejDatos$merma)

## [1] 0.188 0.770

var(ejDatos$merma)

## [1] 0.008367

sd(ejDatos$merma)

## [1] 0.09147

IQR(ejDatos$merma)

## [1] 0.08584

mad(ejDatos$merma)

##
73 [1] 0.06208

Gráficos – Generalidades

Opciones genéricas
I tipo: type – l(lines), p(points), b(both)
I títulos y etiquetas: main, sub, xlab, ylab

(Algunos) Parámetros gráficos


I colores: col.*, bg, fg
I líneas: lty, lwd
I puntos: pch
I márgenes: mai, mar, oma
I fuentes: family, font.*
I Magnificación: cex.*
74
Ejemplos opciones
par(bg="white")
plot(1:10, main = "Título", sub = "Subtítulo", type = "b",
xlab = "Índice", ylab = "Variable",
col = 2, cex = c(rep(1, 9), 2), pch = 16,
fg = "blue")

Título


10


8


6
Variable


4


2

2 4 6 8 10

Índice
Subtítulo

75

Histograma
hist(ejDatos$merma)

Histogram of ejDatos$merma
40
30
Frequency

20
10
0

0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8

ejDatos$merma

76
Gráfico de caja
datosbp <- boxplot(ejDatos$merma)


0.7

0.6
0.5
0.4



0.3


0.2

77

Identificación de atípicos

datosbp$out

## [1] 0.7700 0.1880 0.3135 0.2486 0.2889 0.3083 0.6855 0.7457

ejDatos[which(ejDatos$merma %in% datosbp$out), ]

## maquina merma manchas defecto defecto2 temp


## 2 maquina1 0.7700 8 Sí 1 14.814
## 4 maquina1 0.1880 8 No 0 7.240
## 6 maquina1 0.3135 8 No 0 9.864
## 9 maquina1 0.2486 8 No 0 7.482
## 21 maquina1 0.2889 6 No 0 7.498
## 24 maquina1 0.3083 3 No 0 8.176
## 27 maquina1 0.6855 7 Sí 1 12.644
## 36 maquina1 0.7457 9 Sí 1 14.605

78
Gráfico de barras

barplot(table(ejDatos$manchas))

25
20
15
10
5
0

2 3 4 5 6 7 8 9 10 11 14

79

Gráfico de barras apilado


barplot(table(ejDatos$defecto, ejDatos$manchas),
col = gray(1:3 / 3),
xlab = "Nº de lechones")
legend("topright", legend = levels(ejDatos$defecto), fill = gray(1:3 / 3))
25

No

20
15
10
5
0

2 3 4 5 6 7 8 9 10 11 14

Nº de lechones

80
Gráfico de dispersión
plot(merma ~ temp, data = ejDatos)
abline(lm(ejDatos$merma ~ ejDatos$temp))



0.7




0.6

● ●
● ●● ●● ●

● ●
● ● ●


● ● ●
●●● ●
● ● ●
● ● ●● ● ● ● ●
0.5

● ●
● ● ●
merma

● ●
● ● ●
● ●
● ● ● ●
● ● ● ●
● ● ● ●
● ● ● ● ● ● ● ● ●
● ● ● ● ● ● ●
● ● ●
● ● ●
0.4

● ●



● ●

● ●
0.3


0.2

8 10 12 14

temp

81

Estratificación en gráficos
boxplot(merma ~ maquina, data = ejDatos)
0.7
0.6
0.5
0.4
0.3
0.2

maquina1 maquina2

82
Matriz de histogramas
par(mfrow = c(1,2))
tapply(ejDatos$merma, ejDatos$maquina, hist)

Histogram of X[[1L]] Histogram of X[[2L]]

10
15

8
Frequency

Frequency
10

6
4
5

2
0

0
0.1 0.3 0.5 0.7 0.40 0.45 0.50 0.55 0.60

X[[1L]] X[[2L]]

83

Matriz de histogramas (cont.)

## $maquina1
## $breaks
## [1] 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8
##
## $counts
## [1] 1 2 9 14 17 5 2
##
## $density
## [1] 0.2 0.4 1.8 2.8 3.4 1.0 0.4
##
## $mids
## [1] 0.15 0.25 0.35 0.45 0.55 0.65 0.75
##
## $xname
## [1] "X[[1L]]"
##
## $equidist
## [1] TRUE
##
## attr(,"class")
## [1] "histogram"
84
##
## $maquina2
## $breaks
## [1] 0.40 0.42 0.44 0.46 0.48 0.50 0.52 0.54 0.56 0.58 0.60
##
## $counts
## [1] 1 0 8 10 8 10 7 2 3 1
##
## $density
## [1] 1 0 8 10 8 10 7 2 3 1
##
## $mids
## [1] 0.41 0.43 0.45 0.47 0.49 0.51 0.53 0.55 0.57 0.59
##
## $xname
Añadiendo opciones a los gráficos

par(bg = rgb(193/255, 221/255, 223/255))

hist(ejDatos$merma,
breaks = 10,
main = "Histograma de la merma",
xlab = "Peso (kg.)",
ylab = "Densidad",
freq = FALSE,
col = rgb(128/255,182/255,182/255),
border = "white",
bg = "red",
ylim = c(0, 6),
col.lab = rgb(56/255, 56/255, 48/255))
lines(density(ejDatos$merma), lwd = 3,
col = rgb(56/255,56/255,48/255))

85

Añadiendo opciones a los gráficos (cont.)

Histograma de la merma
6
5
4
Densidad

3
2
1
0

0.2 0.3 0.4 0.5 0.6 0.7 0.8

Peso (kg.)

86
Práctica 5

Descripción de datos con R


Sigue el guión de la práctica en el Capítulo 2 del taller.

87

Contenido

Introducción a R
Qué es R
Trabajar con R y RStudio

Trabajar con datos en R


Estructuras de datos
Importación y exportación de datos

Análisis exploratorio de datos


Resúmenes de datos
Representación gráfica de datos

Informes con RStudio


Problema y enfoques
Exportación de resultados

Enfoque reproducible
Markdown
Más opciones

88
El Problema

89

Enfoque Copy-paste

I Inconsistencias
I Errores
I Desactualización
I No reproducibilidad
I Cualquier cambio requiere mucho esfuerzo

90
Investigación reproducible

Reproducible Research
The goal of reproducible research is to tie specific instructions to data analysis and experimental
data so that reports can be recreated, better understood and verified

Literate Programming
Literate programming is a methodology that combines a programming language with a
documentation language

91

Enfoque Reproducible

92
Volcar resultados a fichero

sink("miSalida.txt")
x <- rnorm(100)
summary(x)

## Min. 1st Qu. Median Mean 3rd Qu. Max.


## -2.860 -0.415 0.174 0.125 0.698 3.040

## Los comentarios no se guardan en el fichero


shapiro.test(x)

##
## Shapiro-Wilk normality test
##
## data: x
## W = 0.9902, p-value = 0.6788

sink()

93

Exportación de gráficos

94
Exportación de gráficos - con código

png("img/miGrafico.png", 800, 600)

plot(rnorm(100))

dev.off()

95

Contenido

Introducción a R
Qué es R
Trabajar con R y RStudio

Trabajar con datos en R


Estructuras de datos
Importación y exportación de datos

Análisis exploratorio de datos


Resúmenes de datos
Representación gráfica de datos

Informes con RStudio


Problema y enfoques
Exportación de resultados

Enfoque reproducible
Markdown
Más opciones

96
Markdown en RStudio

97

Formatos de salida

98
Formatos de salida (cont.)

99

Ejemplo fichero R Markdown


---
title: "Ejemplo para el taller R desde el principio"
author: "Emilio L. Cano"
date: "31/01/2015"
output: word_document
---

Este es mi primer ejemplo de informe generado con RStudio. Voy a crear un


conjunto de datos:

‘‘‘{r}
pdensity <- c(10.6817, 10.6040, 10.5709, 10.7858,
10.7668, 10.8101, 10.6905, 10.6079,
10.5724, 10.7736, 11.0921, 11.1023,
11.0934, 10.8530, 10.6774, 10.6712,
10.6935, 10.5669, 10.8002, 10.7607,
10.5470, 10.5555, 10.5705, 10.7723)
‘‘‘

Y este es su histograma:

‘‘‘{r, echo=FALSE}
hist(data = pdensity)
‘‘‘

¡Funcionó! Usar R para análisis de datos es genial.

100
Informe generado (Word)

Ejemplo para el taller R desde el principio


Emilio L. Cano
31/01/2015
Este es mi primer ejemplo de informe generado con RStudio. Voy a
crear un conjunto de datos:
pdensity <- c(10.6817, 10.6040, 10.5709, 10.7858,
10.7668, 10.8101, 10.6905, 10.6079,
10.5724, 10.7736, 11.0921, 11.1023,
11.0934, 10.8530, 10.6774, 10.6712,
10.6935, 10.5669, 10.8002, 10.7607,
10.5470, 10.5555, 10.5705, 10.7723)

Y este es su histograma:

101

Presentaciones

102
Control del código
echo Mostrar código en informe
error Mostrar mensajes de error
warning Mostrar mensajes de advertencia
message Mostrar mensajes
eval Evaluar el chunk
fig.align Alineación de los gráficos
fig.width Ancho del gráfico generado (en pulgadas, por defecto 7)
fig.height Alto del gráfico generado (en pulgadas, por defecto 7)
out.width Ancho del espacio que ocupa el gráfico en el informe
out.height Alto del espacio que ocupa el gráfico en el informe
fig.keep Mantener los gráficos en el informe
include Mostrar salida de texto al ejecutar el código
results
103 Forma de mostrar los resultados

Más formatos

I xtable: Este paquete genera tablas y se puede usar en combinación con markdown
I Sweave: para generar documentación en pdf mediante el lenguaje LATEX.
I gtable: vuelca el output como gráficos
I Rhtml: mayor control sobre el código html
I shiny: Aplicaciones web

104
Práctica 6

Informes con RStudio


Sigue el guión de la práctica en el Capítulo 2 del taller.

105

Preguntas

Gracias
emilio.lopez@urjc.es

106
Prácticas
R desde el principio

Contenido

Práctica 1

Práctica 2
Introducción
La consola de R
Componentes de R

Práctica 3

Práctica 4

Práctica 5

Práctica 6
2
P1. Instalación de R y RStudio

Instalación de R y RStudio
I Descarga e instalación de R
I Descarga e instalación de RStudio
I Descarga e instalación de MikTeX (opcional)

Contenido

Práctica 1

Práctica 2
Introducción
La consola de R
Componentes de R

Práctica 3

Práctica 4

Práctica 5

Práctica 6
4
P2. Empezando con R

I Sigue el guión de la práctica


I Practica tú mismo las expresiones en la consola de R
I Experimenta con tus propias pruebas, cambia cosas

En esta práctica . . .
Practicaremos expresiones de de R en la consola de R.

Contenido

Práctica 1

Práctica 2
Introducción
La consola de R
Componentes de R

Práctica 3

Práctica 4

Práctica 5

Práctica 6
6
P3. Más fácil con RStudio

I Sigue el guión de la práctica


I Practica tú mismo las expresiones en la consola de R
I Experimenta con tus propias pruebas, cambia cosas

En esta práctica . . .
Practicaremos las expresiones de la práctica 1 en RStudio.

Contenido

Práctica 1

Práctica 2
Introducción
La consola de R
Componentes de R

Práctica 3

Práctica 4

Práctica 5

Práctica 6
8
P4. Trabajar con datos

I Sigue el guión de la práctica


I Practica tú mismo las expresiones en la consola de R
I Experimenta con tus propias pruebas, cambia cosas

En esta práctica . . .
Practicaremos la importación, creación, acceso y modificación de
datos.

Contenido

Práctica 1

Práctica 2
Introducción
La consola de R
Componentes de R

Práctica 3

Práctica 4

Práctica 5

Práctica 6
10
P5. Descripción de datos con R

I Sigue el guión de la práctica


I Practica tú mismo las expresiones en la consola de R
I Experimenta con tus propias pruebas, cambia cosas
I Asegúrate de haber realizado las prácticas anteriores

En esta práctica. . .
Realizaremos análisis exploratorio de datos básicos

11

Contenido

Práctica 1

Práctica 2
Introducción
La consola de R
Componentes de R

Práctica 3

Práctica 4

Práctica 5

Práctica 6
12
P6. Informes con R

I Sigue el guión de la práctica


I Practica tú mismo las expresiones en la consola de R
I Experimenta con tus propias pruebas, cambia cosas

En esta práctica. . .
Realizaremos informes reproducibles en diversos formatos.

13

Vous aimerez peut-être aussi