Aquí se fijan opciones de manera global para los chunks, y se pueden cambiar

1 Manejo básico de datos en R-studio

Primero, ¿por qué R? Bueno, como en todo lo gratis (sí, R es gratis), la comunidad de usuarios y programadores crece (y creció) rápidamente. Así, se tienen una gran cantidad de paquetes que premitirán “crecer” a R. A diferencie de lo sucedido en la película The fight club, la comunidad de R constantemente habla del programa y está retroalimentando el desarrollo de éste.

R representa el presente en la programación estadística (y por ende, de la Ciencia de datos). A diferencia de Python, R no es tan general en sus conceptos y el manejo de datos y técnicas estadísticas es más intiutivo. Y yendo más allá, ya existen manera de interconectar a R y Python mediante conecciones seguras y aprovechar las fortalezas de cada uso en casos que así lo requiera. Un ejemplo de lo anterior son las paqueterías keras y tensoflow con las que cuenta R, en las cuales utilizan las API ya instaladas en Python y “manda” a procesar algoritmos de Machine Learning (y en general, de Inteligencia Artificial) a Python, regresando los resultados a R.

Otra ventaja de R es que es muy versátil. Puedes usar R para hacer de todo, desde calcular simples estadísticas de resumen, hasta realizar complejas simulaciones para crear magníficos gráficos como el diagrama de chord (muy utilizado en la rama de Estadística circular).

Utilizando Rstudio (que lo utilizaremos en este curso), un programa que te ayuda a escribir código de R, se puede combinar fácilmente código de R, gráficos, análisis y texto escrito tipo Sweave (R y Latex) o RMarkdown (estas notas están siendo hechas desde Markdown). De hecho, existen libros escritos desde RMarkdown. Otro ejemplo de dicha combinación de código y salidas de R es el siguiente:

#install.packages("circlize")
#library(circlize)
circlize::chordDiagram(matrix(sample(10), nrow = 2, ncol = 5))
Figura de interés

Figura de interés

Los análisis realizados en R son transparentes, fácilmente compartibles y reproducibles. Si le pregunta a un usuario de SPSS cómo realizó un análisis específico, él o bien A) No lo recordará, B) Intentará (nerviosamente) construir un procedimiento de análisis en el lugar que tenga sentido - que puede o no corresponder a lo que realmente hizo hace meses o años. Hoy en día, y como un ejercicio de transparencia científica, el análisis paso-a-paso en una investigación también es requerido por la comunidad científica para que también sea revisado y; por lo tanto, la aplicación de la técnica también revisada.

1.1 Ambiente de R-studio y descarga de paqueterías.

¿Ya tienen R y Rstudio ya instalados? Si no, primero descargar R desde aquí. Ya una vez instalado, se recomienda abrirlo y verificar que todo funcione bien. Una vez ya instalada la versión base de R, se debe de instalar Rstudio, el cual lo pueden descargar desde acá. Esta instalación de Rstudio utilizará la versión base de R recientemente instalada.

Rstudio en cuatro ventanas

Rstudio en cuatro ventanas

1.2 Descarga de paquetes

Cuando se descarga e instalas R por primera vez, estás instalando el software Base R (si es que no se eligió descargar el complmento de Rtools). R-Base cuenta con la mayoría de funciones que nosotros utilizamos en cursos básicos de estadística y para análisis generales tales como mean(), plot() contendrá la mayoría de las funciones que usarás diariamente como mean() e hist(). Sin embargo, sólo las funciones escritas por los autores originales del lenguaje R aparecerán aquí.

Si se pretende a datos y código escrito por otras personas, necesitarás instalarlo como un paquete. Un paquete R es simplemente un montón de datos, desde funciones, a menús de ayuda, a viñetas (ejemplos), almacenados en un solo paquete (usualmente .zip, .tar.gz ó .tgz).

La manera más intuitiva para instalar un paquete es en la cuarta ventana (se muestran archivos, gráficos, paquetes, ayuda y visualizador), seleccionar la pestaña paquetes, seleccionar instalar, seleccionar el repositorio y el nombre del paquete. La manera más rápida, que yo prefiero, es mediante instrucciones en la consola. Un ejemplo se muestra a continuación:

# Instalar un paquete desde el CRAN, mirror por default
#   Solo se tienen que instalar lo paquetes una vez en tu computadora!
#install.packages("readxl",repos = "https://cran.ma.imperial.ac.uk/")

Se debe de verificar de que dicha paquetería se haya instalado correctamente. En el caso que no, el error más común se debe a la falta de privilegios de administrador en la computadora, falla en la conexión mientras se descargaba la paquetería o falta de compatibilidad entre la versión de R y el paquete instalado.

Una vez instalado un paquete, ya está en tu computadora. Sin embargo, sólo porque esté en tu ordenador no significa que R esté listo para usarlo. Si quieres usar algo, como una función o un conjunto de datos de un paquete, siempre tienes que cargar primero el paquete en tu sesión de R. Al igual que un foco, ¡necesitas encenderlo para usarlo!

Instalar y llamar paquetes.

Instalar y llamar paquetes.

Para cargar un paquete, se utiliza la función library(). Por ejemplo, ahora que hemos instalado el paquete readxl, podemos cargarlo con library("readxl"):

#Recuerda que se tienen que cargar los paquetes utilizados (no instalados en la versión
#base), cada vez que se inicie sesión
#También se puede agregar el include=FALSE
library("readxl") #Se quitan esos molestos warnings

1.3 Manejo básico de datos

\(R\) es una poderosa herramienta para todo tipo de cálculos, manipulación de datos y análisis. Antes de llegar a las complejas operaciones posibles en R debemos empezar con lo básico. Como la mayoría de los lenguajes, R tiene su cuota de capacidad matemática, variables,funciones y tipos de datos.

Así, se comenzará con el “Hello world” de R, en la consola se escribe la expresión \(1+1\)

1+1
## [1] 2

Si esto devuelve 2, entonces todo está bien; si no, entonces algo está muy, muy mal.

Asumiendo que funcionó, veamos algunas expresiones un poco más complicadas:

#Suma de más de tres términos
1+5+6
## [1] 12
#Multiplicación
1*5*6
## [1] 30
#División
9/7
## [1] 1.285714
#Redondeo y truncamiento
round(9/7)
## [1] 1
floor(9/7)
## [1] 1

1.3.1 Asignación de variables

Hay varias maneras de asignar un valor a una variable, y de nuevo, esto no depende sobre el tipo de valor que se asigna. Los operadores de asignación válidos son <- y =, prefiriéndose el primero (personalmente). Por ejemplo, guardemos 2 a la variable x y 5 a la variable y.

x <- 2
x
## [1] 2
y <- 5
y
## [1] 5

El operador flecha -> puede funcionar bidireccionalmente:

2 -> x
x
## [1] 2
5 -> y
y
## [1] 5

1.3.2 Borrando variables

si por algún motivo se desea borrar alguna de las variables generadas en el ambiente de trabajo, éstas pueden ser borradas utilizando la función remove, o su abreviación rm

x <- 9
x
## [1] 9
rm(x)

Esto libera la memoria para que R pueda almacenar más objetos, aunque no necesariamente liberar la memoria para el sistema operativo. Para garantizar eso, use la función gc.
Para listar las variables generadas hasta el momento en en ambiente de R, se utiliza la función ls()

ls()
## [1] "y"

Los nombres de las variables son sensibles a las mayúsculas y minúsculas, lo que puede hacer tropezar a la gente que viene de un lenguaje como SQL o Visual Basic.

##Tipos de datos Hay una gran cantidad de tipos de datos en R. Los cuatro tipos principales de datos más probablemente se utilizarán son numéricos, de caracteres (cadena), Fecha/ POSIXct (basado en el tiempo) y lógico (VERDADERO/FALSO).

El tipo de datos contenidos en una variable se comprueba mediante la función class.

x<-3
class(3)
## [1] "numeric"

1.3.3 Datos numéricos

Como es de esperarse, R sobresale por su capacidad de procesamiento numérica, ya sea manejando grandes bases de datos o funciones complejas. El tipo de datos más utilizado en R es el numérico. Este es similar a un tipo float o double float. R maneja números enteros y decimales, tanto positivos como negativos, y por supuesto, cero. Se supone que un valor numérico almacenado en una variable es automáticamente numérico. La prueba de si una variable es numérica se hace con la función is.numeric.

is.numeric(x)
## [1] TRUE

1.3.4 Caracteres

Aunque no es explícitamente matemático, el tipo de datos de caracteres (cadena) es muy común en el análisis estadístico y debe ser manejado con cuidado. R tiene dos formas básicas de manejo de datos de caracteres: caracter y factor. Aunque pueden parecer similares inicialmente, se tratan de manera muy distinta, tanto desde la perspectiva del análisis, así como desde la perspectiva de manejo de datos.

z <- "datos"
z
## [1] "datos"
w<- factor("datos")
w
## [1] datos
## Levels: datos

Fíjese que la variable z contiene la palabra “datos” encerrada entre comillas, mientras que w tiene la palabra “datos” sin comillas y una segunda línea de información sobre los niveles de w. Los caracteres son sensibles a las mayúsculas y minúsculas, por lo que “Datos” es diferente de “datos” o “DATOS”.

Para determinar la longitud de un caracter (o numérico) se utiliza la función nchar(). Nota: Los espacios en blanco se cuentan como un carater.

nchar(z)
## [1] 5
nchar("Hola")
## [1] 4
nchar("Hola mundo")
## [1] 10

Lo anterior no funciona para variables de tipo factor

1.3.5 Fechas

Lidiar con fechas y horas puede ser difícil en cualquier idioma, y para complicar aún más la materia, R tiene numerosos tipos de fechas. Las más útiles son Date y POSIXct. Date almacena sólo una fecha, mientras que POSIXct puede almacenar una fecha y una hora. Ambos objetos son en realidad representados como el número de días (Fecha) o segundos (POSIXct) desde el 01 de enero de 1970.

fecha1 <- as.Date("2012-06-28")
fecha1
## [1] "2012-06-28"
class(fecha1)
## [1] "Date"
as.numeric(fecha1)
## [1] 15519
fecha2 <- as.POSIXct("2012-03-31 19:52")
fecha2
## [1] "2012-03-31 19:52:00 CST"
#install.packages("lubridate")
library(lubridate)
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union
year(fecha2)
## [1] 2012
month(fecha2)
## [1] 3

Nota: Existe una paquetería llamada lubridate la cual es muy útil para asignar formato de tipo fecha a variables numéricas y para cambiar el formato de la fecha. La paquetería llamada chron también ha mostrado cierta utilidad.

1.3.6 Lógicos

Los operadores lógicos son una forma de representar datos que pueden ser VERDADEROS o FALSOS. Numéricamente, VERDADERO es lo mismo que \(1\) y FALSO es lo mismo que \(0\). Así que \(5\)( VERDADERO ) es igual a \(5\), mientras que \(5\)*( FALSO ) es igual a 0.

TRUE*5
## [1] 5
FALSE*5
## [1] 0

Similar a los otros formatos de datos, los valores lógicos también cuentan con su propia prueba, is.logical

k <- TRUE
is.logical(k)
## [1] TRUE

En R también existen atajos para los valores lógicos, éstos son T y F para los valores de TRUE y FALSE, respectivamente.

Valores lógicos también pueden resultar a partir de la comparación de dos números o caracteres.

#¿es 12 igual a 13?
12 == 13 #Doble signo igual
## [1] FALSE
#¿Es doce "no igual" a 13?
12 != 13 
## [1] TRUE
# ¿es 12 menor a 13?
12 < 13
## [1] TRUE
# 12 menor o igual a 13
12 <= 13
## [1] TRUE
#Comparación de valores asignado a variables
dato_nuevo<-25
dato_nuevo2<-27
dato_nuevo<= dato_nuevo2
## [1] TRUE

1.4 Vectores

Un vector es una colección de elementos, todos del mismo tipo. Por ejemplo, c(1, 3, 2, 4, 5) es un vector que consiste en los números 1; 3; 2; 4; 5, en ese orden. De manera similar, c(“R”, “Excel”, “STATA”, “Excel”,“METPOL”) es un vector de los elementos de caracter, “R”, “Excel”, “STATA”, “Excel” y “METPOL”. Un vector no puede ser de tipo mixto.
Los vectores juegan un papel crucial y útil en R. Más que ser simples contenedores (apiladores), los vectores en R son especiales ya que R es un lenguaje vectorizado. Esto significa que las operaciones son aplicadas a cada elemento del vector automáticamente, sin necesidad de hacer un “bucle/loop/for” al vector. Este es un concepto poderoso que puede parecer extraño para la gente que viene de otros lenguajes de programación, pero ésta es una de las más grandes ventajas de R.
Los vectores no tienen una dimensión como tal, lo que significa que no hay tal cosa como una columna vector o vector de fila. Estos vectores no son como el vector en Álgebra lineal, donde hay una diferencia entre la orientación de las filas y las columnas (Los vectores-columna o vectores-fila pueden ser representados como matrices unidimensionales). La forma más común de crear un vector es con la letra c. La “c” significa concatenar porque múltiples elementos se combinan en un vector.

x <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

1.4.1 Operaciones con vectores

Hasta ahora, ya tenemos generado un vector llamado x de longitud \(10\). Si se quiere multiplicar cada elemento del vector por el escalar \(3\), en R se utiliza una operación simple usando el operador de multiplicación \((*)\).

x * 3
##  [1]  3  6  9 12 15 18 21 24 27 30

No son necesarios “ciclos”. La suma, la resta y la división son igual de fáciles. Esto también funciona para cualquier número de operaciones.

x - 3
##  [1] -2 -1  0  1  2  3  4  5  6  7
x + 3
##  [1]  4  5  6  7  8  9 10 11 12 13
x * 3
##  [1]  3  6  9 12 15 18 21 24 27 30
x / 3
##  [1] 0.3333333 0.6666667 1.0000000 1.3333333 1.6666667 2.0000000 2.3333333
##  [8] 2.6666667 3.0000000 3.3333333
x ^ 2 #Cada elemento al cuadrado
##  [1]   1   4   9  16  25  36  49  64  81 100

Anteriormente creamos un vector de los primeros diez números usando la función \(c\). Un atajo es el operador : y la función seq() que generan una secuencia de números, en cualquier dirección.

1:10
##  [1]  1  2  3  4  5  6  7  8  9 10
10:1
##  [1] 10  9  8  7  6  5  4  3  2  1
-2:3
## [1] -2 -1  0  1  2  3
5:-7
##  [1]  5  4  3  2  1  0 -1 -2 -3 -4 -5 -6 -7
seq(1,10)
##  [1]  1  2  3  4  5  6  7  8  9 10
seq(-10,1)
##  [1] -10  -9  -8  -7  -6  -5  -4  -3  -2  -1   0   1
seq(-10,1,by=0.5)
##  [1] -10.0  -9.5  -9.0  -8.5  -8.0  -7.5  -7.0  -6.5  -6.0  -5.5  -5.0  -4.5
## [13]  -4.0  -3.5  -3.0  -2.5  -2.0  -1.5  -1.0  -0.5   0.0   0.5   1.0

Las operaciones de los vectores pueden extenderse aún más. Digamos que tenemos dos vectores de igual longitud. Cada uno de los elementos correspondientes puede ser operados conjuntamente.

#Crear dos vectores de longitud igual
x <- 1:10
y <- -5:4
#Suma
x + y
##  [1] -4 -2  0  2  4  6  8 10 12 14
#Resta
x - y
##  [1] 6 6 6 6 6 6 6 6 6 6
#Multiplicación
x * y
##  [1] -5 -8 -9 -8 -5  0  7 16 27 40
#Dividir
x / y
##  [1] -0.2 -0.5 -1.0 -2.0 -5.0  Inf  7.0  4.0  3.0  2.5
#Elevar a la n potencia
x^y
##  [1] 1.000000e+00 6.250000e-02 3.703704e-02 6.250000e-02 2.000000e-01
##  [6] 1.000000e+00 7.000000e+00 6.400000e+01 7.290000e+02 1.000000e+04
#Verificar la longitud del vector
length(x)
## [1] 10
length(y)
## [1] 10
length(x+y)
## [1] 10

Las cosas se complican un poco más cuando se opera en dos vectores de longitud desigual. El vector más corto se recicla, es decir, sus elementos se repiten, en orden, hasta que se han emparejado con cada elemento del vector más largo. Si el más largo no es un múltiplo del más corto, se imprime una advertencia.

x + c(1, 2)
##  [1]  2  4  4  6  6  8  8 10 10 12
x + c(1, 2, 3)
## Warning in x + c(1, 2, 3): longer object length is not a multiple of shorter
## object length
##  [1]  2  4  6  5  7  9  8 10 12 11

Las comparaciones también funcionan con los vectores. Aquí el resultado es un vector de la misma longitud que contiene \(VERDADERO\) o \(FALSO\) para cada elemento.

x <= 3
##  [1]  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

Para comprobar si todos los elementos resultantes son VERDADEROS, utilice la función \(all\). Del mismo modo, la función \(any\) comprueba si algún elemento es VERDADERO.

x <- 10:1
y <- -4:5
any(x < y)
## [1] TRUE
all(x < y)
## [1] FALSE

La función \(nchar\) también actúa sobre cada elemento de un vector.

q<-c("Juan","Maria","Guadalupe","Mario","Maria Guadalupe","Mario")
nchar(q)
## [1]  4  5  9  5 15  5

El acceso a los elementos individuales de un vector se realiza mediante corchetes ([ ]). El primer elemento de x se recupera tecleando \(x[1]\), los dos primeros elementos por \(x[1:2]\) y los elementos no consecutivos por \(x[c(1, 4)]\).

1.4.2 Factores

Los \(factores\) son un concepto importante en R, especialmente cuando se construyen modelos. Vamos a crear un simple vector de datos de texto que tenga unas pocas repeticiones. Empezaremos con el vector q que creado anteriormente (q) y añadir algunos elementos a él.

q2<-c(q,"Juan","Maria","Guadalupe","Mario","Maria Guadalupe","Mario","Jose","Mario","Guadalupe")
#Ahora, se cambia el tipo de q2 a factor
q2Factor <- as.factor(q2)
q2Factor
##  [1] Juan            Maria           Guadalupe       Mario          
##  [5] Maria Guadalupe Mario           Juan            Maria          
##  [9] Guadalupe       Mario           Maria Guadalupe Mario          
## [13] Jose            Mario           Guadalupe      
## Levels: Guadalupe Jose Juan Maria Maria Guadalupe Mario

Nótese que después de imprimir cada elemento de q2Factor, R también imprime los niveles de q2Factor. Los niveles de un factor son los valores únicos de esa variable factorial. Técnicamente, R está dando a cada valor único de un factor un entero único, vinculándolo a la representación del caracter. Esto se puede ver con as.numeric.

as.numeric(q2Factor)
##  [1] 3 4 1 6 5 6 3 4 1 6 5 6 2 6 1

En los factores normales el orden de los niveles no importa y un nivel no es diferente de otro. En ocasiones, sin embargo, es importante entender el orden (variable tipo ordinal) como cuando se codifican los niveles de educación. Poner el argumento ordenado en TRUE crea un factor ordenado con el orden dado en el argumento de los niveles. (Muy útil cuando se aplica una regresión de tipo multinomial ordinal).

factor(x=c("Bachillerato", "Licenciatura", "Maestría", "Doctorado"),levels=c("Bachillerato", "Licenciatura", "Maestría", "Doctorado"),ordered=TRUE)
## [1] Bachillerato Licenciatura Maestría     Doctorado   
## Levels: Bachillerato < Licenciatura < Maestría < Doctorado

1.5 Llamando funciones

Anteriormente utilizamos brevemente algunas funciones básicas como nchar, length y as.Date para ilustrar algunos conceptos. Las funciones son muy importantes y útiles en cualquier lenguaje de programación porque hacen que el código sea fácilmente repetible y más simple. Casi todos los pasos dados en R implican el uso de funciones, así que es lo mejor es aprender la manera apropiada de llamarlos (aunque sea unas pocas que sean de mucha utilidad). Utilizar funciones en R requiere de mucho “feeling” sobre cómo y para qué utilizarlas. Dicho feeling no se adquiere de la noche a la mañana, así que por algún punto se debe de comenzar. La curva de aprendizaje es algo pronunciada al inicio. Comencemos con la función mean, que calcula la media de un conjunto de números. En su forma más simple toma un vector como argumento.

mean(x)
## [1] 5.5
mean(x,trim = .2)
## [1] 5.5

En la mayoría de las funciones, se deben de incorporar una serie de argumentos para su correcta aplicación, dichos argumentos deben de separarse por comas “,”. Para conocer qué argumentos se deben de incluir en cada función, se debe de consultar el apartado de ayuda de la función

1.6 Documentación de las funciones

Toda función incluida en R contiene documentación adjunta, de calidad variable, por supuesto. La forma más fácil de acceder a esa documentación es colocar un signo de interrogación (?) delante del nombre de la función, así: \(?mean\). Para obtener ayuda sobre los operadores binarios como +, o == se deben de rodear con comillas simples o dobles (’ ó ").

?`+`
?`*`
?"=="

Hay ocasiones donde no se conoce con exactitud el nombre de la función que se desee buscar la ayuda. Una solución para dicha situación es utilizar la función apropos, la cual busca todas las funciones parecidas a la palabra clave introducida.

apropos("mea")
##  [1] ".colMeans"          ".rowMeans"          "colMeans"          
##  [4] "influence.measures" "kmeans"             "mean"              
##  [7] "mean.Date"          "mean.default"       "mean.difftime"     
## [10] "mean.POSIXct"       "mean.POSIXlt"       "rowMeans"          
## [13] "weighted.mean"

1.7 Datos perdidos

A menudo tendremos bases de datos a los que les falten valores por cualquier número de razones. Los programas estadísticos usan varias técnicas para representar los datos faltantes como un guión, un punto o incluso el número 99. R usa \(NA\). \(NA\) a menudo se verá como un elemento más de un vector. \(is.na\) prueba cada elemento de un vector para la falta de datos.

zzeta <- c(1, 2, NA, 8, 3, NA, 3)
is.na(zzeta)
## [1] FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE

Si calculamos la media de \(zzeta\), la respuesta será NA ya que la función \(mean()\) devuelve NA si incluso un solo elemento es NA.

mean(zzeta)
## [1] NA

Cuando el argumento \(na.rm\) es TRUE, la función mean primero elimina los datos que faltan, luego calcula la media.

mean(zzeta, na.rm=TRUE)
## [1] 3.4

Las funciones como suma, min, max, var, sd y otras funciones funcionan de manera similar a la función mean.
El manejo de los datos faltantes es una parte importante del análisis estadístico. Hay muchas técnicas dependiendo del campo y la preferencia. Las técnicas más populares están incrustadas en las paqueterías mi, mice y Amelia.

2 Estructuras más avanzadas

2.1 Marco de datos (data frames)

2.2 Listas

2.3 Matrices

2.4 Arrays (vectores multidimencionales)

3 Lectura de datos externos

3.1 Leer .csv

3.2 Leer Excel

3.3 Datos ya almacenados en R

3.4 Datos espaciales

3.5 Exploración de datos

Para utilizar el menú de ayuda disponible en \(Rstudio\), veremos el menú de ayuda del conjunto de datos llamado \(cars\), con el signo de interrogación _"cars. Al ejecutarlo, debería ver que se abre una pequeña ventana de ayuda en \(RStudio\) que le proporciona cierta información sobre el conjunto de datos.

?cars
?iris

Para observar los primeros o últimos renglones de la base de datos, se utilizará las funciones \(head()\) y \(tail()\).

head(iris)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa
tail(iris)
##     Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
## 145          6.7         3.3          5.7         2.5 virginica
## 146          6.7         3.0          5.2         2.3 virginica
## 147          6.3         2.5          5.0         1.9 virginica
## 148          6.5         3.0          5.2         2.0 virginica
## 149          6.2         3.4          5.4         2.3 virginica
## 150          5.9         3.0          5.1         1.8 virginica

Algunas funciones que son útiles para visualizar los datos o conocer sus características son:

#Conocer el nombre de las columnas
colnames(iris)
## [1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"
#Conocer las dimensiones
dim(iris)
## [1] 150   5
#Conocer el número de fila y columnas
nrow(iris)
## [1] 150
ncol(iris)
## [1] 5

También se pueden visualizar los datos utilizando la funcioón \(View()\):

View(iris)

3.6 Estadísticas básicas

Para calcular algunas estadísticas básicas de todo el conjunto de datos. Calcularemos la media, el máximo de cada columna. Para lo anterior, existe varias maneras de hacerlo, una par de ellas son las siguientes ( max(), min(), mean(), var(), table() ):

mean(iris$Sepal.Length) #Media
## [1] 5.843333
mean(iris$Sepal.Width)
## [1] 3.057333
max(iris$Sepal.Length) #Máximos
## [1] 7.9
max(iris$Sepal.Width)
## [1] 4.4
min(iris$Sepal.Length) #Mínimo
## [1] 4.3
min(iris$Sepal.Width)
## [1] 2
table(iris$Species) #Tabla de frecuencia
## 
##     setosa versicolor  virginica 
##         50         50         50
#When collapse is true, the coda and result are merged
resu1<-round(sum(rnorm(100)),2)

Para insertar y referenciar resultados en tu texto, hacer lo siguiente: -5.23

## 
##  1  2  3  4  5  6  7  8  9 10 11 12 
##  3 14 15 19 15 13  2  6  7  3  2  1
##     tension
## wool L M H
##    A 9 9 9
##    B 9 9 9
Tabla de prueba
Noreste Sur Centro-norte Oeste
New England 6 0 0 0
Middle Atlantic 3 0 0 0
South Atlantic 0 8 0 0
East South Central 0 4 0 0
West South Central 0 4 0 0
East North Central 0 0 5 0
West North Central 0 0 7 0
Mountain 0 0 0 8
Pacific 0 0 0 5

3.7 Introducción de datos

Introducción manual en un script.
Utilizar dos paqueterías para importarlos (foreign y readxl)

3.8 Funciones, ciclos and condicionantes

4 Álgebra matricial

4.1 Introducción y manejo de matrices y vectores

Como generarlos (función matriz) y concatenar, cbind, rbind

4.2 Operaciones básicas matriciales

Suma, resta, multiplicación, comprobación del inverso

4.3 Traza, rango, inversa, transpuesta, valores característicos, entre otros

5 Manipulación de grupos

Una regla general para el análisis de datos es que la manipulación de los datos (o “minería de datos”) consume alrededor del 80 por ciento del tiempo. Esto a menudo requiere operaciones repetidas en diferentes secciones de los datos, algo como “dividir-aplicar-combinar”. Es decir, dividimos los datos en secciones discretas basados en alguna métrica, aplicamos una transformación de algún tipo a cada sección, y y luego se combinan todas las secciones. Esto es algo así como el paradigma de Map Reduce en Hadoop.
Hay muchas maneras diferentes de iterar sobre los datos en R, aquí se utilizarán algunas de las funciones más convenientes. Gran parte de la funciones aquí abordadas, están en constante mejoramiento, más adelante se utlizarán algunos de estos mejoramientos.

5.1 Familia apply

Construida en R está la función apply y todos sus parientes como tapply, lapply y mapply. Cada uno tiene sus peculiaridades y necesidades y se utiliza mejor en diferentes situaciones.

5.1.1 apply

apply es el primer miembro de esta familia de funciones, y también suele ser la más limitada o restrictiva. Dicha función debe ser usada en una matriz, lo que significa que todos los elementos deben ser de la misma tipo si son de caracteres, numéricos o lógicos. Si se aplica la función a algún elemento que no sea una matriz, como un data.frame, se convertirá primero en una matriz.

El primer argumento de la función apply corresponde al objeto con el que estamos trabajando. El segundo argumento es el margen donde se aplicará la función, \(1\) significa que la operación será aplicada a las filas, y \(2\) significa la operación será aplicada a las columnas. El tercer argumento corresponde función que queremos aplicar. Cualquier de los argumentos extras se pasarán a esa función. apply iterará sobre cada fila (o columna) de la matriz, tratándolos como entradas individuales al primer argumento de la función especificada.

Para ilustrar su uso, comenzamos con un ejemplo trivial, sumando las filas o columnas de una matriz.

matriz<-matrix(seq(1:9),ncol=3) #¿conocen la función "seq" o cómo se llenan las matrices?
apply(matriz,1,sum) #Suma de las filas
## [1] 12 15 18
apply(matriz,2,sum) #Suma de las columnas
## [1]  6 15 24

Obsérvese que esto podría lograrse alternativamente usando las funciones rowSums y colSums incorporadas, dando los mismos resultados.

rowSums(matriz) #Suma de las filas
## [1] 12 15 18
colSums(matriz) #Suma de las columnas
## [1]  6 15 24

Por un momento, modifiquemos un elemento en matriz por un valor \(NA\) para ver cómo manejamos los valores perdidos utilizando el argumento \(na.rm\) y el uso de argumentos adicionales en la función apply. Como se explicaba anteriormente, si incluso un solo elemento de un vector es \(NA\), entonces el resultado de la función sum será \(NA\). Esto puede evitarse estableciendo \(na.rm=TRUE\), en cuyo caso los \(NA\) serán removidos y la suma será calculado con los elementos restantes. Cuando se utiliza la función sum, o cualquier otra función, con un apply, los argumentos adicionales (como \(na.rm\)) después de la funcionan, serán utilizados como argumentos de la función dada en el tercer argumento del apply. Se puede especificar cualquier argumento de la función aplicada. A diferencia de cuando llamando directamente a la función, los argumentos deben ser nombrados.

matriz[2,1]<-NA
apply(matriz,1,sum)
## [1] 12 NA 18
apply(matriz,1,sum,na.rm=TRUE)
## [1] 12 13 18
apply(matriz,2,sum)
## [1] NA 15 24
apply(matriz,2,sum,na.rm=TRUE)
## [1]  4 15 24
colSums(matriz)
## [1] NA 15 24
colSums(matriz,na.rm=TRUE)
## [1]  4 15 24
rowSums(matriz)
## [1] 12 NA 18
rowSums(matriz,na.rm=TRUE)
## [1] 12 13 18

5.1.2 lapply y sapply

5.2 aggregate

6 Análisis y graficación básica en R

6.1 Estadística descriptiva

6.2 Distribuciones de probabilidad

Explicar el pnorm, rnorm y dnorm (y las otras que siguen su forma )

7 Graficación

7.1 Gráficos planos con la función plot

Todo lo que se puede poner, y meter el histograma por ahí

7.2 Modelos lineales, no lineales y lineales generalizados

Tipo de fórmula (encuentras lo que significa : * :: ^2 y esas cosas)

7.3 Graficación utilizando GGplot

Gráficos de barras, líneas y cómo formar una tabla para introducir los datos formula

8 Visualización y manejo de datos espaciales

Utilizar la base de datos del coronavirus, y bajar el shape del país (con todo y municipios)

8.1 Lectura de archivos tipo .SHP (shape)

8.2 Manipulación de datos espaciales (shape features)

8.3 Representación espacial de datos espaciales (plot y GGplot)

8.4 Gráficos dinámicos de datos espaciales

9 Dashboards

9.1 Introducción a Markdown (chunks)

Seleccionar otro tipo, no scripts, sino una plantilla y un nuevo markdown

9.2 Utilización de Flexdashboards

Seleccionar otra plantilla. Jalar otros gráficos y ponerlos en los chunks

9.3 Publicación de Mardowns y Flexdashboards

Crear cuenta en rpubs o shinnyapp.io

endash: –
emdash: —
ellipsis: …
inline equation: \(A = \pi*r^{2} \phi \rho \chi \frac{4}{5}\)

horizontal rule (or slide break):


Veamos

block quote
el wey

  • unordered list
  • item 2
    • sub-item 1
    • sub-item 2
  1. ordered list
  2. item 2
  • sub-item 1
  • sub-item 2
Table Header Second Header
Table Cell Cell 2
Cell 3 Cell 4
summary(cars)
##      speed           dist       
##  Min.   : 4.0   Min.   :  2.00  
##  1st Qu.:12.0   1st Qu.: 26.00  
##  Median :15.0   Median : 36.00  
##  Mean   :15.4   Mean   : 42.98  
##  3rd Qu.:19.0   3rd Qu.: 56.00  
##  Max.   :25.0   Max.   :120.00

You can also embed plots, for example:

#webshot::install_phantomjs()
 knitr::include_app('https://hdltorre.shinyapps.io/Funciana2/', height = '600px')