Chapter 1 Introducción a R

R es un software de libre distribución

1.1 ¿Qué es R?

Comparación perfecta

Ciencia de datos ### Algo de historia de R

  • R es el hermano de S
  • S es un lenguaje de programación estadística desarrollado por John Chambers de Bell Labs
  • El objetivo de S era “convertir las ideas en el software, de forma rápida y fielmente”
  • S fue creado en 1976 y se reinvento 1988 introduciendo muchos cambios
  • En 1993, StatSci (fabricante de S-Plus) adquieren licencia exclusiva a S
  • S-Plus integra S con una interfaz gráfica de usuario agradable y pleno apoyo al cliente
  • R Fue creado por Ross Ihaka y Robert Gentleman de la University of Auckland, New Zealand

1.1.1 Acerca de R

  • El proyecto R inicio en 1991
  • R apareció por primera vez en 1996 como un software de código abierto!
  • Altamente personalizable a través de paquetes
  • La comunidad R, se basa en el poder de la colaboración con miles de paquetes de libre disposición
  • Existen muchas interfaces gráficas de usuario de R libres y comerciales (por ejemplo R Studio y Revolución)

1.1.2 ¿Qué es R?

R es un conjunto integrado de servicios de software para la manipulación de datos, cálculo y representación gráfica. Incluye:

  • instalación sencilla y un fácil almacenamiento de datos
  • un conjunto de operadores para los cálculos en arrays, particularmente en las matrices
  • facilidad en los gráficos y el análisis de datos y
  • bien desarrollado, lenguaje de programación sencillo y eficaz que incluye condicionales, bucles, funciones recursivas definidos por el usuario.
  • Altamente intuitivo

A pesar de ser libre y de código abierto, R es ampliamente utilizado por los analistas de datos dentro de las empresas y el mundo académico. (R en the NY Times)

Ver NY Times artículo.

1.1.3 Algunas referencias

Mas avanzado:

  • Hadley Wickham’s book

1.1.4 RStudio

RStudio es un ambiente libre y abierto de desarrollo de código integrado.

  • multiplataforma
  • El resaltado de sintaxis, completado de código, y la sangría inteligente
  • gestionar fácilmente múltiples directorios de trabajo
  • Flexible para el manejo de gráficos
  • Integrado con Knitr
  • Integrado con Git

1.1.5 Instalación

Nota: Para actualizar ambos paquetes: descargue la nueva versión e instale (las librerías no sufren cambios).

1.2 R Markdown

“R Markdown” se introdujo por primera vez en el paquete knitr a principios de 2012. La idea era incrustar fragmentos de código (de R u otros) en los documentos de Markdown. De hecho, knitr soportó varios lenguajes de autoría desde el principio además de Markdown, incluidos LaTeX, HTML, AsciiDoc, reStructuredText y Textile.

Markdown se ha convertido en el formato de documento más popular. La simplicidad de Markdown se destaca claramente entre estos formatos de documentos.

1.2.1 Instalación

install.packages('rmarkdown')

# Si se prefiere la versión en desarrollo
if (!requireNamespace("devtools"))
  install.packages('devtools')
devtools::install_github('rstudio/rmarkdown')

Si el objetivo es usar Markdown para generar documentos PDF se necesita instalar Latex.

Existen cheatsheets utiles para usar markdown, como: cheatsheets

1.2.2 YAML Header

Al inicio del archivo y entre las lineas —

---
title: Mi documento
author: Juan Perez
date: Marzo 22, 20220
output: html_document
---

1.2.3 Sintaxis básica

Énfasis sobre el texto,

*italic*   **bold**
_italic_   __bold__

Secciones,

# Header 1
## Header 2
### Header 3

Items (viñetas) no ordenadas y ordenadas,

* Item 1
* Item 2
    + Item 2a
    + Item 2b

1. Item 1
2. Item 2
3. Item 3
    + Item 3a
    + Item 3b

Palabras clave con referencias web,

[linked phrase](http://example.com)

Imágenes simples o con titulo,

![](http://example.com/logo.png)

![optional caption text](figures/img.png)

Blockquotes

It’s always better to give than to receive.

A friend once said:

> It's always better to give than to receive.

Ecuaciones en linea y en párrafo,

En linea \(\sum_i{x^2}\) o en párrafo:

\[\sum_i{x^2}\]

$equation$

$$ equation $$

1.2.4 Tipos de documentos

  • beamer_presentation
  • github_document
  • html_document
  • ioslides_presentation
  • latex_document
  • md_document
  • odt_document
  • pdf_document
  • powerpoint_presentation
  • rtf_document
  • slidy_presentation
  • word_document

1.2.5 Chunks

Los chunks son entornos que permiten incluir código en R dentro de las distintos tipos de documentos que genera Rmarkdown, los chunks inician con ```{r} y termina con ```, también es posible introducir chunks en linea con el texto, esto se logra introduciendo

Texto ... `r <code>` ... texto

La parte {r} del chunk sirve para introducir las distintas opciones que va a contener ese chunk, las opciones disponibles son:

  • echo (default = TRUE), muestra el código del chunk en la salida del documento
  • eval (default = TRUE), corre el código del chunk
  • message (default = TRUE), muestra los mensajes que genera el chunk

Existen funciones útiles para mejorar las salidas de tablas, tales como xtable y kable de la librería knitr.

1.3 R básico

R es una calculadora demasiado grande

123+456
## [1] 579
4657*89
## [1] 414473
12/34
## [1] 0.3529412
2443-3434
## [1] -991

1.3.1 Lógica de los comandos en R

Como entiende R los comandos

comando(argumentos, argumentos, …)

Advertencia:

  • No es posible resumir un comando
  • R distingue mayúscula de minúscula
  • Siempre cerrar los paréntesis
  • R entiende el orden de los argumentos o su nombre clave

Comando para pedir ayuda

?mean # comando para pedir ayuda
?lm

Escribir varios comandos en una sola línea.

123*56 ; 435+3544 ; 454+56
## [1] 6888
## [1] 3979
## [1] 510
#este es un comentario
1+4;78+89
## [1] 5
## [1] 167

1.3.2 Palabras reservadas y simbolos especiales de R

  • NA: datos perdidos
  • NULL: datos nulos
  • Inf -Inf: Infinito
  • #: comentario en el código
  • TRUE (T), FALSE (F): valores lógicos
  • NaN: not a number
  • ?: Ayuda
  • x, ,x + y, x - y ,x * y ,x / y ,x ^ y (**),x %% y (mod) ,x %/% y (div int)
  • ! x, .x & y ,x && y ,x | y ,x || y
  • , <, >=, <=

1.3.3 Símbolos Lógicos

!(5>6) # negación
## [1] TRUE
2^2 == 4 # igualdad
## [1] TRUE
2^2 != 4 # desigualdad
## [1] FALSE
(5>6) & (2^2==4) # y lógico
## [1] FALSE
(5>6) | (2^2==4) # ó lógico
## [1] TRUE
(5>6) && (2^2==4) # y lógico
## [1] FALSE
(5>6) || (2^2==4) # ó lógico
## [1] TRUE
5 >= 5
## [1] TRUE
5 <= 5
## [1] TRUE

1.3.4 Asignación o creación de objetos (estructuras, variables)

x<-5
y=10
15->z
x1<<-20
x2<-"Hola"
x3<-'hola'
z*y^x
## [1] 1500000
x1+z
## [1] 35
x4<-(4>5)
x5<-(y>x^2)

Trate de usar nombres significativos! Miren esto:

Hadley Wickham’s book Naming

1.3.5 Clases en R

y1<-50
y2<-"hola"
y3<-(56>60)
y4<-NA  
y5<-NULL

class(y1)
## [1] "numeric"
class(y2)
## [1] "character"
class(y3)
## [1] "logical"
class(y4)
## [1] "logical"
class(y5)
## [1] "NULL"
typeof(y1)
## [1] "double"
typeof(y2)
## [1] "character"
typeof(y3)
## [1] "logical"
typeof(y4)
## [1] "logical"
typeof(y5)
## [1] "NULL"
z<-"12314234"
class(z)
## [1] "character"
z2<-as.numeric(z)
class(z2)
## [1] "numeric"
# as.character

1.3.6 Algunas comandos adicionales

rm(y) # eliminar objetos
rm(y1,y2,y3,y4)

# listando los objetos en memoria
ls()
##  [1] "aux"   "bd"    "bdj"   "bdv"   "edu"   "eh19p"
##  [7] "eh19v" "i"     "rue"   "s1"    "s2"    "s3"   
## [13] "s4"    "ue"    "www"   "x"     "x1"    "x2"   
## [19] "x3"    "x4"    "x5"    "y5"    "z"     "z2"
# remover todos los objetos en memoria
rm(list=ls())

1.4 Tipos de estructuras

1.4.1 Homogéneas

  • Scalar: un único valor
x<-1
y<-"hola"
i<-TRUE
j<-FALSE
w<-F
  • Vectores: Colección de valores simples. Los vectores en R son vectores columna
# definición
x1<-c(2,4,6)
x2<-c(1,2,3,4,7,9,4,2)
x3<-c("hola","chau","adios","hola")
x4<-c(T,T,T,F,F,F,F,T,F,T,F,F,F)
x5<-c(1,2,3,T,T,"Hola")
x6<-c(1,2,3,T,T,F,F)
# operaciones con vectores
x1+x1
## [1]  4  8 12
x1+x2 # mal ejemplo
## Warning in x1 + x2: longitud de objeto mayor no es
## múltiplo de la longitud de uno menor
## [1]  3  6  9  6 11 15  6  6
x1**2
## [1]  4 16 36
x1/x1
## [1] 1 1 1
x2>5
## [1] FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE FALSE
log(x2) # logaritmo
## [1] 0.0000000 0.6931472 1.0986123 1.3862944 1.9459101
## [6] 2.1972246 1.3862944 0.6931472
exp(x2) # exponencial
## [1]    2.718282    7.389056   20.085537   54.598150
## [5] 1096.633158 8103.083928   54.598150    7.389056
sqrt(x2) # raíz cuadrada
## [1] 1.000000 1.414214 1.732051 2.000000 2.645751
## [6] 3.000000 2.000000 1.414214
2^x2
## [1]   2   4   8  16 128 512  16   4
2/x1
## [1] 1.0000000 0.5000000 0.3333333
# generando vectores
v1<-1:10
v2<-1:10000
sum(v2) #sumar
## [1] 50005000
v3<-100:1
v4<-99:0

v5<-seq(1,100,2)
v6<-seq(0,1,0.01)
seq(by=10,to=100,from=-20)# anotando el nombre de los argumentos
##  [1] -20 -10   0  10  20  30  40  50  60  70  80  90
## [13] 100
seq(-20,100,10) # respetando el orden de los argumentos
##  [1] -20 -10   0  10  20  30  40  50  60  70  80  90
## [13] 100
v7<-rep(1,100) # repetir algo 
v8<-rep(c(1,2,3),10)
v9<-rep(c("hola","cómo","estas","?"),10)
length(v8) # conocer el tamaño del vector
## [1] 30
length(v6) # conocer el tamaño del vector
## [1] 101
# vectores estadísticos, generación de variables aleatorias
set.seed(1234)
x<-runif(100,10,20)
mean(x)
## [1] 14.37497
x
##   [1] 11.13703 16.22299 16.09275 16.23379 18.60915
##   [6] 16.40311 10.09496 12.32551 16.66084 15.14251
##  [11] 16.93591 15.44975 12.82734 19.23433 12.92316
##  [16] 18.37296 12.86223 12.66821 11.86723 12.32226
##  [21] 13.16612 13.02693 11.59046 10.39996 12.18800
##  [26] 18.10599 15.25698 19.14658 18.31345 10.45770
##  [31] 14.56091 12.65187 13.04672 15.07307 11.81096
##  [36] 17.59671 12.01248 12.58810 19.92150 18.07352
##  [41] 15.53334 16.46406 13.11824 16.21819 13.29770
##  [46] 15.01997 16.77095 14.84991 12.43929 17.65460
##  [51] 10.73780 13.09687 17.17272 15.04546 11.52999
##  [56] 15.03933 14.93961 17.51200 11.74650 18.48392
##  [61] 18.64834 10.41857 13.17182 10.13750 12.39026
##  [66] 17.06495 13.08095 15.08548 10.51647 15.64570
##  [71] 11.21480 18.92836 10.14627 17.83121 10.89961
##  [76] 15.19190 13.84267 10.70052 13.20644 16.68495
##  [81] 19.26400 14.71910 11.42615 15.44270 11.96175
##  [86] 18.98580 13.89500 13.10871 11.60029 18.96186
##  [91] 11.66394 19.00425 11.34078 11.31614 11.05288
##  [96] 15.11584 13.00199 10.26717 13.09647 17.42120
z<-round(x,10)
y<-rnorm(100000,10,5)
hist(y)

  • Matrices
A<-matrix(c(1,2,3,4),2,2)
matrix(c(1,2,3,4),2,2,byrow=T)
##      [,1] [,2]
## [1,]    1    2
## [2,]    3    4
B<-A>=2
B
##       [,1] [,2]
## [1,] FALSE TRUE
## [2,]  TRUE TRUE
matrix(c("Hola","como", "estan","chau"),2,2)
##      [,1]   [,2]   
## [1,] "Hola" "estan"
## [2,] "como" "chau"
matrix(c("Hola",1,2,3),2,2)
##      [,1]   [,2]
## [1,] "Hola" "2" 
## [2,] "1"    "3"
matrix(1:10,2,5)
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    3    5    7    9
## [2,]    2    4    6    8   10
matrix(1:10,5,2)
##      [,1] [,2]
## [1,]    1    6
## [2,]    2    7
## [3,]    3    8
## [4,]    4    9
## [5,]    5   10
matrix(1:10,5,5)
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    6    1    6    1
## [2,]    2    7    2    7    2
## [3,]    3    8    3    8    3
## [4,]    4    9    4    9    4
## [5,]    5   10    5   10    5
# funciones para crear otras matrices
diag(1,5,5)
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    0    0    0    0
## [2,]    0    1    0    0    0
## [3,]    0    0    1    0    0
## [4,]    0    0    0    1    0
## [5,]    0    0    0    0    1
diag(1:5,5,5)
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    0    0    0    0
## [2,]    0    2    0    0    0
## [3,]    0    0    3    0    0
## [4,]    0    0    0    4    0
## [5,]    0    0    0    0    5
# Matriz inversa
C<-matrix(c(2,5,3,7),2,2)
solve(C)
##      [,1] [,2]
## [1,]   -7    3
## [2,]    5   -2
det(C)
## [1] -1
# operaciones con matrices
A+C
##      [,1] [,2]
## [1,]    3    6
## [2,]    7   11
A-C
##      [,1] [,2]
## [1,]   -1    0
## [2,]   -3   -3
A*C # elemento a elemento
##      [,1] [,2]
## [1,]    2    9
## [2,]   10   28
A %*% C # Multiplicación matricial
##      [,1] [,2]
## [1,]   17   24
## [2,]   24   34
t(C)# transpuesta
##      [,1] [,2]
## [1,]    2    5
## [2,]    3    7
D<-C %*% t(C)     # Simétrica
C %*% solve(C) # Inversa
##      [,1]          [,2]
## [1,]    1 -8.881784e-16
## [2,]    0  1.000000e+00
# Desc. Matriz
eigen(D)
## eigen() decomposition
## $values
## [1] 86.98850423  0.01149577
## 
## $vectors
##           [,1]       [,2]
## [1,] 0.3864358 -0.9223163
## [2,] 0.9223163  0.3864358
svd(D)
## $d
## [1] 86.98850423  0.01149577
## 
## $u
##            [,1]       [,2]
## [1,] -0.3864358 -0.9223163
## [2,] -0.9223163  0.3864358
## 
## $v
##            [,1]       [,2]
## [1,] -0.3864358 -0.9223163
## [2,] -0.9223163  0.3864358
qr(D)
## $qr
##             [,1]         [,2]
## [1,] -33.6154726 -80.23091122
## [2,]   0.9221944   0.02974821
## 
## $rank
## [1] 2
## 
## $qraux
## [1] 1.38672668 0.02974821
## 
## $pivot
## [1] 1 2
## 
## attr(,"class")
## [1] "qr"
dim(D)
## [1] 2 2
  • Arrays (Generalización)
array(1:27,c(3,3,3))
## , , 1
## 
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9
## 
## , , 2
## 
##      [,1] [,2] [,3]
## [1,]   10   13   16
## [2,]   11   14   17
## [3,]   12   15   18
## 
## , , 3
## 
##      [,1] [,2] [,3]
## [1,]   19   22   25
## [2,]   20   23   26
## [3,]   21   24   27
array(1:81,c(3,3,3,3))
## , , 1, 1
## 
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9
## 
## , , 2, 1
## 
##      [,1] [,2] [,3]
## [1,]   10   13   16
## [2,]   11   14   17
## [3,]   12   15   18
## 
## , , 3, 1
## 
##      [,1] [,2] [,3]
## [1,]   19   22   25
## [2,]   20   23   26
## [3,]   21   24   27
## 
## , , 1, 2
## 
##      [,1] [,2] [,3]
## [1,]   28   31   34
## [2,]   29   32   35
## [3,]   30   33   36
## 
## , , 2, 2
## 
##      [,1] [,2] [,3]
## [1,]   37   40   43
## [2,]   38   41   44
## [3,]   39   42   45
## 
## , , 3, 2
## 
##      [,1] [,2] [,3]
## [1,]   46   49   52
## [2,]   47   50   53
## [3,]   48   51   54
## 
## , , 1, 3
## 
##      [,1] [,2] [,3]
## [1,]   55   58   61
## [2,]   56   59   62
## [3,]   57   60   63
## 
## , , 2, 3
## 
##      [,1] [,2] [,3]
## [1,]   64   67   70
## [2,]   65   68   71
## [3,]   66   69   72
## 
## , , 3, 3
## 
##      [,1] [,2] [,3]
## [1,]   73   76   79
## [2,]   74   77   80
## [3,]   75   78   81

1.4.2 Heterogéneas

Estas estructuras permiten el uso de diferentes tipos de clases u objetos.

  • Dataframes (Bases de datos)

Tiene una estructura similar a una matriz, donde se define que las filas corresponden a observaciones/sujetos y las columnas son variables.

#encuesta en la sala de clases
id<-1:8
name<-c("adriana","anahi","miguel","rayner","rebeca","sergio","vania","yoselin")
mujer<-c(1,1,0,0,1,0,1,1)
bd<-data.frame(id,name,mujer)
bd
##   id    name mujer
## 1  1 adriana     1
## 2  2   anahi     1
## 3  3  miguel     0
## 4  4  rayner     0
## 5  5  rebeca     1
## 6  6  sergio     0
## 7  7   vania     1
## 8  8 yoselin     1
dim(bd)
## [1] 8 3
str(bd)# estructura del objeto
## 'data.frame':    8 obs. of  3 variables:
##  $ id   : int  1 2 3 4 5 6 7 8
##  $ name : chr  "adriana" "anahi" "miguel" "rayner" ...
##  $ mujer: num  1 1 0 0 1 0 1 1
# incorporando variables
bd$edad<-round(runif(8,19,25),0)
bd
##   id    name mujer edad
## 1  1 adriana     1   22
## 2  2   anahi     1   22
## 3  3  miguel     0   24
## 4  4  rayner     0   20
## 5  5  rebeca     1   23
## 6  6  sergio     0   21
## 7  7   vania     1   24
## 8  8 yoselin     1   21
  • Listas Las listas en R son de los objetos más poderosos que tiene, ya que permite almacenar todo.
w1<-list(bd,bd,C,1:10000,"Hola",1:10^6)
w1
## [[1]]
##   id    name mujer edad
## 1  1 adriana     1   22
## 2  2   anahi     1   22
## 3  3  miguel     0   24
## 4  4  rayner     0   20
## 5  5  rebeca     1   23
## 6  6  sergio     0   21
## 7  7   vania     1   24
## 8  8 yoselin     1   21
## 
## [[2]]
##   id    name mujer edad
## 1  1 adriana     1   22
## 2  2   anahi     1   22
## 3  3  miguel     0   24
## 4  4  rayner     0   20
## 5  5  rebeca     1   23
## 6  6  sergio     0   21
## 7  7   vania     1   24
## 8  8 yoselin     1   21
## 
## [[3]]
##      [,1] [,2]
## [1,]    2    3
## [2,]    5    7
## 
## [[4]]
##    [1]    1    2    3    4    5    6    7    8    9
##   [10]   10   11   12   13   14   15   16   17   18
##   [19]   19   20   21   22   23   24   25   26   27
##   [28]   28   29   30   31   32   33   34   35   36
##   [37]   37   38   39   40   41   42   43   44   45
##   [46]   46   47   48   49   50   51   52   53   54
##   [55]   55   56   57   58   59   60   61   62   63
##   [64]   64   65   66   67   68   69   70   71   72
##   [73]   73   74   75   76   77   78   79   80   81
##   [82]   82   83   84   85   86   87   88   89   90
##   [91]   91   92   93   94   95   96   97   98   99
##  [100]  100  101  102  103  104  105  106  107  108
##  [109]  109  110  111  112  113  114  115  116  117
##  [118]  118  119  120  121  122  123  124  125  126
##  [127]  127  128  129  130  131  132  133  134  135
##  [136]  136  137  138  139  140  141  142  143  144
##  [145]  145  146  147  148  149  150  151  152  153
##  [154]  154  155  156  157  158  159  160  161  162
##  [163]  163  164  165  166  167  168  169  170  171
##  [172]  172  173  174  175  176  177  178  179  180
##  [181]  181  182  183  184  185  186  187  188  189
##  [190]  190  191  192  193  194  195  196  197  198
##  [199]  199  200  201  202  203  204  205  206  207
##  [208]  208  209  210  211  212  213  214  215  216
##  [217]  217  218  219  220  221  222  223  224  225
##  [226]  226  227  228  229  230  231  232  233  234
##  [235]  235  236  237  238  239  240  241  242  243
##  [244]  244  245  246  247  248  249  250  251  252
##  [253]  253  254  255  256  257  258  259  260  261
##  [262]  262  263  264  265  266  267  268  269  270
##  [271]  271  272  273  274  275  276  277  278  279
##  [280]  280  281  282  283  284  285  286  287  288
##  [289]  289  290  291  292  293  294  295  296  297
##  [298]  298  299  300  301  302  303  304  305  306
##  [307]  307  308  309  310  311  312  313  314  315
##  [316]  316  317  318  319  320  321  322  323  324
##  [325]  325  326  327  328  329  330  331  332  333
##  [334]  334  335  336  337  338  339  340  341  342
##  [343]  343  344  345  346  347  348  349  350  351
##  [352]  352  353  354  355  356  357  358  359  360
##  [361]  361  362  363  364  365  366  367  368  369
##  [370]  370  371  372  373  374  375  376  377  378
##  [379]  379  380  381  382  383  384  385  386  387
##  [388]  388  389  390  391  392  393  394  395  396
##  [397]  397  398  399  400  401  402  403  404  405
##  [406]  406  407  408  409  410  411  412  413  414
##  [415]  415  416  417  418  419  420  421  422  423
##  [424]  424  425  426  427  428  429  430  431  432
##  [433]  433  434  435  436  437  438  439  440  441
##  [442]  442  443  444  445  446  447  448  449  450
##  [451]  451  452  453  454  455  456  457  458  459
##  [460]  460  461  462  463  464  465  466  467  468
##  [469]  469  470  471  472  473  474  475  476  477
##  [478]  478  479  480  481  482  483  484  485  486
##  [487]  487  488  489  490  491  492  493  494  495
##  [496]  496  497  498  499  500  501  502  503  504
##  [505]  505  506  507  508  509  510  511  512  513
##  [514]  514  515  516  517  518  519  520  521  522
##  [523]  523  524  525  526  527  528  529  530  531
##  [532]  532  533  534  535  536  537  538  539  540
##  [541]  541  542  543  544  545  546  547  548  549
##  [550]  550  551  552  553  554  555  556  557  558
##  [559]  559  560  561  562  563  564  565  566  567
##  [568]  568  569  570  571  572  573  574  575  576
##  [577]  577  578  579  580  581  582  583  584  585
##  [586]  586  587  588  589  590  591  592  593  594
##  [595]  595  596  597  598  599  600  601  602  603
##  [604]  604  605  606  607  608  609  610  611  612
##  [613]  613  614  615  616  617  618  619  620  621
##  [622]  622  623  624  625  626  627  628  629  630
##  [631]  631  632  633  634  635  636  637  638  639
##  [640]  640  641  642  643  644  645  646  647  648
##  [649]  649  650  651  652  653  654  655  656  657
##  [658]  658  659  660  661  662  663  664  665  666
##  [667]  667  668  669  670  671  672  673  674  675
##  [676]  676  677  678  679  680  681  682  683  684
##  [685]  685  686  687  688  689  690  691  692  693
##  [694]  694  695  696  697  698  699  700  701  702
##  [703]  703  704  705  706  707  708  709  710  711
##  [712]  712  713  714  715  716  717  718  719  720
##  [721]  721  722  723  724  725  726  727  728  729
##  [730]  730  731  732  733  734  735  736  737  738
##  [739]  739  740  741  742  743  744  745  746  747
##  [748]  748  749  750  751  752  753  754  755  756
##  [757]  757  758  759  760  761  762  763  764  765
##  [766]  766  767  768  769  770  771  772  773  774
##  [775]  775  776  777  778  779  780  781  782  783
##  [784]  784  785  786  787  788  789  790  791  792
##  [793]  793  794  795  796  797  798  799  800  801
##  [802]  802  803  804  805  806  807  808  809  810
##  [811]  811  812  813  814  815  816  817  818  819
##  [820]  820  821  822  823  824  825  826  827  828
##  [829]  829  830  831  832  833  834  835  836  837
##  [838]  838  839  840  841  842  843  844  845  846
##  [847]  847  848  849  850  851  852  853  854  855
##  [856]  856  857  858  859  860  861  862  863  864
##  [865]  865  866  867  868  869  870  871  872  873
##  [874]  874  875  876  877  878  879  880  881  882
##  [883]  883  884  885  886  887  888  889  890  891
##  [892]  892  893  894  895  896  897  898  899  900
##  [901]  901  902  903  904  905  906  907  908  909
##  [910]  910  911  912  913  914  915  916  917  918
##  [919]  919  920  921  922  923  924  925  926  927
##  [928]  928  929  930  931  932  933  934  935  936
##  [937]  937  938  939  940  941  942  943  944  945
##  [946]  946  947  948  949  950  951  952  953  954
##  [955]  955  956  957  958  959  960  961  962  963
##  [964]  964  965  966  967  968  969  970  971  972
##  [973]  973  974  975  976  977  978  979  980  981
##  [982]  982  983  984  985  986  987  988  989  990
##  [991]  991  992  993  994  995  996  997  998  999
## [1000] 1000
##  [ reached getOption("max.print") -- omitted 9000 entries ]
## 
## [[5]]
## [1] "Hola"
## 
## [[6]]
##    [1]    1    2    3    4    5    6    7    8    9
##   [10]   10   11   12   13   14   15   16   17   18
##   [19]   19   20   21   22   23   24   25   26   27
##   [28]   28   29   30   31   32   33   34   35   36
##   [37]   37   38   39   40   41   42   43   44   45
##   [46]   46   47   48   49   50   51   52   53   54
##   [55]   55   56   57   58   59   60   61   62   63
##   [64]   64   65   66   67   68   69   70   71   72
##   [73]   73   74   75   76   77   78   79   80   81
##   [82]   82   83   84   85   86   87   88   89   90
##   [91]   91   92   93   94   95   96   97   98   99
##  [100]  100  101  102  103  104  105  106  107  108
##  [109]  109  110  111  112  113  114  115  116  117
##  [118]  118  119  120  121  122  123  124  125  126
##  [127]  127  128  129  130  131  132  133  134  135
##  [136]  136  137  138  139  140  141  142  143  144
##  [145]  145  146  147  148  149  150  151  152  153
##  [154]  154  155  156  157  158  159  160  161  162
##  [163]  163  164  165  166  167  168  169  170  171
##  [172]  172  173  174  175  176  177  178  179  180
##  [181]  181  182  183  184  185  186  187  188  189
##  [190]  190  191  192  193  194  195  196  197  198
##  [199]  199  200  201  202  203  204  205  206  207
##  [208]  208  209  210  211  212  213  214  215  216
##  [217]  217  218  219  220  221  222  223  224  225
##  [226]  226  227  228  229  230  231  232  233  234
##  [235]  235  236  237  238  239  240  241  242  243
##  [244]  244  245  246  247  248  249  250  251  252
##  [253]  253  254  255  256  257  258  259  260  261
##  [262]  262  263  264  265  266  267  268  269  270
##  [271]  271  272  273  274  275  276  277  278  279
##  [280]  280  281  282  283  284  285  286  287  288
##  [289]  289  290  291  292  293  294  295  296  297
##  [298]  298  299  300  301  302  303  304  305  306
##  [307]  307  308  309  310  311  312  313  314  315
##  [316]  316  317  318  319  320  321  322  323  324
##  [325]  325  326  327  328  329  330  331  332  333
##  [334]  334  335  336  337  338  339  340  341  342
##  [343]  343  344  345  346  347  348  349  350  351
##  [352]  352  353  354  355  356  357  358  359  360
##  [361]  361  362  363  364  365  366  367  368  369
##  [370]  370  371  372  373  374  375  376  377  378
##  [379]  379  380  381  382  383  384  385  386  387
##  [388]  388  389  390  391  392  393  394  395  396
##  [397]  397  398  399  400  401  402  403  404  405
##  [406]  406  407  408  409  410  411  412  413  414
##  [415]  415  416  417  418  419  420  421  422  423
##  [424]  424  425  426  427  428  429  430  431  432
##  [433]  433  434  435  436  437  438  439  440  441
##  [442]  442  443  444  445  446  447  448  449  450
##  [451]  451  452  453  454  455  456  457  458  459
##  [460]  460  461  462  463  464  465  466  467  468
##  [469]  469  470  471  472  473  474  475  476  477
##  [478]  478  479  480  481  482  483  484  485  486
##  [487]  487  488  489  490  491  492  493  494  495
##  [496]  496  497  498  499  500  501  502  503  504
##  [505]  505  506  507  508  509  510  511  512  513
##  [514]  514  515  516  517  518  519  520  521  522
##  [523]  523  524  525  526  527  528  529  530  531
##  [532]  532  533  534  535  536  537  538  539  540
##  [541]  541  542  543  544  545  546  547  548  549
##  [550]  550  551  552  553  554  555  556  557  558
##  [559]  559  560  561  562  563  564  565  566  567
##  [568]  568  569  570  571  572  573  574  575  576
##  [577]  577  578  579  580  581  582  583  584  585
##  [586]  586  587  588  589  590  591  592  593  594
##  [595]  595  596  597  598  599  600  601  602  603
##  [604]  604  605  606  607  608  609  610  611  612
##  [613]  613  614  615  616  617  618  619  620  621
##  [622]  622  623  624  625  626  627  628  629  630
##  [631]  631  632  633  634  635  636  637  638  639
##  [640]  640  641  642  643  644  645  646  647  648
##  [649]  649  650  651  652  653  654  655  656  657
##  [658]  658  659  660  661  662  663  664  665  666
##  [667]  667  668  669  670  671  672  673  674  675
##  [676]  676  677  678  679  680  681  682  683  684
##  [685]  685  686  687  688  689  690  691  692  693
##  [694]  694  695  696  697  698  699  700  701  702
##  [703]  703  704  705  706  707  708  709  710  711
##  [712]  712  713  714  715  716  717  718  719  720
##  [721]  721  722  723  724  725  726  727  728  729
##  [730]  730  731  732  733  734  735  736  737  738
##  [739]  739  740  741  742  743  744  745  746  747
##  [748]  748  749  750  751  752  753  754  755  756
##  [757]  757  758  759  760  761  762  763  764  765
##  [766]  766  767  768  769  770  771  772  773  774
##  [775]  775  776  777  778  779  780  781  782  783
##  [784]  784  785  786  787  788  789  790  791  792
##  [793]  793  794  795  796  797  798  799  800  801
##  [802]  802  803  804  805  806  807  808  809  810
##  [811]  811  812  813  814  815  816  817  818  819
##  [820]  820  821  822  823  824  825  826  827  828
##  [829]  829  830  831  832  833  834  835  836  837
##  [838]  838  839  840  841  842  843  844  845  846
##  [847]  847  848  849  850  851  852  853  854  855
##  [856]  856  857  858  859  860  861  862  863  864
##  [865]  865  866  867  868  869  870  871  872  873
##  [874]  874  875  876  877  878  879  880  881  882
##  [883]  883  884  885  886  887  888  889  890  891
##  [892]  892  893  894  895  896  897  898  899  900
##  [901]  901  902  903  904  905  906  907  908  909
##  [910]  910  911  912  913  914  915  916  917  918
##  [919]  919  920  921  922  923  924  925  926  927
##  [928]  928  929  930  931  932  933  934  935  936
##  [937]  937  938  939  940  941  942  943  944  945
##  [946]  946  947  948  949  950  951  952  953  954
##  [955]  955  956  957  958  959  960  961  962  963
##  [964]  964  965  966  967  968  969  970  971  972
##  [973]  973  974  975  976  977  978  979  980  981
##  [982]  982  983  984  985  986  987  988  989  990
##  [991]  991  992  993  994  995  996  997  998  999
## [1000] 1000
##  [ reached getOption("max.print") -- omitted 999000 entries ]
str(w1)
## List of 6
##  $ :'data.frame':    8 obs. of  4 variables:
##   ..$ id   : int [1:8] 1 2 3 4 5 6 7 8
##   ..$ name : chr [1:8] "adriana" "anahi" "miguel" "rayner" ...
##   ..$ mujer: num [1:8] 1 1 0 0 1 0 1 1
##   ..$ edad : num [1:8] 22 22 24 20 23 21 24 21
##  $ :'data.frame':    8 obs. of  4 variables:
##   ..$ id   : int [1:8] 1 2 3 4 5 6 7 8
##   ..$ name : chr [1:8] "adriana" "anahi" "miguel" "rayner" ...
##   ..$ mujer: num [1:8] 1 1 0 0 1 0 1 1
##   ..$ edad : num [1:8] 22 22 24 20 23 21 24 21
##  $ : num [1:2, 1:2] 2 5 3 7
##  $ : int [1:10000] 1 2 3 4 5 6 7 8 9 10 ...
##  $ : chr "Hola"
##  $ : int [1:1000000] 1 2 3 4 5 6 7 8 9 10 ...
object.size(w1)/10^6
## 4 bytes
w2<-list(w1,w1,list(w1,C),C,1:1000) # R puede encapsular objetos de tipo
str(w2)
## List of 5
##  $ :List of 6
##   ..$ :'data.frame': 8 obs. of  4 variables:
##   .. ..$ id   : int [1:8] 1 2 3 4 5 6 7 8
##   .. ..$ name : chr [1:8] "adriana" "anahi" "miguel" "rayner" ...
##   .. ..$ mujer: num [1:8] 1 1 0 0 1 0 1 1
##   .. ..$ edad : num [1:8] 22 22 24 20 23 21 24 21
##   ..$ :'data.frame': 8 obs. of  4 variables:
##   .. ..$ id   : int [1:8] 1 2 3 4 5 6 7 8
##   .. ..$ name : chr [1:8] "adriana" "anahi" "miguel" "rayner" ...
##   .. ..$ mujer: num [1:8] 1 1 0 0 1 0 1 1
##   .. ..$ edad : num [1:8] 22 22 24 20 23 21 24 21
##   ..$ : num [1:2, 1:2] 2 5 3 7
##   ..$ : int [1:10000] 1 2 3 4 5 6 7 8 9 10 ...
##   ..$ : chr "Hola"
##   ..$ : int [1:1000000] 1 2 3 4 5 6 7 8 9 10 ...
##  $ :List of 6
##   ..$ :'data.frame': 8 obs. of  4 variables:
##   .. ..$ id   : int [1:8] 1 2 3 4 5 6 7 8
##   .. ..$ name : chr [1:8] "adriana" "anahi" "miguel" "rayner" ...
##   .. ..$ mujer: num [1:8] 1 1 0 0 1 0 1 1
##   .. ..$ edad : num [1:8] 22 22 24 20 23 21 24 21
##   ..$ :'data.frame': 8 obs. of  4 variables:
##   .. ..$ id   : int [1:8] 1 2 3 4 5 6 7 8
##   .. ..$ name : chr [1:8] "adriana" "anahi" "miguel" "rayner" ...
##   .. ..$ mujer: num [1:8] 1 1 0 0 1 0 1 1
##   .. ..$ edad : num [1:8] 22 22 24 20 23 21 24 21
##   ..$ : num [1:2, 1:2] 2 5 3 7
##   ..$ : int [1:10000] 1 2 3 4 5 6 7 8 9 10 ...
##   ..$ : chr "Hola"
##   ..$ : int [1:1000000] 1 2 3 4 5 6 7 8 9 10 ...
##  $ :List of 2
##   ..$ :List of 6
##   .. ..$ :'data.frame':  8 obs. of  4 variables:
##   .. .. ..$ id   : int [1:8] 1 2 3 4 5 6 7 8
##   .. .. ..$ name : chr [1:8] "adriana" "anahi" "miguel" "rayner" ...
##   .. .. ..$ mujer: num [1:8] 1 1 0 0 1 0 1 1
##   .. .. ..$ edad : num [1:8] 22 22 24 20 23 21 24 21
##   .. ..$ :'data.frame':  8 obs. of  4 variables:
##   .. .. ..$ id   : int [1:8] 1 2 3 4 5 6 7 8
##   .. .. ..$ name : chr [1:8] "adriana" "anahi" "miguel" "rayner" ...
##   .. .. ..$ mujer: num [1:8] 1 1 0 0 1 0 1 1
##   .. .. ..$ edad : num [1:8] 22 22 24 20 23 21 24 21
##   .. ..$ : num [1:2, 1:2] 2 5 3 7
##   .. ..$ : int [1:10000] 1 2 3 4 5 6 7 8 9 10 ...
##   .. ..$ : chr "Hola"
##   .. ..$ : int [1:1000000] 1 2 3 4 5 6 7 8 9 10 ...
##   ..$ : num [1:2, 1:2] 2 5 3 7
##  $ : num [1:2, 1:2] 2 5 3 7
##  $ : int [1:1000] 1 2 3 4 5 6 7 8 9 10 ...
object.size(w2)/10^6
## 12.1 bytes

1.5 Indexación

Es el proceso de manejar los elementos dentro de los objetos.

#VECTORES
x<-1:100
x[c(1,5,7)]
## [1] 1 5 7
x[-c(1,5,7)]
##  [1]   2   3   4   6   8   9  10  11  12  13  14  15
## [13]  16  17  18  19  20  21  22  23  24  25  26  27
## [25]  28  29  30  31  32  33  34  35  36  37  38  39
## [37]  40  41  42  43  44  45  46  47  48  49  50  51
## [49]  52  53  54  55  56  57  58  59  60  61  62  63
## [61]  64  65  66  67  68  69  70  71  72  73  74  75
## [73]  76  77  78  79  80  81  82  83  84  85  86  87
## [85]  88  89  90  91  92  93  94  95  96  97  98  99
## [97] 100
o<-(x %% 2)==0
x[o]
##  [1]   2   4   6   8  10  12  14  16  18  20  22  24
## [13]  26  28  30  32  34  36  38  40  42  44  46  48
## [25]  50  52  54  56  58  60  62  64  66  68  70  72
## [37]  74  76  78  80  82  84  86  88  90  92  94  96
## [49]  98 100
x2<-c(2,3,7,4)
x2[c(T,T,F,F)]
## [1] 2 3
#matrices
A<-matrix(1:30,5,6)
A[ 3, 4]
## [1] 18
A[3, ]
## [1]  3  8 13 18 23 28
A[c(1,4), ]
##      [,1] [,2] [,3] [,4] [,5] [,6]
## [1,]    1    6   11   16   21   26
## [2,]    4    9   14   19   24   29
A[,1:2 ]
##      [,1] [,2]
## [1,]    1    6
## [2,]    2    7
## [3,]    3    8
## [4,]    4    9
## [5,]    5   10
A[,-c(1:2) ]
##      [,1] [,2] [,3] [,4]
## [1,]   11   16   21   26
## [2,]   12   17   22   27
## [3,]   13   18   23   28
## [4,]   14   19   24   29
## [5,]   15   20   25   30
A[3:4,c(1,3)]
##      [,1] [,2]
## [1,]    3   13
## [2,]    4   14
A[c(T,T,F,T,T),c(T,F,T,T,T,F)]
##      [,1] [,2] [,3] [,4]
## [1,]    1   11   16   21
## [2,]    2   12   17   22
## [3,]    4   14   19   24
## [4,]    5   15   20   25
#data frame
bd[1:3,2:3]
##      name mujer
## 1 adriana     1
## 2   anahi     1
## 3  miguel     0
# también es posible usar el nombre de las variables 
bd[1:6,c("name","id")]
##      name id
## 1 adriana  1
## 2   anahi  2
## 3  miguel  3
## 4  rayner  4
## 5  rebeca  5
## 6  sergio  6
bd[,-c(3)]
##   id    name edad
## 1  1 adriana   22
## 2  2   anahi   22
## 3  3  miguel   24
## 4  4  rayner   20
## 5  5  rebeca   23
## 6  6  sergio   21
## 7  7   vania   24
## 8  8 yoselin   21
bd$mujer
## [1] 1 1 0 0 1 0 1 1
mean(bd$mujer)
## [1] 0.625
bd[c(2,6,8),]
##   id    name mujer edad
## 2  2   anahi     1   22
## 6  6  sergio     0   21
## 8  8 yoselin     1   21
bd[bd$edad<=21 & bd$mujer==1,]
##   id    name mujer edad
## 8  8 yoselin     1   21
#bd %>% filter(mujer==1 & edad<=21)

1.6 Loops y condiciones

rm(list = ls())
x<-5
## if
if(x>6){
  hist(rnorm(100,3,2))
}
## if else
if(x>6){
  hist(rnorm(100,3,2))
} else {
  boxplot(rnorm(100,3,2))
}
## if encadenado
x<-60
if(x>6){
  hist(rnorm(100,3,2))
  mean(x)
} else if(x<6){
  boxplot(rnorm(100,3,2))
} else if(typeof(x)=="double"){
  print("hola")
} else {
  print("hola hola")
}
##for
for(i in 1:100){
  print(i)
}
for(i in c(2,7,9,15,19)){
  print(i)
}  
for(i in c("a","b","c")){
  print(i)
}  
for(i in 1:5){
  for(j in 6:10){
    print(i*j)
  }
}
for(i in 1:5){
  for(j in 6:10){
    aux<-i*j
    print(aux)
    if(aux==20){
      break()
      print("hola")
      boxplot(rnorm(100,i,j))
    }
  }
}

for(i in 1:50){
  print(i)
  if(i==20){
    break()
  }
}

#while
z<-1
k<-1
while(z>0.0001){
  print(k)
  z<-1/k
  k<-k+1
}
z==0.0001

1.7 Crear funciones en R.

Una función en R tiene la misma idea de lo que realiza una función en cálculo \(f(x)=y\), \(f(x)=x^2=y\), \(f(x,y)=.()\).

Estructura básica de una función en R.

  • El nombre de la función (\(f\))
  • Los argumentos \(X,Y,\ldots\)
  • Los procedimientos dentro de la función
  • Las salidas \(y\)
nombrefuncion<-function(x){
  print("Hola")#procedimiento 1
  y<-x^2 #procedimiento 2
  return(y)
}
nombrefuncion(x=2)
nombrefuncion(x=2:10)

x2<-nombrefuncion(x=1:100)
x2
x3<-nombrefuncion(2:5)
x3
###### funciones matemáticas
ff<-function(x){
  y<-x^2
  return(y)
}
gg<-function(x){
  y<-log(x)
  return(y)
}
hh<-function(x){
  y<-exp(-x^2)
  return(y)
}
curve(ff,xlim=c(-10,10))
curve(gg,xlim=c(0,100))
curve(hh,xlim=c(-10,10))

Ejemplo, desarrolle una función que dado un vector numérico de valores enteros, devuelva;

  • La suma de los números pares
  • La suma del vector
  • Coeficiente de variación del vector
tarea1<-function(x){
  s1<-sum(x[x %% 2 ==0])
  s2<-sum(x)
  s3<-sd(x)/mean(x)
  return(list(suma_pares=s1,suma=s2,cv=s3))
}
tarea1(1:10)
####################################################
tarea1_alt<-function(x){
  return(list(suma_pares=sum(x[x %% 2 ==0]),suma=sum(x),cv=sd(x)/mean(x)))
}
tarea1_alt(1:10)
tarea1(rnorm(100))

x<-1:10
sum(1:10)
cumsum(1:10)
tail(cumsum(1:10),1)

# el comando scan permite leer los datos directamente por la consola
xx<-scan()
tarea1(xx)

Otros ejemplos,

fx<-function(x){
  y<-8*x**2
  return(y)
}
fx(5)
fx(1:10)
curve(fx,xlim = c(-20,20),ylim=c(0,1000))
plot(fx)
##comando de estadísticas de tendencia central
tendencia<-function(x){
  n<-length(x)
  cat("media:",fill = T)
  print(sum(x)/n)
  cat("mediana:",fill = T)
  x<-sort(x)
  if(n%%2==0){
    me<-(x[n/2]+x[n/2+1])/2
  } else {
    me<-x[ceiling(n/2)]
  }
  print(me)
  cat("moda:",fill = T)
  tt<-table(x)
  mm<-max(tt)
  print(names(tt)[(table(x)==mm)])
  cat("media cuadrática:",fill = T)
  mc<-sqrt(sum(x**2)/n)
  print(mc)
  cat("media armónica",fill = T)
  ma<-n/sum(1/x)
  print(ma)
  cat("media geométrica:",fill = T)
  mg<-prod(x)**(1/n)
  print(mg)
}

tendencia2<-function(x){
  n<-length(x)
  media<-sum(x)/n
  x<-sort(x)
  if(n%%2==0){
    me<-(x[n/2]+x[n/2+1])/2
  } else {
    me<-x[ceiling(n/2)]
  }
  tt<-table(x)
  mm<-max(tt)
  mo<-names(tt)[(table(x)==mm)]
  mc<-sqrt(sum(x**2)/n)
  ma<-n/sum(1/x)
  mg<-prod(x)**(1/n)
  aux<-list(media,me,mo,mc,ma,mg)
  return(aux)
}
a<-tendencia2(xx)

tendenciaF<-function(x,f){
  n<-sum(f)
  media<-sum(x*f)/n
}

1.8 Importación de datos

  • Definir el directorio de trabajo
  • Identificar el formato de la base de datos que se va a importar
  • Usar el comando adecuado para la importación
#gestión de directorios del R
getwd() # indica el directorio de trabajo actual
dir() # lista los archivos en el directorio de trabajo
setwd("C:/Users\\ALVARO\\Desktop\\ejemplo") # cambiar el directorio de trabajo
# Cargar la base de datos, depende del formato de la base de datos
mun15<-read.csv("municipales2015.csv")
#trabajar con librerías
library(foreign) #habilitar una librería
bd12pv<-read.dta("DBvivienda2012vf_9.dta")

1.9 Exportar la base de datos

write.csv(bd12pv,"bd12pv.csv") # a otros formatos
save(mun15,bd12pv,file="bases.RData") # al formato .RData

Para abrir un objeto RData

rm(list=ls())
load("bases.RData")
load(url("https://github.com/AlvaroLimber/EST-383/raw/master/data/eh19.RData"))

Actividad Martes. * Indagar el github * Crearse una cuenta * Crear un repositorio para sus proyectos * Crear un repositorio para sus ejercicios * Instalar el github desktop * Interactuar con sus repositorios * Poner en el tablón del classroom su nombre de usuario del classroom o enlace

Instalando librerías en R

#install.packages("dplyr")
#install.packages("rlang")
library(dplyr) #gramática de manejo de bases de datos 

1.10 Dataframe y exploración

rm(list=ls())
#encuestas a hogares 2019
load(url("https://github.com/AlvaroLimber/EST-383/raw/master/data/eh19.RData"))
#computo La Paz 2021, 9 marzo
setwd("C:\\Users\\ALVARO\\Desktop\\_data\\bigdata")
bd<-read.csv("lp_2021.csv",sep="|",header = T)
# exploración
names(bd)
names(eh19v)

attributes(bd)
ehvat<-attributes(eh19v)

head(bd)
tail(bd)
View(bd)

View(eh19p)
# Renombrando variables
# R base
names(eh19p)[5]<-"sexo"
# dplyr "anidar acciones" pipeline %>% 
eh19p<-eh19p %>% rename(edad=s02a_03) 

# Filtrar bases de datos (filas)
## filtrar por tipo de elección en bd
aux<-unique(bd$DESCRIPCION)
bdgob<-bd[bd$DESCRIPCION=="GOBERNADOR(A)" , ] # R base
bdast<-subset(bd,DESCRIPCION=="ASAMBLEISTA TERRITORIO") # R base

bdasp<-bd %>% filter(DESCRIPCION=="ASAMBLEISTA POBLACION") # dplyr
bdalc<-bd %>% filter(DESCRIPCION==aux[4])
bdcon<-bd %>% filter(DESCRIPCION==aux[5])
## filtrar solo a jefes/as del hogar eh19
#tarea ...
 
# Seleccionar variables (columnas)
## R base
aux2<-eh19p[,c("edad","sexo")]
aux3<-subset(eh19p,select = c("edad","sexo") )
aux4<-eh19p[,-c(4:50,100)]
## dplyr
aux5<-eh19p %>% select(edad,sexo)
aux6<-eh19p %>% select(-edad,-sexo)

Otros comandos útiles son los que permiten añadir información

  • Añadir filas: rbind (R base) bind_rows, tratar de garantizar que las bases de datos tengan los mismos nombres de variables
bdmun<-rbind(bdalc,bdcon)
bdmun2<-bind_rows(bdalc,bdcon)
  • Añadir columnas (variables): merge (R base) bind_cols (dplyr), asegurarse que ambas bases de datos tengan una variables de unión (key)
bdpv<-merge(eh19p[,c("edad","folio","sexo")],eh19v[,c("folio","s01a_10")],"folio")
View(bdpv)

Tarea: Para la encuesta a hogares 2019, generar una base de datos de jefas/jefas que incluya:

  • Información demográfica (edad, sexo, estado civil, lugar de nacimiento)
  • Información geográfica (departamento, área)
  • Educación (Nivel educativo, años de educación)
  • Condiciones de su vivienda (techo, piso, pared, agua, alcantarillado)
  • Pobreza moderada y extrema

Generar un reporte por departamento y sexo del jefe del hogar respecto su condición de pobreza extrema.

rm(list=ls())
library(dplyr)
load(url("https://github.com/AlvaroLimber/EST-383/raw/master/data/eh19.RData"))
#jefe/jefa
aux<-unique(eh19p$s02a_05)
bdj<-eh19p %>% filter(s02a_05==aux[1])
#selección de variables para el/la jefa/jefa 
bdj<-bdj %>% select(folio,depto,area,s02a_02,s02a_03,s02a_10,p0, pext0, niv_ed, niv_ed_g, aestudio)
#selección de variables para la vivienda
bdv<-eh19v %>% select(folio,s01a_06,s01a_08,s01a_09,s01a_10,s01a_15,s01a_16)
# unir las bases de datos, 
bdj<-merge(bdj,bdv,"folio")

1.11 Estadística descriptiva

##tablas de frecuencias y Porcentajes
t1<-table(bdj$depto)# frecuencias
t2<-prop.table(t1)*100
t3<-cumsum(t1)

tabla1<-cbind(t1,t3,t2)
tabla1
barplot(t1)
pie(t2)
#tabla de contingencia
t4<-table(bdj$depto,bdj$s02a_02)
t5<-prop.table(t4)#celda
sum(t5)
t6<-prop.table(t4,1)*100#fila
t7<-prop.table(t4,2)*100#columna
t8<-addmargins(t4)
addmargins(t4,1)
addmargins(t4,2)
colnames(t8)[3]<-"Total"
row.names(t8)[10]<-"Total"
install.packages("xtable")
library(xtable)
xtable(t8)
library(knitr)
kable(t8)

table(bdj$depto,bdj$area,bdj$s02a_02)

chisq.test(t4)# tarea: recordar
chisq.test(table(bdj$niv_ed_g,bdj$s02a_02))
##medidas de tendencia central
mean(bdj$s02a_03)
median(bdj$s02a_03)
#media y mediana de edad por departamento y sexo
bdj %>% group_by(Departamento=depto,sexo=s02a_02) %>% summarise(media=mean(s02a_03),Me=median(s02a_03))

#tip ctr+shift+m %>% 

#medidas de dispersión
var(bdj$s02a_03) 
sd(bdj$s02a_03)
range(bdj$s02a_03)
min(bdj$s02a_03)
max(bdj$s02a_03)
bdj %>% group_by(Departamento=depto,sexo=s02a_02) %>% summarise(media=mean(s02a_03),Me=median(s02a_03),sd_media=sd(s02a_03))
boxplot(bdj$s02a_03)
#medidas de forma
quantile(bdj$s02a_03)
quantile(bdj$s02a_03,c(0.15,0.45,0.99))
quantile(bdj$s02a_03,seq(0,1,0.01))
quantile(bdj$s02a_03,seq(0,1,0.2))
#Coeficiente de asimetría-> averiguar
#kurtosis...
hist(bdj$s02a_03)
plot(density(bdj$s02a_03))

plot(density(rnorm(10000,0,3)),ylim=c(0,0.25))
points(density(rnorm(10000,0,1.5)),col="red",type="l")
points(density(rnorm(10000,0,6)),col="green",type="l")

summary(bdj$s02a_03)
bdj$edadg<-cut(bdj$s02a_03,c(15,25,50,98))
table(bdj$edadg)
mean(bdj$s02a_03)

1.12 Inferencia en R

Esta orientada a generar el análisis a partir de una muestra probabilística, reconociendo los insumos básicos para esto. Recordar al estimador de Horvitz Thompson para el parámetro del total:

\[\hat{t}_y=\sum_s \frac{ y_k}{\pi_k}=\sum_s y_k*\frac{1}{\pi_k}=\sum_s y_k*w_k\]

Donde \(\pi_k\) es la probabilidad de selección del individuo \(k\) y \(w_k=\pi_k^{-1}\) se conoce como el factor de expansión.

\[\bar{y}_s=\frac{\hat{t_y}}{N}\]

Todo estimador tiene su varianza teórica \(V(\hat{\theta})\) y su estimación de la varianza (\(\hat{V}(\hat{\theta})\)). Estas varianza depende del método de muestreo empleado, las características mas importantes para construir (aproximar) la varianza en muestreos complejos; la conglomeración y estratificación de la primera etapa.

####Inferencia a partir de una muestra
#librería survey
install.packages("survey")
install.packages("srvyr")#trabaja con dplyr
library(survey)
load(url("https://github.com/AlvaroLimber/EST-383/raw/master/data/eh19.RData"))

mean(eh19p$s02a_03) # media a nivel de la muestra
#definir el diseño muestral
sd1<-svydesign(ids= ~upm ,strata = ~estrato,weights = ~factor,data=eh19p)
r1<-svymean(~s02a_03,design = sd1,deff=T)
r1
confint(r1)
cv(r1)
deff(r1)
#pobreza
prop.table(table(eh19p$p0))*100
svymean(~p0,design = sd1,deff=T,na.rm=T)*100

nota: los valores perdidos en R se denotan por \(NA\)

x<-c(23,45,64,22,NA,NA,78,54)
mean(x,na.rm=T)
mean(na.omit(x))

table(is.na(eh19p$p0))
#modelos lineales
lm(ylab~aestudio,data=eh19p)
svyglm(ylab~aestudio,design = sd1)

1.13 Gráficos de origen

rm(list=ls())
################
plot(0,0)#inicia una hoja en blanco
plot(0,0,type = "n")

x<-c(3,4,7,2)
y<-c(0,6,9,2)
plot(x,y,type="p")

plot(x,y,type="h")
plot(x,y,type="l")
x[order(x)]

plot(x[order(x)],y[order(x)],type="l")
plot(x,y,type = "b")
plot(x,y,type = "o")
#ventanas multiples
par(mfrow=c(2,2))
plot(0,0,type = "n")
plot(x,y,type="p")
plot(x,y,type="h")
plot(x,y,type = "b")
dev.off()#desactivando el par

#limites para el plot
plot(x,y,xlim=c(0,10),ylim=c(0,10))
#título
plot(x,y,xlim=c(0,10),ylim=c(0,10),main="Nombre de la figura")
#sin ejes
plot(x,y,xlim=c(0,10),ylim=c(0,10),main="Nombre de la figura",axes=F)
#sin ejes y etiquetas de los ejes
plot(x,y,xlim=c(0,10),ylim=c(0,10),axes=F,ann=F)
#tipo de la salida del punto
plot(x,y,xlim=c(0,10),ylim=c(0,10),axes=F,ann=F,pch=15)
#tamaño de los puntos
plot(x,y,xlim=c(0,10),ylim=c(0,10),axes=F,ann=F,pch=15,cex=4)
#Color de los puntos
plot(x,y,xlim=c(0,10),ylim=c(0,10),axes=F,ann=F,pch=15,cex=4,col="darkgreen")
#definir, formas, tamaños y colores para cada punto.
plot(x,y,xlim=c(0,10),ylim=c(0,10),axes=F,ann=F,pch=c(4,5,15,6),cex=c(1,2,3,4),col=c("red","gray","green","blue"))
#con lwd se puede dar mayor grosor a las líneas

pdf("f1.pdf",height = 5,width = 10)
plot(x,y,xlim=c(0,10),ylim=c(0,10),axes=F,ann=F,pch=c(4,5,15,6),cex=c(1,2,3,4),col=c("red","gray","green","blue"),lwd=4,type = "p")
points(x,y,type="h")
points(2,8,col="red",pch=14)
text(5,7,"Hola")
axis(1,c(0,5,10))
axis(2,c(0,5,10),c("A","B","C"))
dev.off()
#png
#jpeg

1.14 ggplot

The grammar of graphics is an answer to a question: what is a statistical graphic?

  • base graphics 1983
  • grid 2000
  • lattice 1993
  • ggplot 2005
  • ggvis 2014
  • plotly

1.14.1 Datos, estetica y geometria (layers)

rm(list=ls())
#install.packages("ggplot2")
#install.packages("dplyr")
#install.packages("maps")
#install.packages("ggvis")
library(ggplot2)
library(dplyr)
library(maps)
library(ggvis)
library(readxl)
#######################################
load(url("https://github.com/AlvaroLimber/EST-383/raw/master/data/eh19.RData"))
set.seed(1424)
s<-sample(1:39605,2000)
bd<-eh19p[s,]

# una variable
ggplot(bd,aes(s02a_03))+geom_histogram()
ggplot(bd,aes(s02a_03))+geom_boxplot()
ggplot(bd,aes(s02a_03))+geom_density()

#2 variables cuantitativas
ggplot(bd,aes(s02a_03,ylab))+geom_point()
# 3 variables
ggplot(bd,aes(s02a_03,log(ylab),shape=s02a_02))+geom_point()
ggplot(bd,aes(aestudio,log(ylab),shape=s02a_02))+geom_point()
#4variables
ggplot(bd,aes(s02a_03,log(ylab),shape=s02a_02,colour=area))+geom_point()
#5variables
ggplot(bd,aes(s02a_03,log(ylab),shape=s02a_02,colour=area,size=ynolab))+geom_point()+geom_smooth()

ggplot(bd,aes(s02a_03,log(ylab)))+geom_point()+geom_smooth(method = "lm")#introducir un ajuste lineal
#6variables
ggplot(bd,aes(s02a_03,log(ylab),shape=s02a_02,colour=area,size=ynolab))+geom_point()+facet_wrap(~depto)
#7 variables
ggplot(bd,aes(s02a_03,log(ylab),shape=s02a_02,colour=area,size=ynolab))+geom_point()+facet_wrap(~depto+p0)

#2 variables 1 cuanti cuali
ggplot(bd,aes(ylab,area))+geom_boxplot()
ggplot(bd,aes(area,ylab))+geom_boxplot()
ggplot(bd,aes(area,ylab))+geom_violin()
ggplot(bd,aes(area,ylab))+geom_violin()+facet_wrap(~depto)
ggplot(bd,aes(depto,log(ylab)))+geom_violin()+facet_wrap(~area)
ggplot(bd,aes(area,ylab))+geom_jitter()


ggplot(mpg, aes(x = displ, y = hwy)) + 
  geom_area()

# 1 variable cualitativa
ggplot(bd,aes(depto))+geom_bar(colour="blue",fill="red",alpha=0.1)
#Etiquetas
g1<-ggplot(bd,aes(depto))+geom_bar(colour="blue",fill="red",alpha=0.1)+ggtitle("Departamentos")+xlab("Departamento")

g1+ylab("Frecuencia")+ylim(0,1000)

#guardar 
pdf("g1.pdf")
g1+ylab("Frecuencia")+ylim(0,1000)
dev.off()
#temas 
ggplot(bd,aes(depto))+geom_bar()+theme_gray()
ggplot(bd,aes(depto))+geom_bar()+theme_bw()
ggplot(bd,aes(depto))+geom_bar()+theme_dark()
ggplot(bd,aes(depto))+geom_bar()+theme_minimal()
ggplot(bd,aes(depto))+geom_bar()+theme_light()
ggplot(bd,aes(depto))+geom_bar()+theme_void()
ggplot(bd,aes(depto))+geom_bar()+theme_classic()
#temas
theme_bw()
theme_grey()
theme_linedraw()
theme_light()
theme_dark()
theme_minimal()
theme_classic()
theme_void()

1.15 Flexdashboard

Es una librería de R que permite crear tableros de datos (dashboard), la salida final esta diseñada para un entorno web (html).

install.packages("flexdashboard")
library(flexdashboard)

1.16 Shiny

Shiny es una librería de RStudio orientada a crear aplicaciones web interactivas con R. Una vez instalada existen dos formas de crear una aplicación en Shiny. Una alternativa cada vez mas popular es la de crear un documento shiny junto con Markdown.

  1. Mediante un solo archivo denominando app.R
  2. Mediante dos archivos separados, el server.R y ui.R

Se recomienda que en cualquiera de las dos alternativas, estos archivos estén contenidos en alguna carpeta. Existen dos partes esenciales al momento de definir una app en Shiny, el UI que es una función que define la interfaz de la aplicación y el Server que define una función con instrucciones sobre cómo construir y reconstruir los objetos R que se mostraran en la UI. La composición básica según las formas de aplicarlas son:

# app.R
library(shiny)
ui <- fluidPage(
numericInput(inputId = "n",
"Sample size", value = 25),
plotOutput(outputId = "hist")
)
server <- function(input, output) {
output$hist <- renderPlot({
hist(rnorm(input$n))
})
}
shinyApp(ui = ui, server = server)
# ui.R

fluidPage(
numericInput(inputId = "n",
"Sample size", value = 25),
plotOutput(outputId = "hist")
)

# server.R

function(input, output) {
output$hist <- renderPlot({
hist(rnorm(input$n))
})

1.16.1 UI

Al ser UI la interfaz esta permite la interacción directa con el usuario, a estas se las denominan los entradas \(input\), las opciones de input son:

  • Botón de acción: actionButton(inputId, label, icon)
  • Enlace: actionLink(inputId, label, icon,)
  • Check box múltiple: checkboxGroupInput(inputId,label, choices, selected, inline)
  • Check box simple: checkboxInput(inputId, label,value)
  • Fecha: dateInput(inputId, label, value,min, max, format, startview,weekstart, language)
  • Rango de fecha: dateRangeInput(inputId, label,start, end, min, max, format,startview, weekstart, language,separator)
  • Cargar archivo: fileInput(inputId, label, multiple,accept)
  • Entrada numérica: numericInput(inputId, label, value,min, max, step)
  • Tipo contraseña: passwordInput(inputId, label,value)
  • Selección tipo botones: radioButtons(inputId, label,choices, selected, inline)
  • Seleccionable: selectInput(inputId, label, choices,selected, multiple, selectize,width, size)
  • Slider: sliderInput(inputId, label, min,max, value, step, round, format,locale, ticks, animate, * width,sep,pre, post)
  • Enviar submitButton(text, icon)
  • Entrada de texto textInput(inputId, label, value)

Los inputs principalmente tienen dos argumentos el inputId que se refiere al identificador del input, este se utiliza en el server, y el label que es la etiqueta que aparece en la interfaz visual, estos inputs se asignan a algún objeto (xx<-input()). En el server se tiene acceso al input mediante input$xx.

1.16.2 Server

En cuanto el server, este usa los distintos inputs para generar las salidas (outputs), las opciones de salidas disponibles son:

  • DT::renderDataTable(expr, options,callback, escape, env, quoted)
  • renderImage(expr, env, quoted,deleteFile)
  • renderPlot(expr, width, height, res, …,env, quoted, func)
  • renderPrint(expr, env, quoted, func,width)
  • renderTable(expr,…, env, quoted, func)
  • renderText(expr, env, quoted, func)
  • renderUI(expr, env, quoted, func)

Estos outputs “render” se asignan a un objeto y luego ellos deben ser incluidos dentro del UI con su correspondiente Output:

  • dataTableOutput(outputId, icon, …)
  • imageOutput(outputId, width, height,click, dblclick, hover, hoverDelay, inline,hoverDelayType, brush, clickId,hoverId)
  • plotOutput(outputId, width, height, click,dblclick, hover, hoverDelay, inline,hoverDelayType, brush, clickId,hoverId)
  • verbatimTextOutput(outputId)
  • tableOutput(outputId)
  • textOutput(outputId, container, inline)
  • uiOutput(outputId, inline, container, …) y htmlOutput(outputId, inline, container, …)

1.17 Ejercicios Propuestos

  1. Crear una función que devuelva los \(k\) primeros números primos
  2. Crear una función que calcule la mediana para tablas de frecuencias con intervalos de clases
  3. Crear una función que calcule los Quantiles para tablas de frecuencias con intervalos de clases
  4. Realice una función para el calculo del tamaño de muestra para el muestreo aleatorio simple, considere la media, el margen de error relativo y coeficientes de confianza.
  5. Crear una función que realice la prueba de independencia Chi-cuadrado
  6. Empleando la ENDSA muestre por año y departamento el porcentaje de personas que fuman
  7. Utilizando la base de datos del COVID-19 genere un gráfico de evolución de contagios, muertes y recuperados. Use los gráficos de origen
  8. Utilizando la base de datos del COVID-19 genere un gráfico de evolución de contagios, muertes y recuperados. Use ggplot
  9. Utilizando la encuesta 2018, genere un reporte que presente:
    • Total de población y viviendas por departamento y área
    • Pobreza moderada por Departamento y área
    • Indice de Gini por departamento
  10. Realice una función en Shiny empleando la base de datos electoral del \(20o\) que permita ver los resultados por recinto, seleccionando, su país, departamento, municipio, recinto.
  11. Usando la EH 2018, determine el porcentaje de personas que sufrieron un Atraco (Robo a personas) en la vía pública en los últimos 12 meses.