You are on page 1of 21

Practica 1: Introduccion a R

1.

Introduccin o

R es un lenguaje de alto nivel y un entorno para el anlisis de datos y gra a cos. Puede descargarse libremente del sitio llamado CRAN (Comprehensive R Archive Network) en la siguiente direccin: http://cran.r-project.org o o bien, simplemente buscando CRAN en Google.

Al llegar a la pantalla anterior seguid para descargar el programa la siguiente ruta: windows/base/R-2.7.2-win32.exe. Una vez instalado el programa en entorno Windows, lo que vemos es la interfaz RGui (GUI es Graphical User Interface en ingls), con el s e mbolo > esperando la entrada de instrucciones, tal y como puede apreciarse en la gura siguiente:

El men principal contiene entradas t u picas de otras aplicaciones: Archivo, Editar, Visualizar, Ventanas y Ayuda, ms otras dos Misc a y Paquetes. El men de Ayuda ser importante en esta fase inicial. Pau a ra obtener esta ayuda podemos tambin optar por introducir instrucciones e directamente por teclado. Introduce por ejemplo: > help(vector) y aparecer una ventana de ayuda con informacin sobre el comando a o vector. Podemos acceder a la misma pantalla desde el men Ayuda/Funciones u R (texto), aparecer un cuadro en el que deberemos introducir la palabra a vector. Si no recordamos la graf de una expresin podemos utilizar la exa o presin apropos poniendo entre parntesis, y entre comillas, la funcin que o e o buscamos.

que nos da las expresiones que contienen el trmino integer. Lo mismo se e puede conseguir con Ayuda/Sobre y en el cuadro de dilogo que aparece a introducimos integer. R es un lenguaje orientado a objetos. Uno de los ms simples es vector. a 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 ingls), y por ultimo las coordenadas del vector e entre parntesis. Para ver el vector que hemos creado, simplemente, tecleamos e su 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 combinacin de los s o mbolos < y - (guin). o Y, en esta ultima versin, tambin podemos utilizar el signo =. El signo = o e tambin se utilizar para asignar valores a parmetros en las funciones. En e a a la salida anterior [1] indica que el 2 que le sigue es el primer elemento del vector. Si el vector ocupara ms de una l a nea, cada una de las nuevas l neas empezar por [n], indicando n el lugar que ocupa dentro del vector la coora denada que le sigue. Las componentes del vector se referencian por medio de ndices entre corchetes. 3

> 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 vector como 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 instruccin ya introducida, podemos acceder a ella o pulsando la tecla de echa hacia arriba, las veces que sea necesario. Para dejar una instruccin a medias podemos pulsar la tecla Escape. o

2.

Operaciones con vectores y fucniones


> 2 * x [1] 4 -6 16

a) Multiplicacin de un vector por un nmero o u

b) Potencias > x^3 [1] 8 -27 512

c) Longitud Devuelve la dimensin de un vector o > length(x) 4

[1] 3 d) Suma y sumas acumuladas Devuelve la suma de las componentes del vector y la suma acumulada de las componentes > sum(x) [1] 7 > cumsum(x) [1] 2 -1 7

e) Valor mximo y m a nimo Devuelven los valores mximo y m a nimo de las componentes de un vector > max(x) [1] 8 > min(x) [1] -3 f) Media, mediana, cuasivarianza y cuasidesviacin t o pica de las componentes Calculan la media, mediana, cuasivarianza, y cuasidesviacin o t 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

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% -3.0 -0.5 50% 2.0 75% 100% 5.0 8.0

i) Ordenacin creciente de las componentes del vector o > sort(x) [1] -3 2 8

j) Colocar las componentes de un vector en orden inverso a como han sido introducidas > rev(x) [1] 8 -3 2

Cmo ordenar en orden decreciente? o as k) Suma de vectores > x <- c(2, -3, 8) > y <- c(1, 2, 3) > x + y [1] 3 -1 11

l) Combinacin lineal de dos vectores o > 5 * x - 2 * y 6

[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 coeciente de correlacin o > cov(x, y) [1] 3 > cor(x, y) [1] 0.5447048

3.
3.1.

Funciones de uso general


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

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 trigonomtricas e

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 numricos. e > log(3) [1] 1.098612 8

3.4.

Otras funciones
choose(m,n) da el nmero de combinaciones de m elementos de orden u n > choose(10, 2) [1] 45 factorial(n) da el factorial de un nmero (n), o lo que es lo mismo, u 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 funcin que a cada componente de un vector le reste o la media de todas las componentes del vector: desvia<-function(x)x-mean(x) > desvia <- function(x) { + x - mean(x) + } function es la instruccin para crear una funcin. La x que le sigue es o o el argumento de la funcin y entre llaves est lo que la funcin hace con el o a o argumento. En este ejemplo a cada componente del vector le resta la media de todas las componentes. Para ejecutar la funcin basta con introducir el o nombre de la misma seguido del argumento entre parntesis e > desvia(x) [1] -0.3333333 -5.3333333 Recordemos que 9 5.6666667

> x [1] 2 -3 8

> mean(x) [1] 2.333333 Cmo calcular la media creando tu propia funcin? Cmo calcular o as o o as la varianza creando tu propia funcin? Despus de intentar dar una respuesta, o e mira las soluciones al nal de este documento, si lo consideras necesario.

5.

Introduccin de datos o

Cuando necesitamos introducir pocos datos, podemos hacerlo como hasta ahora > 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 instruccin nos aparece 1 y el programa queda a la espera o de que introduzcamos un valor, lo hacemos y damos a Enter y aparece 2 para que introduzcamos el siguiente valor. As continuaremos hasta el nal. Para indicar que terminamos y que ya no hay ms datos debemos hacer Enter a sin introducir ningn valor. Si queremos editar una variable ya introducida u podemos usar la funcin data.entry(b), que abre una ventana como la o siguiente:

10

Podemos agregar un nuevo valor en la la 8 y cerrar la ventana. De esta forma el nuevo valor quedar incorporado al vector b: a > 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 de introducir es 3.21. Para introducir datos en una variable nueva con data.entry(x), creamos un vector vac Por ejemplo: o. > w <- numeric() Podemos ver el resultado: > w numeric(0) A continuacin, tecleamos: o > data.entry(w) Se nos desplegar una ventana como la anterior, en la que la primera a columna estar encabezada por el nombre del vector vac que hemos creado. a o En dicha columna podremos introducir los valores que queramos.

11

Para introducir un nmero grande de datos podemos utilizar EXCEL, u copiar los datos, volver a R , teclear x<-scan(), y en la entrada 1 pegar los datos. 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 conguracin del separador decimal de EXo CEL, que debe estar puesto en ., y no en ,, pues de lo contrario, R nos dar error. Si el separador est puesto en , puede cambiarse desde Hea a rramientas/Opciones/Internacional, donde pondremos el separador decimal con punto y los millares con coma. En prcticas posteriores importaremos datos desde EXCEL, SPSS, archia vos de texto,etc. Tambin se puede utilizar el Bloc de notas de Windows e

6.

Dos generadores de datos especiales

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

> x <- 1:100 Al teclear x obtendremos:


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

Hay que jarse en que cada la est encabezada por el nmero que ina u dica la posicin del primer elemento de la la. Hasta ahora hemos hecho o la asignacin de valores a la variable y la visualizacin de los mismos con o o dos instrucciones diferentes. Esto mismo se puede conseguir con una sola instruccin ponindola entre parntesis: o e e > x <- -3:5 > x [1] -3 -2 -1 0 1 2 3 4 5

Tambin se pueden generar valores sin asignarlos a ninguna variable, con e lo cual aparecen en pantalla pero no se pueden volver a llamar y, por lo tanto, a utilizar. Nota: El operador : tiene prelacin sobre +, -, *, /. Por ejemplo: o
> 4 * 1:25 [1] [20] 4 80 8 84 12 88 16 92 20 24 96 100 28 32 36 40 44 48 52 56 60 64 68 72 76

genera los nmeros del 1 al 25 y los multiplica despus por 4. u e 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 despus genera nmeros desde el 4 al 25 e u Otro generador de vectores es la funcin seq(a,b,r). Con esta instruccin o o se genera una lista de nmeros que empieza en a y termina en b, yendo de r u en r. Por ejemplo: > seq(4, 10, 2) 13

genera una lista de nmeros que empieza en 4 y termina en 10, yendo de dos u en dos: > seq(4, 10, 2) [1] 4 6 8 10

Otra cosa es seq(a,b,lenght=r). Con esta instruccin se generan r no u meros entre a y b a distancias iguales. Por ejemplo: > seq(4, 10, length = 8) [1] 4.000000 [8] 10.000000 4.857143 5.714286 6.571429 7.428571 8.285714 9.142857

7.
7.1.

Grcos en R a
Diagrama de barras
Sea

> x <- c(1, 1, 1, 2, 2, 2, 2, 3, 4, 4, 4) La funcin table tabula los datos en x table(x) produce: o > 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 instruccin barplot(table(x)) muestra el o diagrama de barras: > barplot(table(x))

14

El diagrama se puede completar con t tulos, subt tulos y etiquetas en los ejes. > barplot(table(x), main = "Ttulo principal", sub = "Subttulo", + xlab = "Texto en x", ylab = "Texto en y") Si tenemos los datos en un vector x y las frecuencias correspondientes en otro vector y, podemos tambin obtener el diagrama de barras procediendo e de la siguiente forma: > x <- c(1, 2, 3, 4) > y <- c(3, 4, 1, 3) > barplot(y, names.arg = x)

15

7.2.

Histograma

Consideremos una variable con 100 valores generados de la siguiente forma: > set.seed(111) > x <- rnorm(100) rnorm(100) genera 100 cien valores y set.seed(111) hace que en todos los ordenadores los nmeros generados sean los mismos. Probemos: u
> x [1] [7] [13] [19] [25] [31] [37] [43] 0.23522071 -0.33073587 -0.31162382 -2.30234566 -0.17087604 0.14027823 -1.49742666 -1.01018842 -0.94847560 -0.49396222 -0.17367413 -0.40659878 1.84563626 0.39405411 0.79752850 -1.56666536 -0.08585101 -0.35913948 -1.19360897 0.36418674 0.36166245 0.34696437 0.18973653 -0.15957681 0.32654924 0.59825420 -1.84153430 2.71805560 0.19124439 -1.30129607 -3.11321730 -0.94135740 1.40025878 -1.62047003 -2.26599596 1.16299359 -0.11615504 0.33425601 -0.62085811 -1.30984491 -1.17572604 -1.12121553 -1.36190448 0.48112458 0.74197163 0.02782463 0.33137971 0.64411413

16

[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 instruccin hist(). Para obtener o el nmero de intervalos se usa la frmula de Sturges. u o > hist(x) Si queremos usar amplitudes de intervalos dados por la frmula de Scott , o siendo s la cuasidesviacin t o pica, o bien la de Freedman-Diaconis , siendo IQ el rango intercuart lico, debemos utilizar el parmetro breaks. Por ejemplo: a > hist(x, breaks = "Scott")
Histogram of x

> hist(x, breaks = "FD")


Histogram of x

30

Frequency

Frequency 4 3 2 1 x 0 1 2 3

20

10

10

15

20

25

1 x

Podemos elegir nuestros propios intervalos. Por ejemplo: > hist(x, breaks = c(-4, -2, 0, 1.5, 3))

17

Histogram of x
0.30 Density 0.00 4 0.05 0.10 0.15 0.20 0.25

1 x

Se pueden aadir t n tulos, subt tulos, etc. de la misma forma que con barplot(): > hist(x, breaks = c(-4, -2, 0, 1.5, 3), main = "Ttulo Principal", + sub = "Subttulo", 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 = "Subttulo", ylab = "Etiqueta y") Podemos ver dos valores at picos (outliers), uno por cada extremo.

7.4.
10.

Diagrama de tallos y hojas

Con las instrucciones siguientes, vamos a generar 40 valores entre 0.1 y > set.seed(111) > y <- ceiling(100 * runif(40))/10 18

> 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 instruccin ceiling(100*runif(40))/10 primero, con runif() se o generan 40 valores aleatorios entre 0 y 1. Al multiplicar por 100, los nmeros u se encontrarn entre 0 y 100 y con ceiling, obtendremos el entero mayor ms a a prximo. Por ultimo, al dividir por 10, los nmeros quedan entre 0 y 10. El o u diagrama de tallos y hojas lo generamos con la instruccin stem(): o > stem(y) The decimal point is at the | 0 1 2 3 4 5 6 7 8 9 | | | | | | | | | | 2567 0268 99 2356889 244577 1246 000256 2399 1 77

7.5.

Diagrama de puntos

Utilizaremos stripchart(y,method="stack",pch=1). pch nos indica el tipo de marca que aparecer en el diagrama (c a rculo, tringulo, cuadrado, a etc.). Si no especicamos nada, el cuadrado es el tipo de marca por defecto. El mtodo "stack" concatena mltiples vectores en uno solo, con un factor e u que indica dnde est el inicio de cada observacin. o a o > stripchart(y, method = "stack", pch = 2)

19

10

7.6.

Diagrama de sectores

Es preciso disponer de dos vectores. Uno con los valores y el otro con los nombres. Por ejemplo: > z <- c(15, 25, 36, 40) > z.nombres <- c("ni~os", "jvenes", "maduros", "ancianos") n o Con la instruccin pie() generamos el diagrama de sectores. o > pie(z, labels = z.nombres)

8.

Soluciones
Ordenacin en orden decreciente o
> rev(sort(x))

20

[1] [7] [13] [19] [25] [31] [37] [43] [49] [55] [61] [67] [73] [79] [85] [91] [97]

2.71805560 1.55254427 1.16299359 0.91424229 0.64411413 0.42981155 0.35862537 0.23522071 0.15923432 -0.09830608 -0.17367413 -0.38129196 -0.63153227 -0.94135740 -1.21136136 -1.36190448 -1.84153430

2.48566156 1.44647817 1.03198498 0.91091657 0.59825420 0.40970980 0.34696437 0.20230718 0.14027823 -0.11615504 -0.21642866 -0.38271538 -0.67033033 -0.94847560 -1.21622907 -1.40104160 -2.26599596

2.05074953 1.43035817 1.02927851 0.79752850 0.49080818 0.39405411 0.33425601 0.19166338 0.12291480 -0.12747752 -0.31162382 -0.40659878 -0.72938651 -1.01018842 -1.24557402 -1.49742666 -2.30234566

1.95998171 1.40488308 1.02376685 0.74197163 0.48112458 0.38780843 0.33137971 0.19124439 0.02782463 -0.12977203 -0.33073587 -0.49396222 -0.78695273 -1.12121553 -1.25612931 -1.56666536 -3.11321730

1.84563626 1.40025878 0.97823166 0.71088366 0.47612606 0.36418674 0.32654924 0.18973653 0.01382291 -0.15957681 -0.35913948 -0.60272849 -0.80619919 -1.17572604 -1.30129607 -1.62047003

1.80586826 1.25912367 0.93576259 0.66006939 0.43039700 0.36166245 0.29463418 0.17509564 -0.08585101 -0.17087604 -0.37641622 -0.62085811 -0.84726777 -1.19360897 -1.30984491 -1.73147942

Funcin para calcular la media o > media <- function(x) { + sum(x)/length(x) + } Funcin para calcular la varianza o ^ varianza<-function(x)sum((x-mean(x))2)/length(x)

21

You might also like