1 Introduccion a R

R es un lenguaje de programación estadístico que surge a partir del leguaje S que fue desarrollado por el Bell Laboratory dentro de AT&T.

Por su accesibilidad, R es utilizado por numerosos investigadores y universidades lo que lo haCe un lenguaje confiable y que gracias a la comunidad científica se mantiene actualizado y vigente.

La forma en la cual interactuamos con R es por medio de una interface visual denominada R Studio. Aún cuando hay otras plataformas, R studio es quizás la más utilizada gracias a su integración con servicios en la nube como Azure y AWS

Para descargar R y RStudio pudes dar click en:

R-project

RStudio

Para una introducción más profunda puedes ir a https://www.youtube.com/watch?v=lL0s1coNtRk

1.1 Operaciones básicas en R

#R pede manejar escalares y operaciones aritmeticas basicas

#Presione Ctr+Enter para ejecutar las lineas de comando
#Este es un Numero

1
## [1] 1
#Esta es la suma de dos números

1 + 4
## [1] 5
4 - 10
## [1] -6
#Operaciones aritméticas

34 * 90 #Multiplicacion
## [1] 3060
1200 / 90.4 #Division
## [1] 13.27434
#Esta es una secuencia de numeros
1 : 200
##   [1]   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18
##  [19]  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36
##  [37]  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54
##  [55]  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72
##  [73]  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90
##  [91]  91  92  93  94  95  96  97  98  99 100 101 102 103 104 105 106 107 108
## [109] 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
## [127] 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
## [145] 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
## [163] 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180
## [181] 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198
## [199] 199 200
#R puede almacenar Numero en variables y hacer operaciones con ellas

x = 4
y = 13

x + y #Suma
## [1] 17
x - y # Resta
## [1] -9
x * y # Multiplicacion
## [1] 52
x / y # Division
## [1] 0.3076923
x ^ y #Exponenciacion
## [1] 67108864
(x + y) ^ 2 #Suma de Cuadrados
## [1] 289
(x + y) ^ x #Exponenciacion de una suma
## [1] 83521
#Podemos almacenar una operacion entre dos o mas variables en na variable y operar sobre esta variable

z = x + y - 4
z = pi * z #multiplicar por PI
print(z) #Imprimir z
## [1] 40.8407

1.2 Listas y Vectores

# Tambien es posible trabajar con listas/vectores

x = c(1, 2, 3, 4)
print(x)
## [1] 1 2 3 4
#Podemos hacer operaciones 1 a 1 entre listas
y = c(5, 6, 7, 8)

x + y  #suma
## [1]  6  8 10 12
x - y  #Resta
## [1] -4 -4 -4 -4
x * y  #Multiplicar
## [1]  5 12 21 32
x / y  #Dividir
## [1] 0.2000000 0.3333333 0.4285714 0.5000000
x ^ y  #Exponenciar
## [1]     1    64  2187 65536
#Para trabajar con Matrices

x = matrix(c(1:10), nrow = 2)  # Esta es una matriz de 2 x 5
print(x)
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    3    5    7    9
## [2,]    2    4    6    8   10
x = matrix(c(1:10), nrow = 5)  # Esta es una matriz de 5 x 2
print(x)
##      [,1] [,2]
## [1,]    1    6
## [2,]    2    7
## [3,]    3    8
## [4,]    4    9
## [5,]    5   10
# Existen algunas matrices especiales como la matriz identidad, Zeros o
# NAN´s
x = diag(10)  # matriz identidad de 10 x 10
print(x)
##       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
##  [1,]    1    0    0    0    0    0    0    0    0     0
##  [2,]    0    1    0    0    0    0    0    0    0     0
##  [3,]    0    0    1    0    0    0    0    0    0     0
##  [4,]    0    0    0    1    0    0    0    0    0     0
##  [5,]    0    0    0    0    1    0    0    0    0     0
##  [6,]    0    0    0    0    0    1    0    0    0     0
##  [7,]    0    0    0    0    0    0    1    0    0     0
##  [8,]    0    0    0    0    0    0    0    1    0     0
##  [9,]    0    0    0    0    0    0    0    0    1     0
## [10,]    0    0    0    0    0    0    0    0    0     1
x = matrix(data = NA, nrow = 5, ncol = 3)  #Matriz con elementos Nulos de 5 x 3
print(x)
##      [,1] [,2] [,3]
## [1,]   NA   NA   NA
## [2,]   NA   NA   NA
## [3,]   NA   NA   NA
## [4,]   NA   NA   NA
## [5,]   NA   NA   NA
x = matrix(data = 0, nrow = 5, ncol = 3)  #MAtriz con elementos 0 de 5 x 3
print(x)
##      [,1] [,2] [,3]
## [1,]    0    0    0
## [2,]    0    0    0
## [3,]    0    0    0
## [4,]    0    0    0
## [5,]    0    0    0
# Podemos definir una matriz por sus renglones y columnas

rownames = c("MX", "CO", "row3", "row4")
colnames = c("pep", "log", "col3")

x = matrix(c(3:14), nrow = 4, byrow = TRUE, dimnames = list(rownames, colnames))
print(x)
##      pep log col3
## MX     3   4    5
## CO     6   7    8
## row3   9  10   11
## row4  12  13   14

1.3 Indexación y slicing

#Una de las funcionalidades de R es la indexación y la indexación lógica. Cada vector o matriz dentro 
#de R puede indexarse de la siguiente forma: Objeto[renglon_i, columna_j]

# Podemos acceder a uno o varios elementos de una matriz x[renglon, columna]

print(x)
##      pep log col3
## MX     3   4    5
## CO     6   7    8
## row3   9  10   11
## row4  12  13   14
x[1, 2]
## [1] 4
# Podemos accesar a uno o varios elementos de una matriz x[renglon, 1 : columna_j]
x[1, 1:3]
##  pep  log col3 
##    3    4    5
# Podemos accesar a uno o varios elementos de una matriz x[1 : renglon_i, 1 : columna_j]
x[1:2, 1:3]
##    pep log col3
## MX   3   4    5
## CO   6   7    8
#La indexación logíca toma todos los renglones y/o columnas que cumplen con una condición dada:
#Por ejemplo, queremos seleccionar todos los elementos que sean maores a 5

x > 5
##        pep   log  col3
## MX   FALSE FALSE FALSE
## CO    TRUE  TRUE  TRUE
## row3  TRUE  TRUE  TRUE
## row4  TRUE  TRUE  TRUE

1.4 Tipos de datos en R

#R reconoce varios tipos de datos:
  
#Number
#Character
#Factor
#Logic
#Date

"a"  #es de tipo String o Text tmabien puede ser tratado cono Nivel de un Factor
## [1] "a"
as.Date("2018-01-01")  #Es una Fecha en formato  YYYY-MM-DD
## [1] "2018-01-01"
TRUE  #Es un dato Lógico
## [1] TRUE
# Una serie, lista o vector puede contener todo tipo de datos:
x = c("2018-01-01", 1, "a", FALSE, TRUE, NA, Inf)
print(x)
## [1] "2018-01-01" "1"          "a"          "FALSE"      "TRUE"      
## [6] NA           "Inf"
#Podemos saber el tipo de datos de un objeto en r con str(data)
str(x)
##  chr [1:7] "2018-01-01" "1" "a" "FALSE" "TRUE" NA "Inf"

1.5 El Data Frame

#A un arreglo matricial que consta de distintos tipos de datos se le conoce como Data Frame

x = data.frame(Date = c("2018-01-01", "2018-02-01", "2018-03-01"), 
               Edad = c(23, 34, 45), Genero = c("M", "M", "H"))
str(x)  #Función para obtener información de un Data frame
## 'data.frame':    3 obs. of  3 variables:
##  $ Date  : chr  "2018-01-01" "2018-02-01" "2018-03-01"
##  $ Edad  : num  23 34 45
##  $ Genero: chr  "M" "M" "H"
print(x)
##         Date Edad Genero
## 1 2018-01-01   23      M
## 2 2018-02-01   34      M
## 3 2018-03-01   45      H
#Un Data Frame se dice que está en formato TIDY (tidydata) si tiene observaciones en los renglones 
#y variables en las columnas. Cada Dataframe tiene un indice que se refiere a la 
#posición de un dato como Dataframe[Row_Name, Col_Number]

#Existen varias formas para referirse a alos elementos de un Dataframe. 
#Por ejemplo, estas dos piezas de código se refieren a la misma columna:

x$Date  #Hace referencia al dataframe 'x' a la columna 'Date'
## [1] "2018-01-01" "2018-02-01" "2018-03-01"
x[1, ]
x[, 1]
## [1] "2018-01-01" "2018-02-01" "2018-03-01"
x[1 : 2, 2 : 3]
x[x$Edad > 30, ]
#Vamos a usar un data frame pre cargado con el nombre de ‘mtcars’ el cual tiene varias 
#caracterisitcas de distintos autos

head(mtcars)  #muestra los primeros 6 renglones del data frame mtcars
tail(mtcars)  #muestra los ultimos 6 renglones del data frame mtcars
nrow(mtcars)  #muestra el numero de renglones del dataframe mtcars
## [1] 32
ncol(mtcars)  #muestra el numero de columnas del data frame mtcars
## [1] 11
mtcars[2:5, ]  #muestra los renglones 2 al 5 con todas sus columnas
mtcars[2:5, 1:3]  #muestra los rengloes 2 al 5 con las columnas 1 al 3
#Tambien podemos crear nuevas columnas. Vamos a crear una columna que tenga la division entre hp/cyl. 
#Para preservar el data frame original, creamos un segundo dataframe con el nombre mtcars2

mtcars2 = mtcars

#Creamos la variable Calculada hp/cyl

mtcars2$hp.cly = 2 * (mtcars2$hp / mtcars2$cyl)
mtcars2$hp.cly = mtcars2$hp.cly / pi

1.5.1 Indexación Lógica

#Una de las cosas poderosas es la indexacion logica, la cual permite filtrar valores en un 
#data frame dada una condición dependiente de alguno de los operadores lógicos de R:
  
#Mayor que y menor que: >=, <=
#AND: &
#OR: |
#Igual a: ==
#Distinto a: !=

x = mtcars[mtcars$cyl == 6, ]  #nos quedamos con todos los renglones que tienen 6 cilindros
print(x)
##                 mpg cyl  disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4      21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag  21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
## Hornet 4 Drive 21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
## Valiant        18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
## Merc 280       19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
## Merc 280C      17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
## Ferrari Dino   19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
x = mtcars[mtcars$cyl != 6, ]  #nos quedamos con todos los renglones distintos de 6 cilindros
print(x)
##                      mpg cyl  disp  hp drat    wt  qsec vs am gear carb
## Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
## Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
## Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
## Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
## Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
## Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
## Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
## Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
## Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
## Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
## Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
## Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
## Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
## Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
## Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
## Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
## AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
## Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
## Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
## Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
## Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
## Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
## Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
## Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
## Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2
x = mtcars[mtcars$cyl < 6, ]  #nos quedamos con todos los renglones con menos de 6 cilindros
print(x)
##                 mpg cyl  disp  hp drat    wt  qsec vs am gear carb
## Datsun 710     22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
## Merc 240D      24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
## Merc 230       22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
## Fiat 128       32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
## Honda Civic    30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
## Toyota Corolla 33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
## Toyota Corona  21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
## Fiat X1-9      27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
## Porsche 914-2  26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
## Lotus Europa   30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
## Volvo 142E     21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2
# Todos los autos com mas de 6 cilindros Y menos de 123 hp
x = mtcars[(mtcars$cyl > 6 & mtcars$hp <= 123), ]
print(x)
##  [1] mpg  cyl  disp hp   drat wt   qsec vs   am   gear carb
## <0 rows> (or 0-length row.names)
# Todos los autos com mas de 6 cilindros O menos de 123 hp
x = mtcars[(mtcars$cyl > 6 | mtcars$hp <= 123), ]
print(x)
##                      mpg cyl  disp  hp drat    wt  qsec vs am gear carb
## Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
## Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
## Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
## Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
## Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
## Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
## Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
## Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
## Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
## Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
## Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
## Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
## Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
## Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
## Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
## Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
## Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
## Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
## Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
## Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
## Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
## Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
## AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
## Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
## Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
## Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
## Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
## Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
## Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
## Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
## Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2

1.6 Base plot

#Histograma

hist(mtcars$hp,                                            #Variable a graficar
     xlab = 'Caballos de Fuerza [HP]',                     #Titulo eje de las X´s
     main = 'Histograma de HP',                            #Titulo del gráfico
     col = 'red')                                          #Color de relleno   

#Boxplot

boxplot(mtcars$hp ~ factor(mtcars$cyl), 
        main = "Boxplot HP vs Cilindros", 
        col = "red", 
        xlab = "Cilindros", ylab = "HP")  #Titulo del eje Y  

#Scatter Plot

plot(y = mtcars$hp, x = mtcars$wt,          
     col = factor(mtcars$cyl),                             #Color del punto
     main = 'HP vs WT',                                    #Titulo
     pch = 16,                                             #Tipo de punto
     cex = 2)                                              #Tamaño del punto

#Crear un Panel con multiples graficos

par(mfrow = c(1, 2))  # number of rows, number of columns

# Histograma
hist(mtcars$hp, xlab = "Caballos de Fuerza [HP]", main = "Histograma de HP", 
     col = "red")

# Scatter plot
plot(y = mtcars$hp, x = mtcars$wt, col = factor(mtcars$cyl), main = "HP vs WT", 
     pch = 16, cex = 2)

#Matriz de Correlaciones
pairs(mtcars[, c(1, 3, 6)], col = "red", main = "Matrix Plot")

par(mfrow = c(1, 1))
plot(mtcars$drat, type = 'l')