Introducci¶on al Reio.usc.es/eipc1/BASE/BASEMASTER/FORMULARIOS-PHP/MATERIA… · Ejemplo de uso de...

41
Introducci´on al R Alberto Rodr´ ıguez Casal 16 de febrero de 2009

Transcript of Introducci¶on al Reio.usc.es/eipc1/BASE/BASEMASTER/FORMULARIOS-PHP/MATERIA… · Ejemplo de uso de...

Introduccion al R

Alberto Rodrıguez Casal

16 de febrero de 2009

¿Que es R (I)?

I R. Becker, J. Chambers y A. Wilks desarrollaron el lenguaje Sen los AT&T laboratories

I El lenguaje S tiene dos implementaciones: una comercial,llamada Splus, y otra gratuita, llamada R.

I R fue escrito originalmente por Ross Ihaka y RobertGentleman (R&R) en 1996.

I Actualmente, es desarrollado y mantenido por un equipo deunas 18 personas, el llamado R Development Core Team.

I La pagina principal de R es

http://www.r-project.org/

Alberto Rodrıguez Casal Introduccion al R

¿Que es R (II)?

El entorno R es un conjunto integrado de programas para manejode datos, calculo y graficos e incluye:

I Comandos para manejar y almacenar conjuntos de datos

I Operadores para llevar a cabo calculos con vectores y matrices

I Comandos para llevar a cabo diversos analisis de datos

I Comandos para graficos

I Un lenguaje de programacion relativamente simple

Alberto Rodrıguez Casal Introduccion al R

¿Como descargar e instalar R?

Direccion principal:http://www.r-project.org/

I Entrar en CRAN (a la izquierda en la pantalla)

I Elegir una localizacion conveniente.

I Elegir el enlace correspondiente al sistema operativo que nosinterese y entrar en base

I Bajar y ejecutar en nuestro ordenador el ficheroR-2.8.1-win32.exe

Alberto Rodrıguez Casal Introduccion al R

Formas de obtener ayuda

I Mediante help(solve) se obtiene ayuda sobre la funcion solve

I La funcion example(mean) proporciona ejemplos de como usarla funcion mean

I El comando help.search(’median’) proporciona una lista decomandos relacionados con la mediana

I Para abrir una ventana de ayuda HTML, help.start()

Alberto Rodrıguez Casal Introduccion al R

Caracterıstica generales

I Lenguaje orientado a objetos

I Los nombres de los objetos empiezan por una letra. Rdistingue mayusculas y minusculas

I El operador de asignacion de valores a un objeto es x < −10.

I Escribiendo el nombre del objeto podemos acceder a sucontenido.

I Los comentarios empiezan por #

I Los comandos en una lınea se separan con ;

I Si un comando no esta completo el caracter de continuaciones: +

I Para ver los objetos que estan en memoria basta teclear ls()

I Se guardan en memoria y se eliminan con rm() o remove()

Alberto Rodrıguez Casal Introduccion al R

Objetos basicos

I Tipos:I logical (TRUE, FALSE, T, F)I integerI numeric (real, single, double)I complexI character

I Los objetos se definen al ser asignados:x < − 5; class(x); mode(x); str(x)x < − 5+5i; class(x); mode(x); str(x)z < − 5/x; class(x); mode(x); str(z)x < − T; class(x)x < − ’hola’; class(x)

I A partir de estos se definen nuevas estructuras: vectores,matrices, data.frames, etc.

Alberto Rodrıguez Casal Introduccion al R

Operadores objetos

I Conversion entre objetos: as.integer(x), as.character(x),as.tipo(x)

I Comprobacion de objetos: is.tipo(x)

I Operadores aritmeticos:+,−, ∗, /, ˆ, % %, %/%,?Arith

I Funciones aritmeticas: log, log10, log2, log(x, base), exp, sin,cos, tan, sqrt, choose, factorial, ceiling, floor, signif, round,etc.

I Operadores logicos: &, |, xor,!, ?Logic

I Operadores logicos:==, <=, >=, >, <,=, ! =

I Especiales: Especiales: NA, NaN, Inf, -Inf, etc.

I Comandos especiales: is.na, is.nan, is.finite,is.infinite, etc

Alberto Rodrıguez Casal Introduccion al R

Vectores

I R es vectorial en sus operaciones y eficiente cuando se usavectorialmente

I La memoria se reserva al asignar y no es necesaria asignacionprevia.

I Para asignar especıficamente n posiciones de memoria:x< −tipo(n).

Creacion basica de vectores:x < −c(1, 4, 5, 7) # combinar en un vectorx < −1 : 6 # asigna a x los 6 primeros numerosnaturalesx < −6 : 1 # lo mismo pero en orden decrecientex < −seq(1, 9, by = 2) # va de 1 a 9 con paso 2x < −seq(1, 9, length = 6) # va de 1 a 9 en 6 pasosx < −rep(3, 10) # repite 3, 10 vecesx < −rep(c(3, 5), c(10, 7)), repite 3, 10 veces y 5, 7 veces.

Alberto Rodrıguez Casal Introduccion al R

Funciones con vectores

I Funciones basicas:I length(x): Longitud del vectorI union(x,y): Union sin repetirI intersect(x,y): Comunes sin repetirI setdiff(x,y): Cuales de x no estan en y.

I Funciones numericas basicas:I sum(x): Suma de todo el vectorI prod(x): ProductoI max(x): MaximoI min(x): MınimoI cumsum(x): Vector con suma acumuladaI cumprod(x): Vector con producto acumulado

I Funciones estadıstica basicas: mean(x), var(x), sd(x),median(x), range(x), quantile(x), IQR(x),cor(x,y), cov(x,y)

Alberto Rodrıguez Casal Introduccion al R

Vectores.Indexado

I x [i ] hace referencia al elemento i-esimo

I x [1 : 3] subvector de x desde el 1 al 3

I x [x > 0] subvector de x con las componentes mayores quecero

I x [c(T , F )] ¿que devuelve?

I x [−1] subvector de x sin el primer elemento

I x [−c(1, 3)] subvector de x sin el primer y tercer elementos

Alberto Rodrıguez Casal Introduccion al R

Una primera practica (I)Se realiza un estudio para valorar el efecto del alcohol sobre losniveles de colesterol en suero. Una variable de interes es lacantidad, X , (en onzas) de alcohol consumido por semana ysujeto. Los datos de los sujetos que participan en el estudio vienendados por la siguiente tabla:

X Frecuencia absoluta

(0, 0.5] 201(0.5, 3.5] 372(3.5, 9.5] 260(9.5, 19.5] 80

I Crea un vector, ni, con las frecuencias absolutas.

I Calcula el tamano de la muestra. Guarda el valor en lavariable n.

I Crea un vector L con los extremos de los intervalos:0,0.5,3.5,9.5,19.5.

Alberto Rodrıguez Casal Introduccion al R

Una primera practica (II)I Calcula las frecuencias relativas y guardalas en el vector fi.I Calcula las frecuencias absolutas y relativas acumuladas y

guardalas en los vectores Ni y Fi, respectivamente.I Un poco mas difıcil: Calcula las longitudes de cada uno de los

intervalos. Guardalas en el vector li.I Calcula la marca de clase de cada intervalo (el punto medio).

Guarda el resultado en el vector x.medI Calcula el valor de hi en cada intervalo. Guarda el resultado

en el vector hiI Aproxima la media de la variable XI Crea un conjunto de datos que tenga n1 datos iguales a la

marca de clase del primer intervalo, n2 datos iguales a lamarca de clase del segundo intervalo, etc. Guarda el resultadoen el vector x.

I Para dibujar el histograma de los datos basta teclear:hist(x,breaks=L,freq=F)

Alberto Rodrıguez Casal Introduccion al R

Matrices(I)

I Una matriz se construye a partir de un vector definiendo susdimensiones:x < −1 : 20dim(x)< −c(10,2) # matriz de 10 filas y 2columnas

I X< −matrix(1:20,nrow=10,ncol=2)I X< −matrix(1:20,nrow=10,ncol=2, byrow=T) # llena

por filas

I X[1,] primera fila de X

I X[,1] primera columna de Z

I X[,c(1,3)] columnas 1 y 3

I x[c(F,T),] ¿que hace esto?

I cbind(X,Y) Crea una matriz uniendo columnas

I rbind(X,Y) Crea una matriz uniendo filas

Alberto Rodrıguez Casal Introduccion al R

Matrices(II)

I nrow(X) numero de filas de X

I ncol(X) numero de columnas de X

I rownames(X) y colnames(X) permite poner nombres a lasfilas y columnas de X

I t(X) traspuesta de X

I X ∗ Y producto elemento a elemento

I X % ∗ %Y producto matricial

I outer(x,y) producto exterior

I solve(X), calcula la inversa de X

Alberto Rodrıguez Casal Introduccion al R

Manejo de vectores y matrices

Ejecuta los siguientes comandos e intenta deducir cual es la logicaque el programa ha aplicado

I X< −matrix(1:20,nrow=10,ncol=2)I X+5

I X+c(5,6)

I X+c(5,6,7)

I Compara X-X[,1] con X-X[1,]

Alberto Rodrıguez Casal Introduccion al R

Operaciones con vectores y matrices

I La funcion apply permite evitar el uso de bucles y otrasestructuras, trabajando directamente con matrices

apply(X,t,com)

I En la funcion anterior, X es una matriz, t puede valer 1 o 2 ycom es un nombre de comando que actua sobre vectores.

I Si t = 1 se genera un nuevo vector como resultado de aplicarcom a cada fila de X. Si t = 2, se genera un nuevo vectorcomo resultado de aplicar com a cada columna de X

Alberto Rodrıguez Casal Introduccion al R

Ejemplo de uso de la funcion apply

I Define la matriz

X =

(1 2 34 5 6

)

I Compara los resultados de los tres comandos siguientes:

min(X), apply(X,1,min) y apply(X,2,min)sort(x), apply(X,1,sort) y apply(X,2,sort)

Alberto Rodrıguez Casal Introduccion al R

Ejemplo: tablas contingencia

I Crea una matriz, nij con los datos:

Hombre Mujeres

Ambidextros 20 8Diestros 934 1070Zurdos 113 92

I Dale nombre a las filas y a las columnas de nij

I Calcula las frecuencias marginales de la tabla. Guardalas enlos vectores ni. y n.j

I Calcula el tamano de la muestra y guardalo en la variable n

I Calcula las frecuencias esperadas

I Calcula el estadıstico χ2 de la esta tabla

χ2 =∑

i ,j

(nij − Eij)2

Eij

Alberto Rodrıguez Casal Introduccion al R

Leyendo datos en R (I)

Hasta ahora hemos visto formas muy basicas de introducir datosen R:

I Meterlos manualmente con la funcion c

I Si los datos siguen algun patron utilizar funciones como rep,seq para generarlos.

Sin embargo esta no es la forma mas habitual de introducir datosen R. Frecuentemente querremos que R lea datos de otrosprogramas como Excel o cualquier otro. Lo mas comodo en esoscasos es guardar (desde el propio programa) el fichero en formato.csv y leerlo desde R.

Alberto Rodrıguez Casal Introduccion al R

Leyendo datos en R (II)

Veamos como se hace el procedimiento anterior si, por ejemplo,queremos recuperar ficheros .csv creados por Excel. Para ello esconveniente usar el comando

I read.csv2(file=‘‘nombre.csv’’) .

Por defecto R busca los ficheros en la carpeta de trabajo. Portanto, el fichero que intentamos cargar deberıa estar en esacarpeta. La carpeta de trabajo se puede cambiar enArchivo/Cambiar dir...

Otras alternativas a read.csv2 son read.table o read.csv. Lasprincipales diferencias entre estos comandos estan enque caracteres se usan para separar los diferentes campos delfichero de datos y como se representa la coma decimal de losnumeros. Por ejemplo, la funcion read.csv presupone que loscampos estan separados por comas lo cual crea problemas conExcel ya que este programa usa la coma para separar los decimales.

Alberto Rodrıguez Casal Introduccion al R

Data frames (I)

Cuando utilizamos alguno de los comandos anteriores paraimportar datos a R lo que obtenemos es un objeto denominadodata frame. En un data frame las filas representan losdenominados casos y cada columna una variable. Es una estructurabasica cuando analizamos datos. Podemos tambien construirnosotros un data frame en R sin necesidad de importarlo de otrofichero. Por ejemplo:

I x< −1:20

I y< −21:40

I df< −data.frame(v1=x,v2=y)

I df

Alberto Rodrıguez Casal Introduccion al R

Data frames (II)I Los comandos edit() y fix() permiten editar un data frame.I summary() proporciona un resumen del mismo.I R tiene definidos varios data frame que se pueden meter en

memoria (si se sabe su nombre) con el comando data(). Porejemplo data(iris). carga en memoria el data.frame iris.

I Para conocer el nombre de las variables de un data framebasta utilizar el comando names(). Por ejemplo,names(iris)

I Para acceder al contenido de una variable se utiliza el caracter$ junto con el nombre del data frame y de la variable. Porejemplo: iris$Sepal.Width.

I Para evitar teclear siempre el caracter $ para acceder alcontenido de una variable es posible utilizar el comandoattach() para que las variables sean directamente accesiblespor su nombre. Por ejemplo attach(iris) permite acceder ala variable Sepal.Width directamente. Para volver a lasituacion inicial basta utilizar detach(). Por ejemplodetach(iris).Alberto Rodrıguez Casal Introduccion al R

Graficos

I Las funciones graficas se dividen en dos tiposI De primer nivel: Crean las ventanas graficas y establecen sus

coordenadas.I De segundo nivel: Anaden elementos graficos en ventanas

graficas ya abiertas y con coordenadas establecidas

I La funcion split.screen() permite dividir la ventana envarios graficos.

I Las graficas se pueden guardar en varios formatos desde elmenu o desde la lınea de comandos.

Alberto Rodrıguez Casal Introduccion al R

Plot()

I plot() es la funcion generica de dibujo de primer nivel. En suversion mas simple dibuja un grafico de puntos.

I Principales opciones:I type: cambia como se dibujan los puntos. Sus posibles valores

pueden ser:“l”=lınea, “p”=puntos (la opcion por defecto), “b”= puntos ylınea, “n”=no dibuja, “h”=lıneas verticales,“s”=escalera.

I col cambia el color y lwd cambia el tamano de lınea.

I lty cambia el tipo de lınea y xlim y ylim establecen laescala.

I pch permite definir el tipo de sımbolo.

I Los tıtulos se anaden con main, xlab e ylab.

Alberto Rodrıguez Casal Introduccion al R

Ejemplo del uso del plot en la regresion

Ejercicio

I Carga los datos del primer dıa de clases. Si no los tienes, estanguardados en un fichero .csv en el campus virtual. Para leerlosrecuerda que puedes usar el comando read.csv

I Dibuja el grafico de dispersion del peso frente a la altura.

I Calcula la ecuacion de la recta de regresion. Escribe la rectade la forma a + bX .

I Una vez que tengas calculado a y b la funcion abline(a,b)permite dibujar la recta con ecuacion a + bX . Dibuja la rectaregresion para estos datos en color rojo (opcion col=‘‘red’’)

Alberto Rodrıguez Casal Introduccion al R

Ejemplo del uso del plot para dibujar funciones

Ejemplo

Vamos a dibujar seno en el intervalo [0, 2π].

I Define el vector de las x . Toma seiscientos puntos separados ala misma distancia en el intervalo [0, 2π].

I Evalua en el vector x la funcion que queremos dibujar, en estecaso, el seno. Guarda el resultado en el vector y .

I Dibuja los puntos (x , y) y juntalos con lıneas. El tıtulo deldibujo sera “Grafico de la funcion seno”.

I Dibuja ahora la funcion solo entre [0, π]. Cambia la escala deleje y a −1 y 1.

I Vuelve a dibujar la funcion seno entre [0, 2π]. La funcionpoints es una funcion de segundo nivel que permite anadirnuevos puntos a un grafico que ya esta abierto. Utiliza estafuncion para dibujar en el mismo grafico la funcion coseno:Para no confundirlas dibuja el coseno en rojo.

Alberto Rodrıguez Casal Introduccion al R

Anadir elementos graficos (I)I Ya hemos usado la funcion points() que permite anadir

puntos a un graficoI abline() permite anadir una recta de la forma a + bx a un

graficoI La funcion lines() permite anadir lıneas a un grafico.

Intenta hacer el siguiente grafico:

−1.0 −0.5 0.0 0.5 1.0

−1.

0−

0.5

0.0

0.5

1.0

0

0

plot(0,0,t="n",xlim=c(-1,1),ylim=c(-1,1))

x=c(-0.5,-0.5,0.5,0.5)

y=c(0.5,-0.75,-0.75,0.5)

lines(x,y)

¿Te atreves con la puerta?

Alberto Rodrıguez Casal Introduccion al R

Anadir elementos graficos (II)

I legend() permite anadir una leyenda al grafico.

I locator() nos dice las coordenadas de un punto.

I text() escribe texto

I arrows(), poligon() dibujan flechas y polıgonos.

I title() permite anadir un tıtulo a un grafico.

Alberto Rodrıguez Casal Introduccion al R

Ejemplo de anadir elementos graficos

Prueba a teclear lo siguiente:plot(0,0,t="n",xlim=c(-1,1),ylim=c(-1,1))x=c(-0.5,-0.5,0.5,0.5)y=c(0.5,-0.75,-0.75,0.5)lines(x,y)x=c(-0.75,0,0.75)y=c(0.25,1,0.25)lines(x,y)x=c(-0.4,-0.4,-0.1,-0.1)y=c(0.3,0,0,0.3)polygon(x,y,col="gray")¿Como dibujarıas la otra ventana?

Alberto Rodrıguez Casal Introduccion al R

Funciones (I)

I Las funciones en R se definen con el formato:nombre < − function(arg1=val,arg2=val2,· · · ){expr}

I No se definen el tipo de los argumentos

I No se hace ningun chequeo sobre los parametros hasta que seusan.

I Los argumentos de entrada pueden ponerse en cualquier ordensi se especifica el nombre. Otra opcion es introducirlos en elorden en el que fueron definidos sin nombre.

I Se pueden asignar valores por defecto a los parametros.Cualquier argumento que no tenga valor es obligatorio.

Alberto Rodrıguez Casal Introduccion al R

Funciones (II)

I Si una variable no esta definida dentro de la funcion, se buscaen el ambito de la funcion que la llamo y ası sucesivamentehasta que se llega al entorno global.

I La funcion devuelve el ultimo objeto evaluado dentro de lafuncion o lo que indiquemos en la sentencia return. Puededevolverse cualquier objeto de R.

I Cualquier cambio dentro de la funcion se perdera sino sedevuelve al salir.

I La expresion · · · sirve para pasar argumentos a otrasfunciones internas de forma libre. Se usa para permitirintroducir argumentos a los que no se les conoce el nombre enla definicion de la funcion.

Alberto Rodrıguez Casal Introduccion al R

Funciones: Ejemplo (I)Dado un conjunto de pares de datos (x1, y1), . . . , (xn, yn) se definela covarianza entre X e Y como

sXY =1

n

n∑

i=1

(xi − x)(yi − y) =1

n

n∑

i=1

xiyi − xy .

Una funcion en R que calcule la covarianza se podrıa definir comosxy< −function(x,y){covarianza=mean(x*y)-mean(x)*mean(y)return(covarianza)}Ejemplo

Crea una funcion en R que calcule la pendiente de la recta deregresion. Recuerda que la pendiente de la recta de regresion vienedada por la expresion

β =sxys2X

,

donde s2X denota la varianza de X .

Alberto Rodrıguez Casal Introduccion al R

Funciones: Ejemplo (II)

I mi.func< −function(a,b=3,. . .){z< −a^bplot(a,z,. . .)return(z)}

I mi.fun(3,3) # 27

I mi.func(b=2,a=5,col=2)

I mi.func(seq(0,1,length=100),type="l")

I mi.func(b=2,3) # Error

Alberto Rodrıguez Casal Introduccion al R

Control del flujo (I)

Debe evitarse en lo posible los bucles (punto debil en R) usandocuando sea posible los calculos con vectores:a=1:10b=numeric(10) # Define el vector bfor (i in 1:10){b[i]=a[i]^2}bEl bucle anterior podrıa haberse evitado escribiendo simplementeb=a^2Las funciones que admiten vectores incluyen: operadoresaritmeticos, funciones matematicas, operadores logicos, etc. Rextiende periodicamente los vectores para realizar las operacionesque se le pide:a=c(1,2,3,4);b=c(1,2); c=a*b=c(1,4,3,8)

Alberto Rodrıguez Casal Introduccion al R

Control del flujo

Los bucles mas utilizados son el for y el while. Su sintaxis es lasiguiente:

I for (name in expr1) {expr2}expr1 puede ser cualquier tipo de vector

I while (expr log){expr}Tambien es util poder ejecutar condicionalmente algunassentencias. La sintaxis de la sentencia basica condicional es:

I if (expr log) {exprTRUE} else {exprFALSE}

Alberto Rodrıguez Casal Introduccion al R

Problema de Galileo (I)

Galileo Galiei (1564-1642) analizo en su obra “So-bre las puntuacion en tiradas de dados” el numerode resultados posibles tirando tres dados. Galileofue el primero que probo que el numero de posibil-idades era simplemente 216 = 63. Tambien anal-izo de cuantas formas distintas se pueden obten-er cada una de las posibles sumas. Al contrariode lo que se pensaba en la epoca, se dio cuentaque era mas probable obtener una suma de diezque de nueve. A pesar de la aparente simplicidaddel problema, Galileo reconocio que quedo exhaus-to despues de enumerar todas las posibilidades yrealizar las correspondientes sumas.

Alberto Rodrıguez Casal Introduccion al R

Problema de Galileo (II)

Nosotros vamos analizar, con ayuda de R, un problema un pocomas complejo que el de Galileo. Nos vamos a centrar en la suma dellanzamiento de cuatro dados. En este caso el elevado numero deposibilidades, 64 = 1296, hacen que el analisis manual basado en laenumeracion de posibilidades a la Galileo no sea recomendable.Escribe un programa en R que simule la suma de cuatro dadosB = 100000 veces y resume los resultados obtenidos en una tablade frecuencias, utilizando la funcion de R table, y representalagraficamente. A la vista de los resultados, ¿que valor parece masprobable?

Alberto Rodrıguez Casal Introduccion al R

Caballero de Mere (I)

En el siglo XVII los juegos de azar eran la principal diversion de laalta sociedad francesa. Antoine Gombard, Caballero DeMere pregunto a Blas Pascal (1623-1662) en un viaje si eraventajoso apostar por el resultado de obtener al menos un seis enuna serie de cuatro lanzamientos de un dado. En 1654, Pascal yPierre de Fermat (1601-1665) mantuvieron abundantecorrespondencia sobre este y otros problemas relacionados con elcalculo de probabilidades. ¿Como debemos responder a la preguntadel Caballero de Mere?

Alberto Rodrıguez Casal Introduccion al R

Caballero de Mere (II)

Para saberlo utiliza los resultados del siguiente experimento desimulacion:

1. Crea una funcion de R que permita decidir siexiste o no un 6 en una secuencia de tiradade dados.

2. Calcula el porcentaje de veces que se gana laapuesta despues de simular B = 100000apuestas como la planteada.

Alberto Rodrıguez Casal Introduccion al R

Caballero de Mere (III)

De Mere tambien planteo a Pascal un problema que creıaequivalente al anterior. El querıa saber si era ventajoso apostar porel resultado de obtener al menos un doble seis en una serie de 24lanzamientos con un par de dados. Para saberlo utiliza nuevamentelos resultados del siguiente experimento de simulacion:

1. Crea una funcion de R que permita decidir si existe o no un 6doble en una secuencia de tirada de dados.

2. Calcula el porcentaje de veces que se gana la apuesta en unexperimento de simulacion B = 100000 apuestas como laplanteada.

Alberto Rodrıguez Casal Introduccion al R