Ejemplo: Modelo de Vector Autorregresivo (VAR)

Modelos Vectoriales Autorregresivos (VAR)


Solución Ejercicio 12  del escrito de Alfonso Novales


En la web está disponible un capítulo sobre Modelos Vectoriales Autorregresivos (VAR) del profesor Alfonso Novales, para acceder a ese documento haga clic aquí, en el cual se expone la naturaleza de los VAR de una manera muy sencilla, intuitiva y con una matemática muy amigable. Al final de este escrito se encuentra propuesto un ejercicio cuya solución se presenta a continuación

Ejercicio
Considere el modelo estructural recursivo,




donde afecta a sólo con cierto retraso. Note que este modelo permite identificar el término de error a partir de las observaciones de la variable . Pruebe que este modelo está exactamente identificado, en el sentido de que todos sus coeficientes, así como las varianzas de los dos términos de error pudeen recuperarse a partir de la estimación del modelo VAR(1) en estas dos variables. (las soluciones son)



Sistema que puede resolverse para obtener los 9 parámetros del modelo estructural recursivo.
Muestre que en este modelo, no sólo se pueden recuperar estimaciones de todos los parámetros que aparecen en el modelo estructural, sino también las series temporales de los términos de error
y .

Solución 







             





 


Esto se escribe de forma más compacta como,


  Esta es la forma estándar del VAR en forma reducida.
donde y

Desarrollando estas operaciones se tiene,






Desarrollando este producto de matrices y teniendo en cuenta que y haciendo con tenemos



De manera que el VAR de forma reducida se puede escribir de la siguiente forma:





O de forma más compacta se puede reescribir así





con las siguientes varianzas y covarianzas







Estimando esas ecuaciones del VAR de forma reducida se pueden recuperar todos los parámetros del VAR estructural subyacente, con lo cual este modelo estructural está exactamente identificado con la imposición de una única restricción (cumpliendo la condición de que el número de restricciones necesarias para identificar exactamente un modelo es donde es el número de variables).Y de esta manera queda resuelto el Ejercicio.

Referencia


Novales Alfonso (2003). Modelos Vectoriales Autorregresivos (VAR). Universidad Complutense. Notas de Clases


Erratas en el documento en cuestión de Novales Alfonso (2003).
    Página 1
    1. Sustitúyase la palabra autoregresivo por autorregresivo.
    2. segunda línea, léase:

          "...las interacciones simultáneas entre un grupo de variables."


    Página 2
    3. Primer párrafo, línea 4, léase:
        "estructural del modelo, no se incurre en los errores..."
   4. Segundo párrafo, línea 3, léase:
       " … de todas las variables aparecen como..."
   

    Página 5
    5. Penúltimo párrafo, línea 4: sustitúyase 11 por 10 y 3 por 2; y léase:
      "..., el modelo estructural consta de 10 parámatros: las dos constantes, los 6 coeficientes y los 2  parámetros de la matriz de covarianzas del vector " 

    Esto es debido a que por construcción los errores de un modelo estructural están incorrelados, con lo cual   por tanto sólo se tendrán 2 parámetros en la matriz de covarianzas, porque la covarianza será siempre cero.


¿Ha sido de utilidad? ¿Ha sido claro? Deja tu comentario!
Obtenga la versión pdf de este documento aquí
                                                              Jilber Urbina

Trabajando con Matrices en R

 Para crear una matriz en R se utiliza la función
matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)

donde matrix() corresponde al nombre de la función y todo lo que está dentro de los paréntesis son los argumentos de dicha función.

Argumentos

data: Es un vector de datos opcional
nrow: número deseado de filas
ncol: número deseado de columnas
byrow: valor lógico. Si es falso (valor por defecto), la matriz se llena por orden columna, de otra manera se llenará primero por filas
dimnames: utilizado para darles nombres a las filas y a las columnas, respectivamente

 
Ejemplo:
 A<-matrix(c(5, 7, 13, 4, 1, 7, 14, 3, 11), nrow=3, ncol=3, byrow=F,
+dimnames=list(c("Blanco", "Negro", "Rojo"), c("Toyota", "Audi", "Nissan")))

        Toyota Audi Nissan 
Blanco      5    4     14
Negro       7    1      3
Rojo       13    7     11


Se hubiera logrado el mismo resultado si sólo se escribe uno de los argumentos nrow=3 ó ncol=3, no hace falta escribir los dos, ahora veamos cómo cambia el resultado si indicamos en byrow=T (TRUE), es decir que la matriz se llene por columnas y no por filas.

A<-matrix(c(5, 7, 13, 4, 1, 7, 14, 3, 11), nrow=3, ncol=3, byrow=T,                                 +dimnames=list(c("Blanco", "Negro", "Rojo"), c("Toyota", "Audi", "Nissan")))

          Toyota Audi Nissan
 Blanco      5    7     13
 Negro       4    1      7
 Rojo       14    3     11

Para obtener más información sobre las matrices escriba ?matrix y ejecútelo pulsando enter si trabaja directamente en la página principal de R o pulsando Ctrl + r si trabaja desde un script (recomendado)



Agregando Filas y Columnas a una matriz: funciones rbind y cbind
Para agregar una fila a una matriz ya existente como en el caso de la matriz A creada en el ejemplo anterior, se debe utilizar la función rbind() y se usará la función cbind() para añadir columnas a una matriz. Como ejemplo agregaremos un nuevo color a la matriz A, con lo cual se debe entender que se agregará una fila más debajo de Rojo la cual llamaremos Azul y contendrá los valores 8, 5, 7. Con lo cual haremos:

Azul<-c(8,5,7) # con esto creamos el vector Azul con sus correspondientes elementos

A<-rbind(A, Azul)


         Toyota Audi Nissan
 Blanco      5    7     13
 Negro       4    1      7
 Rojo       14    3     11
 Azul        8    5      7


Ahora agregaremos a esa misma matriz A, una nueva columna llamada Hyundai y contendrá los siguientes valores 2, 7, 3, 5

Hyundai<-c(2,7,3,5) #con esto creamos el vector Hyundai con sus correspondientes elementos

A<-cbind(A,Hyundai)


         Toyota Audi Nissan Hyundai
 Blanco      5    7     13       2
 Negro       4    1      7       7
 Rojo       14    3     11       3
 Azul        8    5      7       5


Seleccionando elementos de una matriz.
Los elementos de una matriz están indexados con dos índices lo cual hace que resulte fácil acceder a los elementos y trabajar con ellos si lo que nos interesa es sólo una parte de la información contenida en una matriz y no la matriz entera, esto se logra con el operador de indexación [i, j] donde i es el elemento fila y j es el elemento columna, esto es así porque si A es una matriz, entonces sus elementos serán $a_{i,j}$, de manera que si quisiéramos seleccionar el número de automóviles blancos correspondiente a la marca Audi podríamos hacerlo de dos maneras:

1. Escribimos el nombre de la matriz y luego entre corchetes la ubicación siendo [nombre de fila, nombre de columna], los nombres deberán ir entre comillas.
A["Blanco", "Audi"] 
[1] 7

2. Escribimos el nombre de la matriz y luego entre corchetes la ubicación siendo [número de fila, número de columna]
A[1,2]
[1] 7

En la segunda orden lo que se indica a R es que me muestre el elemento que ocupa la posición (1,2), es decir, aquél elemento que está en la fila 1 y columna 2.

También se pueden seleccionar vectores enteros, vamos a seleccionar todos los vehículos correspondientes al color blanco, para ello lo que le debemos pedir a R es que nos seleccione y muestre todos los elementos que están en la fila 1, esto se hace así:
A[1,]                   # otra forma de hacerlo es 
A["Blanco",]

Toyota    Audi  Nissan Hyundai
   5       7      13       2


A manera de ejercicios haremos lo siguiente:
  1. Seleccionar todos los vehículos negros y rojos
  2. Seleccionar todos los vehículos marca Toyota y Audi
  3. Seleccionar sólo los Nissan y Hyundai azules
  4. Agregar una nueva marca: Kia con valores 7, 1, 9, 12
  5. Agregar una nueva fila llamada Verde con los siguientes valores 4, 5, 2, 1, 0
  6. Seleccionar los Hyundai y Kia azules y verdes
Solución:

1. Seleccionar todos los vehículos negros y rojos
A[2:3,] 

      Toyota Audi Nissan Hyundai
 Negro      4    1      7       7
 Rojo      14    3     11       3


4. Agregar una nueva marca: Kia con valores 7, 1, 9, 12
A<-cbind(A,Kia)  

       Toyota Audi Nissan Hyundai Kia
 Blanco      5    7     13       2   7
 Negro       4    1      7       7   1
 Rojo       14    3     11       3   9
 Azul        8    5      7       5  12


2. Seleccionar todos los vehículos marca Toyota y Audi
 A[,1:2] 
       Toyota Audi
 Blanco      5    7
 Negro       4    1
 Rojo       14    3
 Azul        8    5


5. Agregar una nueva fila llamada Verde con los siguientes valores 4, 5, 2, 1, 0
A<-rbind(A, Verde)

       Toyota Audi Nissan Hyundai Kia
 Blanco      5    7     13       2   7
 Negro       4    1      7       7   1
 Rojo       14    3     11       3   9
 Azul        8    5      7       5  12
 Verde       4    5      2       1   0


3. Seleccionar sólo los Nissan y Hyundai azules
A[4,3:4] 

Nissan Hyundai
      7       5




6. Seleccionar los Hyundai y Kia azules y verdes
 A[4:5,4:5] 
      Hyundai Kia
 Azul        5  12
 Verde       1   0


Eliminando filas y columnas
Ya hemos visto cómo se agregan filas y columnas a una matriz ya existente, pero a veces es útil también eliminarlas y así de fácil como es agregar así de fácil es eliminar también.

A continuación vamos a eliminar la fila y la columna que agregamos en el parte 5 y 6 del ejercicio anterior, es decir, vamos a eliminar la fila Verde y la columna Kia.

Para eliminar filas o columnas hay que tener en cuenta la forma de indexar Matrices, aquí hay un documento que explica muy bien esto.




Eliminando la columna Kia Eliminando la fila Verde
 A<-A[ ,-5]
 A<-A[ ,-"Kia"]
       Toyota Audi Nissan Hyundai
Blanco      5    7     13       2 
 Negro       4    1      7       7
 Rojo       14    3     11       3
 Azul        8    5      7       5
 Verde       4    5      2       1


También se pudo haber eliminado de una sola vez  
A<-A[-5,-5] ó 
A<-A[-"Verde",-"Kia"]

 A<-A[-5,]
A<-A[-"Verde",]
       Toyota Audi Nissan Hyundai
 Blanco      5    7     13       2
 Negro       4    1      7       7
 Rojo       14    3     11       3
 Azul        8    5      7       5


Transponer una Matriz
Una función muy útil es la transposición de matrices, como ya se había mencionado anteriormente en Introducción a las funciones básicas de R: Funciones con Vectores, la función t() es para transponer tanto vectores como matrices, en este caso la usaremos para transponer la matriz A que hemos creado y editado a lo largo de toda esta página.


Matriz A
print(A)


    Toyota Audi Nissan Hyundai 
Blanco      5    7     13       2
 Negro       4    1      7       7
 Rojo       14    3     11       3
 Azul        8    5      7       5


Transpuesta de A
t(A)


       Blanco Negro Rojo Azul 
Toyota       5     4   14    8
 Audi         7     1    3    5
 Nissan      13     7   11    7
 Hyundai      2     7    3    5


Suma y resta de matrices
Dos matrices son conformables para la suma y resta si son de la misma dimensión, teniendo esto en mente, en R podemos fácilmente sumar y restar matrices indicando la suma con + y la resta con –

A continuación le sumaremos a la matriz A de nuestro ejemplo anterior su transpuesta y luego a la matriz A le restaremos su transpuesta.


A + t(A)
A+t(A) 


       Toyota Audi Nissan Hyundai
 Blanco     10   11     27      10
 Negro      11    2     10      12
 Rojo       27   10     22      10
 Azul       10   12     10      10






A - t(A)
 A-t(A) 


       Toyota Audi Nissan Hyundai
 Blanco      0    3     -1      -6
 Negro      -3    0      4       2
 Rojo        1   -4      0      -4
 Azul        6   -2      4       0


Multiplicación de Matrices
Tal y como se había comentado anteriormente en Introducción a las funciones básicas de R: Funciones con Vectores, hay dos formas de multiplicar matrices: la multiplicación elemento a elemento y la multiplicación definida por el álgebra matricial donde debe cumplirse la condición de conformabilidad   para la multiplicación donde el número de columnas de la primera matriz debe ser igual al número de filas de la segunda. Para multiplicar dos matrices elemento a elemento estas deben ser de igual dimensión.

Debe recordarse que la multiplicación elemento a elemento se indica con el símbolo * y la multiplicación matricial con los símbolos %*%, a continuación se hacen estas dos multiplicaciones, multiplicaremos a la matriz A por su transpuesta:

Multiplicación elemento a elemento
 A*t(A)


      Toyota Audi Nissan Hyundai
 Blanco     25   28    182      16
 Negro      28    1     21      35
 Rojo      182   21    121      21
 Azul       16   35     21      25





Multiplicación matricial
 A%*%t(A) 

      Blanco Negro Rojo Azul
 Blanco    247   132  240  176
 Negro     132   115  157  121
 Rojo      240   157  335  219
 Azul      176   121  219  163


Determinante de una matriz
Para obtener el determinante de cualquier matriz, se usa la función det(), recuérdese que para poder calcular el determinante de cualquier matriz esta debe ser cuadrada. El determinante de nuestra matriz A es:
det(A) 
[1] 3028

Inversa de una matriz

Es muy sencillo calcular la inversa de una matriz en R, todo lo que se necesita es aplicar la función solve() a la matriz de la cual se desea obtener su inversa. Es importante tener en en cuenta que sólo las matrices cuyo determinante sea diferente de cero tiene tienen una inversa definida (son invertibles), en nuestro caso la matriz A tiene determinante diferente de cero con lo cual se le puede calcular la inversa y esta es:


solve(A) 
             Blanco       Negro        Rojo        Azul
 Toyota  -0.06737120 -0.05614267  0.07793923  0.05878468
 Audi     0.03830911 -0.13474240 -0.11294584  0.24108322
 Nissan   0.09114927  0.07595773  0.04161162 -0.16776750
 Hyundai -0.05812417  0.11822985 -0.07001321  0.09973580


Extrayendo la diagonal principal de una matriz
En ocasiones es muy importante trabajar sólo con los valores de la diagonal principal de una matriz, por ejemplo en el caso de la diagonal de la matriz de varianzas y covarianzas, donde la diagonal contienen los valores de las varianzas de las variables aleatorias, en este caso resultaría útil contar con una función que nos proporciones esa información dada una matriz, esa función es diag(), con esta función obtendremos la diagonal de la matriz A y de la inversa de A.


Diagonal de A
 diag(A) 

[1]  5  1 11  5


Diagonal de la inversa de A
 diag(solve(A)) 
[1] -0.06737120 -0.13474240  0.04161162  0.09973580

Tal y como se aprecia en los resultados, la función diag() nos devuelve un vector que contiene los elementos de la diagonal de la matriz que se le ha proporcionado. Nótese que si a la función diag() le proporcionamos una matriz, nos devuelve su diagonal, pero ¿Qué pasaría si en lugar de darle como argumento una matriz, le damos un número concreto? La respuesta a esta pregunta da pie a la siguiente sección.

Generar una matriz unitaria de dimensión m x m
Si a la función diag() en vez de proporcionarle una matriz para que nos devuelva su diagonal, le proporcionamos un número (un escalar) nos devuelve una matriz unitaria con elementos en su diagonal principal igual al número que le hemos proporcionado y de dimensión igual a ese mismo número multiplicado por él mismo, puesto que la matriz unitaria es cuadrada, es decir que si a R le decimos que ejecute diag(3) nos construirá una matriz unitaria 3x3, veámoslo a continuación.



diag(3)

    [,1] [,2] [,3]
 [1,]    1    0    0
 [2,]    0    1    0
 [3,]    0    0    1



diag(5)

    [,1] [,2] [,3] [,4] [,5]
 [1,]    1    0    0    0    0
 [2,]    0    1    0    0    0
 [3,]    0    0    1    0    0
 [4,]    0    0    0    1    0
 [5,]    0    0    0    0    1



diag(8)

   [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
 [1,]    1    0    0    0    0    0    0    0
 [2,]    0    1    0    0    0    0    0    0
 [3,]    0    0    1    0    0    0    0    0
 [4,]    0    0    0    1    0    0    0    0
 [5,]    0    0    0    0    1    0    0    0
 [6,]    0    0    0    0    0    1    0    0
 [7,]    0    0    0    0    0    0    1    0
 [8,]    0    0    0    0    0    0    0    1



Además hemos creado una matriz unitaria 5x5 y otra 8x8.





¿Ha sido de utilidad? ¿Ha sido claro? Deja tu comentario!


Jilber Urbina

Introducción a las funciones básicas de R: Funciones con Vectores

¿Qué es R?
Es un software de alto rendimiento que se está convirtiendo en la alternativa gratuita a muchos softwares de programación para lidiar con matrices y bases de datos de amplia magnitud. R compite con Matlab, SPSS, STATA, entre otros que están destinados a trabajar con líneas de comandos en lugar de ventanas desplegables para ejecutar funciones. La principal ventaja que tiene R con respecto a esos otros programas es que es gratis y sus complementos conforman una amplia lista que se extiende a aplicaciones a muchas ramas de las ciencias, principalmente a las matemáticas, estadísticas y econometría que en nuestro caso es lo que interesa, todos estos complementos también son completamente gratuitos y muy documentados.
R es un conjunto integrado de programas para manipulación de datos, cálculo y gráficos. Entre otras características dispone de:
  • almacenamiento y manipulación efectiva de datos,
  • operadores para cálculo sobre variables indexadas (Arrays), en particular matrices,
  • una amplia, coherente e integrada colección de herramientas para análisis de datos,
  • posibilidades gráficas para análisis de datos, que funcionan directamente sobre pantalla
    o impresora, y
  • un lenguaje de programación bien desarrollado, simple y efectivo, que incluye
    condicionales, ciclos, funciones recursivas y posibilidad de entradas y salidas. [R Development Core Team, 2000]
¿Qué no es R?
  • R no es sólo un lenguaje de programación como C++, Visual Basic, Java, etc.
  • No es un generador de gráficos interactivos como Matlab’s UI.
  • No es un programa de clicar y ejecutar como SPSS, Statistica, Eviews o StatgraphicsPLUS.
¿Cómo debe ser entendido R?
  • Es un lenguaje de alto nivel para la gestión y almacenamiento de datos.
  • Lenguaje con gran colección de funciones predefinidas para operaciones matriciales.
  • Generador de gráficos de alta calidad.
  • Lenguaje de programación de sintaxis estricta, similar a Matlab en este sentido.
¿Cómo obtener R?
El software puede descargarse gratuitamente de la siguiente dirección http://www.r-project.org/ y todos los complementos necesarios así como sus respetivos manuales de referencia se pueden obtener de The Comprehensive R Archive Network (CRAN)cuya dirección es http://cran.r-project.org/, luego cuando sea el momento se indicará como descargar los paquetes de complementos de R directamente desde el programa y cómo cargarlos para su ejecución.

Trabajando con Vectores en R

Todos los ejemplos que se describirán a continuación se pueden escribir directamente en la pantalla principal de R y para ejecutarlos basta con presionar enter al finalizar la línea de comandos, pero yo prefiero usar un Nuevo Script y para ello se hace clic en Archivo y seleccionar Nuevo Script, para ejecutar una línea de comandos desde un Script se debe usar Ctrl + r.

Concatenate function: c()

Existen muchas maneras para crear un vector en R. Vamos a crear un vector y a nombrarlo vec, vamos a usar la función concatenate para hacer una lista de números ordenados:
vec1 <- c( -2.5, -2.3, -1.85, -1.20, 0, 0.1, 0.85, 1.20, 1.70, 1.95, 2.45 )
vec1 ←┘ #para ver el resultado o vec1 Ctrl + r si se está trabajando desde un script
Este vector tendrá la siguiente apariencia:
  [1] -2.50 -2.30 -1.85 -1.20  0.00  0.10  0.85  1.20  1.70  1.95  2.45
Estas sólo son unas notas introductorias al uso de esta función, si se desea más información diríjase al sitio web oficial de R sobre ayuda y definición de esta función haciendo clic aquí.

Assignment operator

El operador “<- “ se llama operador de asignación y su función es asignar un resultado, función, o cualquier objeto creado en R a un nombre específico con el objetivo de guardarlo con ese nombre y luego recuperarlo simplemente escribiendo el nombre donde lo hemos asignado, el operador “=” hace lo mismo que “<-“  y que “->”.  
Si se desea asignar y ver los resultados al mismo tiempo se tiene que escribir toda la línea entre paréntesis.
(vec1 <- c( -2.5, -2.3, -1.85, -1.20, 0, 0.1, 0.85, 1.20, 1.70, 1.95, 2.45 ))


Colon operator, ":"

Se puede utilizar también el operador “:” para generar una secuencia de números, con este comando sólo se controla el punto de inicio y el fin de la secuencia,  por ejemplo, vamos a crear un vector que inicie en –2 y acabe en 2, para ello se utilizaría el operador ":" por defecto este operador separa cada cantidad numérica por una unidad, es decir, creará la secuencia siguiente, –2, –1, 0, 1, 2
vec2 <- -2:2   #cuyo resultado es      [1] -2 -1  0  1  2

Función Seq() 

Si el interés es crear una secuencia de números controlando el intervalo de separación, el punto de inicio de la secuencia y el punto de finalización convendría más usar la función seq cuya sintaxis es seq(from=_, to=_, by=_) donde seq es el comando para ejecutar la función “crear secuencia”, from indica el punto de inicio de la secuencia, to indica el valor final de la secuencia y by indica el valor por el cual se separará cada número con respecto a anterior y al siguiente (valor de incremento), por defecto ese es el orden del comando por lo cual no es necesario escribir explícitamente los nombres de los argumentos, si escribimos seq(1,10,1) el programa entenderá que se desea una secuencia que inicie en 1 y acabe en 10 y cada valor sea separado por incrementos unitarios, es decir, con esto se crearía una secuencia consecutiva de valores desde 1 hasta 10.
vec3<-seq(1,10,1)   #cuyo resultado sería
 [1]  1  2  3  4  5  6  7  8  9 10
Podemos incluso ejecutar una secuencia hacia decreciente, para ello hay que usar un valor de incremento negativo.
En el ejemplo anterior, sería lo mismo si hubiésemos escrito seq(from=1, to=10, by=1) esto generaría el mismo vector, el programa también entiende que si se cambia el orden pero se escribe explícitamente el nombre de cada argumento generará el vector que deseamos, es decir, el resultado de la siguiente orden  seq(from=1, to=10, by=1) es exactamente igual al resultado de esta otra seq(from=1, by=1, to=10), o cualquier otra combinación dará como resultado el mismo vector siempre y cuando se escriban explícitamente los nombres de los argumentos. No es el caso si se escribe seq(1,10,1)  o  seq(1,1,10), es decir es el mismo ejemplo anterior pero suprimiendo los nombre de los argumentos (from, to, by) en este caso las secuencias no serán iguales, la primera será un vector con números consecutivos desde 1 hasta 10 y el segundo sólo será el escalar 1, ¿Por qué? Porque en el segundo caso la orden que está recibiendo el programa es crea un vector que inicie en 1 y acabe en 1 con separaciones de 1o entre cada uno de ellos, por lo cual como el punto inicial y el final es 1 el programa descarta el argumento de separación de 10 porque es imposible hacer tal cosa, por tanto sólo devuelve el valor del escalar 1, con esto queda en evidencia que hay que tener mucho cuidado cuando se va a trabajar con funciones sin escribir explícitamente los nombres de los argumentos, yo siempre recomiendo escribir los argumentos, toma un poco más de tiempo pero nos aseguramos que el resultado que obtenemos es el que queremos.
  

Otro ejemplo es
vec5 <- seq( -3.1, 2.2, by=0.1 )
[1] -3.1 -3.0 -2.9 -2.8 -2.7 -2.6 -2.5 -2.4 -2.3 -2.2 -2.1 -2.0 -1.9 -1.8 -1.7 -1.6
[17] -1.5 -1.4 -1.3 -1.2 -1.1 -1.0 -0.9 -0.8 -0.7 -0.6 -0.5 -0.4 -0.3 -0.2 -0.1  0.0
[33]  0.1  0.2  0.3  0.4  0.5  0.6  0.7  0.8  0.9  1.0  1.1  1.2  1.3  1.4  1.5  1.6
[49]  1.7  1.8  1.9  2.0  2.1  2.2

Note que al lado izquierdo, al comienzo de cada fila se proporcionan cuatro números entre corchetes [1], [17], [33] y [49], estos números indican la posición del primer número de cada fila en el vector que se ha generado, es decir el número –3.1 es el primero del vector, el número –1.5 está en la posición 17, el número 0.1 están en la posición 33 y el 1.7 está en la posición 49, es fácil deducir que en la posición 52 se encuentra el número 2.0 y también es fácil deducir que la longitud del vector es de 54, es decir, que el vector tiene 54 elementos, siendo el elemento de la posición 54 el número 2.2.

Función para transponer un vector o una matriz: t()

 Hasta aquí es importante señalar que todos los vectores que hemos creado con las distintas funciones son vectores columnas, para crear un vector fila, es necesario crear un vector columna y luego transponerlo, hacer esto es muy sencillo y sólo es necesario usar la función t().  La función t() sirve tanto para transponer vectores como matrices


Vamos a transponer el último vector que hemos creado, al cual hemos nombrado vec5, para hacerlo solo se debe escribir t(vec5)
vec5t <- t(vec5)
    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14]
[1,] -3.1   -3 -2.9 -2.8 -2.7 -2.6 -2.5 -2.4 -2.3  -2.2  -2.1    -2  -1.9  -1.8
     [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24] [,25] [,26] [,27]
[1,]  -1.7  -1.6  -1.5  -1.4  -1.3  -1.2  -1.1    -1  -0.9  -0.8  -0.7  -0.6  -0.5
     [,28] [,29] [,30] [,31] [,32] [,33] [,34] [,35] [,36] [,37] [,38] [,39] [,40]
[1,]  -0.4  -0.3  -0.2  -0.1     0   0.1   0.2   0.3   0.4   0.5   0.6   0.7   0.8
     [,41] [,42] [,43] [,44] [,45] [,46] [,47] [,48] [,49] [,50] [,51] [,52] [,53]
[1,]   0.9     1   1.1   1.2   1.3   1.4   1.5   1.6   1.7   1.8   1.9     2   2.1
     [,54]
[1,]   2.2
En este otro caso los números entre corchetes indican la posición de cada elemento en el vector fila (puesto que se ha transpuesto un vector columna), ahora el número [1,] indica la fila en la que se encuentra el elemento y los números [,1], [,2],…, [,54] indican la columna en la que se encuentran dichos elementos, en este caso hemos transpuesto un vector de dimensión 54x1 por tanto tendremos como resultado un vector 1x54 y es precisamente eso lo que R nos proporciona.  Por ejemplo, el elemento en la posición [1,35] es el número 0.3 que se ha resaltado en amarillo, es donde se interceptan la fila 1 con la columna 35, formando el par [1,35]=0.3 . Para más información sobre esta función vaya al sitio web oficial de ayuda de R haciendo clic aquí.

Función Length ()

Una función que resulta muy útil para determinar la longitud de un vector (fila o columna) es la función length(). Ya se ha mencionado que el vector vec5 tiene una longitud de 54 elementos, esto se ha deducido porque en la posición 49 se encuentra el número 1.7, y hacen falta 5 números para llegar al último por lo cual el último número está en la posición 54 siendo esta la longitud del vector, que de hecho por ser un vector columna es de longitud 54 y de dimensión (54x1), pero no resulta del todo práctico obtener la longitud de un vector de esta manera, por lo cual hemos de usar la función length() y su uso se ilustra a continuación:
 length(vec5)
[1] 54

Y el resultado es 54 tal y como lo esperábamos.
Si desea tener más información sobre esa función haga clic aquí y será redireccionado al sitio oficial de R.

Función rep() 

Si lo que nos interesa es crear un vector de longitud 12 únicamente con 3 elementos: 1, 2, y 3 pero cada uno de ellos repetidos 4 veces, entonces es útil conocer la función rep() ya que esta crea un vector con valores repetidos. Vamos a crear el vector que hemos descrito anteriormente:
rep(c(1,2,3), each=4)
[1] 1 1 1 1 2 2 2 2 3 3 3 3
Tal y como se ha descrito se ha obtenido un vector con 12 elementos cada uno repetido 4 veces, se puede comprobar la longitud del vector usando length(rep(c(1,2,3), each=4)) lo que daría como resultado 12.
También se puede crear un vector con secuencia repetidas, por ejemplo, creamos una secuencia consecutiva desde el 1 al 4, y luego creamos un vector repitiendo la secuencia dos veces, observe que esta vez vamos a repetir la secuencia entera dos veces. Para lograr este cometido hemos de proceder de la siguiente manera:
1. Creamos la secuencia consecutiva desde 1 a 4 y la asignamos un nombre arbitrario, yo lo asignaré a la letra x
1:4->x # Los resultados de la secuencia guardada en x será:
[1] 1 2 3 4
2.Repetir esa secuencia dos veces.
rep(x, 2)
[1] 1 2 3 4 1 2 3 4
y así se crea un vector de secuencias repetidas dos veces, pero se pudo haber hecho todo en un solo paso, es decir, en lugar de crear primero el vector x y luego repetirlo, escribimos la secuencia directamente:  rep(1:4, 2)y así se obtiene el mismo resultado.
Podríamos también repetir cada elemento de la secuenca 1:4 dos veces, en lugar de repetir la secuencia entera dos veces como se ha hecho en el ejemplo anterior, esto se hace incluyendo el argumento “each=”
rep(1:4, each=2)
[1] 1 1 2 2 3 3 4 4
Incluso podríamos repetir tres veces la secuencia y en cada vez cada elemento se va a repetir dos veces, esto se logra así:
rep(1:4, each = 2, times = 3)
[1] 1 1 2 2 3 3 4 4 1 1 2 2 3 3 4 4 1 1 2 2 3 3 4 4
Como se pude ver es muy flexible trabajar con la generación de vectores en R, estas sólo son unas notas introductorias y si se desea más información sobre la función rep se pude consultar directamente en el sitio oficial de R haciendo clic aquí

Suma y Resta de Vectores

Dos o más vectores pueden ser sumados utilizando el operador de suma tal y cual se usa en excel o en cualquier calculadora de mano, para sumar dos vectores primero hay que disponer de ellos, por el momento los crearemos. Crearemos tres vectores x, y  y z  de la siguiente manera:
x<-1:10;    y<-seq(from=10, to=1, by=-1);   z<-seq(from=1, to=5, length.out=10)
x [1]  1  2  3  4  5  6  7  8  9 10
y [1] 10  9  8  7  6  5  4  3  2  1
z [1] 1.000000 1.444444 1.888889 2.333333 2.777778 3.222222 3.666667 4.111111
[9] 4.555556 5.000000
Sumando los vectores x y y  
x+y 
[1] 11 11 11 11 11 11 11 11 11 11
Sumando los tres vectores
x+y+z
[1] 12.00000 12.44444 12.88889 13.33333 13.77778 14.22222 14.66667 15.11111
[9] 15.55556 16.00000

Restando z  del vector x
x-z
[1] 0.0000000 0.5555556 1.1111111 1.6666667 2.2222222 2.7777778 3.3333333
[8] 3.8888889 4.4444444 5.0000000


Multiplicación de Vectores

Hay dos formas de multiplicar vectores: la multiplicación elemento a elemento y la multiplicación definida por el álgebra matricial donde debe cumplirse la condición de conformabilidad  para la multiplicación donde el número de columnas del primero debe ser igual al número de filas del segundo, a continuación se hacen estas dos multiplicaciones:
Multiplicación elemento a elemento da como resultado un vector de igual dimensión que los anteriores.
x*y
 [1] 10 18 24 28 30 30 28 24 18 10

Por otro lado, como se ha señalado anteriormente también se pueden hacer productos de vectores siempre y cuando sean conformables, en este caso el producto matricial se indicará con los símbolos %*% y el producto elemento a elemento se indicará con el símbolo *, a continuación multiplicaremos el x con dimensión (10x1) por el vector x’ con dimensión (1x10) y dará como resultado la matriz de dimensión (10x10).
x%*%t(x)
   [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]    1    2    3    4    5    6    7    8    9    10
[2,]    2    4    6    8   10   12   14   16   18    20
[3,]    3    6    9   12   15   18   21   24   27    30
[4,]    4    8   12   16   20   24   28   32   36    40
[5,]    5   10   15   20   25   30   35   40   45    50
[6,]    6   12   18   24   30   36   42   48   54    60
[7,]    7   14   21   28   35   42   49   56   63    70
[8,]    8   16   24   32   40   48   56   64   72    80
[9,]    9   18   27   36   45   54   63   72   81    90
[10,]   10   20   30   40   50   60   70   80   90   100


Referencias

R Development Core Team (2000). Introducción a R. CRAN.R-Project
________________


                            ¿Ha sido de utilidad? ¿Ha sido claro? Deja tu comentario!                                                                                                         Jilber Urbina.