miércoles, 25 de marzo de 2009

R: Matrices.

Este capítulo atenderá a la declaración y manejo de matrices en R. Y al igual que en el capítulo vectores, nos preguntamos ¿qué es una matriz? Pues bien, una matriz A es un arreglo rectangular de números reales de dimensiones m x n.

Una respuesta más simple sería: Una variable indexada con dos índices, en otras palabras, conjuntos de vectores que se acceden a ellos mediante un par de índices.

Declaración de Matrices.

La forma más simple de crear una matriz en R, es mediante la función matrix(), la cual posee cinco argumentos.

El primero es opcional y debe ser un vector que corresponderá a los elementos de la matriz: x=vector, el segundo y tercero de los argumentos son para declarar el número de filas y columnas de la matriz: nrow=número-de-filas y ncol=número-de-columnas, el cuarto argumento sirve para definir cómo se completará los elementos de la matriz, o por columnas, o si no se define nada, se completa la matriz por filas: byrow=True-False y por último, dimnames=nombre-a-columnas-y-filas.

A continuación, se muestra cómo crear una matriz llamada M de dimensión 3x2:

> M <- matrix(nrow = 2, ncol = 3)
> M
.........[,1]..[,2]..[,3]
[1,]....NA..NA..NA
[2,]....NA..NA..NA

Ya que no se ha definido ningún elemento, R nos lo informa con NA, para crear una matriz con elementos, por ejemplo, mediante columnas: (1, 2, 3, 4, 5, 6):

> M <- matrix(c(1,2,3,4,5,6),nrow = 2, ncol = 3)
> M
.........[,1]..[,2]..[,3]
[1,]....1.......3......5
[2,]....2......4......6

En caso que queramos crearlo por filas:

> M <- matrix(c(1,2,3,4,5,6),nrow = 2, ncol = 3, byrow=TRUE)
> M
.........[,1]..[,2]..[,3]
[1,]....1.......2......3
[2,]....4......5......6

Y por último, si queremos añadirles nombres a los índices de columnas: Naranjas, Plátanos y Melón, y en las filas: Supermercado y Tienda, se muestra a continuación:

> M <- matrix(c(1,2,3,4,5,6),nrow = 2, ncol = 3, byrow=TRUE,
+ dimnames=list(c("Supermercado", "Tienda"), c("Naranjas", "Plátanos", "Melón")))
> M
.........................Naranjas.Plátanos.Melón
Supermercado........1..............2..........3
Tienda....................4..............5..........6

Para más información sobre la función matriz(), se recomienda la consulta de la ayuda.

Acceso a los Elementos de una Matriz.

Para acceder a los elementos de una matriz, se procederá de forma similar a cómo lo hacíamos con los elementos de un vector, con una diferencia, la matriz posee, generalmente, dos índices correspondientes a las filas y columnas respectivamente.

Por ejemplo, para acceder a la matriz anteriormente declarada, M, al elemento [2,3]:

> M[2,3]
[1] 6

Si queremos acceder a una fila completa, por ejemplo en la matriz M, acceder a todos los elementos de la primera fila:

> M[1,]
Naranjas.Plátanos.Melón
......1............2.............3

Y si queremos acceder a todos los elementos de una columna, por ejemplo, en la matriz M acceder a los elementos de la columna 3:

> M[,3]
Supermercado.Tienda
...........3................6

Éstas son las formas más fáciles de acceder a los elementos de una matriz.

Operaciones Básicas con Matrices.

En la siguiente tabla, se muestran las operaciones más comunes para operar entre matrices:

Operaciones Básicas con Matrices.
Operación
Definición
Ejemplo
+
Suma de matrices.
> A+M
.....[,1]..[,2]
[1,]..6....10
[2,]..8....12

%*%
Realiza el producto matricial.> A%*%M
.....[,1]..[,2]
[1,].19...43
[2,].22...50
crossprod()
Realiza el producto cruzado
de matrices.
> crossprod(A,M)
.....[,1]..[,2]
[1,].17...39
[2,].23...53
-Resta de matrices.> A-M
.....[,1]..[,2]
[1,]..4....4
[2,]..4....4
*Producto elemento por elemento
de dos matrices siempre y cuando
sean de dimensiones correctas.
> A*M
.....[,1]..[,2]
[1,]..5....21
[2,].12...32

Para los ejemplos de la anterior tabla, sean utilizado las siguientes matrices:

> M<-matrix(c(1,2,3,4),nrow=2,ncol=2)
> A<-matrix(c(5,6,7,8),nrow=2,ncol=2)

Funciones Útiles para el manejo de Matrices.

A continuación, se mostrarán las más funciones más comunes, ya definidas en R, para trabajar con matrices:

Funciones Básicas para Matrices.
Función
Definición
Ejemplo
dim(matriz)
Devuelve la dimensión de
la matriz.
> dim(A)
[1] 2.2

t(matriz)Devuelve la transpuesta de
la matriz.
> t(A)
.....[,1]..[,2]
[1,].5.....6
[2,].7.....8
det(matriz)Devuelve el determinante
de la matriz.
> det(A)
[1] -2
solve(matriz)Devuelve la inversa
de la matriz.
> solve(A)
.....[,1]..[,2]
[1,].-4...3.5
[2,]..3..-2.5
eigen(matriz)Devuelve los autovalores y
los autovectores de la
matriz.
> eigen(A)
$values
[1] 13.1520673.-0.1520673

$vectors
......[,1]....................[,2]
[1,] -0.6514625..-0.8053759
[2,] -0.7586809...0.5927644
diag(matriz)Devuelve la diagonal
de la matriz en forma
de vector.
> diag(A)
[1] 5..8
colSums(matriz)Devuelve la suma de
las columnas de la
matriz.
colSums(A)
[1] 11..15
rowSums(matriz)Devuelve la suma de
las filas de la
matriz.
rowSums(A)
[1] 12..14

Para los ejemplos de la anterior tabla, sea utilizado la siguiente matriz:

> A<-matrix(c(5,6,7,8),nrow=2,ncol=2)

Para más información sobre las funciones expuestas en la anterior tabla, se recomienda que se use la ayuda integrada en R.

Como se puede observar, la creación y manipulación de matrices en R es bastante fácil y para estudios estadísticos será una gran herramienta a tener en cuenta.

6 comentarios:

Anónimo dijo...

hola, me queda claro como realizar operaciones con matrices, pero ¿como podria multiplicar dos matrices 500 veces de manera aleatoria con repeticion?

Manuel Caballero dijo...

Buenas:

Una de las maneras de crear una matriz aleatoria es así:

> matrix(rnorm(20), 4)

Dónde los datos son aleatorios de la curva Normal (en este ejemplo he escogido 20 datos) y repartidos en 4 columnas.

Tu problema, pues creas dos matrices y las multiplica 500 veces mediante un bucle for por ejemplo.

Un saludo y gracias por tu comentario.

Anónimo dijo...

Hola! Que bueno me ayudaste a arrancar.. tengo una base de datos bien grande y ando queriendo dejar el excell para manejarla. tendras algun apuntecito PDF basico a mano? mi mail es alhuebg@gmail.com

muchas gracias Aqueronte!

Sebastian Reyes dijo...

Hola, alguién sabe como crear varias matrices en R en un ciclo (for o while)...
la idea es crear matrices de nombre

X1
X2
.
.
.
Xn

en donde X1,X2,...,Xn son matrices

de antemano muchas gracias, les dejo mi correo, sebastianreyesb@gmail.com

Anónimo dijo...

Hola!
Tengo una duda ya que soy nuevo en R. Cuando creamos en Matlab una matriz de la que no tenemos certeza de su dimensión, podemos declara m=[] y siemplemente vamos "agregando" datos (e.g., m(1,2)=5;). Leyendo información de R no encuentro una función similar. Existe alguna función que te permita crear una matriz en la que a priori desconozcas sus dims ?

AqueronteBlog dijo...

Buenas:

Lo que puedes hacer es ir almacenando esos valores en un vector y cuando sepas la dimensión de la matriz, crearla.

Un saludo.