Está en la página 1de 109

1

Introducci on al an alisis de datos con R

Mar a Teresa Alonso Virgilio G omez Mar a Jos e Haro Francisco Parre no

Indice general
1. Pr actica 1: Introducci on a R 1.1. Introducci on . . . . . . . . . . . . . . 1.2. Operaciones con vectores y funciones 1.3. Funciones de uso general . . . . . . . 1.3.1. Exponenciales y logar tmicas . 1.3.2. Ra ces cuadradas . . . . . . . 1.3.3. Funciones trigonom etricas . . 1.3.4. Otras funciones . . . . . . . . 1.4. Funciones generadas por el usuario . 1.5. Introducci on de datos . . . . . . . . . 1.6. Dos generadores de datos especiales . 1.7. Gr acos en R . . . . . . . . . . . . . 1.7.1. Diagrama de barras . . . . . . 1.7.2. Histograma . . . . . . . . . . 1.7.3. Diagramas de cajas y bigotes 1.7.4. Diagrama de tallos y hojas . . 1.7.5. Diagrama de puntos . . . . . 1.7.6. Diagrama de sectores . . . . . 1.8. Soluciones . . . . . . . . . . . . . . . 11 11 14 17 17 18 18 19 20 20 23 25 25 26 29 29 30 30 31 33 33 34 34 36 37 39 42 47 48

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

2. Pr actica 2: Simulaci on con R 2.1. Otros tipos de datos en R . . . . . . . . . . . . 2.2. Variables l ogicas en R . . . . . . . . . . . . . . 2.2.1. Indices l ogicos . . . . . . . . . . . . . . 2.2.2. Condiciones l ogicas compuestas . . . . 2.2.3. Exclusi on de valores . . . . . . . . . . 2.3. Matrices en R . . . . . . . . . . . . . . . . . . 2.3.1. Operaciones con matrices . . . . . . . 2.4. Cargar datos de otros paquetes estad sticos . . 2.4.1. Selecci on de valores en un data.frame 3

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

INDICE GENERAL 2.4.2. Variables de tipo factor . . . . . . . . . . . . . . . . . 49 2.5. Simulaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 2.5.1. Dados . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

3. Pr actica 3: Simulaci on con R (II) 3.1. Simulaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.1. Dados . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.2. Urnas . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.3. Barajas . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.4. Cola de espera para el autob us . . . . . . . . . . . . 3.2. Funciones de densidad y probabilidad . . . . . . . . . . . . . 3.2.1. Variables aleatorias discretas . . . . . . . . . . . . . . 3.2.2. Variables aleatorias continuas . . . . . . . . . . . . . 3.2.3. Simulaci on de una distribuci on normal . . . . . . . . 3.2.4. Suma de variables aleatorias normales . . . . . . . . 3.2.5. Constataci on de la falta de memoriade la distribuci on exponencial . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . .

55 55 55 59 61 62 63 63 65 66 66

. 67 69 69 69 70 71 72 72 73 73 75 77 77 77 82

4. Pr actica 4: T Central L mite. Intervalos de conanza 4.1. Comportamiento de la suma de variables aleatorias normales iguales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.1. Media de variables aleatorias Normales . . . . . . . . . 4.1.2. Media de variables aleatorias Uniformes . . . . . . . . 4.2. Teorema central del l mite . . . . . . . . . . . . . . . . . . . . 4.2.1. Media de variables aleatorias Uniformes . . . . . . . . 4.2.2. Media de variables aleatorias de una Exponencial . . . 4.3. Ley de los grandes n umeros . . . . . . . . . . . . . . . . . . . 4.3.1. Distribuci on exponencial de media 1 . . . . . . . . . . 4.3.2. Distribuci on de la proporci on de exitos . . . . . . . . . 4.4. Obtenci on de una distribuci on de Student a partir de Normales 4.5. Intervalos de conanza . . . . . . . . . . . . . . . . . . . . . . 4.5.1. Intervalos de conanza con una Normal . . . . . . . . . 4.5.2. Intervalos con la t de Student . . . . . . . . . . . . . . 5. Pr actica 5: An alisis de datos con hip otesis. 5.1. Introducci on a RCommander . . 5.1.1. Instalaci on . . . . . . . . 5.2. Un paseo por RCommander . . . 5.2.1. Men us . . . . . . . . . . 5.2.2. Ventana de instrucciones RCommander. Constrastes de . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

85 85 86 86 87 88

INDICE GENERAL 5.2.3. Ventana de resultados . . . . . . . . . . 5.2.4. Mensajes . . . . . . . . . . . . . . . . . . 5.3. An alisis exploratorio de datos con RCommander 5.3.1. C omo cargar datos . . . . . . . . . . . . 5.3.2. Estad sticos resumen . . . . . . . . . . . 5.3.3. Gr acas . . . . . . . . . . . . . . . . . . 5.4. Distribuciones estad sticas . . . . . . . . . . . . 5.5. Constrastes de hip otesis . . . . . . . . . . . . . 5.5.1. Distribuci on t de Student . . . . . . . . 5.5.2. Distribuci on Normal . . . . . . . . . . . 5.5.3. Contrastes para proporciones . . . . . . 6. Pr actica 6: An alisis de la varianza. Regresi on laci on. 6.1. An alisis de la varianza . . . . . . . . . . . . . 6.1.1. Introducci on . . . . . . . . . . . . . . . 6.1.2. An alisis exploratorio de datos . . . . . 6.1.3. An alisis de la varianza y tabla ANOVA 6.2. Regresi on lineal y correlaci on . . . . . . . . . 6.2.1. An alisis exploratorio de datos . . . . . 6.2.2. Ajuste de la recta de regresi on . . . . . 6.2.3. Transformaci on de variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5 89 89 89 89 91 91 93 95 95 97 99

lineal y corre103 . . . . . . . . . 103 . . . . . . . . . 103 . . . . . . . . . 104 . . . . . . . . . 106 . . . . . . . . . 107 . . . . . . . . . 107 . . . . . . . . . 108 . . . . . . . . . 109

INDICE GENERAL

Indice de guras
1.1. P agina del CRAN para descargar R. . . . . . . . . . . . . . . . 11 1.2. Ventana principal de R. . . . . . . . . . . . . . . . . . . . . . . 12 1.3. B usqueda en la ayuda con el comando apropos(). . . . . . . . 13 2.1. Diagrama de barras de las frecuencias obtenidas del lanzamiento de cuatro dados. . . . . . . . . . . . . . . . . . . . . . 52 2.2. Diagrama de barras de los exitos obtenidos al simular de una Binomial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 3.1. Diagrama de barras con los resultados de la suma de la tirada de cuatro dados de seis caras. . . . . . . . . . . . . . . . . . . 57 3.2. Diagrama de barras con el n umero de veces que aparece un seis al tirar 10 dados. . . . . . . . . . . . . . . . . . . . . . . . 59 3.3. Diagrama de barras con el n umero de bolas blancas extra das. 61 3.4. Diagrama de barras con el n umero de personas en la cola de espera del autob us. . . . . . . . . . . . . . . . . . . . . . . . . 63 3.5. Histograma de datos simulados de una Normal junto con su funci on de densidad de probabilidad. . . . . . . . . . . . . . . 67 3.6. Histograma de la suma de dos variables normales junto con la funci on de densidad correspondiente. . . . . . . . . . . . . . . 68 4.1. Histograma de la media de observaciones de una distribuci on normal, junto con la distribuci on de la poblaci on (en azul) y la de la media (en rojo). . . . . . . . . . . . . . . . . . . . . . 70 4.2. Histograma de la media de observaciones de una distribuci on uniforme, junto con la distribuci on uniforme de la poblaci on (en azul) y la distribuci on triangular de la media de observaciones (en rojo). . . . . . . . . . . . . . . . . . . . . . . . . . . 71 7

INDICE DE FIGURAS 4.3. Histograma con la distribuci on de la media de 30 variables uniformes en [0,1], junto con la distribuci on uniforme de la poblaci on (en azul) y la te orica del promedio de 30 valores (en rojo). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4. Histograma de simulaciones de la media de 40 variables aleatorias exponenciales, junto con la distribuci on exponencial de la poblaci on (en azul) y la te orica del promedio (en rojo). . . . 4.5. Promedio progresivo de variables exponenciales. Puede verse como para promedios de muchas observaciones el valor tiende a la media de la distribuci on de la poblaci on, que es 1. . . . . 4.6. Proporci on de seises obtenidos en funci on del n umero de tiradas que se promedian. Se aprecia como cuantas m as tiradas se promedian m as nos acercamos a la probabilidad real de sacar un seis de 1/6. . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.7. Simulaci on de una distribuci on t de Student con 3 grados de libertad (en rojo) a partir de variables aleatorias N(0,1). . . . 4.8. Intervalos de conanza para la media generados a partir de 100 muestras (en azul) junto al valor real de la media (en rojo). 4.9. Segunda r eplica de la simulaci on de intervalos de conanza para la media generados a partir de 100 muestras (en azul) junto al valor real de la media (en rojo). . . . . . . . . . . . . 4.10. Intervalos de conanza para la media generados a partir de 100 muestras (en azul) junto al valor real de la media (en rojo). Hemos utilizado la f ormula con la t de Student para calcular los intervalos en este caso. . . . . . . . . . . . . . . . . . . . . 4.11. Segunda r eplica de los intervalos de conanza para la media generados a partir de 100 muestras (en azul) junto al valor real de la media (en rojo). Hemos utilizado la f ormula con la t de Student para calcular los intervalos en este caso. . . . . . . . . 5.1. Ventana principal de RCommander. . . . . . . . . . . . . . . . 5.2. C omo cargar el banco de datos cars. . . . . . . . . . . . . . 5.3. C alculo de estad sticos resumen de la variable speed del banco de datos cars. . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4. Men u para dibujar un histograma con las variables del banco de datos cars. . . . . . . . . . . . . . . . . . . . . . . . . . . 5.5. Men u para dibujar un diagrama de tallo y hojas con las variables del banco de datos cars. . . . . . . . . . . . . . . . . . 5.6. Men u para dibujar un diagrama de cajas con las variables del banco de datos cars. . . . . . . . . . . . . . . . . . . . . . . 5.7. Ventanas del men u sobre la distribuci on Normal. . . . . . . .

73

74

75

76 78 80

81

83

84

. 87 . 90 . 91 . 92 . 92 . 93 . 94

INDICE DE FIGURAS

5.8. Men u para hacer un contraste de hip otesis para la media de una poblaci on utilizando el test de la t de Student. . . . . . . 96 5.9. Ventana para realizar el contraste de proporciones. . . . . . . 101 6.1. RCommander permite realizar un gr aco para comparar las medias de distintos grupos. . . . . . . . . . . . . . . . . . . . . 6.2. RCommander permite realizar diagramas de cajas por grupos. 6.3. Ventana para hacer la ANOVA. . . . . . . . . . . . . . . . . 6.4. Ventana para dibujar dos variables una frente a otra con RCommander. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.5. Ventana para ajustar un modelo de regresi on lineal. . . . . . 6.6. Ventana para tranformar variables. . . . . . . . . . . . . . . . 105 . 106 . 106 . 108 . 108 . 109

10

INDICE DE FIGURAS

1 | Pr actica 1: Introducci on a R
1.1. Introducci on

R es un lenguaje de alto nivel y un entorno para el an alisis de datos y gr acos. 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.

Figura 1.1: P agina del CRAN para descargar R. Al llegar a la pantalla que aparece en la Figura 1.1 pinchad en el enlace para descargar el programa para el sistema operativo que utilic eis. En el momento en el que se escriben estas notas (febrero de 2013) la u ltima versi on de R es la 2.15.2. Si elegimos descargar la versi on para Windows, tendremos 11

12

AR CAP ITULO 1. PRACTICA 1: INTRODUCCION

que elegir descargar solamente el sistema base en la nueva p agina que nos aparezca. Una vez instalado el programa en entorno Windows, lo que vemos es la interfaz RGui (GUI es Graphical User Interface en ingl es), esperando la entrada de instrucciones con el s mbolo >, tal y como puede apreciarse en la gura siguiente:

Figura 1.2: Ventana principal de R. El men u principal contiene entradas t picas de otras aplicaciones: Archivo, Editar, Visualizar, Ventanas y Ayuda, m as otras dos Misc y Paquetes. El men u de Ayuda ser a importante en esta fase inicial. Para obtener esta ayuda podemos tambi en optar por introducir instrucciones directamente por teclado. Introduce por ejemplo: > help(vector) y aparecer a una ventana de ayuda con informaci on sobre el comando vector. Podemos acceder a la misma pantalla desde el men u Ayuda/Funciones R (texto), aparecer a un cuadro en el que deberemos introducir la palabra vector. Si no recordamos la graf a de una expresi on podemos utilizar la expresi on apropos poniendo entre par entesis, y entre comillas, la funci on que buscamos.

1.1. INTRODUCCION

13

Figura 1.3: B usqueda en la ayuda con el comando apropos(). La Figura 1.3 muestra el resultado del comando apropos( Integer") que nos da las expresiones que contienen el t ermino integer. Lo mismo se puede conseguir con Ayuda/Sobre y en el cuadro de di alogo que aparece introducimos Integer. R es un lenguaje orientado a objetos. Uno de los m as simples es un vector de n umeros. 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 ingl es), y por u ltimo las coordenadas del vector entre par entesis. Para ver el vector que hemos creado, simplemente, tecleamos su nombre: > x [1] 2 3 8 Como ya se ha podido observar al crear el vector x, para hacer asignaci ones a las variables se utiliza una combinaci on de los s mbolos < y - (gui on). Y, en esta u ltima versi on, tambi en podemos utilizar el signo =. El signo =

14

AR CAP ITULO 1. PRACTICA 1: INTRODUCCION

tambi en se utilizar a para asignar valores a par ametros en las funciones (como se ver a m as adelante). En la salida anterior [1] indica que el 2 que le sigue es el primer elemento del vector. Si el vector ocupara m as de una l nea, cada una de las nuevas l neas empezar a por [n], indicando n el lugar que ocupa dentro del vector la coordenada que le sigue. Las componentes del vector se referencian por medio de ndices entre corchetes: > 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 instrucci on ya introducida, podemos acceder a ella pulsando la tecla de echa hacia arriba, las veces que sea necesario. Para dejar una instrucci on a medias podemos pulsar la tecla Escape.

1.2.

Operaciones con vectores y funciones

a) Multiplicaci on de un vector por un n umero > 2*x [1] 4 -6 16

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

1.2. OPERACIONES CON VECTORES Y FUNCIONES c) Obtener la dimensi on de un vector > length(x) [1] 3

15

d) Calcular 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) Calcular el m aximo y m nimo de las componentes de un vector > max(x) [1] 8 > min(x) [1] -3 f) Media, mediana, cuasivarianza y cuasidesviaci on t pica de las componentes > mean(x) [1] 2.333333 > median(x) [1] 2 > var(x) [1] 30.33333 > sd(x)

16 [1] 5.507571

AR CAP ITULO 1. PRACTICA 1: INTRODUCCION

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) Ordenaci on 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 sido introducidas > rev(x) [1] 8 -3 2

Pregunta: C omo 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) Combinaci on lineal de dos vectores

1.3. FUNCIONES DE USO GENERAL > 5*x-2*y [1] 8 -19 34

17

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 correlaci on > cov(x,y) [1] 3 > cor(x,y) [1] 0.5447048

1.3.
1.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)

18 [1]

AR CAP ITULO 1. PRACTICA 1: INTRODUCCION 2.718282 7.389056 20.085537

Potencias en cualquier otra base (por ejemplo, 2) > 2^y [1] 2 4 8

1.3.2.

Ra ces cuadradas

> sqrt(y) [1] 1.000000 1.414214 1.732051

1.3.3.

Funciones trigonom etricas

A la hora de trabajar con funciones trigonom etricas, R considera que el argumento viene dado en radianes Seno > sin(y) [1] 0.8414710 0.9092974 0.1411200 Coseno > cos(y) [1] 0.5403023 -0.4161468 -0.9899925

Tangente > tan(y) [1] 1.5574077 -2.1850399 -0.1425465

Las funciones trigonom etricas se pueden aplicar a funciones de datos. > z<-c(0.5,0.7,0.2) > z [1] 0.5 0.7 0.2

1.3. FUNCIONES DE USO GENERAL Arcoseno > asin(z) [1] 0.5235988 0.7753975 0.2013579 Arcocoseno > acos(z) [1] 1.0471976 0.7953988 1.3694384 Arcotangente > atan(z) [1] 0.4636476 0.6107260 0.1973956

19

Todas estas funciones se pueden aplicar directamente sobre valores num ericos. > log(3) [1] 1.098612

1.3.4.

Otras funciones

choose(m,n) da el n umero de combinaciones de m elementos de orden n > choose(10,2) [1] 45 factorial(n) da el factorial de un n umero (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.6411979 0.3284916 0.6356910 0.9285192 0.5752422

20

AR CAP ITULO 1. PRACTICA 1: INTRODUCCION

1.4.

Funciones generadas por el usuario

Vamos a crear una funci on que a cada componente de un vector le reste la media de todas las componentes del vector: > desvia<-function(x){x-mean(x)} function es la instrucci on para crear una funci on. La x que le sigue es el argumento de la funci on y entre llaves est a lo que la funci on hace con el argumento. En este ejemplo a cada componente del vector le resta la media de todas las componentes. Para ejecutar la funci on basta con introducir el nombre de la misma seguido del argumento entre par entesis > desvia(x) [1] -0.3333333 -5.3333333 Recordemos que > x [1] 2 -3 8 5.6666667

> mean(x) [1] 2.333333 C omo calcular as la media creando tu propia funci on? C omo calcular as la varianza creando tu propia funci on? Despu es de intentar dar una respuesta, mira las soluciones al nal de esta pr actica, si lo consideras necesario.

1.5.

Introducci on de datos

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()

DE DATOS 1.5. INTRODUCCION > 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

21

Al introducir la instrucci on nos aparece 1: y el programa queda a la espera 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 m as datos debemos hacer Enter sin introducir ning un valor. Si queremos editar una variable ya introducida podemos usar la funci on > data.entry(b) que abre una ventana como la siguiente:

Podemos agregar un nuevo valor en la la 8 y cerrar la ventana. De esta forma el nuevo valor quedar a incorporado al vector b: > b

22

AR CAP ITULO 1. PRACTICA 1: INTRODUCCION

[1] 1.25 2.56 3.50 2.11 6.32 5.22 6.41 3.21 Podemos observar que ya hay 8 valores. El u ltimo que acabamos de introducir es 3.21. Para introducir datos en una variable nueva con data.entry(x), creamos un vector vac o. Por ejemplo: > w<-numeric() Podemos ver el resultado: > w numeric(0) A continuaci on, tecleamos: > data.entry(w) Se nos desplegar a una ventana como la anterior, en la que la primera columna estar a encabezada por el nombre del vector vac o que hemos creado. En dicha columna podremos introducir los valores que queramos.

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

1.6. DOS GENERADORES DE DATOS ESPECIALES > x<-scan() 1: 2.4 2: 5.6 3: 3.5 4: 1.8 5: 4.5 6: 6.1 7: Read 6 items

23

Hay que tener cuidado con la conguraci on del separador decimal de EXCEL, que debe estar puesto en ., y no en ,, pues de lo contrario, R nos dar a error. Si el separador est a puesto en ,puede cambiarse desde Herramientas/Opciones/Internacional, donde pondremos el separador decimal con punto y los millares con coma. En pr acticas posteriores importaremos datos desde EXCEL, SPSS, archivos de texto,etc. Tambi en se puede utilizar el Bloc de notas de Windows

1.6.

Dos generadores de datos especiales

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

Hay que jarse en que cada la est a encabezada por el n umero que indica la posici on del primer elemento de la la. Hasta ahora hemos hecho la asignaci on de valores a la variable y la visualizaci on de los mismos con dos instrucciones diferentes. Esto mismo se puede conseguir con una sola instrucci on poni endola entre par entesis:

24 > x<--3:5 > x [1] -3 -2 -1 0

AR CAP ITULO 1. PRACTICA 1: INTRODUCCION

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

genera los n umeros del 1 al 25 y los multiplica despu es 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 despu es genera n umeros desde el 4 al 25 Otro generador de vectores es la funci on seq(a,b,r). Con esta instrucci on se genera una lista de n umeros que empieza en a y termina en b, yendo de r en r. Por ejemplo: > seq(4,10,2) genera una lista de n umeros que empieza en 4 y termina en 10, yendo de dos en dos: > seq(4,10,2) [1] 4 6 8 10

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

1.7. GRAFICOS EN R

25

1.7.
1.7.1.
Sea

Gr acos en R
Diagrama de barras

> x<-c(1,1,1,2,2,2,2,3,4,4,4) La funci on 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 instrucci on barplot(table(x)) muestra el diagrama de barras: > barplot(table(x))

26

AR CAP ITULO 1. PRACTICA 1: INTRODUCCION

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

1.7.2.

Histograma

Consideremos una variable con 100 valores generados de la siguiente forma:

1.7. GRAFICOS EN R > set.seed(111) > x<-rnorm(100)

27

rnorm(100) genera 100 cien valores y set.seed(111) hace que en todos los ordenadores los n umeros generados sean los mismos. Probemos:
> x [1] [6] [11] [16] [21] [26] [31] [36] [41] [46] [51] [56] [61] [66] [71] [76] [81] [86] [91] [96] 0.23522071 0.14027823 -0.17367413 -1.56666536 0.36166245 0.59825420 -3.11321730 1.16299359 -1.17572604 0.02782463 0.19166338 -0.84726777 -0.21642866 -0.38129196 1.02376685 0.93576259 -1.25612931 1.02927851 2.05074953 -1.40104160 -0.33073587 -1.49742666 -0.40659878 -0.08585101 0.34696437 -1.84153430 -0.94135740 -0.11615504 -1.12121553 0.33137971 1.55254427 0.97823166 1.44647817 0.20230718 0.47612606 -0.63153227 -0.78695273 0.43039700 0.49080818 1.25912367 -0.31162382 -1.01018842 1.84563626 -0.35913948 0.18973653 2.71805560 1.40025878 0.33425601 -1.36190448 0.64411413 0.91424229 1.80586826 0.40970980 -0.80619919 -0.67033033 -0.09830608 0.42981155 -1.24557402 -1.73147942 -0.12747752 -2.30234566 -0.94847560 0.39405411 -1.19360897 -0.15957681 0.19124439 -1.62047003 -0.62085811 0.48112458 2.48566156 0.35862537 0.12291480 0.91091657 0.29463418 0.15923432 1.03198498 -0.37641622 -0.60272849 0.71088366 -0.72938651 -0.17087604 -0.49396222 0.79752850 0.36418674 0.32654924 -1.30129607 -2.26599596 -1.30984491 0.74197163 1.95998171 0.17509564 -0.12977203 1.43035817 1.40488308 -0.38271538 0.38780843 -1.21622907 0.66006939 0.01382291 -1.21136136

El histograma se puede obtener con la instrucci on hist(). Para obtener el n umero de intervalos se usa la f ormula de Sturges. > hist(x) Si queremos usar amplitudes de intervalos dados por la f ormula de Scott o bien la de Freedman-Diaconis debemos utilizar el par ametro breaks. Por ejemplo: > hist(x,breaks="Scott")
Histogram of x

Frequency

0 4

10

20

30

1 x

28

AR CAP ITULO 1. PRACTICA 1: INTRODUCCION > hist(x,breaks="FD")


Histogram of x

Frequency

10

15

20

25

1 x

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


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

1 x

Se pueden a nadir t tulos, subt tulos, etc. de la misma forma que con barplot(): > hist(x,breaks=c(-4,-2,0,1.5,3),main="T tulo Principal", sub="Subt tulo", + xlab="Etiqueta x", ylab="Etiqueta y")

1.7. GRAFICOS EN R

29

1.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.

1.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


> 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 [17] 1.8 9.7 3.2 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 [33] 4.7 4.7 3.6 7.2 1.2 7.9 6.5 8.1

Primero, con runif() se generan 40 valores aleatorios entre 0 y 1. Al multiplicar por 100, los n umeros se encontrar an entre 0 y 100 y con ceiling, obtendremos el entero mayor m as pr oximo. Por u ltimo, al dividir por 10, los n umeros quedan entre 0 y 10. El diagrama de tallos y hojas lo generamos con la instrucci on stem(): > 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

30

AR CAP ITULO 1. PRACTICA 1: INTRODUCCION

1.7.5.

Diagrama de puntos

Utilizaremos stripchart(y,method="stack",pch=1) para hacer diagramas de puntos. pch nos indica el tipo de marca que aparecer a en el diagrama (c rculo, tri angulo, cuadrado, etc.). Si no especicamos nada, el cuadrado es el tipo de marca por defecto. El m etodo "stack" concatena m ultiples vectores en uno solo, con un factor que indica d onde est a el inicio de cada observaci on. > stripchart(y,method="stack",pch=2)

10

1.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~ nos","j ovenes","maduros","ancianos") Con la instrucci on pie() generamos el diagrama de sectores. > pie(z,labels=z.nombres)

1.8. SOLUCIONES

31

1.8.

Soluciones

Ordenaci on en orden decreciente


> rev(sort(x)) [1] [6] [11] [16] [21] [26] [31] [36] [41] [46] [51] [56] [61] [66] [71] [76] [81] [86] [91] [96] 2.71805560 1.80586826 1.40025878 1.02376685 0.79752850 0.59825420 0.42981155 0.36166245 0.32654924 0.19124439 0.12291480 -0.11615504 -0.17367413 -0.37641622 -0.60272849 -0.78695273 -1.01018842 -1.21622907 -1.36190448 -1.73147942 2.48566156 1.55254427 1.25912367 0.97823166 0.74197163 0.49080818 0.40970980 0.35862537 0.29463418 0.18973653 0.02782463 -0.12747752 -0.21642866 -0.38129196 -0.62085811 -0.80619919 -1.12121553 -1.24557402 -1.40104160 -1.84153430 2.05074953 1.44647817 1.16299359 0.93576259 0.71088366 0.48112458 0.39405411 0.34696437 0.23522071 0.17509564 0.01382291 -0.12977203 -0.31162382 -0.38271538 -0.63153227 -0.84726777 -1.17572604 -1.25612931 -1.49742666 -2.26599596 1.95998171 1.43035817 1.03198498 0.91424229 0.66006939 0.47612606 0.38780843 0.33425601 0.20230718 0.15923432 -0.08585101 -0.15957681 -0.33073587 -0.40659878 -0.67033033 -0.94135740 -1.19360897 -1.30129607 -1.56666536 -2.30234566 1.84563626 1.40488308 1.02927851 0.91091657 0.64411413 0.43039700 0.36418674 0.33137971 0.19166338 0.14027823 -0.09830608 -0.17087604 -0.35913948 -0.49396222 -0.72938651 -0.94847560 -1.21136136 -1.30984491 -1.62047003 -3.11321730

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

32

AR CAP ITULO 1. PRACTICA 1: INTRODUCCION

2 | Pr actica 2: Simulaci on con R


2.1. Otros tipos de datos en R

Como vimos en la Pr actica 1, la forma m as sencilla de denir un vector con datos es usar la funci on c(): > x<-c(3.141592, 2.718281, 1.618034) > x [1] 3.141592 2.718281 1.618034 La forma de acceder a los elementos del vector era la siguiente: > x[2] [1] 2.718281 > x[3] [1] 1.618034 Se pueden asignar nombres a los elementos de un vector mediante la funci on names(): > names(x)<-c("pi", "e", "phi") > x pi e phi 3.141592 2.718281 1.618034 Los valores de y e se pueden obtener en R con 33

34 > pi [1] 3.141593 > exp(1) [1] 2.718282

CON R CAP ITULO 2. PRACTICA 2: SIMULACION

phi es tambi en conocido como el n umero aureo y es igual a > (1+sqrt(5))/2 [1] 1.618034 Ahora, si queremos referirnos at tercer elemento, podemos optar por x[3] o, dado que hemos asignado nombres a los elementos del vector, podemos hacer > x["phi"] phi 1.618034

2.2.
2.2.1.

Variables l ogicas en R
Indices l ogicos

Supongamos ahora que tenemos el vector > x<-1:5 podemos ver qu e elementos son iguales a 4 utilizando el operador ==: > x==4 [1] FALSE FALSE FALSE TRUE FALSE

La instrucci on anterior devuelve un vector de valores l ogicos (o booleanos). FALSE indica que la condici on anterior (es decir, ser igual a cuatro) no se cumple mientras que TRUE indica que s se cumple. De manera an aloga podemos hacer comparaciones con <, >, <= y >=: > x<4

2.2. VARIABLES LOGICAS EN R [1] TRUE TRUE TRUE FALSE FALSE

35

> x>=4 [1] FALSE FALSE FALSE TRUE TRUE

Si aplicamos la funci on sum() al vector l ogico resultante, R fuerza TRUE al valor num erico 1 y FALSE al 0, de manera que tenemos el n umero de elementos del vector x que cumplen la condici on impuesta: > sum(x<4) [1] 3 > sum(x>=4) [1] 2 Generaremos un vector aleatorio de 100 n umeros entre 0 y 1 de manera similar a como hicimos en la Pr actica 1: > set.seed(111) > y<-runif(100) La media de este vector es > mean(y) [1] 0.4895239 Contamos cu antos valores est an por debajo de la media: > sum(y<mean(y)) [1] 51 o cu antos por debajo de la mediana > sum( y<median(y) ) [1] 50 Veamos ahora el efecto que tiene colocar un vector l ogico entre los corchetes de ndice de un vector:

36

CON R CAP ITULO 2. PRACTICA 2: SIMULACION

> z<-1:5 > z[c(TRUE, FALSE, TRUE, FALSE, TRUE)] [1] 1 3 5 donde el vector l ogico c(TRUE, FALSE, TRUE, FALSE, TRUE) es uno de igual longitud que x y donde TRUE y FALSE representan verdadero y falso, respectivamente. El efecto de la instrucci on es el de devolver u nicamente aquellos valores de x cuyo ndice valga TRUE. La instrucci on y[y<0.1] devuelve no cu antos, sino cu ales son los valores que cumplen la condici on de estar por debajo de 0.1: > y[y<0.1] [1] 0.0106578451 0.0936815199 0.0671411434 0.0475478533 0.0585964625 [6] 0.0327716474 0.0965785654 0.0009253006 0.0525656715 0.0117258150 [11] 0.0533223320 0.0951241532 0.0866140136

2.2.2.

Condiciones l ogicas compuestas

Podemos utilizar otros operadores l ogicos dentro de los corchetes, con condiciones compuestas. La instrucci on siguiente, en las que | es el operador l ogico o, devuelve aquellos valores de y que est an por debajo de 0.05 o por encima de 0.95: > y[(y<0.05)|(y>0.95)] [1] 0.0106578451 0.0475478533 0.9665342933 0.9675274789 0.0327716474 [6] 0.9967166614 0.0009253006 0.0117258150 0.9837744189 0.9935344572 [11] 0.9750010339 Veamos que son 11. Si quisi eramos contarlos solamente, pondr amos: > sum( (y<0.05)|(y>0.95) [1] 11 Pero si queremos sumar los valores que cumplen la condici on anterior: > sum(y[ (y<0.05)|(y>0.95) ] ) [1] 5.986717 )

2.2. VARIABLES LOGICAS EN R

37

Podr amos desear los valores de y que est an por encima de 0.45 y por debajo de 0.55: > y[(y>0.45)&(y<0.55)] [1] 0.5149238 0.5322952 0.5098999 0.4657924 0.4693591 0.5482734 0.4563152 [8] 0.4667440 0.4537648 0.5110990 donde & es el operador l ogico y. La funci on which devuelve las posiciones en el vector de aquellos valores que cumplen la condici on: > which( (y>0.45)&(y<0.55) ) [1] 4 8 32 33 34 56 58 62 73 91

Estas son las posiciones que ocupan los 89 valores que obtuvimos anteriormente. En resumen, en este apartado hemos visto cu ales, cu antos y qu e posiciones ocupan los valores que cumplen con determinadas condiciones impuestas. Poner un ejemplo de detecci on de valores an omalos usando el diagrama de cajas

2.2.3.
Sea

Exclusi on de valores

> z<-3:10 la instrucci on z[-1] devuelve un vector igual al original de que se ha eliminado el primer elemento: > z[-1] [1] 4 5 6 7 8 9 10

Si lo que deseamos es eliminar los tres primeros elementos, entonces debemos hacer > z[-(1:3)] [1] 6 7 8 9 10

38 O los tres u ltimos

CON R CAP ITULO 2. PRACTICA 2: SIMULACION

> z[-((length(z)-2):length(z))] [1] 3 4 5 6 7 Si bien puede parecer m as natural, para el mismo objetivo podemos usar > rev(z)[-(1:3)] [1] 7 6 5 4 3 que nos da un vector resultante en orden inverso al original, aspecto que se puede corregir con > rev(rev(z)[-(1:3)]) [1] 3 4 5 6 7 si, por lo que fuera, nos interesa conservar el orden. Con > z[-which(z<6)] [1] 6 7 8 9 10

excluimos aquellos valores menores que 6. Si queremos recortar los dos valores extremos menores y los dos mayores del vector, podemos hacer: > w<-c(5,2,8,5,4,6,9,9) > w [1] 5 2 8 5 4 6 9 9 > rev(sort(w)[-c(1,2)])[-c(1,2)] [1] 8 6 5 5 Expresi on en la que, primero, hemos ordenado el vector original con sort, luego, excluido los valores menores, a continuaci on, hemos invertido el vector resultante con rev y, nalmente, hemos suprimido los dos primeros valores, que son los dos mayores del vector original.

2.3. MATRICES EN R

39

2.3.

Matrices en R

Adem as de los objetos vistos hasta aqu , introducimos ahora este nuevo tipo para crear matrices con el comando matrix(). Podemos crear una matriz a partir de un vector > x<-1:12 > y<-matrix(x,nrow=3) > y [,1] [,2] [,3] [,4] [1,] 1 4 7 10 [2,] 2 5 8 11 [3,] 3 6 9 12 Con matrix, se crea una matriz de tres las (nrow=3) a partir de un vector (x) de longitud 12. N otese que los valores del vector se introducen, por defecto, por columnas. El mismo efecto podr a haberse conseguido con > y<-matrix(x,ncol=4) > y [,1] [,2] [,3] [,4] [1,] 1 4 7 10 [2,] 2 5 8 11 [3,] 3 6 9 12 y se crea la misma matriz con 4 columnas y, por lo tanto, tres las, pues ncol=4 obliga a que as sea. Si queremos que se introduzcan por las, se ha de proceder as : > y<-matrix(x,nrow=3, byrow=TRUE) > y [,1] [,2] [,3] [,4] 1 2 3 4 5 6 7 8 9 10 11 12

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

V ease el efecto de > y<-matrix(x,ncol=3, byrow=TRUE) > y

40

CON R CAP ITULO 2. PRACTICA 2: SIMULACION [,1] [,2] [,3] 1 2 3 4 5 6 7 8 9 10 11 12

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

con la que se ha construido una matriz de tres columnas, con los datos introducidos por las. Podemos, tambi en, convertir directamente el vector original en una matriz redeniendo las dimensiones del vector. V ease > class(x) [1] "integer" que nos muestra que x es un vector de enteros y el efecto que tiene el redimensionar x con la funci on dim > dim(x)<-c(3,4) > x [,1] [,2] [,3] [,4] [1,] 1 4 7 10 [2,] 2 5 8 11 [3,] 3 6 9 12 > class(x) [1] "matrix" que nos muestra que, ahora, x ya no es m as un vector y que ha pasado a ser una matriz. Se pueden asignar nombres a las y columnas con rownames y colnames > rownames(x)<-c("lunes","martes","mi ercoles") > x [,1] [,2] [,3] [,4] 1 4 7 10 2 5 8 11 3 6 9 12

lunes martes mi ercoles

2.3. MATRICES EN R

41

Podemos referirnos a los elementos de una matriz indicando la posici on (de la la y la columna) con corchetes: > x[1,2] lunes 4 o bien por medio de los nombres de la la y columna, si los tiene > colnames(x)<-c("marzo","abril","mayo","junio") > x["lunes","abril"] [1] 4 Podemos referir una columna de esta manera > x[,2] lunes 4 martes mi ercoles 5 6

que nos muestra los elementos de la columna 2 (aunque mostrados en forma de la). O bien la la 3 > x[3,] marzo abril 3 6 mayo junio 9 12

N otese c omo, tanto en un caso como en otro, la ausencia de n umero en la la o columna se puede leer como para todas las las y para todas las columnas, respectivamente. Podemos seleccionar las dos primeras las de la matriz as : > x[1:2,] marzo abril mayo junio lunes 1 4 7 10 martes 2 5 8 11 O bien, excluirlas > x[-(1:2),] marzo abril 3 6 mayo junio 9 12

42

CON R CAP ITULO 2. PRACTICA 2: SIMULACION

2.3.1.

Operaciones con matrices

Calcular la suma de todos los elementos de la matriz > sum(x) [1] 78 o bien, la media de todos los elementos > mean(x) [1] 6.5 o bien, la matriz de varianzas/covarianzas > var(x) marzo abril mayo junio marzo 1 1 1 1 abril 1 1 1 1 mayo 1 1 1 1 junio 1 1 1 1 matriz en la que el elemento x[i,i] representa la varianza de la columna x[,i], y el x[i,j], con i = j , la covarianza de las columnas x[,i] y x[,j]. Calcular la media de valores de la segunda columna > mean(x[,2]) [1] 5 o, bien la varianza de la segunda la > var(x[2,]) [1] 15 Calcular las sumas de los elementos dentro de cada columna > colSums(x) marzo abril 6 15 mayo junio 24 33

2.3. MATRICES EN R o las medias de las mismas > colMeans(x) marzo abril 2 5 mayo junio 8 11

43

o las sumas de los elementos dentro de cada la > rowSums(x) lunes 22 martes mi ercoles 26 30

Con summary, funci on que es sensible al contexto > summary(x) marzo Min. :1.0 1st Qu.:1.5 Median :2.0 Mean :2.0 3rd Qu.:2.5 Max. :3.0 abril Min. :4.0 1st Qu.:4.5 Median :5.0 Mean :5.0 3rd Qu.:5.5 Max. :6.0 mayo Min. :7.0 1st Qu.:7.5 Median :8.0 Mean :8.0 3rd Qu.:8.5 Max. :9.0 junio Min. :10.0 1st Qu.:10.5 Median :11.0 Mean :11.0 3rd Qu.:11.5 Max. :12.0

obtenemos res umenes por columnas. Con apply podemos aplicar funciones como var para calcular las varianzas de los elementos de cada una de las las > apply(x,1,var) lunes 15 martes mi ercoles 15 15

donde el par ametro 1 indica que trabajamos por las y podr amos a nadir una nueva columna a la matriz x con estas varianzas, mediante cbind: > xx<-cbind(x,apply(x,1,var)) > xx lunes martes mi ercoles marzo abril mayo junio 1 4 7 10 15 2 5 8 11 15 3 6 9 12 15

44

CON R CAP ITULO 2. PRACTICA 2: SIMULACION

y podr amos nombrar varianzas a la u ltima columna a nadida: > colnames(xx)<-c(colnames(x),"varianzas") > xx marzo abril mayo junio varianzas lunes 1 4 7 10 15 martes 2 5 8 11 15 mi ercoles 3 6 9 12 15 An alogamente, podemos trabajar por columnas con > apply(x,2,var) marzo abril 1 1 mayo junio 1 1

donde el par ametro 2 indica que trabajamos por columnas y podr amos a nadir esta la a la matriz: > xxx<-rbind(x,apply(x,2,var)) > xxx marzo abril mayo junio lunes 1 4 7 10 martes 2 5 8 11 mi ercoles 3 6 9 12 1 1 1 1 y darle nombre a la nueva la: > rownames(xxx)<-c(rownames(xx),"varfil") > xxx marzo abril mayo junio lunes 1 4 7 10 martes 2 5 8 11 mi ercoles 3 6 9 12 varfil 1 1 1 1 Producto de matrices:

2.3. MATRICES EN R > x<-matrix(1:4,nrow=2) > y<-matrix(2:5,nrow=2) > x [,1] [,2] [1,] 1 3 [2,] 2 4 > y [,1] [,2] 2 4 3 5

45

[1,] [2,]

> x%*%y [,1] [,2] [1,] 11 19 [2,] 16 28 Producto por un escalar: > 2*x [,1] [,2] 2 6 4 8

[1,] [2,]

Suma y resta de matrices: > x+y [,1] [,2] [1,] 3 7 [2,] 5 9 > x-y [,1] [,2] -1 -1 -1 -1

[1,] [2,]

Crear una matriz diagonal:

46

CON R CAP ITULO 2. PRACTICA 2: SIMULACION

> z<-diag(c(2,-1,3)) > z [1,] [2,] [3,] [,1] [,2] [,3] 2 0 0 0 -1 0 0 0 3

Modicar la diagonal: > diag(z)<-c(4,3,3) > z [1,] [2,] [3,] [,1] [,2] [,3] 4 0 0 0 3 0 0 0 3

Hallar un determinante: > det(x) [1] -2 Hallar la inversa de una matriz: > solve(x) [,1] [,2] [1,] -2 1.5 [2,] 1 -0.5 y comprobamos que la matriz por su inversa es la identidad: > x%*%solve(x) [,1] [,2] [1,] 1 0 [2,] 0 1 No confundir el producto %* % con el producto *. Producto Hadamard (es decir, elemento a elemento) de dos matrices: > x*y [1,] [2,] [,1] [,2] 2 12 6 20

es la matriz cuyos elementos son el producto de los elementos hom onimos de las matrices que se multiplican.

2.4. CARGAR DATOS DE OTROS PAQUETES ESTAD ISTICOS

47

2.4.

Cargar datos de otros paquetes estad sticos

El paquete estad stico R permite cargar datos que est en en cheros de otros programas estad sticos utilizando el paquete foreign. A modo de ejemplo, veremos como cargar los datos del chero coches.sav, que est a en el formato del paquete estad stico SPSS. Estos datos contienen informaci on sobre distintos tipos de coches. Para cargar estos datos primero tenemos que cargar el paquete foreign, donde est an las funciones que vamos a necesitar, y luego utilizar la funci on read.spss() para leer estos datos en una nueva variable llamada coches: > library(foreign) > coches<-read.spss("coches.sav", to.data.frame = TRUE) El argumento to.data.frame = TRUE indica que coches sea un objeto de tipo data.frame. Este tipo de datos es similar a una matriz con la diferencia de que cada columna representa una variable y puede tener tipos de datos distintos. Una vez cargados los datos podemos utilizar la funci on names() para obtener los nombres de las variables (por columnas) de este banco de datos: > names(coches) [1] "consumo" "motor" [8] "cilindr" "cv" "peso" "acel" "a~ no" "origen"

Si adem as queremos obtener estad sticos descriptivos, podemos echar mano de la funci on summary(): > summary(coches) consumo Min. : 5.00 1st Qu.: 8.00 Median :10.00 Mean :11.23 3rd Qu.:13.00 Max. :26.00 NA's :8 acel motor Min. : 66 1st Qu.:1708 Median :2434 Mean :3180 3rd Qu.:4806 Max. :7456 a~ no cv Min. : 46.00 1st Qu.: 75.75 Median : 95.00 Mean :104.83 3rd Qu.:129.25 Max. :230.00 NA's :6 origen peso Min. : 244.0 1st Qu.: 741.2 Median : 936.5 Mean : 989.5 3rd Qu.:1203.8 Max. :1713.0 cilindr

48 Min. : 8.00 1st Qu.:13.62 Median :15.50 Mean :15.50 3rd Qu.:17.07 Max. :24.80

CON R CAP ITULO 2. PRACTICA 2: SIMULACION Min. : 0.00 1st Qu.:73.00 Median :76.00 Mean :75.75 3rd Qu.:79.00 Max. :82.00 EE.UU.:253 Europa: 73 Jap on : 79 NA's : 1 3 cilindros: 4 4 cilindros:207 5 cilindros: 3 6 cilindros: 84 8 cilindros:107 NA's : 1

NAs indica el n umero de valores ausentes (que en R se representan con NA) que hay en esa variable. Un valor es ausente cuando se desconoce su valor real, bien porque no se ha medido o porque se midi o pero se ha perdido durante la toma de datos.

2.4.1.

Selecci on de valores en un data.frame

A la hora de seleccionar elementos de un data.frame podemos usar la misma notaci on que para las matrices. En primer lugar, podemos usar el comando dim() para obtener el n umero de las (observaciones) y columnas (variables) del data.frame: > dim(coches) [1] 406 8

As , vemos como este banco de datos consta de 8 variables que se midieron a 406 coches. Para seleccionar los diez primeros valores de la segunda columna (consumo) podemos escribir: > coches[1:10,2] [1] 5031 5735 5211 4982 4949 7030 7440 7210 7456 6391 Tambi en podemos usar el nombre de la columna: > coches[1:10, "consumo"] [1] 13 16 13 15 14 16 17 17 17 16 Por u ltimo, podemos utilizar el s mbolo $ para acceder a las columnas de la siguiente manera: > coches$consumo[1:10] [1] 13 16 13 15 14 16 17 17 17 16

2.4. CARGAR DATOS DE OTROS PAQUETES ESTAD ISTICOS

49

Estos tres m etodos para acceder a los valores del data.frame son equivalentes. Adem as, podemos utilizar las funciones vistas en la pr actica anterior para resumir los valores de las variables que tenemos. El siguiente ejemplo calcula la media y la desviaci on t pica del consumo utilizando todos los valores: > mean(coches$consumo, na.rm=TRUE) [1] 11.22864 > sd(coches$consumo, na.rm=TRUE) [1] 3.946172 El par ametro na.rm=TRUE indica que R ignore los valores ausentes marcados con NA a la hora de calcular la media. Para obtener un resumen estad stico completo de la variable consumo podemos escribir: > summary(coches$consumo) Min. 1st Qu. 5.00 8.00 Median 10.00 Mean 3rd Qu. 11.23 13.00 Max. 26.00 NA's 8

2.4.2.

Variables de tipo factor

Algunas de las variables que hay en este banco de datos no son num ericas, sino que se reeren a cualidades de los coches estudiados. Por ejemplo, la variable origen nos indica d onde se fabric o el coche. Si pedimos los estad sticos resumen obtenemos: > summary(coches$origen) EE.UU. Europa 253 73 Jap on 79 NA's 1

En lugar de la media y los cuantiles, obtenemos un listado en el que aparece el n umero de coches de cada marca. Estas variables que indican cualidades son variables de tipo factor y permiten segmentar los datos de acuerdo a una serie de grupos. Por ejemplo, si estamos interesados en el consumo medio de los coches cuyo origen es Europa podemos escribir:

50

CON R CAP ITULO 2. PRACTICA 2: SIMULACION

> mean(coches$consumo[coches$origen=="Europa"], na.rm=TRUE) [1] 8.885714 El comando coches$origen=="Europa" devuelve un vector l ogico que indica si un coche en particular fue fabricado en Europa o no. As , el comando coches$consumo[coches$origen=="Europa"] contiene los valores de la variable consumo s olo para los coches producidos en Europa. El n umero de grupos en la variable de tipo factor se puede obtener con el comando levels(): > levels(coches$origen) [1] "EE.UU." "Europa" "Jap on"

2.5.

Simulaciones

La funci on sample es muy u til para efectuar simulaciones > sample(1:10,6) [1] 6 2 8 9 5 1 extrae del vector 1:10, seis elementos al azar sin repetici on > sample(1:10,6,rep=TRUE) [1] 7 3 6 10 2 7

extrae del mismo vector 6 elementos en los que se admite repetici on.

2.5.1.

Dados

Para simular la tirada de un dado podemos utilizar > sample(1:6,1) [1] 6 Para simular la tirada de 4 dados, o de un mismo dado 4 veces, podemos utilizar > sample(1:6,4,rep=TRUE)

2.5. SIMULACIONES [1] 6 6 4 4

51

admitiendo repetici on. Si queremos simular la distribuci on de la suma de los n umeros que salen al tirar 4 dados > t<-sapply(1:10000,function(x){sum(sample(1:6,4,rep=TRUE))}) donde la funci on sapply aplica a un vector de tama no 10000 (el que va de 1 a 10000) una funci on sin nombre, generando a su vez un vector de tama no 10000. La funci on obtiene muestras con repetici on de tama no 4 y, a continuaci on, suma los n umeros de la muestra. Este proceso se repite 10000 veces. Lo mismo se podr a haber conseguido con un ciclo for, pero el procedimiento utilizado es m as r apido. Para garantizar que los resultados son los mismos que los de esta pr actica, nos servimos de set.seed(111). > set.seed(111) > t<-sapply(1:10000,function(x){sum(sample(1:6,4,rep=TRUE))}) y tabulamos los resultados con > table(t) t 4 11 20 230 5 31 21 154 6 82 22 75 7 170 23 49 8 263 24 8 9 417 10 633 11 773 12 13 14 15 976 1086 1121 1131 16 971 17 754 18 598 19 467

y podemos representar los resultados con un diagrama de barras con > barplot(table(t)) tal y como aparece en la Figura 2.1. Se podr a haber procedido similarmente as : > x<-runif(4,0,6) > x [1] 5.02819982 1.82267011 5.95054520 0.05559562 genera 4 n umeros aleatorios uniformemente distribuidos entre 0 y 6. La funci on

52

CON R CAP ITULO 2. PRACTICA 2: SIMULACION

> barplot(table(t))

200

400

600

800

1000

10

12

14

16

18

20

22

24

Figura 2.1: Diagrama de barras de las frecuencias obtenidas del lanzamiento de cuatro dados. > ceiling(x) [1] 6 2 6 1 transforma los valores anteriores en el menor entero no inferior al n umero (digamos que el n umero siempre se redondea por arriba). Combinando las dos instrucciones, se pueden generar n umeros aleatorios entre 1 y 6. > ceiling(runif(4,0,6)) [1] 1 4 6 1 Con la siguiente instrucci on

2.5. SIMULACIONES > t<-sapply(1:10000,function(x){sum(ceiling(runif(4,0,6)))}) podr amos conseguir lo mismo que anteriormente con

53

> t<-sapply(1:10000,function(x){sum(sample(1:6,4,rep=TRUE))}) Si lo que se quiere es simular el n umero de veces que sale, digamos, un seis, en, por ejemplo, 10 tiradas, como el n umero de seises sigue una distribuci on binomial de n=10 y p=1/6, podemos utilizar la funci on de R rbinom para generar n umeros aleatorios seg un esta distribuci on y realizar la simulaci on m as c omodamente. Con la siguiente expresi on se generan 12 n umeros aleatorios en las condiciones antedichas > xx<-rbinom(12,10,1/6) > xx [1] 4 2 3 3 1 2 1 0 2 1 1 3 que se interpreta as : en la primera tirada de 10 dados salieron 4 seises; en la segunda, 2; en la tercera, 3; etc. Podemos generar 10000 n umeros aleatorios con > set.seed(111) > t <- rbinom(10000, 10, 1/6) que tabulamos con > table(t) t 0 1 2 3 1634 3209 2898 1572 y representamos con > barplot(table(t)) seg un se puede ver en la Figura 2.2. N otese que obtenemos un diagrama similar al anteriormente obtenido en la Figura 2.1. 4 537 5 127 6 20 7 3

54

CON R CAP ITULO 2. PRACTICA 2: SIMULACION

500

1000

1500

2000

2500

3000

Figura 2.2: Diagrama de barras de los exitos obtenidos al simular de una Binomial.

3 | Pr actica 3: Simulaci on con R (II)


3.1. Simulaciones

La funci on sample() es muy u til para efectuar simulaciones. Por ejemplo, > sample(1:10,6) [1] 9 3 8 1 7 10

extrae del vector 1:10 seis elementos al azar sin repetici on. Por otro lado, el c odigo > sample(1:10,6,rep=TRUE) [1] 10 2 6 6 1 3

extrae del mismo vector 6 elementos en los que se admite repetici on.

3.1.1.

Dados

Para simular la tirada de un dado podemos utilizar > sample(1:6,1) [1] 5 Para simular la tirada de 4 dados, o de un mismo dado 4 veces, podemos utilizar > sample(1:6,4,rep=TRUE) [1] 1 4 5 1 55

56

CON R (II) CAP ITULO 3. PRACTICA 3: SIMULACION

admitiendo repetici on. Si queremos simular la distribuci on de la suma de los n umeros que salen al tirar 4 dados podemos usar la siguiente l nea de c odigo: > t<-sapply(1:10000,function(x){sum(sample(1:6,4,rep=TRUE))}) donde la funci on sapply() aplica a un vector de tama no 10000 una funci on sin nombre, generando a su vez un vector de tama no 10000. La funci on obtiene muestras con repetici on de tama no 4 y, a continuaci on, suma los n umeros de la muestra. Este proceso se repite 10000 veces. Lo mismo se podr a haber conseguido con un ciclo for, pero el procedimiento utilizado es m as r apido. Para garantizar que los resultados son los mismos que los de esta pr actica, nos servimos de set.seed(111): > set.seed(111) > t<-sapply(1:10000,function(x){sum(sample(1:6,4,rep=TRUE))}) Los resultados los podemos resumir en la una tabla de esta manera: > table(t) t 4 11 16 971 5 31 17 754 6 82 18 598 7 170 19 467 8 263 20 230 9 417 21 154 10 633 22 75 11 773 23 49 12 13 14 15 976 1086 1121 1131 24 8

y podemos representar los resultados con un diagrama de barras como el que se ve en la Figura 3.1 con > barplot(table(t)) Se podr a haber procedido similarmente as : > x<-runif(4,0,6) > x [1] 5.02819982 1.82267011 5.95054520 0.05559562 para generar 4 n umeros aleatorios uniformemente distribuidos entre 0 y 6. Luego, la funci on > ceiling(x)

3.1. SIMULACIONES

57

200

400

600

800

1000

10

12

14

16

18

20

22

24

Figura 3.1: Diagrama de barras con los resultados de la suma de la tirada de cuatro dados de seis caras.

[1] 6 2 6 1 transforma los valores anteriores en el menor entero no inferior al n umero (digamos que el n umero siempre se redondea por arriba). Combinando las dos instrucciones se pueden generar n umeros aleatorios entre 1 y 6: > ceiling(runif(4,0,6)) [1] 1 4 6 1 Con la instrucci on > t<-sapply(1:10000,function(x){sum(ceiling(runif(4,0,6)))}) podr amos conseguir lo mismo que anteriormente con

58

CON R (II) CAP ITULO 3. PRACTICA 3: SIMULACION

> t<-sapply(1:10000,function(x){sum(sample(1:6,4,rep=TRUE))}) Si lo que se quiere es simular el n umero de veces que sale, digamos, un seis, en, por ejemplo, 10 tiradas, como el n umero de seises sigue una distribuci on binomial de n=10 y p=1/6, podemos utilizar la funci on de R rbinom() para generar n umeros aleatorios seg un esta distribuci on y realizar la simulaci on m as c omodamente. Con la siguiente expresi on se generan 12 n umeros aleatorios en las condiciones antedichas: > tirada<-rbinom(12,10,1/6) > tirada [1] 4 2 3 3 1 2 1 0 2 1 1 3 que se interpreta as : en la primera tirada de 10 dados salieron 4 seises; en la segunda, 2; en la tercera, 3; etc. Si generamos 10000 n umeros aleatorios con

> set.seed(111) # para que en todos los ordenadores obtengamos los mismos re > t<-rbinom(10000,10,1/6) que tabulamos con > table(t) t 0 1 2 3 1634 3209 2898 1572 y representamos con > barplot(table(t)) obtenemos un diagrama del todo an alogo al anteriormente obtenido, como puede verse en la Figura 3.2. 4 537 5 127 6 20 7 3

3.1. SIMULACIONES

59

500

1000

1500

2000

2500

3000

Figura 3.2: Diagrama de barras con el n umero de veces que aparece un seis al tirar 10 dados.

3.1.2.

Urnas

Tenemos una urna con 3 bolas blancas y 7 negras. Queremos simular la extracci on de una bola. El n umero 1 representa blanca y 0, negra. Podemos hacerlo con: > bola<-sample(c(1,0),1,prob=c(3,5)) > bola [1] 0 En este caso, habr a salido negra. Si queremos simular 8 extracciones con reposici on podr aimos escribir: > bolas<-sample(c(1,0),8,rep=T,prob=c(3,5)) > bolas

60

CON R (II) CAP ITULO 3. PRACTICA 3: SIMULACION

[1] 0 1 0 1 0 0 0 1 En este caso, habr amos obtenido 3 bolas blancas en las 8 extracciones. Si lo que nos interesa es s olo el n umero de bolas blancas, como este sigue una distribuci on binomial con n=8 y p=3/8 podr amos escribir: > rbinom(1,8,3/8) [1] 3 Podemos simular 10000 extracciones de 8 bolas con reposici on as : > set.seed(111) > t<-rbinom(10000,8,3/8) y presentarlos en una tabla: > table(t) t 0 1 2 3 4 232 1168 2288 2797 2174 5 984 6 299 7 54 8 4

Tambi en podr amos hacer un diagrama de barras con los resultados usando > barplot(table(t)) tal y como se ve en la Figura 3.3. Los valores exactos de las probabilidades los da la funci on > dbinom(0:8,8,3/8) [1] 0.0232830644 0.1117587090 0.2346932888 0.2816319466 [5] 0.2112239599 0.1013875008 0.0304162502 0.0052142143 [9] 0.0003910661 donde 0:8 es el vector de 9 valores cuya probabilidad se calcula. Comp arense estas probabilidades con los valores aproximados en diezmil esimas obtenidos con table(t) anteriormente.

3.1. SIMULACIONES

61

500

1000

1500

2000

2500

Figura 3.3: Diagrama de barras con el n umero de bolas blancas extra das.

3.1.3.

Barajas

Si estamos interesados en los oros que salen en una extracci on de 12 cartas con reposici on, se trata de una distribuci on binomial con n=12 y p=10/40, ya que tenemos 10 cartas de oros de un total de 40 cartas en la baraja. Si repetimos el experimento 10000 veces obtenemos: > t<-rbinom(10000,12,.25) > table(t) t 0 1 2 3 4 5 307 1313 2287 2578 1907 1041 6 420 7 123 8 20 9 4

Si estuvi esemos interesados en las guras que salen en las mismas 12 extracciones con reposici on, se tratar a de una distribuci on binomial con n=12 y p=16/40.

62

CON R (II) CAP ITULO 3. PRACTICA 3: SIMULACION

3.1.4.

Cola de espera para el autob us

Si suponemos que el n umero de personas en la cola de espera del autob us sigue una distribuci on de Poisson de media 15 personas, la funci on > set.seed(111) > t<-rpois(10000,15) genera 10000 repeticiones de este experimento, que tabulamos con > table(t) t 2 1 15 998 27 16 4 11 16 933 28 10 5 19 17 864 29 2 6 63 18 696 30 1 7 98 19 536 31 4 8 217 20 459 9 344 21 317 10 489 22 210 11 661 23 135 12 805 24 87 13 14 938 1005 25 26 54 27

y representamos con > barplot(table(t)) El resultado aparece en la Figura 3.4. Los valores exactos de las probabilidades los da la funci on > dpois(0:31,15) [1] [5] [9] [13] [17] [21] [25] [29] 3.059023e-07 6.452627e-04 1.944430e-02 8.285923e-02 9.603362e-02 4.181031e-02 8.299794e-03 8.550612e-04 4.588535e-06 1.935788e-03 3.240717e-02 9.560681e-02 8.473555e-02 2.986450e-02 4.979876e-03 4.422730e-04 3.441401e-05 4.839470e-03 4.861075e-02 1.024359e-01 7.061296e-02 2.036216e-02 2.873006e-03 2.211365e-04 1.720701e-04 1.037029e-02 6.628739e-02 1.024359e-01 5.574707e-02 1.327967e-02 1.596114e-03 1.070015e-04

con que obtenemos las probabilidades de los valores de 0 a 31, para una media de 15.

3.2. FUNCIONES DE DENSIDAD Y PROBABILIDAD

63

0 2

200

400

600

800

1000

9 11

14

17

20

23

26

29

Figura 3.4: Diagrama de barras con el n umero de personas en la cola de espera del autob us.

3.2.
3.2.1.

Funciones de densidad y probabilidad


Variables aleatorias discretas

Hasta aqu se han mencionado las funciones: rbinom(), rpois() y otras en las que la r inicial se ha sustituido por d, relativas a la distribuci on binomial y de Poisson, respectivamente. Todas ellas, desde el punto de vista del lenguaje R, responden al mismo patr on. Lo vemos con la binomial. Para esta, disponemos de 4 funciones, que empiezan por las letras: d, p, q, y r. > dbinom(5,10,.3) [1] 0.1029193 devuelve la probabilidad P (X = 5), es decir, que una variable aleatoria X con distribuci on binomial (n=10 y p=0.3) tome el valor 5.

64

CON R (II) CAP ITULO 3. PRACTICA 3: SIMULACION

> pbinom(5,10,.3) [1] 0.952651 devuelve P (X <= 5), con n=10 y p=0.3. > pbinom(5,10,.3,lower.tail=FALSE) [1] 0.04734899 devuelve P (X > 5), con n=10 y p=0.3. > qbinom(0.952651,10,.3) [1] 5 devuelve el cuantil 5, correspondiente a una probabilidad acumulada de 0.952651. Es decir, que se cumple la relaci on P (X <= 5) = 0,952651. > qbinom(0.04734899,10,.3, lower.tail=FALSE) [1] 5 muestra el valor 5, que deja por encima de s a 0.04734899 del total. O lo que es lo mismo, P (X > 5) = 0,04734899. > rbinom(5,10,.3) [1] 2 4 5 2 1 genera 5 n umeros aleatorios para una distribuci on binomial con n=10 y p=0.3. Las restantes distribuciones rigen de modo an alogo. Para saber qu e par ametros han de introducirse y en qu e orden, se puede consultar la informaci on disponible en la ayuda. Por ejemplo ?dpois nos da la informaci on correspondiente a las funciones disponibles para la distribuci on de Poisson.

3.2. FUNCIONES DE DENSIDAD Y PROBABILIDAD

65

3.2.2.

Variables aleatorias continuas

Ya hemos visto runif() de la familia de la distribuci on uniforme. El c odigo > dunif(5,0,6) [1] 0.1666667 devuelve el valor de la funci on de densidad en el 5 de la distribuci on uniforme entre 0 y 6. De manera similar, > punif(3,0,6) [1] 0.5 devuelve P (X <= 3) en una uniforme entre 0 y 6 > punif(4,0,6,lower.tail=FALSE) [1] 0.3333333 devuelve P (X > 4) en una uniforme entre 0 y 6. > qunif(0.3,0,6) [1] 1.8 devuelve el cuantil correspondiente a 0.3. > qunif(0.6,0,6,lower.tail=FALSE) [1] 2.4 devuelve el valor que deja por encima de s a 0.6 del total. Es decir, P (X 2,4) = 0,6. Por otro lado, > runif(1,0,6) [1] 4.384237 devuelve un n umero aleatorio para la distribuci on uniforme entre 0 y 6 Para las otras dos familias de funciones que nos interesan, la normal y la exponencial, v ease la informaci on correspondiente en la ayuda. Por ejemplo con ?dnorm o ?dexp podemos obtener informaci on sobres c omo calcular sus respectivas funciones de densidad. En la distribuci on exponencial, ha de tenerse en cuenta que el par ametro rate coincide con la ordenada en el origen de la funci on de densidad y es igual al inverso de la media. Para saber de qu e distribuciones dispone R podemos escribir > help.search("distribution")

66

CON R (II) CAP ITULO 3. PRACTICA 3: SIMULACION

3.2.3.

Simulaci on de una distribuci on normal

El c odigo de R > set.seed(111) > t<-rnorm(100,3,2) genera 100 valores aleatorios que siguen una distribuci on normal de media 3 y desviaci on t pica 2 > hist(t,freq=FALSE) representa el histograma, donde frec=FALSE obliga a representar densidades. > curve(dnorm(x,3,2),-4,10,add=TRUE) representa la curva normal de media 3 y desviaci on t pica 2, para comparar. El par ametro add=T tiene el efecto de superponer la curva al histograma. Si no se pone, se borrar a este. El resultado nal puede verse en la Figura 3.5.

3.2.4.

Suma de variables aleatorias normales

Veamos el efecto que tiene sumar dos distribuciones normales, una de media 3 y desviaci on t pica 2, y otra de media 5 y desviaci on t pica 3. Sabemos que la distribuci on normal es reproductiva respecto de la media y la varianza, es decir, que la distribuci on resultante de sumar dos distribuciones normales es tambi en normal, con media la suma de medias y varianza la suma de varianzas de las distribuciones sumadas. Con > set.seed(111) > t<-sapply(1:10000,function(x){rnorm(1,3,2)+rnorm(1,5,3)}) generamos 10000 n umeros aleatorios para la suma. Con media > mean(t) [1] 7.998157 de manera que se cumple 7,998157 ocurra con las varianzas ya que > var(t) [1] 13.02742 3 + 5 (suma de medias). Algo similar

3.2. FUNCIONES DE DENSIDAD Y PROBABILIDAD

67

Histogram of t

Density

0.00 4

0.05

0.10

0.15

0.20

2 t

10

Figura 3.5: Histograma de datos simulados de una Normal junto con su funci on de densidad de probabilidad.

13,02742 22 + 32 (suma de varianzas). Vemos qu e bien se aproxima lo obtenido a lo esperado. Con > hist(t,freq=FALSE) > curve(dnorm(x,8,sqrt(13)),-5,20,add=TRUE) constatamos gr acamente la normalidad de la suma, como puede verse en la Figura 3.6.

3.2.5.

Constataci on de la falta de memoriade la distribuci on exponencial

Tenemos una distribuci on exponencial de media 5. Determinamos la probabilidad P (X > 4) con

68

CON R (II) CAP ITULO 3. PRACTICA 3: SIMULACION

Histogram of t

Density

0.00

0.02

0.04

0.06

0.08

0.10

5 t

10

15

20

Figura 3.6: Histograma de la suma de dos variables normales junto con la funci on de densidad correspondiente.

> pexp(4,.2,lower.tail=FALSE) [1] 0.449329 y P (X > 3) con > pexp(3,.2,lower.tail=FALSE) [1] 0.5488116 Finalmente P (X > 4 + 3|X > 4) es > pexp(4+3,.2,lower.tail=FALSE)/ pexp(4,.2,lower.tail=FALSE) [1] 0.5488116 que, como vemos, coincide con P (X > 3) sin condiciones.

4 | Pr actica 4: T Central L mite. Intervalos de conanza


4.1. Comportamiento de la suma de variables aleatorias normales iguales

La media de n variables aleatorias normales de igual media y desviaci on t pica, es otra variable aleatoria normal de igual media y con desviaci on t pica la de la poblaci on dividida por la ra z cuadrada del tama no de la muestra (error t pico de la media).

4.1.1.

Media de variables aleatorias Normales

Veamos el caso para n = 4, con media de la poblaci on de = 3 y desviaci on t pica de la poblaci on = 2. Obtenemos una muestra de 10000 medias de cuatro distribuciones normales: > x<-sapply(1:10000,function(x){mean(rnorm(4,3,2))}) Representamos el histograma, con los intervalos de la f ormula de Scott y a nadimos la curva normal original en azul y la curva normal de las medias en rojo y dos l neas que representan la desviaci on t pica: > > > > > hist(x,freq=F,breaks="Scott") curve(dnorm(x,3,2),col="blue",add=TRUE) curve(dnorm(x,3,1),col="red",add=TRUE) lines(c(5,3),dnorm(c(5,5),3,2),col="blue") lines(c(4,3),dnorm(c(4,4),3,1),col="red") 69

70CAP ITULO 4. PRACTICA 4: T CENTRAL L IMITE. INTERVALOS DE CONFIANZA

Histogram of x
0.4 Density 0.0 0.1 0.2 0.3

2 x

Figura 4.1: Histograma de la media de observaciones de una distribuci on normal, junto con la distribuci on de la poblaci on (en azul) y la de la media (en rojo).

En la Figura 4.1 puede observarse como la distribuci on de las medias sigue una normal de media igual a la de la poblaci on, pero m as concentrada en torno a dicha media, con una desviaci on t pica (error t pico) reducida a la mitad de la poblaci on original.

4.1.2.

Media de variables aleatorias Uniformes

No todas las distribuciones tienen un comportamiento como el de la normal. Por ejemplo, la media de dos distribuciones uniformes en [0,1] es una distribuci on triangular en el mismo intervalo. Generamos 10000 medias: > set.seed(1) > x<-sapply(1:10000,function(x){mean(runif(2))})

4.2. TEOREMA CENTRAL DEL L IMITE

71

y representamos el histograma, a nadiendo la funci on de densidad de la uniforme (en azul) y la triangular resultante (en rojo). > hist(x,freq=FALSE,breaks="Scott") > curve(dunif(x),col="blue",add=TRUE) > lines(c(0,.5,1),c(0,2,0), col="red") El resultado puede verse en la Figura 4.2.
Histogram of x
2.0 Density 0.0 0.0 0.5 1.0 1.5

0.2

0.4 x

0.6

0.8

1.0

Figura 4.2: Histograma de la media de observaciones de una distribuci on uniforme, junto con la distribuci on uniforme de la poblaci on (en azul) y la distribuci on triangular de la media de observaciones (en rojo).

4.2.

Teorema central del l mite

La media de n variables aleatorias iid (independientes e igualmente distribuidas) se distribuye seg un una normal cuando n tien-

72CAP ITULO 4. PRACTICA 4: T CENTRAL L IMITE. INTERVALOS DE CONFIANZA de a innito.

4.2.1.

Media de variables aleatorias Uniformes

Veremos la distribuci on de la media de 30 distribuciones uniformes en [0,1]. Tomamos 10000 medias: > set.seed(1) > x<-sapply(1:10000,function(x){mean(runif(30))}) y representamos el histograma, la distribuci on uniforme original (en azul) y la curva normal te orica correspondiente al teorema central del l mite (en rojo): > hist(x,freq=F,breaks="Scott") > curve(dunif(x),col="blue",add=T) > curve(dnorm(x,.5,1/(sqrt(12*30))),col="red",add=T) En la Figura 4.3 se puede apreciar que la media de las 30 distribuciones normales sigue aproximadamente una distribuci on normal de igual media que la uniforme y con error t pico igual a la desviaci on t pica de la uniforme dividida por la ra z cuadrada de 30.

4.2.2.

Media de variables aleatorias de una Exponencial

Veremos una situaci on m as extrema, la de una distribuci on exponencial de media 1. Hallaremos las medias de muestras de tama no 40: > > > > x<-sapply(1:10000,function(x){mean(rexp(40))}) hist(x,freq=F,breaks="Scott") curve(dexp(x),col="blue",add=T) curve(dnorm(x,1,1/sqrt(40)),col="red",add=T)

La Figura 4.4 muestra en azul la distribuci on original y, en rojo, la normal que garantiza el T.C.L. Se aprecia que la aproximaci on con tama nos de muestra de 40 es peor que la de la uniforme con 30. El que esta sea sim etrica ayuda a una convergencia m as r apida.

4.3. LEY DE LOS GRANDES NUMEROS

73

Histogram of x
8 Density 0 0.3 2 4 6

0.4

0.5 x

0.6

0.7

Figura 4.3: Histograma con la distribuci on de la media de 30 variables uniformes en [0,1], junto con la distribuci on uniforme de la poblaci on (en azul) y la te orica del promedio de 30 valores (en rojo).

4.3.

Ley de los grandes n umeros

La media de n variables aleatorias iid (independientes e igualmente distribuidas) tiende (en probabilidad) a la media de la variable aleatoria, cuando n tiende a innito.

4.3.1.

Distribuci on exponencial de media 1

Ve amoslo para una exponencial de media 1. Construimos un vector con 10000 valores aleatorios de la exponencial: > set.seed(1) > x<-rexp(10000)

74CAP ITULO 4. PRACTICA 4: T CENTRAL L IMITE. INTERVALOS DE CONFIANZA

Histogram of x

Density

0.0

0.5

1.0

1.5

2.0

2.5

0.6

0.8

1.0 x

1.2

1.4

1.6

Figura 4.4: Histograma de simulaciones de la media de 40 variables aleatorias exponenciales, junto con la distribuci on exponencial de la poblaci on (en azul) y la te orica del promedio (en rojo). El vector > y<-cumsum(x)/(1:10000) contiene, para la posici on n, la suma de los n primeros elementos de x, dividida por n. Esto es, la media de los n primeros n umeros aleatorios. Con la siguiente instrucci on > plot(y, type="l") > abline(h=1,col="red") obtenemos la gr aca de las medias para los sucesivos valores de n. Con la l nea roja marcamos el l mite al que tiende la media, que es la media de la variable exponencial original, 1.

4.3. LEY DE LOS GRANDES NUMEROS

75

Se puede apreciar la fuerte oscilaci on de la media al principio y c omo tiende a estabilizarse para valores altos de n.

y 0.6 0 0.7 0.8

0.9

1.0

1.1

1.2

2000

4000 Index

6000

8000

10000

Figura 4.5: Promedio progresivo de variables exponenciales. Puede verse como para promedios de muchas observaciones el valor tiende a la media de la distribuci on de la poblaci on, que es 1.

4.3.2.

Distribuci on de la proporci on de exitos

La proporci on de exitos al repetir un experimento aleatorio que tiene probabilidad p de exito, tiende (en probabilidad) a la probabilidad de exito p, cuando n tiende a innito. Simulemos las proporciones de seises que salen al tirar un dado. Generamos 10000 tiradas. El resultado es 1 con probabilidad 1/6, y 0 con probabilidad 5/6: > set.seed(1) > x<-rbinom(10000,1,1/6)

76CAP ITULO 4. PRACTICA 4: T CENTRAL L IMITE. INTERVALOS DE CONFIANZA La expresi on siguiente > y<-cumsum(x)/(1:10000) da, para la posici on n, el cociente entre el n umero de seises acumulados hasta n, dividido por n, esto es: la proporci on de seises hasta la tirada n. El siguiente c odigo nos da la gr aca deseada y en rojo a nade la probabilidad, 1/6, a la que se tiende. > plot(y, type="l") > abline(h=1/6,col="red") En la Figura 4.6 se puede apreciar la fuerte oscilaci on al principio y c omo se estabiliza al aumentar n.

0.0 0

0.1

0.2

0.3

0.4

2000

4000 Index

6000

8000

10000

Figura 4.6: Proporci on de seises obtenidos en funci on del n umero de tiradas que se promedian. Se aprecia como cuantas m as tiradas se promedian m as nos acercamos a la probabilidad real de sacar un seis de 1/6.

DE UNA DISTRIBUCION DE STUDENT A PARTIR DE NORMALES77 4.4. OBTENCION

4.4.

Obtenci on de una distribuci on de Student a partir de Normales

Construiremos una distribuci on de Student de tres grados de libertad (para otros grados de libertad es an alogo). Tal distribuci on viene dada por t3 = x
y 2 +z 2 +w2 3

donde x, y , z , w son N(0,1) e independientes. > > > > set.seed(1) t<-sapply(1:10000, function(x){rnorm(1)/sqrt(mean(rnorm(3)^2))}) hist(t,breaks="Scott",freq=F,xlim=c(-10,10)) curve(dt(x,3),-10,10, col="red",add=T)

En La Figura 4.7 puede verse el resultado. En rojo se ha representado la distribuci on de Student de 3 grados de libertad, obtenida directamente con dt().

4.5.
4.5.1.

Intervalos de conanza
Intervalos de conanza con una Normal

Cuando construimos un intervalo de conanza al 95 %, signica que de cada 100 intervalos que construimos con el m etodo elegido, en promedio, 95 contendr an la media de la poblaci on. Ve amoslo para la media de una distribuci on uniforme en [0,1], a partir de muestras de tama no 30, con un nivel de conanza del 95 %. Construiremos primero la funci on intervalo que genera los intervalos de conanza: > intervalo <- function(n, alpha) { + x <- runif(n) + m <- mean(x) + et <- sd(x)/sqrt(n) + c(m - qnorm(1 - alpha/2) * et, m + qnorm(1 + alpha/2) * et) + }

78CAP ITULO 4. PRACTICA 4: T CENTRAL L IMITE. INTERVALOS DE CONFIANZA

Histogram of t

Density

0.0 10

0.1

0.2

0.3

0 t

10

Figura 4.7: Simulaci on de una distribuci on t de Student con 3 grados de libertad (en rojo) a partir de variables aleatorias N(0,1). Esta funci on genera n observaciones de una uniforme en [0, 1] y calcula un intervalo de conanza usando los cuantiles de distribuci on normal correspondiente. Para comprobar si un valor est a dentro de un intervalo podemos utilizar la siguiente funci on: > dentro<-function(mu, intconf) + { + ( (intconf[1]<mu) & (mu<intconf[2]) ) + } El siguiente ejemplo genera un intervalo de conanza y comprueba si la media real (05) est a dentro o no: > set.seed(123)

4.5. INTERVALOS DE CONFIANZA > ic<-intervalo(30, .05) > ic

79

[1] 0.4681394 0.6766609

> dentro(0.5, ic)

[1] TRUE

A continuaci on construimos la base del gr aco, donde la media la hemos representado con una l nea roja, y despu es, con un ciclo for, mostramos 100 intervalos de conanza para la media a alturas crecientes. Los intervalos vienen representados por l neas azules horizontales.

> > > + +

plot(c(0.5,0.5),c(1,100),type="l",col="red") set.seed(111) for (i in 1:100){ lines(intervalo(30,.05),c(i,i),col="blue") }

El resultado puede verse en la Figura 4.8. Puede verse como, en este caso, fallan 8 de 100. Repetimos el experimento cambiando la semilla para obtener otros intervalos distintos:

> plot(c(0.5,0.5),c(1,100),type="l",col="red") > set.seed(123) > for (i in 1:100){lines(intervalo(30,.05),c(i,i),col="blue")}

80CAP ITULO 4. PRACTICA 4: T CENTRAL L IMITE. INTERVALOS DE CONFIANZA

c(1, 100)

0 0.3

20

40

60

80

100

0.4

0.5 c(0.5, 0.5)

0.6

0.7

Figura 4.8: Intervalos de conanza para la media generados a partir de 100 muestras (en azul) junto al valor real de la media (en rojo).

c(1, 100)

0 0.3

20

40

60

80

100

0.4

0.5 c(0.5, 0.5)

0.6

0.7

y, en este caso,

4.5. INTERVALOS DE CONFIANZA s olo fallan 5 de 100. Repetimos de nuevo

81

> plot(c(0.5,0.5),c(1,100),type="l",col="red") > set.seed(321013) > for (i in 1:100){lines(intervalo(30,.05),c(i,i),col="blue")} EL resultado puede verse en la Figura 4.9 y ahora fallan 3 de 100.

c(1, 100)

0 0.3

20

40

60

80

100

0.4

0.5 c(0.5, 0.5)

0.6

0.7

Figura 4.9: Segunda r eplica de la simulaci on de intervalos de conanza para la media generados a partir de 100 muestras (en azul) junto al valor real de la media (en rojo). En promedio, hasta ahora, llevamos alrededor de 5 fallos por 100. A largo plazo acertaremos, en promedio, con intervalos que contengan la media en el 95 % de los casos.

82CAP ITULO 4. PRACTICA 4: T CENTRAL L IMITE. INTERVALOS DE CONFIANZA

4.5.2.

Intervalos con la t de Student

Veamos los intervalos de conanza en el caso en que interviene en el mismo la distribuci on de Student. Queremos ver el comportamiento de los intervalos de conanza para la media de cinco normales est andar. Construimos la funci on intervalot: > + + + + + intervalot<-function(n,alpha){ x<-rnorm(n) m<-mean(x) et<-sd(x)/sqrt(n) c(m-qt(1-alpha/2,df=n-1)*et,m+qt(1-alpha/2,df=n-1)*et) }

que devuelve los intervalos de conanza construidos con la t de Student. Por ejemplo: > set.seed(123) > ict<-intervalot(5,.05) > ict [1] -0.8134464 1.2005869

> dentro(.05, ict) [1] TRUE Dibujamos el soporte del gr aco que representa la media por medio de una linea roja. Con el ciclo for generamos 100 intervalos. > plot(c(0,0),c(0,100),type="l",col="red",xlim=c(-1.5,1.5)) > set.seed(111) > for (i in 1:100){lines(intervalot(5,.05),c(i,i),col="blue")} Los intervalos generados pueden verse en la Figura 4.10. En este caso, es de notar que los intervalos son de mayor amplitud que los que obtuvimos en el caso de la media de las 30 uniformes por dos motivos: uno, porque las muestras son peque nas (tama no 5) y otro, porque, para el mismo nivel de signicaci on, el valor de la t de Student da valores mayores que la normal est andar. Vemos que fallan 4 intervalos. Si repetimos con

4.5. INTERVALOS DE CONFIANZA

83

c(0, 100)

0 1.5

20

40

60

80

100

1.0

0.5

0.0 c(0, 0)

0.5

1.0

1.5

Figura 4.10: Intervalos de conanza para la media generados a partir de 100 muestras (en azul) junto al valor real de la media (en rojo). Hemos utilizado la f ormula con la t de Student para calcular los intervalos en este caso. > plot(c(0,0),c(0,100),type="l",col="red",xlim=c(-1.5,1.5)) > set.seed(321) > for (i in 1:100){lines(intervalot(5,.05),c(i,i),col="blue")} En la Figura 4.11 puede verse como ahora obtenemos 1 fallo. A largo plazo acertaremos en el 95 % de los casos con un intervalo que contenga la media poblacional.

84CAP ITULO 4. PRACTICA 4: T CENTRAL L IMITE. INTERVALOS DE CONFIANZA

c(0, 100)

0 1.5

20

40

60

80

100

1.0

0.5

0.0 c(0, 0)

0.5

1.0

1.5

Figura 4.11: Segunda r eplica de los intervalos de conanza para la media generados a partir de 100 muestras (en azul) junto al valor real de la media (en rojo). Hemos utilizado la f ormula con la t de Student para calcular los intervalos en este caso.

5 | Pr actica 5: An alisis de datos con RCommander. Constrastes de hip otesis.


5.1. Introducci on a RCommander

Hasta ahora hemos utilizado R introduciendo comandos en la consola. Aunque es fundamental conocer los comandos b asicos de R para aprovechar todo el potencial de este programa y trabajar con soltura, tambi en existen una serie de interfaces gr acas para trabajar con R. Estas interfaces permiten realizar an alisis estad sticos de datos sencillos mediante un entorno de ventanas, que puede ser m as intuitivo. En esta pr actica vamos a ver uno de estos entornos llamado RCommander. Un listado completo de interfaces gr acas para R se puede encontrar en http://www.sciviews.org/_rgui/. Adem as, la p agina web de RCommander (http://socserv.mcmaster.ca/jfox/Misc/Rcmdr/) proporciona m as informaci on sobre esta interfaz. Tambi en existe un art culo (en ingl es) publicado en el Journal of Statistical Software, disponible en http://www. jstatsoft.org/v14/i09/paper, que proporciona una descripci on m as detallada. B asicamente, RCommander proporciona un entorno de ventanas que permite al usuario realizar muchas de las tareas que se pueden hacer con el lenguaje de comandos, pero de una manera un poco m as amigable. As , mediante las ventanas de RCommander podemos cargar datos e introducir los par ametros necesarios para realizar una determinada operaci on. Con toda esta informaci on, RCommander ejecuta los comandos necesarios para realizar esa operaci on. El uso de interfaces gr acas de usuario presenta el inconveniente de que no son pr acticas a la hora de analizar muchos bancos de datos y permiten poca exibilidad en el an alisis. 85

86CAP ITULO 5. PRACTICA 5: ANALISIS DE DATOS CON RCOMMANDER. CONSTRASTES

5.1.1.

Instalaci on

RCommander es lo que se conoce como un paquete de R, que es la forma en la que se pueden a nadir nuevas rutinas de an alisis de datos y ejemplos al programa. Por defecto, R s olo viene con una serie de paquetes m nimos para realizar los an alisis estad sticos m as conocidos, pero en la web del programa existe un repositorio con cientos de paquetes adicionales desarrollados por los usuarios. Para instalar nuevos paquetes tenemos que utilizar el comando install.packages(). As , para instalar RCommander (y otros paquetes necesarios para que funcione correctamente) debemos escribir > install.packages("Rcmdr", dependencies = TRUE) R nos mostrar a una serie de servidores desde los que descargar el paquete. Podemos seleccionar el que est a en Espa na, que se encuentra dentro de Red Iris (la red de las universidades espa nolas), y que dar a una velocidad de descarga razonable. Por defecto los paquetes adicionales no aparecen cargados en R. Para ello utilizaremos el comando library(), que toma como argumento una cadena de texto con el nombre del paquete. Por tanto, para cargar RCommander debemos escribir: > library("Rcmdr") La primera vez que carguemos el paquete es posible que nos advierta de que faltan otros paquetes y nos preguntar a si los queremos instalar. Debemos contestar que s , y esperar a que se descarguen los paquetes. Esto puede tardar unos minutos, dependiendo de la conexi on a Internet que tengamos.

5.2.

Un paseo por RCommander

Cuando se hayan descargado e instalado los paquetes que RCommander necesita, veremos la ventana que aparece en la Figura 5.1. Usando estos men us realizaremos los an alisis estad sticos pertinentes. Las partes de la ventana de RCommander son: Men us Listado de men us para cargar datos, realizar an alisis estad sticos, etc.

5.2. UN PASEO POR RCOMMANDER

87

Figura 5.1: Ventana principal de RCommander. Banco de datos activo Se encuentra justo debajo de los men us y nos muestra el nombre del banco de datos activo. Este es el data.frame que RCommander usar a por defecto a la hora de realizar los an alisis. Ventana de instrucciones Muestra los comandos que hemos ido ejecutando. Ventana de resultados Muestra las salidas de texto de los comandos que hemos ejecutado. Mensajes Muestra determinados mensajes relacionados con la ejecuci on de comandos, como errores, etc.

5.2.1.

Men us

En la parte superior de la ventana podemos ver una serie de men us. Su utilidad es la siguiente: Fichero Permite cargar y guardar cheros de datos y comandos de R.

88CAP ITULO 5. PRACTICA 5: ANALISIS DE DATOS CON RCOMMANDER. CONSTRASTES Editar Permite realizar operaciones sobre el texto de la Ventana de comandos, tales como buscar, reemplazar, etc. Datos Permite cargar bancos de datos disponibles en los paquetes de R que tengamos instalados, as como importar datos en diversos formatos. Esto incluso formatos de otros programas estad sticos como SPSS, SAS, etc. Estad sticos Bajo este men u encontramos todos los an alisis estad sticos que se pueden realizar con RCommander. Gr acas Permite realizar distintos tipos de gr acas con los datos. Modelos Aqu tememos las herramientas para hacer an alisis de datos utilizando distintos modelos estad sticos. Distribuciones Funciones para trabajar con distribuciones estad sticas y calcular valores de inter es, como cuantiles, probabilidades, etc. Herramientas Permite cargar otros paquetes de R y cambiar algunos par ametros del entorno RCommander, como el tama no de letra. Ayuda Ayuda de RCommander.

5.2.2.

Ventana de instrucciones

Esta ventana muestra los comandos que hemos ejecutado o que vamos a ejecutar. Cada vez que hacemos una operaci on con RCommander el comando equivalente aparece en esta ventana. Por tanto, resulta muy u til para ver los comandos necesarios para un an alisis y los podemos modicar a nuestro antojo. Por ejmplo, para analizar otro banco de datos similar. Tambi en podemos a nadir nuevos comandos escribiendo directamente en la ventana. Para ejecutarlos debemos seleccionar el texto y pulsar el bot on Ejecutar (o pulsando Control+R).

5.3. ANALISIS EXPLORATORIO DE DATOS CON RCOMMANDER 89

5.2.3.

Ventana de resultados

Aqu es donde aparecen los resultados obtenidos con los comandos ejecutados. En esta ventana no podemos editar los comandos pero s que podemos copiar los resultados para pegarlos en otro documento. Tanto en esta ventana como en la de instrucciones podemos hacer operaciones con el texto, tales como copiar, buscar palabras, etc. pinchando encima de la ventana con el bot on derecho.

5.2.4.

Mensajes

En general, aqu es donde aparecer an los mensajes de error que obtengamos cuando ejecutemos los comandos de R.

5.3.
5.3.1.

An alisis exploratorio de datos con RCommander


C omo cargar datos

Todas las operaciones para cargar datos con RCommander est an bajo el men u Datos. Aunque existen numerosas opciones nosotros s olo vamos a ver unas pocas. Nuevo conjunto de datos Para crear un nuevo banco de datos introduciendo nosotros mismos los valores podemos ejecutar Datos->Nuevo conjunto de datos. Se nos preguntar a el nombre del banco de datos que queremos crear (es decir, el nombre de la variable en R). EJERCICIO: Crea un conjunto de datos que se llame numeros. En la primera columna pon los valores del 1 al 8 y en la sengunda los valores del 11 and 18. Datos de un paquete de R Si lo que queremos es seleccionar uno de los bancos de datos de ejemplo que aparecen en el lo podemos hacer seleccionando Datos->Conjunto de datos en paquetes. Hay dos opciones:

90CAP ITULO 5. PRACTICA 5: ANALISIS DE DATOS CON RCOMMANDER. CONSTRASTES Lista de conjuntos de datos en paquetes Muestra una lista (con una peque na descripci on) de los bancos de datos disponibles en los paquetes de R cargados actualmente. Si un banco de datos est a instalado pero no cargado (con el comando library()), no veremos la lista de datos que contiene. Leer conjunto de datos desde paquete adjunto... Permite cargar un banco de datos de un paquete concreto. EJERCICIO: Muestra la lista de todos los bancos de datos disponibles. Inspecciona la lista para ver el tipo de datos que hay disponibles. EJERCICIO: Carga el banco de datos cars del paquete datasets. La ventana es la que aparece Figura 5.2. Este banco de datos contiene resultados de un experimento en el que se midi o el espacio necesario de parada de un coche en funci on de la velocidad a la que circula.

Figura 5.2: C omo cargar el banco de datos cars. Despu es de cargar el banco de datos cars, este aparecer a como el banco de datos seleccionado en la parte de debajo del men u. Este es el banco de datos que usaremos por defecto cuando hagamos otro tipo de operaciones con los datos. Si en alg un momento tenemos que seleccionar otro banco de datos, podemos hacerlo pinchando sobre el nombre del banco de datos activo.

5.3. ANALISIS EXPLORATORIO DE DATOS CON RCOMMANDER 91

5.3.2.

Estad sticos resumen

Para obtener un resumen de los datos podemos seleccionar los men us menes. Para obtener un resumen del banco debajo de Estad sticos->Resu de datos activo seleccionaremos Conjunto de datos activo. menes nume ricos, que nos calcula la Otra opci on es seleccionar Resu media, la desviaci on t pica y algunos cuantiles de los datos. La Figura 5.3 muestra la ventana que aparece cuando seleccionamos esta opci on. Tenemos que seleccionar las variables del banco de datos de las que queremos calcular los estad sticos resumen. Tambi en podemos calcular otros cuantiles a nadi endolos a la lista de valores que aparecen en la ventana.

Figura 5.3: C alculo de estad sticos resumen de la variable speed del banco de datos cars. EJERCICIO Calcula los estad sticos resumen para las dos variables que aparecen en el banco de datos cars. Hazlo de manera que tambi en se calculen los cuantiles del 0.10, 0.30, 0.80 y 0.90.

5.3.3.

Gr acas

ficas podemos encontrar varios submen Debajo del men u Gra us para la creaci on de gr acos con los datos. En particular, podemos destacar: Histograma Nos permite hacer histogramas de las variables del banco de datos activo. Como opciones podemos elegir la escala de las barras, ya sea frecuencias o densidades (probabilidades). La Figura 5.4 muestra la ventana que aparece al seleccionar este men u.

92CAP ITULO 5. PRACTICA 5: ANALISIS DE DATOS CON RCOMMANDER. CONSTRASTES

Figura 5.4: Men u para dibujar un histograma con las variables del banco de datos cars. fico de tallo y hojas Gra Sirve para hacer un diagrama de tallo y hojas de los datos. La ventana que aparece es la de la Figura 5.5.

Figura 5.5: Men u para dibujar un diagrama de tallo y hojas con las variables del banco de datos cars. Diagrama de cajas Hace un diagrama de cajas de la variable seleccionada. Una opci on nos permite poder identicar los valores at picos con el rat on sobre la gr aca del diagrama de cajas. La ventana para hacer un diagrama de cajas es la que se puede ver en la Figura 5.6. EJERCICIO Haz los tres gr acos mencionados anteriormente para las dos variables del banco de datos cars.

5.4. DISTRIBUCIONES ESTAD ISTICAS

93

Figura 5.6: Men u para dibujar un diagrama de cajas con las variables del banco de datos cars.

5.4.

Distribuciones estad sticas

El men u Distribuciones contiene funciones para realizar c alculos con numerosas distribuciones estad sticas (muchas de las cuales no veremos en clase). Las funciones est a agrupadas en Distribuciones discretas y Distribuciones cont nuas, y debajo de estos men us encontraremos, para cada distribuci on, las siguientes funciones: Cuantiles Calcula los cuantiles de esa distribuci on. Probabilidades Calcula probabilidades de la distribuci on en cuesti on. fica de la distribucio n Gra Dibuja una gr aca de la funci on de densidad probabilidad o de la funci on de distribuci on. n Muestra de la distribucio Simula datos de la distribuci on. El resultado es una matriz en el que las las muestran las repeticiones de la simulaci on y las columnas las observaciones de cada repetici on. La Figura 5.7 muestra ejemplos de las ventanas que aparecen cuando seleccionamos alguna de estas 4 opciones para la distribuci on Normal. Para otras distribuciones las ventanas son similares, aunque cambian los par ametros requeridos para especicar la distribuci on.

94CAP ITULO 5. PRACTICA 5: ANALISIS DE DATOS CON RCOMMANDER. CONSTRASTES EJERCICIO Dibuja las probabilidades de una Binomial de n = 20 y =0.15. Para esta misma distribuci on, calcula los cuantiles del 0.25, 0.5 y 0.75. EJERCICIO Dibuja las probabilidades de una Exponencial de media 10. Para esta misma distribuci on, calcula los cuantiles del 0.45, 0.5 y 0.55. EJERCICIO Dibuja las funciones de densidad de probabilidad y de distribuci on de una distribuci on Normal de media 20 y desviaci on t pica 3. Haz 5 simulaciones de 20 observaciones cada una de esta distribuci on. EJERCICIO Dibuja la funci on de densidad de probabilidad de una distribuci on t de Student de 15 grados de libertad. Calcula los cuantiles del 0,05 y 0,95 de esta distribuci on.

Figura 5.7: Ventanas del men u sobre la distribuci on Normal.

5.5. CONSTRASTES DE HIPOTESIS

95

5.5.

Constrastes de hip otesis

RCommander tambi en contiene men us para hacer contrastes de hip otesis. Para los ejercicios de esta parte de la pr actica necesitamos instalar el paquete PASWR, que contiene numerosos bancos de datos del libro Probability and Statistics with R (de Mar a Dolores Ugarte, Ana Militino y Alan Arhnholt). Para instalar y cargar dicho paquete ejecutaremos el siguiente comando: > install.packages("PASWR") > library("PASWR") De esta manera podremos ver desde RCommander todos los bancos de datos disponibles en el paquete PASWR. EJERCICIO: Muestra la lista de todos los bancos de datos disponibles. Inspecciona la lista para ver el tipo de datos que hay disponibles busca los bancos de datos que pertencen al paquete PASWR. Se ve an estos datos cuando se inspeccion o la lista de bancos de datos disponibles al inicio de la pr actica?

5.5.1.

Distribuci on t de Student

En primer lugar vamos a ver c omo hacer un contraste de hip otesis para 2 un banco de datos cuando la varianza ( ) de la poblaci on no es conocida. En estos casos el estad stico de contraste estaba basado en una distribuci on t de Student con n 1 grados de libertad (n es el n umero de datos). Todos los contrastes de hip otesis para la media (de una o varias poblaciones) se encuentran en el men u Estad sticos->Medias. Para una u nica poblaci on elegiremos Test t para una muestra. La ventana que aparece se muestra en la Figura 5.8. A trav es de dicha ventana podemos seleccionar: La variable sobre la que queremos hacer el contraste El valor de la media bajo la hip otesis nula (0 ) La direcci on de la hip otesis alternativa, para un contraste unilateral o bilateral Nivel de conanza para el c alculo del intervalo de conanza asociado al contraste

96CAP ITULO 5. PRACTICA 5: ANALISIS DE DATOS CON RCOMMANDER. CONSTRASTES

Figura 5.8: Men u para hacer un contraste de hip otesis para la media de una poblaci on utilizando el test de la t de Student. Si lo que queremos es hacer un contraste en el que comparemos las medias de dos poblaciones, podemos seleccionar Test t para muestras independientes o Test t para datos relacionados, seg un sea el caso. EJERCICIO Carga el banco de datos Battery del paquete PASWR que contiene datos de bater as de litio de un fabricante que tiene dos plantas de producci on, A y B. Para obtener estos datos se seleccionaron 50 bater as al azar de la planta A, que se supone que tienen una duraci on media de 180 horas, y se midieron sus tiempos de duraci on (variable facilityA). Tambi en se seleccionaron otras 509 bater as producidas en la planta B, que se supone que tienen una duraci on de 200 horas, y se midi o su tiempo de duraci on (variable facilityB). 1. Haz un an alisis de las dos variables de este banco de datos que incluya: Estad sticos resumen Gr acas resumen de los datos 2. En vista de los datos recogidos, crees que la duraci on media de las pilas producidas en las plantas A y B es realmente la que se dice en el enunciado del problema? Para ello realiza los contrastes de hip otesis oportunos. 3. Plantea y resuelve un contraste de hip otesis para la diferencia de la duraci on media de las dos bater as. Existen indiciones de que hay diferencias?

5.5. CONSTRASTES DE HIPOTESIS

97

5.5.2.

Distribuci on Normal

RCommander no proporciona ninguna opci on para realizar intervalos de conanza y contrastes de hip otesis cuando la distribuci on de los datos es Normal y conocemos el valor de la varianza poblacional. Sin embargo, podemos usar RCommander para calcular los l mites del intervalo y resolver el contraste. Intervalo de conanza La forma general de un intervalo de conanza bilateral es x z/2 , x + z/2 n n Para los intervalos unilaterales tenemos , x + z n o x z , + n Por tanto, para calcular un intervalo de conanza necesitamos: 1. x. Se puede obtener calculando los estad sticos resumen de los datos. 2. z/2 o z Se puede calcular utilizando los cuantiles de la distribuci on Normal. 3. / n Se puede calcular directamente en la consola de R. Contraste de hip otesis El estad stico de contraste es z= x 0 / n

y se puede calcular de manera muy sencilla en la consola de R.

98CAP ITULO 5. PRACTICA 5: ANALISIS DE DATOS CON RCOMMANDER. CONSTRASTES El p-valor se puede calcular a partir de la probabilidad acumulada por z y realizando las correspondientes operaciones. Por ejemplo, el p-valor para un contraste bilateral es p valor = P (Z > z ) + P (Z < z ) = 2(1 P (Z < z )) EJERCICIO Si en el ejercicio anterior suponemos que sabemos que las desviaci on t picas de las baterias de la planta A y B son 2 y 2.75, respectivamente, calcula: 1. Calcula un intervalo de conanza al 95 % para cada uno de los dos tipos de bater as. 2. Resuelve los tres contrastes planteados anteriormente (en los apartados 2 y 3 del ejercicio anterior) suponiendo conocida las desviaciones t picas de los datos. EJERCICIO El banco de datos MilkCarton del paquete PASWR contiene datos de tiempos de secado de dos tipos de contenedores de leche de un gal on (variable Wgallon)y medio gal on (variable Hgallon). Un gal on son aproximadamente 3.78 litros. 1. Calcula estad sticos resumen para cada variable y haz una representaci on gr aca 2. Haz un contraste para ver si el tiempo medio de secado de los dos tipos de contenedores es el mismo EJERCICIO El banco de datos Fertilize contiene las alturas (en pulgadas; 1 pulgada son 2.54 cm) de plantas que fueron fertilizadas de dos formas distintas: cruzada (variable cross) y autofertilizaci on (self). 1. Contrasta si los datos sugieren que la altura media de las plantas autofertilizadas es mayor de 17 pulgadas. Usa = 0,05. 2. Calcula un intervalo unilateral al 95 % de conanza para la altura media de las plantas autofertilizadas. Usa que H1 : > 17.

5.5. CONSTRASTES DE HIPOTESIS 3. Crees que el crecimiento medio de los dos tipos de plantas es el mismo? EJERCICIO La tecnolog a de una cierta planta de fabricaci on de ordenadores permite que las capas de silicio se transformen en chips usando dos t ecnicas distintas. Para decidir qu e t ecnica es mejor se tomaron 28 capas de silicio al azar del almac en, de manera que se probaron cada una de estas t ecnicas en 14 capas de silicio. Los resultados del experimento se ecnuentran en el banco de datos Chips. Produce estad sticos y gr acas que resuman los datos obtenidos en el experimento. Crees que los datos provienen de una distribuci on Normal? Suponiendo que este tama no muestral es lo sucientemente grande, contrasta si el n umero medio de chips producido es de 330 para cada m etodo. Haz un contraste para ver si el n umero medio de chips producido por cada m etodo es el mismo o no.

99

5.5.3.

Contrastes para proporciones

RCommander tambi en permite realizar contrastes sobre proporciones. Para ello, primero necesitamos introducir los datos de manera que est en en una columna del conjunto de datos activo en una variable de tipo factor. Por ejemplo, podemos crear un data.frame en el que guardemos las caras (1) y cruces (0) que salen al lanzar una moneda. Supongamos adem as que la moneda est a trucada y que la probabilidad de que salga cara es de 08. A este nuevo vector de datos lo llamaremos lanzamientos y constar a de 1000 lanzamientos de una moneda: > set.seed(123) > lanzamientos<-factor(rbinom(1000, 1, .8)) Con el comando factor() convertimos el vector de ceros y unos en una variable categ orica con los siguientes niveles: > levels(lanzamientos) [1] "0" "1"

100CAP ITULO 5. PRACTICA 5: ANALISIS DE DATOS CON RCOMMANDER. CONSTRASTE Podemos cambiar los nombres de los niveles de la siguiente manera: > levels(lanzamientos)<-c("cruz", "cara") > levels(lanzamientos) [1] "cruz" "cara" De esta manera asignamos cruz al nivel cuyo valor es 0 y cara al nivel cuyo valor es 1. Esto es importante para que RCommander sepa que esta variable no es num erica sino categ orica. A continuaci on creamos un data.frame con estos resultados: > monedas<-data.frame(l1=lanzamientos) A continuaci on podr amos plantear un contraste de hip otesis para ver si la proporci on real de caras es del 50 % o no. En primer lugar, hemos de seleccionar el bando de datos monedas como activo. A continuaci on, podemos ir al men u Estad sticos->Proporciones->Test de proporciones para una muestra para seleccionar la variable del data.frame sobre la que queremos hacer el contraste. En nuestro caso se trata de la variable l1. La Figura 5.9 muestra las diferentes opciones que tenemos a la hora de plantear el contraste. En concreto, puede verse como el contraste puede ser bilateral o unilateral. Adem as, podemos seleccionar el valor de la proporci on bajo la hip otesis nula (por defecto es 05). Hay que tener en cuenta que el contraste se realiza sobre la proporci on del primer nivel de la variable factor (es este caso, es cruz). Los resultados son:

> prop.test(table(monedas$l1), alternative='two.sided', p=.5, conf.level=.95 1-sample proportions test without continuity correction data: table(monedas$l1), null probability 0.5 X-squared = 364.816, df = 1, p-value < 2.2e-16 alternative hypothesis: true p is not equal to 0.5 95 percent confidence interval: 0.1744776 0.2238338 sample estimates: p 0.198

5.5. CONSTRASTES DE HIPOTESIS

101

Figura 5.9: Ventana para realizar el contraste de proporciones. Como puede verse en este caso, el p valor indica una diferencia signicativa entre la proporci on real de caras y el valor 05. Finalmente, conviene comentar que el comando al que RCommander llama para hacer el contraste de proporciones es prop.test. POdemos utilizar este comando directamente cuando sepamos el n umero de exitos y el total de reeticiones realizadas. En el caso del primer lanzamiento tenemos los siguientes n umeros de caras y cruces: > xtab<-table(monedas$l1) > xtab cruz cara 198 802 Para realizar el mismo contraste de antes sobre la proporci on de caras podemos usar el siguiente comando: > prop.test(198, 1000, p=.5, conf.level=.95) 1-sample proportions test with continuity correction data: 198 out of 1000, null probability 0.5 X-squared = 363.609, df = 1, p-value < 2.2e-16 alternative hypothesis: true p is not equal to 0.5 95 percent confidence interval: 0.1740028 0.2243552 sample estimates:

102CAP ITULO 5. PRACTICA 5: ANALISIS DE DATOS CON RCOMMANDER. CONSTRASTE p 0.198 Por otro lado, si lo que queremos es hacer un contraste sobre la proporci on de cruces escribiremos lo siguiente: > prop.test(802, 1000, p=.5, conf.level=.95) 1-sample proportions test with continuity correction data: 802 out of 1000, null probability 0.5 X-squared = 363.609, df = 1, p-value < 2.2e-16 alternative hypothesis: true p is not equal to 0.5 95 percent confidence interval: 0.7756448 0.8259972 sample estimates: p 0.802 Conviene resaltar que, adem as del contraste al nivel de conanza indicado, la funci on prop.test() tambi en nos da un intervalo de conanza.

6 | Pr actica 6: An alisis de la varianza. Regresi on lineal y correlaci on.


6.1.
6.1.1.

An alisis de la varianza
Introducci on

En la primera parte de esta pr actica vamos a utilizar RCommander de nuevo para realizar un an alisis de la varianza. En esta parte de la pr actica vamos a utilizar el banco de datos Tire del paquete PASWR. En primer lugar, abre RCommander cargando el paquete correspondiente: > library(Rcmdr) EJERCICIO: Carga el paquete PASWR con la instrucci on > library(PASWR) o mediante el men u Herramientas->Cargar paquete(s) de RCommander. Esto har a que los bancos de datos de este paquete est en disponibles para que se puedan cargar desde RCommander. EJERCICIO: Carga el banco de datos Tire del paquete PASWR con RCommander. Para ello tendr as que seleccionar Datos->Conjunto de datos en paquetes->Leer conjunto de datos desde paquete adjunto. Esto har a que el banco de datos Tire sea el banco de datos activo en RCommander. Este banco de datos contiene dos variables: 103

LINEAL Y C 104CAP ITULO 6. PRACTICA 6: ANALISIS DE LA VARIANZA. REGRESION stopDist Distancia (en pies) que necesita un coche t pico para detenerse completamente cuando va a una velocidad de 60 millas por hora. tire Tipo de neum atico, que puede ser A, B, C o D.

6.1.2.

An alisis exploratorio de datos

Antes de proceder con el an alisis de la varianza es conveniente realizar un an alisis exploratorio de datos para ver qu e es lo que tenemos entre manos. Es importante ver qu e valores tienen las variables y de qu e tipo son. EJERCICIO: Obt en estad sticos resumen de las dos variables de los datos. menes. Observas algo Puedes hacerlo en Estad sticos->Resu extra no? Qu e ocurre con los estad sticos resumen de la variable Tire? EJERCICIO: A continuaci on haz un histograma de la variable stopDist. Por qu e crees que la variable Tire no aparece en la lista? Puedes hacer alg un otro gr aco de Tire? Gr aca de las medias Para comparar gr acamente las medias de los disntintos grupos tenemos la opci on Gr aficas->Gr aficas de las medias, que nos representa las medias de cada uno de los grupos junto con un intervalo. La distintas opciones aparecen en la Figura 6.1. En primer lugar, tenemos que denir la variables que nos dene los grupos (variable Factor) y la que contiene los datos medidos en cada grupo (variable Explicada). Adem as de la media de cada grupo, podemos a nadir un intervalo basado en: Errores t picos Desviaciones t picas Intervalos de conanza Sin barras de errores (s olo dibuja las medias)

6.1. ANALISIS DE LA VARIANZA

105

Figura 6.1: RCommander permite realizar un gr aco para comparar las medias de distintos grupos.

EJERCICIO: Realiza 3 gr acas de las medias comparando los distintos intervalos que podemos representar. Si quieres que una nueva gr aca se dibuje en una nueva ventana, ejecuta el comando windows() en la Ventana de instrucciones de RCommander para que aparezca una nueva ventana gr aca en blanco. Qu e diferencias observas entre los distintos intervalos? Cu ales son m as anchos y cu ales m as estrechos? Por qu e crees que es? Crees que hay diferencias entre grupos? Se te ocurre alguna forma sencilla e intuitiva de determinar qu e grupos tienen medias similares? Diagrama de cajas por grupos De manera similar podemos hacer un diagrama de cajas por grupos, con lo que tendremos 4 diagramas de cajas (uno para cada tipo de neum atico). La Figura 6.2 muestra la ventana para realizar el diagrama de cajas y la ventana que aparece cuando pulsamos en Gr afica por grupos para seleccionar la variable que nos dene los grupos. EJERCICIO: Realiza un diagrama de cajas por grupos para los datos con los que estamos trabajando. Qu e similitudes (y diferencias) observas

LINEAL Y C 106CAP ITULO 6. PRACTICA 6: ANALISIS DE LA VARIANZA. REGRESION

Figura 6.2: RCommander permite realizar diagramas de cajas por grupos. con respecto a los gr acas de las medias producidos anteriormente?

6.1.3.

An alisis de la varianza y tabla ANOVA

Para realizar el an alisis de la varianza que hemos visto en clase podemos seleccionar Estad sticos->Medias->ANOVA de un factor. La ventana que aparece es la que vemos en la Figura 6.3 Como puede verse, tenemos que seleccionar la variable que dene los grupos y la variable que contiene las mediciones de cada grupo (variable explicada).

Figura 6.3: Ventana para hacer la ANOVA. Adem as, tenemos la opci on de seleccionar Comparaciones dos a dos de las medias, que nos dar a un gr aco en el que se nos comparan los grupos de dos en dos. EJERCICIO: Realiza un an alisis ANOVA de los datos y las comparaciones de grupos dos a dos. Cu ales son tus conclusiones? EJERCICIO: El banco de datos FCD contiene datos de un experimento en el que se sometieron a una serie de gatos a 4 tipos de dietas. Las variables son Weight (diferencia de peso) y Diet (tipo de dieta). Haz una an alisis similar al que has hecho con los datos de

LINEAL Y CORRELACION 6.2. REGRESION neum aticos y determina si existen diferencias entre las distintas dietas. EJERCICIO: El banco de datos TireWear de un experimento en el que se midi o la p erdida de goma de unos neum aticos despu es de conducir durante 10000 millas. Las variables que se midieron son la p erdida de goma (Wear), el tipo de coche (Block) y tipo de neum aticos (variable Treat). Haz un an alisis similar al que has hecho con los datos de neum aticos y determina si existen diferencias entre los distintos tipos de neum aticos.

107

6.2.

Regresi on lineal y correlaci on

A continuaci on vamos a ver c omo se puede realizar una regresi on lineal con R y RCommander. EJERCICIO: Como en la pr actica anterior, carga el banco de datos cars del paquete datasets. El objetivo de esta parte de la pr actica es estudiar la relaci on entre las dos variables de este banco de datos (spped y dist). speed ser a la variable independiente (x) y dist la variable dependiente (y).

6.2.1.

An alisis exploratorio de datos

El primer paso a la hora de estudiar la relaci on entre las dos variables es hacer un diagrama de puntos de las dos variables. Esto se puede hacer en el ficas->Gra ficaXY. La ventana que aparece se puede ver en la men u Gra Figura 6.4. EJERCICIO: Produce una gr aca de puntos con las dos variables del banco de datos cars en la que speed sea la variable independiente y dist la dependiente. Parece que la relaci on es lineal?

LINEAL Y C 108CAP ITULO 6. PRACTICA 6: ANALISIS DE LA VARIANZA. REGRESION

Figura 6.4: Ventana para dibujar dos variables una frente a otra con RCommander.

Figura 6.5: Ventana para ajustar un modelo de regresi on lineal.

6.2.2.

Ajuste de la recta de regresi on

La manera en la que ajustamos una recta a estos datos con RCommander se n encuentra en el men u Estad sticos->Ajuste de modelos->Regresio lineal. La ventana que aparece se puede ver en la Figura 6.5. EJERCICIO: Ajusta un modelo de regresi on utilizando las mismas variables que en el ejercicio anterior. Qu e elementos reconoces de la salida

LINEAL Y CORRELACION 6.2. REGRESION que produce RCommander?

109

6.2.3.

Transformaci on de variables

Cuando la relaci on entre dos variables no es linear tenemos que transformar los datos para intentar que las nuevas variables s que tengan una relaci on lineal entre ellas. Desde RCommander podemos a nadir nuevas variables al banco de datos con Datos->Modificar datos del conjunto de datos activo. En concreto, con la opci on Calcular una nueva variable podemos a nadir una nueva variable que sea funci on de las variables que ya existen. La ventana que aparece es la que se puede ver en la Figura 6.6.

Figura 6.6: Ventana para tranformar variables.

EJERCICIO: El banco de datos Animals (incluido en el paquete MASS) contiene datos del peso corporal (body) y del cerebro de 28 animales terrestres. Investiga la relaci on entre las dos variables gr acamente. Es sensato hacer una regresi on lineal? En caso de que no lo sea, busca una transformaci on de los datos que permita hacer un ajuste lineal. Utiliza la variable de peso del cuerpo como independiente y la variable brain como dependiente.

También podría gustarte