Chapter 1 Introducción a R
R es un software de libre distribución
1.1 ¿Qué es R?

Comparación perfecta
### 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
- aRrgh: a newcomer’s (angry) guide to R by Tim Smith and Kevin Ushey
- Introductory Statistics with by Peter Dalgaard
- R tarjeta de comandos http://cran.r-project.org/doc/contrib/Short-refcard.pdf
- Tutorial de R http://www.cyclismo.org/tutorial/R/
- R project and Bioconductor
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
- R-CRAN https://cran.r-project.org/ (elija el Sistema operativo, descargue y siguiente, siguiente…)
- R-Studio https://www.rstudio.com/ (elija el Sistema operativo, descargue y siguiente, siguiente…)
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')
::install_github('rstudio/rmarkdown') devtools
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 —
---
: Mi documento
title: Juan Perez
author: Marzo 22, 20220
date: html_document
output---
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,
://example.com) [linked phrase](http
Imágenes simples o con titulo,


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
`r <code>` ... texto 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
# comando para pedir ayuda
?mean ?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)
<-5
x=10
y15->z
<<-20
x1<-"Hola"
x2<-'hola'
x3*y^x z
## [1] 1500000
+z x1
## [1] 35
<-(4>5)
x4<-(y>x^2) x5
Trate de usar nombres significativos! Miren esto:
1.3.5 Clases en R
<-50
y1<-"hola"
y2<-(56>60)
y3<-NA
y4<-NULL
y5
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"
<-"12314234"
zclass(z)
## [1] "character"
<-as.numeric(z)
z2class(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
<-1
x<-"hola"
y<-TRUE
i<-FALSE
j<-F w
- Vectores: Colección de valores simples. Los vectores en R son vectores columna
# definición
<-c(2,4,6)
x1<-c(1,2,3,4,7,9,4,2)
x2<-c("hola","chau","adios","hola")
x3<-c(T,T,T,F,F,F,F,T,F,T,F,F,F)
x4<-c(1,2,3,T,T,"Hola")
x5<-c(1,2,3,T,T,F,F)
x6# operaciones con vectores
+x1 x1
## [1] 4 8 12
+x2 # mal ejemplo x1
## 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
**2 x1
## [1] 4 16 36
/x1 x1
## [1] 1 1 1
>5 x2
## [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
<-1:10
v1<-1:10000
v2sum(v2) #sumar
## [1] 50005000
<-100:1
v3<-99:0
v4
<-seq(1,100,2)
v5<-seq(0,1,0.01)
v6seq(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
<-rep(1,100) # repetir algo
v7<-rep(c(1,2,3),10)
v8<-rep(c("hola","cómo","estas","?"),10)
v9length(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)
<-runif(100,10,20)
xmean(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
<-round(x,10)
z<-rnorm(100000,10,5)
yhist(y)
- Matrices
<-matrix(c(1,2,3,4),2,2)
Amatrix(c(1,2,3,4),2,2,byrow=T)
## [,1] [,2]
## [1,] 1 2
## [2,] 3 4
<-A>=2
B 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
<-matrix(c(2,5,3,7),2,2)
Csolve(C)
## [,1] [,2]
## [1,] -7 3
## [2,] 5 -2
det(C)
## [1] -1
# operaciones con matrices
+C A
## [,1] [,2]
## [1,] 3 6
## [2,] 7 11
-C A
## [,1] [,2]
## [1,] -1 0
## [2,] -3 -3
*C # elemento a elemento A
## [,1] [,2]
## [1,] 2 9
## [2,] 10 28
%*% C # Multiplicación matricial A
## [,1] [,2]
## [1,] 17 24
## [2,] 24 34
t(C)# transpuesta
## [,1] [,2]
## [1,] 2 5
## [2,] 3 7
<-C %*% t(C) # Simétrica
D%*% solve(C) # Inversa C
## [,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
<-1:8
id<-c("adriana","anahi","miguel","rayner","rebeca","sergio","vania","yoselin")
name<-c(1,1,0,0,1,0,1,1)
mujer<-data.frame(id,name,mujer)
bd 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
$edad<-round(runif(8,19,25),0)
bd 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.
<-list(bd,bd,C,1:10000,"Hola",1:10^6)
w1 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
<-list(w1,w1,list(w1,C),C,1:1000) # R puede encapsular objetos de tipo
w2str(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
<-1:100
xc(1,5,7)] x[
## [1] 1 5 7
-c(1,5,7)] x[
## [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
<-(x %% 2)==0
o 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
<-c(2,3,7,4)
x2c(T,T,F,F)] x2[
## [1] 2 3
#matrices
<-matrix(1:30,5,6)
A3, 4] A[
## [1] 18
3, ] A[
## [1] 3 8 13 18 23 28
c(1,4), ] A[
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 6 11 16 21 26
## [2,] 4 9 14 19 24 29
1:2 ] A[,
## [,1] [,2]
## [1,] 1 6
## [2,] 2 7
## [3,] 3 8
## [4,] 4 9
## [5,] 5 10
-c(1:2) ] A[,
## [,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
3:4,c(1,3)] A[
## [,1] [,2]
## [1,] 3 13
## [2,] 4 14
c(T,T,F,T,T),c(T,F,T,T,T,F)] A[
## [,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
1:3,2:3] bd[
## name mujer
## 1 adriana 1
## 2 anahi 1
## 3 miguel 0
# también es posible usar el nombre de las variables
1:6,c("name","id")] bd[
## name id
## 1 adriana 1
## 2 anahi 2
## 3 miguel 3
## 4 rayner 4
## 5 rebeca 5
## 6 sergio 6
-c(3)] bd[,
## 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
$mujer bd
## [1] 1 1 0 0 1 0 1 1
mean(bd$mujer)
## [1] 0.625
c(2,6,8),] bd[
## id name mujer edad
## 2 2 anahi 1 22
## 6 6 sergio 0 21
## 8 8 yoselin 1 21
$edad<=21 & bd$mujer==1,] bd[bd
## id name mujer edad
## 8 8 yoselin 1 21
#bd %>% filter(mujer==1 & edad<=21)
1.6 Loops y condiciones
rm(list = ls())
<-5
x## 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
<-60
xif(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){
<-i*j
auxprint(aux)
if(aux==20){
break()
print("hola")
boxplot(rnorm(100,i,j))
}
}
}
for(i in 1:50){
print(i)
if(i==20){
break()
}
}
#while
<-1
z<-1
kwhile(z>0.0001){
print(k)
<-1/k
z<-k+1
k
}==0.0001 z
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\)
<-function(x){
nombrefuncionprint("Hola")#procedimiento 1
<-x^2 #procedimiento 2
yreturn(y)
}nombrefuncion(x=2)
nombrefuncion(x=2:10)
<-nombrefuncion(x=1:100)
x2
x2<-nombrefuncion(2:5)
x3
x3###### funciones matemáticas
<-function(x){
ff<-x^2
yreturn(y)
}<-function(x){
gg<-log(x)
yreturn(y)
}<-function(x){
hh<-exp(-x^2)
yreturn(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
<-function(x){
tarea1<-sum(x[x %% 2 ==0])
s1<-sum(x)
s2<-sd(x)/mean(x)
s3return(list(suma_pares=s1,suma=s2,cv=s3))
}tarea1(1:10)
####################################################
<-function(x){
tarea1_altreturn(list(suma_pares=sum(x[x %% 2 ==0]),suma=sum(x),cv=sd(x)/mean(x)))
}tarea1_alt(1:10)
tarea1(rnorm(100))
<-1:10
xsum(1:10)
cumsum(1:10)
tail(cumsum(1:10),1)
# el comando scan permite leer los datos directamente por la consola
<-scan()
xxtarea1(xx)
Otros ejemplos,
<-function(x){
fx<-8*x**2
yreturn(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
<-function(x){
tendencia<-length(x)
ncat("media:",fill = T)
print(sum(x)/n)
cat("mediana:",fill = T)
<-sort(x)
xif(n%%2==0){
<-(x[n/2]+x[n/2+1])/2
meelse {
} <-x[ceiling(n/2)]
me
}print(me)
cat("moda:",fill = T)
<-table(x)
tt<-max(tt)
mmprint(names(tt)[(table(x)==mm)])
cat("media cuadrática:",fill = T)
<-sqrt(sum(x**2)/n)
mcprint(mc)
cat("media armónica",fill = T)
<-n/sum(1/x)
maprint(ma)
cat("media geométrica:",fill = T)
<-prod(x)**(1/n)
mgprint(mg)
}
<-function(x){
tendencia2<-length(x)
n<-sum(x)/n
media<-sort(x)
xif(n%%2==0){
<-(x[n/2]+x[n/2+1])/2
meelse {
} <-x[ceiling(n/2)]
me
}<-table(x)
tt<-max(tt)
mm<-names(tt)[(table(x)==mm)]
mo<-sqrt(sum(x**2)/n)
mc<-n/sum(1/x)
ma<-prod(x)**(1/n)
mg<-list(media,me,mo,mc,ma,mg)
auxreturn(aux)
}<-tendencia2(xx)
a
<-function(x,f){
tendenciaF<-sum(f)
n<-sum(x*f)/n
media }
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
<-read.csv("municipales2015.csv")
mun15#trabajar con librerías
library(foreign) #habilitar una librería
<-read.dta("DBvivienda2012vf_9.dta") bd12pv
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")
<-read.csv("lp_2021.csv",sep="|",header = T)
bd# exploración
names(bd)
names(eh19v)
attributes(bd)
<-attributes(eh19v)
ehvat
head(bd)
tail(bd)
View(bd)
View(eh19p)
# Renombrando variables
# R base
names(eh19p)[5]<-"sexo"
# dplyr "anidar acciones" pipeline %>%
<-eh19p %>% rename(edad=s02a_03)
eh19p
# Filtrar bases de datos (filas)
## filtrar por tipo de elección en bd
<-unique(bd$DESCRIPCION)
aux<-bd[bd$DESCRIPCION=="GOBERNADOR(A)" , ] # R base
bdgob<-subset(bd,DESCRIPCION=="ASAMBLEISTA TERRITORIO") # R base
bdast
<-bd %>% filter(DESCRIPCION=="ASAMBLEISTA POBLACION") # dplyr
bdasp<-bd %>% filter(DESCRIPCION==aux[4])
bdalc<-bd %>% filter(DESCRIPCION==aux[5])
bdcon## filtrar solo a jefes/as del hogar eh19
#tarea ...
# Seleccionar variables (columnas)
## R base
<-eh19p[,c("edad","sexo")]
aux2<-subset(eh19p,select = c("edad","sexo") )
aux3<-eh19p[,-c(4:50,100)]
aux4## dplyr
<-eh19p %>% select(edad,sexo)
aux5<-eh19p %>% select(-edad,-sexo) aux6
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
<-rbind(bdalc,bdcon)
bdmun<-bind_rows(bdalc,bdcon) bdmun2
- Añadir columnas (variables): merge (R base) bind_cols (dplyr), asegurarse que ambas bases de datos tengan una variables de unión (key)
<-merge(eh19p[,c("edad","folio","sexo")],eh19v[,c("folio","s01a_10")],"folio")
bdpvView(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
<-unique(eh19p$s02a_05)
aux<-eh19p %>% filter(s02a_05==aux[1])
bdj#selección de variables para el/la jefa/jefa
<-bdj %>% select(folio,depto,area,s02a_02,s02a_03,s02a_10,p0, pext0, niv_ed, niv_ed_g, aestudio)
bdj#selección de variables para la vivienda
<-eh19v %>% select(folio,s01a_06,s01a_08,s01a_09,s01a_10,s01a_15,s01a_16)
bdv# unir las bases de datos,
<-merge(bdj,bdv,"folio") bdj
1.11 Estadística descriptiva
##tablas de frecuencias y Porcentajes
<-table(bdj$depto)# frecuencias
t1<-prop.table(t1)*100
t2<-cumsum(t1)
t3
<-cbind(t1,t3,t2)
tabla1
tabla1barplot(t1)
pie(t2)
#tabla de contingencia
<-table(bdj$depto,bdj$s02a_02)
t4<-prop.table(t4)#celda
t5sum(t5)
<-prop.table(t4,1)*100#fila
t6<-prop.table(t4,2)*100#columna
t7<-addmargins(t4)
t8addmargins(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
%>% group_by(Departamento=depto,sexo=s02a_02) %>% summarise(media=mean(s02a_03),Me=median(s02a_03))
bdj
#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)
%>% group_by(Departamento=depto,sexo=s02a_02) %>% summarise(media=mean(s02a_03),Me=median(s02a_03),sd_media=sd(s02a_03))
bdj 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)
$edadg<-cut(bdj$s02a_03,c(15,25,50,98))
bdjtable(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
<-svydesign(ids= ~upm ,strata = ~estrato,weights = ~factor,data=eh19p)
sd1<-svymean(~s02a_03,design = sd1,deff=T)
r1
r1confint(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\)
<-c(23,45,64,22,NA,NA,78,54)
xmean(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")
<-c(3,4,7,2)
x<-c(0,6,9,2)
yplot(x,y,type="p")
plot(x,y,type="h")
plot(x,y,type="l")
order(x)]
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)
<-sample(1:39605,2000)
s<-eh19p[s,]
bd
# 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
<-ggplot(bd,aes(depto))+geom_bar(colour="blue",fill="red",alpha=0.1)+ggtitle("Departamentos")+xlab("Departamento")
g1
+ylab("Frecuencia")+ylim(0,1000)
g1
#guardar
pdf("g1.pdf")
+ylab("Frecuencia")+ylim(0,1000)
g1dev.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.
- Mediante un solo archivo denominando app.R
- 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)
<- fluidPage(
ui numericInput(inputId = "n",
"Sample size", value = 25),
plotOutput(outputId = "hist")
)<- function(input, output) {
server $hist <- renderPlot({
outputhist(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) {
$hist <- renderPlot({
outputhist(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
- Crear una función que devuelva los \(k\) primeros números primos
- Crear una función que calcule la mediana para tablas de frecuencias con intervalos de clases
- Crear una función que calcule los Quantiles para tablas de frecuencias con intervalos de clases
- 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.
- Crear una función que realice la prueba de independencia Chi-cuadrado
- Empleando la ENDSA muestre por año y departamento el porcentaje de personas que fuman
- 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
- Utilizando la base de datos del COVID-19 genere un gráfico de evolución de contagios, muertes y recuperados. Use ggplot
- 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
- 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.
- 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.