Existen varias alternativas para generar vectores y matrices:
Utilizando el menú Añadir de la Barra de Menú de la Ventana Principal se pueden definir matrices de tres formas:
Utilizando el menú emergente que aparece cuando en la ventana “vista de iconos” se selecciona el icono de la matriz correspondiente y se presiona el botón derecho del ratón, la matriz se puede visualizar, modificar, renombrar, borrar, … (véase ejemplo de la Ilustración 2‑14).
A continuación se hará una breve referencia a cada una de las tareas a las que se puede acceder a través de este menú:
Ver à permite visualizar el contenido de la matriz e informa de su dimensión. Además, informa del rango muestral utilizado si la matriz ha sido definida a partir de las variables existentes en la sesión de trabajo.
Editar à permite acceder al editor de matrices. Utilizando el botón Rellenar del editor de matrices, el usuario puede modificar sus valores situando el cursor en la celda correspondiente y tecleando el nuevo valor (para que estos cambios sean permanentes es necesario guardarlos antes de cerrar dicha ventana). El botón Propiedades de este editor, es otra forma de poder visualizar las propiedades de la matriz. El botón Transformar permite trasponer la matriz, calcular el producto de la traspuesta de la matriz por la matriz, multiplicar y dividir la matriz por un escalar, ….
Propiedades à permite ver algunas “propiedades” o características de la matriz. Las “propiedades” varian en función del tipo de matriz. Así, para matrices cuadradas, además de informar de su dimensión, rango y norma, proporciona la traza, el determinante, los valores propios, si es simétrica, si es definida positiva y si es idempotente.
Renombrar à permite cambiar el nombre de la matriz. Debe tenerse en cuenta que cuando se renombra una matriz esta deja de existir con el nombre antiguo y pasa a estar disponible bajo la nueva denominación.
Borrar à permite borrar la matriz. Debe tenerse en cuenta que cuando se borra una matriz esta deja de estar disponible.
El comando matrix permite generar matrices a partir de:
matrix nombre nueva matriz = {v1, v2, …, vk}
donde v1, v2, ... y vk son las variables a partir de las cuales se define la matriz.
El número de filas de la matriz coincidirá con el rango muestral corriente y el número de columnas con el número de variables. Los datos de la primera columna de la matriz hacen referencia a la primera variable (v1), los de la segunda columna a la segunda variable (v2) y así sucesivamente.
? print X
X (10 x 3) [t1 = 1, t2 = 10]
1.0000 2.4600 1079.5
1.0000 2.5100 1108.2
1.0000 2.7300 1116.8
1.0000 2.7300 978.09
1.0000 2.6300 809.62
1.0000 2.3800 1047.1
1.0000 2.4400 1164.3
1.0000 2.7500 1069.6
1.0000 2.9800 1040.3
1.0000 1.9500 1067.8
? smpl 2 4
Rango de datos completo: 1 - 10 (n = 10)
Muestra actual: 2 - 4 (n = 3)
? matrix A = {const, x1, x2}
Se ha generado la matriz A
? print A
A (3 x 3) [t1 = 2, t2 = 4]
1.0000 2.5100 1108.2
1.0000 2.7300 1116.8
1.0000 2.7300 978.09
? smpl 1 10
Rango de datos completo: 1 - 10 (n = 10)
Obsérvese que dado que las matrices X y A se han generado a partir de las series const, x1 y x2 existentes en la sesión de trabajo, Gretl además de informar de la dimensión de la matriz, informa del rango muestral utilizado para generarla y que en el caso de la matriz X es de la primera observación (t1=1) hasta la décima (t2=10) y que en el caso de la matriz A es de la observación segunda (t1=2) hasta la cuarta (t2=4). Se puede comprobar que el número de filas de la matriz A (3) coincide con el tamaño del rango muestral vigente en el momento de su creación y el número de columnas (3) coincide con el número de variables que han intervenido en su generación.
matrix nombre nueva matriz = {nombre de la lista de variables}
? print xlist --byobs
x1 x2
1 2.46 1079.50
2 2.51 1108.20
3 2.73 1116.80
4 2.73 978.09
5 2.63 809.62
6 2.38 1047.10
7 2.44 1164.30
8 2.75 1069.60
9 2.98 1040.30
10 1.95 1067.80
? matrix X={const, xlist}
Se ha reemplazado la matriz X
? print X
X (10 x 3) [t1 = 1, t2 = 10]
1.0000 2.4600 1079.5
1.0000 2.5100 1108.2
1.0000 2.7300 1116.8
1.0000 2.7300 978.09
1.0000 2.6300 809.62
1.0000 2.3800 1047.1
1.0000 2.4400 1164.3
1.0000 2.7500 1069.6
1.0000 2.9800 1040.3
1.0000 1.9500 1067.8
En el argumento del comando matrix pueden intervenir simultáneamente variables y series, siempre que tengan la misma longitud.
Obsérvese que las dos últimas columnas de la matriz X se corresponden con las variables que forman la lista “xlist” y la primera se corresponde con la variable const.
matrix nombre nueva matriz = { v11,v12,...,v1p; v21,v22,...,v2p; …; vn1,vn2,...,vnp }
donde vij es el valor numérico correspondiente al elemento que ocupa la fila i-ésima y la columna j-ésima, el subíndice i varia desde 1 hasta n (siendo n el número de filas de la matriz) y el subíndice j varia desde 1 hasta p (siendo p el número de columnas de la matriz).
Los datos numéricos, correspondientes a los elementos de la matriz, se deben introducir por filas y separados por una “coma”. Para separar unas filas de otras se debe utilizar un “punto y coma”.
? print C
C (3 x 3)
1 2 3
4 5 6
7 8 9
? matrix dt = {1, 2, 3, 4, 5, 6, 7, 8, 9}
Se ha generado la matriz dt
? print dt
dt (1 x 9)
1 2 3 4 5 6 7 8 9
? matrix d = {1; 2; 3; 4; 5; 6; 7; 8; 9}
Se ha generado la matriz d
? print d
d (9 x 1)
1
2
3
4
5
6
7
8
9
matrix nombre nueva matriz = f(matrices existentes)
Si se aplican estos operadores a los datos disponibles:
? print X XT
X (10 x 3) [t1 = 1, t2 = 10]
1.0000 2.4600 1079.5
1.0000 2.5100 1108.2
1.0000 2.7300 1116.8
1.0000 2.7300 978.09
1.0000 2.6300 809.62
1.0000 2.3800 1047.1
1.0000 2.4400 1164.3
1.0000 2.7500 1069.6
1.0000 2.9800 1040.3
1.0000 1.9500 1067.8
XT (3 x 10)
1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000
2.4600 2.5100 2.7300 2.7300 2.6300 2.3800 2.4400 2.7500 2.9800 1.9500
1079.5 1108.2 1116.8 978.09 809.62 1047.1 1164.3 1069.6 1040.3 1067.8
Recuerde que la trasposición de matrices consiste en intercambiar filas por columnas y, por tanto, si la dimensión de una matriz es mxn, el orden de su traspuesta será nxm (en este ejemplo 10x3 y 3x10, respectivamente).
Obsérvese que como Gretl no dispone de espacio suficiente para mostrar las 10 columnas que forman la matriz traspuesta, utiliza dos líneas para mostrar cada fila de la matriz.
? print XTX
XTX (3 x 3)
10.000 25.560 10481.
25.560 66.038 26742.
10481. 26742. 1.1071e+007
Para que el operador matrix funcione correctamente es necesario que las matrices que intervienen en la expresión de cálculo tengan la estructura adecuada para realizar la operación.
Obsérvese que la matriz XTX está definida, mientras que la matriz XX no, ello es debido a que para multiplicar matrices es necesario que el número de columnas de la primera matriz coincida con el número de filas de la segunda y, en el caso de la matriz XX esto no se cumple y Gretl emite el mensaje de error: “las matrices no tienen la estructura adecuada para poder realizar la operación”.
? print XTXD
XTXD (1 x 1)
5.8098e+005
Recuerde que el determinante sólo esta definido para matrices cuadradas.
? print XTXI
XTXI (3 x 3)
27.503 -4.6284 -0.014858
-4.6284 1.4718 0.00082674
-0.014858 0.00082674 1.2159e-005
Recuerde que sólo se pueden invertir matrices cuadradas cuyo determinante sea no nulo (XTX tiene inversa porque es una matriz no singular).
? print DXTX
DXTX (3 x 1)
10.000
66.038
1.1071e+007
La función diag genera un vector columna que contiene los elementos de la diagonal principal de la matriz.
# Se genera D como diferencia de XTX y C
? matrix D = XTX - C
Se ha generado la matriz D
? print XTX C S D
XTX (3 x 3)
10.000 25.560 10481.
25.560 66.038 26742.
10481. 26742. 1.1071e+007
C (3 x 3)
1 2 3
4 5 6
7 8 9
S (3 x 3)
11.000 27.560 10484.
29.560 71.038 26748.
10488. 26750. 1.1071e+007
D (3 x 3)
9.0000 23.560 10478.
21.560 61.038 26736.
10474. 26734. 1.1071e+007
Recuerde que para poder sumar o restar matrices es necesario que tengan la misma dimensión.
? print CE
CE (3 x 3)
2.7183 7.3891 20.086
54.598 148.41 403.43
1096.6 2981.0 8103.1
# Se genera CEL como la matriz resultante de aplicar el logaritmo natural a cada uno de los elementos de CE
? matrix CEL = log(CE)
Se ha generado la matriz CEL
? print CEL
CEL (3 x 3)
1 2 3
4 5 6
7 8 9
# Se genera XR como la matriz resultante de aplicar la raíz cuadradada a cada uno de los elementos de X
? matrix XR = sqrt(X)
Se ha generado la matriz XR
? print XR
XR (10 x 3)
1.0000 1.5684 32.856
1.0000 1.5843 33.290
1.0000 1.6523 33.419
1.0000 1.6523 31.274
1.0000 1.6217 28.454
1.0000 1.5427 32.359
1.0000 1.5620 34.122
1.0000 1.6583 32.705
1.0000 1.7263 32.254
1.0000 1.3964 32.677
Se debe tener en cuenta que las funciones exp, log y sqrt se aplican a cada uno de los elementos de la matriz.
? print RX
RX (1 x 1)
3
Recuerde que el rango de una matriz es el número de columnas linealmente independientes y que para que una matriz cuadrada sea invertible es necesario que su rango coincida con su dimensión (XTX es una matriz cuadrada de orden 3 y con rango es 3, por tanto, tiene inversa).
? print TXTX
TXTX (1 x 1)
1.1071e+007
Recuerde que la traza de una matriz es la suma de los elementos de su diagonal principal (TXTX es la suma de los elementos de la diagonal principal de XTX).
# Se genera TRISXTX como una matriz triangular superior a partir de XTX
? matrix TRISXTX = upper(XTX)
Se ha generado la matriz TRISXTX
? print XTX TRIIXTX TRISXTX
XTX (3 x 3)
10.000 25.560 10481.
25.560 66.038 26742.
10481. 26742. 1.1071e+007
TRIIXTX (3 x 3)
10.000 0.0000 0.0000
25.560 66.038 0.0000
10481. 26742. 1.1071e+007
TRISXTX (3 x 3)
10.000 25.560 10481.
0.0000 66.038 26742.
0.0000 0.0000 1.1071e+007
Recuerde que sólo se pueden generar matrices triangulares a partir de matrices cuadradas. En las matrices triangulares inferiores los elementos que están por encima de la diagonal principal son nulos y en las matrices triangulares superiores lo son los que están por debajo, los restantes elementos coinciden con los de la matriz de partida.
? print I3
I3 (3 x 3)
1 0 0
0 1 0
0 0 1
# Se genera I7 como una matriz identidad de orden 7
? matrix I7 = I(7)
Se ha generado la matriz I7
? print I7
I7 (7 x 7)
1 0 0 0 0 0 0
0 1 0 0 0 0 0
0 0 1 0 0 0 0
0 0 0 1 0 0 0
0 0 0 0 1 0 0
0 0 0 0 0 1 0
0 0 0 0 0 0 1
# Se genera una matriz de ceros
? matrix O32 = zeros(3,2)
Se ha generado la matriz O32
? print O32
O32 (3 x 2)
0 0
0 0
0 0
# se genera una matriz de unos
? matrix l32 = ones(3,2)
Se ha generado la matriz l32
? print l32
l32 (3 x 2)
1 1
1 1
1 1
Recuerde que una matriz identidad es una matriz cuadrada con elementos diagonales iguales a uno y elementos no diagonales nulos.
La función zeros permite generar matrices nulas y la función ones, matrices con todos sus elementos iguales a uno.
# Producto de F por F elemento a elemento
? matrix FMEF = F .* F
Se ha generado la matriz FMEF
# División de D por D elemento a elemento
? matrix FDEF = F ./ F
Se ha generado la matriz FDEF
? print F FMEF FDEF
F (2 x 3)
1 2 3
4 5 6
FMEF (2 x 3)
1 4 9
16 25 36
FDEF (2 x 3)
1 1 1
1 1 1
Para poder realizar el producto y el cociente de dos matrices elemento a elemento, es necesario que ambas tengan la misma dimensión. La matriz resultante se obtiene multiplicando o dividiendo los elementos que ocupan el mismo lugar en ambas matrices.
# Concatenación por filas
? matrix FGrows = F | G
Se ha generado la matriz FGrows
# Concatenación por columnas
? matrix FGcols = F ~ G
Se ha generado la matriz FGcols
? print F G FGrows FGcols
F (2 x 3)
1 2 3
4 5 6
G (2 x 3)
7 8 9
10 11 12
FGrows (4 x 3)
1 2 3
4 5 6
7 8 9
10 11 12
FGcols (2 x 6)
1 2 3 7 8 9
4 5 6 10 11 12
Para poder concatenar matrices es necesario que tengan la misma dimensión. El usuario debe tener en cuenta que en la concatenación por filas, las filas de la segunda matriz se añaden a las de la primera por la parte inferior y en la concatenación por columnas, las columnas de la segunda matriz se añaden a las de la primera por la parte derecha.
? print F vF
F (2 x 3)
1 2 3
4 5 6
vF (6 x 1)
1
4
2
5
3
6
La función vec permite convertir una matriz en un vector columna. Obsérvese que vF es un vector columna de 6 filas, donde en primer lugar aparecen los elementos de la primera columna de F, a continuación los de la segunda y, por último, los de la tercera columna.
# Se genera la matriz J
? matrix J = ones(3,2)
Se ha generado la matriz J
# Se genera HPKJ como el producto kronecker de H por J
? matrix HPKJ = H ** J
Se ha generado la matriz HPKJ
? print H J HPKJ
H (2 x 2)
1 2
3 4
J (3 x 2)
1 1
1 1
1 1
HPKJ (6 x 4)
1 1 2 2
1 1 2 2
1 1 2 2
3 3 4 4
3 3 4 4
3 3 4 4
Recuerde que el producto kronecker de una matriz Amxn por una matriz Bpxq es una matriz C(mxp)x(nxq) formada por (mxn) bloques de (pxq) elementos, donde cada uno de los bloques es el resultado de multiplicar cada uno de los elementos de la primera matriz por cada uno de los elementos de la segunda matriz. En este caso, la matriz resultante del producto kronecker de H por J consta de cuatro bloques de dimensiones 3x2 cada uno, donde el primer bloque es el resultado de multiplicar el primer elemento de la primera fila de H por cada uno de los elementos de J; el segundo bloque es el resultado de multiplicar el segundo elemento de la primera fila de H por cada uno de los elementos de J; el tercer bloque es el resultado de multiplicar el primer elemento de la segunda fila de H por cada uno de los elementos de J y el cuarto bloque es el resultado de multiplicar el segundo elemento de la segunda fila de H por cada uno de los elementos de J.
# Se genera el número de filas de G
? matrix rowsG = rows(G)
Se ha generado la matriz rowsG
? print G colsG rowsG
G (2 x 3)
7 8 9
10 11 12
colsG (1 x 1)
3
rowsG (1 x 1)
2
Las funciones cols y rows hacen referencia al número de filas y columnas de una matriz respectivamente.
? matrix vcC = I(2)
Se ha generado la matriz vcC
? matrix eigenC = eigengen(C,&vcC)
Se ha reemplazado la matriz eigenC
? print eigenC vcC
eigenC (3 x 1)
16.117
-1.1168
-1.2220e-015
vcC (3 x 3)
-0.23197 -0.78583 0.40825
-0.52532 -0.086751 -0.81650
-0.81867 0.61233 0.40825
La función eigengen permite calcular y guardar las raíces y vectores característicos de una matriz cuadrada. Para guardar los vectores característicos es necesario hacerlo en una matriz que haya sido definida previamente.
? matrix XTXc = P * P'
Se ha generado la matriz XTXc
? print P XTX XTXc
P (3 x 3)
3.1623 0.0000 0.0000
8.0828 0.84050 0.0000
3314.5 -57.147 286.78
XTX (3 x 3)
10.000 25.560 10481.
25.560 66.038 26742.
10481. 26742. 1.1071e+007
XTXc (3 x 3)
10.000 25.560 10481.
25.560 66.038 26742.
10481. 26742. 1.1071e+007
Recuerde que la función cholesky sólo es aplicable a matrices definidas positivas: si A es una matriz definida positiva Þ existe una matriz P tal que P’P=A (dado que XTX es una matriz definida positiva P*P’=XTX).
? matrix VXraya = mcov(Xraya)
Se ha generado la matriz VXraya
? print VXraya
VXraya (2 x 2)
0.078493 -5.3369
-5.3369 9500.7
La función mcov permite calcular la matriz de cuasivarianzas-cuasicovarianzas de las variables incluidas en las columnas de la matriz inicial. Dichas matrices son cuadradas y simétricas. En el ejemplo anterior, dado que la primera columna de VXraya se corresponde con la variable x1 y la segunda con x2, el primer elemento de la diagonal principal de VXraya es la cuasivarianza de x1, segundo la cuasivarianza de x2 y el elemento no diagonal es la cuasicovarianza de x1 y x2.
? print RXraya
RXraya (2 x 2)
1.0000 -0.19543
-0.19543 1.0000
La función mcorr permite calcular la matriz de correlaciones de las variables incluidas en las columnas de la matriz inicial. Dicha matriz es cuadrada, simétrica y sus elementos diagonales son iguales a uno. En el ejemplo anterior, dado que la primera columna de VXraya se corresponde con la variable x1 y la segunda con x2, el elemento no diagonal es la correlación entre x1 y x2.
Gretl permite calcular vectores que recogen la suma, media, valores máximos y mínimos tanto por filas como por columnas. Además, por columnas permite calcular el vector que recoge las cuasidesviaciones típicas.
# Vector fila que contiene la media de los elementos de cada columna de la matriz C
? matrix Cmc = meanc(C)
Se ha generado la matriz Cmc
# Vector fila que contiene los valores máximos de los elementos de cada columna de la matriz C
? matrix Cmaxc = maxc(C)
Se ha generado la matriz Cmaxc
# Vector fila que contiene los valores mínimos de los elementos de cada columna de la matriz C
? matrix Cminc = minc(C)
Se ha generado la matriz Cminc
# Vector fila que contiene las desviaciones estándar de los elementos de cada columna de la matriz C
? matrix Csd = sdc(C)
Se ha generado la matriz Csd
? print C Csc Cmc Cmaxc Cminc Csd
C (3 x 3)
1 2 3
4 5 6
7 8 9
Csc (1 x 3)
12 15 18
Cmc (1 x 3)
4 5 6
Cmaxc (1 x 3)
7 8 9
Cminc (1 x 3)
1 2 3
Csd (1 x 3)
2.4495 2.4495 2.4495
# Cálculos por filas
# Vector columna que contiene la suma de los elementos de cada fila de la matriz C
? matrix Csr = sumr(C)
Se ha generado la matriz Csr
# Vector columna que contiene la media de los elementos de cada fila de la matriz C
? matrix Cmr = meanr(C)
Se ha generado la matriz Cmr
# Vector columna que contiene los valores máximos de los elementos de cada fila de la matriz C
? matrix Cmaxr = maxr(C)
Se ha generado la matriz Cmaxr
# Vector columna que contiene los valores mínimos de los elementos de cada fila de la matriz C
? matrix Cminr = minr(C)
Se ha generado la matriz Cminr
? print C Csr Cmr Cmaxr Cminr
C (3 x 3)
1 2 3
4 5 6
7 8 9
Csr (3 x 1)
6
15
24
Cmr (3 x 1)
2
5
8
Cmaxr (3 x 1)
3
6
9
Cminr (3 x 1)
1
4
7
Obsérvese que los cálculos por columnas se recogen en vectores fila y los cálculos por filas se recogen en vectores columna.
Los elementos de una matriz se identifican por el nombre de la matriz seguido de dos números entre corchetes, donde el primero hace referencia a la fila y el segundo hace referencia a la columna en las que se encuentra ese elemento dentro de la matriz:
Nombre de la matriz[nº1,nº2]
? matrix c11 = C[1,1]
Se ha generado la matriz c11
? genr c33 = C[3,3]
Se ha generado el escalar c33 = 9
? scalar c12 = C[1,2]
Se ha generado el escalar c12 = 2
? series c21 = C[2,1]
Se ha generado la serie c21 (ID 30)
? print c11 c33 c12 c21 --byobs
c21
1 4
2 4
3 4
4 4
5 4
6 4
7 4
8 4
9 4
10 4
c11 (1 x 1)
1
c33 = 9.0000000
c12 = 2.0000000
Dado que los elementos de una matriz se pueden considerar escalares, pueden ser utilizados no sólo con el comando matrix, sino también con los comandos scalar, series y genr.
Cuando en un comando print intervienen matrices, escalares y series, Gretl visualiza en primer lugar las series, en segundo lugar las matrices y en último lugar los escalares, independientemente del lugar que ocupen los mismos en el comando.
Para identificar las filas de una matriz se indica el primer número que hace referencia a la fila y el segundo, que hace referencia a la columna se deja en blanco:
Nombre de la matriz[nº1, ]
? matrix c3t = C[3]
Se ha generado la matriz c3t
? print c1t c3t
c1t (1 x 3)
1 2 3
c3t (1 x 3)
7 8 9
Obsérvese que c1t y c3t son vectores filas de orden (1x3) que contienen los elementos de la primera y tercera fila de la matriz C, respectivamente.
Para identificar las columnas de una matriz se indica el segundo número que hace referencia a la columna y el primero, que hace referencia a la fila se deja en blanco:
Nombre de la matriz[ ,nº2]
? matrix c1 = C[ , 1]
Se ha generado la matriz c1
? matrix c3 = C[ ,3 ]
Se ha generado la matriz c3
? print c1 c3
c1 (3 x 1)
1
4
7
c3 (3 x 1)
3
6
9
Obsérvese que c1 y c3 son vectores columna de orden (3x1) que contienen los elementos de la primera y tercera columnas de la matriz C, respectivamente.