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.
[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
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
[1]
8 -19
34
n) Covarianza y coeciente de correlacin o > cov(x, y) [1] 3 > cor(x, y) [1] 0.5447048
3.
3.1.
3.2.
Ra ces cuadradas
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
> 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.
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.
Si queremos generar un vector con los 100 primeros nmeros naturales, u basta con introducir esta orden: 12
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
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.
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.
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