Practica 1 Introduccion Al R

21
Pr´ actica 1: Introducci´ ona R 1. Introducci´ on R es un lenguaje de alto nivel y un entorno para el an´ alisis de datos y gr´a- ficos. Puede descargarse libremente del sitio llamado CRAN (Comprehensive R Archive Network) en la siguiente direcci´ on: http://cran.r-project.org o bien, simplemente buscando CRAN en Google. Al llegar a la pantalla anterior seguid para descargar el programa la si- guiente ruta: windows/base/R-2.7.2-win32.exe. Una vez instalado el progra- ma en entorno Windows, lo que vemos es la interfaz RGui (GUI es Graphical User Interface en ingl´ es), con el s´ ımbolo > esperando la entrada de instruc- ciones, tal y como puede apreciarse en la figura siguiente: 1

description

Pasos para una clase intriductoria de R

Transcript of Practica 1 Introduccion Al R

Page 1: Practica 1 Introduccion Al R

Practica 1: Introduccion a R

1. Introduccion

R es un lenguaje de alto nivel y un entorno para el analisis de datos y gra-ficos. Puede descargarse libremente del sitio llamado CRAN (ComprehensiveR Archive Network) en la siguiente direccion: http://cran.r-project.orgo bien, simplemente buscando CRAN en Google.

Al llegar a la pantalla anterior seguid para descargar el programa la si-guiente ruta: windows/base/R-2.7.2-win32.exe. Una vez instalado el progra-ma en entorno Windows, lo que vemos es la interfaz RGui (GUI es GraphicalUser Interface en ingles), con el sımbolo > esperando la entrada de instruc-ciones, tal y como puede apreciarse en la figura siguiente:

1

Page 2: Practica 1 Introduccion Al R

El menu principal contiene entradas tıpicas de otras aplicaciones: Ar-chivo, Editar, Visualizar, Ventanas y Ayuda, mas otras dos Miscy Paquetes. El menu de Ayuda sera importante en esta fase inicial. Pa-ra obtener esta ayuda podemos tambien optar por introducir instruccionesdirectamente por teclado. Introduce por ejemplo:

> help(vector)

y aparecera una ventana de ayuda con informacion sobre el comandovector.

Podemos acceder a la misma pantalla desde el menu Ayuda/FuncionesR (texto), aparecera un cuadro en el que deberemos introducir la palabravector. Si no recordamos la grafıa de una expresion podemos utilizar la ex-presion apropos poniendo entre parentesis, y entre comillas, la funcion quebuscamos.

2

Page 3: Practica 1 Introduccion Al R

que nos da las expresiones que contienen el termino integer. Lo mismo sepuede conseguir con Ayuda/Sobre y en el cuadro de dialogo que apareceintroducimos integer.

R es un lenguaje orientado a objetos. Uno de los mas simples es vector.Si queremos crear un vector con las componentes (2, 3, 8) y llamarlo x,tecleamos

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

Fıjate en que has de introducir el nombre del vector, x, los sımbolos <-,la letra c (de concatenate en ingles), y por ultimo las coordenadas del vectorentre parentesis. Para ver el vector que hemos creado, simplemente, tecleamossu nombre:

> x

[1] 2 3 8

Como ya se ha podido observar al crear el vector x, para hacer asignacio-nes a las variables se utiliza una combinacion de los sımbolos < y - (guion).Y, en esta ultima version, tambien podemos utilizar el signo =. El signo =

tambien se utilizara para asignar valores a parametros en las funciones. Enla salida anterior [1] indica que el 2 que le sigue es el primer elemento delvector. Si el vector ocupara mas de una lınea, cada una de las nuevas lıneasempezarıa por [n], indicando n el lugar que ocupa dentro del vector la coor-denada que le sigue. Las componentes del vector se referencian por medio deındices entre corchetes.

3

Page 4: Practica 1 Introduccion Al R

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

> x

[1] 2 3 8

> x[2]

[1] 3

> x[3]

[1] 8

Podemos asignar un nuevo valor a alguna de las componentes del vectorcomo se muestra en el siguiente ejemplo:

> x[2] <- -3

> x

[1] 2 -3 8

Hemos reemplazado la segunda componente del vector x por el valor -3.Nota: Para corregir una instruccion ya introducida, podemos acceder a ellapulsando la tecla de flecha hacia arriba, las veces que sea necesario. Paradejar una instruccion a medias podemos pulsar la tecla Escape.

2. Operaciones con vectores y fucniones

a) Multiplicacion de un vector por un numero

> 2 * x

[1] 4 -6 16

b) Potencias

> x^3

[1] 8 -27 512

c) Longitud Devuelve la dimension de un vector

> length(x)

4

Page 5: Practica 1 Introduccion Al R

[1] 3

d) Suma y sumas acumuladas Devuelve la suma de las componentes delvector y la suma acumulada de las componentes

> sum(x)

[1] 7

> cumsum(x)

[1] 2 -1 7

e) Valor maximo y mınimo Devuelven los valores maximo y mınimo delas componentes de un vector

> max(x)

[1] 8

> min(x)

[1] -3

f) Media, mediana, cuasivarianza y cuasidesviacion tıpica de las compo-nentes Calculan la media, mediana, cuasivarianza, y cuasidesviaciontıpica de las componentes del vector

> mean(x)

[1] 2.333333

> median(x)

[1] 2

> var(x)

[1] 30.33333

> sd(x)

[1] 5.50757

5

Page 6: Practica 1 Introduccion Al R

g) Producto de las componentes y productos acumulados

> prod(x)

[1] -48

> cumprod(x)

[1] 2 -6 -48

h) Cuartiles de x

> quantile(x)

0% 25% 50% 75% 100%

-3.0 -0.5 2.0 5.0 8.0

i) Ordenacion creciente de las componentes del vector

> sort(x)

[1] -3 2 8

j) Colocar las componentes de un vector en orden inverso a como han sidointroducidas

> rev(x)

[1] 8 -3 2

¿Como ordenarıas en orden decreciente?

k) Suma de vectores

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

> y <- c(1, 2, 3)

> x + y

[1] 3 -1 11

l) Combinacion lineal de dos vectores

> 5 * x - 2 * y

6

Page 7: Practica 1 Introduccion Al R

[1] 8 -19 34

m) Producto y cociente de vectores

> x * y

[1] 2 -6 24

> x/y

[1] 2.000000 -1.500000 2.666667

n) Covarianza y coeficiente de correlacion

> cov(x, y)

[1] 3

> cor(x, y)

[1] 0.5447048

3. Funciones de uso general

3.1. Exponenciales y logarıtmicas

Logaritmos neperianos de las componentes

> log(y)

[1] 0.0000000 0.6931472 1.0986123

Logaritmos en diferentes bases (por ejemplo, base 10)

> log(y, 10)

[1] 0.0000000 0.3010300 0.4771213

Potencias de base e

> exp(y)

[1] 2.718282 7.389056 20.085537

7

Page 8: Practica 1 Introduccion Al R

Potencias en cualquier otra base (por ejemplo, 2)

> 2^y

[1] 2 4 8

3.2. Raıces cuadradas

> sqrt(y)

[1] 1.000000 1.414214 1.732051

3.3. Funciones trigonometricas

R considera que el argumento viene dado en radianes

> sin(y)

[1] 0.8414710 0.9092974 0.1411200

> cos(y)

[1] 0.5403023 -0.4161468 -0.9899925

> tan(y)

[1] 1.5574077 -2.1850399 -0.1425465

> z <- c(0.5, 0.7, 0.2)

> z

[1] 0.5 0.7 0.2

> asin(z)

[1] 0.5235988 0.7753975 0.2013579

> acos(z)

[1] 1.0471976 0.7953988 1.3694384

> atan(z)

[1] 0.4636476 0.6107260 0.1973956

Todas estas funciones se pueden aplicar directamente sobre valores nu-mericos.

> log(3)

[1] 1.098612

8

Page 9: Practica 1 Introduccion Al R

3.4. Otras funciones

choose(m,n) da el numero de combinaciones de m elementos de ordenn

> choose(10, 2)

[1] 45

factorial(n) da el factorial de un numero (n), o lo que es lo mismo,calcula las permutaciones de n elementos

> factorial(6)

[1] 720

runif(n) genera al azar n valores comprendidos entre 0 y 1

> runif(5)

[1] 0.2358614 0.5683257 0.9992840 0.2920381 0.2061905

4. Funciones generadas por el usuario

Vamos a crear una funcion que a cada componente de un vector le restela media de todas las componentes del vector:

desvia<-function(x)x-mean(x)

> desvia <- function(x) {

+ x - mean(x)

+ }

function es la instruccion para crear una funcion. La x que le sigue esel argumento de la funcion y entre llaves esta lo que la funcion hace con elargumento. En este ejemplo a cada componente del vector le resta la mediade todas las componentes. Para ejecutar la funcion basta con introducir elnombre de la misma seguido del argumento entre parentesis

> desvia(x)

[1] -0.3333333 -5.3333333 5.6666667

Recordemos que

9

Page 10: Practica 1 Introduccion Al R

> x

[1] 2 -3 8

> mean(x)

[1] 2.333333

¿Como calcularıas la media creando tu propia funcion? ¿Como calcularıasla varianza creando tu propia funcion? Despues de intentar dar una respuesta,mira las soluciones al final de este documento, si lo consideras necesario.

5. Introduccion de datos

Cuando necesitamos introducir pocos datos, podemos hacerlo como hastaahora

> a <- c(2, 6, 8, 3, 5, 0, 9, 7, 6, 1)

Para cantidades no muy grandes de datos podemos utilizar scan()

> b<-scan()

1: 1.25

2: 2.56

3: 3.5

4: 2.11

5: 6.32

6: 5.22

7: 6.41

8:

Read 7 items

Al introducir la instruccion nos aparece 1 y el programa queda a la esperade que introduzcamos un valor, lo hacemos y damos a Enter y aparece 2 paraque introduzcamos el siguiente valor. Ası continuaremos hasta el final. Paraindicar que terminamos y que ya no hay mas datos debemos hacer Entersin introducir ningun valor. Si queremos editar una variable ya introducidapodemos usar la funcion data.entry(b), que abre una ventana como lasiguiente:

10

Page 11: Practica 1 Introduccion Al R

Podemos agregar un nuevo valor en la fila 8 y cerrar la ventana. De estaforma el nuevo valor quedara incorporado al vector b:

> b

[1] 1.25 2.56 3.50 2.11 6.32 5.22 6.41

Podemos observar que ya hay 8 valores. El ultimo que acabamos deintroducir es 3.21. Para introducir datos en una variable nueva con da-

ta.entry(x), creamos un vector vacıo. Por ejemplo:

> w <- numeric()

Podemos ver el resultado:

> w

numeric(0)

A continuacion, tecleamos:

> data.entry(w)

Se nos desplegara una ventana como la anterior, en la que la primeracolumna estara encabezada por el nombre del vector vacıo que hemos creado.En dicha columna podremos introducir los valores que queramos.

11

Page 12: Practica 1 Introduccion Al R

Para introducir un numero grande de datos podemos utilizar EXCEL,copiar los datos, volver a R , teclear x<-scan(), y en la entrada 1 pegar losdatos. Pulsamos Enter y quedan introducidos.

> x<-scan()

1: 2.4

2: 5.6

3: 3.5

4: 1.8

5: 4.5

6: 6.1

7:

Read 6 items

Hay que tener cuidado con la configuracion del separador decimal de EX-CEL, que debe estar puesto en “.”, y no en “,”, pues de lo contrario, R nosdara error. Si el separador esta puesto en “,” puede cambiarse desde He-rramientas/Opciones/Internacional, donde pondremos el separadordecimal con punto y los millares con coma.

En practicas posteriores importaremos datos desde EXCEL, SPSS, archi-vos de texto,etc. Tambien se puede utilizar el Bloc de notas de Windows

6. Dos generadores de datos especiales

Si queremos generar un vector con los 100 primeros numeros naturales,basta con introducir esta orden:

12

Page 13: Practica 1 Introduccion Al R

> x <- 1:100

Al teclear x obtendremos:

> x

[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18[19] 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36[37] 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54[55] 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72[73] 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90[91] 91 92 93 94 95 96 97 98 99 100

Hay que fijarse en que cada fila esta encabezada por el numero que in-dica la posicion del primer elemento de la fila. Hasta ahora hemos hechola asignacion de valores a la variable y la visualizacion de los mismos condos instrucciones diferentes. Esto mismo se puede conseguir con una solainstruccion poniendola entre parentesis:

> x <- -3:5

> x

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

Tambien se pueden generar valores sin asignarlos a ninguna variable, conlo cual aparecen en pantalla pero no se pueden volver a llamar y, por lo tanto,a utilizar.

Nota: El operador : tiene prelacion sobre +, -, *, /. Por ejemplo:

> 4 * 1:25

[1] 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76[20] 80 84 88 92 96 100

genera los numeros del 1 al 25 y los multiplica despues por 4.Sin embargo

> (4 * 1):25

[1] 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

multiplica el 1 por 4 y despues genera numeros desde el 4 al 25Otro generador de vectores es la funcion seq(a,b,r). Con esta instruccion

se genera una lista de numeros que empieza en a y termina en b, yendo de r

en r. Por ejemplo:

> seq(4, 10, 2)

13

Page 14: Practica 1 Introduccion Al R

genera una lista de numeros que empieza en 4 y termina en 10, yendo de dosen dos:

> seq(4, 10, 2)

[1] 4 6 8 10

Otra cosa es seq(a,b,lenght=r). Con esta instruccion se generan r nu-meros entre a y b a distancias iguales. Por ejemplo:

> seq(4, 10, length = 8)

[1] 4.000000 4.857143 5.714286 6.571429 7.428571 8.285714 9.142857

[8] 10.000000

7. Graficos en R

7.1. Diagrama de barras

Sea

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

La funcion table tabula los datos en x table(x) produce:

> table(x)

x

1 2 3 4

3 4 1 3

Este resultado nos indica que el 1 aparece tres veces, el 2 cuatro veces,el 3 una vez y el 4 tres veces. La instruccion barplot(table(x)) muestra eldiagrama de barras:

> barplot(table(x))

14

Page 15: Practica 1 Introduccion Al R

1 2 3 4

01

23

4

El diagrama se puede completar con tıtulos, subtıtulos y etiquetas en losejes.

> barplot(table(x), main = "Tıtulo principal", sub = "Subtıtulo",

+ xlab = "Texto en x", ylab = "Texto en y")

Si tenemos los datos en un vector x y las frecuencias correspondientes enotro vector y, podemos tambien obtener el diagrama de barras procediendode la siguiente forma:

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

> y <- c(3, 4, 1, 3)

> barplot(y, names.arg = x)

15

Page 16: Practica 1 Introduccion Al R

1 2 3 4

01

23

4

7.2. Histograma

Consideremos una variable con 100 valores generados de la siguiente for-ma:

> set.seed(111)

> x <- rnorm(100)

rnorm(100) genera 100 cien valores y set.seed(111) hace que en todos losordenadores los numeros generados sean los mismos. Probemos:

> x

[1] 0.23522071 -0.33073587 -0.31162382 -2.30234566 -0.17087604 0.14027823[7] -1.49742666 -1.01018842 -0.94847560 -0.49396222 -0.17367413 -0.40659878[13] 1.84563626 0.39405411 0.79752850 -1.56666536 -0.08585101 -0.35913948[19] -1.19360897 0.36418674 0.36166245 0.34696437 0.18973653 -0.15957681[25] 0.32654924 0.59825420 -1.84153430 2.71805560 0.19124439 -1.30129607[31] -3.11321730 -0.94135740 1.40025878 -1.62047003 -2.26599596 1.16299359[37] -0.11615504 0.33425601 -0.62085811 -1.30984491 -1.17572604 -1.12121553[43] -1.36190448 0.48112458 0.74197163 0.02782463 0.33137971 0.64411413

16

Page 17: Practica 1 Introduccion Al R

[49] 2.48566156 1.95998171 0.19166338 1.55254427 0.91424229 0.35862537[55] 0.17509564 -0.84726777 0.97823166 1.80586826 0.12291480 -0.12977203[61] -0.21642866 1.44647817 0.40970980 0.91091657 1.43035817 -0.38129196[67] 0.20230718 -0.80619919 0.29463418 1.40488308 1.02376685 0.47612606[73] -0.67033033 0.15923432 -0.38271538 0.93576259 -0.63153227 -0.09830608[79] 1.03198498 0.38780843 -1.25612931 -0.78695273 0.42981155 -0.37641622[85] -1.21622907 1.02927851 0.43039700 -1.24557402 -0.60272849 0.66006939[91] 2.05074953 0.49080818 -1.73147942 0.71088366 0.01382291 -1.40104160[97] 1.25912367 -0.12747752 -0.72938651 -1.21136136

El histograma se puede obtener con la instruccion hist(). Para obtenerel numero de intervalos se usa la formula de Sturges.

> hist(x)

Si queremos usar amplitudes de intervalos dados por la formula de Scott ,siendo s la cuasidesviacion tıpica, o bien la de Freedman-Diaconis , siendo IQel rango intercuartılico, debemos utilizar el parametro breaks. Por ejemplo:

> hist(x, breaks = "Scott")

Histogram of x

x

Fre

quen

cy

−4 −3 −2 −1 0 1 2 3

010

2030

> hist(x, breaks = "FD")

Histogram of x

x

Fre

quen

cy

−3 −2 −1 0 1 2 3

05

1015

2025

Podemos elegir nuestros propios intervalos. Por ejemplo:

> hist(x, breaks = c(-4, -2, 0, 1.5, 3))

17

Page 18: Practica 1 Introduccion Al R

Histogram of x

x

Den

sity

−4 −3 −2 −1 0 1 2 3

0.00

0.05

0.10

0.15

0.20

0.25

0.30

Se pueden anadir tıtulos, subtıtulos, etc. de la misma forma que conbarplot():

> hist(x, breaks = c(-4, -2, 0, 1.5, 3), main = "Tıtulo Principal",

+ sub = "Subtıtulo", xlab = "Etiqueta x", ylab = "Etiqueta y")

7.3. Diagramas de cajas y bigotes

Con boxplot() generamos diagramas de cajas y bigotes

> boxplot(x, main = "Principal", sub = "Subtıtulo", ylab = "Etiqueta y")

Podemos ver dos valores atıpicos (outliers), uno por cada extremo.

7.4. Diagrama de tallos y hojas

Con las instrucciones siguientes, vamos a generar 40 valores entre 0.1 y10.

> set.seed(111)

> y <- ceiling(100 * runif(40))/10

18

Page 19: Practica 1 Introduccion Al R

> y

[1] 6.0 7.3 3.8 5.2 3.8 4.2 0.2 5.4 4.4 1.0 5.6 6.0 0.7 0.5 1.6 4.5 1.8 9.7 3.2[20] 6.2 4.4 2.9 3.5 3.9 9.7 3.3 6.6 2.9 7.9 6.0 0.6 5.1 4.7 4.7 3.6 7.2 1.2 7.9[39] 6.5 8.1

Con la instruccion ceiling(100*runif(40))/10 primero, con runif() segeneran 40 valores aleatorios entre 0 y 1. Al multiplicar por 100, los numerosse encontraran entre 0 y 100 y con ceiling, obtendremos el entero mayor masproximo. Por ultimo, al dividir por 10, los numeros quedan entre 0 y 10. Eldiagrama de tallos y hojas lo generamos con la instruccion stem():

> stem(y)

The decimal point is at the |

0 | 2567

1 | 0268

2 | 99

3 | 2356889

4 | 244577

5 | 1246

6 | 000256

7 | 2399

8 | 1

9 | 77

7.5. Diagrama de puntos

Utilizaremos stripchart(y,method="stack",pch=1). pch nos indica eltipo de marca que aparecera en el diagrama (cırculo, triangulo, cuadrado,etc.). Si no especificamos nada, el cuadrado es el tipo de marca por defecto.El metodo "stack" concatena multiples vectores en uno solo, con un factorque indica donde esta el inicio de cada observacion.

> stripchart(y, method = "stack", pch = 2)

19

Page 20: Practica 1 Introduccion Al R

0 2 4 6 8 10

7.6. Diagrama de sectores

Es preciso disponer de dos vectores. Uno con los valores y el otro con losnombres. Por ejemplo:

> z <- c(15, 25, 36, 40)

> z.nombres <- c("ni~nos", "jovenes", "maduros", "ancianos")

Con la instruccion pie() generamos el diagrama de sectores.

> pie(z, labels = z.nombres)

8. Soluciones

Ordenacion en orden decreciente

> rev(sort(x))

20

Page 21: Practica 1 Introduccion Al R

[1] 2.71805560 2.48566156 2.05074953 1.95998171 1.84563626 1.80586826[7] 1.55254427 1.44647817 1.43035817 1.40488308 1.40025878 1.25912367[13] 1.16299359 1.03198498 1.02927851 1.02376685 0.97823166 0.93576259[19] 0.91424229 0.91091657 0.79752850 0.74197163 0.71088366 0.66006939[25] 0.64411413 0.59825420 0.49080818 0.48112458 0.47612606 0.43039700[31] 0.42981155 0.40970980 0.39405411 0.38780843 0.36418674 0.36166245[37] 0.35862537 0.34696437 0.33425601 0.33137971 0.32654924 0.29463418[43] 0.23522071 0.20230718 0.19166338 0.19124439 0.18973653 0.17509564[49] 0.15923432 0.14027823 0.12291480 0.02782463 0.01382291 -0.08585101[55] -0.09830608 -0.11615504 -0.12747752 -0.12977203 -0.15957681 -0.17087604[61] -0.17367413 -0.21642866 -0.31162382 -0.33073587 -0.35913948 -0.37641622[67] -0.38129196 -0.38271538 -0.40659878 -0.49396222 -0.60272849 -0.62085811[73] -0.63153227 -0.67033033 -0.72938651 -0.78695273 -0.80619919 -0.84726777[79] -0.94135740 -0.94847560 -1.01018842 -1.12121553 -1.17572604 -1.19360897[85] -1.21136136 -1.21622907 -1.24557402 -1.25612931 -1.30129607 -1.30984491[91] -1.36190448 -1.40104160 -1.49742666 -1.56666536 -1.62047003 -1.73147942[97] -1.84153430 -2.26599596 -2.30234566 -3.11321730

Funcion para calcular la media

> media <- function(x) {

+ sum(x)/length(x)

+ }

Funcion para calcular la varianza

varianza<-function(x)sum((x-mean(x))2)/length(x)

21