SlideShare una empresa de Scribd logo
1 de 29
Descargar para leer sin conexión
Introducci´n a R: un entorno de programaci´n
           o                                  o
  para el an´lisis de datos y la elaboraci´n de
             a                            o
                     gr´ficos
                       a

             Juan Jos´ Gibaja Mart´
                     e            ıns

              7 de noviembre de 2008
´
Indice general

1. Estructuras de datos en R                                                         3
  1.1. Creaci´n y eliminaci´n de objetos. Vectores num´ricos, de car´cter
              o              o                             e              a
       y l´gicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
          o                                                                          3
  1.2. Factores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .      5
  1.3. Arrays y matrices      . . . . . . . . . . . . . . . . . . . . . . . . . .    6
  1.4. Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .      7
  1.5. Dataframes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .        7
  1.6. Bases de datos en R . . . . . . . . . . . . . . . . . . . . . . . . .        10

2. An´lisis de datos
     a                                                                              11
  2.1. Variables aleatorias . . . . . . . . . . . . . . . . . . . . . . . . . .     11
  2.2. Estad´
            ıstica descriptiva univariante . . . . . . . . . . . . . . . . .        12
  2.3. Estad´
            ıstica para dos variables . . . . . . . . . . . . . . . . . . . .       14
  2.4. Tablas en R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .      16
  2.5. Regresi´n lineal . . . . . . . . . . . . . . . . . . . . . . . . . . . .
              o                                                                     18
  2.6. An´lisis de componentes principales . . . . . . . . . . . . . . . .
         a                                                                          19
  2.7. Ejemplo de tipolog´ de Comunidades Aut´nomas con el paque-
                            ıa                        o
       te ade4 (Cuidado: Antes de utilizar el package ade4 es preciso
       instalarlo) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    19
  2.8. An´lisis de componentes principales con FactoMineR . . . . . . .
         a                                                                          20

3. Varios                                                                           22
  3.1. Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .     22
  3.2. Ayuda en R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .       22


                                         1
´
INDICE GENERAL                                                                  2

  3.3. Establecer el directorio de trabajo . . . . . . . . . . . . . . . . .   23
       ´
  3.4. Area de trabajo en R (Workspace) . . . . . . . . . . . . . . . . .      23
  3.5. Hist´rico de comandos . . . . . . . . . . . . . . . . . . . . . . . .
           o                                                                   23
  3.6. Ejecuci´n de comandos desde un archivo de texto . . . . . . . . .
              o                                                                24
  3.7. Trabajo con gr´ficos . . . . . . . . . . . . . . . . . . . . . . . . .
                     a                                                         24
Cap´
   ıtulo 1

Estructuras de datos en R

1.1.       Creaci´n y eliminaci´n de objetos. Vectores
                 o             o
           num´ricos, de car´cter y l´gicos
               e            a        o
Todo en R son objetos. ¿De qu´ objetos disponemos en este momento?
                             e

     ls()

Creamos nuestro primer objeto: un vector num´rico. Efectuamos algunas op-
                                                 e
eraciones sobre ´l y vemos los resultados. Como no los guardamos en ning´n
                 e                                                      u
objeto, los resultados se muestran y se pierden:

     x<-c(1,2,3)
     x
     sqrt(x)
     1/x
     ls()

...y lo eliminamos

     rm(x)
     ls()

Creamos otro vector, esta vez de tipo car´cter. Intentamos efectuar operaciones
                                         a
num´ricas sobre ´l, pero no es posible.
    e           e

                                      3
CAP´
   ITULO 1. ESTRUCTURAS DE DATOS EN R                                         4

     x<-c("Koldo","Kepa")
     x
     1/x

¿Se pueden crear vectores mixtos?. No. Se fuerza al tipo menos restrictivo.

     x<-c(1.5,"Kepa")
     x

Vamos a sumar dos vectores. El segundo s´lo tiene un elemento. ¿Qu´ ocurrir´?
                                          o                          e       a
Se repite tantas veces como sea necesario para ajustarse a la longitud del m´s
                                                                             a
largo. N´tese que en R no existe el concepto de escalar sino como vector con un
        o
unico elemento.
´

     x<-c(1,2)
     y<-3
     x+y

Algunas funciones sobre vectores num´ricos con significados evidentes:
                                    e

     max(x)
     min(x)
     range(x)
     length(x)
     mean(x) # media aritm´tica
                          e
     var(x) # varianza (con el divisor n-1)

Los vectores l´gicos se pueden crear concatenando valores l´gicos TRUE, FALSE
              o                                            o

     temp<-c(TRUE,FALSE,FALSE,FALSE,TRUE)
     temp

O tambi´n mediante expresiones l´gicas (>,<,>=,<= ==, !=). ¿Son mayores
        e                        o
que 13 los componentes del vector x? Algunos s´ (TRUE) y otros no (FALSE)
                                              ı

     temp<-x>13
CAP´
   ITULO 1. ESTRUCTURAS DE DATOS EN R                                      5

     temp

¿C´mo se puede acceder a los elementos de un vector? Mediante un vector de
   o
´
ındices (entre [ ])

     x<-c(10,20,30,40,50) x[1] # da como resultado el primer elemento
     del vector x
     x[c(1,2)] # proporciona los dos primeros elementos del vector
     x
     x[x>30] # nos da un vector con los elementos de x mayores que
     30
     x[c(-1,-2)] # nos da los elementos de x excepto los dos primeros

Podemos transformar un tipo de vector en otro

     cx<-as.character(x)
     cx
     y<-as.numeric(cx)
     y


1.2.      Factores
Los vectores son muy importantes pero existen otras estructuras en R como los
factores. Creamos un vector num´rico x y a partir de ´l definimos un factor
                                  e                     e
fx. Vemos como el procedimiento summary() tiene diferentes efectos sobre un
vector num´rico y sobre un factor.
           e

     x<-c(1,1,1,2,2,2,1,1,1)
     summary(x)
     fx<-as.factor(x)
     fx
     summary(fx)

A los niveles de un factor les podemos poner etiquetas

     fx<-factor(x,labels=c("chico","chica"))
CAP´
   ITULO 1. ESTRUCTURAS DE DATOS EN R                                       6

     fx
     summary(fx)

Tambi´n podemos crear factores a partir de vectores “continuos”. Para ello
       e
generamos una secuencia de 5000 n´meros aleatorios con una distribuci´n nor-
                                     u                                o
mal de media 100 y desviaci´n est´ndar 10. A partir de ese vector num´rico
                              o      a                                   e
creamos un factor con la funci´n cut() estableciendo como puntos de corte
                                o
60,70,...,140. Vemos como la funci´n plot() act´a de forma diferente sobre un
                                   o           u
factor (fincomes) y sobre un vector num´rico (incomes). El efecto de plot()
                                         e
sobre el factor es similar al efecto de hist() -histogramas- sobre un vector
num´rico.
     e

     incomes<-rnorm(5000,100,10)
     incomes
     fincomes<-cut(incomes,breaks=60+10*(0:8))
     summary(fincomes)
     plot(fincomes)
     plot(incomes)
     hist(incomes)


1.3.      Arrays y matrices
Otra estructura muy importante es el array. Un caso particular de array es la
matriz (array bidimensional). La definimos creando un vector y d´ndole la forma
                                                               a
deseada mediante su valor dim(). Como ejemplo vamos a crear una matriz de
dos filas y tres columnas.

     x<-c(1,2,3,4,5,6)
     dim(x)<-c(2,3)
     x
     x[1,1]
     x[1,2]
     x[1,]
     x[,1]
     x[,]
     x
CAP´
   ITULO 1. ESTRUCTURAS DE DATOS EN R                                           7

1.4.       Listas
Las listas son una generalizaci´n del concepto de vector. Mientras estos deben
                               o
constar de componentes homog´neos en cuanto a su tipo, las listas pueden estar
                               e
formadas por componentes de distintos tipos:

     ingresos<-rnorm(5000,100,10)
     gastos<-rnorm(5000,80,10)

     lista1<-list(ingresos,gastos)
     lista1
     patrimonio<-rnorm(5000,1000,10)
     lista2<-list(lista1,patrimonio)

     summary(lista2)


1.5.       Dataframes
Muy similares a las listas son los dataframes. Son las estructuras m´s utilizadas
                                                                      a
en R para recoger los datos m´s habituales en Estad´
                                a                      ıstica, aquellos en los que
contamos con un conjunto de n individuos para cada uno de los cuales hemos
obtenido los valores en k variables, que pueden ser de distinta naturaleza.

     df1<-data.frame(ingresos,gastos,patrimonio)
     df1
     summary(df1)
     plot(df1)

Para referirnos a las variables de un dataframe debemos escribir dataframe$variable.
No obstante, se puede obtener una copia de las variables de un dataframe me-
diante el comando attach(). Cuidado: los cambios que se efect´en sobre estas
                                                                  u
variables no afectan al dataframe. Para eliminar las variables de memoria em-
pleamos el comando detach().

     attach(df1)
     detach(df1)
CAP´
   ITULO 1. ESTRUCTURAS DE DATOS EN R                                          8

La forma m´s c´moda de introducir datos en R es mediante la lectura de un
              a o
fichero de datos externo (normalmente en formato texto). Para ello construimos
un fichero en cuya primera fila se recogen los nombres de las variables de los
datos separados por un espacio en blanco. En cada una de las restantes filas se
incluye una etiqueta de la fila y los datos del individuo correspondiente en cada
una de las variables separados tambi´n por espacios en blanco. Un ejemplo es
                                       e
el siguiente:
Peso Altura Edad Sexo
"Koldo" 80 175 18 "chico"
"Luis" 75 182 19 "chico"
"Nerea" 63 164 42 "chica"
"Juanjo" 85 177 34 "chico"
"Amaia" 59 160 34 "chica"
"Ainhoa" 45 167 19 "chica"
"Uxue" 52 170 17 "chica"
N´tese que tanto los nombres de las filas como los valores de las variables cuali-
  o
tativas deben introducirse entrecomillados. No as´ los nombres de las variables.
                                                 ı
Para leer los datos utilizamos el comando read.table(). El resultado es un
objeto de la clase dataframe. En este caso, creamos el dataframe DatosPeso y
creamos una copia de sus variables mediante el comando attach():

     DatosPeso<-read.table("DatosPeso.txt", header=TRUE)

     DatosPeso
     attach(DatosPeso)

A continuaci´n empleamos algunos comandos de estad´
            o                                     ıstica descriptiva como
summary(), plot() e hist():

     summary(Peso)
     plot(Peso)
     hist(Peso)

Especialmente util es el comando tapply() que calcula el estad´
               ´                                              ıstico recogido en
su tercer argmento a los datos de la variable recogida en su primer argumento
en los grupos formados por el segundo argumento. Los siguientes comandos
calculan la media -mean- del Peso y la Altura para los distintos valores de la
variable Sexo:
CAP´
   ITULO 1. ESTRUCTURAS DE DATOS EN R                                       9

     tapply(Peso,Sexo,mean)
     tapply(Altura,Sexo,mean)

Podemos modificar un dataframe mediante el comando fix(). Podemos probar,
por ejemplo, a a˜adir nuevos individuos -nuevas filas- al dataframe.
                n

     fix(DatosPeso)
     DatosPeso

Sin embargo, el n´mero de individuos de la variable Peso no ha cambiado. ¿Por
                 u
qu´?
  e

     length(Peso)

¿Qu´ ocurrira si hacemos attach(DatosPeso) y volvemos a ver cu´ntos indi-
    e                                                         a
viduos tenemos ahora? ¿Por qu´?
                             e

     length(Peso)



Puede construirse un dataframe desde cero introduciendo los datos desde el
teclado. El siguiente comando abre una ventana en forma de hoja de c´lculo. Al
                                                                    a
cerrarla el resultado se guardar´ como un dataframe en el objeto Data:
                                a

     Data<-edit(data.frame())

Para exportar un dataframe de R a un documento de texto deber´
                                                             ıamos escribir
la siguiente l´
              ınea de comando:

     write.table(df1,file="nombrearchivo.txt")

Asimismo podr´  ıamos exportar dicho dataframe de R a un documento de formato
csv con la siguiente l´
                      ınea de comando:

     write.csv(df1,file="nombrearchivo.csv")
CAP´
   ITULO 1. ESTRUCTURAS DE DATOS EN R                                      10

1.6.     Bases de datos en R
R dispone de gran cantidad de bases de datos a cuyo listado se puede acceder
mediante el comando data():

     data()

Para acceder a una base de datos concreta basta con teclear su nombre -si
est´ accesible en alguno de los packages cargados en R-
   a

     WorldPhones
     class(WorldPhones)
     cars

Si queremos ver las bases de datos disponibles en alg´n otro package debe-
                                                      u
mos emplear el comando data(package="package"). Por ejemplo, el siguiente
comando nos proporciona la lista de bases de datos disponibles en el package
survival.

     data(package="survival")

Para cargar los datos de una base de datos de un package no cargado en memoria
debemos emplear el comando data(database,package="package"):

     data(tobin,package="survival")
     tobin
     class(tobin)
Cap´
   ıtulo 2

An´lisis de datos
  a

2.1.      Variables aleatorias
R dispone de una calculadora de variables aleatorias. Con ella podemos generar
vectores de n´meros aleatorios que siguen diferentes funciones de distribuci´n
               u                                                                 o
te´ricas -normal, binomial, t de Student, Chi cuadrado, F-, calcular probabili-
  o
dades a partir de estas funciones, calcular valores cr´
                                                      ıticos, etc´tera. Por ejemplo,
                                                                 e
el siguiente comando genera un vector de 1000 n´meros aleatorios seleccionados
                                                  u
de una variable aleatoria con distribuci´n binomial de par´metros n=5 y p=0.5
                                         o                    a

      x<-rbinom(5000,5,.5)
      x<-factor(x)
      plot(x)
      x<-rbinom(5000,5,.5)
      hist(x)
      x<-factor(x)
      x
      summary(x)

Seguimos jugando con las variables aleatorias:

      pnorm(2,0,1) # ¿Qu´ ´rea queda a la derecha de 2 en una N(0,1)?
                        e a
      qnorm(0.95,0,1) # ¿Qu´ valor de una N(0,1) deja a su izquierda
                           e
      0,95?

                                        11
CAP´          ´
   ITULO 2. ANALISIS DE DATOS                                                12

Vamos a dibujar funciones de densidad. En primer lugar creamos un vector
num´rico con los n´meros desde -2 hasta +2 con un incremento de 0.001.
   e              u

     x<-seq(-2,2,by=0.001)

A continuaci´n calculamos la funci´n de densidad normal (0,1) para estos valores
             o                    o
y la representamos gr´ficamente:
                     a

     z<-dnorm(x,0,1)

     plot(x,z)

Lo mismo para una N(0,2)

     w<-dnorm(x,0,2)

     lines(x,w)

Lo mismo para una N(0,0.5)

     y<-dnorm(x,0,0.5)

     lines(x,y)


2.2.     Estad´
              ıstica descriptiva univariante
Vamos a revisar algunos conceptos de estadistica descriptiva univariante. Para
ello vamos a recurrir a una base de datos disponible en R y reativa a las erup-
ciones de un geyser. El dataframe contiene dos variables, eruptions (duraci´no
de la erupci´n) y waiting (tiempo entre erupciones). Mediante el nombre de la
            o
base de datos accedemos a ella y con el comando class() comprobamos que se
trata de un dataframe. A continuaci´n con el comando attach() hacemos una
                                     o
copia de las variables contenidas en el dataframe.

     faithful
     class(faithful)

     attach(faithful)

Los comandos summary() y fivenum() nos proporcionan los estad´
                                                             ısticos b´sicos
                                                                      a
para una variable num´rica. Con el comando stem() obtenemos un diagrama
                     e
de tallos y hojas:
CAP´          ´
   ITULO 2. ANALISIS DE DATOS                                              13

     summary(eruptions)
     fivenum(eruptions)
     stem(eruptions)

A continuaci´n vamos a recodificar la variable eruptions -num´rica- para con-
             o                                               e
vertirla en una variable ordinal. Empleamos el comando cut() y establecemos
un corte en 5 grupos. Con el comando class() verificamos que el nuevo ob-
jeto creado -feruptions- es un factor. Vemos, a continuaci´n, el efecto de los
                                                          o
comandos summary() y plot() sobre un objeto de tipo factor:

     feruptions<-cut(eruptions,breaks=5)
     class(feruptions)
     summary(feruptions)
     plot(feruptions)

Los histogramas resultan muy utiles para estudiar la distribuci´n de variables
                                 ´                                 o
de naturaleza cuantitativa. El comando hist() proporciona el histograma de
una variable. En concreto, el siguiente comando establece un histograma con 20
clases en el que las frecuencias no son absolutas sino relativas -freq=FALSE-:

     hist(eruptions,breaks=20,freq=FALSE)

En ocasiones preferimos suavizar el histograma mediante las llamadas Estima-
ciones kernel de densidad. Lo conseguimos con el comando density() para el
que hemos establecido un ancho de banda de 0,1. Puede ser interesante jugar
con el valor de bw y ver el efecto sobre el gr´fico:
                                              a

     lines(density(eruptions,bw=0.1))

La inspecci´n del histograma nos hace ver que los datos no siguen ninguna de
            o
las distribuciones te´ricas habituales -normal, gamma,...- Vamos a jugar algo
                     o
m´s con los datos. ¿Para qu´ sirve el siguiente comando?:
  a                          e

     longeruptions<-eruptions[eruptions>=3]

Comprob´moslo:
       e

     length(longeruptions)
     length(eruptions)
CAP´          ´
   ITULO 2. ANALISIS DE DATOS                                                 14

Y ahora obtengamos el histograma y la estimaci´n de densidad para las erup-
                                              o
ciones de al menos tres minutos de duraci´n:
                                         o

     hist(longeruptions,breaks=10,freq=FALSE)
     lines(density(longeruptions,bw=0.1))

Este histograma no es perfectamente normal pero ¿existe evidencia suiciente
para rechazar que sea normal? Utilicemos el test de Kolmogorov-Smirnov:

     ks.test(longeruptions,"pnorm",mean(longeruptions),sqrt(var(longeruptions)))

O el de Shapiro

     shapiro.test(longeruptions)

¡Vaya! Son contradictorios. A ver qu´ nos dice un gr´fico Q-Q:
                                    e               a

     qqnorm(longeruptions)


2.3.     Estad´
              ıstica para dos variables
Vamos a ver algunos comandos para estad´ıstica de dos variables. Para empezar
creamos dos vectores A y B, que contienen valores de ciertas variables:

     A<-c(79.98,80.04,80.02,80.04,80.03,80.03,80.04,79.97,80.05,80.03,80.02,80.00,80.02)
     B<-c(80.02,79.94,79.98,79.97,79.97,80.03,79.95,79.97)

Con el comando boxplot() obtenemos un diagrama de caja para una, dos o
m´s variables:
 a

     boxplot(A)
     boxplot(A,B)

El comando t.test() nos permite comprobar la hip´tesis nula de que la media
                                                      o
aritm´tica poblacional de la variable de la que se han obtenido las observaciones
      e
de A toma el valor mu -frente a la alternativa de que la media poblacional es
distinta de mu:

     t.test(A,mu=0)
CAP´          ´
   ITULO 2. ANALISIS DE DATOS                                                   15

Podemos modificar la direcci´n de la hip´tesis alternativa mediante el argumento
                           o           o
alternative:

      t.test(A,mu=0,alternative="less")

El mismo comando t.test() nos permite efectuar un contraste de hip´tesis
                                                                  o
sobre la igualdad de las medias de dos poblaciones:

      t.test(A,B)

Por defecto, el comando t.test() asume que existe heterocedasticidad y por
tanto lleva a cabo la conocida como aproximaci´n de Welch -n´tese que los
                                              o              o
grados de libertad no son un n´mero entero-.
                              u
Pero, no tenemos por qu´ suponer heterocedasticidad. Vemos qu´ nos dice el co-
                        e                                    e
mando var.test(). Con ´l conseguimos efectuar el contraste sobre la igualdad
                          e
de las varianzas poblacionales de dos variables.

      var.test(A,B)

Como el resultado del test de igualdad de varianzas no arroja evidencia emp´
                                                                           ıri-
ca suficiente como para rechazar la hip´tesis de igualdad de varianzas pode-
                                         o
mos modificar el comando t.test() mediante el argumento var.equal=TRUE. Se
calcula de este modo una varianza estimada com´n a partir de las varianzas
                                                  u
muestrales de cada una de las variables:

      t.test(A,B,var.equal=TRUE)

Para aplicar el test de la t de Student debemos suponer que los datos provienen
de una variable con distribuci´n normal -o aplicar el teorema central del l´
                                o                                            ımite-
Si esto no es as´ -o el teorema no es aplicable-, es mejor recurrir a la prueba no
                ı
param´trica correspondiente:
       e

      wilcox.test(A,B)

Una utilidad adicional de la prueba de Kolmogorov-Smirnov es la de contrastar
que dos conjuntos de datos provienen de la misma poblaci´n. ¿Es as´ en nuestro
                                                        o         ı
caso?

      ks.test(A,B)
CAP´          ´
   ITULO 2. ANALISIS DE DATOS                                                16

2.4.     Tablas en R
Vamos a echar un vistazo a las tablas en R. Por ejemplo, la base de datos
Titanic es de la clase tabla, como podemos comprobar con el comando class():

     Titanic
     class(Titanic)

El comando summary() proporciona -cuando se aplica sobre una tabla- la prueba
de hip´tesis Chi cuadrado sobre la independencia de las variables que componen
      o
las dimensiones de la tabla:

     summary(Titanic)

Especialmente interesante es el comando plot() aplicado sobre tablas:

     plot(Titanic)

El comando mosaicplot() nos permite obtener representaciones parciales de la
tabla total:

     mosaicplot(~ Sex + Age, data=Titanic)

Vamos, a continuaci´n, a extraer algunas subtablas de la tabla global. En con-
                    o
creto, creamos la tabla AgeSurvived a partir de las variables 3 y 4 de la tabla
Titanic. Igualmente, obtenemos la tabla ClassSex a partir de las variables 1
y 2 de la tabla Titanic:

     AgeSurvived<-margin.table(Titanic,c(3,4))

     ClassSex<-margin.table(Titanic,c(1,2))
     ClassSex
     AgeSurvived

Ahora podemos utilizar el comando assocplot() con el fin de obtener una rep-
resentaci´n gr´fica de la desviaci´n respecto a la independencia de las variables
         o    a                  o
consideradas. Este comando s´lo puede emplearse para tablas de contingencia
                              o
de dos variables:

     assocplot(ClassSex)
CAP´          ´
   ITULO 2. ANALISIS DE DATOS                                             17

     assocplot(AgeSurvived)
     summary(ClassSex)
     summary(AgeSurvived)

Seguimos extrayendo tablas. ¿Qu´ ocurri´ con el Titanic?
                               e       o

     ClassSurvived<-margin.table(Titanic,c(1,4))
     summary(ClassSurvived)

     assocplot(ClassSurvived)

En nuestro repaso de las tablas en R hemos partido de una base de datos con
formato de tabla -la base de datos Titanic- pero ¿c´mo podemos construir
                                                        o
una tabla a partir de datos de un dataframe -por ejemplo-? Para verlo vamos a
emplear la base de datos cars -que es de la clase dataframe-:

     cars
     attach(cars)

Para empezar creamos dos factores a partir de las variables num´ricas:
                                                               e

     fdist<-cut(dist,breaks=5)
     fspeed<-cut(speed,breaks=5)

El comando table() nos da como resultado un objeto de la clase tabla, que en
esta ocasi´n se guarda con el nombre de DistSpeed:
          o

     DistSpeed<-table(fdist,fspeed)

     DistSpeed
     plot(DistSpeed)
     summary(DistSpeed)
     assocplot(DistSpeed)
CAP´          ´
   ITULO 2. ANALISIS DE DATOS                                               18

2.5.     Regresi´n lineal
                o
La regresi´n lineal la efectuamos en R mediante el comando lm(). Su resultado
          o
es un objeto de la clase lista, al que podemos aplicar otros comandos de la
siguiente forma:

     lr1<-lm(dist~speed)
     summary(lr1)

     anova(lr1)
     plot(lr1)

Para obtener el diagrama de dispersi´n de las variables recurrimos al comando
                                      o
plot() y a˜adimos una l´
           n             ınea recta -la recta de regresi´n- mediante el comando
                                                        o
abline() al que le pasamos los valores correspondientes del objeto lr1 -que es
el que almacena los resultados del ajuste lineal-:

     plot(speed,dist)
     abline(lr1)

Podemos estudiar la existencia de observaciones influyentes mediante el coman-
do influenc.measures() tomado como argumento unico el objeto que guarda
                                                    ´
los resultados de la regresi´n:
                            o

     influence.measures(lr1)

Para terminar con la regresi´n veamos un ejemplo de regresi´n lineal m´ltiple
                            o                               o          u
-trabajamos con la base de datos LifeCycleSavings-. Es especialmente intere-
sante ver la sintaxis de la formula que recoge la relaci´n entre las variables
                                                        o
ex´genas y end´gena:
   o           o

     LifeCycleSavings
     fm1 <- lm(sr ~ pop15 + pop75 + dpi + ddpi, data = LifeCycleSavings)
     summary(fm1)

     anova(fm1)
CAP´          ´
   ITULO 2. ANALISIS DE DATOS                                              19

2.6.     An´lisis de componentes principales
           a
Vamos a ver c´mo resuelve R el an´lisis de componentes principales. Para ello
              o                     a
vamos a emplear la base de datos USArrests, que recoge datos sobre detenciones
efectuadas en diferentes estados de EE.UU.:

     USArrests
     plot(USArrests) # matriz de diagramas de dispersi´n
                                                      o

     pc1<-princomp(USArrests) # guardamos los resultados del ACP en
     pc1
     plot(pc1) #valores propios. ¿Es adecuado el ACP?
     biplot(pc1) #representaci´n simult´nea de variables e individuos
                              o        a

     pc1<-princomp(USArrests,scale=TRUE) #trabajamos con la matriz
     cor.
     biplot(pc1)
     summary(pc1)

     pc1$scores # puntuaciones de los individuos sobre los ejes


2.7.     Ejemplo de tipolog´ de Comunidades Aut´no-
                             ıa                     o
         mas con el paquete ade4 (Cuidado: Antes
         de utilizar el package ade4 es preciso insta-
         larlo)
Leemos los datos y creamos el data.frame DatosComunidades.

     DatosComunidades<-read.table("Prueba.txt", header=TRUE)

Efectuamos un an´lisis de componentes principales normado y ponderado (con la
                  a
poblaci´n de las comunidades aut´nomas) empleando el comando dudi.pca():
       o                        o

     library(ade4)
     acp2<-dudi.pca(subset(DatosComunidades,select=-c(UE15,POBLACION)),row.w=DatosComunid

Veamos el resumen de resultados:
CAP´          ´
   ITULO 2. ANALISIS DE DATOS                                                20

     acp2

El c´
    ırculo de correlaci´n:
                       o

     s.corcircle(acp2$co)

Las coordenadas de las Comunidades Aut´nomas en el nuevo sistema de refer-
                                      o
encia:

     s.label(acp2$li)

Ahora vamos a aplicar un algoritmo de clasificaci´n jer´rquica ascendente con el
                                                o     a
comando hclust(). Previamente debemos calcular la matriz de distancias entre
las Comunidades Aut´nomas para lo que nos valdremos del comando dist():
                    o

     dist1<-dist(subset(DatosComunidades,select=-c(UE15,POBLACION)))
     dist1
     clust1<-hclust(dist1)
     plot(clust1)


2.8.     An´lisis de componentes principales con Fac-
           a
         toMineR
Cargamos el package:

     library(FactoMineR)

Efectuamos un ACP y guardamos los resultados en el objeto acp2:

     acp2<-PCA(subset(DatosComunidades,select=-c(UE15,POBLACION)),row.w=DatosComunidades$

Vemos los resultados referidos a los valores propios (incluidos porcentajes de
inercia acumulados y sin acumular correspondientes a cada componente princi-
pal):

     acp2$eig

Los resultados para los individuos (coordenadas, contribuciones y cosenos cuadra-
dos):
CAP´          ´
   ITULO 2. ANALISIS DE DATOS                                            21

     acp2$ind

Los resultados para las variables (coordenadas, correlaciones con los compo-
nentes principales, contribuciones y cosenos cuadrados):

     acp2$var
Cap´
   ıtulo 3

Varios

3.1.     Packages
Las instalaciones de R consisten en un m´dulo b´sico y un conjunto de packages
                                        o      a
recomendados -alrededor de 25-. Sin embargo existen cientos de packages que
recogen las contribuciones de la comunidad que desarrolla R as´ como de otros
                                                               ı
investigadores. Para ver cu´les son los packages que se encuentran instalados
                            a
en R debe utilizarse el comando library(). Este mismo comando sirve para
cargar un package previamente instalado, en la forma library(package). El
comando search() proporciona un listado de los packages activos.
La forma m´s sencilla de instalar un nuevo package es mediante la opci´n
             a                                                            o
Paquetes / Instalar paquetes a partir de archivos zip locales que se encuen-
tra disponible en el men´ principal de R Gui. Obviamente es necesario haber
                        u
obtenido previamente el package en formato zip.


3.2.     Ayuda en R
La sintaxis de R es relativamente complicada. Por ese motivo es del m´ximo
                                                                     a
inter´s disponer de una buena ayuda on-line. Esa ayuda se puede invocar de
     e
varias maneras:

     help.start() #arranca el navegador y la ayuda on-line
     help(comando) #proporciona ayuda sobre un comando en particular
     help.search(caracter") #busca ayuda sobre el tema caracter"
     library(help=package) #proporciona ayuda sobre los comandos de
     un package concreto
     example(comando) #proporciona ejemplos sobre un comando concreto

                                     22
CAP´
   ITULO 3. VARIOS                                                             23

3.3.     Establecer el directorio de trabajo
Para conocer cu´l es el directorio de trabajo por defecto debemos utilizar la fun-
               a
ci´n getwd(). A continuaci´n podemos establecer el nuevo directorio de trabajo
  o                         o
mediante la funci´n setwd(), del siguiente modo:
                 o

     setwd("c:/docs/mydir")


3.4.     ´
         Area de trabajo en R (Workspace)
El ´rea de trabajo es el lugar donde R guarda todos los objetos que est´n activos
   a                                                                   a
en un momento dado. Se puede obtener una copia del ´rea de trabajo mediante
                                                       a
el comando save.image().
Si, por ejemplo, deseamos obtener una copia de todos los objetos del ´rea de
                                                                         a
trabajo en el archivo .RData -archivo de ´rea de trabajo por defecto- deberemos
                                         a
escribir:

     save.image()

Si deseamos guardar s´lo algunos de los objetos y, adem´s, deseamos hacerlo en
                     o                                 a
un archivo con un nombre distinto deberemos emplear el comando:

     save(ListaDeObjetos,file="myfile.RData")

Cuando deseemos recuperar los objetos copiados en un archivo de ´rea de tra-
                                                                a
bajo debemos emplear la funci´n:
                             o

     load("myfile.RData")


3.5.     Hist´rico de comandos
             o
Si deseamos guardar una copia de los comandos que hemos utilizado o cargarla
en la memoria debemos emplear respectivamente los comandos savehistory(file
= ".Rhistory") y loadhistory(file = ".Rhistory").
CAP´
   ITULO 3. VARIOS                                                           24

3.6.     Ejecuci´n de comandos desde un archivo de
                o
         texto
Adem´s de trabajar interactivamente con R tambi´n es posible escribir un con-
      a                                             e
junto de comandos -correspondientes, por ejemplo, a un an´lisis determinado- y
                                                            a
ejecutar todos ellos de una sola vez -esta forma de funcionamiento se llama pro-
ceso por lotes (batch processing)-. Podemos acceder a ella mediante el comando
source(). Por ejemplo, el siguiente comando ejecuta los comandos recogidos en
el fichero de texto MiFichero.txt situado en el directorio de trabajo :

     source("MiFichero.txt")


3.7.     Trabajo con gr´ficos
                       a
Adem´s de ver los gr´ficos en la consola gr´fica puede interesar obtener una
       a                a                      a
copia de ellos para incluirlos en un documento de texto o en un informe. Para
ello se puede utilizar el siguiente conjunto de comandos:

     jpeg("c:/MisGraficos/myplot.jpg")
     plot(x)

     dev.off()

El primer comando indica a R que debe guardar una copia del gr´fico en un
                                                                     a
archivo llamado myplot.jpg situado en el directorio C:/MisGraficos. Adem´s,   a
el formato del gr´fico ser´ jpg -cabe tambi´n crear gr´ficos con formato pdf,
                  a       a                  e           a
Windows Metafile, png, etc´tera-. El segundo comando recoge la generaci´n del
                            e                                              o
gr´fico. El tercero devuelve el destino de los gr´ficos a la consola gr´fica.
  a                                             a                    a
Bibliograf´
          ıa

Berk, R.A. (2008); Statistical Learning form a Regression Perspective; Springer.
Bliese, P. (2006); Multilevel Modeling in R;
Burns, P. (2003); A Guide for the Unwilling S User
Chambers, J.M. (2008); Software for Data Analysis. Programming with R;
Springer
Cohen, Y; Cohen, J.Y. (2008); Statistics and Data with R: An Applied Approach
Through Examples; Wiley
Cook D., Swayne D.F. (2007); Interactive and Dynamic Graphics for Data Anal-
ysis; Springer.
Crawley, M.J. (2007); The R Book; Wiley.
Dalgaard, P. (2002); Introductory Statistics with R; Springer
Everitt B.S. (2005); And R and S-Plus Companion to Multivariate Analysis;
Springer.
Faraway J.J. (2002); Practical Regression and Anova using R
Farnsworth, G.V. (2006); Econometrics in R
Galwey N.W. (2006); Introduction to Mixed Modelling. Beyond Regression and
Analysis of Variance; Wiley.
Gelman, A., Hill, J. (2007); Data Analysis Using Regression and Multilevel/Hierarchical
Models; Cambridge University Press
Kuhnert, P., Venables, B. (2005); An Introduction to R: Software for Statistical
Modelling & Computing; CSIRO.
Maindonald, J.H. (2008); Using R for Data Analysis and Graphics. Introuduc-
tion, Code and Commentary; Australian National University
Maindonald J., Braun J. (2003); Data Analysis and Graphics Using R – an
Example-based Approach; Cambridge University Press.
Marques de S´, J.P. (2007); Applied Statistics Using SPSS, STATISTICA,
            a
MATLAB and R; 2nd edition; Springer.

                                      25
CAP´
   ITULO 3. VARIOS                                                        26

Muenchen, B. (2007); R for SAS and SPSS Users
Murrel P. (2006); R Graphics; Chapman & Hall / CRC
Owen, W.J. (2007); The R Guide; University of Richmond
Paradis E. (2005); R for Beginners.
Quen´, H. (2006); Statistics with R and S-Plus; Utrecht University
    e
Robinson, A. (2008); icebrakeR; University of Melbourne
Seefeld, K., Linder, E. (2007); Statistics using R with Biological Examples;
University of New Hampshire
Torgo, L. (2003); Data Mining with R: learning by case studies.
Venables W..N., Smith, D.M. (2008); An Introduction to R. Notes on R: A
Programming Environment for Data Analysis and Graphics.
Venables W.N., Ripley B.D. (2000); S Programming; Springer.
Venables W.N., Ripley B.D. (2002); Modern Applied Statistics with S 4th edi-
tion
Verzani, J. (2002); simpleR. Using R for Introductory Statistics
Wang, K.K. (2002); R for Windows Users; Department of Statistics; New Zealand
Recursos online

P´gina del proyecto R: http://www.r-project.org/
 a
The Comprehensive R Archive Network: http://cran.r-project.org/
R wiki: http://wiki.r-project.org/
R news: http://cran.r-project.org/doc/Rnews/
R en Wikipedia: http://en.wikipedia.org/wiki/R_%28programming_language%
29
P´gina web de Quick-R: http://www.statmethods.net/
 a
R Graphical Manual: http://bm2.genes.nig.ac.jp/RGM2/index.php
R video tutorials: http://www.decisionsciencenews.com/?p=261
P´gina de JGR. Java GUI for R: http://jgr.markushelbig.org/JGR.html
 a
Resources to help you learn and use R: http://www.ats.ucla.edu/stat/R/
Rtips (consejos para trabajar con R): http://pj.freefaculty.org/R/Rtips.
html
R for Categorical Data Analysis: http://www.stat.ufl.edu/~presnell/Courses/
sta4504-2000sp/R/R-CDA.pdf
Pagina de la conferencia useR! 2008: http://www.r-project.org/useR-2008
Statistical Analysis on the Web (RWeb): http://bayes.math.montana.edu/
Rweb/Rweb.general.html
R graph gallery: http://addictedtor.free.fr/graphiques/
Statistics with R: http://zoonek2.free.fr/UNIX/48_R/all.html
Serie use R de Springer: http://www.springer.com/series/6991
Curso b´sico de R de la Universidad de Barcelona: http://www.ub.es/stat/
       a
docencia/EADB/Curso%20basico%20de%20R.htm
Curso introductorio de R de Ra´l Vaquerizo Romero: http://es.geocities.
                              u
com/r_vaquerizo/Manual_R_menu.htm

                                  27
CAP´
   ITULO 3. VARIOS                                                     28

A Brief Guide to R for Beginners in Econometrics: http://people.su.se/~ma/
R_intro/
Introduction to Statistical Thought: http://www.stat.duke.edu/~michael/
book.html
Statistical Computing with R: a tutorial: http://www.math.ilstu.edu/dhkim/
Rstuff/Rtutor.html
FactoMiner: http://factominer.free.fr/

Más contenido relacionado

Similar a Sesion R

Manual matlab 2009
Manual matlab 2009Manual matlab 2009
Manual matlab 2009Juan Gabriel
 
Cálculo Numérico Asistido con el Software Matemático MatLab.
 Cálculo Numérico Asistido con el Software Matemático MatLab. Cálculo Numérico Asistido con el Software Matemático MatLab.
Cálculo Numérico Asistido con el Software Matemático MatLab.WALTER YSIQUE
 
Apuntes De Matematicas Discretas
Apuntes De Matematicas DiscretasApuntes De Matematicas Discretas
Apuntes De Matematicas Discretassergio
 
Apuntes De Matematicas Discretas
Apuntes De Matematicas DiscretasApuntes De Matematicas Discretas
Apuntes De Matematicas Discretasguest553c2e
 
Apuntes De Matematicas Discretas
Apuntes De Matematicas DiscretasApuntes De Matematicas Discretas
Apuntes De Matematicas Discretasguest553c2e
 
Apuntes De Matematicas Discretas
Apuntes De Matematicas DiscretasApuntes De Matematicas Discretas
Apuntes De Matematicas Discretassergio
 
El Arte de Programar en R
El Arte de Programar en REl Arte de Programar en R
El Arte de Programar en RHelio Colombe
 
El arte de programar en r
El arte de programar en rEl arte de programar en r
El arte de programar en rLuis Bautista
 
Santana el arte_de_programar_en_r
Santana el arte_de_programar_en_rSantana el arte_de_programar_en_r
Santana el arte_de_programar_en_rVlad Crespo
 
Libro de métodos matriciales con matlab para ingenieros [ph.d. juan carlos he...
Libro de métodos matriciales con matlab para ingenieros [ph.d. juan carlos he...Libro de métodos matriciales con matlab para ingenieros [ph.d. juan carlos he...
Libro de métodos matriciales con matlab para ingenieros [ph.d. juan carlos he...Roman Aneudi Santos pilar
 

Similar a Sesion R (20)

Guia matlab
Guia matlabGuia matlab
Guia matlab
 
Comandos r
Comandos rComandos r
Comandos r
 
Manual r 1
Manual r 1Manual r 1
Manual r 1
 
Manual matlab 2009
Manual matlab 2009Manual matlab 2009
Manual matlab 2009
 
Cálculo Numérico Asistido con el Software Matemático MatLab.
 Cálculo Numérico Asistido con el Software Matemático MatLab. Cálculo Numérico Asistido con el Software Matemático MatLab.
Cálculo Numérico Asistido con el Software Matemático MatLab.
 
Apuntes De Matematicas Discretas
Apuntes De Matematicas DiscretasApuntes De Matematicas Discretas
Apuntes De Matematicas Discretas
 
Apuntes De Matematicas Discretas
Apuntes De Matematicas DiscretasApuntes De Matematicas Discretas
Apuntes De Matematicas Discretas
 
Apuntes De Matematicas Discretas
Apuntes De Matematicas DiscretasApuntes De Matematicas Discretas
Apuntes De Matematicas Discretas
 
Apuntes De Matematicas Discretas
Apuntes De Matematicas DiscretasApuntes De Matematicas Discretas
Apuntes De Matematicas Discretas
 
El Arte de Programar en R
El Arte de Programar en REl Arte de Programar en R
El Arte de Programar en R
 
El arte de programar en r
El arte de programar en rEl arte de programar en r
El arte de programar en r
 
Santana el arte_de_programar_en_r
Santana el arte_de_programar_en_rSantana el arte_de_programar_en_r
Santana el arte_de_programar_en_r
 
2 vectores matrices
2 vectores matrices2 vectores matrices
2 vectores matrices
 
2 vectores matrices
2 vectores matrices2 vectores matrices
2 vectores matrices
 
Areglos y registros
Areglos y registrosAreglos y registros
Areglos y registros
 
regresion
regresionregresion
regresion
 
Libro de métodos matriciales con matlab para ingenieros [ph.d. juan carlos he...
Libro de métodos matriciales con matlab para ingenieros [ph.d. juan carlos he...Libro de métodos matriciales con matlab para ingenieros [ph.d. juan carlos he...
Libro de métodos matriciales con matlab para ingenieros [ph.d. juan carlos he...
 
Manual dematlab
Manual dematlabManual dematlab
Manual dematlab
 
Matices ortogonales
Matices ortogonalesMatices ortogonales
Matices ortogonales
 
Autoestudio
AutoestudioAutoestudio
Autoestudio
 

Sesion R

  • 1. Introducci´n a R: un entorno de programaci´n o o para el an´lisis de datos y la elaboraci´n de a o gr´ficos a Juan Jos´ Gibaja Mart´ e ıns 7 de noviembre de 2008
  • 2. ´ Indice general 1. Estructuras de datos en R 3 1.1. Creaci´n y eliminaci´n de objetos. Vectores num´ricos, de car´cter o o e a y l´gicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 3 1.2. Factores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.3. Arrays y matrices . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.4. Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.5. Dataframes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.6. Bases de datos en R . . . . . . . . . . . . . . . . . . . . . . . . . 10 2. An´lisis de datos a 11 2.1. Variables aleatorias . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.2. Estad´ ıstica descriptiva univariante . . . . . . . . . . . . . . . . . 12 2.3. Estad´ ıstica para dos variables . . . . . . . . . . . . . . . . . . . . 14 2.4. Tablas en R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.5. Regresi´n lineal . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 18 2.6. An´lisis de componentes principales . . . . . . . . . . . . . . . . a 19 2.7. Ejemplo de tipolog´ de Comunidades Aut´nomas con el paque- ıa o te ade4 (Cuidado: Antes de utilizar el package ade4 es preciso instalarlo) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.8. An´lisis de componentes principales con FactoMineR . . . . . . . a 20 3. Varios 22 3.1. Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.2. Ayuda en R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 1
  • 3. ´ INDICE GENERAL 2 3.3. Establecer el directorio de trabajo . . . . . . . . . . . . . . . . . 23 ´ 3.4. Area de trabajo en R (Workspace) . . . . . . . . . . . . . . . . . 23 3.5. Hist´rico de comandos . . . . . . . . . . . . . . . . . . . . . . . . o 23 3.6. Ejecuci´n de comandos desde un archivo de texto . . . . . . . . . o 24 3.7. Trabajo con gr´ficos . . . . . . . . . . . . . . . . . . . . . . . . . a 24
  • 4. Cap´ ıtulo 1 Estructuras de datos en R 1.1. Creaci´n y eliminaci´n de objetos. Vectores o o num´ricos, de car´cter y l´gicos e a o Todo en R son objetos. ¿De qu´ objetos disponemos en este momento? e ls() Creamos nuestro primer objeto: un vector num´rico. Efectuamos algunas op- e eraciones sobre ´l y vemos los resultados. Como no los guardamos en ning´n e u objeto, los resultados se muestran y se pierden: x<-c(1,2,3) x sqrt(x) 1/x ls() ...y lo eliminamos rm(x) ls() Creamos otro vector, esta vez de tipo car´cter. Intentamos efectuar operaciones a num´ricas sobre ´l, pero no es posible. e e 3
  • 5. CAP´ ITULO 1. ESTRUCTURAS DE DATOS EN R 4 x<-c("Koldo","Kepa") x 1/x ¿Se pueden crear vectores mixtos?. No. Se fuerza al tipo menos restrictivo. x<-c(1.5,"Kepa") x Vamos a sumar dos vectores. El segundo s´lo tiene un elemento. ¿Qu´ ocurrir´? o e a Se repite tantas veces como sea necesario para ajustarse a la longitud del m´s a largo. N´tese que en R no existe el concepto de escalar sino como vector con un o unico elemento. ´ x<-c(1,2) y<-3 x+y Algunas funciones sobre vectores num´ricos con significados evidentes: e max(x) min(x) range(x) length(x) mean(x) # media aritm´tica e var(x) # varianza (con el divisor n-1) Los vectores l´gicos se pueden crear concatenando valores l´gicos TRUE, FALSE o o temp<-c(TRUE,FALSE,FALSE,FALSE,TRUE) temp O tambi´n mediante expresiones l´gicas (>,<,>=,<= ==, !=). ¿Son mayores e o que 13 los componentes del vector x? Algunos s´ (TRUE) y otros no (FALSE) ı temp<-x>13
  • 6. CAP´ ITULO 1. ESTRUCTURAS DE DATOS EN R 5 temp ¿C´mo se puede acceder a los elementos de un vector? Mediante un vector de o ´ ındices (entre [ ]) x<-c(10,20,30,40,50) x[1] # da como resultado el primer elemento del vector x x[c(1,2)] # proporciona los dos primeros elementos del vector x x[x>30] # nos da un vector con los elementos de x mayores que 30 x[c(-1,-2)] # nos da los elementos de x excepto los dos primeros Podemos transformar un tipo de vector en otro cx<-as.character(x) cx y<-as.numeric(cx) y 1.2. Factores Los vectores son muy importantes pero existen otras estructuras en R como los factores. Creamos un vector num´rico x y a partir de ´l definimos un factor e e fx. Vemos como el procedimiento summary() tiene diferentes efectos sobre un vector num´rico y sobre un factor. e x<-c(1,1,1,2,2,2,1,1,1) summary(x) fx<-as.factor(x) fx summary(fx) A los niveles de un factor les podemos poner etiquetas fx<-factor(x,labels=c("chico","chica"))
  • 7. CAP´ ITULO 1. ESTRUCTURAS DE DATOS EN R 6 fx summary(fx) Tambi´n podemos crear factores a partir de vectores “continuos”. Para ello e generamos una secuencia de 5000 n´meros aleatorios con una distribuci´n nor- u o mal de media 100 y desviaci´n est´ndar 10. A partir de ese vector num´rico o a e creamos un factor con la funci´n cut() estableciendo como puntos de corte o 60,70,...,140. Vemos como la funci´n plot() act´a de forma diferente sobre un o u factor (fincomes) y sobre un vector num´rico (incomes). El efecto de plot() e sobre el factor es similar al efecto de hist() -histogramas- sobre un vector num´rico. e incomes<-rnorm(5000,100,10) incomes fincomes<-cut(incomes,breaks=60+10*(0:8)) summary(fincomes) plot(fincomes) plot(incomes) hist(incomes) 1.3. Arrays y matrices Otra estructura muy importante es el array. Un caso particular de array es la matriz (array bidimensional). La definimos creando un vector y d´ndole la forma a deseada mediante su valor dim(). Como ejemplo vamos a crear una matriz de dos filas y tres columnas. x<-c(1,2,3,4,5,6) dim(x)<-c(2,3) x x[1,1] x[1,2] x[1,] x[,1] x[,] x
  • 8. CAP´ ITULO 1. ESTRUCTURAS DE DATOS EN R 7 1.4. Listas Las listas son una generalizaci´n del concepto de vector. Mientras estos deben o constar de componentes homog´neos en cuanto a su tipo, las listas pueden estar e formadas por componentes de distintos tipos: ingresos<-rnorm(5000,100,10) gastos<-rnorm(5000,80,10) lista1<-list(ingresos,gastos) lista1 patrimonio<-rnorm(5000,1000,10) lista2<-list(lista1,patrimonio) summary(lista2) 1.5. Dataframes Muy similares a las listas son los dataframes. Son las estructuras m´s utilizadas a en R para recoger los datos m´s habituales en Estad´ a ıstica, aquellos en los que contamos con un conjunto de n individuos para cada uno de los cuales hemos obtenido los valores en k variables, que pueden ser de distinta naturaleza. df1<-data.frame(ingresos,gastos,patrimonio) df1 summary(df1) plot(df1) Para referirnos a las variables de un dataframe debemos escribir dataframe$variable. No obstante, se puede obtener una copia de las variables de un dataframe me- diante el comando attach(). Cuidado: los cambios que se efect´en sobre estas u variables no afectan al dataframe. Para eliminar las variables de memoria em- pleamos el comando detach(). attach(df1) detach(df1)
  • 9. CAP´ ITULO 1. ESTRUCTURAS DE DATOS EN R 8 La forma m´s c´moda de introducir datos en R es mediante la lectura de un a o fichero de datos externo (normalmente en formato texto). Para ello construimos un fichero en cuya primera fila se recogen los nombres de las variables de los datos separados por un espacio en blanco. En cada una de las restantes filas se incluye una etiqueta de la fila y los datos del individuo correspondiente en cada una de las variables separados tambi´n por espacios en blanco. Un ejemplo es e el siguiente: Peso Altura Edad Sexo "Koldo" 80 175 18 "chico" "Luis" 75 182 19 "chico" "Nerea" 63 164 42 "chica" "Juanjo" 85 177 34 "chico" "Amaia" 59 160 34 "chica" "Ainhoa" 45 167 19 "chica" "Uxue" 52 170 17 "chica" N´tese que tanto los nombres de las filas como los valores de las variables cuali- o tativas deben introducirse entrecomillados. No as´ los nombres de las variables. ı Para leer los datos utilizamos el comando read.table(). El resultado es un objeto de la clase dataframe. En este caso, creamos el dataframe DatosPeso y creamos una copia de sus variables mediante el comando attach(): DatosPeso<-read.table("DatosPeso.txt", header=TRUE) DatosPeso attach(DatosPeso) A continuaci´n empleamos algunos comandos de estad´ o ıstica descriptiva como summary(), plot() e hist(): summary(Peso) plot(Peso) hist(Peso) Especialmente util es el comando tapply() que calcula el estad´ ´ ıstico recogido en su tercer argmento a los datos de la variable recogida en su primer argumento en los grupos formados por el segundo argumento. Los siguientes comandos calculan la media -mean- del Peso y la Altura para los distintos valores de la variable Sexo:
  • 10. CAP´ ITULO 1. ESTRUCTURAS DE DATOS EN R 9 tapply(Peso,Sexo,mean) tapply(Altura,Sexo,mean) Podemos modificar un dataframe mediante el comando fix(). Podemos probar, por ejemplo, a a˜adir nuevos individuos -nuevas filas- al dataframe. n fix(DatosPeso) DatosPeso Sin embargo, el n´mero de individuos de la variable Peso no ha cambiado. ¿Por u qu´? e length(Peso) ¿Qu´ ocurrira si hacemos attach(DatosPeso) y volvemos a ver cu´ntos indi- e a viduos tenemos ahora? ¿Por qu´? e length(Peso) Puede construirse un dataframe desde cero introduciendo los datos desde el teclado. El siguiente comando abre una ventana en forma de hoja de c´lculo. Al a cerrarla el resultado se guardar´ como un dataframe en el objeto Data: a Data<-edit(data.frame()) Para exportar un dataframe de R a un documento de texto deber´ ıamos escribir la siguiente l´ ınea de comando: write.table(df1,file="nombrearchivo.txt") Asimismo podr´ ıamos exportar dicho dataframe de R a un documento de formato csv con la siguiente l´ ınea de comando: write.csv(df1,file="nombrearchivo.csv")
  • 11. CAP´ ITULO 1. ESTRUCTURAS DE DATOS EN R 10 1.6. Bases de datos en R R dispone de gran cantidad de bases de datos a cuyo listado se puede acceder mediante el comando data(): data() Para acceder a una base de datos concreta basta con teclear su nombre -si est´ accesible en alguno de los packages cargados en R- a WorldPhones class(WorldPhones) cars Si queremos ver las bases de datos disponibles en alg´n otro package debe- u mos emplear el comando data(package="package"). Por ejemplo, el siguiente comando nos proporciona la lista de bases de datos disponibles en el package survival. data(package="survival") Para cargar los datos de una base de datos de un package no cargado en memoria debemos emplear el comando data(database,package="package"): data(tobin,package="survival") tobin class(tobin)
  • 12. Cap´ ıtulo 2 An´lisis de datos a 2.1. Variables aleatorias R dispone de una calculadora de variables aleatorias. Con ella podemos generar vectores de n´meros aleatorios que siguen diferentes funciones de distribuci´n u o te´ricas -normal, binomial, t de Student, Chi cuadrado, F-, calcular probabili- o dades a partir de estas funciones, calcular valores cr´ ıticos, etc´tera. Por ejemplo, e el siguiente comando genera un vector de 1000 n´meros aleatorios seleccionados u de una variable aleatoria con distribuci´n binomial de par´metros n=5 y p=0.5 o a x<-rbinom(5000,5,.5) x<-factor(x) plot(x) x<-rbinom(5000,5,.5) hist(x) x<-factor(x) x summary(x) Seguimos jugando con las variables aleatorias: pnorm(2,0,1) # ¿Qu´ ´rea queda a la derecha de 2 en una N(0,1)? e a qnorm(0.95,0,1) # ¿Qu´ valor de una N(0,1) deja a su izquierda e 0,95? 11
  • 13. CAP´ ´ ITULO 2. ANALISIS DE DATOS 12 Vamos a dibujar funciones de densidad. En primer lugar creamos un vector num´rico con los n´meros desde -2 hasta +2 con un incremento de 0.001. e u x<-seq(-2,2,by=0.001) A continuaci´n calculamos la funci´n de densidad normal (0,1) para estos valores o o y la representamos gr´ficamente: a z<-dnorm(x,0,1) plot(x,z) Lo mismo para una N(0,2) w<-dnorm(x,0,2) lines(x,w) Lo mismo para una N(0,0.5) y<-dnorm(x,0,0.5) lines(x,y) 2.2. Estad´ ıstica descriptiva univariante Vamos a revisar algunos conceptos de estadistica descriptiva univariante. Para ello vamos a recurrir a una base de datos disponible en R y reativa a las erup- ciones de un geyser. El dataframe contiene dos variables, eruptions (duraci´no de la erupci´n) y waiting (tiempo entre erupciones). Mediante el nombre de la o base de datos accedemos a ella y con el comando class() comprobamos que se trata de un dataframe. A continuaci´n con el comando attach() hacemos una o copia de las variables contenidas en el dataframe. faithful class(faithful) attach(faithful) Los comandos summary() y fivenum() nos proporcionan los estad´ ısticos b´sicos a para una variable num´rica. Con el comando stem() obtenemos un diagrama e de tallos y hojas:
  • 14. CAP´ ´ ITULO 2. ANALISIS DE DATOS 13 summary(eruptions) fivenum(eruptions) stem(eruptions) A continuaci´n vamos a recodificar la variable eruptions -num´rica- para con- o e vertirla en una variable ordinal. Empleamos el comando cut() y establecemos un corte en 5 grupos. Con el comando class() verificamos que el nuevo ob- jeto creado -feruptions- es un factor. Vemos, a continuaci´n, el efecto de los o comandos summary() y plot() sobre un objeto de tipo factor: feruptions<-cut(eruptions,breaks=5) class(feruptions) summary(feruptions) plot(feruptions) Los histogramas resultan muy utiles para estudiar la distribuci´n de variables ´ o de naturaleza cuantitativa. El comando hist() proporciona el histograma de una variable. En concreto, el siguiente comando establece un histograma con 20 clases en el que las frecuencias no son absolutas sino relativas -freq=FALSE-: hist(eruptions,breaks=20,freq=FALSE) En ocasiones preferimos suavizar el histograma mediante las llamadas Estima- ciones kernel de densidad. Lo conseguimos con el comando density() para el que hemos establecido un ancho de banda de 0,1. Puede ser interesante jugar con el valor de bw y ver el efecto sobre el gr´fico: a lines(density(eruptions,bw=0.1)) La inspecci´n del histograma nos hace ver que los datos no siguen ninguna de o las distribuciones te´ricas habituales -normal, gamma,...- Vamos a jugar algo o m´s con los datos. ¿Para qu´ sirve el siguiente comando?: a e longeruptions<-eruptions[eruptions>=3] Comprob´moslo: e length(longeruptions) length(eruptions)
  • 15. CAP´ ´ ITULO 2. ANALISIS DE DATOS 14 Y ahora obtengamos el histograma y la estimaci´n de densidad para las erup- o ciones de al menos tres minutos de duraci´n: o hist(longeruptions,breaks=10,freq=FALSE) lines(density(longeruptions,bw=0.1)) Este histograma no es perfectamente normal pero ¿existe evidencia suiciente para rechazar que sea normal? Utilicemos el test de Kolmogorov-Smirnov: ks.test(longeruptions,"pnorm",mean(longeruptions),sqrt(var(longeruptions))) O el de Shapiro shapiro.test(longeruptions) ¡Vaya! Son contradictorios. A ver qu´ nos dice un gr´fico Q-Q: e a qqnorm(longeruptions) 2.3. Estad´ ıstica para dos variables Vamos a ver algunos comandos para estad´ıstica de dos variables. Para empezar creamos dos vectores A y B, que contienen valores de ciertas variables: A<-c(79.98,80.04,80.02,80.04,80.03,80.03,80.04,79.97,80.05,80.03,80.02,80.00,80.02) B<-c(80.02,79.94,79.98,79.97,79.97,80.03,79.95,79.97) Con el comando boxplot() obtenemos un diagrama de caja para una, dos o m´s variables: a boxplot(A) boxplot(A,B) El comando t.test() nos permite comprobar la hip´tesis nula de que la media o aritm´tica poblacional de la variable de la que se han obtenido las observaciones e de A toma el valor mu -frente a la alternativa de que la media poblacional es distinta de mu: t.test(A,mu=0)
  • 16. CAP´ ´ ITULO 2. ANALISIS DE DATOS 15 Podemos modificar la direcci´n de la hip´tesis alternativa mediante el argumento o o alternative: t.test(A,mu=0,alternative="less") El mismo comando t.test() nos permite efectuar un contraste de hip´tesis o sobre la igualdad de las medias de dos poblaciones: t.test(A,B) Por defecto, el comando t.test() asume que existe heterocedasticidad y por tanto lleva a cabo la conocida como aproximaci´n de Welch -n´tese que los o o grados de libertad no son un n´mero entero-. u Pero, no tenemos por qu´ suponer heterocedasticidad. Vemos qu´ nos dice el co- e e mando var.test(). Con ´l conseguimos efectuar el contraste sobre la igualdad e de las varianzas poblacionales de dos variables. var.test(A,B) Como el resultado del test de igualdad de varianzas no arroja evidencia emp´ ıri- ca suficiente como para rechazar la hip´tesis de igualdad de varianzas pode- o mos modificar el comando t.test() mediante el argumento var.equal=TRUE. Se calcula de este modo una varianza estimada com´n a partir de las varianzas u muestrales de cada una de las variables: t.test(A,B,var.equal=TRUE) Para aplicar el test de la t de Student debemos suponer que los datos provienen de una variable con distribuci´n normal -o aplicar el teorema central del l´ o ımite- Si esto no es as´ -o el teorema no es aplicable-, es mejor recurrir a la prueba no ı param´trica correspondiente: e wilcox.test(A,B) Una utilidad adicional de la prueba de Kolmogorov-Smirnov es la de contrastar que dos conjuntos de datos provienen de la misma poblaci´n. ¿Es as´ en nuestro o ı caso? ks.test(A,B)
  • 17. CAP´ ´ ITULO 2. ANALISIS DE DATOS 16 2.4. Tablas en R Vamos a echar un vistazo a las tablas en R. Por ejemplo, la base de datos Titanic es de la clase tabla, como podemos comprobar con el comando class(): Titanic class(Titanic) El comando summary() proporciona -cuando se aplica sobre una tabla- la prueba de hip´tesis Chi cuadrado sobre la independencia de las variables que componen o las dimensiones de la tabla: summary(Titanic) Especialmente interesante es el comando plot() aplicado sobre tablas: plot(Titanic) El comando mosaicplot() nos permite obtener representaciones parciales de la tabla total: mosaicplot(~ Sex + Age, data=Titanic) Vamos, a continuaci´n, a extraer algunas subtablas de la tabla global. En con- o creto, creamos la tabla AgeSurvived a partir de las variables 3 y 4 de la tabla Titanic. Igualmente, obtenemos la tabla ClassSex a partir de las variables 1 y 2 de la tabla Titanic: AgeSurvived<-margin.table(Titanic,c(3,4)) ClassSex<-margin.table(Titanic,c(1,2)) ClassSex AgeSurvived Ahora podemos utilizar el comando assocplot() con el fin de obtener una rep- resentaci´n gr´fica de la desviaci´n respecto a la independencia de las variables o a o consideradas. Este comando s´lo puede emplearse para tablas de contingencia o de dos variables: assocplot(ClassSex)
  • 18. CAP´ ´ ITULO 2. ANALISIS DE DATOS 17 assocplot(AgeSurvived) summary(ClassSex) summary(AgeSurvived) Seguimos extrayendo tablas. ¿Qu´ ocurri´ con el Titanic? e o ClassSurvived<-margin.table(Titanic,c(1,4)) summary(ClassSurvived) assocplot(ClassSurvived) En nuestro repaso de las tablas en R hemos partido de una base de datos con formato de tabla -la base de datos Titanic- pero ¿c´mo podemos construir o una tabla a partir de datos de un dataframe -por ejemplo-? Para verlo vamos a emplear la base de datos cars -que es de la clase dataframe-: cars attach(cars) Para empezar creamos dos factores a partir de las variables num´ricas: e fdist<-cut(dist,breaks=5) fspeed<-cut(speed,breaks=5) El comando table() nos da como resultado un objeto de la clase tabla, que en esta ocasi´n se guarda con el nombre de DistSpeed: o DistSpeed<-table(fdist,fspeed) DistSpeed plot(DistSpeed) summary(DistSpeed) assocplot(DistSpeed)
  • 19. CAP´ ´ ITULO 2. ANALISIS DE DATOS 18 2.5. Regresi´n lineal o La regresi´n lineal la efectuamos en R mediante el comando lm(). Su resultado o es un objeto de la clase lista, al que podemos aplicar otros comandos de la siguiente forma: lr1<-lm(dist~speed) summary(lr1) anova(lr1) plot(lr1) Para obtener el diagrama de dispersi´n de las variables recurrimos al comando o plot() y a˜adimos una l´ n ınea recta -la recta de regresi´n- mediante el comando o abline() al que le pasamos los valores correspondientes del objeto lr1 -que es el que almacena los resultados del ajuste lineal-: plot(speed,dist) abline(lr1) Podemos estudiar la existencia de observaciones influyentes mediante el coman- do influenc.measures() tomado como argumento unico el objeto que guarda ´ los resultados de la regresi´n: o influence.measures(lr1) Para terminar con la regresi´n veamos un ejemplo de regresi´n lineal m´ltiple o o u -trabajamos con la base de datos LifeCycleSavings-. Es especialmente intere- sante ver la sintaxis de la formula que recoge la relaci´n entre las variables o ex´genas y end´gena: o o LifeCycleSavings fm1 <- lm(sr ~ pop15 + pop75 + dpi + ddpi, data = LifeCycleSavings) summary(fm1) anova(fm1)
  • 20. CAP´ ´ ITULO 2. ANALISIS DE DATOS 19 2.6. An´lisis de componentes principales a Vamos a ver c´mo resuelve R el an´lisis de componentes principales. Para ello o a vamos a emplear la base de datos USArrests, que recoge datos sobre detenciones efectuadas en diferentes estados de EE.UU.: USArrests plot(USArrests) # matriz de diagramas de dispersi´n o pc1<-princomp(USArrests) # guardamos los resultados del ACP en pc1 plot(pc1) #valores propios. ¿Es adecuado el ACP? biplot(pc1) #representaci´n simult´nea de variables e individuos o a pc1<-princomp(USArrests,scale=TRUE) #trabajamos con la matriz cor. biplot(pc1) summary(pc1) pc1$scores # puntuaciones de los individuos sobre los ejes 2.7. Ejemplo de tipolog´ de Comunidades Aut´no- ıa o mas con el paquete ade4 (Cuidado: Antes de utilizar el package ade4 es preciso insta- larlo) Leemos los datos y creamos el data.frame DatosComunidades. DatosComunidades<-read.table("Prueba.txt", header=TRUE) Efectuamos un an´lisis de componentes principales normado y ponderado (con la a poblaci´n de las comunidades aut´nomas) empleando el comando dudi.pca(): o o library(ade4) acp2<-dudi.pca(subset(DatosComunidades,select=-c(UE15,POBLACION)),row.w=DatosComunid Veamos el resumen de resultados:
  • 21. CAP´ ´ ITULO 2. ANALISIS DE DATOS 20 acp2 El c´ ırculo de correlaci´n: o s.corcircle(acp2$co) Las coordenadas de las Comunidades Aut´nomas en el nuevo sistema de refer- o encia: s.label(acp2$li) Ahora vamos a aplicar un algoritmo de clasificaci´n jer´rquica ascendente con el o a comando hclust(). Previamente debemos calcular la matriz de distancias entre las Comunidades Aut´nomas para lo que nos valdremos del comando dist(): o dist1<-dist(subset(DatosComunidades,select=-c(UE15,POBLACION))) dist1 clust1<-hclust(dist1) plot(clust1) 2.8. An´lisis de componentes principales con Fac- a toMineR Cargamos el package: library(FactoMineR) Efectuamos un ACP y guardamos los resultados en el objeto acp2: acp2<-PCA(subset(DatosComunidades,select=-c(UE15,POBLACION)),row.w=DatosComunidades$ Vemos los resultados referidos a los valores propios (incluidos porcentajes de inercia acumulados y sin acumular correspondientes a cada componente princi- pal): acp2$eig Los resultados para los individuos (coordenadas, contribuciones y cosenos cuadra- dos):
  • 22. CAP´ ´ ITULO 2. ANALISIS DE DATOS 21 acp2$ind Los resultados para las variables (coordenadas, correlaciones con los compo- nentes principales, contribuciones y cosenos cuadrados): acp2$var
  • 23. Cap´ ıtulo 3 Varios 3.1. Packages Las instalaciones de R consisten en un m´dulo b´sico y un conjunto de packages o a recomendados -alrededor de 25-. Sin embargo existen cientos de packages que recogen las contribuciones de la comunidad que desarrolla R as´ como de otros ı investigadores. Para ver cu´les son los packages que se encuentran instalados a en R debe utilizarse el comando library(). Este mismo comando sirve para cargar un package previamente instalado, en la forma library(package). El comando search() proporciona un listado de los packages activos. La forma m´s sencilla de instalar un nuevo package es mediante la opci´n a o Paquetes / Instalar paquetes a partir de archivos zip locales que se encuen- tra disponible en el men´ principal de R Gui. Obviamente es necesario haber u obtenido previamente el package en formato zip. 3.2. Ayuda en R La sintaxis de R es relativamente complicada. Por ese motivo es del m´ximo a inter´s disponer de una buena ayuda on-line. Esa ayuda se puede invocar de e varias maneras: help.start() #arranca el navegador y la ayuda on-line help(comando) #proporciona ayuda sobre un comando en particular help.search(caracter") #busca ayuda sobre el tema caracter" library(help=package) #proporciona ayuda sobre los comandos de un package concreto example(comando) #proporciona ejemplos sobre un comando concreto 22
  • 24. CAP´ ITULO 3. VARIOS 23 3.3. Establecer el directorio de trabajo Para conocer cu´l es el directorio de trabajo por defecto debemos utilizar la fun- a ci´n getwd(). A continuaci´n podemos establecer el nuevo directorio de trabajo o o mediante la funci´n setwd(), del siguiente modo: o setwd("c:/docs/mydir") 3.4. ´ Area de trabajo en R (Workspace) El ´rea de trabajo es el lugar donde R guarda todos los objetos que est´n activos a a en un momento dado. Se puede obtener una copia del ´rea de trabajo mediante a el comando save.image(). Si, por ejemplo, deseamos obtener una copia de todos los objetos del ´rea de a trabajo en el archivo .RData -archivo de ´rea de trabajo por defecto- deberemos a escribir: save.image() Si deseamos guardar s´lo algunos de los objetos y, adem´s, deseamos hacerlo en o a un archivo con un nombre distinto deberemos emplear el comando: save(ListaDeObjetos,file="myfile.RData") Cuando deseemos recuperar los objetos copiados en un archivo de ´rea de tra- a bajo debemos emplear la funci´n: o load("myfile.RData") 3.5. Hist´rico de comandos o Si deseamos guardar una copia de los comandos que hemos utilizado o cargarla en la memoria debemos emplear respectivamente los comandos savehistory(file = ".Rhistory") y loadhistory(file = ".Rhistory").
  • 25. CAP´ ITULO 3. VARIOS 24 3.6. Ejecuci´n de comandos desde un archivo de o texto Adem´s de trabajar interactivamente con R tambi´n es posible escribir un con- a e junto de comandos -correspondientes, por ejemplo, a un an´lisis determinado- y a ejecutar todos ellos de una sola vez -esta forma de funcionamiento se llama pro- ceso por lotes (batch processing)-. Podemos acceder a ella mediante el comando source(). Por ejemplo, el siguiente comando ejecuta los comandos recogidos en el fichero de texto MiFichero.txt situado en el directorio de trabajo : source("MiFichero.txt") 3.7. Trabajo con gr´ficos a Adem´s de ver los gr´ficos en la consola gr´fica puede interesar obtener una a a a copia de ellos para incluirlos en un documento de texto o en un informe. Para ello se puede utilizar el siguiente conjunto de comandos: jpeg("c:/MisGraficos/myplot.jpg") plot(x) dev.off() El primer comando indica a R que debe guardar una copia del gr´fico en un a archivo llamado myplot.jpg situado en el directorio C:/MisGraficos. Adem´s, a el formato del gr´fico ser´ jpg -cabe tambi´n crear gr´ficos con formato pdf, a a e a Windows Metafile, png, etc´tera-. El segundo comando recoge la generaci´n del e o gr´fico. El tercero devuelve el destino de los gr´ficos a la consola gr´fica. a a a
  • 26. Bibliograf´ ıa Berk, R.A. (2008); Statistical Learning form a Regression Perspective; Springer. Bliese, P. (2006); Multilevel Modeling in R; Burns, P. (2003); A Guide for the Unwilling S User Chambers, J.M. (2008); Software for Data Analysis. Programming with R; Springer Cohen, Y; Cohen, J.Y. (2008); Statistics and Data with R: An Applied Approach Through Examples; Wiley Cook D., Swayne D.F. (2007); Interactive and Dynamic Graphics for Data Anal- ysis; Springer. Crawley, M.J. (2007); The R Book; Wiley. Dalgaard, P. (2002); Introductory Statistics with R; Springer Everitt B.S. (2005); And R and S-Plus Companion to Multivariate Analysis; Springer. Faraway J.J. (2002); Practical Regression and Anova using R Farnsworth, G.V. (2006); Econometrics in R Galwey N.W. (2006); Introduction to Mixed Modelling. Beyond Regression and Analysis of Variance; Wiley. Gelman, A., Hill, J. (2007); Data Analysis Using Regression and Multilevel/Hierarchical Models; Cambridge University Press Kuhnert, P., Venables, B. (2005); An Introduction to R: Software for Statistical Modelling & Computing; CSIRO. Maindonald, J.H. (2008); Using R for Data Analysis and Graphics. Introuduc- tion, Code and Commentary; Australian National University Maindonald J., Braun J. (2003); Data Analysis and Graphics Using R – an Example-based Approach; Cambridge University Press. Marques de S´, J.P. (2007); Applied Statistics Using SPSS, STATISTICA, a MATLAB and R; 2nd edition; Springer. 25
  • 27. CAP´ ITULO 3. VARIOS 26 Muenchen, B. (2007); R for SAS and SPSS Users Murrel P. (2006); R Graphics; Chapman & Hall / CRC Owen, W.J. (2007); The R Guide; University of Richmond Paradis E. (2005); R for Beginners. Quen´, H. (2006); Statistics with R and S-Plus; Utrecht University e Robinson, A. (2008); icebrakeR; University of Melbourne Seefeld, K., Linder, E. (2007); Statistics using R with Biological Examples; University of New Hampshire Torgo, L. (2003); Data Mining with R: learning by case studies. Venables W..N., Smith, D.M. (2008); An Introduction to R. Notes on R: A Programming Environment for Data Analysis and Graphics. Venables W.N., Ripley B.D. (2000); S Programming; Springer. Venables W.N., Ripley B.D. (2002); Modern Applied Statistics with S 4th edi- tion Verzani, J. (2002); simpleR. Using R for Introductory Statistics Wang, K.K. (2002); R for Windows Users; Department of Statistics; New Zealand
  • 28. Recursos online P´gina del proyecto R: http://www.r-project.org/ a The Comprehensive R Archive Network: http://cran.r-project.org/ R wiki: http://wiki.r-project.org/ R news: http://cran.r-project.org/doc/Rnews/ R en Wikipedia: http://en.wikipedia.org/wiki/R_%28programming_language% 29 P´gina web de Quick-R: http://www.statmethods.net/ a R Graphical Manual: http://bm2.genes.nig.ac.jp/RGM2/index.php R video tutorials: http://www.decisionsciencenews.com/?p=261 P´gina de JGR. Java GUI for R: http://jgr.markushelbig.org/JGR.html a Resources to help you learn and use R: http://www.ats.ucla.edu/stat/R/ Rtips (consejos para trabajar con R): http://pj.freefaculty.org/R/Rtips. html R for Categorical Data Analysis: http://www.stat.ufl.edu/~presnell/Courses/ sta4504-2000sp/R/R-CDA.pdf Pagina de la conferencia useR! 2008: http://www.r-project.org/useR-2008 Statistical Analysis on the Web (RWeb): http://bayes.math.montana.edu/ Rweb/Rweb.general.html R graph gallery: http://addictedtor.free.fr/graphiques/ Statistics with R: http://zoonek2.free.fr/UNIX/48_R/all.html Serie use R de Springer: http://www.springer.com/series/6991 Curso b´sico de R de la Universidad de Barcelona: http://www.ub.es/stat/ a docencia/EADB/Curso%20basico%20de%20R.htm Curso introductorio de R de Ra´l Vaquerizo Romero: http://es.geocities. u com/r_vaquerizo/Manual_R_menu.htm 27
  • 29. CAP´ ITULO 3. VARIOS 28 A Brief Guide to R for Beginners in Econometrics: http://people.su.se/~ma/ R_intro/ Introduction to Statistical Thought: http://www.stat.duke.edu/~michael/ book.html Statistical Computing with R: a tutorial: http://www.math.ilstu.edu/dhkim/ Rstuff/Rtutor.html FactoMiner: http://factominer.free.fr/