Matrices, Vectores y Escalares

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

Se crea una matriz M de 2x3

M <- matrix(nrow = 2, ncol = 3)

Para visualizar la matriz M

M

Debido a que no se ha definido elemento alguno, R muestra las literales “NA”" (Not Available): Para crear una matriz con elementos en columnas, por ejemplo, mediante columnas con los datos: (1, 2, 3, 4, 5, 6), se ejecuta

M1 <- matrix(c(1,2,3,4,5,6),nrow = 2, ncol = 3)

Para visualizar la matriz M1

M1

Para crearla por filas

M1 <- matrix(c(1,2,3,4,5,6),nrow = 2, ncol = 3, byrow=TRUE);M1

Por último, se puede añadir nombres a los índices de columnas, por ejemplo: Naranjas, Plátanos y Melón, y en las filas: Supermercado y Tienda

M1 <- 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")));M1

Para acceder a la matriz anteriormente declarada, M1, al elemento [2,3]

M1[2,3]

Para acceder a todos los elementos de una columna, por ejemplo en la matriz M1, acceder a los elementos de la columna 3

M1[,3]

Otra forma de nombrar a las filas y columnas de una matriz

Se crea la matriz M2 de 5x4

M2 <- matrix(11:30, nrow = 5, ncol = 4, byrow = TRUE);M2

Adicionalmente, a los renglones y las columnas de una matriz, es posible asignar nombres, que luego pueden ser consultados o usados como índices. Para nombrar a la columnas se utiliza rownames

rownames(M2) <- c("uno", "dos", "tres", "cuatro", "cinco")

Para nombrar a la columnas se utiliza colnames

colnames(M2) <- c("UNO", "DOS", "TRES", "CUATRO")

Para visualizar la matriz M2

M2

Para consultar los nombres de las columnas

colnames(M2)

Para consultar una columna

M2[, "DOS"]

Las funciones rbind() y cbind(), son otras que se pueden utilizar para construir matrices, mediante la definición de los renglones o las columnas individuales respectivamente.

Se crea una matriz M3 con la función rbind()

M3 <- rbind(c(1.5, 3.2, -5.5), c(0, -1.1, 60));M3

La función class() devuelve la clase del objeto

class(M3[1, ])

Se crea una matriz M4 con la función cbind()

M4 <- cbind(c(1.5, 3.2, -5.5), c(0, -1.1, 60));M4

Operaciones básicas con matrices

Considere las siguientes matrices

B<-matrix(c(1,2,3,4),nrow=2,ncol=2);B
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    4
A<-matrix(c(5,6,7,8),nrow=2,ncol=2);A

Suma de matrices

A+B

Producto matricial

A%*%B

Realizar el producto cruzado de matrices

crossprod(A,B)

crossprod(A,B) # que es equivalente a t(A)%%B crossprod(A) # t(A)%%A

Resta de matrices

A-B

Producto elemento por elemento de dos matrices siempre y cuando sean de dimensiones correctas.

A*B

Funciones útiles para el manejo de matrices

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

Devuelve la dimensión de la matriz.

dim(A) 

Devuelve la transpuesta de la matriz.

t(A)

Devuelve el determinante de la matriz.

det(A) 

Devuelve la inversa de la matriz.

solve(A) 

Devuelve la diagonal de la matriz en forma de vector.

diag(A) 

Devuelve la traza de una matriz (o sea la suma de los elementos de la diagonal principal)

sum(diag(A)) 

Devuelve la suma de las columnas de la matriz.

colSums(A) 

Devuelve la suma de las filas de la matriz.

rowSums(A) 

Objeto tipo FACTOR

Factores nominales y ordinales

Un factor es un vector utilizado para especificar una clasificación discreta de los elementos de otro vector de igual longitud. En R existen factores nominales y factores ordinales.

Ejemplo factor nominal

Se dispone de una muestra de 30 personas de Australia de tal modo que su Estado o territorio se especifica mediante un vector de caracteres con las abreviaturas de los mismos:

estado <- c("tas","sa","qld","nsw","nsw","nt", "wa", "wa", "qld","vic","nsw","vic","qld","qld","sa","tas", "sa","nt","wa","vic","qld","nsw", "nsw", "wa", "sa","act","nsw","vic","vic","act")

Se utiliza la función factor con el vector Estado

FactorEstado <- factor(estado)

Para visualizar los niveles de Estado se ejecuta los siguiente

levels(FactorEstado)

Funcion tapply

Se crea el vector ingresos

ingresos <- c(60, 49, 40, 61, 64, 60, 59, 54, 62, 69, 70, 42, 56,
              61, 61, 61, 58, 51, 48, 65, 49, 49, 41, 48, 52, 46,
              59, 46, 58, 43)

Para calcular la media muestral de cada estado se usa la función tapply():

MediaIngresos <- tapply(ingresos, FactorEstado, mean);MediaIngresos

Devuelve el vector de medias con las componentes etiquetadas con los niveles

Ejemplo factor ordinal

Base de datos para un diseño en bloques al azar

Se crea el vector y

y<- c(34.45, 90.55, 88.45, 64.60, 60.20, 64.50, 39.90, 49.45, 75.75, 33.50, 40.15, 11.05, 46.75, 31.85, 59.90, 74.20, 92.60, 48.90, 59.35, 19.15, 33.75, 80.55, 28.85, 14.75, 09.95, 06.85, 42.45, 62.85, 70.90, 35.25, 40.15, 59.70, 25.85, 29.85, 74.90, 31.55, 24.35, 06.75, 12.30)

Para visualizar el tamaño de muestra se ejecuta

n<- length(y)

Se crea el vector t. Número de tratamientos

t<- 13

Se crea el vector b. Número de bloques

b<- 3

Se crea el vector bloque utilizando la función factor

bloque<- factor(rep(c("B1","B2","B3"),time=c(t,t,t))); bloque

Se crea el vector parcelas utilizando la función factor

parcelas<- factor(rep(c(1:t), time=b)); parcelas

Se crea ek vector trat utilizando la función factor

trat<- factor(rep(c(1:t), times=b), labels=c("T1","T2","T3","T4","T5","T6","T7","T8","T9","T10","T11","T12","T13"));trat

Se crea el Data frame DBA que contiene los vectores creados.

DBA<- data.frame(bloque, parcelas, trat,y);  DBA

Ejercicio

Crear el vector sexo. Prestar atención que se trata de un objeto Vector de caracteres

sexo<-c("H","H","H","M","M","M","H","H","H","M","M","H")

Ahora lo vamos a convertir en un objeto tipo FACTOR, creando el objeto sexo1, utilizando la función as.factor

sexo1<-as.factor(sexo)

Para revisar la Clase del objeto se ejecuta

class(sexo1)

Para revisar el tipo de objeto se ejecuta

mode(sexo)
mode(sexo1)

Para ver los componentes del objeto se ejecuta

str(sexo)

Series regulares de factores

La función ****gl** (generador de niveles) es muy útil porque genera series regulares de factores.

La función tiene la forma gl(k, n) donde k es el número de niveles (o clases), y n 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.

Ejemplos:

gl(3, 5)
gl(3, 5, length=30)
gl(2, 10)
gl(2, 1, length=20)
gl(2, 2, length=20)

La función expand.grid crea un marco de datos con todas las combinaciones de vectores o factores proporcionados como argumentos:

expand.grid(a=c(60,80), p=c(100, 300), sexo=c("Macho", "Hembra"))

Regresar a la página principal de Scripts