Download - Serie Apuntes de Clase F&E N° 01
Capítulo I
Rafael Bustamante [email protected]
La Serie Apuntes de Finance and Econometrics Group S.A.C. tiene por objetivo difundir los materiales de enseñanza generados por los docentes que tienen a su cargo el desarrollo de las asignaturas de la empresa. Estos documentos buscan proporcionar a los estudiantes una explicación de algunos temas específicos que son abordados en su formación profesional.
Serie Apuntes de Clase F&E N° 01
Octubre de 2020
Serie Apuntes de Finance and Econometrics Group N°01. Octubre del 2020.
Introducción al R y al R- Studio. Bustamante Romaní, Rafael.
1
INTRODUCION A LA PROGRAMACION AL R AL R-
STUDIO
Rafael Bustamante Romaní
RESUMEN
R es un programa es ampliamente conocido como un lenguaje de programación y un entorno
para análisis estadístico y la realización de gráficos de gran calidad. Contiene un entorno de
computación viable para la implementación y la aplicación de métodos numéricos de manera
sencilla y efectiva. Aunque R permite varios estilos de programación, en la medida de lo posible,
se usa un estilo orientado a la "programación de arreglos" (llamado "vectorización"). Como R es
interpretado, se incluye una sección mínima sobre cómo acelerar R usando "vectorización", o
usando el paquete Rcpp para conectar R con C++ y también paralelización.
El objetivo de estos apuntes de clase es proporcionar las nociones básicas para aquellas personas
interesadas en comenzar a utilizar el programa R. Poniendo énfasis en el funcionamiento de R,
con el objeto de que se pueda usar de una manera básica. Dado que R ofrece una amplia gama de
posibilidades, es útil para el principiante adquirir algunas nociones y conceptos y así progresar
gradualmente.
Se busca simplificar las explicaciones al máximo para hacerlas lo más comprensivas posibles, pero
al mismo tiempo proporcionando detalles útiles, algunas veces con la ayuda de tablas.
Palabras claves: Método numéricos, lenguaje R, álgebra lineal, ecuaciones no lineales,
integración, ecuaciones diferenciales
Clasificación JEL: C00, C02.
Estudios de Doctorado en Economía, Universidad Autónoma de México. Maestría en Economía con mención en
Finanzas, MBA CENTRUM Pontificia Universidad Católica del Perú. B. Sc. Economía, Universidad Nacional Mayor de San Marcos. Profesor del Departamento de Economía de UNMSM. Investigador asociado al Instituto de Investigaciones FCE – UNMSM. Investiga. Contacto: [email protected]
Serie Apuntes de Finance and Econometrics Group N°01. Octubre del 2020.
Introducción al R y al R- Studio. Bustamante Romaní, Rafael.
2
Tabla de contenido
1. Introducción ...................................................................................................................... 3
2. Instalación de R y R Studio ................................................................................................... 4
3. Ventajas y desventajas de R ................................................................................................. 8
4. R como un sistema de ventanas ...........................................................................................13
5. Estadística con R ................................................................................................................14
6. Objetos – Tipos (Vector, Array, Matriz, Factor, Serie temporal, Lista, Data frame) .......................15
7.1 Objetos .....................................................................................................................15
7.2 Vectores ....................................................................................................................15
7.3 Creación de un vector ..................................................................................................16
7.4 Generación de Niveles .................................................................................................18
7.5 Factores ....................................................................................................................20
7.6 Indexación de Factores ................................................................................................25
7.7 Listas.........................................................................................................................29
7.8 Operaciones con Matrices ............................................................................................30
7.9 Arrays (Variable Multiindexada) ....................................................................................35
7. Bibliografía .......................................................................................................................36
Serie Apuntes de Finance and Econometrics Group N°01. Octubre del 2020.
Introducción al R y al R- Studio. Bustamante Romaní, Rafael.
3
1. Introducción
El programa R puede entenderse como un lenguaje de programación, como un potente
software de análisis estadísticos o incluso como un generador de gráficos. Cualquiera de
los tres significados es compatible con una definición del R. Estos apuntes de ofrecen al
lector interesado en programación, los conceptos básicos y necesarios de la sintaxis de R
que le permitirán trabajar en un entorno para su uso con interfaces de códigos1. Si bien es
cierto que existen interfaces gráficas (R Commander) que facilitan el uso de R como
software para el análisis de datos, no es menos cierto que la adquisición de destrezas en
el manejo de unas normas de sintaxis básicas permitirá al usuario de R beneficiarse aún
más de la potencia y de las ventajas que ofrece este entorno (Elousa, 2010).
Podemos definir R como un entorno en el que se aplican los métodos estadísticos de
análisis de datos. En este entorno, tal como se indica en la web del programa, www.r-
project.org, podemos encontrar los siguientes componentes:
➢ Herramientas de lectura, importación, gestión y almacenamiento de datos.
➢ Funciones y operadores diseñados para actuar directamente sobre vectores o
matrices.
1 Interfaz es lo que conocemos en inglés como interface (“superficie de contacto”). En informática, se utiliza para
nombrar a la conexión funcional entre dos sistemas, programas, dispositivos o componentes de cualquier tipo, que
proporciona una comunicación de distintos niveles permitiendo el intercambio de información. Su plural es interfaces.
Ejemplos de interfaces en informática son las interfaces de usuario (entre computadora y persona) como sería una
pantalla o un ratón (si hablamos de hardware) o la ventana gráfica de un programa con la que interactuamos (si
hablamos de software); las interfaces físicas (entre dos dispositivos) como el SCSI o el USB; o las interfaces lógicas
(entre dos programas) como la API o el DOM.
Serie Apuntes de Finance and Econometrics Group N°01. Octubre del 2020.
Introducción al R y al R- Studio. Bustamante Romaní, Rafael.
4
➢ Una gran colección, coherente e integrada, de herramientas para el análisis de
datos.
➢ Procedimientos gráficos para el análisis y visualización de datos, ya sea en pantalla
o en papel.
➢ Un completo y bien desarrollado lenguaje de programación, simple y eficiente,
que incluye gran cantidad de funciones predefinidas, instrucciones condicionales,
bucles, posibilidad de definir funciones recursivas y procedimientos avanzados de
entrada y salida, con la posibilidad de importar o exportar datos a un gran número
de aplicaciones.
➢ Un intérprete de comandos para la aplicación efectiva de todas estas herramientas.
A este intérprete es posible acceder de varias formas:
• De modo interactivo a través de una consola.
• Lanzando un script (que podemos traducir como guion) que consiste
básicamente en un archivo en el que el usuario ha introducido todos los
comandos que desea ejecutar.
• A través de diversas interfaces gráficas de usuario (GUI).
2. Instalación de R y R Studio
Para la instalación del programa R con su navegador abra la página www.r-project.org.
Marque el enlace Download R como se ilustra.
Serie Apuntes de Finance and Econometrics Group N°01. Octubre del 2020.
Introducción al R y al R- Studio. Bustamante Romaní, Rafael.
5
Figura N.ª 1
Figura N.ª 2
Serie Apuntes de Finance and Econometrics Group N°01. Octubre del 2020.
Introducción al R y al R- Studio. Bustamante Romaní, Rafael.
6
Una vez terminada la instalación del programa R, ejecute y el programa se abrirá con una
ventana como se muestra, esta ventana se conoce como la consola de R, donde se tiene
que escribir los comandos.
Figura Nº 3
Instalación de Hoy en día, la mejor plataforma para utilizar R (sobre todo para el
principiante) es RStudio1. RStudio es un IDE2 muy popular y que ofrece un entorno
prácticamente idéntico en todos los sistemas operativos para utilizar R.
2 Normalmente, un IDE consiste de un editor de código fuente, herramientas de construcción automáticas y un
depurador. La mayoría de los IDE tienen un autocompletado inteligente de código (IntelliSense). Algunos IDE
contienen un compilador, un intérprete, o ambos, tales como NetBe ans y Eclipse; otros no, tales como SharpDevelop y
Lazarus. El límite entre un IDE y otras partes del entorno de desarrollo de software más amplio no está bien definido .
Muchas veces, a los efectos de simplificar la construcción de la interfaz gráfica de usuario (GUI, por sus siglas en inglés)
se integran un sistema controlador de versión y varias herramientas. Muchos IDE modernos también cuentan con un
navegador de clases, un buscador de objetos y un diagrama de jerarquía de clases, para su uso con el des arrollo de
software orientado a objetos.
Serie Apuntes de Finance and Econometrics Group N°01. Octubre del 2020.
Introducción al R y al R- Studio. Bustamante Romaní, Rafael.
7
RStudio, por defecto, tiene cuatro paneles. El panel inferior izquierdo es una consola de
R. En ella se puede escribir y ejecutar código. R muestra también en ella los resultados
obtenidos.
Figura Nº 4
El panel superior izquierdo es un editor de código. Los ficheros que se abran y se editen
aparecerán en él dentro de sus correspondientes pestañas. Es imperativo aprender a usar
algunos de los atajos de teclado más comunes. Por ejemplo, Control + R ejecuta la línea
de código en la que se sitúa el cursor.
Los paneles de la derecha son menos importantes. El superior contiene un listado de las
variables en el entorno y un histórico de comandos ejecutados. El inferior contiene varias
pestañas; las que más se usan son:
➢ Files: da acceso al sistema de ficheros del disco duro
➢ Plots: aloja los gráficos que cree R
➢ Help: muestra la página de ayuda de las funciones cuando la solicite el usuario
➢ Packages: Descarga e instalación de paquetes
Serie Apuntes de Finance and Econometrics Group N°01. Octubre del 2020.
Introducción al R y al R- Studio. Bustamante Romaní, Rafael.
8
3. Ventajas y desventajas de R
Entre las ventajas podemos mencionar:
➢ Es software libre y por tanto su coste es nulo y el número de paquetes, lo que ha
crecido en el último año a la nada despreciable velocidad de aproximadamente 2
paquetes diarios.
➢ Es multiplataforma: existen versiones para Linux, Mac y Windows. Los
procedimientos y análisis desarrollados en una plataforma son inmediatamente
ejecutables en otra.
➢ Implementa una enorme cantidad de métodos estadísticos, desde los más clásicos
a los más modernos. Los métodos se organizan en librerías cuyo número se
encuentra en constante crecimiento.
➢ Dispone de una enorme capacidad para combinar, de manera simple, métodos de
análisis estándar (regresión, análisis de cluster, análisis de series temporales) con
análisis desarrollados ad hoc para una situación específica.
➢ Capacidad para acceder a datos en múltiples formatos. Dispone de librerías para
leer datos desde SPSS, SAS, Access, MySQL, Excel, Asimismo permite también la
generación de informes de resultados en diversos formatos.
➢ Enorme capacidad para manipular y /o modificar datos y funciones.
➢ Generación de gráficos de alta calidad.
➢ Existencia de una comunidad de usuarios muy activa, en la que participan
estadísticos de renombre.
➢ Amplia disponibilidad de documentación, tanto en internet como en libros
publicados por editoriales de prestigio (Springer, Wiley).
Serie Apuntes de Finance and Econometrics Group N°01. Octubre del 2020.
Introducción al R y al R- Studio. Bustamante Romaní, Rafael.
9
➢ Facilidad de integración con actividades de formación en técnicas y métodos
estadísticos en todos los ámbitos del conocimiento. Su uso es cada vez más
generalizado en las universidades, lo que implica que las nuevas generaciones de
profesionales ya salen al mercado laboral con formación específica en el manejo de
este programa.
➢ En particular, su uso en la docencia tiene la ventaja de que no es necesario que el
estudiante adquiera licencias para su uso, por lo que cualquier alumno puede
instalar R en su ordenador personal y desarrollar tareas, trabajos, etc. utilizando
este programa. Asimismo, una vez que el estudiante se gradúe y abandone la
universidad, podrá seguir utilizando R en cualquier ámbito profesional o de
desarrollo.
➢ Existencia de extensiones específicas para nuevas áreas como bioinformática, geo
estadística, modelos gráficos o análisis de mercados financieros3.
Entre las desventajas podemos mencionar:
➢ Suele señalarse como principal desventaja de R el hecho de que el paquete base no
dispone de una interfaz amigable para el usuario; no existe un menú principal en
el que el usuario pueda acceder mediante el ratón a submenús para la lectura de
datos, la ejecución de procedimientos estadísticos o la generación de gráficos. Estas
tareas se llevan a cabo mediante un lenguaje de comandos que puede resultar duro
de aprender para el usuario común. No obstante, se han desarrollado algunas
GUIs (Graphical User Interfaces) que facilitan enormemente esta tarea. En
3 ¡La editorial Springer tiene una colección –UseR! – dedicada exclusivamente a R.
Serie Apuntes de Finance and Econometrics Group N°01. Octubre del 2020.
Introducción al R y al R- Studio. Bustamante Romaní, Rafael.
10
particular la interfaz R-Commander desarrollada por John M. Fox en la McMaster
University de Canadá presenta un menú para el acceso a los comandos más
habituales que, además, muestra el código que emplea R de forma que permite al
usuario familiarizarse con el lenguaje.
➢ El código R es interpretado, no compilado, por lo que algún algoritmo puede
resultar de ejecución lenta, en particular si se realizan tareas de simulación
intensiva. Esto no constituye mayor problema para un uso ordinario del
programa. En cualquier caso, a partir de la versión 2.14, todas las funciones y
librerías de R se encuentran precompiladas, lo que acelera su ejecución de manera
notable.
➢ No dispone de un sistema de base de datos propio, aunque sí cuenta con un
formato para el almacenamiento e intercambio de datos. En cualquier caso se han
desarrollado paquetes para conectar y acceder a múltiples sistemas de bases de
datos (las propias de SAS o SPSS, Access, dBase, Excel, MySQL, etc ). Tiene algunas
limitaciones en cuanto al uso de la memoria, que dificultan el análisis de bases de
datos masivas4. No obstante, estas limitaciones han ido desapareciendo a medida
que se han ido desarrollando ordenadores con mayor capacidad (procesadores de
64 bits, más disponibilidad de memoria y de direccionamiento de la misma). En
cualquier caso, salvo que el usuario deba acceder a millones de registros
simultáneamente, es difícil que llegue a notar problemas con la memoria.
4 Ello se debe a que todos los datos con los que se trabaja deben permanecer simultáneamente en memoria. No obstante, es posible
derivar parte de la carga de trabajo del procesamiento de datos al propio motor de la base de datos que se utiliza, mediante comandos SQL.
Serie Apuntes de Finance and Econometrics Group N°01. Octubre del 2020.
Introducción al R y al R- Studio. Bustamante Romaní, Rafael.
11
➢ No dispone de un sistema de base de datos propio, aunque sí cuenta con un
formato para el almacenamiento e intercambio de datos. En cualquier caso, se han
desarrollado paquetes para conectar y acceder a múltiples sistemas de bases de
datos (las propias de SAS o SPSS, Access, dBase, Excel, MySQL, . . .). Tiene algunas
limitaciones en cuanto al uso de la memoria, que dificultan el análisis de bases de
datos masivas5. No obstante estas limitaciones han ido desapareciendo a medida
que se han ido desarrollando ordenadores con mayor capacidad (procesadores de
64 bits, más disponibilidad de memoria y de direccionamiento de la misma). En
cualquier caso, salvo que el usuario deba acceder a millones de registros
simultáneamente, es difícil que llegue a notar problemas con la memoria.
➢ En algún caso las nuevas librerías que se incorporan a R pueden tener errores o
fallos de implementación. Estos fallos, no obstante, suelen ser detectados por los
usuarios, informados a los desarrolladores de las librerías y corregidos en tiempo
récord. Debe señalarse, no obstante, que ningún programa (incluso los
comerciales) está exento de fallos y el proceso de revisión y corrección de fallos en
programas comerciales mediante parches o actualizaciones suele ser notablemente
más lento. Ello se debe a que todos los datos con los que se trabaja deben
permanecer simultáneamente en memoria. No obstante, es posible derivar parte
de la carga de trabajo del procesamiento de datos al propio motor de la base de
datos que se utiliza, mediante comandos SQL.
➢ A todos los puntos anteriores podemos añadir el siguiente, que será considerado
por unos una ventaja y por otros un inconveniente:
Serie Apuntes de Finance and Econometrics Group N°01. Octubre del 2020.
Introducción al R y al R- Studio. Bustamante Romaní, Rafael.
12
➢ Para hacer un buen uso de R se debe tener un buen conocimiento de los métodos
estadísticos. En realidad, esta afirmación es cierta no sólo para R, sino para
cualquier paquete estadístico. Sin embargo, en la práctica programas como SPSS,
Statistica o SYSTAT permiten, a través de sus menús, que el usuario pueda aplicar
casi cualquier procedimiento estadístico –sea o no adecuado para sus datos o su
problema– sin apenas esfuerzo y obtenga páginas de resultados que muchas veces
es incapaz de interpretar. R es bastante más atento en sus salidas de resultados y,
cuando se han de aplicar modelos de cierta complejidad, la mayoría de las veces
el usuario se verá obligado a especificar exactamente qué es lo que quiere hacer, lo
que implica buen nivel de conocimiento de los problemas abordados.
R posee muchas funciones para análisis estadísticos y gráficos; estos últimos
pueden ser visualizados de manera inmediata en su propia ventana y ser
guardados en varios formatos (jpg, png, bmp, ps, pdf, emf, pictex, xfig; los
formatos disponibles dependen del sistema operativo).
Los resultados de análisis estadísticos se muestran en la pantalla, y algunos resultados
intermedios (como valores P-, coeficientes de regresión, residuales, . . .) se pueden
guardar, exportar a un archivo, o ser utilizados en análisis posteriores. El lenguaje R
permite al usuario, por ejemplo, programar bucles (’loops’ en inglés) para analizar
conjuntos sucesivos de datos. También es posible combinar en un solo programa
diferentes funciones estadísticas para realizar análisis más complejos. Usuarios de R
tienen a su disponibilidad un gran número de programas escritos para S y disponibles en
la red;5 la mayoría de estos pueden ser utilizados directamente con R.
5 Por ejemplo: http://stat.cmu.edu/S/
Serie Apuntes de Finance and Econometrics Group N°01. Octubre del 2020.
Introducción al R y al R- Studio. Bustamante Romaní, Rafael.
13
Al principio, R puede parecer demasiado complejo para el usuario principiante. Esto no
es necesariamente cierto, porque una de las características más sobresalientes de R es su
formidable flexibilidad.
Mientras que programas más clásicos muestran directamente los resultados de un
análisis, R guarda estos resultados como un “objeto”, de tal manera que se puede hacer
un análisis sin necesidad de mostrar su resultado inmediatamente. Esto puede ser un
poco extraño para el usuario, pero esta característica suele ser muy útil. De hecho, el
usuario puede extraer solo aquella parte de los resultados que le interesa. Por ejemplo, si
uno corre una serie de 20 regresiones y quiere comparar los coeficientes de regresión, R
le puede mostrar únicamente los coeficientes estimados: de esta manera los resultados se
pueden resumir en una sola línea, mientras que un programa clásico le puede abrir 20
ventanas de resultados. Más adelante, veremos otros ejemplos que ilustran y comparan
la flexibilidad de R con programas de estadística más tradicionales ( Paradis, 2010).
4. R como un sistema de ventanas
La forma más conveniente de usar R es en una estación de trabajo con un sistema de
ventanas. Estas notas están escritas pensando en usuarios de estas características. En
particular nos referiremos ocasionalmente a la utilización de R en un sistema X-Windows,
aunque normalmente se pueden aplicar a cualquier implementación del entorno R.
Cuando R espera la entrada de órdenes, presenta un símbolo para indicarlo. El símbolo
predeterminado es ‘>’, que en UNIX puede coincidir con el símbolo del sistema, por lo
que puede parecer que no sucede nada. Si ese es el caso es posible modificar este símbolo
en R.
Serie Apuntes de Finance and Econometrics Group N°01. Octubre del 2020.
Introducción al R y al R- Studio. Bustamante Romaní, Rafael.
14
R puede definirse como una nueva implementación del lenguaje S desarrollado en AT&T
por Rick Becker, John Chambers y Allan Wilks. Muchos de los libros y manuales sobre S
son útiles para R.
5. Estadística con R
En la introducción a R no se ha mencionado la palabra estadística, sin embargo, muchas
personas utilizan R como un sistema estadístico. Nosotros preferimos describirlo como
un entorno en el que se han implementado muchas técnicas estadísticas, tanto clásicas
como modernas. Algunas están incluidas en el entorno base de R y otras se acompañan
en forma de bibliotecas (packages). El hecho de distinguir entre ambos conceptos es
fundamentalmente una cuestión histórica. Junto con R se incluyen ocho bibliotecas
(llamadas bibliotecas estándar) pero otras muchas están disponibles a través de Internet
en CRAN (http://www.r-project.org).
Como hemos indicado, muchas técnicas estadísticas, desde las clásicas hasta la última
metodología, están disponibles en R, pero los usuarios necesitarán estar dispuestos a
trabajar un poco para poder encontrarlas.
Existe una diferencia fundamental en la filosofía que subyace en R (o S) y la de otros
sistemas estadísticos. En R, un análisis estadístico se realiza en una serie de pasos, con
unos resultados intermedios que se van almacenando en objetos, para ser observados o
analizados posteriormente, produciendo unas salidas mínimas.
Serie Apuntes de Finance and Econometrics Group N°01. Octubre del 2020.
Introducción al R y al R- Studio. Bustamante Romaní, Rafael.
15
6. Objetos – Tipos (Vector, Array, Matriz, Factor, Serie temporal, Lista,
Data frame)
7.1 Objetos
En términos genéricos, todos los elementos que maneja R son objetos: un valor numérico
es un objeto, un vector es un objeto, una función es un objeto, una base de datos es un
objeto, un gráfico es un objeto, etc. Para realizar un uso eficiente de R es preciso entender
y aprender a manipular bien las distintas clases de objetos que maneja el programa. En
esta sección nos vamos a ocupar particularmente de aquellos objetos que R utiliza para
representar datos: valores, vectores, matrices, dataframes, series temporales y listas.
R utiliza la programación orientada a objetos. Ello significa que una misma función hace
cosas distintas según la clase del objeto que recibe como argumento, pudiendo incluso no
hacer nada (o producir un error) si se le pasan argumentos de una clase inadecuada
(González & González, 2000).
7.2 Vectores
Un vector es una secuencia ordenada de datos, los cuales han de ser del mismo tipo, es
decir todos deben de ser números, caracteres, cadenas de caracteres, valores lógicos,
etcétera. Los tipos de datos que se pueden almacenar en un vector, se destacan los
siguientes ( Rivera Loredo, 2018):
• logical (lógicos: TRUE, verdadero, o FALSE, falso)
• integer (números enteros)
• numeric (números reales)
Serie Apuntes de Finance and Econometrics Group N°01. Octubre del 2020.
Introducción al R y al R- Studio. Bustamante Romaní, Rafael.
16
• character (palabras)
7.3 Creación de un vector
La forma correcta de almacenar un conjunto de datos, es a través de una asignación
utilizando el comando c (combine), donde dicha lista de números se almacena bajo este
nombre, y así mismo este se utiliza para referirse a los datos que almacena, la asignación
se realiza especificando el símbolo <− (Matías, 2009, p.29).
Para generar un vector utilizamos la función c separando cada uno por medio de una
coma (,) por ejemplo si se quisiera almacenar la secuencia 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 dentro
de un vector llamado vector.
La función vector, que tiene dos argumentos mode y length, crea un vector cuyos
elementos pueden ser de tipo numérico, lógico o carácter dependiendo del argumento
especificado en mode (0, FALSE o “” respectivamente).
Uso
vector (mode = "logical", length = 0)
Ejemplo:
v <- vector("integer", 0)
v # Un vector de enteros sin elementos
## integer(0)
w <- vector("numeric", 3)
w # Un vector de tres ceros
## [1] 0 0 0
u <- vector("logical", 5)
u # Un vector de 5 FALSE
## [1] FALSE FALSE FALSE FALSE FALSE
Serie Apuntes de Finance and Econometrics Group N°01. Octubre del 2020.
Introducción al R y al R- Studio. Bustamante Romaní, Rafael.
17
Las siguientes funciones tienen exactamente el mismo efecto y tienen un solo argumento
(la longitud del vector): numeric (), logical (), y character (). El primer tipo de objeto que
manejaremos es el vector (colección ordenada de elementos del mismo tipo).
Podemos escribir vectores de varias maneras, utilizando la opción “:” (el vector comienza
en el primer número suministrado y analiza en el segundo o en un numero anterior sin
sobrepasarlo, tanto en orden ascendente como descendente) con mediante la función de
concatenación “c( )".
Tenemos, además, formas adicionales de crear vectores. Una de las más comunes es
utilizando la función “seq(a, b, c)”, que genera secuencias de números reales, donde el
primer elemento indicaría el principio de la secuencia, el segundo el final y el tercero el
incremento que se debe usar para generar la secuencia. Aunque también podemos poner
la función de estas formas “seq (length = d, from = a, to = b)” o “seq(by = c, f rom = a, to
= b)” siendo “d” la longitud del vector.
Ejemplo:
> 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
seq(10) #mismo efecto que 1:10
seq(3,10) #mismo efecto que 3:10
seq(1,10, by=3) #saltando de 3 en 3
rep(1:4,2) #Vectores Constructores (repetimos 1:4 dos veces).
rep(1:4, each=2) #repetimos 1:4 dos veces, #intercalando el resultado.
Serie Apuntes de Finance and Econometrics Group N°01. Octubre del 2020.
Introducción al R y al R- Studio. Bustamante Romaní, Rafael.
18
Acceso a datos:
Asimismo, la función vector tiene otras funciones complementarias con las cuales
también se puede trabajar:
as.vector: Es una función una genérica e intenta coaccionar su argumento en un vector
del modo modo (el predeterminado es coaccionar a cualquier modo vectorial más
conveniente): si el resultado es atómico todos los atributos se eliminan.
is.vector: Es una función una genérica y devuelve TRUE si x es un vector del modo
especificado que no tiene atributos que no sean nombres. De lo contrario devuelve
FALSE.
7.4 Generación de Niveles
La función “gl( )” (generador de niveles) genera series regulares de factores. Tiene la
forma “gl(a, b)” donde “a” es el número de niveles (o clases) y “b” es el número de
réplicas en cada nivel. Se pueden usar dos opciones: “length” para especificar el número
de datos producidos, y “labels” para especificar los nombres de los factores.
datos #vector completo
datos [1] #primer dato
datos [-4] #todo menos el cuarto dato
datos [c(1,3,5)] #posiciones 1, 3 y 5
datos [3:5] #posiciones 3 a 5
v <- datos>1 #vector lógico con true en la posición i sii datos[i]>1
datos[v] #posiciones con true en el vector v
o De manera análoga, podemos modificar los datos:
datos[1] <- 23
Serie Apuntes de Finance and Econometrics Group N°01. Octubre del 2020.
Introducción al R y al R- Studio. Bustamante Romaní, Rafael.
19
Finalmente, “expand.grid( )” crea una tabla de datos con todas las combinaciones
posibles de los elementos de los vectores o factores que proporcionemos como
argumentos.
R puede escribir vectores con caracteres o números, pero siempre entiende los elementos
como si fuesen del mismo tipo.
Un vector siempre está formado por elementos del mismo tipo, no pueden mezclarse
números y cadenas de caracteres (se transformaría en cadenas de caracteres). Del mismo
modo, si mezcla números reales y complejos, se entenderían como complejos.
Una opción de R es que podemos asignar nombres a los elementos de un vector mediante
la función “names” (también se podría utilizar para nombrar cualquier objeto).
# Repetimos los dos niveles 6 veces con la etiqueta Hombre y Mujer
> gl(2, 6, labels = c("Hombre", "Mujer"))
c("Hola", "Adios")
c(1, 1+2i)
c(1-1i, 2)
dias.semana=c("Lunes","Martes","Miércoles","Jueves","Viernes","Sábado","Domingo") >
dias.semana
> grid(edad=c(36,25), peso=c(75,60), sexo=c("Hombre","Mujer"))
# Crea todas las combinaciones posibles
Serie Apuntes de Finance and Econometrics Group N°01. Octubre del 2020.
Introducción al R y al R- Studio. Bustamante Romaní, Rafael.
20
También podemos conocer o cambiar el modo o tipo de los elementos que forman el
vector mediante la función “mode” (tomaría los valores: logical, numeric, complex,
character, null, list, function, graphics, expression, name, frame, raw y unknown).
7.5 Factores
Un factor es un vector de cadenas de caracteres que sirve para representar datos
categóricos, aunque no solo incluye estos valores, sino que también los diferentes niveles
posibles de esta variable. La función “factor” se utiliza para codificar un vector como un
factor. Creando tantos niveles como le indiquemos.
Conceptualmente, los factores son variables en R que toman un número limitado de
valores diferentes; tales variables se refieren a menudo como variables categóricas. Uno
de los usos más importantes de los factores es el modelado estadístico; dado que las
variables categóricas entran en modelos estadísticos de forma diferente a las variables
continuas, el almacenamiento de datos como factores asegura que las funciones de
modelado traten dichos datos correctamente.
x < - 1:7
names(x)< c("Lunes","Martes","Miercoles","Jueves","Viernes","Sabado","Domingo")
x
Lunes Martes Miercoles Jueves Viernes Sabado Domingo
1 2 3 4 5 6 7
Serie Apuntes de Finance and Econometrics Group N°01. Octubre del 2020.
Introducción al R y al R- Studio. Bustamante Romaní, Rafael.
21
Los factores en R se almacenan como un vector de valores enteros con un conjunto
correspondiente de valores de caracteres que se utilizarán cuando se muestre el factor.
La función factor se utiliza para crear un factor. El único argumento requerido para factor
es un vector de valores que será devuelto como un vector de valores de factor. Las
variables numéricas y de carácter se pueden convertir en factores, pero los niveles de un
factor siempre serán valores de carácter. Puedes ver los niveles posibles para un factor a
través del comando levels.
Para cambiar el orden en el que se mostrarán los niveles de su orden ordenado por
defecto, el argumento “levels =” puede recibir un vector de todos los valores posibles de
la variable en el orden que desee. Si el pedido también debe utilizarse al realizar
comparaciones, utilice el argumento opcional ordenado = VERDADERO. En este caso, el
factor se conoce como un factor ordenado.
Los niveles de un factor se utilizan cuando se muestran los valores del factor. Se puede
cambiar estos niveles en el momento en que crea un factor pasando un vector con los
nuevos valores a través del argumento labels =. Tenga en cuenta que esto realmente
cambia los niveles internos del factor y para cambiar las etiquetas de un factor después
de que se ha creado, se utiliza la forma de asignación de la función de niveles. Para
ilustrar este punto, considere un factor tomando valores enteros que queremos mostrar
como números romanos.
# Tres niveles
> factor(1:3)
[1] 1 2 3
Levels: 1 2 3
Serie Apuntes de Finance and Econometrics Group N°01. Octubre del 2020.
Introducción al R y al R- Studio. Bustamante Romaní, Rafael.
22
El atributo “levels” indica los valores numéricos posibles (es decir los caracteres
diferentes que aparecen en el vector). Se utiliza, por ejemplo, para dividir una población
en grupos.
La función “factor” se utiliza para codificar un vector como un factor. Creando tantos
niveles como le indiquemos.
Con la opción “exclude”, por ejemplo “factor(1 : 5, exclude = 4)” excluimos los valores de
los niveles que necesitemos y con “ordered” especificamos si los niveles del factor están
ordenados.
# Cinco niveles
> factor(1:3, levels=1:5)
[1] 1 2 3
Levels: 1 2 3 4 5
# Un vector de dos elementos con cuatro niveles
aa<-factor(c(2,3),levels=2:5)
> aa
[1] 2 3
Levels: 2 3 4 5
levels(aa)
> levels(aa)
[1] "2" "3" "4" "5"
factor(c("Mujer","Mujer","Hombre"))
[1] Mujer Mujer Hombre
Levels: Hombre Mujer
# Cinco niveles excluyendo el cuarto
factor(1:5, exclude=4)
[1] 1 2 3 <NA> 5
Levels: 1 2 3 5
Serie Apuntes de Finance and Econometrics Group N°01. Octubre del 2020.
Introducción al R y al R- Studio. Bustamante Romaní, Rafael.
23
Un error muy común es utilizar variables aparentemente numéricas en análisis
estadísticos, por ejemplo números telefónicos o códigos postales. Por ello antes de
utilizar un vector con caracteres cualitativos o cuantitativos dentro de un análisis, hace
falta convertirlo en un factor.
Para convertir el factor predeterminado fdata a números romanos, usamos la forma de
asignación de la función levels:
> data = c(1,2,2,3,1,2,3,3,1,2,3,3,1)
> fdata = factor(data)
> fdata
[1] 1 2 2 3 1 2 3 3 1 2 3 3 1
Levels: 1 2 3
> rdata = factor(data,labels=c("I","II","III"))
> rdata
[1] I II II III I II III III I II III III I
Levels: I II III
> levels(fdata) = c('I','II','III')
> fdata
[1] I II II III I II III III I II III III I
Levels: I II III
Serie Apuntes de Finance and Econometrics Group N°01. Octubre del 2020.
Introducción al R y al R- Studio. Bustamante Romaní, Rafael.
24
Como ejemplo de un factor ordenado, considere los datos que consisten en los nombres
de meses:
Aunque los meses claramente tienen una ordenación, esto no se refleja en la salida de la
función de tabla. Además, los operadores de comparación no son compatibles con
factores no ordenados. La creación de un factor ordenado resuelve estos problemas:
> mons=c("March","April","January","November","January", "September",
"October","September","November","August","January","November",
"November","February","May","August","July","December","August",
"August","September","November", "February","April")
> mons = factor(mons)
> table(mons)
mons
April August December February January July
2 4 1 2 3 1
March May November October September
1 1 5 1 3
> mons = factor(mons,levels=c("January","February","March", "April", "May",
"June","July","August","September", "October", "November" ,"December"),
ordered=TRUE)
Si digitamos en el siguiente comando tenemos
mons[1] < mons[2]
[1] TRUE
table(mons)
mons
January February March April May June
3 2 1 2 1 0
July August September October November December
1 4 3 1 5 1
Serie Apuntes de Finance and Econometrics Group N°01. Octubre del 2020.
Introducción al R y al R- Studio. Bustamante Romaní, Rafael.
25
Si queremos calcular la media de los valores numéricos originales de la variable fert, tendríamos
que convertir los valores usando la función levels:
7.6 Indexación de Factores
La indexación del valor devuelto de la función levels es la forma más confiable para
convertir los factores numéricos a sus valores numéricos originales. Cuando se crea
primero un factor, todos sus niveles se almacenan junto con el factor y si se extraen
subconjuntos del factor, se conservarán todos los niveles originales. Esto puede crear
problemas al construir matrices de modelos y puede o no ser útil al mostrar los datos
> mean(fert)
[1] NA
Warning message:
argument is not numeric or logical:
returning NA in: mean.default(fert)
> mean(as.numeric(levels(fert)[fert]))
[1] 23.33333
> fert = c(10,20,20,50,10,20,10,50,20)
> fert = factor(fert,levels=c(10,20,50),ordered=TRUE)
> fert
[1] 10 20 20 50 10 20 10 50 20
Levels: 10 < 20 < 50
Serie Apuntes de Finance and Econometrics Group N°01. Octubre del 2020.
Introducción al R y al R- Studio. Bustamante Romaní, Rafael.
26
usando, digamos, la función de tabla. Como ejemplo, considere una muestra aleatoria del
vector de letras, que es parte de la distribución de base R.
A pesar de que sólo cinco de los niveles realmente se representan, la función de tabla
muestra las frecuencias para todos los niveles de los factores originales. Para cambiar
esto, podemos simplemente usar otra llamada para factor.
Para excluir ciertos niveles de aparecer en un factor, el argumento excluir = se puede
pasar al factor. Por defecto, el valor faltante (NA) se excluye de los niveles de factor; para
crear un factor que incluya valores perdidos de una variable numérica, use exclude =
NULL.
Se debe tener cuidado al combinar variables que son factores, porque la función c
interpretará los factores como enteros. Para combinar los factores, primero deben ser
convertidos de nuevo a sus valores originales (a través de la función de los niveles), luego
catenated y convertido a un nuevo factor:
> lets = sample(letters,size=100,replace=TRUE)
> lets = factor(lets)
> table(lets[1:5])
a b c d e f g h i j k l m n o p q r s t u v w x y z
1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1
> table(factor(lets[1:5]))
a k q s z
1 1 1 1 1
Serie Apuntes de Finance and Econometrics Group N°01. Octubre del 2020.
Introducción al R y al R- Studio. Bustamante Romaní, Rafael.
27
Existen funciones que nos permiten convertir diferentes clases de objetos a modos
diferentes. Una situación frecuente es la conversión de factores a valores numéricos. En
este caso, R realiza la conversión usando las expresiones “as.numeric” y “as.character”.
Para realizar la conversión manteniendo los valores literales del factor, primero se debe
convertir a carácter y después a numérico. Este procedimiento puede ser bastante útil si
en un archivo una variable numérica también tiene valores no-numéricos.
> l1 = factor(sample(letters,size=10,replace=TRUE))
> l2 = factor(sample(letters,size=10,replace=TRUE))
> l1
[1] o b i v q n q w e z
Levels: b e i n o q v w z
> l2
[1] b a s b l r g m z o
Levels: a b g l m o r s z
> l12 = factor(c(levels(l1)[l1],levels(l2)[l2]))
> l12
[1] o b i v q n q w e z b a s b l r g m z o
Levels: a b e g i l m n o q r s v w z
Serie Apuntes de Finance and Econometrics Group N°01. Octubre del 2020.
Introducción al R y al R- Studio. Bustamante Romaní, Rafael.
28
> c.p<-c(18002,18194,18199)
> c.p
[1] 18002 18194 18199
> mode(c.p)
[1] "numeric"
> codigo.postal<-factor(c.p)
> codigo.postal
[1] 18002 18194 18199
Levels: 18002 18194 18199
> c.p<-c(18002,18194,18199)
> c.p
[1] 18002 18194 18199
> mode(c.p)
[1] "numeric"
> codigo.postal<-factor(c.p)
> codigo.postal
[1] 18002 18194 18199
Levels: 18002 18194 18199
> f<-factor(c(1,3))
> as.numeric(f)
[1] 1 2
> # Para guardarlos primero lo convertimos en carácter y luego en numerico
> as.numeric(as.character(f))
[1] 1 3
Serie Apuntes de Finance and Econometrics Group N°01. Octubre del 2020.
Introducción al R y al R- Studio. Bustamante Romaní, Rafael.
29
7.7 Listas
Una lista se construye con la función list que devuelve un objeto de tipo lista con tantos
componentes como argumentos se le suministren y es utilizado para devolver el
resultado de una función.
Una lista se crea de manera similar a un marco de datos con la función list. No existe
ninguna limitación en el tipo de objetos que se pueden incluir. A diferencia de
data.frame(), los nombres de los objetos no se toman por defecto; tomando los vectores x
y y del ejemplo anterior:
Puede referirse a cada uno de los elementos de la lista de dos formas distintas: Si tiene
nombre, como en este caso, mediante el nombre de la lista, el símbolo $ y el nombre del
elemento. En cualquier caso, siempre puede referirse a él mediante el índice de posición
entre dobles corchetes.
> dias.semana
[1] "Lunes" "Martes" "Miercoles" "Jueves" "Viernes" "Sabado" "Domingo"
> list(A=dias.semana,B=1:7)
>A
[1] "Lunes" "Martes" "Miercoles" "Jueves" "Viernes" "Sabado" "Domingo"
> B
[1] 1 2 3 4 5 6 7
Serie Apuntes de Finance and Econometrics Group N°01. Octubre del 2020.
Introducción al R y al R- Studio. Bustamante Romaní, Rafael.
30
La diferencia fundamental entre las tres formas, [, [[ y $ es que la primera permite
seleccionar varios elementos, en tanto que las dos últimas solo permiten seleccionar uno.
Además, $ no permite utilizar índices calculados. El operador [[necesita que se le
indiquen todos los índices (ya que debe seleccionar un sólo elemento) en tanto que
[permite obviar índices, en cuyo caso se seleccionan todos los valores posibles. Si se
aplican a una lista, [[devuelve el elemento de la lista especificado y [devuelve una lista
con los elementos especificados.
7.8 Operaciones con Matrices
Las matrices o variables indexadas (Arrays) son generalizaciones multidimensionales de
vectores. De hecho, son vectores indexados por dos o más índices y que se imprimen de
modo especial. Para crearlas utilizamos la función “matrix”.
Los parámetros principales de esta función son: data (vector que contiene los valores que
formarán la matriz), nrow (número de filas), ncol (número de columnas).
> # Tenemos que tener en cuenta el tamaño de la matriz
> m2<-matrix(1:4,3)
Warning message:
In matrix(1:4, 3) :
> list(A=dias.semana,B=1:7)$A
[1] "Lunes" "Martes" "Miercoles" "Jueves" "Viernes" "Sabado" "Domingo"
> list(A=dias.semana,B=1:7)$B
[1] 1 2 3 4 5 6 7
Serie Apuntes de Finance and Econometrics Group N°01. Octubre del 2020.
Introducción al R y al R- Studio. Bustamante Romaní, Rafael.
31
La longitud de los datos [4] no es un submúltiplo o múltiplo del número de filas [3] en la
matriz
> # la longitud de los datos [4] no es un subm´ultiplo o m´ultiplo del n´umero de
filas [3] en la matriz
> m2<-matrix(1:4,2)
> m2
[,1] [,2]
[1,] 1 3
[2,] 2 4
> m2<-matrix(1:8,4)
> m2
[,1] [,2]
[1,] 1 5
[2,] 2 6
[3,] 3 7
[4,] 4 8
# Hemos formado una matriz con el vector 1:8 de cuatro filas
m3<-matrix (1:8,ncol=4)
m3
> m3<-matrix (1:8,ncol=4)
> m3
[,1] [,2] [,3] [,4]
[1,] 1 3 5 7
[2,] 2 4 6 8
# Hemos formado una matriz con el vector 1:8 de cuatro columnas
Serie Apuntes de Finance and Econometrics Group N°01. Octubre del 2020.
Introducción al R y al R- Studio. Bustamante Romaní, Rafael.
32
Si quiere dar nombres a las columnas (o a las filas) puedes hacerlo asignando valores al
parámetro “dim-names”, lista con los nombres de las filas y las columnas. Las
componentes de la lista deben tener longitud o ser un vector de cadenas de caracteres con
la misma longitud que la dimensión de la matriz.
# Renombramos las columnas
matrix(1:9,3,3,dim=list(c(),c("A1","A2","A3")))
> matrix(1:9,3,3,dim=list(c(),c("A1","A2","A3")))
A1 A2 A3
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
> # Renombramos las filas
> matrix(1:9,3,3,dim=list(c("a1","a2","a3"),c()))
[,1] [,2] [,3]
a1 1 4 7
a2 2 5 8
a3 3 6 9
# Renombramos filas y columnas
matrix(1:9,3,3,dim=list(c("a1","a2","a3"),c("A1","A2","A3")))
A1 A2 A3
a1 1 4 7
a2 2 5 8
a3 3 6 9
Serie Apuntes de Finance and Econometrics Group N°01. Octubre del 2020.
Introducción al R y al R- Studio. Bustamante Romaní, Rafael.
33
Una operación muy común es hacer referencia a una submatriz o a un elemento de la
matriz, se realiza indicando los índices de los elementos a los que se hace referencia.
Podemos hacer referencia a una fila (vector) mediante matriz [i, ], con i el índice de la fila
que queremos mostrar, o a una columna mediante matriz[ , j] con j el índice de la columna
que queremos mostrar. Si lo que queremos es un elemento concreto indicamos los dos
índices matrices [i, j], por ejemplo, con matriz [2, 1], que da el valor 2º de la 1a variable
que coincide con el 1o valor de la 2a variable. Un argumento útil en estas operaciones es
la variable lógica “byrow” que indica si la matriz debe construirse por filas o por
columnas (el valor predeterminado es F).
> # Introducimos los datos, peso, altura, edad.
> datos<-c(70,108,82,1.80,2.06,1.98,27,19,32)
> mm<-matrix(datos,ncol=3,dimnames=list(c("Peso","Altura","Edad"),c()),byrow=T) >
# Con byrow=T le hemos dicho que lea primero por filas
> mm
> datos<-c(70,108,82,1.80,2.06,1.98,27,19,32)
> mm<-matrix(datos,ncol=3,dimnames=list(c("Peso","Altura","Edad"),c()),byrow=T)
> mm
[,1] [,2] [,3]
Peso 70.0 108.00 82.00
Altura 1.8 2.06 1.98
Edad 27.0 19.00 32.00
> mm
[,1] [,2] [,3]
Peso 70.0 108.00 82.00
Altura 1.8 2.06 1.98
Edad 27.0 19.00 32.00
> mm<-matrix(datos,ncol=3,dimnames=list(c("Peso","Altura","Edad"),c()),byrow=F)
> # Con byrow=F le hemos dicho que lea primero por columnas, con lo que no se
muestra correctamente
Serie Apuntes de Finance and Econometrics Group N°01. Octubre del 2020.
Introducción al R y al R- Studio. Bustamante Romaní, Rafael.
34
Podemos realizar operaciones con matrices de la misma forma que lo hacíamos con los
vectores, es decir componente a componente: suma, resta, multiplicación por escalares,
multiplicación elemento a elemento, división elemento a elemento, exponenciación,
división entera y módulo, que se realizan mediante los símbolos: +, - , *, /, ̂ , % / % y % %.
> mm
[,1] [,2] [,3]
Peso 70 1.80 27
Altura 108 2.06 19
Edad 82 1.98 32
> M1
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> M2<-matrix((1:6)^2,2,3)
> M2
[,1] [,2] [,3]
[1,] 1 9 25
[2,] 4 16 36
> M1+M2
[,1] [,2] [,3]
[1,] 2 12 30
[2,] 6 20 42
Serie Apuntes de Finance and Econometrics Group N°01. Octubre del 2020.
Introducción al R y al R- Studio. Bustamante Romaní, Rafael.
35
Aunque en principio no están relacionadas las matrices con las tablas de frecuencias a
partir de factores, podemos utilizar las primeras para expresar las segundas. Hemos visto
que un factor define una tabla de entrada simple. Del mismo modo, dos factores definen
una tabla de doble entrada, y así sucesivamente. La función “table ()” calcula tablas de
frecuencias a partir de factores de igual longitud. Si existen k argumentos categóricos, el
resultado será una variable k-indexada, que contiene la tabla de frecuencias.
7.9 Arrays (Variable Multiindexada)
La generalización de los vectores y matrices son las variables multiindexadas,
denominadas arrays, y de las cuales son casos particulares los vectores y matrices. Una
variable indexada (array) es una colección de datos, por ejemplo, numéricos, indexados
por varios índices. R permite crear y manipular variables indexadas, por ejemplo, para
crear una variable multiindexada se utiliza la función “array (data, dim, dimnames)”
donde “dim” es un vector de dimensiones. Además, podemos hacer referencia a
cualquier subconjunto de la misma, de modo similar a las matrices.
a=c(1,3,2)
b=1.3
b=1:3
table(a,b)
Serie Apuntes de Finance and Econometrics Group N°01. Octubre del 2020.
Introducción al R y al R- Studio. Bustamante Romaní, Rafael.
36
7. Bibliografía
Paradis, E. (2010). R para principiantes. Universit Montpellier II. París: Institut des Sciences de
l’E´volution.
González, A., & González, S. (2000). Introdución al R. Notas sobre R: Un entorno de programación para
Análisis de Datos y Gráficos. cran.r-project.org.
Serie Apuntes de Finance and Econometrics Group N°01. Octubre del 2020.
Introducción al R y al R- Studio. Bustamante Romaní, Rafael.
37