Aquí se fijan opciones de manera global para los chunks, y se pueden cambiar
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
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.
¿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
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.
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
\(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
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
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"
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
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
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.
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
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)
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)]\).
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
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
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"
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.
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)
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
| 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 |
Introducción manual en un script.
Utilizar dos paqueterías para importarlos (foreign y readxl)
Como generarlos (función matriz) y concatenar, cbind, rbind
Suma, resta, multiplicación, comprobación del inverso
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.
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.
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
Explicar el pnorm, rnorm y dnorm (y las otras que siguen su forma )
Todo lo que se puede poner, y meter el histograma por ahí
Tipo de fórmula (encuentras lo que significa : * :: ^2 y esas cosas)
Gráficos de barras, líneas y cómo formar una tabla para introducir los datos formula
Utilizar la base de datos del coronavirus, y bajar el shape del país (con todo y municipios)
Seleccionar otro tipo, no scripts, sino una plantilla y un nuevo markdown
Seleccionar otra plantilla. Jalar otros gráficos y ponerlos en los chunks
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
| 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')