19
Introducci´on a la Estad´ ıstica y Probabilidades Comandos en R Alvaro Naupay Gusukuma [email protected] 21 de noviembre de 2013

Comandos r

Embed Size (px)

Citation preview

Page 1: Comandos r

Introduccion a la Estadıstica y Probabilidades

Comandos en R

Alvaro Naupay Gusukuma

k z [email protected]

21 de noviembre de 2013

Page 2: Comandos r

El objetivo del presente trabajo es mostrar el funcionamiento de algunos comandos del pro-grama estadıstico R

1

Page 3: Comandos r

Indice general

1. Objetos : Modos y atributos 31.1. mode() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.2. lenght() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.3. as.· · ·() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.4. numeric() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.5. character() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.6. Modificacion de la longitud de un objeto . . . . . . . . . . . . . . . . . . . . . . 61.7. Obtencion y Modificacion de atributos. . . . . . . . . . . . . . . . . . . . . . . . 71.8. summary() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.9. plot() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2. Factores Nominales y Ordinales 102.1. factor() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102.2. tapply() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112.3. ordered() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

3. Variables indexadas 143.1. dim() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143.2. array() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153.3. Producto exterior de dos variables indexadas . . . . . . . . . . . . . . . . . . . . 153.4. aperm() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163.5. Operacion con matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173.6. diag() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183.7. Autovalores y autovectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

2

Page 4: Comandos r

Capıtulo 1

Objetos : Modos y atributos

Los siguientes comandos nos permitiran cambiar los modos y atributos de los objetos conque se trabajen, en esta primera parte trabajaremos con los objetos llamados vectores pero engeneral les llamaremos objetos.Observaciones:

1. El modo de un objeto, se refiere a los tipos de elementos que tiene.

2. El atributo de un objeto, se refiere a sus caracterısticas, por ejemplo la cantidad de ele-mentos o tipo de elemntos del objeto.

3. Todos los elementos de un objeto son del mismo tipo o modo, estos pueden ser del tiponumerico(numeric), complejo(complex ), logico(logical) o caracter(character).

1.1. mode()

Nos permite saber el tipo de elementos que tiene un objeto.

> x<-c(2,3,4,5)

> x

[1] 2 3 4 5

> mode(x)

[1] "numeric"

> z<-c("lunes","martes","miercoles")

> z

[1] "lunes" "martes" "miercoles"

> mode(z)

[1] "character"

> logico<-c(FALSE,TRUE,FALSE,TRUE,TRUE)

> logico

[1] FALSE TRUE FALSE TRUE TRUE

> mode(logico)

[1] "logical"

> z<-c(2i+3,0,1i,1)

> z

[1] 3+2i 0+0i 0+1i 1+0i

> mode(z)

[1] "complex"

3

Page 5: Comandos r

Observacion: Tener cuidado al asignar el valor i, veamos la siguientes lista de comandos.

> z<-c(i)

> z

[1] 15

Al asignar solamente i al vector z el programa no lo reconoce como tal, para corregir esto debeescribirse 1i

> z<-c(1i)

> z

[1] 0+1i

1.2. lenght()

Dado que existe un vector este comando nos permite saber la cantidad de elementos que eltiene.

> x<-c(2,3,4,5,7)

> x

[1] 2 3 4 5 7

> length(x)

[1] 5

1.3. as.· · ·()

Este comando nos permite cambiar el modo de un objeto.

> x<-1:9

> x

[1] 1 2 3 4 5 6 7 8 9

> mode(x)

[1] "numeric"

> x<-as.character(x)

> x

[1] "1" "2" "3" "4" "5" "6" "7" "8" "9"

> mode(x)

[1] "character"

Al cambiar el modo de un objeto, debe haber compatibilidad sobre lo que se quiere hacer, porejemplo no se puede cambiar un vector numerico al modo caracter y viceversa, pero si es posibleuno logico al modo caracter, como veremos en el siguiente ejemplo.

> z

[1] TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE

> mode(z)

[1] "logical"

> z<-as.character(z)

> z

[1] "TRUE" "TRUE" "TRUE" "FALSE" "FALSE" "FALSE" "FALSE" "FALSE"

> mode(z)

[1] "character"

4

Page 6: Comandos r

1.4. numeric()

Esta funcion sirve para construir un objeto vacio del modo numerico, donde solo se podranalmacenar elementos numericos.

> x<-numeric()

> x

numeric(0)

> x[1]

[1] NA

> length(x)

[1] 0

Una vez construido un vector, este es de longitud libre, es decir podemos almacenar elementosen cualquier posicion dentro de el, veamos el siguiente ejemplo

> x<-numeric()

> length(x)

[1] 0

> x[5]<-7

> x

[1] NA NA NA NA 7

> length(x)

[1] 5

note que la longitud del vector cambio automaticamente.En las posiciones anteriores al elemento 7 aparece el elemento ”NA”, esto es del ingles ”NotAvailable”que significa ”no disponible”, como en esas posiciones no se ha almacenado ningunelemento, esas posciciones se convierten en elementos ”no disponibles”. La posicion existe perono hay ningun elemento

Tambien es posible definir la longitud del objeto a construir de la siguiente manera.

> x<-numeric(5)

> x

[1] 0 0 0 0 0

> length(x)

[1] 5

1.5. character()

Similar a la funcion anterior.

> x<-character()

> x

character(0)

> x[1]

[1] NA

> mode(x)

[1] "character"

5

Page 7: Comandos r

Tambien es un objeto de vector de longitud libre. Veamos el siguiente ejemplo.

> x<-character()

> length(x)

[1] 0

> x[4]<-"jueves"

> x

[1] NA NA NA "jueves"

> length(x)

[1] 4

Note que es necesario la comilla , al momento de insertar un elemento

Tambien es posible definir la longitud del objeto a construir de la sigiente manera.

> x<-character(5)

> x

[1] "" "" "" "" ""

> length(x)

[1] 5

1.6. Modificacion de la longitud de un objeto

Primeramente veamos los siguientes comandos.

> 1:6

[1] 1 2 3 4 5 6

> 2*1:6

[1] 2 4 6 8 10 12

En la primera lınea, se crea un vector auxiliar con elementos del 1 al 6, en la tercera lınea cadauno de los elementos del vector auxiliar es multiplicado por 2. Tengamos este proceso en menteal modificar la longitud de un objeto.

Veamos a continuacion como modificar la logintud de un objeto.Construyamos el siguiente vector

> x<-c(12,45,23,67,8 ,78,9)

> x

[1] 12 45 23 67 8 78 9

Si queremos reducir el vector con los elementos de la posicion 2, 3 y 5

> x<-x[c(2,3,5)]

> x

[1] 45 23 8

Notemos que lo que se encuentra entre corchetes [ ], es un vector cuyos elementos nos indican laposicion de los elementos a tomar.Tambien es posible repetir un elemento, por ejemplo reducir el vector con los elementos 5, 5, 2,y 2, en este orden.

6

Page 8: Comandos r

> x<-x[c(5,5,2,2)]

> x

[1] 8 8 45 45

Para reducir el vector con los elementos de orden par, tenemos que construir un vector auxiliarque contenga numeros pares consecutivos, sabiendo que el vector x construido inicialmente tiene3 elementos de orden par escribimos lo siguiente, recordando lo hecho al inicio de esta seccion.

> x<-x[2*1:3]

> x

[1] 45 67 78

1.7. Obtencion y Modificacion de atributos.

Un atributo de un objeto, es la cualidad o caracterıstica del objeto, estas cualidades no soncompartidas con los elementos del objeto.Veamos como funcionan las funciones attributes() y attr().

> x

[1] 1 2 3 4 5 6 7 8 9

> attributes(x)

NULL

Hemos creado el objeto x , la funcion attributes() nos permite saber los atributos que tiene elobjeto, en este caso el objeto x no tiene ningun atributo, por tal motivo aparece NULL.Con la funcion attr() podemos anadirle atributos al objeto x, veamos como

> attr(x,"suma")<-sum(x)

> attributes(x)

$suma

[1] 45

El atributo creado para el obejto x se llama ”suma 2le hemos asignado un valor numerico, quees la suma de sus componenetes. Tambien es posible agregarle otros atributos, por ejemplo

> attr(x,"nombre")<-"valores"

> attributes(x)

$suma

[1] 45

$nombre

[1] "valores"

Hemos agregado al objeto x un nuevo atributo llamado ”nombre 2ademas le hemos asignado unvalor, pero en caracteres, que es ”valores”.Si queremos ver el valor de un atributo, por ejemplo el valor del atributo “suma”, se utliza lafuncion attr() como sigue

> attr(x,"suma")

[1] 45

7

Page 9: Comandos r

Si queremos reasignar el valor de un atributo, por ejemplo el valor del atributo “nombre”, hacelo siguiente

> attr(x,"nombre")

[1] "valores"

> attr(x,"nombre")<-"pesos"

> attr(x,"nombre")

[1] "pesos"

Tambien es posible visualizar el objeto x como una matriz, a travez del atributo “dim” que yaesta predeterminado en el programa R, veamos

> attr(x,"dim")<-c(3,3)

> x

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

[1,] 1 4 7

[2,] 2 5 8

[3,] 3 6 9

attr(,"suma")

[1] 45

attr(,"nombre")

[1] "pesos"

Donde c(3,3), asigna el valor a las dimensiones de la matriz, c(filas,columnas).

1.8. summary()

Esta funcion nos da informacion sobre el valor mınimo, primer quartil, mediana, media, tercercuartil y el valor maximo del objeto. Veamos

> x

[1] 1 2 3 4 5 6 7 8 9

> summary(x)

Min. 1st Qu. Median Mean 3rd Qu. Max.

1 3 5 5 7 9

1.9. plot()

Esta funcion sirve para graficar un objeto. Esta funcion tiene los siguientes parametros:

plot(x,y, type=" ", main=" ", sub=" ", xlab=" ", ylab=" " )

Donde en “x” e “y” se ponen los vectores,“type” es el tipo de grafica, “main” tıtulo superiordel grafico, “sub” tıtulo inferior del grafico, “xlab” nombre del eje x y “ylab” nombre del eje y.Veamos un ejemplo.

> x<-seq(1,20,by=0.5)

> length(x)

[1] 39

8

Page 10: Comandos r

creamos una sucesion x con 39 elementos

> plot(x,x^2,type="p",main="grafico",sub="parabola",xlab="eje x",ylab="eje y")

Donde type=“p”, indica graficar con pequenos cırculos, el resultado es

5 10 15 20

010

020

030

040

0

grafico

parabolaeje x

eje

y

9

Page 11: Comandos r

Capıtulo 2

Factores Nominales y Ordinales

2.1. factor()

Veamos el siguiente ejemplo

> x<-c(98,4,35,1,23,54,87,23,54,76,34)

> x

[1] 98 4 35 1 23 54 87 23 54 76 34

> attributes(x)

NULL

> x<-factor(x)

> x

[1] 98 4 35 1 23 54 87 23 54 76 34

Levels: 1 4 23 34 35 54 76 87 98

> attributes(x)

$levels

[1] "1" "4" "23" "34" "35" "54" "76" "87" "98"

$class

[1] "factor"

Se creo el objeto x con valores numericos y ademas no tiene ningun atributo. La funcion factor()le asigna la vector dos atributos:levels: Este atributo muestra los elementos del objeto en forma ordenada ascendente, indepen-dientes de su repeticion, por ejemplo los elementos 23 y 54 se repinten dos veces cada uno en elobjeto x, pero en el vector Levels solo aparecen una vez.class: Este atributo nos indica a la clase a que pertenece el objeto x, que ahora es factor.“factor” es una cualidad que especifica una clasificacion discreta de los elementos del objeto.Veamos otro ejemplo

> z<-c("a","b","c","a","b","a","c","d","v","f","e")

> z<-factor(z)

> z

[1] a b c a b a c d v f e

Levels: a b c d e f v

> attributes(z)

$levels

[1] "a" "b" "c" "d" "e" "f" "v"

10

Page 12: Comandos r

$class

[1] "factor"

En este caso las letras se ordenan en forma alfabetica ascendente.Lo interesante de esta funcion se aprecia al momento de graficar, veamos

> plot(z,xlab="levels",ylab="repeticiones")

a b c d e f v

levels

repe

ticio

nes

0.0

0.5

1.0

1.5

2.0

2.5

3.0

2.2. tapply()

Veamos el siguiente ejemplo, primero construyamos dos objetos, uno de letras y otro x devalores numericos, ambos de igual longitud.

> letras<-c("a","b","c","a","b","a","c","d","v","f","e")

> letras

[1] "a" "b" "c" "a" "b" "a" "c" "d" "v" "f" "e"

> x<-c(3,4,1,5,6,3,4,6,9,7,5)

> x

[1] 3 4 1 5 6 3 4 6 9 7 5

Ahora con la funcion tapply() asociaremos los valors de x con cada uno de los elementos delobjeto “letras” y ademas calcularemos la media de cada una de las letras con los valores que seles han asociado. Esto lo almacenaremos en un objeto “valores”

> valores<-tapply(x,letras,mean)

> valores

a b c d e f v

3.666667 5.000000 2.500000 6.000000 5.000000 7.000000 9.000000

Ahora grafiquemos el objeto valores con la funcion barplot(), de la siguiente manera

> barplot(valores,xlab="letras",ylab="medias",ylim=c(0,10))

11

Page 13: Comandos r

Donde “ylim=” indica los lımites del eje y, veamos el grafico

a b c d e f v

letras

med

ias

02

46

810

Tambien es posible realizar otras operaciones con los valores que le asociamos a las letras, comopor ejemplo la raiz cuadrada de la suma de sus valores, respecto de cada letra, pero previamentehay que definir dicha funcion como sigue

> suma<-function(x)sqrt(sum(x))

> valorsuma<-tapply(x,letras,suma)

> valorsuma

a b c d e f v

3.316625 3.162278 2.236068 2.449490 2.236068 2.645751 3.000000

> letras

[1] "a" "b" "c" "a" "b" "a" "c" "d" "v" "f" "e"

> x

[1] 3 4 1 5 6 3 4 6 9 7 5

Los valores asociados al elemento “a” son 3, 5 y 3,luego al sumarlos y sacarle la raiz cuadradatenemos como resultado aproximado 3.316625 (puede verificarlo).

2.3. ordered()

Es similiar a la funcion factor() con la diferencia, al atributo “class” le aumenta una cualidadmas, la de ordenado(ordered)

> x

[1] 3 4 1 5 6 3 4 6 9 7 5

> attributes(x)

NULL

> x<-ordered(x)

> x

[1] 3 4 1 5 6 3 4 6 9 7 5

12

Page 14: Comandos r

Levels: 1 < 3 < 4 < 5 < 6 < 7 < 9

> attributes(x)

$levels

[1] "1" "3" "4" "5" "6" "7" "9"

$class

[1] "ordered" "factor"

13

Page 15: Comandos r

Capıtulo 3

Variables indexadas

3.1. dim()

Esta funcion nos permite indexar un objeto, vemos un ejemplo

> x<-1:18

> x

[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

Creamos un objeto de 18 elementos indexemos este objeto con dos coordenadas es decir comouna matriz de 3 filas y 6 columnas

> dim(x)<-c(3,6)

> x

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

[1,] 1 4 7 10 13 16

[2,] 2 5 8 11 14 17

[3,] 3 6 9 12 15 18

Tambien podemos indexar este mismo objeto con tres coordenas

> dim(x)<-c(3,3,2)

> x

, , 1

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

[1,] 1 4 7

[2,] 2 5 8

[3,] 3 6 9

, , 2

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

[1,] 10 13 16

[2,] 11 14 17

[3,] 12 15 18

Veamo como se extrae un elemento de este arreglo

> x[3,3,2]

[1] 18

14

Page 16: Comandos r

Si queremo toda la fila 3 del segundo bloque

> x[3, ,2]

[1] 12 15 18

las dos primeras coordenas de c(3,3,2) se refieren a la filas y columnas respectivamente y latercera a los dos grupos de matrices.Si deseamos regresar el objeto x a su forma inicial vasta utilizar la funcion array(), como sigue

> x<-array(x)

> x

[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

3.2. array()

Esta funcion nos permite extraer elementos de un objeto y darles un arreglo especıfico.El siguiente ejemplo nos permite extraer los 5 primeros elementos del objeto x.

> x

[1] 1 2 3 4 5 6 7 8 9 10

> z<-array(x,5)

> z

[1] 1 2 3 4 5

Pero tambien podemos extraer elementos y darles un arreglo por ejemplo de matriz

> z<-array(x,dim=c(3,3))

> z

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

[1,] 1 4 7

[2,] 2 5 8

[3,] 3 6 9

Hemos extraido 9 elementos y distribuido en una matriz de 3 por 3, note la manera en que loselementos son distribuidos en la matriz.Si extraemos mas elementos de los que tiene el objeto x, estos se repiten en el nuevo arreglo

> z<-array(x,12)

> z

[1] 1 2 3 4 5 6 7 8 9 10 1 2

x solo tiene 10 elementos, los otros dos elementos se repiten desde el inicio del objeto x.

3.3. Producto exterior de dos variables indexadas

Veamos el siguiente ejemplo

> a<-1:3

> b<-4:6

> a

[1] 1 2 3

15

Page 17: Comandos r

> b

[1] 4 5 6

> a%o%b

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

[1,] 4 5 6

[2,] 8 10 12

[3,] 12 15 18

Note la manera en que se ha realizado la operacion, se han multiplicado cada uno de los elementosde “a” con cada uno de los elementos de “b” y los resultados se han distribuido en una matriz,esto tambien se puede obtener con la funcion outer()

> outer(a,b,"*")

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

[1,] 4 5 6

[2,] 8 10 12

[3,] 12 15 18

Es posible realizar otra operacion como la suma

> outer(a,b,"+")

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

[1,] 5 6 7

[2,] 6 7 8

[3,] 7 8 9

Tambien es posible almacenar estos resultados en un nuevo objeto.Tambien es posible definir operaciones especificas con el comando function(), de la siguientemanera

> f<-function(a,b)a/b

> outer(a,b,f)

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

[1,] 0.25 0.2 0.1666667

[2,] 0.50 0.4 0.3333333

[3,] 0.75 0.6 0.5000000

Hemos dividido cada uno de los elementos de “a” entre cada uno de los elementos de “b”.

3.4. aperm()

Este comando nos permite cambiar intercambiar las variables indexadas

> z<-array(1:8,dim=c(2,2,2))

> z

, , 1

[,1] [,2]

[1,] 1 3

[2,] 2 4

, , 2

[,1] [,2]

[1,] 5 7

[2,] 6 8

16

Page 18: Comandos r

Este es un arreglo con tres subindices, ahora permutaremos estos

> aperm(z,c(2,3,1))

, , 1

[,1] [,2]

[1,] 1 5

[2,] 3 7

, , 2

[,1] [,2]

[1,] 2 6

[2,] 4 8

Hemos permutado el primer ındice por el segundo, el segundo por el tercero y el terecero por elprimero, Es decir el elemento z[2,1,1]=2 ha sido cambiado a la posicion [1,1,2]. Esta permutaciones puesta en c()Si queremos obtener la traspuesta de una matriz, intercambiamos el primer ındice por el segundoy el segundo por el primero, de la siguiente manera

> a<-array(1:6,dim=c(2,3))

> a

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

[1,] 1 3 5

[2,] 2 4 6

> aperm(a,c(2,1))

[,1] [,2]

[1,] 1 2

[2,] 3 4

[3,] 5 6

Pero para este caso especifico exite la funcion t()

> t(a)

[,1] [,2]

[1,] 1 2

[2,] 3 4

[3,] 5 6

3.5. Operacion con matrices

Se pueden realizar las operaciones de suma, producto y multiplicacion como si fueran nuem-ros, veamos

> a

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

[1,] 1 3 5

[2,] 2 4 6

> b

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

[1,] 10 12 14

[2,] 11 13 15

17

Page 19: Comandos r

> a/b

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

[1,] 0.1000000 0.2500000 0.3571429

[2,] 0.1818182 0.3076923 0.4000000

> a+b

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

[1,] 11 15 19

[2,] 13 17 21

> a*b

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

[1,] 10 36 70

[2,] 22 52 90

3.6. diag()

Este comando muestra los elementos de la diagonal de una matriz

> a

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

[1,] 1 3 5

[2,] 2 4 6

> diag(a)

[1] 1 4

3.7. Autovalores y autovectores

Con la funcion eigen() podemos obtener los autovalores y autovectores de una matriz cua-drada.

> z<-array(1:9,dim=c(3,3))

> z

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

[1,] 1 4 7

[2,] 2 5 8

[3,] 3 6 9

> eigen(z)

$values

[1] 1.611684e+01 -1.116844e+00 -4.054215e-16

$vectors

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

[1,] -0.4645473 -0.8829060 0.4082483

[2,] -0.5707955 -0.2395204 -0.8164966

[3,] -0.6770438 0.4038651 0.4082483

si queremos visualizar solo los autovalores tenemos que utilizar el sımbolo de dolar

> eigen(z)$values

[1] 1.611684e+01 -1.116844e+00 -4.054215e-16

Analogamente para los autovectores.

18