SlideShare una empresa de Scribd logo
Introducci´n a R
          o
      Notas sobre R: Un entorno de programaci´n para An´lisis de Datos y Gr´ficos
                                             o         a                   a
                                                      Versi´n 1.0.1 (2000-05-16)
                                                            o




R Development Core Team
Copyright c 1990, 1992 W. Venables
Copyright c 1997, R. Gentleman & R. Ihaka
Copyright c 1997, 1998 M. M¨chlera
Copyright   c 2000, Andr´s Gonz´lez y Silvia Gonz´lez
                           e       a                   a
Copyright c 1999, 2000 R Development Core Team
Se autoriza la realizaci´n y distribuci´n de copias literales de este manual, siempre y cuando
                        o              o
las advertencias del copyright y de este permiso se conserven en todas las copias.
Se autoriza la realizaci^^f3n y distribuci´n de copias modificadas de este manual, en las mis-
                                          o
mas condiciones de las copias literales, siempre y cuando la totalidad del trabajo resultante
se distribuya bajo los t´rminos de una advertencia de permiso id^^e9ntica a esta.
                         e
Se autoriza la realizaci^^f3n y distribuci´n de traducciones de este manual a otros idiomas,
                                          o
en las mismas condiciones de las copias modificadas, siempre y cuando la traducci´n de la
                                                                                       o
advertencia de este permiso sea aprobada por el Equipo Central de Desarrollo de R.
i



´
Indice General

Pr´logo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
  o

1    Introducci´n y Preliminares . . . . . . . . . . . . . . . . 2
               o
        1.1  El entorno R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .          2
        1.2  Programas relacionados. Documentaci´n . . . . . . . . . . . . . . . . . .
                                                                                o                                          2
        1.3  Estad´ıstica con R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .              2
        1.4  R en un sistema de ventanas . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                         3
        1.5  Utilizaci´n interactiva de R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
                        o                                                                                                  3
        1.6  Una sesi´n inicial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
                        o                                                                                                  4
        1.7  Ayuda sobre funciones y capacidades . . . . . . . . . . . . . . . . . . . . .                                 4
        1.8  ´
             Ordenes de R. May´sculas y min´sculas. . . . . . . . . . . . . . . . . . .
                                            u                         u                                                    5
        1.9  Recuperaci´n y correcci´n de ´rdenes previas . . . . . . . . . . . . . .
                             o                       o          o                                                          5
        1.10  Ejecuci´n de ´rdenes desde un archivo y redirecci´n de la
                        o           o                                                                 o
            salida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   5
        1.11 Almacenamiento y eliminaci´n de objetos . . . . . . . . . . . . . . . .
                                                               o                                                           6

2    C´lculos sencillos. N´ meros y vectores . . . . . . 7
      a                   u
        2.1 Vectores (num´ricos). Asignaci´n . . . . . . . . . . . . . . . . . . . . . . . . . 7
                                       e                             o
        2.2 Aritm´tica vectorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
                       e
        2.3 Generaci´n de sucesiones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
                            o
        2.4 Vectores l´gicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
                              o
        2.5 Valores faltantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
        2.6 Vectores de caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
        2.7 Vectores de ´          ındices. Selecci´n y modificaci´n de subvectores
                                                              o                           o
            . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
        2.8 Clases de objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

3    Objetos: Modos y atributos . . . . . . . . . . . . . . . 14
        3.1     Atributos intr´
                              ınsecos: modo y longitud . . . . . . . . . . . . . . . . . . .                            14
        3.2     Modificaci´n de la longitud de un objeto . . . . . . . . . . . . . . . . .
                          o                                                                                             15
        3.3     Obtenci´n y modificaci´n de atributos . . . . . . . . . . . . . . . . . . .
                        o                   o                                                                           15
        3.4     Clases de objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .         15

4    Factores Nominales y Ordinales. . . . . . . . . . . . 17
        4.1 Un ejemplo espec´               ıfico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
        4.2 La funci´n tapply(). Variables desastradas (ragged arrays)
                           o
            . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
        4.3 Factores ordinales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
ii

5   Variables indexadas. Matrices . . . . . . . . . . . . . 20
      5.1     Variables indexadas (Arrays) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
      5.2     Elementos de una variable indexada . . . . . . . . . . . . . . . . . . . . . 20
      5.3     Uso de variables indexadas como ´                             ındices . . . . . . . . . . . . . . . . . 21
      5.4     La funci´n array() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
                             o
                  5.4.1 Operaciones con variables indexadas y vectores.
                           Reciclado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
      5.5     Producto exterior de dos variables indexadas . . . . . . . . . . . . . 23
                  Ejemplo: Distribuci´n del determinante de una matriz de
                                                       o
                           d´ıgitos de 2 × 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
      5.6     Traspuesta generalizada de una variable indexada . . . . . . . . . 24
      5.7     Operaciones con matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
                  5.7.1 Producto matricial. Inversa de una matriz.
                           Resoluci´n de sistemas lineales . . . . . . . . . . . . . . . . . . . . 24
                                          o
                  5.7.2 Autovalores y autovectores . . . . . . . . . . . . . . . . . . . . . 25
                  5.7.3 Descomposici´n en valores singulares. Determinantes
                                                        o
                            . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
                  5.7.4 Ajuste por m´                   ınimos cuadrados. Descomposici´n QR                         o
                            . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
      5.8     Submatrices. Funciones cbind() y rbind(). . . . . . . . . . . . . . 26
      5.9     La funci´n de concatenaci´n, c(), con variables indexadas
                             o                                o
              . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
      5.10      Tablas de frecuencias a partir de factores. . . . . . . . . . . . . . . . 27

6   Listas y hojas de datos . . . . . . . . . . . . . . . . . . . . 28
      6.1 Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .       28
      6.2 Construcci´n y modificaci´n de listas . . . . . . . . . . . . . . . . . . . .
                         o                           o                                                                   29
            6.2.1 Concatenaci´n de listas . . . . . . . . . . . . . . . . . . . . . . . .
                                             o                                                                           29
      6.3 Hojas de datos (Data frames) . . . . . . . . . . . . . . . . . . . . . . . . . . .                             29
            6.3.1 Construcci´n de hojas de datos . . . . . . . . . . . . . . . . .
                                          o                                                                              29
            6.3.2 Funciones attach() y detach() . . . . . . . . . . . . . . . .                                          30
            6.3.3 Trabajo con hojas de datos . . . . . . . . . . . . . . . . . . . . .                                   31
            6.3.4 Conexi´n de listas arbitrarias . . . . . . . . . . . . . . . . . . .
                                   o                                                                                     31
            6.3.5 Gesti´n de la trayectoria de b´squeda . . . . . . . . . . .
                                o                                            u                                           31

7   Lectura de datos de un archivo . . . . . . . . . . . . 33
      7.1 La funci´n read.table() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
                  o                                                                                                      33
      7.2 La funci´n scan() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
                  o                                                                                                      34
      7.3 Acceso a datos internos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                      35
            7.3.1 Acceso a datos de una biblioteca . . . . . . . . . . . . . . . .                                       35
      7.4 Edici´n de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
               o                                                                                                         36
      7.5 C´mo importar datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
           o                                                                                                             36

8   Distribuciones probabil´
                           ısticas . . . . . . . . . . . . . . 37
      8.1     Tablas estad´
                          ısticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
      8.2     Estudio de la distribuci´n de unos datos . . . . . . . . . . . . . . . . . 38
                                         o
      8.3     Contrastes de una y de dos muestras . . . . . . . . . . . . . . . . . . . . . 41
iii

9    Ciclos. Ejecuci´n condicional . . . . . . . . . . . . . . 44
                    o
       9.1 Expresiones agrupadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                    44
           ´
       9.2 Ordenes de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                 44
             9.2.1 Ejecuci´n condicional: la orden if . . . . . . . . . . . . . .
                           o                                                                                            44
                            ´
             9.2.2 Ciclos: Ordenes for, repeat y while . . . . . . . . . . .                                            44

10    Escritura de nuevas funciones . . . . . . . . . . . . 46
       10.1 Ejemplos elementales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
       10.2 C´mo definir un operador binario. . . . . . . . . . . . . . . . . . . . . . . 47
              o
       10.3 Argumentos con nombre. Valores predeterminados . . . . . . . 47
       10.4 El argumento ‘...’ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
       10.5 Asignaciones dentro de una funci´n . . . . . . . . . . . . . . . . . . . . . 48
                                                                  o
       10.6 Ejemplos m´s complejos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
                          a
             10.6.1 Factores de eficiencia en dise˜o en bloques . . . . . . 49
                                                                           n
             10.6.2 C´mo eliminar los nombres al imprimir una variable
                         o
                  indexada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
             10.6.3 Integraci´n num´rica recursiva . . . . . . . . . . . . . . . . . 50
                                      o             e
            ´
       10.7 Ambito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
       10.8 Personalizaci´n del entorno . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
                            o
       10.9 Clases. Funciones gen´ricas. Orientaci´n a objetos . . . . . . . 54
                                             e                             o

11    Modelos estad´
                   ısticos en R . . . . . . . . . . . . . . . . 55
       11.1   Definici´n de modelos estad´
                            o                                     ısticos. F´rmulas . . . . . . . . . . . . 55
                                                                                   o
                11.1.1 Contrastes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
       11.2 Modelos lineales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
       11.3 Funciones gen´ricas de extracci´n de informaci´n del modelo
                                        e                               o                            o
            . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
       11.4 An´lisis de varianza. Comparaci´n de modelos . . . . . . . . . . 60
                    a                                                     o
                11.4.1 Tablas ANOVA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
       11.5 Actualizaci´n de modelos ajustados . . . . . . . . . . . . . . . . . . . . . 61
                                   o
       11.6 Modelos lineales generalizados . . . . . . . . . . . . . . . . . . . . . . . . . . 61
                11.6.1 Familias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
                11.6.2 La funci´n glm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
                                              o
       11.7 Modelos de M´               ınimos cuadrados no lineales y de M´xima                           a
           verosimilitud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
                11.7.1 M´          ınimos cuadrados . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
                11.7.2 M´xima verosimilitud . . . . . . . . . . . . . . . . . . . . . . . . . 67
                                   a
       11.8 Algunos modelos no-est´ndar . . . . . . . . . . . . . . . . . . . . . . . . . . 67
                                                          a
iv

12   Procedimientos gr´ficos . . . . . . . . . . . . . . . . . . 69
                      a
     12.1    Funciones gr´ficas de nivel alto . . . . . . . . . . . . . . . . . . . . . . . . . 69
                               a
              12.1.1 La funci´n plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
                                        o
              12.1.2 Representaci´n de datos multivariantes . . . . . . . . . 70
                                                 o
              12.1.3 Otras representaciones gr´ficas . . . . . . . . . . . . . . . . 70
                                                                        a
              12.1.4 Argumentos de las funciones gr´ficas de nivel alto             a
                    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
     12.2    Funciones gr´ficas de nivel bajo . . . . . . . . . . . . . . . . . . . . . . . . 72
                               a
              12.2.1 Anotaciones matem´ticas . . . . . . . . . . . . . . . . . . . . . 74
                                                              a
              12.2.2 Fuentes vectoriales Hershey. . . . . . . . . . . . . . . . . . . . 74
     12.3    Funciones gr´ficas interactivas . . . . . . . . . . . . . . . . . . . . . . . . . . 74
                               a
     12.4    Uso de par´metros gr´ficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
                            a                   a
              12.4.1 Cambios permanentes. La funci´n par() . . . . . . . 76         o
              12.4.2 Cambios temporales. Argumentos de las funciones
                   gr´ficas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
                      a
     12.5    Par´metros gr´ficos habituales . . . . . . . . . . . . . . . . . . . . . . . . . 76
                a                 a
              12.5.1 Elementos gr´ficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
                                                 a
              12.5.2 Ejes y marcas de divisi´n. . . . . . . . . . . . . . . . . . . . . . 78
                                                                    o
              12.5.3 M´rgenes de las figuras . . . . . . . . . . . . . . . . . . . . . . . 78
                             a
              12.5.4 Figuras m´ltiples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
                                            u
     12.6    Dispositivos gr´ficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
                                   a
              12.6.1 Inclusi´n de gr´ficos PostScript en documentos . . 81
                                     o               a
              12.6.2 Dispositivos gr´ficos m´ltiples . . . . . . . . . . . . . . . . . 82
                                                     a              u
     12.7    Gr´ficos din´micos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
               a              a

Apendice A              Primera sesi´n con R . . . . . . . . . . . 84
                                    o

Apendice B              Ejecuci´n de R . . . . . . . . . . . . . . . . . 88
                               o
     B.1    Ejecuci´n de R en UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
                   o
     B.2    Ejecuci´n de R en Microsoft Windows . . . . . . . . . . . . . . . . . . . 91
                   o

Apendice C              El editor de ´rdenes . . . . . . . . . . . . 93
                                     o
     C.1    Preliminares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
     C.2    Edici´n de acciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
                 o
     C.3    Resumen del editor de l´         ıneas de ´rdenes . . . . . . . . . . . . . . . . . 93
                                                             o

Apendice D              ´
                        Indice de funciones y variables. . . 95

Apendice E              ´
                        Indice de conceptos . . . . . . . . . . . . . 98

Apendice F              Referencias . . . . . . . . . . . . . . . . . . . . 100
Pr´logo
  o                                                                                        1



Pr´logo
  o
   Estas notas sobre R est´n escritas a partir de un conjunto de notas que describ´ los
                           a                                                          ıan
entornos S y S-Plus escritas por Bill Venables y Dave Smith. Hemos realizado un peque˜o   n
n´mero de cambios para reflejar las diferencias entre R y S.
 u
   R es un proyecto vivo y sus capacidades no coinciden totalmente con las de S. En
estas notas hemos adoptado la convenci´n de que cualquier caracter´
                                         o                             ıstica que se vaya a
implementar se especifica como tal en el comienzo de la secci´n en que la caracter´
                                                             o                      ıstica es
descrita. Los usuarios pueden contribuir al proyecto implementando cualquiera de ellas.
   Deseamos dar las gracias m´s efusivas a Bill Venables por permitir la distribuci´n de
                               a                                                       o
esta versi´n modificada de las notas y por ser un defensor de R desde su inicio.
          o
   Cualquier comentario o correcci´n ser´n siempre bienvenidos. Dirija cualquier correspon-
                                  o     a
dencia a R-core@r-project.org.

Sugerencias al lector
   La primera relaci´n con R deber´ ser la sesi´n inicial del Apendice A [Ejemplo de sesion],
                    o             ıa           o
p´gina 84. Est´ escrita para que se pueda conseguir cierta familiaridad con el estilo de las
 a             a
sesiones de R y para comprobar que coincide con la versi´n actual.
                                                           o
   Muchos usuarios eligen R fundamentalmente por sus capacidades gr´ficas. Si ese es su
                                                                          a
caso, deber´ leer antes o despu´s el Cap´
            ıa                  e         ıtulo 12 [Graficos], p´gina 69, sobre capacidades
                                                                a
gr´ficas y para ello no es necesario esperar a haber asimilado totalmente las secciones
  a
precedentes.
Cap´
   ıtulo 1: Introducci´n y Preliminares
                      o                                                                      2



1 Introducci´n y Preliminares
            o

1.1 El entorno R
  R es un conjunto integrado de programas para manipulaci´n de datos, c´lculo y gr´ficos.
                                                             o             a         a
Entre otras caracter´
                    ısticas dispone de:
 • almacenamiento y manipulaci´n efectiva de datos,
                                   o
 • operadores para c´lculo sobre variables indexadas (Arrays), en particular matrices,
                       a
 • una amplia, coherente e integrada colecci´n de herramientas para an´lisis de datos,
                                               o                          a
 • posibilidades gr´ficas para an´lisis de datos, que funcionan directamente sobre pantalla
                    a             a
    o impresora, y
 • un lenguaje de programaci´n bien desarrollado, simple y efectivo, que incluye
                                  o
    condicionales, ciclos, funciones recursivas y posibilidad de entradas y salidas. (Debe
    destacarse que muchas de las funciones suministradas con el sistema est´n escritas en
                                                                             a
    el lenguaje R)
    El t´rmino “entorno” lo caracteriza como un sistema completamente dise˜ado y co-
        e                                                                          n
herente, antes que como una agregaci´n incremental de herramientas muy espec´
                                         o                                              ıficas e
inflexibles, como ocurre frecuentemente con otros programas de an´lisis de datos.
                                                                     a
    R es en gran parte un veh´
                             ıculo para el desarrollo de nuevos m´todos de an´lisis interactivo
                                                                 e           a
de datos. Como tal es muy din´mico y las diferentes versiones no siempre son totalmente
                                 a
compatibles con las anteriores. Algunos usuarios prefieren los cambios debido a los nuevos
m´todos y tecnolog´ que los acompa˜an, a otros sin embargo les molesta ya que alg´n c´digo
  e                 ıa               n                                               u o
anterior deja de funcionar. Aunque R puede entenderse como un lenguaje de programaci´n,     o
los programas escritos en R deben considerarse esencialmente ef´   ımeros.

1.2 Programas relacionados. Documentaci´n
                                       o
   R puede definirse como una nueva implementaci´n del lenguaje S desarrollado en AT&T
                                                   o
por Rick Becker, John Chambers y Allan Wilks. Muchos de los libros y manuales sobre S
son utiles para R.
    ´
   La referencia b´sica es The New S Language: A Programming Environment for Data
                    a
Analysis and Graphics de Richard A. Becker, John M. Chambers and Allan R. Wilks. Las
caracter´ısticas de la versi´n de agosto de 1991 de S est´n recogidas en Statistical Models
                            o                            a
in S editado por John M. Chambers y Trevor J. Hastie. V´ase Apendice F [Referencias],
                                                            e
p´gina 100, para referencias concretas.
 a

1.3 Estad´
         ıstica con R
   En la introducci´n a R no se ha mencionado la palabra estad´
                   o                                           ıstica, sin embargo muchas
personas utilizan R como un sistema estad´
                                         ıstico. Nosotros preferimos describirlo como un
entorno en el que se han implementado muchas t´cnicas estad´
                                                 e            ısticas, tanto cl´sicas como
                                                                               a
modernas. Algunas est´n incluidas en el entorno base de R y otras se acompa˜an en
                        a                                                           n
forma de bibliotecas (packages). El hecho de distinguir entre ambos conceptos es funda-
mentalmente una cuesti´n hist´rica. Junto con R se incluyen ocho bibliotecas (llamadas
                        o      o
Cap´
   ıtulo 1: Introducci´n y Preliminares
                      o                                                                  3



bibliotecas est´ndar) pero otras muchas est´n disponibles a trav´s de Internet en CRAN
               a                           a                    e
(http://www.r-project.org).
    Como hemos indicado, muchas t´cnicas estad´
                                   e           ısticas, desde las cl´sicas hasta la ultima
                                                                    a               ´
metodolog´ est´n disponibles en R, pero los usuarios necesitar´n estar dispuestos a traba-
          ıa,   a                                             a
jar un poco para poder encontrarlas.
    Existe una diferencia fundamental en la filosof´ que subyace en R (o S) y la de otros
                                                   ıa
sistemas estad´ısticos. En R, un an´lisis estad´
                                     a         ıstico se realiza en una serie de pasos, con
unos resultados intermedios que se van almacenando en objetos, para ser observados o
analizados posteriormente, produciendo unas salidas m´ ınimas. Sin embargo en SAS o SPSS
se obtendr´ de modo inmediato una salida copiosa para cualquier an´lisis, por ejemplo,
           ıa                                                           a
una regresi´n o un an´lisis discriminante.
            o          a


1.4 R en un sistema de ventanas
   La forma m´s conveniente de usar R es en una estaci´n de trabajo con un sistema de
               a                                          o
ventanas. Estas notas est´n escritas pensando en usuarios de estas caracter´
                           a                                                 ısticas. En
particular nos referiremos ocasionalmente a la utilizaci´n de R en un sistema X-window,
                                                        o
aunque normalmente se pueden aplicar a cualquier implementaci´n del entorno R.
                                                                o
   Muchos usuarios encontrar´n necesario interactuar directamente con el sistema opera-
                               a
tivo de su ordenador de vez en cuando. En estas notas se trata fundamentalmente de la
interacci´n con el sistema operativo UNIX. Si utiliza R bajo Microsoft Windows necesitar´
         o                                                                              a
realizar algunos peque˜os cambios.
                        n
    El ajuste del programa para obtener el m´ximo rendimiento de las cualidades parame-
                                             a
trizables de R es una tarea interesante aunque tediosa y no se considerar´ en estas notas.
                                                                         a
Si tiene dificultades busque a un experto cercano a usted.


1.5 Utilizaci´n interactiva de R
             o
   Cuando R espera la entrada de ´rdenes, presenta un s´
                                 o                     ımbolo para indicarlo. El s´
                                                                                  ımbolo
predeterminado es ‘>’, que en UNIX puede coincidir con el s´
                                                           ımbolo del sistema, por lo que
puede parecer que no sucede nada. Si ese es su caso, sepa que es posible modificar este
s´
 ımbolo en R. En estas notas supondremos que el s´
                                                 ımbolo de UNIX es ‘$’.
   Para utilizar R bajo UNIX por primera vez, el procedimiento recomendado es el siguiente:
 1. Cree un subdirectorio, por ejemplo ‘trabajo’, en el que almacenar los archivos de datos
                                    ´
    que desee analizar mediante R. Este ser´ el directorio de trabajo cada vez que utilice
                                            a
    R para este problema concreto.
          $ mkdir trabajo
          $ cd trabajo
 2. Inicie R con la orden
           $ R
 3. Ahora puede escribir ´rdenes para R (como se hace m´s adelante).
                         o                             a
 4. Para salir de R la orden es
          > q()
Cap´
   ıtulo 1: Introducci´n y Preliminares
                      o                                                                    4



    R preguntar´ si desea salvar los datos de esta sesi´n de trabajo. Puede responder yes
                 a                                      o
    (Si), no (No) o cancel (cancelar) pulsando respectivamente las letras y, n o c, en cada
    uno de cuyos casos, respectivamente, salvar´ los datos antes de terminar, terminar´
                                                  a                                         a
    sin salvar, o volver´ a la sesi´n de R. Los datos que se salvan estar´n disponibles en la
                        a          o                                     a
    siguiente sesi´n de R.
                  o
   Volver a trabajar con R es sencillo:
 1. Haga que ‘trabajo’ sea su directorio de trabajo e inicie el programa como antes:
          $ cd trabajo
          $ R
 2. D´ las ´rdenes que estime convenientes a R y termine la sesi´n con la orden q().
      e    o                                                     o
    Bajo Microsoft Windows el procedimiento a seguir es b´sicamente el mismo: Cree una
                                                             a
carpeta o directorio. Ejecute R haciendo doble click en el icono correspondiente. Seleccione
New dentro del men´ File para indicar que desea iniciar un nuevo problema (lo que eliminar´
                     u                                                                      a
todos los objetos definidos dentro del espacio de trabajo) y a continuaci´n seleccione Save
                                                                           o
dentro del men´ File para salvar esta imagen en el directorio que acaba de crear. Puede
                u
comenzar ahora los an´lisis y cuando salga de R, ´ste le preguntar´ si desea salvar la imagen
                        a                         e               a
en el directorio de trabajo.
    Para continuar con este an´lisis posteriormente basta con pulsar en el icono de la imagen
                              a
salvada, o bien puede ejecutar R y utilizar la opci´n Open dentro del men´ File para
                                                      o                           u
seleccionar y abrir la imagen salvada.

1.6 Una sesi´n inicial
            o
   Se recomienda a los lectores que deseen ver c´mo funciona R que realicen la sesi´n inicial
                                                o                                  o
dada en el Apendice A [Ejemplo de sesion], p´gina 84.
                                              a

1.7 Ayuda sobre funciones y capacidades
    R contiene una ayuda similar a la orden man de UNIX. Para obtener informaci´n sobre
                                                                                  o
una funci´n concreta, por ejemplo solve, la orden es
           o
       > help(solve)
    Una forma alternativa es
       > ?solve
    Con las funciones especificadas por caracteres especiales, el argumento deber´ ir entre
                                                                                 a
comillas, para transformarlo en una ”cadena de caracteres”:
       > help("[[")
    Podr´ utilizar tanto comillas simples como dobles, y cada una de ellas puede utilizarse
         a
dentro de la otra, como en la frase "Dijo ’Hola y adi´s’ y se march´". En estas notas
                                                        o              o
utilizaremos dobles comillas.
    En muchas versiones de R puede acceder a la ayuda escrita en formato html, escribiendo
       > help.start()
que ejecuta un lector Web (Netscape en UNIX) para leer estas p´ginas como hipertextos.
                                                                   a
En UNIX, las peticiones de ayuda posteriores se envir´n al sistema de ayuda basado en
                                                        a
html.
Cap´
   ıtulo 1: Introducci´n y Preliminares
                      o                                                                      5



   Las versiones de Microsoft Windows de R poseen otros sistemas de ayuda opcionales.
Utilice
       > ?help
para obtener detalles adicionales.

    ´
1.8 Ordenes de R. May´ sculas y min´ sculas
                     u             u
   T´cnicamente hablando, R es un lenguaje de expresiones con una sintaxis muy simple.
      e
Consecuente con sus or´    ıgenes en UNIX, distingue entre may´sculas y min´sculas, de tal
                                                                  u              u
modo que A y a son s´   ımbolos distintos y se referir´n, por tanto, a objetos distintos.
                                                      a
   Las ´rdenes elementales consisten en expresiones o en asignaciones. Si una orden consiste
         o
en una expresi´n, se eval´a, se imprime y su valor se pierde. Una asignaci´n, por el contrario,
                o          u                                                o
eval´a una expresi´n, no la imprime y guarda su valor en una variable.
    u                o
   Las ´rdenes se separan mediante punto y coma, (‘;’), o mediante un cambio de l´
          o                                                                               ınea.
Si al terminar la l´ınea, la orden no est´ sint´cticamente completa, R mostrar´ un signo de
                                         a     a                                   a
continuaci´n, por ejemplo
             o
        +
en la l´  ınea siguiente y las sucesivas y continuar´ leyendo hasta que la orden est´
                                                         a                                    e
sint´cticamente completa. El signo de continuaci´n puede ser modificado f´cilmente. En
    a                                                 o                          a
estas notas omitiremos generalmente el s´   ımbolo de continuaci´n y lo indicaremos mediante
                                                                 o
un sangrado.

1.9 Recuperaci´n y correcci´n de ´rdenes previas
              o            o     o
   Bajo muchas versiones de UNIX, R permite recuperar y ejecutar ´rdenes previas. Las
                                                                         o
flechas verticales del teclado puede utilizarse para recorrer el historial de ´rdenes. Cuando
                                                                             o
haya recuperado una orden con este procedimiento, puede utilizar las flechas horizontales
para desplazarse por ella, puede eliminar caracteres con la tecla DEL , o a˜adir nuevos ca-
                                                                             n
racteres. M´s adelante se dar´n mayores detalles, v´ase Apendice C [El editor de ordenes],
            a                 a                      e
p´gina 93.
 a
   La recuperaci´n y edici´n en UNIX pueden ser f´cilmente adaptadas. Para ello debe
                 o          o                          a
buscar en el manual de UNIX la informaci´n sobre readline.
                                            o
   Tambi´n puede utilizar el editor de textos emacs para trabajar m´s c´modamente de
          e                                                               a o
modo interactivo con R, mediante ESS.1

1.10 Ejecuci´n de ´rdenes desde un archivo y redirecci´n de
             o    o                                   o
     la salida
   Si tiene ´rdenes almacenadas en un archivo del sistema operativo, por ejemplo
             o
´rdenes.R, en el directorio de trabajo, trabajo, puede ejecutarlas dentro de una sesi´n
o                                                                                    o
de R con la orden
      > source("´rdenes.R")
                  o
   En la versi´n de Microsoft Windows, Source tambi´n est´ disponible dentro del men´
              o                                       e   a                           u
File. Por otra parte, la orden sink, como por ejemplo en
 1
     Acr´nimo en ingl´s de Emacs Speaks Statistics.
        o            e
Cap´
   ıtulo 1: Introducci´n y Preliminares
                      o                                                                     6



      > sink("resultado.lis")
enviar´ el resto de la salida, en vez de a la pantalla, al archivo del sistema operativo,
      a
resultado.lis, dentro del directorio de trabajo. La orden
      > sink()
devuelve la salida de nuevo a la pantalla.
   Si utiliza nombres absolutos de archivo en vez de nombres relativos, los resultados se
almacena´n en ellos, independientemente del directorio de trabajo.
          a

1.11 Almacenamiento y eliminaci´n de objetos
                               o
    Las entidades que R crea y manipula se denominan objetos. Estos pueden ser de mu-
chos tipos: Variables, Variables indexadas, Cadenas de caracteres, Funciones, etc. Incluso
estructuras m´s complejas construidas a partir de otras m´s sencillas.
               a                                             a
    Durante una sesi´n de trabajo con R los objetos que se crean se almacenan por nombre
                     o
(Discutiremos este proceso en la siguiente secci´n). La orden
                                                  o
       > objects()
se puede utilizar para obtener los nombres de los objetos almacenados en R. Esta funci´n    o
es equivalente a la funci´n ls(). La colecci´n de objetos almacenados en cada momento se
                         o                    o
denomina espacio de trabajo (workspace).
    Para eliminar objetos puede utilizar la orden rm, por ejemplo:
       > rm(x, y, z, tinta, chatarra, temporal, barra)
    Los objetos creados durante una sesi´n de R pueden almacenarse en un archivo para su
                                         o
uso posterior. Al finalizar la sesi´n, R pregunta si desea hacerlo. En caso afirmativo todos
                                  o
los objetos se almacenan en el archivo ‘.RData’2 en el directorio de trabajo.
    En la siguiente ocasi´n que ejecute R, se recuperar´n los objetos de este archivo as´ como
                         o                             a                                ı
el historial de ´rdenes.
                o
    Es recomendable que utilice un directorio de trabajo diferente para cada problema que
analice con R. Es muy com´n crear objetos con los nombres x e y, por ejemplo. Estos
                              u
nombres tienen sentido dentro de un an´lisis concreto, pero es muy dif´ dilucidar su
                                            a                                 ıcil
significado cuando se han realizado varios an´lisis en el mismo directorio.
                                                a




 2
     El punto inicial del nombre de este archivo indica que es invisible en UNIX.
Cap´
   ıtulo 2: C´lculos sencillos. N´meros y vectores
             a                   u                                                                       7



2 C´lculos sencillos. N´ meros y vectores
   a                   u


2.1 Vectores (num´ricos). Asignaci´n
                 e                o
   R utiliza diferentes estructuras de datos. La estructura m´s simple es el vector, que es
                                                               a
una colecci´n ordenada de n´meros. Para crear un vector, por ejemplo x, consistente en
           o                  u
cinco n´meros, por ejemplo 10.4, 5.6, 3.1, 6.4 y 21.7, use la orden
       u
        > x <- c(10.4, 5.6, 3.1, 6.4, 21.7)
   Esta es una asignaci´n en la que se utiliza la funci´n c() que, en este contexto, puede
                       o                               o
tener un n´mero arbitrario de vectores como argumento y cuyo valor es el vector obtenido
          u
mediante la concatenaci´n de todos ellos.1
                       o
     Un n´mero, por s´ mismo, se considera un vector de longitud uno.
         u           ı
   Advierta que el operador de asignaci´n, (‘<-’), no es el operador habitual, ‘=’, que se
                                        o
reserva para otro prop´sito, sino que consiste en dos caracteres, ‘<’ (‘menor que’) y ‘-’
                        o
(‘gui´n’), que obligatoriamente deben ir unidos y ’apuntan’ hacia el objeto que recibe el
     o
valor de la expresi´n.2
                   o
   La asignaci´n puede realizarse tambi´n mediante la funci´n assign(). Una forma equi-
               o                         e                 o
valente de realizar la asignaci´n anterior es
                               o
        > assign("x", c(10.4, 5.6, 3.1, 6.4, 21.7))
El operador usual, <-, puede interpretarse como una abreviatura de la funci´n assign().
                                                                           o
    Las asignaciones pueden realizarse tambi´n con una flecha apuntando a la derecha, rea-
                                            e
lizando el cambio obvio en la asignaci´n. Por tanto, tambi´n podr´ escribirse
                                      o                   e      ıa
        > c(10.4, 5.6, 3.1, 6.4, 21.7) -> x
   Si una expresi´n se utiliza como una orden por s´ misma, su valor se imprime y se pierde 3 .
                 o                                 ı
As´ pues, la orden
  ı
        > 1/x
simplemente imprime los inversos de los cinco valores anteriores en la pantalla (por supuesto,
el valor de x no se modifica).
     Si a continuaci´n hace la asignaci´n
                    o                  o
        > y <- c(x, 0, x)
crear´ un vector, y, con 11 elementos, consistentes en dos copias de x con un cero entre
     a
ambas.

 1
     Con argumentos diferentes, por ejemplo listas, la acci´n de c() puede ser diferente. Vea Secci´n 6.2.1
                                                            o                                      o
     [Concatenacion de listas], p´gina 29.
                                 a
 2
     El s´ımbolo de subrayado, ‘_’, es un sin´nimo del operador de asignaci´n, pero no aconsejamos su uti-
                                             o                             o
     lizaci´n ya que produce un c´digo menos legible.
           o                      o
 3
     Aunque, de hecho, se almacena en .Last.value hasta que se ejecute otra orden.
Cap´
   ıtulo 2: C´lculos sencillos. N´meros y vectores
             a                   u                                                        8



2.2 Aritm´tica vectorial
         e
   Los vectores pueden usarse en expresiones aritm´ticas, en cuyo caso las operaciones
                                                     e
se realizan elemento a elemento. Dos vectores que se utilizan en la misma expresi´n no
                                                                                    o
tienen por qu´ ser de la misma longitud. Si no lo son, el resultado ser´ un vector de la
               e                                                         a
longitud del m´s largo, y el m´s corto ser´ reciclado, repiti´ndolo tantas veces como sea
                 a              a          a                 e
necesario (puede que no un n´mero exacto de veces) hasta que coincida con el m´s largo.
                              u                                                   a
En particular, cualquier constante ser´ simplemente repetida. De este modo, y siendo x e
                                       a
y los vectores antes definidos, la orden
      > v <- 2*x + y + 1
genera un nuevo vector, v, de longitud 11, construido sumando, elemento a elemento, el
vector 2*x repetido 2.2 veces, el vector y, y el n´mero 1 repetido 11 veces.
                                                  u
    Los operadores aritm´ticos elementales son los habituales +, -, *, / y ^ para elevar
                           e
a una potencia. Adem´s est´n disponibles las funciones log, exp, sin, cos, tan, sqrt,
                         a     a
bien conocidas. Existen muchas m´s funciones, entre otras, las siguientes: max y min que
                                    a
seleccionan respectivamente el mayor y el menor elemento de un vector; range cuyo valor
es el vector de longitud dos, c(min(x), max(x)); length(x) que es el n´mero de elementos
                                                                      u
o longitud de x; sum(x) que es la suma de todos los elementos de x; y prod(x) que es el
producto de todos ellos.
   Dos funciones estad´
                      ısticas son mean(x), que calcula la media, esto es,
      sum(x)/length(x)
   y var(x) que calcula la cuasi-varianza, esto es,
      sum((x-mean(x))^2)/(length(x)-1)
   Si el argumento de var() es una matriz n × p, el resultado es la matriz de cuasi-
covarianzas p×p correspondiente a interpretar las filas como vectores muestrales p-variantes.
   Para ordenar un vector dispone de la funci´n sort(x) que devuelve un vector del mismo
                                             o
tama˜o que x con los elementos ordenados en orden creciente. Tambi´n dispone de order()
     n                                                            e
y de sort.list(), que produce la permutaci´n del vector que corresponde a la ordenaci´n.
                                            o                                         o

   Advierta que max y min seleccionan el mayor y el menor valor de sus argumentos, incluso
aunque estos sean varios vectores. Las funciones paralelas pmax y pmin devuelven un vector
(de la misma longitud del argumento m´s largo) que contiene en cada elemento el mayor y
                                        a
menor elemento de dicha posici´n de entre todos los vectores de entrada.
                               o
   En la mayor´ de los casos, el usuario no debe preocuparse de si los “n´meros” de un vec-
               ıa                                                        u
tor num´rico son enteros, reales o incluso complejos. Los c´lculos se realizan internamente
        e                                                  a
como n´meros de doble precisi´n, reales o complejos seg´n el caso.
       u                       o                        u
   Para trabajar con n´meros complejos, debe indicar expl´
                      u                                  ıcitamente la parte compleja.
As´
  ı
      sqrt(-17)
devuelve el resultado NaN y un mensaje de advertencia, pero
      sqrt(-17+0i)
realiza correctamente el c´lculo de la ra´ cuadrada de este n´mero complejo.
                          a              ız                  u
Cap´
   ıtulo 2: C´lculos sencillos. N´meros y vectores
             a                   u                                                        9



2.3 Generaci´n de sucesiones
            o
   En R existen varias funciones para generar sucesiones num´ricas. Por ejemplo, 1:30
                                                              e
es el vector c(1,2, ...,29,30). El operador ’dos puntos’ tiene m´xima prioridad en una
                                                                a
expresi´n, as´ por ejemplo, 2*1:15 es el vector c(2,4,6, ...,28,30). Escriba n <- 10 y
        o     ı,
compare las sucesiones 1:n-1 y 1:(n-1).
   La forma 30:1 permite construir una sucesi´n descendente.
                                             o
    La funci´n seq() permite generar sucesiones m´s complejas. Dispone de cinco argu-
            o                                        a
mentos, aunque no se utilizan todos simult´neamente. Si se dan los dos primeros indican el
                                            a
comienzo y el final de la sucesi´n, y si son los unicos argumentos, el resultado coincide con
                               o                ´
el operador ’dos puntos’, esto es, seq(2,10) coincide con 2:10.
   Los argumentos de seq(), y de muchas funciones de R, pueden darse adem´s de por
                                                                             a
posici´n, por nombre, en cuyo caso, el orden en que aparecen es irrelevante. En esta
      o
funci´n los dos primeros argumentos se pueden dar por nombre mediante from=valor-inicial
     o
y to=valor-final; por tanto seq(1,30), seq(from=1, to=30) y seq(to=30, from=1) son
formas equivalentes a 1:30.
   Los dos siguientes argumentos de seq() son by=valor y length=valor, y especifican el
’paso’ y ’longitud’ de la sucesi´n respectivamente. Si no se suministra ninguno, el valor
                                o
predeterminado es by=1 y length se calcula.
   Por ejemplo
     > seq(-5, 5, by=.2) -> s3
genera el vector c(-5.0, -4.8, -4.6, ..., 4.6, 4.8, 5.0) y lo almacena en s3 . Simi-
larmente
      > s4 <- seq(length=51, from=-5, by=.2)
genera los mismos valores y los almacena en s4.
   El quinto argumento de esta funci´n es along=vector, y si se usa debe ser el unico
                                       o                                          ´
argumento, ya que crea una sucesi´n 1, 2, ..., length(vector), o la sucesi´n vac´ si el
                                  o                                       o     ıa
vector es vac´ (lo que puede ocurrir).
             ıo
   Una funci´n relacionada con seq es rep(), que permite duplicar un objeto de formas
             o
diversas. Su forma m´s sencilla es
                    a
      > s5 <- rep(x, times=5)
que coloca cinco copias de x, una tras otra, y las almacena en s5.

2.4 Vectores l´gicos
              o
   R no solo maneja vectores num´ricos, sino tambi´n l´gicos. Los elementos de un vector
                                 e                 e o
l´gico s´lo pueden tomar dos valores: FALSE (falso) y TRUE (verdadero). Estos valores se
 o      o
representan tambi´n por F y T.
                  e
   Los vectores l´gicos aparecen al utilizar condiciones. Por ejemplo,
                 o
     > temp <- x > 13
almacena en temp un vector de la misma longitud de x y cuyos valores ser´n, respectiva-
                                                                          a
mente, T o F de acuerdo a que los elementos de x cumplan o no la condici´n indicada: ser
                                                                        o
mayores que 13.
Cap´
   ıtulo 2: C´lculos sencillos. N´meros y vectores
             a                   u                                                          10



    Los operadores l´gicos son < (menor), <= (menor o igual), > (mayor), >= (mayor o igual),
                    o
== (igual), y != (distinto). Adem´s, si c1 y c2 son expresiones l´gicas, entonces c1&c2 es
                                   a                              o
su intersecci´n (“conjunci´n”), c1|c2 es su uni´n (“disyunci´n”) y !c1 es la negaci´n de
             o             o                    o              o                      o
c1.
   Los vectores l´gicos pueden utilizarse en expresiones aritm´ticas, en cuyo caso se trans-
                 o                                            e
forman primero en vectores num´ricos, de tal modo que F se transforma en 0 y T en 1. Sin
                                e
embargo hay casos en que un vector l´gico y su correspondiente num´rico no son equiva-
                                       o                                e
lentes, como puede ver a continuaci´n.
                                    o

2.5 Valores faltantes
    En ocasiones puede que no todas las componentes de un vector sean conocidas. Cuando
falta un elemento, lo que se denomina ’valor faltante’4 , se le asigna un valor especial, NA5 .
En general, casi cualquier operaci´n donde intervenga un valor NA da por resultado NA. La
                                    o
justificaci´n es sencilla: Si no se puede especificar completamente la operaci´n, el resultado
          o                                                                   o
no podr´ ser conocido, y por tanto no estar´ disponible.
        a                                    a
   La funci´n is.na(x) crea un vector l´gico del tama˜o de x cuyos elementos s´lo valdr´n
            o                           o              n                      o        a
T si el elemento correspondiente de x es NA, y F en caso contrario.
       > z <- c(1:3,NA); ind <- is.na(z)
   N´tese que la expresi´n l´gica x == NA es distinta de is.na(x) puesto que NA no es
     o                   o o
realmente un valor, sino un indicador de una cantidad que no est´ disponible. Por tanto
                                                                a
x == NA es un vector de la misma longitud de x con todos sus elementos NA puesto que la
expresi´n l´gica es incompleta.
       o o
   Adem´s hay una segunda clase de valores “faltantes”, producidos por el c´lculo. Son los
        a                                                                  a
                    6
llamados valores NaN . Este tipo de dato no existe en S, y por tanto se confunden con NA
en S-Plus. Ejemplos de NaN son
     > 0/0
o
           > Inf - Inf
    En resumen, is.na(xx) es TRUE tanto para los valores NA como para los NaN. Para
diferenciar estos ultimos existe la funci´n is.nan(xx) que s´lo toma el valor TRUE para
                  ´                      o                  o
valores NaN.

2.6 Vectores de caracteres
   Las cadenas de caracteres, o frases, tambi´n son utilizadas en R, por ejemplo, para
                                               e
etiquetar gr´ficos. Una cadena de caracteres se construye escribiendo entre comillas la
            a
sucesi´n de caracteres que la define, por ejemplo, "Altura" o "Resultados de la tercera
      o
iteraci´n".
        o
        Los vectores de caracteres pueden concatenarse en un vector mediante la funci´n c().
                                                                                     o
    4
        En la literatura estad´
                              ıstica inglesa, “missing value”
    5
        Acr´nimo en ingl´s de “Not Available”, no disponible.
           o              e
    6
        Acr´nimo en ingl´s de “Not a Number”, esto es, “No es un n´mero”.
           o              e                                       u
Cap´
   ıtulo 2: C´lculos sencillos. N´meros y vectores
             a                   u                                                                     11



   Por otra parte, la funci´n paste() une todos los vectores de caracteres que se le sumi-
                           o
nistran y construye una sola cadena de caracteres. Tambi´n admite argumentos num´ricos,
                                                        e                           e
que convierte inmediatamente en cadenas de caracteres. En su forma predeterminada, en
la cadena final, cada argumento original se separa del siguiente por un espacio en blanco,
aunque ello puede cambiarse utilizando el argumento sep="cadena", que sustituye el espacio
en blanco por cadena, la cual podr´ ser incluso vac´
                                   ıa               ıa.
     Por ejemplo,
        > labs <- paste(c("X","Y"), 1:10, sep="")
almacena, en labs, el vector de caracteres
        c("X1", "Y2", "X3", "Y4", "X5", "Y6", "X7", "Y8", "X9", "Y10")
   Recuerde que al tener c("X", "Y") solo dos elementos, deber´ repetirse 5 veces para
                                                              a
                                    7
obtener la longitud del vector 1:10.

2.7 Vectores de ´
                ındices. Selecci´n y modificaci´n de
                                o             o
    subvectores
   Puede seleccionar un subvector de un vector a˜adiendo al nombre del mismo un vector
                                                n
de ´
   ındices entre corchetes, [ y ]. En general podr´ obtener un subvector de cualquier
                                                   a
expresi´n cuyo resultado sea un vector, sin m´s que a˜adirle un vector de ´
       o                                      a       n                   ındices entre
corchetes.
     Los vectores de ´
                     ındices pueden ser de cuatro tipos distintos:
 1. Un vector l´gico. En este caso el vector de ´
                 o                                 ındices debe tener la misma longitud que
    el vector al que refiere. S´lo se seleccionar´n los elementos correspondientes a valores
                              o                  a
    T del vector de ´
                    ındices y se omitir´ el resto. Por ejemplo,
                                       a
          > y <- x[!is.na(x)]
      almacena en y los valores no-faltantes de x, en el mismo orden. Si x tiene valores
      faltantes, el vector y ser´ m´s corto que x. An´logamente,
                                a a                  a
            > (x+1)[(!is.na(x)) & x>0] -> z
      almacena en z los elementos del vector x+1 para los que el correspondiente elemento
      de x es no-faltante y positivo.
 2. Un vector de n´meros naturales positivos. En este caso los elementos del vector de
                    u
    ´
    ındices deben pertenecer al conjunto {1, 2, . . . , length(x)}. El resultado es un vector
    formado por los elementos del vector referido que corresponden a estos ´     ındices y en
    el orden en que aparecen en el vector de ´  ındices. El vector de ´  ındices puede tener
    cualquier longitud y el resultado ser´ de esa misma longitud. Por ejemplo, x[6] es el
                                         a
    sexto elemento de x, y
          > x[1:10]
      es el vector formado por los diez primeros elementos de x, (supuesto que length(x) no
      es menor que 10). Por otra parte,

 7
     paste(..., collapse=ss) permite colapsar los argumentos en una sola cadena de caracteres separ´ndolos
                                                                                                   a
     mediante ss. Adem´s existen otras ´rdenes de manipulaci´n de caracteres. como sub y substring. Puede
                        a              o                    o
     encontrar su descripci´n en la ayuda del programa.
                           o
Cap´
   ıtulo 2: C´lculos sencillos. N´meros y vectores
             a                   u                                                                  12



             > c("x","y")[rep(c(1,2,2,1), times=4)]
      crea un vector de caracteres de longitud 16 formado por "x", "y", "y", "x" repetido
      cuatro veces.
 3. Un vector de n´meros naturales negativos. En este caso, los ´
                   u                                            ındices indican los ele-
    mentos del vector referido que deben excluirse. As´ pues,
                                                      ı
         > y <- x[-(1:5)]
      almacena en el vector y todos los elementos de x excepto los cinco primeros (suponiendo
      que x tiene al menos cinco elementos).
 4. Un vector de caracteres. Esta opci´n solo puede realizarse si el vector posee el atributo
                                      o
    names (nombres) para identificar sus componentes, en cuyo caso se comportar´ de modo
                                                                                  a
    similar al punto 2.
          > fruta <- c(5, 10, 1, 20)
          > names(fruta) <- c("naranja", "pl´tano", "manzana", "pera")
                                                  a
          > postre <- fruta[c("manzana","naranja")]
      La ventaja en este caso es que los nombres son a menudo m´s f´ciles de recordar que
                                                                  a a
      los ´
          ındices num´ricos.Esta opci´n es especialmente util al tratar de la estructura de
                     e                o                  ´
      “hoja de datos” (data frame) que veremos posteriormente.
   La variable de almacenamiento tambi´n puede ser indexada, en cuyo caso la asignaci´n
                                          e                                               o
se realiza solamente sobre los elementos referidos. La expresi´n debe ser de la forma
                                                                  o
vector[vector de ´ındices] ya que la utilizaci´n de una expresi´n arbitraria en vez del nom-
                                              o                o
bre de un vector no tiene mucho sentido.
   El vector asignado debe ser de la misma longitud que el vector de ´ındices y, en el caso
de un vector de ´ındices l´gico, debe ser de la misma longitud del vector que indexa. Por
                          o
ejemplo,
      > x[is.na(x)] <- 0
sustituye cada valor faltante de x por un cero. Por otra parte,
      > y[y < 0] <- -y[y < 0]
equivale8 a
      > y <- abs(y)

2.8 Clases de objetos
  Los vectores son el tipo b´sico de objeto en R, pero existen m´s tipos que veremos de
                            a                                   a
modo formal posteriormente.
 • Las matrices o, m´s generalmente, variables indexadas (Arrays) son generalizaciones
                     a
   multidimensionales de los vectores. De hecho, son vectores indexados por dos o m´sa
   ındices y que se imprimen de modo especial. V´ase Cap´
   ´                                              e       ıtulo 5 [Matrices y variables
   indexadas], p´gina 20.
                a
 • Los factores sirven para representar datos categ´ricos. V´ase Cap´
                                                   o        e       ıtulo 4 [Factores],
   p´gina 17.
    a
 8
     Tenga en cuenta que abs() no se comporta correctamente con n´meros complejos, en ellos deber´ usar
                                                                 u                               ıa
     Mod().
Cap´
   ıtulo 2: C´lculos sencillos. N´meros y vectores
             a                   u                                                   13



 • Las listas son una forma generalizada de vector en las cuales los elementos no tienen
   por qu´ ser del mismo tipo y a menudo son a su vez vectores o listas. Las listas
           e
   permiten devolver los resultados de los c´lculos estad´
                                            a            ısticos de un modo conveniente.
   V´ase Secci´n 6.1 [Listas], p´gina 28.
     e         o                a
 • Las hojas de datos (data frames) son estructuras similares a una matriz, en que cada
   columna puede ser de un tipo distinto a las otras. Las hojas de datos son apropiadas
   para describir ‘matrices de datos’ donde cada fila representa a un individuo y cada
   columna una variable, cuyas variables pueden ser num´ricas o categ´ricas. Muchos
                                                            e            o
   experimentos se describen muy apropiadamente con hojas de datos: los tratamientos
   son categ´ricos pero la respuesta es num´rica. V´ase Secci´n 6.3 [Hojas de datos],
             o                                e        e         o
   p´gina 29.
    a
 • Las funciones son tambi´n objetos de R que pueden almacenarse en el espacio de
                             e
   trabajo, lo que permite extender las capacidades de R f´cilmente. V´ase Cap´
                                                            a           e       ıtulo 10
   [Escritura de funciones], p´gina 46.
                              a
Cap´
   ıtulo 3: Objetos: Modos y atributos                                                                    14



3 Objetos: Modos y atributos

3.1 Atributos intr´
                  ınsecos: modo y longitud
    Las entidades que manipula R se conocen con el nombre de objetos. Por ejemplo, los
vectores de n´meros, reales o complejos, los vectores l´gicos o los vectores de caracteres.
               u                                         o
Este tipo de objetos se denominan estructuras ‘at´micas’ puesto que todos sus elementos son
                                                  o
del mismo tipo o modo, bien sea numeric 1 (num´rico), complex (complejo), logical (l´gico)
                                                  e                                    o
o character (car´cter).
                  a
    Los elementos de un vector deben ser todos del mismo modo y ´ste ser´ el modo del
                                                                       e        a
vector. Esto es, un vector ser´, en su totalidad, de modo logical, numeric, complex o
                                  a
character. La unica excepci´n a esta regla es que cualquiera de ellos puede contener el valor
                ´            o
NA. Debe tener en cuenta que un vector puede ser vac´ pero pese a ello tendr´ un modo.
                                                        ıo,                        a
As´ el vector de caracteres vac´ aparece como character(0) y el vector num´rico vac´
   ı,                             ıo                                                e       ıo
aparece como numeric(0).
    R tambi´n maneja objetos denominados listas que son del modo list (lista) y que con-
             e
sisten en sucesiones de objetos, cada uno de los cuales puede ser de un modo distinto.
Las listas se denominan estructuras ‘recursivas’ puesto que sus componentes pueden ser
asimismo listas.
    Existen otras estructuras recursivas que corresponden a los modos function (funci´n) y
                                                                                        o
expression (expresi´n). El modo function est´ formado por las funciones que constituyen R,
                     o                        a
unidas a las funciones escritas por cada usuario, y que discutiremos m´s adelante. El modo
                                                                        a
expression corresponde a una parte avanzada de R que no trataremos aqu´ excepto en lo
                                                                             ı,
m´ınimo necesario para el tratamiento de f´rmulas en la descripci´n de modelos estad´
                                           o                      o                   ısticos.
    Con el modo de un objeto designamos el tipo b´sico de sus constituyentes fundamentales.
                                                   a
Es un caso especial de un atributo de un objeto. Los atributos de un objeto suministran
informaci´n espec´
          o         ıfica sobre el propio objeto. Otro atributo de un objeto es su longitud.
Las funciones mode(objeto) y length(objeto) se pueden utilizar para obtener el modo y
longitud de cualquier estructura.
    Por ejemplo, si z es un vector complejo de longitud 100, entonces mode(z) es la cadena
"complex", y length(z) es 100.
    R realiza cambios de modo cada vez que se le indica o es necesario (y tambi´n en algunas
                                                                                 e
ocasiones en que no parece que no lo es). Por ejemplo, si escribe
       > z <- 0:9
y a continuaci´n escribe
                o
       > digitos <- as.character(z)
el vector digitos ser´ el vector de caracteres ("0", "1", "2", ..., "9"). Si a continua-
                       a
ci´n aplica un nuevo cambio de modo
  o
       > d <- as.integer(digitos)
R reconstruir´ el vector num´rico de nuevo y, en este caso, d y z coinciden.2 Existe una
               a               e
colecci´n completa de funciones de la forma as.lo-que-sea(), tanto para forzar el cambio de
       o
 1
     El modo num´rico consiste realmente en dos modos distintos, integer (entero) y double (doble precisi´n).
                   e                                                                                     o
 2
     En general, al forzar el cambio de num´rico a car´cter y de nuevo a num´rico, no se obtienen los mismos
                                             e          a                   e
     resultados, debido, entre otros, a los errores de redondeo.
Cap´
   ıtulo 3: Objetos: Modos y atributos                                                   15



modo, como para asignar un atributo a un objeto que carece de ´l. Es aconsejable consultar
                                                              e
la ayuda para familiarizarse con estas funciones.

3.2 Modificaci´n de la longitud de un objeto
             o
   Un objeto, aunque est´ “vac´ tiene modo. Por ejemplo,
                          e     ıo”,
       > v <- numeric()
almacena en v una estructura vac´ de vector num´rico. Del mismo modo, character() es
                                  ıa              e
un vector de caracteres vac´ y lo mismo ocurre con otros tipos. Una vez creado un objeto
                            ıo,
con un tama˜o cualquiera, pueden a˜adirse nuevos elementos sin m´s que asignarlos a un
             n                        n                               a
´
ındice que est´ fuera del rango previo.Por ejemplo,
                e
       > v[3] <- 17
transforma v en un vector de longitud 3, (cuyas dos primeras componentes ser´n NA). Esta
                                                                               a
regla se aplica a cualquier estructura, siempre que los nuevos elementos sean compatibles
con el modo inicial de la estructura.
   Este ajuste autom´tico de la longitud de un objeto se utiliza a menudo, por ejemplo en la
                      a
funci´n scan() para entrada de datos. (V´ase Secci´n 7.2 [La funcion scan()], p´gina 34.)
     o                                     e        o                             a
   An´logamente, puede reducirse la longitud de un objeto sin m´s que realizar una nueva
       a                                                           a
asignaci´n. Si, por ejemplo, alfa es un objeto de longitud 10, entonces
         o
       > alfa <- alfa[2 * 1:5]
lo transforma en un objeto de longitud 5 formado por los elementos de posici´n par del
                                                                                  o
objeto inicial.

3.3 Obtenci´n y modificaci´n de atributos
           o             o
    La funci´n attributes(objeto) proporciona una lista de todos los atributos no
             o
intr´
    ınsecos definidos para el objeto en ese momento. La funci´n attr(objeto, nombre)
                                                                 o
puede usarse para seleccionar un atributo espec´    ıfico. Estas funciones no se utilizan
habitualmente, sino que se reservan para la creaci´n de un nuevo atributo con fines
                                                       o
espec´ıficos, por ejemplo, para asociar una fecha de creaci´n o un operador con un objeto
                                                           o
de R. Sin embargo, es un concepto muy importante que no debe olvidar.
    La asignaci´n o eliminaci´n de atributos de un objeto debe realizarse con precauci´n, ya
               o             o                                                        o
que los atributos forman parte del sistema de objetos utilizados en R.
    Cuando se utiliza en la parte que recibe la asignaci´n, puede usarse para asociar un
                                                         o
nuevo atributo al objeto o para cambiar uno existente. Por ejemplo,
       > attr(z,"dim") <- c(10,10)
permite tratar z como si fuese una matriz de 10 × 10.

3.4 Clases de objetos
   Cada objeto pertenece a una clase, y ello permite utilizar en R programaci´n dirigida a
                                                                             o
objetos.
   Por ejemplo, si un objeto pertenece a la clase "data.frame", se imprimir´ de un modo
                                                                           a
especial; cuando le aplique la funci´n plot() ´sta mostrar´ un gr´fico de un tipo especial;
                                    o         e            a      a
Cap´
   ıtulo 3: Objetos: Modos y atributos                                                   16



y otras funciones gen´ricas, como summary(), producir´n un resultado especial; todo ello
                       e                                 a
en funci´n de la pertenencia a dicha clase.
         o
    Para eliminar temporalmente los efectos de la clase puede utilizar la funci´n unclass().
                                                                               o
Por ejemplo, si invierno pertenece a la clase "data.frame", entonces
       > invierno
escribe el objeto en la forma de la clase, parecida a una matriz, en tanto que
       > unclass(invierno)
lo imprime como una lista ordinaria. S´lo debe utilizar esta funci´n en situaciones muy
                                          o                           o
concretas, como, por ejemplo, si hace pruebas para comprender el concepto de clase y de
funci´n gen´rica.
     o      e
    Las clases y las funciones gen´ricas ser´n tratadas muy brevemente en la Secci´n 10.9
                                  e         a                                        o
[Orientacion a objetos], p´gina 54.
                           a
Cap´
   ıtulo 4: Factores Nominales y Ordinales                                                              17



4 Factores Nominales y Ordinales
   Un factor es un vector utilizado para especificar una clasificaci´n discreta de los elemen-
                                                                  o
tos de otro vector de igual longitud. En R existen factores nominales y factores ordinales.


4.1 Un ejemplo espec´
                    ıfico
   Suponga que dispone de una muestra de 30 personas de Australia1 de tal modo que su
estado o territorio se especifica mediante un vector de caracteres con las abreviaturas de los
mismos:
        > estado <- c("tas",         "sa",     "qld",    "nsw",    "nsw",    "nt", "wa", "wa",
                      "qld",         "vic",    "nsw",    "vic",    "qld",    "qld", "sa", "tas",
                      "sa",          "nt",     "wa",     "vic",    "qld",    "nsw", "nsw", "wa",
                      "sa",          "act",    "nsw",    "vic",    "vic",    "act")
   Recuerde que, para un vector de caracteres, la palabra “ordenado” indica que est´ en
                                                                                   a
orden alfab´tico.
           e
     Un factor se crea utilizando la funci´n factor():
                                          o
        > FactorEstado <- factor(estado)
     La funci´n print() trata a los factores de un modo distinto al de los vectores ordinarios:
             o
        > FactorEstado
         [1] tas sa qld nsw nsw nt wa wa qld vic nsw vic qld qld sa
        [16] tas sa nt wa vic qld nsw nsw wa sa act nsw vic vic act
        Levels: act nsw nt qld sa tas vic wa
     Puede utilizar la funci´n levels() para ver los niveles de un factor:
                            o
        > levels(FactorEstado)
        [1] "act" "nsw" "nt" "qld" "sa"                 "tas" "vic" "wa"

4.2 La funci´n tapply(). Variables desastradas (ragged
            o
    arrays)
   Como continuaci´n del ejemplo anterior, suponga que disponemos en otro vector de los
                    o
ingresos de las mismas personas (medidos con unas unidades apropiadas)
        > ingresos <- c(60, 49, 40, 61, 64, 60, 59, 54, 62, 69, 70, 42, 56,
                       61, 61, 61, 58, 51, 48, 65, 49, 49, 41, 48, 52, 46,
                       59, 46, 58, 43)
     Para calcular la media muestral para cada estado podemos usar la funci´n tapply():
                                                                           o
        > MediaIngresos <- tapply(ingresos, FactorEstado, mean)
que devuelve el vector de medias con las componentes etiquetadas con los niveles:

 1
     Para quienes no conocen la estructura administrativa de Australia, existen ocho estados y territorios
     en la misma: Australian Capital Territory, New South Wales, Northern Territory, Queensland, South
     Australia, Tasmania, Victoria, y Western Australia; y sus correspondientes abreviaturas son: act, nsw,
     nt, qld, sa, tas, vic, y wa.
Cap´
   ıtulo 4: Factores Nominales y Ordinales                                                        18



        > MediaIngresos
           act       nsw       nt     qld      sa     tas      vic       wa
        44.500 57.333 55.500 53.600 55.000 60.500 56.000 52.250
    La funci´n tapply() aplica una funci´n, en este ejemplo la funci´n mean(), a cada grupo
            o                             o                          o
de componentes del primer argumento, en este ejemplo ingresos, definidos por los niveles
del segundo argumento, en este ejemplo FactorEstado, como si cada grupo fuese un vector
por s´ solo. El resultado es una estructura cuya longitud es el n´mero de niveles del factor.
      ı                                                           u
Puede consultar la ayuda para obtener m´s detalles.
                                            a
    Suponga que ahora desea calcular las desviaciones t´ ıpicas de las medias de ingresos por
estados. Para ello es necesario escribir una funci´n en R que calcule la desviaci´n t´
                                                   o                              o ıpica de
un vector. Aunque a´n no se ha explicado en este texto c´mo escribir funciones2 , puede
                        u                                     o
admitir que existe la funci´n var() que calcula la varianza muestral o cuasi-varianza, y que
                             o
la funci´n buscada puede construirse con la asignaci´n:
         o                                            o
        > StdErr <- function(x) sqrt(var(x)/length(x))
Ahora puede calcular los valores buscados mediante
        > ErrorTipicoIngresos <- tapply(ingresos, FactorEstado, StdErr)
con el siguiente resultado:
        > ErrorTipicoIngresos
              act         nsw         nt       qld         sa        tas        vic        wa
        1.500000 4.310195 4.500000 4.106093 2.738613 0.500000 5.244044 2.657536
    Como ejercicio puede calcular el intervalo de confianza al 95% de la media de ingresos por
estados. Para ello puede utilizar la funci´n tapply(), la funci´n length() para calcular los
                                          o                     o
tama˜os muestrales, y la funci´n qt() para encontrar los percentiles de las distribuciones t
      n                           o
de Student correspondientes.
    La funci´n tapply() puede utilizarse para aplicar una funci´n a un vector indexado por
             o                                                    o
diferentes categor´ simult´neamente. Por ejemplo, para dividir la muestra tanto por el
                    ıas        a
estado como por el sexo. Los elementos del vector se dividir´n en grupos correspondientes
                                                               a
a las distintas categor´ y se aplicar´ la funci´n a cada uno de dichos grupos. El resultado
                         ıas           a        o
es una variable indexada etiquetada con los niveles de cada categor´  ıa.
                                    3
    La combinaci´n de un vector con un factor para etiquetarlo, es un ejemplo de lo que se
                  o
llama variable indexada desastrada (ragged array) puesto que los tama˜os de las subclases
                                                                          n
son posiblemente irregulares. Cuando estos tama˜os son iguales la indexaci´n puede hacerse
                                                   n                          o
impl´ıcitamente y adem´s m´s eficientemente, como veremos a continuaci´n.
                          a    a                                            o

4.3 Factores ordinales
   Los niveles de los factores se almacenan en orden alfab´tico, o en el orden en que se
                                                               e
especificaron en la funci´n factor si ello se hizo expl´
                         o                              ıcitamente.
   A veces existe una ordenaci´n natural en los niveles de un factor, orden que deseamos
                                 o
tener en cuenta en los an´lisis estad´
                          a          ısticos. La funci´n ordered() crea este tipo de factores
                                                      o
y su uso es id´ntico al de la funci´n factor. Los factores creados por la funci´n factor los
              e                    o                                           o
denominaremos nominales o simplemente factores cuando no haya lugar a confusi´n, y los
                                                                                    o
 2
     La escritura de funciones ser´ tratada en Cap´
                                  a               ıtulo 10 [Escritura de funciones], p´gina 46.
                                                                                      a
 3
     En general de una variable indexada
Cap´
   ıtulo 4: Factores Nominales y Ordinales                                               19



creados por la funci´n ordered() los denominaremos ordinales. En la mayor´ de los casos
                    o                                                         ıa
la unica diferencia entre ambos tipos de factores consiste en que los ordinales se imprimen
   ´
indicando el orden de los niveles. Sin embargo los contrastes generados por los dos tipos de
factores al ajustar Modelos lineales, son diferentes.
Cap´
   ıtulo 5: Variables indexadas. Matrices                                                     20



5 Variables indexadas. Matrices

5.1 Variables indexadas (Arrays)
    Una variable indexada (array) es una colecci´n de datos, por ejemplo num´ricos, inde-
                                                    o                                e
xada por varios ´ ındices. R permite crear y manipular variables indexadas en general y en
particular, matrices.
    Un vector de dimensiones es un vector de n´meros enteros positivos. Si su longitud es k
                                                  u
entonces la variable indexada correspondiente es k–dimensional. Los elementos del vector
de dimensiones indican los l´ ımites superiores de los k ´
                                                         ındices. Los l´ımites inferiores siempre
valen 1.
    Un vector puede transformarse en una variable indexada cuando se asigna un vector
de dimensiones al atributo dim. Supongamos, por ejemplo, que z es un vector de 1500
elementos. La asignaci´n o
       > dim(z) <- c(3,5,100)
hace que R considere a z como una variable indexada de dimensi´n 3 × 5 × 100.
                                                                      o
    Existen otras funciones, como matrix() y array(), que permiten asignaciones m´s            a
sencillas y naturales, como se ver´ en la Secci´n 5.4 [La funcion array()], p´gina 22.
                                    a            o                               a
    Los elementos del vector pasan a formar parte de la variable indexada siguiendo la regla1
de que el primer ´ ındice es el que se mueve m´s r´pido y el ultimo es el m´s lento.
                                                a a            ´               a
    Por ejemplo, si se define una variable indexada, a, con vector de dimensiones c(3,4,2),
la variable indexada tendr´ 3×4×2 = 24 elementos que se formar´n a partir de los elementos
                            a                                       a
originales en el orden a[1,1,1], a[2,1,1], ..., a[2,4,2], a[3,4,2].

5.2 Elementos de una variable indexada
    Un elemento de una variable indexada puede referirse dando el nombre de la variable y,
entre corchetes, los ´ ındices que lo refieren, separados por comas.
    En general, puede referir una parte de una variable indexada mediante una sucesi´n de o
vectores ´ındices, teniendo en cuenta que si un vector ´ındice es vac´ equivale a utilizar todo
                                                                      ıo,
el rango de valores para dicho ´  ındice.
    As´ en el ejemplo anterior, a[2,,] es una variable indexada 4×2, con vector de dimensi´n
       ı,                                                                                    o
c(4,2) y sus elementos son
       c(a[2,1,1], a[2,2,1], a[2,3,1], a[2,4,1],
          a[2,1,2], a[2,2,2], a[2,3,2], a[2,4,2])
en ese orden. A su vez, a[,,] equivale a la variable completa, que coincide con omitir
completamente los ´   ındices y utilizar simplemente a.
    Para cualquier variable indexada, por ejemplo Z, el vector de dimensi´n puede referirse
                                                                             o
expl´ıcitamente mediante dim(Z) (en cualquiera de las dos partes de una asignaci´n).  o
    Asimismo, si especifica una variable indexada con un solo ´      ındice o vector ´
                                                                                    ındice, s´lo
                                                                                             o
se utilizan los elementos correspondientes del vector de datos, y el vector de dimensi´n se
                                                                                          o
ignora. En caso de que el ´   ındice no sea un vector, sino a su vez una variable indexada, el
tratamiento es distinto, como ahora veremos.
 1
     Esta regla es la que se utiliza en el lenguaje   Fortran
Cap´
   ıtulo 5: Variables indexadas. Matrices                                                  21



5.3 Uso de variables indexadas como ´
                                    ındices
   Una variable indexada puede utilizar no s´lo un vector de ´
                                              o                 ındices, sino incluso una
variable indexada de ´ındices, tanto para asignar un vector a una colecci´n irregular de
                                                                           o
elementos de una variable indexada como para extraer una colecci´n irregular de elementos.
                                                                o
  Veamos un ejemplo sobre una matriz, que es una variable indexada con dos ´          ındices.
Puede construirse un ´ındice matricial consistente en dos columnas y varias filas. Los ele-
mentos del ´
           ındice matricial son los ´
                                    ındices fila y columna para construir la matriz de ´
                                                                                      ındices.
Supongamos que X es una variable indexada 4 × 5 y que desea hacer lo siguiente:
 • Extraer los elementos X[1,3], X[2,2] y X[3,1] con una estructura de vector, y
 • Reemplazar dichos elementos de X con ceros.
                                          ındices de 3 × 2 como en el siguiente ejemplo.
   Para ello puede utilizar una matriz de ´
      > x <- array(1:20,dim=c(4,5))   # Genera una variable indexada (4 × 5).
      > x
           [,1] [,2] [,3] [,4] [,5]
      [1,]    1    5    9   13   17
      [2,]    2    6   10   14   18
      [3,]    3    7   11   15   19
      [4,]    4    8   12   16   20
      > i <- array(c(1:3,3:1),dim=c(3,2))
      > i                                                  ındices (3 × 2).
                                      # i es una matriz de ´
           [,1] [,2]
      [1,]    1    3
      [2,]    2    2
      [3,]    3    1
      > x[i]                          # Extrae los elementos.
      [1] 9 6 3
      > x[i] <- 0                     # Sustituye los elementos por ceros.
      > x
           [,1] [,2] [,3] [,4] [,5]
      [1,]    1    5    0   13   17
      [2,]    2    0   10   14   18
      [3,]    0    7   11   15   19
      [4,]    4    8   12   16   20
      >
   Un ejemplo algo m´s complejo consiste en generar la matriz de dise˜o de un dise˜o en
                     a                                               n              n
bloques definido por dos factores, bloques (niveles b) y variedades (niveles v), siendo el
n´mero de parcelas n. Puede hacerlo del siguiente modo:
 u
      >   Xb <- matrix(0, n, b)
      >   Xv <- matrix(0, n, v)
      >   ib <- cbind(1:n, bloques)
      >   iv <- cbind(1:n, variedades)
      >   Xb[ib] <- 1
      >   Xv[iv] <- 1
      >   X <- cbind(Xb, Xv)
   Adem´s, puede construir la matriz de incidencia, N, mediante
       a
Cap´
   ıtulo 5: Variables indexadas. Matrices                                                   22



     > N <- crossprod(Xb, Xv)
   Tambi´n puede construirla directamente mediante la funci´n table():
        e                                                  o
     > N <- table(bloques, variedades)

5.4 La funci´n array()
            o
   Una variable indexada no s´lo puede construirse modificando el atributo dim de un
                                 o
vector, sino tambi´n directamente mediante la funci´n array, que tiene la forma
                   e                                  o
      > Z <- array(vector de datos,vector de dimensiones)
   Por ejemplo, si el vector h contiene 24 n´meros (o incluso menos), la orden
                                             u
      > Z <- array(h, dim=c(3,4,2))
usa h para almacenar en Z una variable indexada de dimensi´n 3 × 4 × 2. Si el tama˜o de
                                                                o                         n
h es exactamente 24, el resultado coincide con el de
      > dim(Z) <- c(3,4,2)
   Sin embargo, si h es m´s corto de 24, sus valores se repiten desde el principio tantas veces
                          a
como sea necesario para obtener 24 elementos. (v´ase Secci´n 5.4.1 [Reciclado], p´gina 22).
                                                   e          o                      a
El caso extremo, muy com´n, corresponde a un vector de longitud 1, como en este ejemplo
                            u
      > Z <- array(0, c(3,4,2))
en que Z es una variable indexada compuesta enteramente de ceros.
   Adem´s, dim(Z), el vector de dimensiones, es el vector c(3,4,2), Z[1:24], es un vector
          a
de datos que coincide con h, y tanto Z[], con ´    ındice vac´ como Z, sin ´
                                                              ıo,               ındices, son la
variable indexada con estructura de variable indexada.
   Las variables indexadas pueden utilizarse en expresiones aritm´ticas y el resultado es una
                                                                   e
variable indexada formada a partir de las operaciones elemento a elemento de los vectores
subyacentes. Los atributos dim de los operandos deben ser iguales en general y coincidir´n   a
con el vector de dimensiones del resultado. As´ pues, si A, B y C son variables indexadas
                                                 ı
similares, entonces
      > D <- 2*A*B + C + 1
almacena en D una variable indexada similar, cuyo vector de datos es el resultado de las
operaciones indicadas sobre los vectores de datos subyacentes a A, B y C. Las reglas exactas
correspondientes a los c´lculos en que se mezclan variables indexadas y vectores deben ser
                        a
estudiadas con detenimiento.

5.4.1 Operaciones con variables indexadas y vectores. Reciclado.
    Cuando se realizan operaciones que mezclan variables indexadas y vectores, se siguen
los siguientes criterios:
  • La expresi´n se analiza de izquierda a derecha.
                o
  • Si un vector es m´s corto que otro, se extiende repitiendo sus elementos (lo que se
                          a
     denomina reciclado) hasta alcanzar el tama˜o del vector m´s largo.
                                                n             a
  • Si s´lo hay variables indexadas y vectores m´s cortos, las variables indexadas deben
         o                                        a
     tener el mismo atributo dim, o se producir´ un error.
                                               a
  • Si hay un vector m´s largo que una variable indexada anterior, se produce un mensaje
                          a
     de error.
Cap´
   ıtulo 5: Variables indexadas. Matrices                                                                    23



  • Si hay variables indexadas y no se produce error, el resultado es una variable indexada
    del mismo atributo dim que las variables indexadas que intervienen en la operaci´n.o

5.5 Producto exterior de dos variables indexadas
    Una operaci´n de importancia fundamental entre variables indexadas es el producto
                  o
exterior. Si a y b son dos variables indexadas num´ricas, su producto exterior es una
                                                       e
variable indexada cuyo vector de dimensi´n es la concatenaci´n de los correspondientes de
                                           o                 o
los operandos, en el orden de la operaci´n, y cuyo vector de datos subyacente se obtiene
                                          o
mediante todos los posibles productos de los elementos de los vectores subyacentes de a y
b. El producto exterior se obtiene mediante el operador %o%:
        > ab <- a %o% b
    o bien, en forma funcional, mediante outer:
        > ab <- outer(a, b, "*")
    La funci´n “multiplicaci´n” en esta ultima forma, puede reemplazarse por cualquier
             o               o            ´
funci´n de dos variables. Por ejemplo, para calcular la funci´n f (x, y) = cos(y)/(1 + x2 )
      o                                                       o
sobre la ret´ıcula formada por todos los puntos obtenidos combinando las ordenadas y abs-
cisas definidas por los elementos de los vectores x e y respectivamente, puede utilizar2 las
o
´rdenes:
        > f <- function(x, y) cos(y)/(1 + x^2)
        > z <- outer(x, y, f)
    En particular, el producto exterior de dos vectores, es una variable indexada con dos
´
ındices (esto es, una matriz, de rango 1 a lo sumo). Debe tener en cuenta que el producto
exterior no es conmutativo.

Ejemplo: Distribuci´n del determinante de una matriz de d´
                   o                                     ıgitos
de 2 × 2
    Un ejemplo apropiado se presenta en el c´lculo del determinante de una matriz 2 × 2,
                                                a
[a, b; c, d], en que cada elemento de la misma es un n´mero natural entre 0 y 9. El problema
                                                      u
planteado consiste en encontrar la distribuci´n de los determinantes, ad − bc, de todas las
                                               o
matrices posibles de esta forma, y representarla gr´ficamente, supuesto que cada d´
                                                     a                                ıgito se
elige al azar de una distribuci´n uniforme.
                                 o
    Para ello puede utilizar la funci´n outer() dos veces:
                                      o
        > d <- outer(0:9, 0:9)
        > fr <- table(outer(d, d, "-"))
        > plot(as.numeric(names(fr)), fr, type="h",
                  xlab="Determinante", ylab="Frecuencia")
    Advierta c´mo se ha forzado el atributo names de la tabla de frecuencias a num´rico, para
                 o                                                                e
recuperar el rango de los valores de los determinantes. La forma aparentemente “obvia” de
resolver este problema mediante iteraciones de tipo for, que se discutir´n en el Cap´
                                                                          a            ıtulo 9
[Ciclos y ejecucion condicional], p´gina 44, es tan ineficiente que es impracticable. Al
                                       a
observar el resultado, tal vez le sorprenda que aproximadamente una de cada veinte matrices
sea singular.
 2
     La definici´n de una funci´n en R se estudia en el cap´
               o              o                           ıtulo Cap´
                                                                   ıtulo 10 [Escritura de funciones], p´gina 46.
                                                                                                       a
Cap´
   ıtulo 5: Variables indexadas. Matrices                                                                24



5.6 Traspuesta generalizada de una variable indexada
   La funci´n aperm(a, perm) puede usarse para permutar la variable indexada a. El
            o
argumento perm debe ser una permutaci´n de los enteros {1, . . . , k} siendo k el n´mero de
                                        o                                          u
´
ındices de a. El resultado es una variable indexada del mismo tama˜o que a en la que la
                                                                      n
dimensi´n que en la original era perm[j] ser´ ahora la dimensi´n j. Si A es una matriz,
        o                                     a                  o
entonces
       > B <- aperm(A, c(2,1))
almacena en B la matriz traspuesta de A. En el caso de matrices es m´s sencillo utilizar la
                                                                        a
funci´n t(), y bastar´ escribir B <- t(A).
     o               ıa

5.7 Operaciones con matrices
   Como ya se ha indicado varias veces, una matriz es simplemente una variable indexada
con dos ´
        ındices. Ahora bien, su importancia es tal que necesita un apartado especial. R
dispone de muchos operadores y funciones dise˜ados espec´
                                               n           ıficamente para matrices. Por
ejemplo, acabamos de ver que t(X) es la matriz traspuesta de X. Las funciones nrow y ncol
devuelven el n´mero de filas y de columnas de una matriz.
              u

5.7.1 Producto matricial. Inversa de una matriz. Resoluci´n de
                                                         o
      sistemas lineales
    El operador %*% realiza el producto matricial. Una matriz de n × 1 o de 1 × n puede
ser utilizada como un vector n-dimensional en caso necesario. An´logamente R puede usar
                                                                  a
autom´ticamente un vector en una operaci´n matricial convirti´ndolo en una matriz fila o
        a                                   o                   e
una matriz columna cuando ello es posible (A veces la conversi´n no est´ definida de modo
                                                               o        a
unico, como veremos despu´s).
´                            e
    Si, por ejemplo, A y B, son matrices cuadradas del mismo tama˜o, entonces
                                                                   n
       > A * B
es la matriz de productos elemento a elemento, en tanto que
       > A %*% B
es el producto matricial. Si x es un vector (de la dimensi´n apropiada) entonces
                                                          o
       > x %*% A %*% x
es una forma cuadr´tica.3
                    a
    La funci´n crossprod() realiza el producto cruzado de matrices, esto es
              o
crossprod(X,y) suministra el mismo resultado que t(X)%*%y, pero la operaci´n es m´s
                                                                                 o        a
eficiente. Si omite el segundo argumento de la funci´n crossprod(), ´sta lo toma igual al
                                                     o                e
primero.
    Tambi´n existe la funci´n diag(). Si su argumento es una matriz, diag(matriz), de-
           e                 o
vuelve un vector formado por los elementos de la diagonal de la misma. Si, por el contrario,
 3
     Si hubiese escrito x %*% x el resultado es ambiguo, pues tanto podr´ significar x x como xx , donde x es
                                                                         ıa
     la forma columna. En este tipo de casos, la interpretaci´n corresponde a la matriz de menor tama˜o, por
                                                             o                                       n
     lo que en este ejemplo el resultado es el escalar x x. La matriz xx puede calcularse mediante cbind(x)
     %*% x, mediante x %*% rbind(x) o mediante x %*% rbind(x), puesto que tanto el resultado de rbind()
     como el de cbind() son matrices.
Cap´
   ıtulo 5: Variables indexadas. Matrices                                                    25



su argumento es un vector (de longitud mayor que uno), diag(vector), lo transforma en
una matriz diagonal cuyos elementos diagonales son los del vector. Y, por ultimo, si su
                                                                          ´
argumento es un n´mero natural, n, lo transforma en una matriz identidad de tama˜o
                  u                                                                  n
n × n.

5.7.2 Autovalores y autovectores
   Como ya hemos indicado, la funci´n eigen() calcula los autovalores y autovectores de
                                   o
una matriz sim´trica. El resultado es una lista de dos componentes llamados values y
              e
vectors. La asignaci´n
                    o
     > ev <- eigen(Sm)
almacenar´ esta lista en ev. Por tanto ev$val es el vector de autovalores de Sm y ev$vec es
           a
la matriz de los correspondientes autovectores. Si s´lo quisi´ramos almacenar los autovalores
                                                    o        e
podr´
    ıamos haber hecho la asignaci´n:o
      > evals <- eigen(Sm)$values
y en este caso evals s´lo contendr´ los autovalores, habi´ndose descartado la segunda
                        o             ıa                      e
componente de la lista. Si se utiliza la directamente la expresi´n
                                                                o
     > eigen(Sm)
se imprimen las dos componentes, con sus nombres, en la pantalla.

5.7.3 Descomposici´n en valores singulares. Determinantes
                  o
    La funci´n svd admite como argumento una matriz cualquiera, M, y calcula su descom-
            o
posici´n en valores singulares, que consiste en obtener tres matrices, U, D y V, tales que la
      o
primera es una matriz de columnas ortonormales con el mismo espacio de columnas que M,
la segunda es una matriz diagonal de n´meros no negativos, y la tercera es una matriz de
                                        u
columnas ortonormales con el mismo espacio de filas que M, tales que M=U%*%D%*%t(V). D
se devuelve en forma de vector formado por los elementos diagonales. El resultado de la
funci´n es una lista de tres componentes cuyos nombres son d, u y v, y que corresponden a
     o
las matrices descritas.
   Si M es una matriz cuadrada, es f´cil ver que
                                    a
      > AbsDetM <- prod(svd(M)$d)
calcula el valor absoluto del determinante de M. Si necesita este c´lculo a menudo, puede
                                                                   a
definirlo como una nueva funci´n en R:
                               o
      > AbsDet <- function(M) prod(svd(M)$d)
tras lo cual puede usar AbsDet() como cualquier otra funci´n de R. Se deja como ejercicio,
                                                                o
trivial pero util, el c´lculo de una funci´n, tr(), que calcule la traza de una matriz cuadrada.
             ´         a                  o
Tenga en cuenta que no necesita realizar ninguna iteraci´n; estudie atentamente el c´digo
                                                              o                            o
de la funci´n anterior.
            o

5.7.4 Ajuste por m´
                  ınimos cuadrados. Descomposici´n QR
                                                o
   La funci´n lsfit() devuelve una lista que contiene los resultados de un ajuste por
           o
m´
 ınimos cuadrados. Una asignaci´n de la forma
                               o
Cap´
   ıtulo 5: Variables indexadas. Matrices                                                26



        > MinCua <- lsfit(X, y)
almacena los resultados del ajuste por m´ınimos cuadrados de un vector de observaciones, y,
y una matriz de dise˜o, X. Para ver m´s detalles puede consultar la ayuda, y tambi´n la de
                     n                 a                                           e
la funci´n ls.diag() para los diagn´sticos de regresi´n. Tenga en cuenta que no necesita
        o                            o                o
incluir un t´rmino independiente en X, ya que se incluye autom´ticamente.
            e                                                  a
   Otras funciones estrechamente relacionadas son qr() y similares. Considere las siguientes
asignaciones:
        >   Xplus <- qr(X)
        >   b <- qr.coef(Xplus, y)
        >   fit <- qr.fitted(Xplus, y)
        >   res <- qr.resid(Xplus, y)
que calculan la proyecci´n ortogonal de y sobre X y la almacenan en fit, la proyecci´n sobre
                        o                                                           o
el complemento ortogonal en res y el vector de coeficientes para la proyecci´n en b4 .
                                                                              o
   No se presupone que X sea de rango completo. Se buscan las redundancias y, si existen,
se eliminan.
   Esta forma es la forma antigua, a bajo nivel, de realizar ajustes de m´   ınimos cuadra-
dos. Aunque sigue siendo util en alg´n contexto, deber´ ser reemplazada por los modelos
                           ´         u                  ıa
     ısticos, como se ver´ en el Cap´
estad´                   a          ıtulo 11 [Modelos estadisticos en R], p´gina 55.
                                                                           a


5.8 Submatrices. Funciones cbind() y rbind().
   Las funciones cbind() y rbind() construyen matrices uniendo otras matrices (o vec-
tores), horizontalmente (modo columna) o verticalmente (modo fila), respectivamente.
     En la asignaci´n
                   o
        > X <- cbind(arg 1, arg 2, arg 3, ...)
los argumentos pueden ser vectores de cualquier longitud o matrices con el mismo n´mero
                                                                                   u
de filas. El resultado es una matriz cuyas columnas son los argumentos concatenados, arg 1,
arg 2, . . .
   Si alguno de los argumentos de cbind() es un vector, y hay alguna matriz, el vector no
puede ser m´s largo que el n´mero de filas de las matrices presentes, y si es m´s corto, se
             a               u                                                 a
recicla hasta alcanzar el n´mero indicado. Si s´lo hay vectores, los m´s cortos se reciclan
                           u                   o                      a
hasta alcanzar el tama˜o del mayor.
                       n
     La funci´n rbind() realiza el mismo papel, sustituyendo filas por columnas.
             o
    Supongamos que X1 y X2 tienen el mismo n´mero de filas. Para combinar las columnas
                                            u
de ambas en una matriz, X, que tendr´ el mismo n´mero de filas, y a˜adirle una columna
                                     a          u                 n
inicial de unos, puede escribir
        > X <- cbind(1, X1, X2)
   El resultado de cbind() o de rbind() siempre es una matriz y estas funciones consti-
tuyen, por tanto, la forma m´s sencilla para tratar un vector como una matriz columna o
                            a
una matriz fila, respectivamente.

 4
     b es esencialmente el resultado del operador “barra hacia atr´s” de Matlab.
                                                                  a
Cap´
   ıtulo 5: Variables indexadas. Matrices                                                 27


5.9 La funci´n de concatenaci´n, c(), con variables
            o                o
    indexadas
    En tanto que cbind() y rbind() son funciones de concatenaci´n que respetan el atributo
                                                                  o
dim, la funci´n c() no lo hace, sino que despoja a los objetos num´ricos de los atributos
              o                                                        e
dim y dimnames, lo que, por cierto, puede ser util en determinadas situaciones.
                                               ´
    La forma oficial de transformar una variable indexada en el vector subyacente es utilizar
la funci´n as.vector(),
        o
       > vec <- as.vector(X)
    Sin embargo, se obtiene un resultado an´logo utilizando la funci´n c() debido al efecto
                                            a                         o
colateral citado:
       > vec <- c(X)
    Existen sutiles diferencias entre ambos resultados, pero la elecci´n entre ambas es fun-
                                                                      o
damentalmente una cuesti´n de estilo (personalmente preferimos la primera forma).
                            o

5.10 Tablas de frecuencias a partir de factores
    Hemos visto que un factor define una tabla de entrada simple. Del mismo modo, dos
factores definen una tabla de doble entrada, y as´ sucesivamente. La funci´n table()
                                                      ı                           o
calcula tablas de frecuencias a partir de factores de igual longitud. Si existen k argumentos
categ´ricos, el resultado ser´ una variable k-indexada, que contiene la tabla de frecuencias.
      o                      a
    Vimos en un ejemplo anterior, que FactorEstado era un factor que indicaba el estado
de procedencia. La asignaci´n o
       > FrecEstado <- table(FactorEstado)
almacena en FrecEstado una tabla de las frecuencias de cada estado en la muestra. Las
frecuencias se ordenan y etiquetan con los niveles del factor. Esta orden es equivalente, y
m´s sencilla, que
  a
       > FrecEstado <- tapply(FactorEstado, FactorEstado, length)
    Suponga ahora que FactorIngresos es un factor que define “tipos de ingresos”, por
ejemplo, mediante la funci´n cut():
                            o
       > factor(cut(ingresos,breaks=35+10*(0:7))) -> FactorIngresos
    Entonces, puede calcular una tabla de frecuencias de doble entrada del siguiente modo:
       > table(FactorIngresos,FactorEstado)
                        FactorEstado
       FactorIngresos act nsw nt qld sa tas vic wa
                (35,45]     1    1 0     1 0      0     1 0
                (45,55]     1    1 1     1 2      0     1 3
                (55,65]     0    3 1     3 2      2     2 1
                (65,75]     0    1 0     0 0      0     1 0
    La extensi´n a tablas de frecuencias de varias entradas es inmediata.
              o
Cap´
   ıtulo 6: Listas y hojas de datos                                                       28



6 Listas y hojas de datos

6.1 Listas
   En R, una lista es un objeto consistente en una colecci´n ordenada de objetos, conocidos
                                                          o
como componentes.
   No es necesario que los componentes sean del mismo modo, as´ una lista puede estar
                                                                     ı
compuesta de, por ejemplo, un vector num´rico, un valor l´gico, una matriz y una funci´n.
                                            e               o                             o
El siguiente es un ejemplo de una lista:
       > Lst <- list(nombre="Pedro", esposa="Mar´a", no.hijos=3,
                                                        ı
                        edad.hijos=c(4,7,9))
   Los componentes siempre est´n numerados y pueden ser referidos por dicho n´mero.
                                   a                                                  u
En este ejemplo, Lst es el nombre de una lista con cuatro componentes, cada uno de los
cuales puede ser referido, respectivamente, por Lst[[1]], Lst[[2]], Lst[[3]] y Lst[[4]].
Como, adem´s, Lst[[4]] es un vector, Lst[[4]][1] refiere su primer elemento.
              a
   La funci´n length() aplicada a una lista devuelve el n´mero de componentes (del primer
            o                                             u
nivel) de la lista.
   Los componentes de una lista pueden tener nombre, en cuyo caso pueden ser referidos
tambi´n por dicho nombre, mediante una expresi´n de la forma
      e                                           o
       nombre de lista$nombre de componente
   Esta convenci´n permite la obtenci´n de una componente sin tener que recurrir a su
                    o                   o
n´mero.
 u
   En el ejemplo anterior,
   Lst$nombre coincide con Lst[[1]] y vale "Pedro",
   Lst$esposa coincide con Lst[[2]] y vale "Mar´a", ı
   Lst$edad.hijos[1] coincide con Lst[[4]][1] y vale 4.
   Tambi´n es posible utilizar los nombres de los componentes entre dobles corchetes, por
          e
ejemplo, Lst[["nombre"]] coincide con Lst$nombre. Esta opci´n es muy util en el caso
                                                                  o            ´
en que el nombre de los componentes se almacena en otra variable, como en
       > x <- "nombre"; Lst[[x]]
   Es muy importante distinguir claramente entre Lst[[1]] y Lst[1]. ‘[[. . . ]]’ es el
operador utilizado para seleccionar un s´lo elemento, mientras que ‘[. . . ]’ es un operador
                                          o
general de indexado. Esto es, Lst[[1]] es el primer objeto de la lista Lst, y si es una lista
con nombres, el nombre no est´ incluido. Por su parte, Lst[1], es una sublista de la lista
                                a
Lst consistente en la primera componente. Si la lista tiene nombre, ´ste se transfiere a la
                                                                       e
sublista.
   Los nombres de los componentes pueden abreviarse hasta el m´   ınimo de letras necesarios
para identificarlos de modo exacto. As´ en
                                       ı,
       > Lista <- list(coeficientes=c(1.3,4), covarianza=.87)
Lst$coeficientes puede especificarse mediante Lista$coe, y Lista$covarianza como
Lista$cov.
   El vector de nombres es un atributo de la lista, y como el resto de atributos puede ser
manipulado. Adem´s de las listas, tambi´n otras estructuras pueden poseer el atributo
                      a                     e
names.
Cap´
   ıtulo 6: Listas y hojas de datos                                                      29



6.2 Construcci´n y modificaci´n de listas
              o             o
   La funci´n list() permite crear listas a partir de objetos ya existentes. Una asignaci´n
           o                                                                             o
de la forma
        > Lista <- list(nombre 1=objeto 1,. . . ,nombre m=objeto m)
almacena en Lista una lista de m componentes que son objeto 1, . . . , objeto m; a los
cuales asigna los nombres nombre 1, . . . ,nombre m; que pueden ser libremente elegidos1 .
Si omite los nombres, las componentes s´lo estar´n numeradas. Las componentes se copian
                                          o       a
para construir la lista y los originales no se modifican.
   Las listas, como todos los objetos indexados, pueden ampliarse especificando compo-
nentes adicionales. Por ejemplo
        > Lst[5] <- list(matriz=Mat)

6.2.1 Concatenaci´n de listas
                 o
   Al suministrar listas como argumentos a la funci´n c() el resultado es una lista, cuyos
                                                   o
componentes son todos los de los argumentos unidos sucesivamente.
        > lista.ABC <- c(lista.A, lista.B, lista.C)
   Recuerde que cuando los argumentos eran vectores, esta funci´n los un´ todos en un
                                                                    o    ıa
unico vector. En este caso, el resto de atributos, como dim, se pierden.
´


6.3 Hojas de datos (Data frames)
  Una hoja de datos 2 (Data frame) es una lista que pertenece a la clase "data.frame".
Hay restricciones en las listas que pueden pertenecer a esta clase, en particular:
 • Los componentes deben ser vectores (num´ricos, cadenas de caracteres, o l´gicos),
                                                 e                          o
   factores, matrices num´ricas, listas u otras hojas de datos.
                         e
 • Las matrices, listas, y hojas de datos contribuyen a la nueva hoja de datos con tantas
   variables como columnas, elementos o variables posean, respectivamente.
 • Los vectores num´ricos y los factores se incluyen sin modificar, los vectores no num´ricos
                    e                                                                 e
   se fuerzan a factores cuyos niveles son los unicos valores que aparecen en el vector.
                                                ´
 • Los vectores que constituyen la hoja de datos deben tener todos la misma longitud, y
   las matrices deben tener el mismo tama˜o de filas
                                          n
   Las hojas de datos pueden interpretarse, en muchos sentidos, como matrices cuyas colum-
nas pueden tener diferentes modos y atributos. Pueden imprimirse en forma matricial y se
pueden extraer sus filas o columnas mediante la indexaci´n de matrices.
                                                         o

6.3.1 Construcci´n de hojas de datos
                o
     Puede construir una hoja de datos utilizando la funci´n data.frame:
                                                          o

 1
     Aunque R permite lo contrario, deber´ ser distintos entre s´
                                          ıan                   ı
 2
     Hemos utilizado esta traducci´n por analog´ con la “hoja de c´lculo”
                                  o            ıa                 a
Cap´
   ıtulo 6: Listas y hojas de datos                                                     30



      > cont <- data.frame(dom=FactorEstado, bot=ingresos, dis=FactorIngresos)
   Puede forzar que una lista, cuyos componentes cumplan las restricciones para ser una
hoja de datos, realmente lo sea, mediante la funci´n as.data.frame()
                                                  o
   La manera m´s sencilla de construir una hoja de datos es utilizar la funci´n
                   a                                                                o
read.table() para leerla desde un archivo del sistema operativo. Esta forma se tratar´a
en el Cap´
         ıtulo 7 [Lectura de datos desde un archivo], p´gina 33.
                                                       a

6.3.2 Funciones attach() y detach()
   La notaci´n $ para componentes de listas, como por ejemplo cont$dom, no siempre es
            o
la m´s apropiada. En ocasiones, ser´ c´modo que los componentes de una lista o de una
    a                                ıa o
hoja de datos pudiesen ser tratados temporalmente como variables cuyo nombre fuese el del
componente, sin tener que especificar expl´ıcitamente el nombre de la lista.
   La funci´n attach() puede tener como argumento el nombre de una lista o de una hoja
           o
de datos y permite conectar la lista o la hoja de datos directamente. Supongamos que
lentejas es una hoja de datos con tres variables, lentejas$u, lentejas$v y lentejas$w.
La orden
      > attach(lentejas)
conecta la hoja de datos coloc´ndola en la segunda posici´n de la trayectoria de b´squeda
                              a                          o                        u
y, supuesto que no existen variables denominadas u, v o w en la primera posici´n; u, v y w
                                                                               o
aparecer´n como variables por s´ mismas. Sin embargo, si realiza una asignaci´n a una de
         a                      ı                                             o
estas variables, como por ejemplo
      > u <- v+w
no se sustituye la componente u de la hoja de datos, sino que se crea una nueva variable,
u, en el directorio de trabajo, en la primera posici´n de la trayectoria de b´squeda, que
                                                    o                        u
enmascarar´ a la variable u de la hoja de datos. Para realizar un cambio en la propia hoja
            a
de datos, basta con utilizar la notaci´n $:
                                      o
      > lentejas$u <- v+w
   Este nuevo valor de la componente u no ser´ visible de modo directo hasta que desconecte
                                             a
y vuelva a conectar la hoja de datos.
   Para desconectar una hoja de datos, utilice la funci´n
                                                       o
      > detach()
   Esta funci´n desconecta la entidad que se encuentre en la segunda posici´n de la trayec-
             o                                                             o
toria de b´squeda. Una vez realizada esta operaci´n dejar´n de existir las variables u,
          u                                          o       a
v y w como tales, aunque seguir´n existiendo como componentes de la hoja de datos.
                                  a
Las entidades que ocupan en la trayectoria de b´squeda posiciones superiores a la se-
                                                   u
gunda, pueden desconectarse dando su posici´n o su nombre como argumento a la funci´n
                                             o                                          o
detach. Personalmente preferimos la segunda opci´n, como por ejemplo detach(lentejas)
                                                 o
o detach("lentejas")
      Nota: La trayectoria de b´squeda puede almacenar un n´mero finito y peque˜o
                               u                            u                   n
      de elementos, por tanto (puesto que adem´s no es necesario) no debe conectar
                                               a
      una misma hoja de datos m´s de una vez. Del mismo modo, es conveniente
                                  a
      desconectar una hoja de datos cuando termine de utilizar sus variables.
Cap´
   ıtulo 6: Listas y hojas de datos                                                             31



        Nota: En la versi´n actual de R s´lo se pueden conectar listas y hojas de datos
                         o               o
        en la posici´n 2 o superior. No es posible asignar directamente en una lista u
                    o
        hoja de datos conectada (por tanto, en cierto sentido, son est´ticas).
                                                                      a

6.3.3 Trabajo con hojas de datos
   Una metodolog´ de trabajo para tratar diferentes problemas utilizando el mismo direc-
                   ıa
torio de trabajo es la siguiente:
 • Re´na todas las variables de un mismo problema en una hoja de datos y d´le un nombre
      u                                                                      e
   apropiado e informativo;
 • Para analizar un problema, conecte, mediante attach(), la hoja de datos correspon-
   diente (en la posici´n 2) y utilice el directorio de trabajo (en la posici´n 1) para los
                       o                                                     o
   c´lculos y variables temporales;
    a
 • Antes de terminar un an´lisis, a˜ada las variables que deba conservar a la hoja de
                             a        n
   datos utilizando la forma $ para la asignaci´n y desconecte la hoja de datos mediante
                                                o
   detach();
 • Para finalizar, elimine del directorio de trabajo las variables que no desee conservar,
   para mantenerlo lo m´s limpio posible.
                          a
   De este modo podr´ analizar diferentes problemas utilizando el mismo directorio, aunque
                     a
todos ellos compartan variables denominadas x, y o z, por ejemplo.

6.3.4 Conexi´n de listas arbitrarias
            o
   La funci´n attach() es una funci´n gen´rica, que permite conectar en la trayectoria
            o                        o      e
de b´squeda no s´lo directorios y hojas de datos, sino tambi´n otros tipos de objetos, en
    u             o                                         e
particular cualquier lista, como en
      > attach(cualquier.lista)
   Posteriormente podr´ desconectar el objeto utilizando la funci´n detach, utilizando
                      a                                          o
como argumento el n´mero de posici´n o, preferiblemente, su nombre.
                   u              o

6.3.5 Gesti´n de la trayectoria de b´ squeda
           o                        u
   La funci´n search devuelve la trayectoria de b´squeda actual y por tanto es la mejor
           o                                       u
manera de conocer qu´ hojas de datos, listas o bibliotecas han sido conectadas o desconec-
                      e
tadas. Si no ha realiado ninguna conexi´n o desconexi´n su valor es
                                       o               o
      > search()
      [1] ".GlobalEnv"       "Autoloads"      "package:base"
donde .GlobalEnv corresponde al espacio de trabajo.3
     Una vez conectada la hoja de datos, lentejas, tendr´
                                                        ıamos
       > search()
       [1] ".GlobalEnv"      "lentejas"         "Autoloads"                  "package:base"
       > ls(2)
       [1] "u" "v" "w"
 3
     Consulte la ayuda sobre autoload para la descripci´n del significado del segundo t´rmino.
                                                       o                              e
Cap´
   ıtulo 6: Listas y hojas de datos                                                 32



y, como vimos, ls (o objects) puede usarse para examinar los contenidos de cualquier
posici´n en la trayectoria de b´squeda.
      o                        u
   Por ultimo, desconectamos la hoja de datos y comprobamos que ha sido eliminada de la
        ´
trayectoria de b´squeda.
                 u
      > detach("lentejas")
      > search()
      [1] ".GlobalEnv"        "Autoloads"     "package:base"
Cap´
   ıtulo 7: Lectura de datos de un archivo                                                          33



7 Lectura de datos de un archivo
    Los datos suelen leerse desde archivos externos y no teclearse de modo interactivo. Las
capacidades de lectura de archivos de R son sencillas y sus requisitos son bastante estrictos
cuando no inflexibles. Se presupone que el usuario es capaz de modificar los archivos de
datos con otras herramientas, por ejemplo con editores de texto1 , para ajustarlos a las
necesidades de R. Generalmente esta tarea es muy sencilla.
    La funci´n read.fwf() puede utilizarse para leer un archivo con campos de anchura fija
              o
no delimitados.(Esta funci´n utiliza un programa perl para transformar el archivo en otro
                            o
adaptado para su lectura con read.table.) La funci´n count.fields() cuenta el n´mero
                                                       o                              u
de campos por l´   ınea de un archivo de campos delimitados. Estas dos funciones pueden
resolver algunos problemas elementales, pero en la mayor´ de los casos es mejor preparar
                                                           ıa
el archivo a las necesidades de R antes de comenzar el an´lisis.
                                                           a
    Si los datos se van a almacena en hojas de datos, m´todo que recomendamos, puede leer
                                                         e
los datos correspondientes a las mismas con la funci´n read.table(). Existe tambi´n una
                                                      o                               e
funci´n m´s gen´rica, scan(), que puede utilizar directamente.
      o     a     e

7.1 La funci´n read.table()
            o
   Para poder leer una hoja de datos directamente, el archivo externo debe reunir las
condiciones adecuadas. La forma m´s sencilla es:
                                   a
  • La primera l´ınea del archivo debe contener el nombre de cada variable de la hoja de
    datos.
  • En cada una de las siguientes l´ıneas, el primer elemento es la etiqueta de la fila, y a
    continuaci´n deben aparecer los valores de cada variable.
              o
    Si el archivo tiene un elemento menos en la primera l´ ınea que en las restantes, obliga-
toriamente ser´ el dise˜o anterior el que se utilice. A continuaci´n aparece un ejemplo de
                a        n                                        o
las primeras l´ıneas de un archivo, datos.casas, con datos de viviendas, preparado para su
lectura con esta funci´n.
                       o
                                                                                                ¨
         Archivo de entrada con nombres de variables y etiquetas de filas:

               Precio      Superficie       ´rea
                                            A        Habitaciones           A~os
                                                                             n          Calef
         01    52.00       111.0              830      5                    6.2            no
         02    54.75       128.0              710      5                    7.5            no
         03    57.50       101.0            1000       5                    4.2            no
         04    57.50       131.0              690      6                    8.8            no
         05    59.75        93.0              900      5                    1.9            si
         ...
                                                                                                ©
   Predeterminadamente, los elementos num´ricos (excepto las etiquetas de las filas) se
                                           e
almacenan como variables num´ricas; y los no num´ricos, como Calef, se fuerzan como
                                e                e
factores. Es posible modificar esta acci´n.
                                       o
 1
     En UNIX puede utilizar el programa perl o los editores sed y awk. Existen versiones para Microsoft
     Windows.
Cap´
   ıtulo 7: Lectura de datos de un archivo                                               34



       PreciosCasas - read.table(datos.casas)
   A menudo no se dispone de etiquetas de filas. En ese caso, tambi´n es posible la lectura
                                                                  e
y el programa a˜adir´ unas etiquetas predeterminadas. As´ si el archivo tiene la forma
               n    a                                      ı,
siguiente,
                                                                                      ¨
      Archivo sin etiquetas de filas:

      Precio     Superficie     ´rea
                                A        Habitaciones        A~os
                                                              n         Calef
      52.00      111.0            830      5                 6.2           no
      54.75      128.0            710      5                 7.5           no
      57.50      101.0          1000       5                 4.2           no
      57.50      131.0            690      6                 8.8           no
      59.75       93.0            900      5                 1.9           si
      ...
                                                                                      ©
   podr´ leerse utilizando un par´metro adicional
       a                         a
      PreciosCasas - read.table(datos.casas, header=T)
donde el par´metro adicional, header=T, indica que la primera l´
             a                                                 ınea es una l´
                                                                            ınea de
cabeceras y que no existen etiquetas de filas expl´
                                                 ıcitas.

7.2 La funci´n scan()
            o
   Supongamos que el archivo entrada.txt contiene los datos correspondientes a tres vec-
tores, de la misma longitud, el primero de tipo car´cter y los otros dos de tipo num´rico,
                                                   a                                e
escritos de tal modo que en cada l´ınea aparecen los valores correspondientes de cada uno
de ellos.
  En primer lugar, utilizamos la funci´n scan() para leer los tres vectores, del siguiente
                                      o
modo
      entrada - scan(entrada.txt, list(,0,0))
   El segundo argumento es una estructura de lista que establece el modo de los tres vec-
tores que se van a leer. El resultado se almacena en entrada, que ser´ una lista con tres
                                                                      a
componentes correspondientes a los vectores le´
                                              ıdos. Puede referir cada uno de los vectores
mediante la indexaci´n:
                     o
       etiqueta - entrada[[1]]; x - entrada[[2]]; y - entrada[[3]]
   Tambi´n podr´ haber utilizado nombres en la lista que define el modo de lectura, por
        e      ıa
ejemplo
      entrada - scan(entrada.txt, list(etiqueta=,x=0,y=0))
    En este caso, puede referir cada uno de los vectores con la notaci´n $. Si desea acceder
                                                                      o
a las variables separadamente deber´, o bien asignarlas a variables del espacio de trabajo,
                                     a
        etiqueta - entrada$etiqueta; x - entrada$x; y - entrada$y
o bien conectar la lista completa en la posici´n 2 de la trayectoria de b´squeda (v´ase
                                                 o                       u         e
Secci´n 6.3.4 [Conexion de listas arbitrarias], p´gina 31).
     o                                           a
   Si el segundo argumento hubiese sido un s´lo elemento y no una lista, todos los elementos
                                            o
del archivo deber´ ser del tipo indicado y se hubiesen le´ en un s´lo vector.
                  ıan                                     ıdo         o
Cap´
   ıtulo 7: Lectura de datos de un archivo                                                 35



         X - matrix(scan(light.dat, 0), ncol=5, byrow=TRUE)
   La funci´n scan permite realizar lecturas m´s complejas, como puede consultar en la
           o                                  a
ayuda.


7.3 Acceso a datos internos
   En la distribuci´n de R se incluyen unos cincuenta objetos con datos, y otros m´s
                     o                                                                  a
se incluyen en las bibliotecas (incluyendo las est´ndar). Para utilizar estos datos, deben
                                                  a
cargarse expl´ıcitamente2 utilizando la funci´n data. Para obtener una lista de los datos
                                             o
existentes en el sistema base utilice
        data()
y para cargar uno, por ejemplo infert, debe suministrar dicho nombre como argumento de
la funci´n data.
        o
        data(infert)
Normalmente una orden de este tipo carga un objeto del mismo nombre que suele ser una
hoja de datos. Sin embargo, tambi´n es posible que se carguen varios objetos, por lo que
                                   e
en cada caso debe consultar la ayuda interactiva sobre el objeto concreto para conocer
exactamente la acci´n que realizar´.
                   o              a


7.3.1 Acceso a datos de una biblioteca

   Para acceder a los datos incluidos en una biblioteca, basta utilizar el argumento package
en la funci´n data. Por ejemplo,
           o
        data(package=nls)
        data(Puromycin, package=nls)
   Si la biblioteca ya ha sido conectada mediante la funci´n library, sus datos habr´n
                                                          o                             a
sido incluidos autom´ticamente en la trayectoria de b´squeda y no ser´ necesario incluir el
                     a                               u               a
argumento package. As´  ı,
        library(nls)
        data()
        data(Puromycin)
presentar´ una lista de todos los datos de todas las bibliotecas conectadas en ese momento
          a
(que ser´n al menos la biblioteca base y la biblioteca nls) y posteriormente cargar´ los datos
        a                                                                          a
Puromycin de la primera librer´ en la trayectoria de b´squeda en que encuentre unos datos
                                ıa                       u
con dicho nombre.
   Las librer´ creadas por los usuarios son una fuente valiosa de datos. Por supuesto, las
             ıas
notas del Dr. Venables, fuente original de esta introducci´n, contienen un conjunto de datos
                                                          o
que se encuentra disponible en CRAN en la biblioteca Rnotes.

 2
     En S-Plus la carga expl´
                            ıcita no es necesaria.
Cap´
   ıtulo 7: Lectura de datos de un archivo                                             36



7.4 Edici´n de datos
         o
   Una vez creada una estructura de datos, la funci´n data.entry, disponible en algunas
                                                   o
versiones de R, permite modificarla. La orden
      % x.nuevo - data.entry(x.viejo)
edita x.viejo utilizando un entorno similar a una hoja de c´lculo. Al finalizar, el objeto
                                                           a
se almacena en x.nuevo. x.viejo, y por tanto x.nuevo, puede ser una matriz, una hoja
de datos, un vector o cualquier objeto at´mico.
                                         o
   Si utiliza la funci´n sin argumentos
                      o
       x.nuevo - data.entry()
permite introducir datos desde una hoja vac´ıa.

7.5 C´mo importar datos
     o
   En muchos casos es necesario importar datos desde bases de datos o, en general, desde
archivos preparados para otros programas. Se est´n desarrollando varias bibliotecas para
                                                   a
realizar estas tareas. En este momento existe la biblioteca stataread que lee y escribe
archivos de Stata, y la biblioteca foreign, en fase experimental, que lee archivos de SAS,
Minitab y SPSS. Otras bibliotecas permiten el acceso a bases de datos que soportan SQL3 ,
y se est´ terminando la biblioteca RODBC para acceder a bases de datos ODBC (tales
         a
como Access en Microsoft Windows).




 3
     Acr´nimo en ingl´s de Standard Query Language.
        o            e
Cap´
   ıtulo 8: Distribuciones probabil´
                                   ısticas                                                37



8 Distribuciones probabil´
                         ısticas

8.1 Tablas estad´
                ısticas
   R contiene un amplio conjunto de tablas estad´  ısticas. Para cada distribuci´n soportada,
                                                                                o
hay funciones que permiten calcular la funci´n de distribuci´n, F (x) = P (X ≤ x), la funci´n
                                            o                o                             o
de distribuci´n inversa1 , la funci´n de densidad y generar n´meros pseudoaleatorios de la
             o                     o                           u
distribuci´n. Las distribuciones son las siguientes:
          o

        Distribuci´n
                  o                nombre en R   argumentos
                                                 adicionales

        beta                       beta          shape1, shape2, ncp
        binomial                   binom         size, prob
        Cauchy                     cauchy        location, scale
        ji cuadrado                chisq         df, ncp
        exponencial                exp           rate
        F de Snedecor              f             df1, df1, ncp
        gamma                      gamma         shape, scale
        geom´trica
               e                   geom          prob
        hipergeom´trica
                   e               hyper         m, n, k
        log-normal                 lnorm         meanlog, sdlog
        log´ıstica                 logis         location, scale
        binomial negativa          nbinom        size, prob
        normal                     norm          mean, sd
        Poisson                    pois          lambda
        t de Student               t             df, ncp
        uniforme                   unif          min, max
        Weibull                    weibull       shape, scale
        Wilcoxon                   wilcox        m, n

Para construir el nombre de cada funci´n, utilice el nombre de la distribuci´n precedido
                                          o                                    o
de ‘d’ para la funci´n de densidad, ‘p’ para la funci´n de distribuci´n, ‘q’ para la funci´n
                     o                                o               o                   o
de distribuci´n inversa, y ‘r’ para la generaci´n de n´meros pseudoaleatorios. El primer
              o                                 o       u
argumento es x para la funci´n de densidad, q para la funci´n de distribuci´n, p para la
                               o                               o               o
funci´n de distribuci´n inversa, y n para la funci´n de generaci´n de n´meros pseudoaleato-
     o                o                           o             o      u
rios (excepto en el caso de rhyper y rwilcox, en los cuales es nn). En el momento de
escribir este manual, el par´metro ncp s´lo est´ disponible pr´cticamente en las funciones
                            a              o     a              a
de distribuci´n. Para conocer d´nde puede usarlo utilice la ayuda interactiva.
              o                  o
    Adem´s de las anteriores, existen las funciones ptukey y qtukey para la distribuci´n del
          a                                                                           o
rango estudentizado de muestras de una distribuci´n normal.
                                                    o
    Los siguientes ejemplos clarificar´n estos conceptos:
                                     a
        ## P valor a dos colas de la distribuci´n t_13  o
        2*pt(-2.43, df = 13)
        ## Percentil 1 superior de una distribuci´n F(2, 7)
                                                           o
 1
     Dado q, el menor x tal que P (X ≤ x)  q
Cap´
   ıtulo 8: Distribuciones probabil´
                                   ısticas                                              38



       qf(0.99, 2, 7)


8.2 Estudio de la distribuci´n de unos datos
                            o
    Dados unos datos (unidimensionales), su distribuci´n puede estudiarse de muchas formas.
                                                      o
La m´s sencilla es realizar un resumen estad´
      a                                       ıstico, y ello puede obtenerse f´cilmente con
                                                                              a
cualquiera de las funciones summary o fivenum; y tambi´n puede realizar un diagrama de
                                                           e
tallo y hojas con la funci´n stem.
                          o
       data(faithful)
       attach(faithful)
       summary(eruptions)
         Min. 1st Qu. Median     Mean 3rd Qu.            Max.
        1.600   2.163   4.000   3.488   4.454           5.100
       fivenum(eruptions)
      [1] 1.6000 2.1585 4.0000 4.4585 5.1000
       stem(eruptions)

          The decimal point is 1 digit(s) to the left of the |

          16   |   070355555588
          18   |   000022233333335577777777888822335777888
          20   |   00002223378800035778
          22   |   0002335578023578
          24   |   00228
          26   |   23
          28   |   080
          30   |   7
          32   |   2337
          34   |   250077
          36   |   0000823577
          38   |   2333335582225577
          40   |   0000003357788888002233555577778
          42   |   03335555778800233333555577778
          44   |   02222335557780000000023333357778888
          46   |   0000233357700000023578
          48   |   00000022335800333
          50   |   0370
   En vez del diagrama de tallo y hojas, puede representar el histograma utilizando la
funci´n hist.
     o
         hist(eruptions)
      #   define intervalos menores y a~ade un gr´fico de densidad
                                       n         a
         hist(eruptions, seq(1.6, 5.2, 0.2), prob=TRUE)
         lines(density(eruptions, bw=0.1))
         rug(eruptions) # muestra los puntos
   La funci´n density permite realizar gr´ficos de densidad y la hemos utilizado para
            o                               a
superponer este gr´fico en el ejemplo. La anchura de banda, bw, ha sido elegida probando
                    a
varias, ya que el valor predeterminado produce un gr´fico mucho m´s suavizado. Si necesita
                                                    a           a
Cap´
   ıtulo 8: Distribuciones probabil´
                                   ısticas                                                                             39



utilizar m´todos autom´ticos de elecci´n de ancho de banda, utilice las bibliotecas MASS
          e           a               o
y KernSmooth.
                                                                      Histogram of eruptions




                                        0.7
                                        0.6
                                        0.5
                   Relative Frequency

                                        0.4
                                        0.3
                                        0.2
                                        0.1
                                        0.0




                                              1.5         2.0   2.5    3.0              3.5    4.0   4.5         5.0

                                                                              eruptions




   Podemos representar la funci´n de distribuci´n emp´
                               o               o     ırica mediante la funci´n ecdf de la
                                                                            o
biblioteca est´ndar stepfun.
              a
       library(stepfun)
       plot(ecdf(eruptions), do.points=FALSE, verticals=TRUE)
    Esta distribuci´n, obviamente, no corresponde a ninguna de las distribuciones est´ndar.
                   o                                                                 a
Pero podemos estudiar qu´ ocurre con las erupciones de m´s de tres minutos. Vamos a
                            e                                a
seleccionarlas, ajustarles una distribuci´n normal y superponer la distribuci´n ajustada.
                                         o                                   o
         long - eruptions[eruptions  3]
         plot(ecdf(long), do.points=FALSE, verticals=TRUE)
         x - seq(3, 5.4, 0.01)
         lines(x, pnorm(x, mean=mean(long), sd=sqrt(var(long))), lty=3)
                                                                             ecdf(long)
                                        1.0
                                        0.8
                                        0.6
                   Fn(x)

                                        0.4
                                        0.2
                                        0.0




                                                    3.0         3.5           4.0              4.5         5.0

                                                                                    x




   Los gr´ficos cuantil-cuantil (Q-Q plots) pueden ayudarnos a examinar los datos m´s
         a                                                                          a
cuidadosamente.
Cap´
   ıtulo 8: Distribuciones probabil´
                                   ısticas                                               40



       par(pty=s)
       qqnorm(long); qqline(long)
que muestran un ajuste razonable, aunque la cola de la derecha es m´s corta de lo que ser´
                                                                   a                     ıa
esperable en una distribuci´n normal. Vamos a compararla con unos datos pseudoaleatorios
                           o
tomados de una distribuci´n t5 .
                          o
                                                             Normal Q−Q Plot




                                             5.0
                                             4.5
                          Sample Quantiles

                                             4.0
                                             3.5
                                             3.0




                                                   −2   −1         0             1   2

                                                         Theoretical Quantiles




       x - rt(250, df = 5)
       qqnorm(x); qqline(x)
que la mayor´ de las veces (recuerde que es una muestra pseudo aleatoria) tendr´ colas m´s
             ıa                                                                a        a
largas de lo que ser´ esperable en una distribuci´n normal. Podemos realizar un gr´fico
                     ıa                              o                                a
cuantil-cuantil de estos datos, pero frente a la distribuci´n t5 , mediante
                                                           o
       qqplot(qt(ppoints(250), df=5), x, xlab=gr´fico Q-Q de t_5)
                                                  a
       qqline(x)
   Por ultimo, realicemos un contraste de hip´tesis para comprobar la normalidad. La
        ´                                         o
biblioteca ctest permite realizar el contraste de Shapiro-Wilk
       library(ctest)
       shapiro.test(long)

                 Shapiro-Wilk normality test

      data: long
      W = 0.9793, p-value = 0.01052
y el contraste de Kolmogorov-Smirnov
       ks.test(long, pnorm, mean=mean(long), sd=sqrt(var(long)))

                 One-sample Kolmogorov-Smirnov test

      data: long
      D = 0.0661, p-value = 0.4284
      alternative hypothesis: two.sided
Cap´
   ıtulo 8: Distribuciones probabil´
                                   ısticas                                              41



Hemos utilizado los datos como ejemplo de uso de las funciones, sin estudiar si el mismo es
v´lido. En este caso no lo ser´ ya que se han estimado los par´metros de la distribuci´n
 a                            ıa                               a                        o
normal a partir de la misma muestra.

8.3 Contrastes de una y de dos muestras
   Acabamos de comparar una muestra con una distribuci´n normal, pero es mucho m´s
                                                              o                       a
habitual comparar aspectos de dos muestras. Consideremos los siguientes datos, tomados
de Rice (1995, p.490), del calor latente en la fusi´n del hielo expresados en cal/gm.
                                                   o
      M´todo A: 79.98 80.04 80.02 80.04 80.03 80.03 80.04 79.97
       e
                  80.05 80.03 80.02 80.00 80.02
      M´todo B: 80.02 79.94 79.98 79.97 79.97 80.03 79.95 79.97
       e
Podemos comparar gr´ficamente las dos muestras mediante un diagrama de cajas.
                      a
       A - scan()
      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 - scan()
      80.02 79.94 79.98 79.97 79.97 80.03 79.95 79.97

      boxplot(A, B)
que muestra claramente que el primer grupo tiende a tener mayores resultados que el se-
gundo.
                           80.04
                           80.02
                           80.00
                           79.98
                           79.96
                           79.94




                                      1               2




   Para contrastar la igualdad de medias de las dos poblaciones, se puede utilizar el con-
traste t de Student para dos muestras independientes, del siguiente modo:
       t.test(A, B)

                 Welch Two Sample t-test

      data: A and B
      t = 3.2499, df = 12.027, p-value = 0.00694
Cap´
   ıtulo 8: Distribuciones probabil´
                                   ısticas                                              42



      alternative hypothesis: true difference in means is not equal to 0
      95 percent confidence interval:
       0.01385526 0.07018320
      sample estimates:
      mean of x mean of y
       80.02077 79.97875
que indica una diferencia significativa (Bajo las condiciones del modelo, incluida la norma-
lidad). Esta funci´n, de modo predeterminado, no presupone que las varianzas son iguales
                  o
(al contrario que la funci´n an´loga de S-Plus, t.test). Si desea contrastar la igualdad
                          o     a
de varianzas, puede utilizar la funci´n var.test de la biblioteca ctest.
                                     o
       library(ctest)
       var.test(A, B)

                 F test to compare two variances

      data: A and B
      F = 0.5837, num df = 12, denom df = 7, p-value = 0.3938
      alternative hypothesis: true ratio of variances is not equal to 1
      95 percent confidence interval:
       0.1251097 2.1052687
      sample estimates:
      ratio of variances
               0.5837405
que no muestra evidencia de diferencias significativas (Bajo las condiciones del modelo, que
incluyen normalidad). Si hubi´semos admitido esta hip´tesis previamente, podr´
                             e                         o                        ıamos haber
realizado un contraste m´s potente, como el siguiente:
                        a
       t.test(A, B, var.equal=TRUE)

                 Two Sample t-test

      data: A and B
      t = 3.4722, df = 19, p-value = 0.002551
      alternative hypothesis: true difference in means is not equal to 0
      95 percent confidence interval:
       0.01669058 0.06734788
      sample estimates:
      mean of x mean of y
       80.02077 79.97875
    Como hemos indicado, una de las condiciones de aplicaci´n de los contrastes anteriores
                                                               o
es la normalidad. Si ´sta falla, puede utilizar el contraste de dos muestras de Wilcoxon (o
                     e
de Mann-Whitney) que solo presupone en la hip´tesis nula que la distribuci´n com´n es
                                                    o                          o      u
continua.
       library(ctest)
       wilcox.test(A, B)

                 Wilcoxon rank sum test with continuity correction
Cap´
   ıtulo 8: Distribuciones probabil´
                                   ısticas                                               43



      data: A and B
      W = 89, p-value = 0.007497
      alternative hypothesis: true mu is not equal to 0

       Warning message:
       Cannot compute exact p-value with ties in: wilcox.test(A, B)
Advierta el mensaje de advertencia (Warning . . . ): Existen valores repetidos en cada mues-
tra, lo que sugiere que los datos no proceden de una distribuci´n continua (puede que ello
                                                                 o
ocurra debido al redondeo).
   Adem´s del diagrama de cajas, existen m´s m´todos para comparar gr´ficamente dos
          a                                   a      e                         a
muestras. As´ las ordenes siguientes:
              ı,    ´
        library(stepfun)
        plot(ecdf(A), do.points=FALSE, verticals=TRUE, xlim=range(A, B))
        plot(ecdf(B), do.points=FALSE, verticals=TRUE, add=TRUE)
representan las dos funciones de distribuci´n emp´
                                           o        ıricas. Por otra parte la funci´n qqplot
                                                                                   o
realizar´ un gr´fico cuantil-cuantil de las dos muestras.
        ıa       a
   El contraste de Kolmogorov-Smirnov, que s´lo presupone que la distribuci´n com´n es
                                                o                                o      u
continua, tambi´n puede aplicarse:
                 e
        ks.test(A, B)

                 Two-sample Kolmogorov-Smirnov test

      data: A and B
      D = 0.5962, p-value = 0.05919
      alternative hypothesis: two.sided

      Warning message:
      cannot compute correct p-values with ties in: ks.test(A, B)
si´ndole de aplicaci´n la misma precauci´n del contraste de Wilcoxon.
  e                 o                   o
Cap´
   ıtulo 9: Ciclos. Ejecuci´n condicional
                           o                                                                                44



9 Ciclos. Ejecuci´n condicional
                 o

9.1 Expresiones agrupadas
    R es un lenguaje de expresiones, en el sentido de que el unico tipo de orden que posee es
                                                             ´
una funci´n o expresi´n que devuelve un resultado. Incluso una asignaci´n es una expresi´n,
           o         o                                                   o                o
cuyo resultado es el valor asignado1 y que puede utilizarse en cualquier sitio en que pueda
utilizarse una expresi´n. En particular es posible realizar asignaciones m´ltiples.
                      o                                                     u
    Las ´rdenes pueden agruparse entre llaves, {expr 1;. . . ; expr m}, en cuyo caso el
         o
valor del grupo es el resultado de la ultima expresi´n del grupo que se haya evaluado.
                                        ´              o
Puesto que un grupo es por s´ mismo una expresi´n, puede incluirse entre par´ntesis y ser
                               ı                    o                            e
utilizado como parte de una expresi´n mayor. Este proceso puede repetirse si se considera
                                     o
necesario.

    ´
9.2 Ordenes de control

9.2.1 Ejecuci´n condicional: la orden if
             o
    Existe una construcci´n condicional de la forma
                           o
        if (expr 1) expr 2 else expr 3
donde expr 1 debe producir un valor l´gico, y si ´ste es verdadero, (T), se ejecutar´ expr 2.
                                         o         e                                 a
Si es falso, (F), y se ha escrito la opci´n else, que es opcional, se ejecutar´ expr 3.
                                         o                                    a
    A menudo suelen utilizarse los operadores  y || como condiciones de una orden if.
En tanto que  y | se aplican a todos los elementos de un vector,  y || se aplican a
vectores de longitud uno y s´lo eval´an el segundo argumento si es necesario, esto es, si el
                               o       u
valor de la expresi´n completa no se deduce del primer argumento.
                    o
    Existe una versi´n vectorizada de la construcci´n if/else, que es la funci´n ifelse,
                      o                               o                            o
que tiene la forma ifelse(condici´n, a, b) y devuelve un vector cuya longitud es la del
                                       o
m´s largo de sus argumentos y cuyo elemento i es a[i] si condici´n[i] es cierta, y b[i]
  a                                                                    o
en caso contrario.

              ´
9.2.2 Ciclos: Ordenes for, repeat y while
   Existe una construcci´n repetitiva de la forma
                          o
       for (nombre in expr 1) expr 2
donde nombre es la variable de control de iteraci´n, expr 1 es un vector (a menudo de la
                                                  o
forma m:n), y expr 2 es una expresi´n, a menudo agrupada, en cuyas sub-expresiones puede
                                     o
aparecer la variable de control, nombre. expr 2 se eval´a repetidamente conforme nombre
                                                        u
recorre los valores del vector expr 1.
   Por ejemplo, suponga que ind es un vector de indicadores de clase y se quieren hacer
gr´ficos de y sobre x, separados para cada clase. Una posibilidad es usar la funci´n
  a                                                                                   o
coplot(), que veremos m´s adelante, que produce una matriz de gr´ficos correspondientes
                            a                                       a
a cada nivel del factor. Otra forma de hacerlo es usar la funci´n for:
                                                               o
 1
     La asignaci´n devuelve el resultado de modo invisible. Basta escribirla entre par´ntesis para comprobarlo.
                o                                                                     e
Cap´
   ıtulo 9: Ciclos. Ejecuci´n condicional
                           o                                                              45



        xc - split(x, ind)
        yc - split(y, ind)
        for (i in 1:length(yc)) {
            plot(xc[[i]], yc[[i]]);
            abline(lsfit(xc[[i]], yc[[i]]))
          }
La funci´n split() produce una lista de vectores dividiendo un vector de acuerdo a las
          o
clases especificadas por un factor. Consulte la ayuda para obtener m´s detalles.
                                                                       a
       Nota: En R, la funci´n for() se utiliza mucho menos que en lenguajes tradi-
                             o
       cionales, ya que no aprovecha las estructuras de los objetos. El c´digo que
                                                                             o
       trabaja directamente con las estructuras completas suele ser m´s claro y m´s
                                                                        a            a
       r´pido.
        a
   Otras estructuras de repetici´n son
                                  o
        repeat expr
y
        while (condici´n) expr
                          o
   La funci´n break se utiliza para terminar cualquier ciclo. Esta es la unica forma (salvo
            o                                                              ´
que se produzca un error) de finalizar un ciclo repeat.
   La funci´n next deja de ejecutar el resto de un ciclo y pasa a ejecutar el siguiente2 .
            o
   Las ´rdenes de control se utilizan habitualmente en la escritura de funciones, que se
         o
tratar´n en el Cap´
      a             ıtulo 10 [Escritura de funciones], p´gina 46, donde se ver´n varios ejem-
                                                        a                     a
plos.




 2
     No existe equivalente para esta orden en Fortran o Basic
Cap´
   ıtulo 10: Escritura de nuevas funciones                                               46



10 Escritura de nuevas funciones
   Como hemos visto informalmente hasta ahora, R permite crear objetos del modo func-
tion, que constituyen nuevas funciones de R, que se pueden utilizar a su vez en expresiones
posteriores. En este proceso, el lenguaje gana considerablemente en potencia, comodidad y
elegancia, y aprender a escribir funciones utiles es una de las mejores formas de conseguir
                                           ´
que el uso de R sea c´modo y productivo.
                     o
    Debemos recalcar que muchas de las funciones que se suministran con R, como mean,
var o postscript, est´n de hecho escritas en R y, por tanto, no difieren materialmente de
                      a
las funciones que pueda escribir el usuario.
     Para definir una funci´n debe realizar una asignaci´n de la forma
                          o                            o
        NombreDeFuncion -function(arg 1, arg 2, ...) expresi´n      o
donde expresi´n es una expresi´n de R (normalmente una expresi´n agrupada) que utiliza
             o                 o                                  o
los argumentos arg i para calcular un valor que es devuelto por la funci´n.
                                                                        o
   El uso de la funci´n es normalmente de la forma NombreDeFuncion(expr 1,expr 2,...)
                     o
y puede realizarse en cualquier lugar en que el uso de una funci´n sea correcto.
                                                                o

10.1 Ejemplos elementales
   En primer lugar, consideremos una funci´n que calcule el estad´
                                            o                     ıstico t de Student para
dos muestras realizando “todos los pasos”. Este es un ejemplo muy artificial, naturalmente,
ya que hay otros modos, mucho m´s sencillos, de obtener el mismo resultado.
                                  a
     La funci´n se define del siguiente modo:
             o
        DosMuestras - function(y1, y2) {
            n1 - length(y1); n2 - length(y2)
            yb1 - mean(y1);       yb2 - mean(y2)
            s1 - var(y1);         s2 - var(y2)
            s - ((n1-1)*s1 + (n2-1)*s2)/(n1+n2-2)
            tst - (yb1 - yb2)/sqrt(s2*(1/n1 + 1/n2))
            tst
          }
   Una vez definida esta funci´n, puede utilizarse para realizar un contraste de t de Student
                              o
para dos muestras, del siguiente modo:
       tStudent - DosMuestras(datos$hombre, datos$mujer); tStudent
   En segundo lugar, considere por ejemplo la creaci´n de una funci´n1 que calcule los
                                                      o                o
coeficientes de la proyecci´n ortogonal del vector y sobre el espacio de las columnas de la
                          o
matriz X, esto es, la estimaci´n de los coeficientes de regresi´n por m´
                              o                                o         ınimos cuadrados.
Esta tarea se realizar´ normalmente con la funci´n qr(); sin embargo es algo compleja y
                      ıa                         o
compensa tener una funci´n como la siguiente para usarla directamente.
                          o
     Dado un vector, yn×1 , y una matriz, Xn×p , entonces definimos Xy del siguiente modo:
     (X X)− X y, donde (X X)− es la inversa generalizada de X X.
     Podemos definir la funci´n Proyeccion del siguiente modo
                            o
 1
     En Matlab, ser´ la orden 
                   ıa
Cap´
   ıtulo 10: Escritura de nuevas funciones                                                             47



         Proyeccion - function(X, y) {
          X - qr(X)
          qr.coef(X, y)
        }
     Una vez creada, puede utilizarla en cualquier expresi´n, como en la siguiente:
                                                          o
        CoefReg - Proyeccion(matrizX, variabley)
    La funci´n lsfit() realiza la misma acci´n2 . Tambi´n utiliza las funciones qr() y
             o                                o           e
qr.coef() en la forma anterior para realizar esta parte del c´lculo. Por lo tanto puede ser
                                                             a
interesante haber aislado esta parte en una funci´n si se va a utilizar frecuentemente. Si
                                                 o
ello es as´ probablemente ser´ conveniente construir un operador binario matricial para
          ı,                  ıa
que el uso sea m´s c´modo.
                a o

10.2 C´mo definir un operador binario
      o
   Si hubi´semos dado a la funci´n Proyeccion un nombre delimitado por s´
          e                        o                                    ımbolos de
porcentaje, %, por ejemplo de la forma
      %barra%
podr´ utilizarse como un operador binario en vez de con la forma funcional. Suponga, por
     ıa
ejemplo, que elige3 como nombre, entre los s´
                                            ımbolos de porcentaje, el de !. La definici´n
                                                                                      o
de la funci´n deber´ comenzar as´
           o       ıa           ı:
        %!% - function(X, y) { ... }
donde hay que destacar la utilizaci´n de comillas. Una vez definida la funci´n se utilizar´
                                   o                                       o             ıa
de la forma X %!% y.
   Los operadores producto matricial, %*%, y producto exterior, %o%, son ejemplos de ope-
radores binarios definidos de esta forma.

10.3 Argumentos con nombre. Valores predeterminados
   Ya vimos en la Secci´n 2.3 [Generacion de sucesiones], p´gina 9 que cuando los argumen-
                       o                                   a
tos se dan por nombre, “nombre=objeto”, el orden de los mismos es irrelevante. Adem´s   a
pueden utilizarse ambas formas simult´neamente: se puede comenzar dando argumentos
                                       a
por posici´n y despu´s a˜adir argumentos por nombre.
          o         e n
     Esto es, si la funci´n fun1 est´ definida como
                         o          a
         fun1 - function(datos, hoja.datos, grafico, limite) {
             [aqu´ ir´ la definici´n]
                  ı ıa           o
          }
las siguientes llamadas a la funci´n son equivalentes:
                                  o
        resultado - fun1(d, hd, T, 20)
        resultado - fun1(d, hd, grafico=T, limite=20)
        resultado - fun1(datos=d, limite=20, grafico=T, hoja.datos=hd)
 2
     Vea tambi´n los m´todos descritos en Cap´
                e       e                      ıtulo 11 [Modelos estadisticos en R], p´gina 55
                                                                                      a
 3
     El uso del s´ımbolo  para el nombre, como en Matlab, no es una elecci´n conveniente, ya que presenta
                                                                             o
     ciertos problemas en este contexto.
Cap´
   ıtulo 10: Escritura de nuevas funciones                                                   48



   En muchos casos, puede suministrarse un valor predeterminado para algunos argumentos,
en cuyo caso al ejecutar la funci´n el argumento puede omitirse si el valor predeterminado
                                 o
es apropiado. Por ejemplo, si fun1 estuviese definida como
       fun1 - function(datos, hoja.datos, grafico=TRUE, limite=20) { ... }
la llamada a la funci´n
                     o
       resultado - fun1(d, hd)
ser´ equivalente a cualquiera de las tres llamadas anteriores. Tenga en cuenta que puede
   ıa
modificar los valores predeterminados, como en el caso siguiente:
       resultado - fun1(d, hd, limite=10)
   Es importante destacar que los valores predeterminados pueden ser expresiones arbi-
trarias, que incluso involucren otros argumentos de la misma funci´n, y no est´n restringidos
                                                                  o           a
a ser constantes como en el ejemplo anterior.


10.4 El argumento ‘...’
    Otra necesidad frecuente es la de que una funci´n pueda pasar los valores de sus argu-
                                                   o
mentos a otra funci´n. Por ejemplo, muchas funciones gr´ficas, como plot(), utilizan la
                     o                                    a
funci´n par(), y permiten al usuario pasar los par´metros gr´ficos a par() para contro-
     o                                              a          a
lar el resultado gr´fico. (V´ase Secci´n 12.4.1 [La funcion par()], p´gina 76 para detalles
                   a        e         o                              a
adicionales sobre la funci´n par().) Esta acci´n puede realizarse incluyendo un argumento
                          o                   o
adicional, “...”, en la funci´n, que puede ser traspasado. A continuaci´n se incluye un
                              o                                           o
bosquejo de ejemplo.
      fun1 - function(datos, hoja.datos, grafico=TRUE, limite=20, ...)                  {
        [Algunas ´rdenes]
                 o
        if (grafico)
          par(pch=*, ...)
        [M´s ´rdenes]
           a o
      }


10.5 Asignaciones dentro de una funci´n
                                     o
   Es fundamental tener en cuenta que cualquier asignaci´n ordinaria realizada dentro de
                                                              o
una funci´n es local y temporal y se pierde tras salir de la funci´n. Por tanto, la asignaci´n
         o                                                        o                         o
X - qr(X) no afecta al valor del argumento de la funci´n en que se utiliza.
                                                          o
   Para comprender completamente las reglas que gobiernan el ´mbito de las asignaciones
                                                               a
en R es necesario familiarizarse con la noci´n de marco (frame) de evaluaci´n. Este es un
                                            o                              o
tema complejo que no ser´ tratado en este manual.
                          a
    Si desea realizar asignaciones globales y permanentes dentro de una funci´n, deber´
                                                                              o        a
utilizar el operador de ‘superasignaci´n’, -, o la funci´n assign. Puede encontrar una
                                      o                   o
explicaci´n m´s detallada consultando la ayuda.
          o    a
   El operador - es diferente en R y en S-Plus. Las diferencias ser´n tratadas en la
                                                                     a
Secci´n 10.7 [Ambito], p´gina 51.
     o                  a
Cap´
   ıtulo 10: Escritura de nuevas funciones                                              49



10.6 Ejemplos m´s complejos
               a

10.6.1 Factores de eficiencia en dise˜ o en bloques
                                    n
   Estudiaremos ahora un ejemplo de funci´n m´s complejo: el c´lculo de factores de
                                              o     a                 a
eficiencia en un dise˜o en bloques. (Algunos aspectos de este problema ya han sido tratados
                    n
en la Secci´n 5.3 [Variables indexadas utilizadas como indices], p´gina 21.)
           o                                                      a
   Un dise˜o en bloques est´ definido por dos factores, por ejemplo bloques (b niveles) y
           n                 a
variedades, (v niveles). Si Rv×v y Kb×b son las matrices de r´plicas y tama˜o de bloque,
                                                                e             n
y Nb×v , es la matriz de incidencia, entonces los factores de eficiencia se definen como los
autovalores de la matriz

                        E = Iv − R−1/2 N K −1 N R−1/2 = Iv − A A,
donde A = K −1/2 N R−1/2 .
   Por ejemplo, la funci´n podr´ escribirse as´
                        o      ıa             ı:
      EfiDisBlo - function(bloques, variedades) {
          bloques - as.factor(bloques)            # peque˜a precauci´n
                                                           n           o
          b - length(levels(bloques))
          variedades - as.factor(variedades)      # peque˜a precauci´n
                                                           n           o
          v - length(levels(variedades))
          K - as.vector(table(bloques))           # elimina el atributo dim
          R - as.vector(table(variedades))        # elimina el atributo dim
          N - table(bloques, variedades)
          A - 1/sqrt(K) * N * rep(1/sqrt(R), rep(b, v))
          sv - svd(A)
          list(eficiencia=1 - sv$d^2, cvbloques=sv$u, cvvariedad=sv$v)
     }
   Desde el punto de vista num´rico, es levemente mejor trabajar con la funci´n descom-
                               e                                             o
posici´n SVD en vez de con la funci´n de los autovalores.
      o                            o
   El resultado de esta funci´n es una lista que contiene los factores de eficiencia como
                             o
primera componente, y que adem´s incluye dos contrastes, puesto que, a veces, suministran
                                a
informaci´n adicional util.
         o            ´

10.6.2 C´mo eliminar los nombres al imprimir una variable
         o
       indexada
   Para imprimir grandes matrices o variables indexadas en general, a menudo es interesante
hacerlo en forma compacta sin los nombres de variables. La simple eliminaci´n del atributo
                                                                             o
dimnames no es suficiente, sino que la soluci´n consiste en asignar a dicho atributo cadenas
                                            o
de caracteres vac´
                 ıas. Por ejemplo, para imprimir la matriz X puede escribir
       temp - X
       dimnames(temp) - list(rep(, nrow(X)), rep(, ncol(X))
       temp; rm(temp)
   Este resultado puede conseguirse f´cilmente definiendo la funci´n SinNombres, que
                                     a                           o
aparece a continuaci´n, que da un peque˜o rodeo para conseguir el mismo resultado al
                    o                   n
Cap´
   ıtulo 10: Escritura de nuevas funciones                                                 50



tiempo que ilustra el hecho de que las funciones pueden ser cortas y al mismo tiempo muy
efectivas y utiles.
            ´
       SinNombres - function(a) {
         ## Elimina los nombres de dimensiones para impresi´n compacta.
                                                               o
         d - list()
         l - 0
         for(i in dim(a)) {
            d[[l - l + 1]] - rep(, i)
         }
         dimnames(a) - d
         a
       }
   Una vez definida la funci´n, para imprimir la matriz X en forma compacta basta con
                             o
escribir
        SinNombres(X)
   Esta funci´n es de especial utilidad al imprimir variables indexadas de tipo entero y de
              o
gran tama˜o, en que el inter´s real se centra m´s en los posibles patrones que en los valores
           n                e                  a
en s´ mismos.
    ı

10.6.3 Integraci´n num´rica recursiva
                o     e
    Las funciones pueden ser recursivas e, incluso, pueden definir funciones en su interior.
Advierta, sin embargo, que dichas funciones, y por supuesto las variables, no son heredadas
por funciones llamadas en marcos de evaluaci´n superior, como lo ser´ si estuviesen en la
                                              o                         ıan
trayectoria de b´squeda.
                u
    El ejemplo siguiente muestra una forma, un tanto ingenua, de realizar integraci´n      o
num´rica unidimensional recursivamente. El integrando se eval´a en los extremos del
     e                                                               u
intervalo y en el centro. Si el resultado de aplicar la regla del trapecio a un solo intervalo
es bastante pr´xima al resultado de aplicarlo a los dos, entonces este ultimo valor se
               o                                                              ´
considera el resultado. En caso contrario se aplica el procedimiento a cada uno de los
dos intervalos. El resultado es un proceso de integraci´n adaptativo que concentra las
                                                            o
evaluaciones de la funci´n en las regiones en que es menos lineal. Conlleva, sin embargo,
                         o
un gran consumo de recursos, y la funci´n solo es competitiva con otros algoritmos cuando
                                         o
el integrando es al tiempo suave y dif´ de evaluar. El ejemplo es tambi´n un peque˜o
                                        ıcil                                   e           n
rompecabezas de programaci´n en R.
                              o
       area - function(f, a, b, eps = 1.0e-06, lim = 10) {
         fun1 - function(f, a, b, fa, fb, a0, eps, lim, fun) {
           ## La funci´n ‘fun1’ s´lo es visible dentro de ‘area’
                       o           o
           d - (a + b)/2
           h - (b - a)/4
           fd - f(d)
           a1 - h * (fa + fd)
           a2 - h * (fd + fb)
           if(abs(a0 - a1 - a2)  eps || lim == 0)
              return(a1 + a2)
           else {
              return(fun(f, a, d, fa, fd, a1, eps, lim - 1, fun) +
Cap´
   ıtulo 10: Escritura de nuevas funciones                                                  51



                      fun(f, d, b, fd, fb, a2, eps, lim - 1, fun))
            }
          }
          fa - f(a)
          fb - f(b)
          a0 - ((fa + fb) * (b - a))/2
          fun1(f, a, b, fa, fb, a0, eps, lim, fun1)
      }

     ´
10.7 Ambito
   Este apartado es algo m´s t´cnico que otras partes de este documento. Sin embargo,
                          a e
pormenoriza una de las mayores diferencias entre S-Plus y R.
   Los s´ımbolos que tienen lugar en el cuerpo de una funci´n se dividen en tres clases:
                                                                  o
par´metros formales, variables locales y variables libres. Los par´metros formales son los
   a                                                                  a
que aparecen en la lista de argumentos de la funci´n y sus valores quedan determinados
                                                        o
por el proceso de asignaci´n de los argumentos de la funci´n a los par´metros formales.
                              o                                 o            a
Las variables locales son aquellas cuyos valores est´n determinados por la evaluaci´n de
                                                        a                                o
expresiones en el cuerpo de las funciones. Las variables que no son par´metros formales
                                                                              a
ni variables locales se denominan variables libres. Las variables libres se transforman en
variables locales si se les asigna valor. Para aclarar los conceptos, consideremos la siguiente
funci´n:
     o
       f - function(x) {
         y - 2*x
         print(x)
         print(y)
         print(z)
       }
    En esta funci´n, x es un par´metro formal, y es una variable local y z es una variable
                 o              a
libre.
    En R la asignaci´n de valor a una variable libre se realiza consultando el entorno en el
                    o
que la funci´n se ha creado, lo que se denomina ´mbito l´xico. En primer lugar definamos
            o                                     a       e
la funci´n cubo:
        o
      cubo - function(n) {
         sq - function() n*n
         n*sq()
      }
    La variable n de la funci´n sq no es un argumento para esta funci´n. Por tanto es una
                              o                                        o
variable libre y las reglas de ´mbito deben utilizarse para determinar el valor asociado con
                               a
ella. En un ´mbito est´tico (como en S-Plus) el valor es el asociado con una variable global
             a          a
llamada n. En un ´mbito l´xico (como en R) es un par´metro para la funci´n cubo puesto
                    a        e                           a                   o
que hay una asignaci´n activa para la variable n en el momento en que se define la funci´n
                       o                                                                  o
sq. La diferencia de evaluaci´n entre R y S-Plus es que S-Plus intenta encontrar una
                                 o
variable global llamada n en tanto que R primero intenta encontrar una variable llamada n
en el entorno creado cuando se activ´ cubo.
                                      o
       ## primera evaluaci´n en S
                            o
Cap´
   ıtulo 10: Escritura de nuevas funciones                                                            52



        S cubo(2)
        Error in sq(): Object n not found
        Dumped
        S n - 3
        S cubo(2)
        [1] 18
        ## la misma funci´n evaluada en R
                          o
        R cubo(2)
        [1] 8
    El ´mbito lexicogr´fico puede utilizarse para conceder a las funciones un estado cam-
        a              a
biante. En el siguiente ejemplo mostramos c´mo puede utilizarse R para simular una cuenta
                                             o
bancaria. Una cuenta bancaria necesita tener un balance o total, una funci´n para realizar
                                                                            o
dep´sitos, otra para retirar fondos, y una ultima para conocer el balance.
    o                                      ´
    Conseguiremos esta capacidad creando tres funciones dentro de anota.importe y de-
volviendo una lista que los contiene. Cuando se ejecuta anota.importe toma un argumento
num´rico, total, y devuelve una lista que contiene las tres funciones. Puesto que estas fun-
      e
ciones est´n definidas dentro de un entorno que contiene a total, ´stas tendr´n acceso a
            a                                                         e         a
su valor.
    El operador de asignaci´n especial, -, se utiliza para cambiar el valor asociado con
                              o
total. Este operador comprueba los entornos creados desde el actual hasta el primero
hasta encontrar uno que contenga el s´   ımbolo total y cuando lo encuentra, sustituye su
valor en dicho entorno por el valor de la derecha de la expresi´n. Si se alcanza el nivel
                                                                  o
superior, correspondiente al entorno global, sin encontrar dicho s´ ımbolo, entonces lo crea
en ´l y realiza la asignaci´n. Para muchos usos, - crea una variable global y le asigna
    e                       o
el valor de la derecha de la expresi´n4 . Solo cuando - ha sido utilizado en una funci´n
                                     o                                                    o
que ha sido devuelta como el valor de otra funci´n ocurrir´ la conducta especial que hemos
                                                 o         a
descrito.
        anota.importe - function(total) {
          list(
              deposito = function(importe) {
                  if(importe = 0)
                      stop(Los dep´sitos deben ser positivos!n)
                                      o
                    total - total + importe
                    cat(Depositado,importe,. El total es, total, nn)
              },
              retirada = function(importe) {
                  if(importe  total)
                      stop(No tiene tanto dinero!n)
                  total - total - importe
                  cat(Descontado, importe,. El total es, total,nn)
              },
              balance = function() {
                  cat(El total es, total,nn)
              }
          )
 4
     En cierto sentido esto emula la conducta en S-Plus puesto que en S-Plus este operador siempre crea o
     asigna a una variable global.
Cap´
   ıtulo 10: Escritura de nuevas funciones                                                 53



        }

         Antonio - anota.importe(100)
         Roberto - anota.importe(200)

         Antonio$retirada(30)
         Antonio$balance()
         Roberto$balance()

         Antonio$deposit(50)
         Antonio$balance()
         Antonio$retirada(500)

10.8 Personalizaci´n del entorno
                  o
   El usuario de R puede adaptar el entorno de trabajo a sus necesidades de varias formas.
Existe un archivo de inicializaci´n del sistema y cada directorio puede tener su propio
                                    o
archivo de inicializaci´n especial. Por ultimo, puede usar las funciones especiales .First y
                         o                ´
.Last.
   El archivo de inicializaci´n del sistema se denomina Rprofile y se encuentra en el
                                 o
subdirectorio library del directorio inicial de R. Las ´rdenes contenidas en este archivo
                                                          o
se ejecutan cada vez que se comienza una sesi´n de R, sea cual sea el usuario. Existe un
                                                 o
segundo archivo, personal, denominado .Rprofile5 que puede estar en cualquier directorio.
Si ejecuta R desde un directorio que contenga este archivo, se ejecutar´n las ´rdenes que
                                                                             a     o
incluya. Este archivo permite a cada usuario tener control sobre su espacio de trabajo y
permite disponer de diferentes m´todos de inicio para diferentes directorios de trabajo.
                                    e
   Si no existe el archivo .Rprofile en el directorio inicial, entonces R buscar´ si existe el
                                                                                   a
archivo .Rprofile en el directorio inicial del usuario y, si existe, lo utilizar´.
                                                                                 a
   Si existe la funci´n .First() (en cualquiera de los dos archivos de perfil o en el archivo
                       o
de imagen ‘.RData’) recibir´ un tratamiento especial, ya que se ejecutar´ al comienzo de
                                a                                              a
la sesi´n de R, y por tanto puede utilizarse para inicializar el entorno. Por ejemplo, la
       o
definici´n del siguiente ejemplo sustituye el s´
        o                                       ımbolo de R para que sea $ y establece otras
caracter´ısticas que quedan establecidas en el resto de la sesi´n.
                                                               o
   En resumen, la secuencia en que se ejecutan los archivos es, ‘Rprofile’, ‘.Rprofile’,
‘.RData’ y por ultimo la funci´n .First(). Recuerde que cualquier definici´n en un archivo
                 ´                o                                             o
posterior enmascarar´ las de un archivo precedente.
                         a
        .First - function() {
             options(prompt=$ , continue=+t)
             # $ ser´ el s´
                     a     ımbolo de sistema
             options(digits=5, length=999)
             # personaliza n´meros y resultados
                              u
             x11()
             # abre una ventana para gr´ficos
                                          a
             par(pch = +)
             # car´cter para realizaci´n de gr´ficos
                   a                   o      a
 5
     Por tanto, al comenzar su nombre con un punto, en UNIX, ser´ un archivo oculto.
                                                                a
Cap´
   ıtulo 10: Escritura de nuevas funciones                                               54



           source(paste(getwd(), /R/MisOrdenes.R, sep = ))
           # ejecuta las ´rdenes contenidas en MisOrdenes.R
                         o
           library(stepfun)
           # conecta la biblioteca stepfun
      }
   De modo an´logo, si existe la funci´n .Last(), se ejecutar´ al t´rmino de la sesi´n. A
               a                      o                      a     e                o
continuaci´n se muestra un ejemplo de esta funci´n.
          o                                     o
       .Last - function() {
           Graficos.off()
           # Una peque˜a medida de seguridad.
                        n
           cat(paste(system.date(),nAdi´sn))
                                             o
           # Ya es la hora de irse.
      }

10.9 Clases. Funciones gen´ricas. Orientaci´n a objetos
                          e                o
    La clase de un objeto determina de qu´ modo ser´ tratado por lo que se conoce como
                                            e          a
funciones gen´ricas. Volviendo la oraci´n por pasiva, una funci´n ser´ gen´rica si realiza
               e                         o                          o    a   e
una tarea o acci´n sobre sus argumentos espec´
                  o                              ıfica de la clase de cada argumento. Si el
argumento carece del atributo clase, o lo posee de uno no contemplado espec´  ıficamente por
la funci´n gen´rica en cuesti´n, se suministra una acci´n predeterminada.
         o     e              o                         o
    El mecanismo de clase ofrece al usuario la posibilidad de dise˜ar y escribir funciones
                                                                      n
gen´ricas para prop´sitos especiales. Entre otras funciones gen´ricas se encuentran plot(),
    e               o                                            e
para representar objetos gr´ficamente, summary(), para realizar an´lisis descriptivos de
                              a                                         a
varios tipos, y anova(), para comparar modelos estad´   ısticos.
    El n´mero de funciones gen´ricas que pueden tratar una clase de modo espec´
         u                      e                                                 ıfico puede
ser muy grande. Por ejemplo, entre las funciones que pueden tratar de modo espec´       ıfico
objetos de la clase data.frame se encuentran
       [      [[-      any      as.matrix
       [-    model     plot     summary
    Puede obtener la lista completa utilizando la funci´n methods:
                                                       o
        methods(class=data.frame)
    Como es esperable, el n´mero de clases que una funci´n gen´rica puede tratar tambi´n
                            u                               o      e                      e
puede ser grande. Por ejemplo, la funci´n plot() tiene variantes, entre otras, para las
                                           o
siguientes clases de objetos:
       data.frame     default      density     factor
Tambi´n en este caso puede obtener la lista completa actual utilizando la funci´n methods:
       e                                                                        o
        methods(plot)
Cap´
   ıtulo 11: Modelos estad´
                          ısticos en R                                                       55



11 Modelos estad´
                ısticos en R
   En este apartado, suponemos al lector familiarizado con la terminolog´ estad´
                                                                             ıa      ıstica, en
particular con el an´lisis de regresi´n y el an´lisis de varianza. Posteriormente haremos
                      a               o          a
algunas suposiciones m´s ambiciosas, particularmente el conocimiento de modelos lineales
                         a
generalizados y regresi´n no lineal.
                        o
   Los requisitos para el ajuste de modelos estad´ ısticos est´n suficientemente bien definidos
                                                              a
para hacer posible la construcci´n de herramientas generales de aplicaci´n a un amplio
                                   o                                          o
espectro de problemas.
   R contiene un conjunto de posibilidades que hace que el ajuste de modelos estad´      ısticos
sea muy simple. Como hemos mencionado en la introducci´n, la salida b´sica es m´
                                                              o            a          ınima, y
es necesario utilizar las funciones extractoras para obtener todos los detalles.

11.1 Definici´n de modelos estad´
            o                  ısticos. F´rmulas
                                         o
   El ejemplo b´sico de un modelo estad´
               a                       ıstico es un modelo de regresi´n lineal con errores
                                                                     o
independientes y homosced´sticos
                          a
                          p
                  yi =         βj xij + ei ,    ei ∼ NID(0, σ 2 ),   i = 1, . . . , n
                         j=0

En notaci´n matricial puede escribirse
         o

                                               y = Xβ + e

donde y es el vector de respuesta, y X es la matriz del modelo o matriz de dise˜o, formada
                                                                                    n
por las columnas x0 , x1 , . . . , xp , que son las variables predictoras. Muy a menudo x0 ser´
                                                                                              a
una columna de unos y definir´ el punto de corte o t´rmino independiente.
                                    a                       e

Ejemplos
   Antes de dar una definici´n formal, algunos ejemplos ayudar´n a centrar las ideas.
                              o                                    a
   Supongamos que y, x, x0, x1, x2, . . . son variables num´ricas, que X es una matriz y que
                                                              e
A, B, C, . . . son factores. Las f´rmulas que aparecen en la parte izquierda de la siguiente
                                  o
tabla, especifican los modelos estad´ ısticos descritos en la parte de la derecha.
y∼x
y∼1+x       Ambos definen el mismo modelo de regresi´n lineal de y sobre x. El primero
                                                       o
            contiene el t´rmino independiente impl´
                         e                        ıcito y el segundo, expl´
                                                                          ıcito.
y∼0+x
y ∼ -1 + x
y ∼ x - 1 Regresi´n lineal de y sobre x sin t´rmino independiente, esto es, que pasa por
                   o                         e
           el origen de coordenadas.
log(y) ∼ x1 + x2
          Regresi´n m´ltiple de la variable transformada, log(y), sobre x 1 y x 2 (con un
                 o    u
          t´rmino independiente impl´
           e                          ıcito).
Cap´
   ıtulo 11: Modelos estad´
                          ısticos en R                                                       56



y ∼ poly(x,2)
y ∼ 1 + x + I(x^2)
            Regresi´n polinomial de y sobre x de segundo grado. La primera forma utiliza
                   o
            polinomios ortogonales y la segunda utiliza potencias de modo expl´
                                                                              ıcito.
y ∼ X + poly(x,2)
           Regresi´n m´ltiple de y con un modelo matricial consistente en la matriz X y
                  o    u
           t´rminos polinomiales en x de segundo grado.
            e
y∼A            An´lisis de varianza de entrada simple de y, con clases determinadas por A.
                 a
y∼A+x          An´lisis de covarianza de entrada simple de y, con clases determinadas por A,
                  a
               y con covariante x.
y   ∼   A*B
y   ∼   A + B + A:B
y   ∼   B %in% A
y   ∼   A/B     Modelo no aditivo de dos factores de y sobre A y B. Los dos primeros es-
                pecifican la misma clasificaci´n cruzada y los dos ultimos especifican la misma
                                            o                    ´
                clasificaci´n anidada. En t´rminos abstractos, los cuatro especifican el mismo
                          o               e
                subespacio de modelos.
y ∼ (A + B + C)^2
y ∼ A*B*C - A:B:C
           Experimento con tres factores con un modelo que contiene efectos principales e
           interacciones de dos factores solamente. Ambas f´rmulas especifican el mismo
                                                           o
           modelo.
y∼A*x
y ∼ A/x
y ∼ A/(1 + x) - 1
           Modelos de regresi´n lineal simple separados de y sobre x para cada nivel de
                             o
           A. La ultima forma produce estimaciones expl´
                  ´                                      ıcitas de tantos t´rminos inde-
                                                                           e
           pendientes y pendientes como niveles tiene A.
y ∼ A*B + Error(C)
           Un experimento con dos factores de tratamiento, A y B, y estratos de error
           determinados por el factor C. Por ejemplo, un experimento split plot, con
           gr´ficos completos (y por tanto tambi´n subgr´ficos) determinados por el factor
             a                                 e       a
           C.
   El operador ∼ se utiliza para definir una f´rmula de modelo en R. La forma, para un
                                             o
modelo lineal ordinario es
      respuesta ∼ op 1 term 1 op 2 term 2 op 3 term 3 . . .
donde
respuesta      es un vector o una matriz (o una expresi´n que eval´e a un vector o matriz)
                                                         o           u
               que definen, respectivamente, la o las variables respuesta
op i           es un operador, bien +, bien -, que implica la inclusi´n o exclusi´n, respectiva-
                                                                     o           o
               mente, de un t´rmino en el modelo. El primero, +, es opcional.
                             e
term i         es un t´rmino de uno de los siguientes tipos
                      e
Cap´
   ıtulo 11: Modelos estad´
                          ısticos en R                                                   57



              • una expresi´n vectorial, una expresi´n matricial, o el n´mero 1; o
                           o                        o                   u
              • un factor; o
              • una expresi´n de f´rmula consistente en factores, vectores o matrices conec-
                           o      o
                tados mediante operadores de f´rmula.
                                               o
            En todos los casos, cada t´rmino define una colecci´n de columnas que deben
                                      e                         o
            ser a˜adidas o eliminadas de la matriz del modelo. Un 1 significa un t´rmino
                 n                                                                  e
            independiente y est´ incluido siempre, salvo que se elimine expl´
                               a                                            ıcitamente.
    Los operadores de f´rmula son similares a la notaci´n de Wilkinson y Rogers utilizada en
                       o                               o
los programas Glim y Genstat. Un cambio inevitable es que el operador ‘.’ se ha sustituido
por ‘:’ puesto que el punto es un car´cter v´lido para nombres de objetos en R. Un resumen
                                      a      a
de la notaci´n se encuentra en la siguiente tabla (basada en Chambers  Hastie, 1992, p.29).
            o
Y ∼M        Y se modeliza como M.
M1 +M2
            Incluye M 1 y M 2.
M1 -M2
            Incluye M 1 exceptuando los t´rminos de M 2.
                                         e
M1 :M2
            El producto tensorial de M 1 y M 2. Si ambos son factores, corresponde al
            factor “subclases”.
M 1 %in% M 2
          Similar a M 1:M 2, pero con diferente codificaci´n.
                                                         o
M1 *M2
            M 1 + M 2 + M 1:M 2.
M1 /M2
            M 1 + M 2 %in% M 1.
M ^n        Todos los t´rminos de M junto a las “interacciones” hasta el orden n
                       e
I(M )       A´ M. Dentro de M todos los operadores tienen su sentido aritm´tico habitual
              ısla                                                        e
            y este t´rmino aparece en la matriz del modelo.
                    e
    Advierta que, dentro de los par´ntesis que habitualmente rodean los argumentos de una
                                   e
funci´n, todos los operadores tienen su sentido aritm´tico habitual. La funci´n I() es
     o                                                  e                      o
la funci´n identidad, utilizada solamente para poder introducir t´rminos en las f´rmulas,
        o                                                         e              o
defini´ndolos mediante operadores aritm´ticos.
      e                                   e
   En particular, cuando las f´rmulas especifican columnas de la matriz del modelo, la
                               o
especificaci´n de los par´metros es impl´
           o            a               ıcita. Este no es el caso en otros contextos, por
ejemplo en la especificaci´n de modelos no lineales.
                         o

11.1.1 Contrastes
   Es necesario conocer, aunque sea someramente, el modo en que las f´rmulas del modelo
                                                                     o
determinan las columnas de la matriz del modelo. Esto es sencillo si las variables son
Cap´
   ıtulo 11: Modelos estad´
                          ısticos en R                                                    58



continuas, ya que cada una constituir´ una columna de dicha matriz. Del mismo modo, si
                                     a
el modelo incluye un t´rmino independiente, contribuir´ con una columna de unos.
                      e                               a
   En el caso de un factor, A, con k niveles, la respuesta depende de si el factor es nominal
u ordinal. En el caso de un factor nominal, se generan k − 1 columnas correspondien-
tes a los indicadores desde el segundo hasta el k-´simo nivel del factor. (Por tanto, la
                                                      e
parametrizaci´n impl´
              o      ıcita consiste en contrastar la respuesta del primer nivel frente a cada
uno de los restantes niveles.) En el caso de un factor ordinal, las k − 1 columnas son los
polinomios ortogonales sobre 1, ..., k, omitiendo el t´rmino constante.
                                                         e
   Esta situaci´n puede parecerle complicada, pero a´n hay m´s. En primer lugar, si el
                o                                      u        a
t´rmino independiente se omite en un modelo que contiene alg´n t´rmino de tipo factor, el
 e                                                            u e
primero de dichos t´rminos se codifica en k columnas correspondientes a los indicadores de
                    e
todos los niveles del factor. En segundo lugar, todo este comportamiento puede cambiarse
mediante el argumento contrasts de options. Los valores predeterminados son:
      options(contrasts = c(contr.treatment, contr.poly))
La raz´n por la que se indican estos valores es que los valores predeterminados en R son
       o
distintos de los de S en el caso de factores nominales, ya que S utiliza los contrastes de
Helmert. Por tanto, para obtener los mismos resultados que en S-Plus, deber´ escribir:
                                                                              a
       options(contrasts = c(contr.helmert, contr.poly))
Esta diferencia es deliberada, ya que entendemos que los contrastes predeterminados de R
son m´s sencillos de interpretar para los principiantes.
      a
   Caben a´n m´s posibilidades, ya que el esquema de contraste a utilizar puede fijarse
           u    a
para cada t´rmino del modelo utilizando las funciones contrasts y C.
           e
    Tampoco hemos considerado los t´rminos de interacci´n, que generan los productos de
                                     e                 o
las columnas introducidas por los t´rminos de sus componentes.
                                   e
    Pese a que los detalles son complicados, las f´rmulas de modelos en R generan habi-
                                                     o
tualmente los modelos que un estad´   ıstico experto podr´ esperar, supuesto que se preserve
                                                         ıa
la marginalidad. Por ejemplo, el ajuste de un modelo con interacci´n y, sin embargo, sin
                                                                      o
los correspondientes efectos principales conducir´ en general a resultados sorprendentes, y
                                                   a
debe reservarse s´lo a los especialistas.
                 o

11.2 Modelos lineales
   La funci´n primaria para el ajuste de modelos m´ltiples ordinarios es lm() y una versi´n
           o                                      u                                      o
resumida de su uso es la siguiente:
       modelo.ajustado - lm(formula.de.modelo, data=hoja.de.datos)
   Por ejemplo
      fm2 - lm(y ∼ x1 + x2, data=produccion)
ajustar´ un modelo de regresi´n m´ltiple de y sobre x 1 y x 2 (con t´rmino independiente
       a                     o   u                                  e
impl´
    ıcito).
   El t´rmino data=produccion, pese a ser opcional, es importante y especifica que
       e
cualquier variable necesaria para la construcci´n del modelo debe provenir en primer
                                               o
lugar de la hoja de datos produccion, y ello independientemente de que la hoja de datos
produccion haya sido conectada a la trayectoria de b´squeda o no.
                                                    u
Cap´
   ıtulo 11: Modelos estad´
                          ısticos en R                                                   59


11.3 Funciones gen´ricas de extracci´n de informaci´n del
                  e                 o              o
     modelo
   El valor de lm() es el objeto modelo ajustado; que consiste en una lista de resultados de
clase lm. La informaci´n acerca del modelo ajustado puede imprimirse, extraerse, dibujarse,
                      o
etc. utilizando funciones gen´ricas orientadas a objetos de clase lm. Algunas de ellas son:
                             e
        add1       coef          effects       kappa    predict   residuals
        alias      deviance      family        labels   print     step
        anova      drop1         formula       plot     proj      summary
     A continuaci´n se incluye una breve descripci´n de las m´s utilizadas.
                 o                                o          a

anova(objeto 1, objeto 2)
           Compara un submodelo con un modelo externo y produce una tabla de an´lisis
                                                                               a
           de la varianza.
coefficients(objeto)
          Extrae la matriz de coeficientes de regresi´n.
                                                    o
                Forma reducida: coef(objeto).
deviance(objeto)
          Suma de cuadrados residual, ponderada si es lo apropiado.
formula(objeto)
          Extrae la f´rmula del modelo.
                     o
plot(objeto)
           Crea cuatro gr´ficos que muestran los residuos, los valores ajustados y algunos
                         a
           diagn´sticos
                o
predict(objeto, newdata=hoja.de.datos)
          La nueva hoja de datos que se indica debe tener variables cuyas etiquetas coin-
          cidan con las de la original. El resultado es un vector o matriz de valores
          predichos correspondiente a los valores de las variables de hoja.de.datos.
print(objeto)
           Imprime una versi´n concisa del objeto. A menudo se utiliza impl´
                            o                                              ıcitamente.
residuals(objeto)
          Extrae la matriz de residuos, ponderada si es necesario.
                La forma reducida es resid(objeto).
step(objeto)
           Selecciona un modelo apropiado a˜adiendo o eliminando t´rminos y preservando
                                           n                      e
           las jerarqu´ Se devuelve el modelo que en este proceso tiene el m´ximo valor
                      ıas.                                                  a
                   1
           de AIC .
summary(objeto)
          Imprime un resumen estad´
                                  ıstico completo de los resultados del an´lisis de re-
                                                                          a
          gresi´n.
               o

 1
     Acr´nimo de Akaike’s an Information Criterion
        o
Cap´
   ıtulo 11: Modelos estad´
                          ısticos en R                                                                 60



11.4 An´lisis de varianza. Comparaci´n de modelos
       a                            o
     El an´lisis de varianza2 es otra de las t´cnicas aqu´ recogidas.
          a                                   e          ı
   La funci´n de ajuste de modelo aov(formula.de.modelo, data=hoja.de.datos) opera
            o
en el nivel m´s simple de modo muy similar a la funci´n lm(), y muchas de las funciones
              a                                       o
gen´ricas contenidas en la Secci´n 11.3 [Funciones genericas de extraccion de informacion
    e                           o
del modelo], p´gina 59, le son de aplicaci´n.
               a                          o
   Debemos destacar que, adem´s, aov() realiza un an´lisis de modelos estratificados de
                                a                       a
error m´ltiple, tales como experimentos split plot, o dise˜os en bloques incompletos bal-
       u                                                  n
anceados con recuperaci´n de informaci´n inter-bloques. La f´rmula
                        o             o                      o
        respuesta ∼ formula.media + Error(formula.estratos)
especifica un experimento multiestrato con estratos de error definidos por formula.estratos.
En el caso m´s sencillo, formula.estratos es un factor, cuando define un experimento con
              a
dos estratos, esto es, dentro de y entre los niveles de un factor.
     Por ejemplo, si todas las variables predictoras son factores, un modelo como el siguiente:
         mf - aov(cosecha ∼ v + n*p*k +
                Error(granjas/bloques), data=datos.granjas)
ser´ utilizable para describir un experimento con media del modelo v + n*p*k y tres estratos
   ıa
de error: “entre granjas”, “dentro de granjas, entre bloques” y “dentro de bloques”.


11.4.1 Tablas ANOVA

    Debe tenerse en cuenta que la tabla ANOVA corresponde a una sucesi´n de modelos
                                                                              o
ajustados. Las sumas de cuadrados que en ella aparecen corresponden a la disminuci´n en o
las sumas de cuadrados residuales como resultado de la inclusi´n de un t´rmino concreto
                                                                o           e
en un lugar concreto de la sucesi´n. Por tanto el orden de inclusi´n s´lo ser´ irrelevante en
                                 o                                o o         a
experimentos ortogonales.
    Para experimentos multiestrato el procedimiento consiste, en primer lugar, en proyectar
la respuesta sobre los estratos de error, una vez m´s en secuencia, y, despu´s, en ajustar
                                                    a                        e
la media del modelo a cada proyecci´n. Para m´s detalles, consulte Chambers  Hastie
                                      o           a
(1992).
   Una alternativa m´s flexible a la tabla ANOVA completa es comparar dos o m´s modelos
                     a                                                      a
directamente utilizando la funci´n anova().
                                o
         anova(modelo.ajustado.1, modelo.ajustado.2, ...)
   El resultado es una tabla ANOVA que muestra las diferencias entre los modelos ajustados
cuando se ajustan en ese orden preciso. Los modelos ajustados objeto de comparaci´n     o
constituyen por tanto una sucesi´n jer´rquica. Este resultado no suministra informaci´n
                                  o     a                                               o
distinta a la del caso predeterminado, pero facilita su comprensi´n y control.
                                                                 o

 2
     Su acr´nimo en ingl´s es ANOVA, de ANalysis Of Variance. En alguna literatura en espa˜ol, el acr´nimo
            o           e                                                                 n          o
     se sustituye por ANDEVA, de AN´lisis DE VArianza.
                                     a
Cap´
   ıtulo 11: Modelos estad´
                          ısticos en R                                                            61



11.5 Actualizaci´n de modelos ajustados
                o
    La funci´n update() se utiliza muy a menudo para ajustar un modelo que difiere de uno
            o
ajustado previamente en unos pocos t´rminos que se a˜aden o se eliminan. Su forma es:
                                      e                n
        modelo.nuevo - update(modelo.anterior, f´rmula.nueva)
                                                       o
    En f´rmula.nueva puede utilizarse un punto, ‘.’, para hacer referencia a “la parte co-
        o
rrespondiente de la f´rmula del modelo anterior”. Por ejemplo,
                      o
        fm05 - lm(y ∼ x1 + x2 + x3 + x4 + x5, data = produccion)
        fm6 - update(fm05, . ∼ . + x6)
        smf6 - update(fm6, sqrt(.) ∼ .)
ajusta una regresi´n m´ltiple con cinco variables, (procedentes si es posible) de la hoja de
                   o    u
datos produccion; despu´s ajusta un modelo adicional incluyendo un sexto regresor; y, por
                          e
ultimo, ajusta una variante del modelo donde se aplica una transformaci´n ra´ cuadrada a
´                                                                        o     ız
la variable predicha.
    Advierta especialmente que si especifica el argumento data en la llamada original a la
funci´n de ajuste del modelo, esta informaci´n se pasa a su vez a trav´s del objeto modelo
     o                                      o                          e
ajustado a la funci´n update() y sus asociadas.
                    o
    El nombre “.” puede utilizarse tambi´n en otros contextos, pero con un significado
                                          e
levemente distinto. Por ejemplo,
        gra.completo - lm(y ∼ . , data=produccion)
ajustar´ un modelo con respuesta y, y como variables predictoras, todas las de la hoja de
        a
datos produccion.
    Otras funciones que permiten explorar sucesiones crecientes de modelos son add1(),
drop1() y step(). Consulte la ayuda para obtener informaci´n de las mismas.
                                                              o

11.6 Modelos lineales generalizados
   Los modelos lineales generalizados constituyen una extensi´n de los modelos lineales,
                                                                   o
para tomar en consideraci´n tanto distribuciones de respuestas no normales como transfor-
                          o
maciones para conseguir linealidad, de una forma directa. Un modelo lineal generalizado
puede describirse seg´n las siguientes suposiciones:
                     u
  • Existe una variable respuesta, y, y unas variables est´    ımulo, x1 , x2 , . . . , cuyos valores
    influyen en la distribuci´n de la respuesta.
                             o
  • Las variables est´ımulo influyen en la distribuci´n de y mediante una funci´n lineal
                                                         o                                  o
    solamente. Esta funci´n lineal recibe el nombre de predictor lineal, y se escribe habi-
                           o
    tualmente
                               η = β1 x1 + β2 x2 + · · · + βp xp ,
    por tanto xi no influye en la distribuci´n de y si y s´lo si βi = 0.
                                           o             o
  • La distribuci´n de y es de la forma
                 o
                                           A
                      fY (y; µ, ϕ) = exp     {yλ(µ) − γ (λ(µ))} + τ (y, ϕ)
                                           ϕ

     donde ϕ es un par´metro de escala (posiblemente conocido) que permanece constante
                      a
     para todas las observaciones, A representa una ponderaci´n a priori que se supone
                                                             o
Cap´
   ıtulo 11: Modelos estad´
                          ısticos en R                                                      62



    conocida pero que puede variar con las observaciones, y µ es la media de y. Por
    tanto, se supone que la distribuci´n de y queda determinada por su media y tal vez un
                                      o
    par´metro de escala.
       a
 • La media, µ, es una funci´n inversible del predictor lineal:
                            o

                             µ = m(η),       η = m−1 (µ) = (µ)

    y esta funci´n inversa, (), se denomina funci´n de enlace.
                o                                o
    Estas suposiciones son suficientemente amplias para acomodar una amplia clase de mode-
los utiles en la pr´ctica estad´
    ´              a           ıstica y, al tiempo, suficientemente estrictas como para permitir
el desarrollo de una metodolog´ unificada de estimaci´n e inferencia, al menos aproxi-
                                    ıa                       o
madamente. Los interesados en este tema pueden consultar cualquiera de los trabajos de
referencia sobre este tema, tales como McCullagh  Nelder (1989) o Dobson (1990).

11.6.1 Familias
   La clase de modelos lineales generalizados que pueden ser tratados en R incluye las
distribuciones de respuesta gaussian (normal), binomial, poisson, inverse gaussian (nor-
mal inversa) y gamma as´ como los modelos de quasi-likelihood (cuasi-verosimilitud) cuya
                           ı
distribuci´n de respuesta no est´ expl´
          o                       a     ıcitamente definida. En este ultimo caso debe especi-
                                                                    ´
ficarse la funci´n de varianza como una funci´n de la media, pero en el resto de casos esta
               o                                o
funci´n est´ impl´
     o      a     ıcita en la distribuci´n de respuesta.
                                        o
   Cada distribuci´n de respuesta admite una variedad de funciones de enlace para conec-
                  o
tar la media con el predictor lineal. La tabla siguiente recoge las que est´n disponibles
                                                                           a
autom´ticamente.
       a

      Nombre de la familia      Funci´n de enlace
                                     o
      binomial                  logit, probit, cloglog
      gaussian                  identity
      Gamma                     identity, inverse, log
      inverse.gaussian          1/mu^2
      poisson                   identity, log, sqrt
      quasi                     logit, probit, cloglog, identity, inverse,
                                log, 1/mu^2, sqrt

    La combinaci´n de una distribuci´n de respuesta, una funci´n de enlace y otras informa-
                 o                    o                         o
ciones que son necesarias para llevar a cabo la modelizaci´n se denomina familia del modelo
                                                          o
lineal generalizado.

11.6.2 La funci´n glm
               o
   Puesto que la distribuci´n de la respuesta depende de las variables de est´
                           o                                                 ımulo solamente
a trav´s de una funci´n lineal, se puede utilizar el mismo mecanismo de los modelos lineales
      e              o
para especificar la parte lineal de un modelo generalizado. Sin embargo la familia debe
especificarse de modo distinto.
   La funci´n glm() permite ajustar un modelo lineal generalizado y tiene la forma siguiente
           o
Cap´
   ıtulo 11: Modelos estad´
                          ısticos en R                                                   63



         modelo.ajustado - glm(formula.de.modelo, family =
          generador.de.familia, data=hoja.datos)
   La unica caracter´
        ´            ıstica nueva es generador.de.familia que es el instrumento mediante el
que se describe la familia. Es el nombre de una funci´n que genera una lista de funciones y
                                                       o
expresiones que, juntas, definen y controlan el modelo y el proceso de estimaci´n. Aunque
                                                                                o
puede parecer complicado a primera vista, su uso es bastante sencillo.
   Los nombres de los generadores de familias est´ndar suministrados con R aparecen en
                                                    a
la tabla de la Secci´n 11.6.1 [Familias], p´gina 62 con la denominaci´n de “Nombre de
                     o                      a                            o
la familia”. Si adem´s debe seleccionar una funci´n de enlace, debe indicarla como un
                       a                              o
par´metro, entre par´ntesis, del nombre de la familia. En el caso de la familia quasi, la
    a                 e
funci´n de varianza puede especificarse del mismo modo.
      o
   Veamos algunos ejemplos.

La familia gaussiana (gaussian)
   Una expresi´n de la forma
                o
       mf - glm(y ∼ x1 + x2, family = gaussian, data = ventas)
obtiene el mismo resultado que
       mf - lm(y ∼ x1+x2, data=ventas)
pero con menor eficiencia. Tenga en cuenta que la familia gaussiana no dispone autom´ti- a
camente de una serie de funciones de enlace, por lo que no admite par´metros. Si en un
                                                                        a
problema necesita utilizar la familia gaussiana con un enlace no est´ndar, la soluci´n pasa
                                                                    a               o
por el uso de la familia quasi, como veremos posteriormente.

La familia binomial (binomial)
    Consideremos el siguiente ejemplo artificial, tomado de Silvey (1970).
    Los hombres de la isla de Kalythos, en el mar Egeo, sufren una enfermedad ocular
cong´nita cuyos efectos se acrecientan con la edad. Se tom´ una muestra de varios isle˜os
     e                                                      o                           n
de diferentes edades cuyos resultados se muestran a continuaci´n:
                                                                o
       Edad:        20 35 45 55 70
       No. sujetos: 50 50 50 50 50
       No.           6 17 26 37 44
       invidentes:
    Consideramos el problema de ajustar un modelo log´ ıstico y otro probit a estos datos, y
estimar en cada modelo el par´metro LD50, correspondiente a la edad en que la probabilidad
                             a
de ceguera es del 50%.
    Si y es el n´mero de invidentes a la edad x, y n es el n´mero de sujetos estudiados,
                u                                             u
ambos modelos tienen la forma

                                  y ∼ B(n, F (β0 + β1 x))
donde, para el caso probit, F (z) = Φ(z) es la funci´n de distribuci´n normal (0,1), y en el
                                                     o              o
caso logit (que es el predeterminado), F (z) = ez /(1 + ez ). En ambos casos, LD50 se define
como
                                      LD50 = −β0 /β1
Cap´
   ıtulo 11: Modelos estad´
                          ısticos en R                                                   64



Esto es, el punto en que el argumento de la funci´n de distribuci´n es cero.
                                                 o               o
   El primer paso es preparar los datos en una hoja de datos
       kalythos - data.frame(x = c(20,35,45,55,70), n = rep(50,5),
                               y = c(6,17,26,37,44))
   Para ajustar un modelo binomial utilizando glm() existen dos posibilidades para la
respuesta:
 • Si la respuesta es un vector, entonces debe corresponder a datos binarios y por tanto
   s´lo debe contener ceros y unos.
    o
 • Si la respuesta es una matriz de dos columnas, la primera columna debe contener el
   n´mero de ´xitos y la segunda el de fracasos.
    u         e

  Aqu´ vamos a utilizar la segunda de estas convenciones, por lo que debemos a˜adir una
       ı                                                                      n
matriz a la hoja de datos:
       kalythos$Ymat - cbind(kalythos$y, kalythos$n - kalythos$y)
   Para ajustar los modelos utilizamos
       fmp - glm(Ymat ∼ x, family = binomial(link=probit), data = kalythos)
       fml - glm(Ymat ∼ x, family = binomial, data = kalythos)
   Puesto que la funci´n de enlace logit es la predeterminada, este par´metro puede omitirse
                      o                                                a
en la segunda expresi´n. Para ver los resultados de cada ajuste usaremos
                     o
       summary(fmp)
       summary(fml)
   Ambos modelos se ajustan bien (demasiado bien). Para estimar LD50 podemos usar la
siguiente funci´n:
               o
       ld50 - function(b) -b[1]/b[2]
       ldp - ld50(coef(fmp)); ldl - ld50(coef(fmp)); c(ldp, ldl)
   y obtendremos los valores 43.663 y 43.601 respectivamente.


Modelos de Poisson (poisson)

   Para la familia poisson el enlace predeterminado es log, y en la pr´ctica el uso fun-
                                                                        a
damental de esta familia es ajustar modelos loglineales de Poisson a datos de frecuencias,
cuya distribuci´n en s´ es a menudo multinomial. Este es un tema amplio e importante que
               o      ı
no discutiremos aqu´ y que incluso constituye una parte fundamental de la utilizaci´n de
                    ı                                                               o
modelos generalizados no gaussianos.
   A veces surgen datos aut´nticamente poissonianos que, en el pasado se analizaban a
                             e
menudo como datos gaussianos tras aplicarles una transformaci´n logar´
                                                              o       ıtmica o de ra´
                                                                                    ız
cuadrada. Como alternativa al ultimo, puede ajustarse un modelo lineal generalizado de
                                 ´
Poisson, como en el siguiente ejemplo:
       fmod - glm(y ∼ A + B + x, family = poisson(link=sqrt),
                    data = frec.gusanos)
Cap´
   ıtulo 11: Modelos estad´
                          ısticos en R                                                     65



Modelos de cuasi-verosimilitud (quasi)
   En todas las familias, la varianza de la respuesta depender´ de la media, y el par´metro de
                                                               a                     a
escala actuar´ como un multiplicador. La forma de dependencia de la varianza respecto de la
             a
media es una caracter´ıstica de la distribuci´n de respuesta, por ejemplo para la distribuci´n
                                              o                                             o
de Poisson ser´ Var[y] = µ.
               a
   Para estimaci´n e inferencia de cuasi-verosimilitud, la distribuci´n de respuesta precisa
                 o                                                    o
no est´ especificada, sino m´s bien s´lo la funci´n de enlace y la forma en que la funci´n
      a                       a         o          o                                        o
de varianza depende de la media. Puesto que la estimaci´n de cuasi-verosimilitud utiliza
                                                             o
formalmente las mismas t´cnicas de la distribuci´n gaussiana, esta familia permite ajustar
                            e                       o
modelos gaussianos con funciones de enlace no est´ndar o incluso con funciones de varianza.
                                                     a
   Por ejemplo, consideremos la regresi´n no lineal siguiente
                                          o

                                            θ 1 z1
                                      y=            +e
                                           z2 − θ 2

que puede escribirse tambi´n de la forma
                          e

                                               1
                                    y=                 +e
                                         β1 x1 + β2 x2

donde x1 = z2 /z1 , x2 = −1/x1 , β1 = 1/θ1 y β2 = θ2 /θ1 . Suponiendo que existe una hoja de
datos apropiada, bioquimica, podemos ajustar este modelo mediante
       nlfit - glm(y ∼ x1 + x2 - 1,
                         family = quasi(link=inverse, variance=constant),
                         data = bioquimica)
   Si desea mayor informaci´n, lea las ayudas correspondientes.
                            o

11.7 Modelos de M´
                 ınimos cuadrados no lineales y de
     M´xima verosimilitud
      a
    Ciertas formas de modelos no lineales pueden ajustarse mediante Modelos Lineales Ge-
neralizados, con la funci´n glm(), pero en la mayor´ de los casos ser´ necesario utilizar
                          o                          ıa                 a
optimizaci´n no lineal. La funci´n que lo realiza en R es nlm(), que reemplaza aqu´ a
           o                       o                                                      ı
las funciones ms() y nlmin() de S-Plus. Buscamos los valores de los par´metros que
                                                                               a
minimizan alg´n ´
               u ındice de falta de ajuste y nlm() lo resuelve probando varios par´metros
                                                                                    a
iterativamente. Al contrario que en la regresi´n lineal, por ejemplo, no existe garant´ de
                                               o                                       ıa
que el procedimiento converja a unos estimadores satisfactorios. La funci´n nlm() necesita
                                                                          o
unos valores iniciales de los par´metros a estimar y la convergencia depende cr´
                                 a                                               ıticamente
de la calidad de dichos valores iniciales.

11.7.1 M´
        ınimos cuadrados
   Una forma de ajustar un modelo no lineal es minimizar la suma de los cuadrados de
los errores o residuos (SSE). Este m´todo tiene sentido si los errores observados pueden
                                     e
proceder de una distribuci´n normal.
                          o
   Presentamos un ejemplo debido a Bates  Watts (1988), p´gina 51. Los datos son:
                                                             a
Cap´
   ıtulo 11: Modelos estad´
                          ısticos en R                                                      66



        x - c(0.02, 0.02, 0.06, 0.06, 0.11, 0.11, 0.22, 0.22, 0.56, 0.56,
                   1.10, 1.10)
        y - c(76, 47, 97, 107, 123, 139, 159, 152, 191, 201, 207, 200)
    El modelo a ajustar es:
        fn - function(p) sum((y - (p[1] * x)/(p[2] + x))^2)
    Para realizar el ajuste necesitamos unos valores iniciales de los par´metros. Una forma de
                                                                         a
encontrar unos valores iniciales apropiados es representar gr´ficamente los datos, conjeturar
                                                                a
unos valores de los par´metros, y dibujar sobre los datos la curva correspondiente a estos
                         a
valores.
        plot(x, y)
        xajustado - seq(.02, 1.1, .05)
        yajustado - 200*xajustado/(.1+xajustado)
        lines(spline(xajustado,yajustado))
    Aunque se podr´ tratar de encontrar unos valores mejores, los valores obtenidos, 200 y
                     ıa
0.1, parecen adecuados. Ya podemos realizar el ajuste:
        resultado - nlm(fn,p=c(200,.1),hessian=TRUE)
    Tras el ajuste, resultado$minimum contiene SSE, y resultado$estimates contiene los
estimadores por m´   ınimos cuadrados de los par´metros. Para obtener los errores t´
                                                  a                                      ıpicos
aproximados de los estimadores (SE) escribimos lo siguiente:
        sqrt(diag(2*resultado$minimum/(length(y) - 2) *
                solve(resultado$hessian)))
    El n´mero 2 en dicha expresi´n representa el n´mero de par´metros. Un intervalo de
         u                          o                  u              a
confianza al 95% ser´: El estimador del par´metro ± 1.96 SE. Podemos representar el ajuste
                      a                      a
en un nuevo gr´fico:
                a
        plot(x,y)
        xajustado - seq(.02,1.1,.05)
        yajustado - 212.68384222*xajustado/(0.06412146+xajustado)
        lines(spline(xajustado,yajustado))
    La biblioteca nls contiene muchas m´s posibilidades para ajustar modelos no lineales por
                                         a
m´ınimos cuadrados. El modelo que acabamos de ajustar es el modelo de Michaelis-Menten,
por tanto podemos usar
        df - data.frame(x=x, y=y)
        fit - nls(y ∼ SSmicmen(x, Vm, K), df)
        fit
       Nonlinear regression model
          model: y ∼ SSmicmen(x, Vm, K)
           data: df
                    Vm                K
       212.68370711        0.06412123
        residual sum-of-squares: 1195.449
        summary(fit)

      Formula: y ∼ SSmicmen(x, Vm, K)

      Parameters:
          Estimate Std. Error t value Pr(|t|)
Cap´
   ıtulo 11: Modelos estad´
                          ısticos en R                                                     67



      Vm 2.127e+02     6.947e+00    30.615 3.24e-11
      K 6.412e-02      8.281e-03     7.743 1.57e-05

      Residual standard error: 10.93 on 10 degrees of freedom

      Correlation of Parameter Estimates:
            Vm
      K 0.7651

11.7.2 M´xima verosimilitud
        a
    El m´todo de m´xima verosimilitud es un m´todo de ajuste de un modelo no lineal que
          e          a                             e
puede aplicarse incluso cuando los errores no son normales. El m´todo busca los valores de
                                                                    e
los par´metros que maximizan la log-verosimilitud o, lo que es igual, minimizan el valor de
        a
la -log-verosimilitud. El siguiente ejemplo, tomado de Dobson (1990), pp. 108-11, ajusta
un modelo log´ ıstico a los datos de dosis-respuesta, que claramente tambi´n podr´ ajustarse
                                                                          e      ıa
utilizando la funci´n glm(). Los datos son:
                    o
        x - c(1.6907, 1.7242, 1.7552, 1.7842, 1.8113,
                   1.8369, 1.8610, 1.8839)
        y - c( 6, 13, 18, 28, 52, 53, 61, 60)
        n - c(59, 60, 62, 56, 63, 59, 62, 60)
   La -log-verosimilitud a minimizar es:
      fn - function(p)
          sum( - (y*(p[1]+p[2]*x) - n*log(1+exp(p[1]+p[2]*x))
                   + log(choose(n, y)) ))
Elegimos unos valores iniciales y realizamos el ajuste:
       out - nlm(fn, p = c(-50,20), hessian = TRUE)
Tras lo cual, resultado$minimum contiene la -log-verosimilitud, y resultado$estimates
contiene los estimadores de m´xima verosimilitud. Para obtener los SE aproximados de los
                             a
par´metros, escribimos:
   a
       sqrt(diag(solve(out$hessian)))
   El intervalo de confianza al 95% es: El estimador del par´metro ± 1.96 SE.
                                                           a

11.8 Algunos modelos no-est´ndar
                           a
   Concluimos esta parte con una breve menci´n a otras posibilidades de R para regresi´n
                                            o                                         o
especial y an´lisis de datos.
             a
 • Modelos mezclados. La biblioteca creada por usuarios, nlme, contiene las funciones lme
   y nlme para modelos de efectos mezclados lineales y no lineales, esto es, regresiones
   lineales y no lineales en las cuales algunos coeficientes corresponden a efectos aleatorios.
   Estas funciones hacen un uso intensivo de las f´rmulas para especificar los modelos.
                                                     o
 • Regresi´n con aproximaci´n local. La funci´n loess() ajusta una regresi´n no
            o                 o                    o                               o
   param´trica utilizando regresi´n polinomial localmente ponderada. Este tipo de
          e                        o
   regresi´n es util para poner de relieve una tendencia en datos confusos o para reducir
          o     ´
   datos y obtener alguna luz sobre la estructura de grandes conjuntos de datos.
Cap´
   ıtulo 11: Modelos estad´
                          ısticos en R                                                    68



   La biblioteca modreg contiene la funci´n loess as´ como posibilidades de regresi´n
                                             o             ı                               o
   “projection pursuit”.
 • Regresi´n robusta. Existen varias funciones para ajustar modelos de regresi´n
            o                                                                              o
   resistentes a la influencia de valores an´malos (outliers) en los datos. La funci´n
                                               o                                           o
   lqs en la biblioteca del mismo nombre contiene los algoritmos m´s recientes para
                                                                           a
   ajustes altamente resistentes. Otras funciones menos resistentes pero m´s eficientes
                                                                                 a
   estad´ısticamente se encuentran en otras bibliotecas creadas por usuarios, por ejemplo
   la funci´n rlm en la biblioteca MASS.
            o
 • Modelos aditivos. Esta t´cnica intenta construir una funci´n de regresi´n a partir de
                              e                                  o            o
   funciones aditivas suaves de las variables predictoras, habitualmente una por cada va-
   riable predicha. Las funciones avas y ace en la biblioteca acepack y las funciones bruto
   y mars de la biblioteca mda son ejemplos de estas t´cnicas contenidas en bibliotecas
                                                             e
   creadas por usuarios para R.
 • Modelos basados en ´rboles. En vez de buscar un modelo lineal global expl´
                         a                                                         ıcito para
   predicci´n o interpretaci´n, los modelos basados en ´rboles intentan bifurcar los datos,
            o                o                            a
   recursivamente, en puntos cr´ ıticos de las variables predictoras con la finalidad de con-
   seguir una partici´n de los datos en grupos tan homog´neos dentro del grupo y tan
                      o                                        e
   heterog´neos de un grupo a otro, como sea posible. Los resultados a menudo con-
            e
   ducen a una comprensi´n de los datos que otros m´todos de an´lisis de datos no suelen
                           o                            e            a
   suministrar.
   Los modelos se especifican en la forma de un modelo lineal ordinario. La funci´n de   o
   ajuste es tree(), y muchas funciones gen´ricas, como plot() y text() pueden mostrar
                                              e
   los resultados de este ajuste de modo gr´fico.
                                              a
   Puede encontrar estos modelos en las bibliotecas creadas por usuarios rpart y tree.
Cap´
   ıtulo 12: Procedimientos gr´ficos
                              a                                                           69



12 Procedimientos gr´ficos
                    a
    Las posibilidades gr´ficas son un componente de R muy importante y vers´til. Es posi-
                        a                                                     a
ble utilizarlas para mostrar una amplia variedad de gr´ficos estad´
                                                        a          ısticos y tambi´n para
                                                                                  e
construir nuevos tipos de gr´ficos.
                             a
    Los gr´ficos pueden usarse tanto en modo interactivo como no interactivo, pero en la
           a
mayor´ de los casos el modo interactivo es m´s productivo. Adem´s al iniciar R en este
       ıa                                      a                    a
modo, se activa un dispositivo para mostrar gr´ficos. Aunque este paso es autom´tico, es
                                                a                                a
util conocer que la orden es X11(), aunque tambi´n puede usar windows() en Microsoft
´                                                  e
Windows.
    Las ´rdenes gr´ficas se dividen en tres grupos b´sicos:
        o           a                              a
  • Alto nivel Son funciones que crean un nuevo gr´fico, posiblemente con ejes, etiquetas,
                                                    a
     t´
      ıtulos, etc..
  • Bajo nivel Son funciones que a˜aden informaci´n a un gr´fico existente, tales como
                                      n              o         a
     puntos adicionales, l´
                          ıneas y etiquetas.
  • Interactivas Son funciones que permiten interactuar con un gr´fico, a˜adiendo o elimi-
                                                                 a       n
     nando informaci´n, utilizando un dispositivo apuntador, como un rat´n.
                      o                                                   o
    Adem´s, en R existe una lista de par´metros gr´ficos que pueden utilizarse para adaptar
         a                              a         a
los gr´ficos.
      a

12.1 Funciones gr´ficas de nivel alto
                 a
   Las ´rdenes gr´ficas de nivel alto est´n dise˜adas para generar un gr´fico completo a
         o        a                       a      n                       a
partir de unos datos pasados a la funci´n como argumento. Cuando es necesario se generan
                                       o
autom´ticamente ejes, etiquetas o t´
       a                             ıtulos (salvo que se especifique lo contrario). Estas
o
´rdenes comienzan siempre un nuevo gr´fico, borrando el actual si ello es necesario.
                                         a

12.1.1 La funci´n plot
               o
   Una de las funciones gr´ficas m´s utilizadas en R es plot, que es una funci´n gen´rica,
                            a      a                                           o     e
esto es, el tipo de gr´fico producido es dependiente de la clase del primer argumento.
                      a
plot(x, y)
plot(xy) Si x e y son vectores, plot(x, y) produce un diagrama de dispersi´n de yo
           sobre x. El mismo efecto se consigue suministrando un unico argumento (como
                                                                  ´
           se ha hecho en la segunda forma) que sea bien una lista con dos elementos, x e
           y, bien una matriz con dos columnas.
plot(x)      Si x es una serie temporal, produce un gr´fico temporal, si x es un vector
                                                        a
             num´rico, produce un gr´fico de sus elementos sobre el ´
                  e                   a                            ındice de los mismos, y
             si x es un vector complejo, produce un gr´fico de la parte imaginaria sobre la
                                                      a
             real de los elementos del vector.
plot(f )
plot(f, y)
             Sean f un factor, e y un vector num´rico. La primera forma genera un diagrama
                                                 e
             de barras de f ; la segunda genera diagramas de cajas de y para cada nivel de f.
Cap´
   ıtulo 12: Procedimientos gr´ficos
                              a                                                             70



plot(hd)
plot(∼ expr)
plot(y ∼ expr)
          Sean hd, una hoja de datos; y, un objeto cualquiera; y expr, una lista de
          nombres de objetos separados por s´ ımbolos ‘+’ (por ejemplo, a + b + c). Las
          dos primeras formas producen diagramas de todas las parejas de variables de
          la hoja de datos hd (en el primer caso) y de los objetos de la expresi´n expr
                                                                                o
          (en el segundo caso). La tercera forma realiza sendos gr´ficos de y sobre cada
                                                                  a
          objeto nombrado en la expresi´n expr (uno para cada objeto).
                                        o


12.1.2 Representaci´n de datos multivariantes
                   o

  R posee dos funciones muy utiles para representar datos multivariantes. Si X es una
                              ´
matriz num´rica o una hoja de datos, la orden
          e
       pairs(X)
produce una matriz de gr´ficos de dispersi´n para cada pareja de variables definidas por
                           a               o
las columnas de X, esto es, cada columna de X se representa frente a cada una de las dem´s
                                                                                         a
columnas, y los n(n−1) gr´ficos se presentan en una matriz de gr´ficos con escalas constantes
                          a                                    a
sobre las filas y columnas de la matriz.
   Cuando se trabaja con tres o cuatro variables, la funci´n coplot puede ser m´s apro-
                                                          o                      a
piada. Si a y b son vectores num´ricos y c es un vector num´rico o un factor (todos de la
                                e                           e
misma longitud) entonces la orden
       coplot(a ∼ b | c)
produce diagramas de dispersi´n de a sobre b para cada valor de c. Si c es un factor,
                                 o
esto significa que a se representa sobre b para cada nivel de c. Si c es un vector num´rico,
                                                                                         e
entonces se agrupa en intervalos y para cada intervalo se representa a sobre b para los valores
de c dentro del intervalo. El n´mero y tama˜o de los intervalos puede controlarse con el
                                 u             n
argumento given.values de la funci´n coplot(). La funci´n co.intervals() tambi´n es
                                      o                       o                           e
util para seleccionar intervalos. Asimismo, es posible utilizar dos variables condicionantes
´
con una orden como
       coplot(a ∼ b | c + d)
que produce diagramas de a sobre b para cada intervalo de condicionamiento de c y d.
   Las funciones coplot() y pairs() utilizan el argumento panel para personalizar el tipo
de gr´fico que aparece en cada panel o recuadro. El valor predeterminado es points() para
     a
producir un diagrama de dispersi´n, pero si se introducen otras funciones gr´ficas de nivel
                                  o                                           a
bajo de los dos vectores x e y como valor de panel, se produce cualquier tipo de gr´fico que
                                                                                   a
se desee. Una funci´n util en este contexto es panel.smooth().
                    o ´


12.1.3 Otras representaciones gr´ficas
                                a

   Existen otras funciones gr´ficas de nivel alto que producen otros tipos de gr´ficos. Al-
                              a                                                a
gunas de ellas son las siguientes:
Cap´
   ıtulo 12: Procedimientos gr´ficos
                              a                                                            71



qqnorm(x)
qqline(x)
qqplot(x, y)
          Gr´ficos de comparaci´n de distribuciones. El primero representa el vector x
             a                   o
          sobre los valores esperados normales. El segundo le a˜ade una recta que pasa
                                                                n
          por los cuartiles de la distribuci´n y de los datos. El tercero representa los
                                            o
          cuantiles de x sobre los de y para comparar sus distribuciones respectivas.
hist(x)
hist(x, nclass=n)
hist(x, breaks=b, ...)
          Produce un histograma del vector num´rico x. El n´mero de clases se cal-
                                                   e              u
          cula habitualmente de modo correcto, pero puede elegir uno con el argumento
          nclass, o bien especificar los puntos de corte con el argumento breaks. Si est´
                                                                                       a
          presente el argumento probability=TRUE, se representan frecuencias relativas
          en vez de absolutas.
dotplot(x, ...)
          Construye un gr´fico de puntos de x. En este tipo de gr´ficos, el eje y etiqueta
                           a                                      a
          los datos de x y el eje x da su valor. Por ejemplo, permite una selecci´n visual
                                                                                 o
          sencilla de todos los elementos con valores dentro de un rango determinado.
image(x, y, z, ...)
contour(x, y, z, ...)
persp(x, y, z, ...)
          Gr´ficos tridimensionales. image representa una ret´
             a                                                   ıcula de rect´ngulos con
                                                                              a
          colores diferentes seg´n el valor de z, contour representa curvas de nivel de z,
                                u
          y persp representa una superficie tridimensional de z.

12.1.4 Argumentos de las funciones gr´ficas de nivel alto
                                     a
   Existe una serie de argumentos que pueden pasarse a las funciones gr´ficas de nivel alto,
                                                                       a
entre otros los siguientes:
add=TRUE     Obliga a la funci´n a comportarse como una funci´n a nivel bajo, de modo que
                              o                              o
             el gr´fico que genere se superpondr´ al gr´fico actual, en vez de borrarlo (s´lo
                  a                             a     a                                 o
             en algunas funciones)
axes=FALSE
                                o           ´
             Suprime la generaci´n de ejes. Util para crear ejes personalizados con la funci´n
                                                                                            o
             axis. El valor predeterminado es axes=TRUE, que incluye los ejes.
log=x
log=y
log=xy     Hace que el eje x, el eje y, o ambos ejes, sean logar´
                                                                  ıtmicos. En algunos gr´ficos
                                                                                        a
             no tiene efecto.
type=        Este argumento controla el tipo de gr´fico producido, de acuerdo a las siguientes
                                                  a
             posibilidades:
             type=p    Dibuja puntos individuales. Este es el valor predeterminado
Cap´
   ıtulo 12: Procedimientos gr´ficos
                              a                                                          72



             type=l   Dibuja l´
                                ıneas
             type=b   Dibuja puntos y l´
                                         ıneas que los unen
             type=o   Dibuja puntos y l´
                                         ıneas que los unen, cubri´ndolos
                                                                  e
             type=h   Dibuja l´
                                ıneas verticales desde cada punto al eje X
             type=s
             type=S   Dibuja un gr´fico de escalera. En la primera forma, la escalera
                                    a
                        comienza hacia la derecha, en la segunda, hacia arriba.
             type=n   No se realiza ning´n gr´fico, aunque se dibujan los ejes (salvo indi-
                                          u     a
                        caci´n en contra) y se prepara el sistema de coordenadas de acuerdo
                            o
                        a los datos. Suele utilizarse para crear gr´ficos en los que a conti-
                                                                   a
                        nuaci´n se utilizar´n ´rdenes de nivel bajo.
                              o            a o
xlab=cadena
ylab=cadena
          Definen las etiquetas de los ejes x e y, en vez de utilizar las etiquetas prede-
          terminadas, que normalmente son los nombres de los objetos utilizados en la
          llamada a la funci´n gr´fica de nivel alto.
                            o    a
main=cadena
          T´ıtulo del gr´fico, aparece en la parte superior con tama˜o de letra grande.
                        a                                          n
sub=cadena
             Subt´
                 ıtulo del gr´fico, aparece debajo del eje x con tama˜o de letra peque˜o.
                             a                                      n                n

12.2 Funciones gr´ficas de nivel bajo
                 a
   A veces las funciones gr´ficas de nivel alto no producen exactamente el tipo de gr´fico
                           a                                                        a
deseado. En este caso pueden a˜adirse funciones gr´ficas de nivel bajo para a˜adir infor-
                               n                    a                        n
maci´n adicional (tal como puntos, l´
    o                               ıneas o texto) al gr´fico actual.
                                                        a
   Algunas de las funciones gr´ficas de nivel bajo m´s usuales son:
                              a                    a
points(x, y)
lines(x, y)
          A˜aden puntos o l´
            n              ıneas conectadas al gr´fico actual. El argumento type de la
                                                 a
          funci´n plot() puede pasarse a esta funciones (y su valor predeterminado es
               o
          p para points y l para lines.)
text(x, y, etiquetas, ...)
           A˜ade texto al gr´fico en las coordenadas x, y. Normalmente, etiquetas, es
             n                a
           un vector de enteros o de caracteres, en cuyo caso, etiquetas[i] se dibuja en
           el punto (x[i], y[i]). El valor predeterminado es 1:length(x).
           Nota: Esta funci´n se utiliza a menudo en la secuencia
                            o
                   plot(x, y, type=n); text(x, y, nombres)
           El par´metro gr´fico type=n suprime los puntos pero construye los ejes, y la
                  a        a
           funci´n text permite incluir caracteres especiales para representar los puntos,
                o
           como se especifica en el vector de caracteres nombres.
Cap´
   ıtulo 12: Procedimientos gr´ficos
                              a                                                            73



abline(a, b)
abline(h=y)
abline(v=x)
abline(lm.obj)
          A˜ade al gr´fico actual, una recta de pendiente b y ordenada en el origen a.
            n         a
          La forma h=y representa una recta horizontal de altura y, y la forma v=x,
          una similar, vertical. En el cuarto caso, lm.obj puede ser una lista con un
          componente coefficients de longitud 2 (como el resultado de una funci´n de
                                                                                 o
          ajuste de un modelo) que se interpretan como ordenada y pendiente, en ese
          orden.
polygon(x, y, ...)
          A˜ade al gr´fico actual un pol´
            n        a                 ıgono cuyos v´rtices son los elementos de (x,y);
                                                      e
          (opcionalmente) sombreado con l´ıneas, o relleno de color si el perif´rico lo ad-
                                                                               e
          mite.
legend(x, y, letrero, ...)
          A˜ade al gr´fico actual un letrero o leyenda, en la posici´n especificada. Los
            n         a                                                  o
          caracteres para dibujar, los estilos de l´
                                                   ıneas, los colores, etc. est´n identificados
                                                                               a
          con los elementos del vector letrero. Debe darse al menos otro argumento
          m´s, v, un vector de la misma longitud que letrero, con los correspondientes
            a
          valores de dibujo, como sigue:
            legend( , fill=v)
                       Colores para rellenar
            legend( , col=v)
                       Colores de puntos y l´
                                            ıneas
            legend( , lty=v)
                       Tipos de l´
                                 ınea
            legend( , lwd=v)
                       Anchura de l´
                                   ınea
            legend( , pch=v)
                       Caracteres para dibujar (vector de caracteres)
title(main, sub)
          A˜ade un t´
            n        ıtulo, main, en la parte superior del gr´fico actual, de tama˜o grande,
                                                             a                   n
          y un subt´
                   ıtulo, sub, en la parte inferior, de tama˜o menor.
                                                              n
axis(side, ...)
          A˜ade al gr´fico actual un eje en el lado indicado por el primer argumento (de
            n          a
          1 a 4, en el sentido de las agujas del reloj, siendo el 1 la parte inferior). Otros
          argumentos controlan la posici´n de los ejes, dentro o fuera del gr´fico, las
                                           o                                         a
          marcas y las etiquetas. Es util para a˜adir ejes tras utilizar la funci´n plot()
                                       ´          n                                o
          con el argumento axes=FALSE.
   Las funciones gr´ficas de nivel bajo necesitan normalmente alguna informaci´n de
                     a                                                             o
posici´n, como las coordenadas x e y, para determinar d´nde colocar los nuevos elementos.
      o                                                o
Las coordenadas se dan en t´rminos de coordenadas de usuario, las cuales est´n definidas
                            e                                                a
Cap´
   ıtulo 12: Procedimientos gr´ficos
                              a                                                           74



por las funciones gr´ficas de alto nivel previas y se toman en funci´n de los datos
                     a                                                    o
suministrados a estas funciones.
   Los dos argumentos, x e y, pueden sustituirse por un solo argumento de clase lista con dos
componentes llamados x e y, o por una matriz con dos columnas. De este modo, funciones
como locator(), que vemos a continuaci´n, pueden usarse para especificar interactivamente
                                        o
posiciones en un gr´fico.
                   a

12.2.1 Anotaciones matem´ticas
                        a
   En muchas ocasiones es conveniente a˜adir s´
                                        n      ımbolos matem´ticos y f´rmulas a un gr´fico.
                                                              a       o              a
En R es posible hacerlo especificando una expresi´n, en vez de una cadena de caracteres,
                                                   o
en cualquiera de las funciones text, mtext, axis o title. Por ejemplo, la orden siguiente
dibuja la f´rmula de la distribuci´n binomial en la posici´n x, y:
           o                      o                       o
       text(x, y, expression(paste(bgroup((, atop(n, x), )),
                                          p^x, q^{n-x})))
   Puede obtener informaci´n detallada con las ´rdenes:
                            o                    o
       help(plotmath)
       example(plotmath)

12.2.2 Fuentes vectoriales Hershey
   Es posible escribir texto utilizando las fuentes vectoriales Hershey en las funciones text
y contour. Existen tres razones para utilizar estas fuentes:
  • Producen mejores resultados, especialmente en pantalla, con textos rotados o de
    peque˜o tama˜o.
          n        n
  • Contienen s´ ımbolos que pueden no estar disponibles en las fuentes ordinarias, como
    signos del zodiaco, cartogr´ficos o astron´micos.
                                 a              o
  • Contienen caracteres cir´ ılicos y japoneses (Kana y Kanji).
   La informaci´n detallada, incluyendo las tablas de caracteres, puede obtenerla con las
               o
o
´rdenes:
      help(Hershey)
      example(Hershey)
      help(Japanese)
      example(Japanese)

12.3 Funciones gr´ficas interactivas
                 a
    R dispone de funciones que permiten al usuario extraer o a˜adir informaci´n a un gr´fico
                                                              n              o         a
utilizando el rat´n. La m´s sencilla es la funci´n locator():
                 o        a                     o
locator(n, type)
          Permite que el usuario seleccione posiciones del gr´fico actual, fundamental-
                                                              a
          mente, utilizando el bot´n primario del rat´n, hasta que haya seleccionado n
                                   o                  o
          puntos (el valor predeterminado son 512) o pulse el bot´n secundario. El argu-
                                                                 o
          mento type permite dibujar utilizando los puntos seleccionados con el mismo
          significado que en las funciones de nivel alto. Su valor predeterminado es no
Cap´
   ıtulo 12: Procedimientos gr´ficos
                              a                                                          75



            dibujar. La funci´n locator() devuelve las coordenadas de los puntos selec-
                             o
            cionados en una lista con dos componentes, x e y.
    La funci´n locator() suele utilizarse sin argumentos. Es particularmente util para
             o                                                                  ´
seleccionar interactivamente posiciones para elementos gr´ficos tales etiquetas cuando es
                                                         a
dif´ calcular previamente d´nde deben colocarse. Por ejemplo, para colocar un texto
   ıcil                      o
informativo junto a un punto an´malo, la orden
                                o
         text(locator(1), An´malo, adj=0)
                                o
puede ser util. En el caso de que no se disponga de rat´n, la funci´n locator() a´n puede
           ´                                            o          o             u
ser utilizada; en este caso se preguntar´n al usuario las coordenadas de x e y.
                                        a
identify(x, y, etiquetas)
          Permite identificar cualquiera de los puntos definidos por x e y utilizando
          el bot´n primario del rat´n, dibujando la correspondiente componente de
                o                    o
          etiquetas al lado (o el ´
                                  ındice del punto si no existe etiquetas). Al pulsar el
          bot´n secundario del rat´n, devuelve los ´
             o                    o                ındices de los puntos seleccionados.
   A veces interesa identificar puntos particulares en un gr´fico y no sus posiciones. Por
                                                             a
ejemplo, si queremos que el usuario seleccione una observaci´n de inter´s y, posteriormente,
                                                            o          e
manipularla en alg´n modo. Dado un n´mero de coordenadas, (x, y), en dos vectores
                   u                        u
num´ricos, x e y, podr´
    e                 ıamos usar la funci´n identify() del siguiente modo:
                                          o
       plot(x, y)
       identify(x, y)
    La funci´n identify() no realiza ning´n gr´fico por s´ misma sino que permite al usuario
            o                            u    a         ı
mover el puntero del rat´n y pulsar junto a un punto. El punto m´s pr´ximo al puntero
                         o                                           a    o
(si est´ suficientemente pr´ximo) se identificar´ dibujando junto a ´l su n´mero ´
       a                  o                   a                   e      u     ındice, esto
es, la posici´n que ocupa en los vectores x e y. Alternativamente podr´ haber utilizado
             o                                                           ıa
una cadena de caracteres (como por ejemplo el nombre del caso) para la identificaci´n,   o
utilizando el argumento etiquetas, o inhabilitar la identificaci´n utilizando el argumento
                                                               o
plot=FALSE. Cuando se pulsa el bot´n secundario, la funci´n devuelve los ´
                                      o                      o               ındices de los
puntos seleccionados, que podr´n ser utilizados para obtener los puntos correspondientes
                               a
de los vectores x e y.

12.4 Uso de par´metros gr´ficos
               a         a
   Al crear gr´ficos, especialmente con fines de presentaci´n o publicaci´n, es posible que R
              a                                           o            o
no produzca de modo autom´tico la apariencia exacta que se desea. Ahora bien, es posible
                             a
personalizar cada aspecto del gr´fico utilizando par´metros gr´ficos. R dispone de muchos
                                 a                  a         a
par´metros gr´ficos que controlan aspectos tales como estilo de l´
   a          a                                                   ınea, colores, disposici´n
                                                                                          o
de las figuras y justificaci´n del texto entre otros muchos. Cada par´metro gr´fico tiene un
                          o                                         a         a
nombre (por ejemplo, ‘col’, que controla los colores) y toma un valor (por ejemplo, blue,
para indicar el color azul).
    Por cada dispositivo gr´fico activo, se mantiene una lista de par´metros gr´ficos, y cada
                           a                                         a        a
dispositivo gr´fico dispone de un conjunto predeterminado de par´metros cuando se inicia-
               a                                                   a
liza. Los par´metros gr´ficos pueden indicarse de dos modos; bien de modo permanente, lo
              a         a
que afectar´ a todas las funciones gr´ficas que accedan al dispositivo gr´fico, bien tempo-
            a                         a                                  a
ralmente, lo que s´lo afecta a la funci´n gr´fica que lo utiliza en ese momento.
                  o                    o    a
Cap´
   ıtulo 12: Procedimientos gr´ficos
                              a                                                           76



12.4.1 Cambios permanentes. La funci´n par()
                                    o
   La funci´n par() se utiliza para acceder a la lista de par´metros gr´ficos del dispositivo
           o                                                 a         a
gr´fico actual y para modificarla.
  a
par()       Sin argumentos, devuelve una lista de todos los par´metros gr´ficos y sus valo-
                                                               a         a
            res, para el dispositivo gr´fico actual.
                                       a
par(c(col, lty))
          Con un vector de caracteres como argumento, devuelve una lista que contiene
          s´lo los valores de los par´metros citados.
           o                         a
par(col=4, lty=2)
          Con argumentos con nombre (o una lista como argumento) establece los valores
          de estos par´metros y devuelve (de modo invisible) una lista con los valores
                       a
          originales de los par´metros.
                               a
    Al modificar cualquier par´metro con la funci´n par(), la modificaci´n es permanente, en
                              a                 o                     o
el sentido de que cualquier llamada a una funci´n gr´fica (en el mismo dispositivo gr´fico)
                                                o    a                                a
vendr´ afectada por dicho valor. Puede pensarse que este tipo de asignaci´n equivale a
      a                                                                       o
modificar los valores predeterminados de los par´metros que utilizar´n las funciones gr´ficas
                                                a                  a                  a
salvo que se les indique un valor alternativo.
   Las llamadas a la funci´n par() siempre afectan a los valores globales de los par´metros
                             o                                                       a
gr´ficos, incluso aunque la llamada se realice desde una funci´n. Esta conducta a menudo no
  a                                                           o
es satisfactoria; habitualmente desear´   ıamos modificar algunos par´metros, realizar algunos
                                                                    a
gr´ficos y volver a los valores originales para no afectar a la sesi´n completa de R. Este
  a                                                                  o
trabajo recae en el usuario, que debe almacenar el resultado de par() cuando realice alg´n u
cambio y restaurarlo cuando el gr´fico est´ completo.
                                     a        e
        par.anterior - par(col=4,lty=2)
          . . . varias ´rdenes gr´ficas . . .
                       o         a
        par(par.anterior)

12.4.2 Cambios temporales. Argumentos de las funciones gr´ficas
                                                         a
   Los par´metros gr´ficos tambi´n pueden pasarse a pr´cticamente todas las funciones
           a         a           e                      a
gr´ficas como argumentos con nombre, lo que tiene el mismo efecto que utilizarlos en la
  a
funci´n par(), excepto que los cambios s´lo existen durante la llamada a la funci´n. Por
     o                                  o                                        o
ejemplo:
        plot(x, y, pch=+)
realiza un diagrama de dispersi´n utilizando el signo de sumar, +, para representar cada
                                o
punto, sin cambiar el car´cter predeterminado para gr´ficos posteriores.
                         a                            a

12.5 Par´metros gr´ficos habituales
        a         a
   A continuaci´n se detallan muchos de los par´metros gr´ficos habituales. La ayuda
               o                                a        a
de la funci´n par() contiene un resumen m´s conciso; por lo que puede considerar esta
           o                                a
descripci´n como una alternativa m´s detallada.
         o                        a
   Los par´metros gr´ficos se presentar´n en la siguiente forma:
          a         a                 a
Cap´
   ıtulo 12: Procedimientos gr´ficos
                              a                                                             77



nombre=valor
          Descripci´n del efecto del par´metro. nombre es el nombre del par´metro, esto
                   o                    a                                  a
          es, el nombre del argumento que debe usar en la funci´n par() o cualquier
                                                                  o
          funci´n gr´fica. valor es un valor t´
               o    a                        ıpico del par´metro.
                                                          a

12.5.1 Elementos gr´ficos
                   a
   Los gr´ficos de R est´n formados por puntos, l´
         a             a                        ıneas, texto y pol´
                                                                  ıgonos (regiones rellenas).
Existen par´metros gr´ficos que controlan c´mo se dibujan los elementos gr´ficos citados,
            a         a                    o                                  a
como los siguientes:
pch=+     Car´cter que se utiliza para dibujar un punto. El valor predeterminado var´
                a                                                                            ıa
            entre dispositivos gr´ficos, pero normalmente es ‘◦’. Los puntos tienden a apare-
                                 a
            cer en posici´n levemente distinta de la exacta, salvo que utilice el car´cter .
                         o                                                           a
            que produce puntos centrados.
pch=4       Si pch toma un valor entre 0 y 18, ambos inclusive, se utiliza un s´
                                                                               ımbolo especial
            para realizar los gr´ficos. Para saber cuales son los s´
                                a                                 ımbolos, utilice las ´rdenes
                                                                                       o
                   plot(1,t=n)
                   legend(locator(1), as.character(0:18), marks=0:18)
            y pulse en la parte superior del gr´fico.
                                               a
lty=2       Es el tipo de l´
                           ınea. Aunque algunos tipos no pueden dibujarse en determinados
            dispositivos gr´ficos, siempre, el tipo 1 corresponde a una l´
                            a                                            ınea continua, y los
            tipos 2 o superior corresponden a l´ ıneas con puntos, rayas o combinaciones de
            ambos.
lwd=2       Es la anchura de l´
                              ınea, medida en m´ltiplos de la anchura “base”. Afecta tanto
                                                 u
            a los ejes como a las l´
                                   ıneas dibujadas con la funci´n lines(), etc.
                                                               o
col=2       Es el color que se utiliza para los puntos, l´ ıneas, texto, im´genes y relleno
                                                                           a
            de zonas. Cada uno de estos elementos gr´ficos admite una lista de colores
                                                         a
            posibles y el valor de este par´metro es un ´
                                           a            ındice para esta lista. Obviamente
            este par´metro solo tiene aplicaci´n en algunos dispositivos.
                    a                         o
font=2      Es un entero que indica qu´ fuente se utilizar´ para el texto. Si es posible, 1
                                      e                    a
            corresponde a texto normal, 2 a negrilla, 3 a it´lica y 4 a it´lica negrilla.
                                                            a             a
font.axis
font.lab
font.main
font.sub Es la fuente que se utilizar´, respectivamente, para escribir en los ejes, para el
                                     a
          etiquetado de x e y, y para el t´
                                          ıtulo y el subt´
                                                         ıtulo.
adj=-0.1    Indica c´mo debe justificarse el texto respecto de la posici´n de dibujo. Un 0
                    o                                                   o
            indica justificaci´n a la izquierda, un 1 indica justificaci´n a la derecha, y un
                             o                                        o
            0.5 indica centrado. Puede usar cualquier otro valor que indicar´ la proporci´n
                                                                             a           o
            de texto que aparece a la izquierda de la posici´n de dibujo, por tanto un valor
                                                            o
            de -0.1 dejar´ un 10% de la anchura del texto entre el mismo y la posici´n de
                          a                                                           o
            dibujo.
cex=1.5     Es el car´cter de expansi´n. Su valor indica el tama˜o de los caracteres de
                     a                 o                             n
            texto (incluidos los caracteres de dibujo) respecto del tama˜o predeterminado.
                                                                        n
Cap´
   ıtulo 12: Procedimientos gr´ficos
                              a                                                              78



12.5.2 Ejes y marcas de divisi´n
                              o
   Muchos de los gr´ficos de nivel alto en R tienen ejes, pero, adem´s, siempre es posible
                     a                                                    a
construirlos con la funci´n gr´fica de nivel bajo, axis(). Los ejes tienen tres componentes
                          o     a
principales: La l´
                 ınea del eje, cuyo estilo lo controla el par´metro lty, las marcas de divisi´n,
                                                             a                               o
que indican las unidades de divisi´n del eje, y las etiquetas de divisi´n, que indican las
                                     o                                      o
unidades de las marcas de divisi´n. Estas componentes pueden modificarse con los siguientes
                                  o
par´metros gr´ficos:
   a           a
lab=c(5, 7, 12)
          Los dos primeros n´meros indican el n´mero de marcas del eje x y del eje y
                             u                    u
          respectivamente, y el tercer n´mero es la longitud de las etiquetas de los ejes
                                        u
          medida en caracteres (incluido el punto decimal). Atenci´n: Si elige un n´mero
                                                                  o                u
          muy peque˜o puede que todas las etiquetas de divisi´n se redondeen al mismo
                     n                                        o
          n´mero.
            u
las=1       Corresponde a la orientaci´n de las etiquetas de los ejes. Un 0 indica paralelo
                                        o
            al eje, un 1 indica horizontal, y un 2 indica perpendicular al eje.
mgp=c(3, 1, 0)
          Son las posiciones de las componentes de los ejes. La primera es la distancia
          desde la etiqueta del eje al propio eje, medida en l´
                                                              ıneas de texto. La segunda es
          la distancia hasta las etiquetas de divisi´n. La tercera y ultima es la distancia
                                                    o                 ´
          desde el eje a la l´
                             ınea del eje (normalmente cero). Los valores positivos indican
          que est´ fuera de la zona de dibujo, y los negativos indican que est´ dentro.
                  a                                                             a
tck=0.01    Es la longitud de las marcas de divisi´n, dada como una fracci´n de la zona de
                                                  o                         o
            dibujo. Cuando tck es peque˜o (menos de 0.5) las marcas de divisi´n de ambos
                                          n                                     o
            ejes ser´n del mismo tama˜o. Un valor de 1 har´ que aparezca una rejilla. Si
                    a                   n                     a
            el valor es negativo, las marcas de divisi´n se har´n por la parte exterior de la
                                                      o        a
            zona de dibujo. Utilice tck=0.01 y mgp=c(1,-1.5,0) para obtener marcas de
            divisi´n internas.
                  o
xaxs=s
yaxs=d    Estilo de eje de los ejes x e y respectivamente. Con los estilos s (est´ndar) y
                                                                                      a
            e (extendido) tanto la mayor marca como la menor caen fuera del intervalo de
            los datos. Los ejes extendidos pueden ampliarse levemente si hay alg´n punto
                                                                                     u
            muy pr´ximo al borde. Este estilo de ejes puede dejar a veces grandes zonas en
                    o
            blanco cerca de los bordes. Con los estilos i (interno) y r (predeterminado)
            las marcas de divisi´n siempre caen dentro del rango de los datos, aunque el
                                  o
            estilo r deja un peque˜o espacio en los bordes.
                                       n
            Si selecciona el estilo d (directo) se procede a bloquear los ejes actuales y
            los utiliza para los siguientes gr´ficos hasta que el par´metro se cambie a otro
                                               a                     a
            de los valores. Este procedimiento es util para generar series de gr´ficos con
                                                      ´                             a
            escalas fijas.

12.5.3 M´rgenes de las figuras
        a
    Un gr´fico de R se denomina figura y comprende una zona de dibujo rodeada de
         a
m´rgenes (que posiblemente contendr´n etiquetas de ejes, t´
  a                                a                      ıtulos, etc.) y, normalmente,
acotada por los propios ejes.
Cap´
   ıtulo 12: Procedimientos gr´ficos
                              a                                                           79



   Una figura t´
              ıpica es
                                        −−−−−−−−−−−−−−−−−−
                                        −−−−−−−−−−−−−−−−−−
                                        −−−−−−−−−−−−−−−−−−
                                        −−−−−−−−−−−−−−−−−−               mar[3]
                                        −−−−−−−−−−−−−−−−−−
                                        −−−−−−−−−−−−−−−−−−




                                 3.0
                                               Plot region




                                 1.5
                                 0.0
                             y
                           mai[2]
                                 −1.5
                                 −3.0




                                        −3.0       −1.5      0.0   1.5       3.0

                                                 mai[1]      x
                                                                           Margin




   Los par´metros gr´ficos que controlan la disposici´n de la figura incluyen:
          a         a                               o


mai=c(1, 0.5, 0.5, 0)
          Anchuras de los m´rgenes inferior, izquierdo, superior y derecho respectiva-
                            a
          mente, medidos en pulgadas.

mar=c(4, 2, 2, 1)
          Similar a mai, pero medido en l´
                                         ıneas de texto.


    Los par´metros mar y mai est´n relacionados en el sentido de que un cambio en uno se
            a                      a
refleja en el otro. Los valores predeterminados son a menudo demasiado grandes, el margen
derecho se necesita raramente, igual que el superior si no se incluye t´ ıtulo. Los m´rgenes
                                                                                      a
inferior e izquierdo s´lo necesitan el tama˜o preciso para incluir las etiquetas de ejes y de
                      o                    n
divisi´n. Adem´s el valor predeterminado no tiene en cuenta la superficie del dispositivo
      o          a
gr´fico. As´ si utiliza el dispositivo postscript() con el argumento height=4 obtendr´
  a          ı,                                                                             a
un gr´fico en que la mitad del mismo son m´rgenes, salvo que expl´
      a                                       a                       ıcitamente cambie mar
o mai. Cuando hay figuras m´ltiples, como veremos despu´s, los m´rgenes se reducen a la
                               u                            e        a
mitad, aunque suele ser insuficiente cuando varias figuras comparten la misma p´gina.a



12.5.4 Figuras m´ ltiples
                u

   R permite la creaci´n de una matriz de n × m figuras en una sola p´gina. Cada figura
                      o                                              a
tiene sus propios m´rgenes, y la matriz de figuras puede estar opcionalmente rodeada de
                   a
un margen exterior , tal como se muestra en la siguiente figura:
Cap´
   ıtulo 12: Procedimientos gr´ficos
                              a                                                          80
                                    −−−−−−−−−−−−−−−
                                    −−−−−−−−−−−−−−−
                                    −−−−−−−−−−−−−−−        oma[3]
                                    −−−−−−−−−−−−−−−
                                    −−−−−−−−−−−−−−−




                                                                 omi[4]
                                                mfg=c(3,2,3,2)




                                              omi[1]
                               mfrow=c(3,2)


   Los par´metros gr´ficos relacionados con las figuras m´ltiples son los siguientes:
          a         a                                  u
mfcol=c(3, 2)
mfrow=c(2, 4)
          Definen el tama˜o de la matriz de figuras m´ltiples. En ambos, el primer valor
                          n                            u
          es el n´mero de filas, el segundo el de columnas. La diferencia entre los dos, es
                 u
          que con el primero, mfcol, la matriz se rellena por columnas, en tanto que con
          el segundo, mfrow, lo hace por filas. La distribuci´n en la figura del ejemplo se
                                                            o
          ha creado con mfrow=c(3,2) y se ha representado la p´gina en el momento en
                                                                  a
          que se han realizado los cuatro primeros gr´ficos.
                                                      a
mfg=c(2, 2, 3, 2)
          Definen la posici´n de la figura actual dentro de la matriz de figuras m´ltiples.
                           o                                                      u
          Los dos primeros valores indican la fila y columna de la figura actual, en tanto
          que los dos ultimos son el n´mero de filas y columnas de la matriz de figuras
                      ´                u
          m´ltiples. Estos par´metros se utilizan para seleccionar cada una de las dife-
            u                  a
          rentes figuras de la matriz. Incluso, los dos ultimos valores pueden ser distintos
                                                       ´
          de los verdaderos valores, para poder obtener figuras de tama˜os distintos en
                                                                          n
          la misma p´gina.
                     a
fig=c(4, 9, 1, 4)/10
          Definen la posici´n de la figura actual en la p´gina. Los valores son las posiciones
                          o                            a
          de los bordes izquierdo, derecho, inferior y superior respectivamente, medidos
          como la proporci´n de p´gina desde la esquina inferior izquierda. El ejemplo
                           o        a
          corresponder´ a una figura en la parte inferior derecha de la p´gina. Este
                       ıa                                                      a
          par´metro permite colocar una figura en cualquier lugar de la p´gina.
              a                                                             a
oma=c(2, 0, 3, 0)
omi=c(0, 0, 0.8, 0)
          Definen el tama˜o de los m´rgenes exteriores. De modo similar a mar y mai, el
                         n           a
          primero est´ expresado en l´
                     a                ıneas de texto y el segundo en pulgadas, correspon-
          den a los m´rgenes inferior, izquierdo, superior y derecho respectivamente.
                     a
    Los m´rgenes exteriores son particularmente utiles para ajustar convenientemente los
          a                                     ´
t´
 ıtulos, etc. Puede a˜adir texto en estos m´rgenes con la funci´n mtext() sin m´s que
                     n                      a                   o                a
Cap´
   ıtulo 12: Procedimientos gr´ficos
                              a                                                           81



utilizar el argumento outer=T. R no crea m´rgenes exteriores predeterminadamente, pero
                                              a
pueden crearse utilizando las funciones oma y omi.
    Es posible crear disposiciones de figuras m´ltiples m´s complejas utilizando las funciones
                                              u         a
split.screen() y layout().

12.6 Dispositivos gr´ficos
                    a
    R puede generar gr´ficos (con niveles de calidad diversos) en casi todos los tipos de
                        a
pantalla o dispositivos de impresi´n. Ahora bien, en primer lugar es necesario informarle
                                   o
del tipo de dispositivo de que se trata. Esta acci´n se realiza iniciando un controlador
                                                     o
de dispositivo. El prop´sito de un controlador de dispositivo es convertir las instrucciones
                        o
gr´ficas de R (por ejemplo, ‘dibuja una l´
  a                                        ınea’) en una forma que el dispositivo concreto
pueda comprender.
    Los controladores de dispositivo se inician llamando a una funci´n de controlador de
                                                                     o
dispositivo. Existe una funci´n para cada controlador de dispositivo y la lista completa
                               o
puede conseguirse con help(Devices). Por ejemplo, la orden
        postscript()
dirige cualquier salida gr´fica a la impresora en formato PostScript. Algunos controladores
                          a
de dispositivo habituales son:
X11()          Para uso con los sistemas de ventanas X11 y Microsoft Windows.
postscript()
          Para imprimir en impresoras PostScript o crear archivos con este formato.
pictex()       Crea un archivo para LaTEX.
   Al terminar de utilizar un dispositivo, aseg´rese de finalizar el mismo utilizando la orden
                                               u
       dev.off()
   Esta orden asegura que el dispositivo finaliza correctamente; por ejemplo en el caso de
una impresora asegura que cada p´gina sea completada y enviada a la impresora.
                                   a

12.6.1 Inclusi´n de gr´ficos PostScript en documentos
              o       a
   Si utiliza el argumento file en la funci´n postscript(), almacenar´ los gr´ficos, en
                                             o                             a       a
formato PostScript, en el archivo que desee. Tenga en cuenta que si el archivo ya existe,
ser´ previamente borrado. Ello ocurre aunque el archivo se haya creado previamente en la
   a
misma sesi´n de R. El gr´fico tendr´ orientaci´n apaisada salvo que especifique el argumento
           o            a          a           o
horizontal=FALSE. El tama˜o del gr´fico se controla con los argumentos width (anchura) y
                              n      a
height (altura) que se utilizan como factores de escala para ajustarlo a dichas dimensiones.
Por ejemplo, la orden
        postscript(grafico.ps, horizontal=FALSE, height=5, pointsize=10)
producir´ un archivo que contiene el c´digo PostScript para una figura de cinco pulgadas
         a                              o
de alto, que podr´ ser incluido en un documento. A menudo dicha inclusi´n requiere que
                   a                                                         o
                                         1
el archivo se almacene en formato EPS . El archivo que produce R es de este tipo, pero
s´lo lo indicar´ expresamente si se utiliza el argumento onefile=FALSE. Esta notaci´n es
 o             a                                                                       o
 1
     Acr´nimo en ingl´s de
        o            e       Encapsulated PostScript
Cap´
   ıtulo 12: Procedimientos gr´ficos
                              a                                                           82



consecuencia de la compatibilidad con S e indica que la salida est´ constituida por una sola
                                                                  a
p´gina. Por tanto para crear un gr´fico que se pueda incluir sin problema en cualquier
 a                                  a
procesador, deber´ utilizar una orden an´loga a la siguiente:
                  a                     a
         postscript(grafico.eps, horizontal=FALSE, onefile=FALSE,
                     height=8, width=6, pointsize=10)

12.6.2 Dispositivos gr´ficos m´ ltiples
                      a      u
   La utilizaci´n avanzada de R implica a menudo tener varios dispositivos gr´ficos en
               o                                                               a
uso simult´neamente. Naturalmente, s´lo un dispositivo gr´fico acepta las ´rdenes gr´ficas
          a                         o                    a               o         a
en cada momento, y se denomina dispositivo actual. Cuando se abren varios dispositivos,
forman una sucesi´n numerada cuyos nombres determinan el tipo de dispositivo en cada
                  o
posici´n.
      o
   Las principales ´rdenes utilizadas para trabajar con varios dispositivos y sus significados
                    o
son las siguientes:

X11()        Abre una ventana en Unix y Microsoft Windows

windows()
             Abre una ventana en Microsoft Windows

postscript()
pictex()
...       Cada llamada a una funci´n de controlador de dispositivo abre un nuevo dis-
                                     o
          positivo gr´fico y, por tanto, a˜ade un elemento a la lista de dispositivos, al
                     a                   n
          tiempo que este dispositivo pasa a ser el dispositivo actual al que se enviar´n
                                                                                       a
          los resultados gr´ficos. (En algunas plataformas es posible que existan otros
                           a
          dispositivos disponibles.)

dev.list()
             Devuelve el n´mero y nombre de todos los dispositivos activos. El dispositivo
                           u
             de la posici´n 1 es siempre el dispositivo nulo que no acepta ninguna orden
                         o
             gr´fica.
               a

dev.next()
dev.prev()
             Devuelve el n´mero y nombre del dispositivo gr´fico siguiente o anterior, re-
                          u                                a
             spectivamente, al dispositivo actual.

dev.set(which=k)
          Puede usarse para hacer que el dispositivo que ocupa la posici´n k en la lista
                                                                        o
          de dispositivos sea el actual. Devuelve el n´mero y nombre del dispositivo.
                                                      u

dev.off(k)
          Cierra el dispositivo gr´fico que ocupa la posici´n k de la lista de dispositivos.
                                  a                       o
          Para algunos dispositivos, como los postscript, finalizar´ el gr´fico, bien im-
                                                                    a       a
          primi´ndolo inmediatamente, bien completando la escritura en el archivo, de-
               e
          pendiendo de c´mo se ha iniciado el dispositivo.
                         o
Cap´
   ıtulo 12: Procedimientos gr´ficos
                              a                                                             83



dev.copy(device, ..., which=k)
dev.print(device, ..., which=k)
          realiza una copia del dispositivo k. Aqu´ device, es una funci´n de disposi-
                                                  ı,                     o
          tivo, como postscript, con argumentos adicionales si es necesario, especifica-
          dos por .... La funci´n dev.print es similar, pero el dispositivo copiado se
                                o
          cierra inmediatamente, lo que finaliza las acciones pendientes que se realizan
          inmediatamente.
graphics.off()
          Cierra todos los dispositivos gr´ficos de la lista, excepto el dispositivo nulo.
                                          a

12.7 Gr´ficos din´micos
       a        a
    R no dispone (en este momento) de ninguna funci´n de gr´ficos din´micos, por ejemplo
                                                     o       a         a
para rotar una nube de puntos o activar y desactivar puntos interactivamente. Sin embargo
existen muchas de estas posibilidades disponibles en el sistema XGobi de Swayne, Cook y
Buja, disponible en
       http://www.research.att.com/areas/stat/xgobi/
a las que puede acceder desde R a trav´s de la biblioteca xgobi.
                                      e
    XGobi est´ disponible actualmente para X Windows, tanto en Unix como en Microsoft
             a
Windows, y existen conexiones con R disponibles en ambos sistemas.
Apendice A: Primera sesi´n con R
                        o                                                                  84



Apendice A Primera sesi´n con R
                       o
   La siguiente sesi´n pretende presentar algunos aspectos del entorno R, utiliz´ndolos.
                    o                                                               a
Muchos de estos aspectos le ser´n desconocidos e incluso enigm´ticos al principio, pero esta
                                a                             a
sensaci´n desaparecer´ r´pidamente. La sesi´n est´ escrita para el sistema UNIX, por lo
       o              a a                    o     a
que es posible que los usuarios de Microsoft Windows deban realizar peque˜os cambios.
                                                                            n
             Con´ctese e inicie el sistema de ventanas. Es necesario que disponga del archivo
                 e
             ‘morley.data’ en su directorio de trabajo, por lo que, si es necesario, deber´  a
             copiarlo. Si no sabe hacerlo, consulte con un experto local. Si ya lo ha copiado,
             contin´e.
                   u
$R           Ejecute R.
             Comienza R y aparece el mensaje inicial.
             (Dentro de R no mostraremos el s´
                                             ımbolo de ‘preparado’ en la parte izquierda
             para evitar confusiones.)
help.start()
          Muestra la ayuda interactiva, que est´ escrita en formato html, utilizando el
                                               a
          lector WEB disponible en el ordenador. Si utiliza esta ayuda comprender´    a
          mejor el funcionamiento de R.
          Minimice la ventana de ayuda y contin´e la sesi´n.
                                                 u        o
x - rnorm(50)
y - rnorm(x)
           Genera dos vectores que contienen cada uno 50 valores pseudoaleatorios
           obtenidos de una distribuci´n normal (0,1) y los almacena en x e y.
                                      o
plot(x, y)
             Aparecer´ una ventana gr´fica autom´ticamente. En ella se representan los
                     a                 a         a
             puntos antes generados, tomando cada componente de x y de y como las coor-
             denadas de un punto del plano.
ls()         Presenta los nombres de los objetos existentes en ese momento en el espacio de
             trabajo de R.
rm(x, y)     Elimina los objetos x e y.
x - 1:20 Almacena en x el vector (1, 2, . . . , 20).
w - 1 + sqrt(x)/2
            A partir del vector x, crea un vector ponderado de desviaciones t´
                                                                             ıpicas, y lo
            almacena en w.
hoja.de.datos - data.frame(x=x, y= x + rnorm(x)*w)
hoja.de.datos
          Crea una hoja de datos de dos columnas, llamadas x e y, y la almacena en
          hoja.de.datos. A continuaci´n la presenta en pantalla.
                                     o
regr - lm(y ∼ x, data=hoja.de.datos)
summary(regr)
           Realiza el ajuste de un modelo de regresi´n lineal de y sobre x, lo almacena en
                                                    o
           regr, y presenta en pantalla un resumen del an´lisis.
                                                          a
Apendice A: Primera sesi´n con R
                        o                                                               85



regr.pon - lm(y ∼ x, data=hoja.de.datos, weight=1/w^2)
summary(regr.pon)
          Puesto que se conocen las desviaciones t´
                                                  ıpicas, puede realizarse una regresi´n
                                                                                      o
          ponderada.
attach(hoja.de.datos)
          Conecta la hoja de datos, de tal modo que sus columnas aparecen como varia-
          bles.
regr.loc - lowess(x, y)
          Realiza una regresi´n local no param´trica.
                             o                e
plot(x, y)
             Representa el gr´fico bidimensional est´ndar.
                             a                     a
lines(x, regr.loc$y)
          Le a˜ade la regresi´n local.
              n              o
abline(0, 1, lty=3)
          Le a˜ade la verdadera recta de regresi´n (punto de corte 0, pendiente 1).
              n                                 o
abline(coef(regr))
          Le a˜ade la recta de regresi´n no ponderada.
              n                       o
abline(coef(regr.pon), col = red)
          Le a˜ade la recta de regresi´n ponderada.
              n                       o
detach()     Desconecta la hoja de datos, elimin´ndola de la trayectoria de b´squeda.
                                                a                            u
plot(fitted(regr), resid(regr),
     xlab=Predichos,
     ylab=Residuos,
     main=Residuos / Predichos)
          Un gr´fico diagn´stico de regresi´n para investigar la posible heteroscedastici-
               a         o                o
          dad.
qqnorm(resid(regr), main=Residuos por rangos)
          Gr´fico en papel probabil´
             a                    ıstico normal para comprobar asimetr´ aplastamiento
                                                                      ıa,
          y datos an´malos. (No es muy util en este caso)
                    o                     ´
rm(x,w,hoja.de.datos,regr,regr.pon,regr.loc)
          Elimina los objetos creados.
file.show(morley.data)
          Presenta el contenido del archivo.
mm - read.table(morley.data)
mm         Lee los datos de Michaelson y Morley y los almacena en la hoja de datos mm, y
           la muestra en pantalla a continuaci´n. Hay cinco experimentos (columna Expt)
                                              o
           y cada uno contiene 20 series (columna Run) y la columna Speed contiene la
           velocidad de la luz medida en cada caso, codificada apropiadamente.
mm$Expt - factor(mm$Expt)
mm$Run - factor(mm$Run)
           Transforma Expt y Run en factores.
Apendice A: Primera sesi´n con R
                        o                                                               86



attach(mm)
             Conecta la hoja de datos en la posici´n predeterminada: la 2.
                                                  o
plot(Expt, Speed, main=Velocidad de la luz, xlab=No. Experimento)
          Compara los cinco experimentos mediante diagramas de cajas.
fm - aov(Speed ∼ Run + Expt, data=mm)
summary(fm)
           Analiza los datos como un dise˜o en bloques aleatorizados, tomando las ‘series’
                                         n
           y los ‘experimentos’ como factores.
fm0 - update(fm, . ∼ . - Run)
anova(fm0,fm)
           Ajusta el submodelo eliminando las ‘series’, y lo compara utilizando un an´lisis
                                                                                     a
           de la varianza.
detach()
rm(fm, fm0)
          Desconecta la hoja de datos y elimina los objetos creados, antes de seguir ade-
          lante.
   Consideraremos ahora nuevas posibilidades gr´ficas.
                                               a
x - seq(-pi, pi, len=50)
y - x     x es un vector con 50 valores equiespaciados en el intervalo −π ≤ x ≤ π. El
           vector y es id´ntico a x.
                         e
f - outer(x, y, function(x, y) cos(y)/(1 + x^2))
           f es una matriz cuadrada, cuyas filas y columnas est´n indexadas por x e y
                                                                 a
           respectivamente, formada por los valores de la funci´n cos(y)/(1 + x2 ).
                                                               o
oldpar - par(no.readonly = TRUE)
par(pty=s)
           Almacena los par´metros gr´ficos y modifica el par´metro pty (zona de dibujo)
                            a         a                    a
           para que valga “s” (cuadrado).
contour(x, y, f)
contour(x, y, f, nlevels=15, add=TRUE)
          Dibuja un mapa de curvas de nivel de f ; y despu´s le a˜ade m´s l´
                                                          e      n     a ıneas para
          obtener m´s detalle.
                    a
fa - (f-t(f))/2
           fa es la “parte asim´trica” de f . (t(f) es la traspuesta de f).
                               e
contour(x, y, fa, nint=15)
          Dibuja un mapa de curvas de nivel,. . .
par(oldpar)
          . . . y recupera los par´metros gr´ficos originales.
                                  a         a
image(x, y, f)
image(x, y, fa)
          Dibuja dos gr´ficos de densidad
                       a
Apendice A: Primera sesi´n con R
                        o                                                              87



objects(); rm(x, y, f, fa)
          Presenta los objetos existentes y elimina los objetos creados, antes de seguir
          adelante.
   Con R tambi´n puede utilizar n´meros complejos. 1i se utiliza para representar la
                e                u
unidad imaginaria, i.
th - seq(-pi, pi, len=100)
z - exp(1i*th)
par(pty=s)
plot(z, type=l)
           La representaci´n gr´fica de un argumento complejo consiste en dibujar la parte
                          o     a
           imaginaria frente a la real. En este caso se obtiene un c´
                                                                    ırculo.
w - rnorm(100) + rnorm(100)*1i
           Suponga que desea generar puntos pseudoaleatorios dentro del c´ ırculo unidad.
           Un primer intento consiste en generar puntos complejos cuyas partes real e
           imaginaria, respectivamente, procedan de una normal (0,1) . . .
w - ifelse(Mod(w)  1, 1/w, w)
           . . . y sustituir los que caen fuera del c´
                                                     ırculo por sus inversos.
plot(w, xlim=c(-1,1), ylim=c(-1,1), pch=+,xlab=x, ylab=y)
lines(z)
          Todos los puntos est´n dentro del c´
                              a              ırculo unidad, pero la distribuci´n no es
                                                                              o
          uniforme.
w - sqrt(runif(100))*exp(2*pi*runif(100)*1i)
plot(w, xlim=c(-1,1), ylim=c(-1,1), pch=+, xlab=x, ylab=y)
lines(z)
           Este segundo m´todo utiliza la distribuci´n uniforme. En este caso, los puntos
                          e                         o
           presentan una apariencia m´s uniformemente espaciada sobre el c´
                                     a                                      ırculo.
rm(th, w, z)
           De nuevo elimina los objetos creados, antes de seguir adelante.
q()         Termina el programa R. Se le preguntar´ si desea salvar el espacio de trabajo.
                                                  a
            Puesto que esta sesi´n ha sido solamente de presentaci´n, probablemente de-
                                o                                 o
            ber´ contestar que no.
               ıa
Apendice B: Ejecuci´n de R
                   o                                                                         88



Apendice B Ejecuci´n de R
                  o

B.1 Ejecuci´n de R en UNIX
           o
   La orden ‘R’ se utiliza para ejecutar R con diferentes opciones, de la forma
       R [opciones] [archivoentrada] [archivosalida],
o, a trav´s del interfaz R CMD, para acceder a varias herramientas de R (por ejemplo, para
           e
procesar archivos de formato de documentaci´n de R o manipular bibliotecas) que no est´n
                                                 o                                            a
dise˜adas para ser usadas “directamente”.
    n
   Muchas opciones controlan lo que ocurre al comenzar y al terminar una sesi´n de R. El
                                                                                    o
mecanismo de inicio (Utilice ‘help(Startup)’ para informaci´n actualizada) es el siguiente:
                                                                o
  • Salvo que se especifique la opci´n ‘--no-environ’, R busca el archivo ‘.Renviron’ en el
                                     o
     directorio actual; si no lo encuentra, busca el archivo indicado en la variable de entorno
     R_ENVIRON, y si esta variable no existe, busca el archivo ‘.Renviron’ en el directorio
     inicial del usuario. Si encuentra alguno de estos archivos, se ejecuta (como si se lo diese
     como argumento a la funci´n source dentro de R) para dar valores a las variables de
                                  o
     entorno. Las variables se exportan autom´ticamente, supuesto que se les d´ valor en
                                                   a                                  e
     l´
      ıneas de la forma ‘nombre=valor’. Algunas de estas variables son:
     R_PAPERSIZE (tama˜o predeterminado del papel),
                           n
     R_PRIMTCMD (orden predeterminada de impresi´n),   o
     R_LIBS (lista de bibliotecas que deben buscarse), y
     R_VSIZE y R_NSIZE que describiremos despu´s.    e
  • A continuaci´n, R busca el perfil de inicio global (para todos los usuarios) salvo que
                   o
     se haya especificado la opci´n ‘--no-site-file’. El nombre de este archivo se toma
                                   o
     del valor de la variable de entorno R_PROFILE. Si esta variable no existe, el valor
     predeterminado es ‘$R_HOME/etc/Rprofile’.
  • Una vez acabado el paso anterior, si no se ha especificado la opci´n ‘--no-init-file’,
                                                                         o
     R busca un archivo llamado ‘.Rprofile’ en el directorio actual, y si no lo encuentra
     all´ lo busca en el directorio inicial del usuario. Si encuentra el archivo, lo ejecuta.
        ı,
  • Si existe un archivo llamado ‘.RData’, que contenga una imagen de espacio de trabajo,
     lo utiliza para restaurar el espacio de trabajo, salvo que se haya especificado la opci´n o
     ‘--no-restore’.
  • Por ultimo, si existe una funci´n llamada .First, la ejecuta. (Del mismo modo, si
           ´                           o
     existe una funci´n llamada .Last ser´ ejecutada al finalizar la sesi´n de R) La funci´n
                      o                      a                             o                  o
     puede definirse en los perfiles de inicio o residir en el archivo de imagen ‘.RData’.
    Adem´s de todo lo indicado, existen opciones para controlar la memoria disponible en
          a
una sesi´n de R (Utilice ‘help(Memory)’ para disponer de informaci´n actualizada). R
         o                                                             o
utiliza un modelo de memoria est´tico. Esto es, en el momento de iniciarse, el sistema
                                    a
operativo le reserva una cantidad fija de memoria, que no puede alterarse durante la sesi´n.
                                                                                        o
Por tanto, pudiera ocurrir que no exista memoria suficiente en alg´n momento para realizar
                                                                 u
una acci´n, por ejemplo, para leer un archivo de datos muy grande. Las opciones ‘--nsize’
         o
y ‘--vsize’ (o las variables de entorno R_NSIZE y R_VSIZE) controlan la memoria disponible
para objetos de tama˜os fijo y variable, respectivamente.
                      n
    Las opciones que pueden darse al ejecutar R son las siguientes:
Apendice B: Ejecuci´n de R
                   o                                                                     89



--help
-h          Muestra un peque˜o mensaje de ayuda y termina correctamente.
                            n
--version
            Muestra la informaci´n de la versi´n y termina correctamente.
                                o             o
RHOME       Muestra la trayectoria al “directorio inicial” de R y termina correctamente.
            Salvo la p´gina de ayuda en UNIX y el archivo de ejecuci´n, la instalaci´n de
                      a                                                 o               o
            R pone todos los archivos (ejecutables, bibliotecas, etc.) en este directorio.
--save
--no-save
            Indica si debe salvar la imagen del entorno al terminar la sesi´n. En modo in-
                                                                           o
            teractivo, si no ha especificado ninguna, le preguntar´. En modo no interactivo
                                                                 a
            es obligatorio usar una.
--no-environ
          No lee ning´n archivo para dar valor a las variables de entorno.
                     u
--no-site-file
          No lee el perfil de inicio global al iniciar el programa.
--no-init-file
          No lee el perfil de inicio de usuario al iniciar el programa.
--restore
--no-restore
          Indica si la imagen salvada (archivo ‘.Rdata’ en el directorio en que R se haya
          iniciado) debe ser recuperada o no. El valor predeterminado es recuperarla.
--vanilla
            Combina las opciones ‘--no-save’,         ‘--no-environ’ ‘--no-site-file’,
            ‘--no-init-file’, y ‘--no-restore’.
--no-readline
          Desactiva la edici´n de ´rdenes a trav´s de readline. Esta opci´n suele utilizarse
                            o     o             e                        o
          cuando se ejecuta R desde Emacs utilizando la biblioteca ESS (“Emacs Speaks
          Statistics”). V´ase Apendice C [El editor de ordenes], p´gina 93, para ampliar
                         e                                          a
          esta informaci´n.
                         o
--vsize=N
            Indica la cantidad de memoria utilizada para objetos de tama˜o variable. N
                                                                            n
            debe ser un entero, en cuyo caso la unidad de medida es el octeto o byte, o
            un entero seguido de una letra que indica la unidad de medida en octetos: ‘M’,
            ‘K’, o ‘k’, que corresponden respectivamente a ‘Mega’ (2^20), ‘Kilo’ (2^10) (de
            ordenador), o ‘kilo’decimal (1000).
--nsize=N
            Indica la cantidad de memoria utilizada para objetos de tama˜o fijo. Las con-
                                                                           n
            sideraciones realizadas en el apartado anterior son v´lidas para N.
                                                                 a
--quiet
--silent
-q          No muestra ni el mensaje de copyright ni los mensajes de inicio.
Apendice B: Ejecuci´n de R
                   o                                                                      90



--slave      Ejecuta R con el m´
                               ınimo de salidas posible. Esta opci´n se utiliza con programas
                                                                  o
             que se sirven de R para realizar c´lculos para ellos mismos.
                                               a
--verbose
             Muestra el m´ximo de salidas posible. Adem´s modifica la opci´n verbose a
                          a                               a                o
             TRUE. R utiliza esta opci´n para controlar si debe mostrar mensajes de diag-
                                      o
             n´stico.
              o
--debugger=depurador
-d depurador
           Ejecuta R desde el programa de depuraci´n (debugger) depurador. En este
                                                        o
           caso, si existen otras opciones, se descartan. Cualquier otra opci´n debe darse
                                                                             o
           al iniciar R desde el programa de depuraci´n.
                                                       o
--gui=tipo
             Utiliza tipo como interfaz gr´fico (advierta que esto tambi´n incluye los gr´ficos
                                          a                            e                a
             interactivos). Los valores posibles de tipo son X11 (predeterminado) y GNOME,
             supuesto que GNOME est´ disponible.
                                        e
    La entrada y la salida pueden redirigirse de la manera habitual, utilizando ‘’ and ‘’.
    R CMD permite utilizar varias herramientas que son utiles en conjunci´n con R, pero que
                                                       ´                  o
no est´n dise˜adas para usarlas “directamente”. La forma general es
       a     n
       R CMD orden argumentos
donde orden es el nombre de la herramienta y argumentos son los argumentos que se pasan
a la misma.
    Las herramientas disponibles son:
BATCH        Ejecuta R en modo no interactivo.
COMPILE      Compila archivos para uso con R.
SHLIB        Construye bibliotecas compartidas del sistema operativo para carga din´mica.
                                                                                   a
INSTALL      Instala bibliotecas a˜adidas.
                                  n
REMOVE       Elimina bibliotecas a˜adidas.
                                  n
build        Construye bibliotecas a˜adidas.
                                    n
check        Comprueba bibliotecas a˜adidas.
                                    n
Rdconv       Convierte desde formato Rd a otros formatos, incluyendo html, Nroff, LaTEX,
             texto ASCII sin formato, y formato de documentaci´n S.
                                                                o
Rd2dvi       Convierte desde formato Rd a DVI/PDF.
Rd2txt       Convierte desde formato Rd a texto con formato.
Rdindex      Extrae informaci´n de ´
                             o     ındices de archivos Rd.
Sd2Rd        Convierte desde formato de documentaci´n S a formato Rd.
                                                   o
   Las cinco primeras herramientas (BATCH, COMPILE, SHLIB, INSTALL, y REMOVE) pueden
ejecutarse “directamente” sin la opci´n CMD, esto es, en la forma R orden argumentos.
                                     o
   Utilice la orden
      R CMD herramienta --help
para obtener informaci´n sobre cada una de las herramientas descritas.
                      o
Apendice B: Ejecuci´n de R
                   o                                                                         91



B.2 Ejecuci´n de R en Microsoft Windows
           o
   El procedimiento de inicio en Microsoft Windows es muy similar al de UNIX, pero no
necesariamente id´ntico. Existen dos versiones de R en este sistema operativo: Una basada
                 e
en ventanas MDI, RGui.exe, y otra en ventanas SDI, Rterm.exe, pensada especialmente
para uso no interactivo.
    Muchas opciones controlan lo que ocurre al comenzar y al terminar una sesi´n de R. El
                                                                                    o
mecanismo de inicio (Utilice ‘help(Startup)’ para informaci´n actualizada) es el siguiente.
                                                                 o
Las referencias al “directorio inicial” deben ser aclaradas, ya que ´ste no siempre est´
                                                                          e                    a
definido en Microsoft Windows. Si se ha definido la variable de entorno R_USER, entonces
su valor es el directorio inicial. En caso contrario, lo define la variable de entorno HOME; y si
tampoco est´ definida, lo har´n las variables HOMEDRIVE y HOMEPATH (que normalmente est´n
              a                a                                                             a
definidas en Windows NT). Si ninguna de las variables mencionadas existe, el directorio
inicial ser´ el directorio de trabajo.
           a
 • Salvo que se especifique la opci´n ‘--no-environ’, R busca el archivo ‘.Renviron’ en
                                    o
   el directorio actual; si no lo encuentra, busca el archivo ‘.Renviron’ en el directorio
   inicial del usuario. Si encuentra alguno de estos archivos, se ejecuta (como si se lo diese
   como argumento a la funci´n source dentro de R) para dar valores a las variables de
                                o
   entorno. Se asigna valor a las variables en l´
                                                ıneas de la forma ‘nombre=valor’. Algunas
   de estas variables son
   R_PAPERSIZE (tama˜o predeterminado del papel),
                         n
   R_PRIMTCMD (orden predeterminada de impresi´n),  o
   R_LIBS (lista de bibliotecas que deben buscarse), y
   R_VSIZE y R_NSIZE que describiremos despu´s.   e
   Las variables de entorno tambi´n pueden indicarse como parejas de la forma ‘nom-
                                     e
   bre=valor’ en la propia l´ınea de ´rdenes.
                                     o
 • A continuaci´n, R busca el archivo de perfil de inicio en el ordenador, salvo que se
                 o
   indique la opci´n ‘--no-site-file’. El nombre del archivo se almacena en la variable
                   o
   de entorno R_PROFILE y si no existe se toma ‘$R_HOME/etc/Rprofile’.
 • Si no se ha indicado ‘--no-init-file’, R busca el archivo ‘.Rprofile’ en el directorio
   actual o en el de inicio del usuario y ejecuta las ´rdenes en ´l contenidas.
                                                      o           e
 • A continuaci´n carga el archivo de imagen ‘.RData’, si existe, salvo que se indique la
                 o
   opci´n ‘--no-restore’.
        o
 • Si existe la funci´n .First, la ejecuta. Esta funci´n, as´ como la funci´n .Last que se
                     o                                  o    ı               o
   ejecuta la finalizar la sesi´n de R, pueden definirse en los perfiles de inicio adecuados,
                              o
   o residir en el archivo ‘.RData’.
    Adem´s de todo lo indicado, existen opciones para controlar la memoria disponible en
          a
una sesi´n de R (Utilice ‘help(Memory)’ para disponer de informaci´n actualizada). R
         o                                                             o
utiliza un modelo de memoria est´tico. Esto es, en el momento de iniciarse, el sistema
                                    a
operativo le reserva una cantidad fija de memoria, que no puede alterarse durante la sesi´n.
                                                                                        o
Por tanto, pudiera ocurrir que no exista memoria suficiente en alg´n momento para realizar
                                                                 u
una acci´n, por ejemplo, para leer un archivo de datos muy grande. Las opciones ‘--nsize’
         o
y ‘--vsize’ (o las variables de entorno R_NSIZE y R_VSIZE) controlan la memoria disponible
para objetos de tama˜os fijo y variable, respectivamente.
                      n
Apendice B: Ejecuci´n de R
                   o                                                                   92



   Las opciones que pueden darse al ejecutar R en Microsoft Windows son las siguientes:
--version
            Muestra la informaci´n de la versi´n y termina correctamente.
                                o             o
--mdi
--sdi
--no-mdi    Inidica si Rgui se comportar´ como un programa MDI (predeterminado), donde
                                        a
            cada nueva ventana est´ contenida dentro de la ventana principal, o como un
                                    a
            programa SDI, donde cada ventana aparece de modo independiente en el es-
            critorio.
--save
--no-save
            Indica si debe salvar la imagen del entorno al terminar la sesi´n. En modo in-
                                                                           o
            teractivo, si no ha especificado ninguna, le preguntar´. En modo no interactivo
                                                                 a
            es obligatorio usar una.
--restore
--no-restore
          Indica si la imagen salvada (archivo ‘.Rdata’ en el directorio en que R se haya
          iniciado) debe ser recuperada o no. El valor predeterminado es recuperarla.
--no-site-file
          No lee el perfil de inicio global al iniciar el programa.
--no-init-file
          No lee el archivo ‘.Rprofile’ del directorio del usuario (perfil de inicio de
          usuario) al iniciar el programa.
--no-environ
          No lee el archivo ‘.Renviron’.
--vanilla
            Combina las opciones --no-save,            --no-restore,    --no-site-file,
            --no-init-file y --no-environ.
-q
--quiet
--silent    No muestra el mensaje de inicio.
--slave     Ejecuta R con el m´
                              ınimo de salidas posible.
--verbose
            Muestra el m´ximo de salidas posible.
                        a
--ess       Prepara Rterm para uso en modo R-inferior en ESS.
Apendice C: El editor de ´rdenes
                         o                                                                   93



Apendice C El editor de ´rdenes
                        o


C.1 Preliminares
   Si la biblioteca de GNU, ‘readline’, est´ disponible cuando se compila R en UNIX, se
                                             a
puede utilizar un editor interno de l´
                                     ıneas de ´rdenes que permite recuperar, editar y volver
                                              o
a ejecutar las ´rdenes utilizadas previamente.
               o
    Este editor puede desactivarse (lo que permite utilizar ESS1 ) dando la opci´n de inicio
                                                                                o
‘--no-readline’.
   La versi´n de Microsoft Windows dispone de un editor m´s sencillo. Vea la opci´n
           o                                             a                       o
‘Console’ en el men´ ‘Help’.
                   u
   Cuando use R con las posibilidades de readline, estar´n disponibles las opciones que
                                                        a
posteriormente se indican.
     Tenga en cuenta las siguientes convenciones tipogr´ficas usuales:
                                                       a
    Muchas de las ´rdenes utilizan caracteres caracteres Control y Meta. Los caracteres
                    o
Control, tales como Control-m, se obtienen pulsando la tecla CTRL y, sin soltarla, pulsando
la tecla m , y en la tabla los escribiremos como C-m. Los caracteres Meta, tales como Meta-
b, se obtienen pulsando la tecla META y, despu´s de soltarla, pulsando la tecla b , y en la
                                                  e
tabla los escribiremos como M-b. Si su teclado no tiene la tecla META , puede obtenerlos
mediante una secuencia de dos caracteres que comienza con ESC. Esto es, para obtener M-b,
deber´ escribir ESC b . Estas secuencias ESC tambi´n puede utilizarlas aunque su teclado s´
      a                                             e                                     ı
disponga de la tecla META . Debe tener en cuenta que en los caracteres Meta se distingue
entre may´sculas y min´sculas, por lo que puede que sea distinto el resultado si se pulsa
           u              u
M-b o M-B.


C.2 Edici´n de acciones
         o
   R conserva un historial de las ´rdenes que se teclean, incluyendo las l´
                                    o                                          ıneas err´neas,
                                                                                        o
lo que permite recuperar las l´ ıneas del historial, modificarlas si es necesario, y volver a
ejecutarlas como nuevas ´rdenes. Si el estilo de edici´n de ´rdenes es emacs cualquier
                          o                               o      o
car´cter que teclee se inserta en la orden que se est´ editando, desplazando los caracteres
   a                                                   a
que est´n a la derecha del cursor. En el estilo vi el modo de inserci´n de caracteres se inicia
       e                                                             o
con M-i o M-a, y se finaliza con ESC .
     Cuando pulse la tecla   RET   , la orden completa ser´ ejecutada.
                                                          a
     Otras acciones posibles de edici´n se resumen en la tabla siguiente.
                                     o


C.3 Resumen del editor de l´
                           ıneas de ´rdenes
                                    o

 1
     Corresponde al acr´nimo del editor de textos, ‘Emacs Speaks Statistics’;
                       o                                                        vea la direcci´n
                                                                                              o
     http://ess.stat.wisc.edu/
Apendice C: El editor de ´rdenes
                         o                                                              94



Recuperaci´n de ´rdenes y movimiento vertical
          o     o
C-p         Recupera la orden anterior (retrocede en el historial).
C-n         Recupera la orden posterior (avanza en el historial).
C-r text    Recupera la ultima orden que contenga la cadena texto.
                        ´
   En muchos terminales, es posible utilizar las teclas de flecha hacia arriba y flecha hacia
abajo, respectivamente, en vez de C-p y C-n.

Movimiento horizontal del cursor
C-a         Va al principio de la l´
                                   ınea.
C-e         Va al final de la l´
                              ınea.
M-b         Retrocede una palabra.
M-f         Avanza una palabra.
C-b         Retrocede un car´cter.
                            a
C-f         Avanza un car´cter.
                         a
   En muchos terminales, es posible utilizar las teclas de flecha hacia la izquierda y flecha
hacia la derecha, respectivamente, en vez de C-b y C-f.

Edici´n
     o
text        Inserta texto en el cursor.
C-f text    A˜ade texto tras el cursor.
             n
DEL         Borra el car´cter a la izquierda del cursor.
                        a
C-d         Borra el car´cter bajo el cursor.
                        a
M-d         Borra el resto de la palabra bajo el cursor, y la guarda.
C-k         Borra el resto de la l´
                                  ınea desde el cursor, y lo guarda.
C-y         Inserta el ultimo texto guardado.
                       ´
C-t         Intercambia el car´cter bajo el cursor con el siguiente.
                              a
M-l         Cambia el resto de la palabra a min´sculas.
                                               u
M-c         Cambia el resto de la palabra a may´sculas.
                                               u
RET         Vuelve a ejecutar la l´
                                  ınea.
   Al pulsar   RET   , se termina la edici´n de la l´
                                          o         ınea.
Apendice D: ´
            Indice de funciones y variables                                                                                                                                          95



Apendice D ´
           Indice de funciones y variables

!                                                                                            +
! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
                                                                                             + ............................................ 8
!= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10


%                                                                                            
%*% . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
%o% . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23      . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
                                                                                             = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44    ^
                                                                                             ^ ............................................ 8
*
* ............................................ 8
                                                                                             
-
                                                                                              . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
- ............................................ 8
                                                                                             = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
                                                                                             - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
.First . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
.Last . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
                                                                                             A
                                                                                             abline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .      73
/                                                                                            ace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   68
/ ............................................ 8                                             add1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    61
                                                                                             anova . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59,         60
                                                                                             aov . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   60
:
                                                                                             aperm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .     24
: ............................................ 9
                                                                                             array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .     22
                                                                                             as.data.frame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .               30
=                                                                                            as.vector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .           27
== . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10    attach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .      30
                                                                                             attr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    15
?                                                                                            attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .            15
? ............................................ 4                                             avas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    68
                                                                                             axis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    73

|
| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
|| . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44    B
                                                                                             boxplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
~                                                                                            break . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
~ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56   bruto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Apendice D: ´
            Indice de funciones y variables                                                                                                                                           96



C                                                                                            G
c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7, 10, 27, 29          glm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
cbind . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
coef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
                                                                                             H
coefficients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59                help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
contour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71         hist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38, 71
Contrastes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
coplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
cos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
                                                                                             I
crossprod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22, 24               identify. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .          75
cut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27     if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   44
                                                                                             ifelse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .       44
                                                                                             image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .      71
D                                                                                            is.na . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .      10
                                                                                             is.nan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .       10
data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    35
data.entry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .            36
data.frame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .            29   K
density . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .       38   ks.test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
detach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .      30
dev.list. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .         82
dev.next. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .         82   L
dev.off . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .       82   legend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
dev.prev. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .         82   length . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8, 14
dev.set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .       82   levels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
deviance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .         59   lines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
diag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    24   list . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
dim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   20   lm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
dotplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .       71   lme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
drop1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .     61   locator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
                                                                                             loess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67, 68
                                                                                             log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
                                                                                             lqs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
E                                                                                            lsfit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
ecdf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
eigen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44      M
Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60       mars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
exp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8    max . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
                                                                                             mean . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
                                                                                             min . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
F                                                                                            mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

F ............................................ 9
factor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17        N
FALSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9      NA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   10
fivenum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38         NaN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .    10
for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44     ncol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .     24
formula . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59         next . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .     45
function. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46           nlm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65, 66,          67
Apendice D: ´
            Indice de funciones y variables                                                                                                                                        97



nlme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67       S
nrow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24       scan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
                                                                                              search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
                                                                                              seq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
O                                                                                             shapiro.test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8       sin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
ordered . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18          sink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
                                                                                              sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
outer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
                                                                                              source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
                                                                                              split . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
                                                                                              sqrt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
P                                                                                             stem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
pairs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70        step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59, 61
par . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76      sum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
paste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10        summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38, 59
persp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71        svd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
pictex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59, 69           T
pmax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
                                                                                              t . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
pmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
                                                                                              T ............................................ 9
points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
                                                                                              t.test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
polygon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73          table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22, 27
postscript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81               tan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
predict . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59          tapply . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
print . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59        text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
prod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8      title . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
                                                                                              tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
                                                                                              TRUE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Q
qqline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39,           71   U
qqnorm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39,           71   unclass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
qqplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .       71   update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
qr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .   26

                                                                                              V
R                                                                                             var . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
range . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8       var.test. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
                                                                                              vector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
rbind . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
read.fwf. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
read.table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33               W
rep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9     while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
repeat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45         wilcox.test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
resid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
residuals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
rlm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68      X
rm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6    X11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Apendice E: ´
            Indice de conceptos                                                                                                                                           98



Apendice E ´
           Indice de conceptos

A                                                                                       G
Acceso a datos internos . . . . . . . . . . . . . . . . . . . . . . 35                  Gr´ficos cuantil-cuantil . . . . . . . . . . . . . . . . . . . . . . . 39
                                                                                          a
Actualizaci´n de modelos ajustados . . . . . . . . . . . 61
            o                                                                           Gr´ficos din´micos . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
                                                                                          a        a
Ajuste por m´   ınimos cuadrados . . . . . . . . . . . . . . . . 25
´
Ambito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
An´lisis de varianza . . . . . . . . . . . . . . . . . . . . . . . . . . 60
   a
Argumentos con nombre. . . . . . . . . . . . . . . . . . . . . . 47
                                                                                        H
Asignaci´n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
         o                                                                              Hojas de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Atributos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Autovalores y autovectores . . . . . . . . . . . . . . . . . . . 25
                                                                                        I
B                                                                                       Indexaci´n de vectores . . . . . . . . . . . . . . . . . . . . . . . 11
                                                                                                o
Bibliotecas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2     Indexaci´n de y mediante variables indexadas . . 20
                                                                                                o


C                                                                                       K
Ciclos y ejecuci´n condicional . . . . . . . . . . . . . . . . .
                       o                                                           44
                                                                                        Kolmogorov-Smirnov, contraste de . . . . . . . . . . . . 40
Clases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15,   54
C´mo definir un operador binario . . . . . . . . . . . . .
 o                                                                                 47
C´mo importar datos . . . . . . . . . . . . . . . . . . . . . . . .
 o                                                                                 36
Concatenaci´n de listas . . . . . . . . . . . . . . . . . . . . . .
                 o                                                                 29   L
Contrastes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .     57   Lectura de datos desde un archivo . . . . . . . . . . . . 33
Contrastes de una y de dos muestras . . . . . . . . . .                            41   Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Controladores de dispositivos gr´ficos . . . . . . . . .
                                                      a                            81


D                                                                                       M
Descomposici´n en valores singulares . . . . . . . . . .
             o                                                                     25   M´xima verosimilitud . . . . . . . . . . . . . . . . . . . . . . . .
                                                                                         a                                                                                 67
Descomposici´n QR . . . . . . . . . . . . . . . . . . . . . . . . . .
             o                                                                     25   M´
                                                                                         ınimos cuadrados no lineales . . . . . . . . . . . . . . . .                      65
Determinantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .        25   Modelos aditivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . .         68
Diagrama de cajas . . . . . . . . . . . . . . . . . . . . . . . . . . .            41   Modelos basados en ´rboles . . . . . . . . . . . . . . . . . . .
                                                                                                                a                                                          68
Distribuciones de probabilidad . . . . . . . . . . . . . . . .                     37   Modelos estad´ısticos . . . . . . . . . . . . . . . . . . . . . . . . .            55
                                                                                        Modelos lineales . . . . . . . . . . . . . . . . . . . . . . . . . . . . .         58
                                                                                        Modelos lineales generalizados . . . . . . . . . . . . . . . .                     61
E                                                                                       Modelos mezclados. . . . . . . . . . . . . . . . . . . . . . . . . . .             67
Eliminar objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Escritura de funciones . . . . . . . . . . . . . . . . . . . . . . . . 46
Espacio de trabajo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Estimaci´n de la densidad . . . . . . . . . . . . . . . . . . . . 38
         o
                                                                                        O
Expresiones agrupadas . . . . . . . . . . . . . . . . . . . . . . . 44                  Objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
                                                                                        ´
                                                                                        Ordenes de control . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
                                                                                        Orientaci´n a objetos . . . . . . . . . . . . . . . . . . . . . . . . 54
                                                                                                  o
F
Factores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17, 58
Factores ordinales . . . . . . . . . . . . . . . . . . . . . . . . 17, 58               P
Familias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
F´rmulas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
 o                                                                                      Par´metros gr´ficos . . . . . . . . . . . . . . . . . . . . . . . . . .
                                                                                           a           a                                                                   76
Funci´n de distribuci´n emp´
     o                          o            ırica . . . . . . . . . . . . . . 39       Personalizaci´n del entorno . . . . . . . . . . . . . . . . . . .
                                                                                                     o                                                                     53
Funciones gen´ricas . . . . . . . . . . . . . . . . . . . . . . . . . . 54
                  e                                                                     Producto exterior de variables indexadas . . . . . .                               23
Funciones y operadores aritm´ticos . . . . . . . . . . . . . 8
                                               e                                        Producto matricial . . . . . . . . . . . . . . . . . . . . . . . . . . .           24
Apendice E: ´
            Indice de conceptos                                                                                                                                 99



R                                                                              Tabulaci´n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
                                                                                         o
Redirecci´n de la entrada y la salida . . . . . . . . . . . 5
         o                                                                     Traspuesta generalizada de una variable indexada
Regla de reciclado . . . . . . . . . . . . . . . . . . . . . . . . . 8, 22         . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Regresi´n con aproximaci´n local . . . . . . . . . . . . . 67
       o                        o                                              Trayectoria de b´squeda. . . . . . . . . . . . . . . . . . . . . . 31
                                                                                                        u
Regresi´n robusta. . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
       o
                                                                               V
S                                                                              Valores faltantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Shapiro-Wilk, contraste de . . . . . . . . . . . . . . . . . . . 40            Valores predeterminados . . . . . . . . . . . . . . . . . . . . . 47
Student, contraste t de . . . . . . . . . . . . . . . . . . . . . . . 41       Vectores de caracteres . . . . . . . . . . . . . . . . . . . . . . . . 10
Sucesiones regulares . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
                                                                               W
T                                                                              Wilcoxon, contraste de . . . . . . . . . . . . . . . . . . . . . . . 42
Apendice F: Referencias                                                               100



Apendice F Referencias
   D. M. Bates and D. G. Watts (1988), Nonlinear Regression Analysis and Its Applications.
John Wiley  Sons, New York.
   Richard A. Becker, John M. Chambers and Allan R. Wilks (1988), The New S Language.
Chapman  Hall, New York. This book is often called the “Blue Book ”.
   John M. Chambers and Trevor J. Hastie eds. (1992), Statistical Models in S. Chapman
 Hall, New York. This is also called the “White Book ”.
   Annette J. Dobson (1990), An Introduction to Generalized Linear Models, Chapman and
Hall, London.
   Peter McCullagh and John A. Nelder (1989), Generalized Linear Models. Second edition,
Chapman and Hall, London.
   John A. Rice (1995), Mathematical Statistics and Data Analysis. Second edition.
Duxbury Press, Belmont, CA.
   S. D. Silvey (1970), Statistical Inference. Penguin, London.

Más contenido relacionado

PDF
Diseño canónico control automatico
PDF
Tutorial de maxima
PDF
Manual excitador-vaca
PDF
Manual Scilab
PDF
Fisica y Quimica - Mecanica cuantica I
PDF
Curso programación y_métodos_numéricos_linux
Diseño canónico control automatico
Tutorial de maxima
Manual excitador-vaca
Manual Scilab
Fisica y Quimica - Mecanica cuantica I
Curso programación y_métodos_numéricos_linux

La actualidad más candente (18)

PDF
Documentacion age
PDF
Metodologia Hefesto - Business Intelligence
PDF
PDF
Datawarehouse hefesto
PDF
PDF
Psu Matematica
PDF
Gulp 0.11
PDF
Combinación de acciones
PDF
39702397 matematicas-discretas
PDF
43392462 analisis-matematico-ii-derivacion-de-funciones-de-varias-variables
PDF
Algebra lineal
PDF
Penduloinvertido
PDF
Matematicas en ingenieria_con_matlab_y_o
PDF
Java a tope
PDF
Algoritmos
PDF
Guia de matematicas
PDF
Calculo diferencial
PDF
Matematica Discreta
Documentacion age
Metodologia Hefesto - Business Intelligence
Datawarehouse hefesto
Psu Matematica
Gulp 0.11
Combinación de acciones
39702397 matematicas-discretas
43392462 analisis-matematico-ii-derivacion-de-funciones-de-varias-variables
Algebra lineal
Penduloinvertido
Matematicas en ingenieria_con_matlab_y_o
Java a tope
Algoritmos
Guia de matematicas
Calculo diferencial
Matematica Discreta
Publicidad

Destacado (20)

PPT
Amir E Bruno
PPT
La web 2 0
PDF
La revista 147 final
PPTX
DXN VENEZUELA
PPT
Manejo de y para la web
PPT
Mesa 2.-Ahome
PPT
Playstation 3 (Ps3) Victor
PDF
Catalogo fotografia - I Concurso Fotografia Olhão - Centro Histórico
PPS
As Fotografias Mais Porcas
PPT
Isis Delbene - França
PDF
revisa enfoque 150
PPT
ApresentaçãO Nathan
PPT
Eu E Meus Amigos!!!!!
PPT
PPT
Relacionamento & Account Control
DOC
Parte de prensa
PPT
ApresentaçãO Naruto
PDF
TaviraBikeRace2013_2h_temposintermedios
PDF
Ferramentas Colaborativas
Amir E Bruno
La web 2 0
La revista 147 final
DXN VENEZUELA
Manejo de y para la web
Mesa 2.-Ahome
Playstation 3 (Ps3) Victor
Catalogo fotografia - I Concurso Fotografia Olhão - Centro Histórico
As Fotografias Mais Porcas
Isis Delbene - França
revisa enfoque 150
ApresentaçãO Nathan
Eu E Meus Amigos!!!!!
Relacionamento & Account Control
Parte de prensa
ApresentaçãO Naruto
TaviraBikeRace2013_2h_temposintermedios
Ferramentas Colaborativas
Publicidad

Similar a R manual (20)

PDF
Introducción al r
PDF
Vba excel numericos
PDF
Vba excel mnumericos
PDF
Vba excel mnumericos1
PDF
ApuntesC++.pdf
PDF
PDF
MANUAL DE LENGUAJE C
PDF
52811100 manual-sp
PDF
Linux benchmarking como
PDF
Practica5 bash prog-intro-como
PDF
Introduccion al lenguaje c
PDF
Algoritmos programacion-python
PDF
Algoritmos y programacion_i_-_con_lengua
PDF
Algoritmos programacion-python
PDF
Grafi3
PDF
El Arte de Programar en R
PDF
El arte de programar en r
PDF
Santana el arte_de_programar_en_r
PDF
Tutorial xhtml y css
PDF
Introduccion poo con_java
Introducción al r
Vba excel numericos
Vba excel mnumericos
Vba excel mnumericos1
ApuntesC++.pdf
MANUAL DE LENGUAJE C
52811100 manual-sp
Linux benchmarking como
Practica5 bash prog-intro-como
Introduccion al lenguaje c
Algoritmos programacion-python
Algoritmos y programacion_i_-_con_lengua
Algoritmos programacion-python
Grafi3
El Arte de Programar en R
El arte de programar en r
Santana el arte_de_programar_en_r
Tutorial xhtml y css
Introduccion poo con_java

R manual

  • 1. Introducci´n a R o Notas sobre R: Un entorno de programaci´n para An´lisis de Datos y Gr´ficos o a a Versi´n 1.0.1 (2000-05-16) o R Development Core Team
  • 2. Copyright c 1990, 1992 W. Venables Copyright c 1997, R. Gentleman & R. Ihaka Copyright c 1997, 1998 M. M¨chlera Copyright c 2000, Andr´s Gonz´lez y Silvia Gonz´lez e a a Copyright c 1999, 2000 R Development Core Team Se autoriza la realizaci´n y distribuci´n de copias literales de este manual, siempre y cuando o o las advertencias del copyright y de este permiso se conserven en todas las copias. Se autoriza la realizaci^^f3n y distribuci´n de copias modificadas de este manual, en las mis- o mas condiciones de las copias literales, siempre y cuando la totalidad del trabajo resultante se distribuya bajo los t´rminos de una advertencia de permiso id^^e9ntica a esta. e Se autoriza la realizaci^^f3n y distribuci´n de traducciones de este manual a otros idiomas, o en las mismas condiciones de las copias modificadas, siempre y cuando la traducci´n de la o advertencia de este permiso sea aprobada por el Equipo Central de Desarrollo de R.
  • 3. i ´ Indice General Pr´logo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 o 1 Introducci´n y Preliminares . . . . . . . . . . . . . . . . 2 o 1.1 El entorno R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 Programas relacionados. Documentaci´n . . . . . . . . . . . . . . . . . . o 2 1.3 Estad´ıstica con R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.4 R en un sistema de ventanas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.5 Utilizaci´n interactiva de R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 3 1.6 Una sesi´n inicial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 4 1.7 Ayuda sobre funciones y capacidades . . . . . . . . . . . . . . . . . . . . . 4 1.8 ´ Ordenes de R. May´sculas y min´sculas. . . . . . . . . . . . . . . . . . . u u 5 1.9 Recuperaci´n y correcci´n de ´rdenes previas . . . . . . . . . . . . . . o o o 5 1.10 Ejecuci´n de ´rdenes desde un archivo y redirecci´n de la o o o salida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.11 Almacenamiento y eliminaci´n de objetos . . . . . . . . . . . . . . . . o 6 2 C´lculos sencillos. N´ meros y vectores . . . . . . 7 a u 2.1 Vectores (num´ricos). Asignaci´n . . . . . . . . . . . . . . . . . . . . . . . . . 7 e o 2.2 Aritm´tica vectorial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 e 2.3 Generaci´n de sucesiones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 o 2.4 Vectores l´gicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 o 2.5 Valores faltantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.6 Vectores de caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.7 Vectores de ´ ındices. Selecci´n y modificaci´n de subvectores o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.8 Clases de objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3 Objetos: Modos y atributos . . . . . . . . . . . . . . . 14 3.1 Atributos intr´ ınsecos: modo y longitud . . . . . . . . . . . . . . . . . . . 14 3.2 Modificaci´n de la longitud de un objeto . . . . . . . . . . . . . . . . . o 15 3.3 Obtenci´n y modificaci´n de atributos . . . . . . . . . . . . . . . . . . . o o 15 3.4 Clases de objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 4 Factores Nominales y Ordinales. . . . . . . . . . . . 17 4.1 Un ejemplo espec´ ıfico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 4.2 La funci´n tapply(). Variables desastradas (ragged arrays) o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 4.3 Factores ordinales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
  • 4. ii 5 Variables indexadas. Matrices . . . . . . . . . . . . . 20 5.1 Variables indexadas (Arrays) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 5.2 Elementos de una variable indexada . . . . . . . . . . . . . . . . . . . . . 20 5.3 Uso de variables indexadas como ´ ındices . . . . . . . . . . . . . . . . . 21 5.4 La funci´n array() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 o 5.4.1 Operaciones con variables indexadas y vectores. Reciclado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 5.5 Producto exterior de dos variables indexadas . . . . . . . . . . . . . 23 Ejemplo: Distribuci´n del determinante de una matriz de o d´ıgitos de 2 × 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 5.6 Traspuesta generalizada de una variable indexada . . . . . . . . . 24 5.7 Operaciones con matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 5.7.1 Producto matricial. Inversa de una matriz. Resoluci´n de sistemas lineales . . . . . . . . . . . . . . . . . . . . 24 o 5.7.2 Autovalores y autovectores . . . . . . . . . . . . . . . . . . . . . 25 5.7.3 Descomposici´n en valores singulares. Determinantes o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 5.7.4 Ajuste por m´ ınimos cuadrados. Descomposici´n QR o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 5.8 Submatrices. Funciones cbind() y rbind(). . . . . . . . . . . . . . 26 5.9 La funci´n de concatenaci´n, c(), con variables indexadas o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 5.10 Tablas de frecuencias a partir de factores. . . . . . . . . . . . . . . . 27 6 Listas y hojas de datos . . . . . . . . . . . . . . . . . . . . 28 6.1 Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 6.2 Construcci´n y modificaci´n de listas . . . . . . . . . . . . . . . . . . . . o o 29 6.2.1 Concatenaci´n de listas . . . . . . . . . . . . . . . . . . . . . . . . o 29 6.3 Hojas de datos (Data frames) . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 6.3.1 Construcci´n de hojas de datos . . . . . . . . . . . . . . . . . o 29 6.3.2 Funciones attach() y detach() . . . . . . . . . . . . . . . . 30 6.3.3 Trabajo con hojas de datos . . . . . . . . . . . . . . . . . . . . . 31 6.3.4 Conexi´n de listas arbitrarias . . . . . . . . . . . . . . . . . . . o 31 6.3.5 Gesti´n de la trayectoria de b´squeda . . . . . . . . . . . o u 31 7 Lectura de datos de un archivo . . . . . . . . . . . . 33 7.1 La funci´n read.table() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 33 7.2 La funci´n scan() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 34 7.3 Acceso a datos internos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 7.3.1 Acceso a datos de una biblioteca . . . . . . . . . . . . . . . . 35 7.4 Edici´n de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 36 7.5 C´mo importar datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . o 36 8 Distribuciones probabil´ ısticas . . . . . . . . . . . . . . 37 8.1 Tablas estad´ ısticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 8.2 Estudio de la distribuci´n de unos datos . . . . . . . . . . . . . . . . . 38 o 8.3 Contrastes de una y de dos muestras . . . . . . . . . . . . . . . . . . . . . 41
  • 5. iii 9 Ciclos. Ejecuci´n condicional . . . . . . . . . . . . . . 44 o 9.1 Expresiones agrupadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 ´ 9.2 Ordenes de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 9.2.1 Ejecuci´n condicional: la orden if . . . . . . . . . . . . . . o 44 ´ 9.2.2 Ciclos: Ordenes for, repeat y while . . . . . . . . . . . 44 10 Escritura de nuevas funciones . . . . . . . . . . . . 46 10.1 Ejemplos elementales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 10.2 C´mo definir un operador binario. . . . . . . . . . . . . . . . . . . . . . . 47 o 10.3 Argumentos con nombre. Valores predeterminados . . . . . . . 47 10.4 El argumento ‘...’ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 10.5 Asignaciones dentro de una funci´n . . . . . . . . . . . . . . . . . . . . . 48 o 10.6 Ejemplos m´s complejos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 a 10.6.1 Factores de eficiencia en dise˜o en bloques . . . . . . 49 n 10.6.2 C´mo eliminar los nombres al imprimir una variable o indexada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 10.6.3 Integraci´n num´rica recursiva . . . . . . . . . . . . . . . . . 50 o e ´ 10.7 Ambito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 10.8 Personalizaci´n del entorno . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 o 10.9 Clases. Funciones gen´ricas. Orientaci´n a objetos . . . . . . . 54 e o 11 Modelos estad´ ısticos en R . . . . . . . . . . . . . . . . 55 11.1 Definici´n de modelos estad´ o ısticos. F´rmulas . . . . . . . . . . . . 55 o 11.1.1 Contrastes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 11.2 Modelos lineales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 11.3 Funciones gen´ricas de extracci´n de informaci´n del modelo e o o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 11.4 An´lisis de varianza. Comparaci´n de modelos . . . . . . . . . . 60 a o 11.4.1 Tablas ANOVA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 11.5 Actualizaci´n de modelos ajustados . . . . . . . . . . . . . . . . . . . . . 61 o 11.6 Modelos lineales generalizados . . . . . . . . . . . . . . . . . . . . . . . . . . 61 11.6.1 Familias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 11.6.2 La funci´n glm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 o 11.7 Modelos de M´ ınimos cuadrados no lineales y de M´xima a verosimilitud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 11.7.1 M´ ınimos cuadrados . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 11.7.2 M´xima verosimilitud . . . . . . . . . . . . . . . . . . . . . . . . . 67 a 11.8 Algunos modelos no-est´ndar . . . . . . . . . . . . . . . . . . . . . . . . . . 67 a
  • 6. iv 12 Procedimientos gr´ficos . . . . . . . . . . . . . . . . . . 69 a 12.1 Funciones gr´ficas de nivel alto . . . . . . . . . . . . . . . . . . . . . . . . . 69 a 12.1.1 La funci´n plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 o 12.1.2 Representaci´n de datos multivariantes . . . . . . . . . 70 o 12.1.3 Otras representaciones gr´ficas . . . . . . . . . . . . . . . . 70 a 12.1.4 Argumentos de las funciones gr´ficas de nivel alto a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 12.2 Funciones gr´ficas de nivel bajo . . . . . . . . . . . . . . . . . . . . . . . . 72 a 12.2.1 Anotaciones matem´ticas . . . . . . . . . . . . . . . . . . . . . 74 a 12.2.2 Fuentes vectoriales Hershey. . . . . . . . . . . . . . . . . . . . 74 12.3 Funciones gr´ficas interactivas . . . . . . . . . . . . . . . . . . . . . . . . . . 74 a 12.4 Uso de par´metros gr´ficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 a a 12.4.1 Cambios permanentes. La funci´n par() . . . . . . . 76 o 12.4.2 Cambios temporales. Argumentos de las funciones gr´ficas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 a 12.5 Par´metros gr´ficos habituales . . . . . . . . . . . . . . . . . . . . . . . . . 76 a a 12.5.1 Elementos gr´ficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 a 12.5.2 Ejes y marcas de divisi´n. . . . . . . . . . . . . . . . . . . . . . 78 o 12.5.3 M´rgenes de las figuras . . . . . . . . . . . . . . . . . . . . . . . 78 a 12.5.4 Figuras m´ltiples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 u 12.6 Dispositivos gr´ficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 a 12.6.1 Inclusi´n de gr´ficos PostScript en documentos . . 81 o a 12.6.2 Dispositivos gr´ficos m´ltiples . . . . . . . . . . . . . . . . . 82 a u 12.7 Gr´ficos din´micos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 a a Apendice A Primera sesi´n con R . . . . . . . . . . . 84 o Apendice B Ejecuci´n de R . . . . . . . . . . . . . . . . . 88 o B.1 Ejecuci´n de R en UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 o B.2 Ejecuci´n de R en Microsoft Windows . . . . . . . . . . . . . . . . . . . 91 o Apendice C El editor de ´rdenes . . . . . . . . . . . . 93 o C.1 Preliminares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 C.2 Edici´n de acciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 o C.3 Resumen del editor de l´ ıneas de ´rdenes . . . . . . . . . . . . . . . . . 93 o Apendice D ´ Indice de funciones y variables. . . 95 Apendice E ´ Indice de conceptos . . . . . . . . . . . . . 98 Apendice F Referencias . . . . . . . . . . . . . . . . . . . . 100
  • 7. Pr´logo o 1 Pr´logo o Estas notas sobre R est´n escritas a partir de un conjunto de notas que describ´ los a ıan entornos S y S-Plus escritas por Bill Venables y Dave Smith. Hemos realizado un peque˜o n n´mero de cambios para reflejar las diferencias entre R y S. u R es un proyecto vivo y sus capacidades no coinciden totalmente con las de S. En estas notas hemos adoptado la convenci´n de que cualquier caracter´ o ıstica que se vaya a implementar se especifica como tal en el comienzo de la secci´n en que la caracter´ o ıstica es descrita. Los usuarios pueden contribuir al proyecto implementando cualquiera de ellas. Deseamos dar las gracias m´s efusivas a Bill Venables por permitir la distribuci´n de a o esta versi´n modificada de las notas y por ser un defensor de R desde su inicio. o Cualquier comentario o correcci´n ser´n siempre bienvenidos. Dirija cualquier correspon- o a dencia a R-core@r-project.org. Sugerencias al lector La primera relaci´n con R deber´ ser la sesi´n inicial del Apendice A [Ejemplo de sesion], o ıa o p´gina 84. Est´ escrita para que se pueda conseguir cierta familiaridad con el estilo de las a a sesiones de R y para comprobar que coincide con la versi´n actual. o Muchos usuarios eligen R fundamentalmente por sus capacidades gr´ficas. Si ese es su a caso, deber´ leer antes o despu´s el Cap´ ıa e ıtulo 12 [Graficos], p´gina 69, sobre capacidades a gr´ficas y para ello no es necesario esperar a haber asimilado totalmente las secciones a precedentes.
  • 8. Cap´ ıtulo 1: Introducci´n y Preliminares o 2 1 Introducci´n y Preliminares o 1.1 El entorno R R es un conjunto integrado de programas para manipulaci´n de datos, c´lculo y gr´ficos. o a a Entre otras caracter´ ısticas dispone de: • almacenamiento y manipulaci´n efectiva de datos, o • operadores para c´lculo sobre variables indexadas (Arrays), en particular matrices, a • una amplia, coherente e integrada colecci´n de herramientas para an´lisis de datos, o a • posibilidades gr´ficas para an´lisis de datos, que funcionan directamente sobre pantalla a a o impresora, y • un lenguaje de programaci´n bien desarrollado, simple y efectivo, que incluye o condicionales, ciclos, funciones recursivas y posibilidad de entradas y salidas. (Debe destacarse que muchas de las funciones suministradas con el sistema est´n escritas en a el lenguaje R) El t´rmino “entorno” lo caracteriza como un sistema completamente dise˜ado y co- e n herente, antes que como una agregaci´n incremental de herramientas muy espec´ o ıficas e inflexibles, como ocurre frecuentemente con otros programas de an´lisis de datos. a R es en gran parte un veh´ ıculo para el desarrollo de nuevos m´todos de an´lisis interactivo e a de datos. Como tal es muy din´mico y las diferentes versiones no siempre son totalmente a compatibles con las anteriores. Algunos usuarios prefieren los cambios debido a los nuevos m´todos y tecnolog´ que los acompa˜an, a otros sin embargo les molesta ya que alg´n c´digo e ıa n u o anterior deja de funcionar. Aunque R puede entenderse como un lenguaje de programaci´n, o los programas escritos en R deben considerarse esencialmente ef´ ımeros. 1.2 Programas relacionados. Documentaci´n o R puede definirse como una nueva implementaci´n del lenguaje S desarrollado en AT&T o por Rick Becker, John Chambers y Allan Wilks. Muchos de los libros y manuales sobre S son utiles para R. ´ La referencia b´sica es The New S Language: A Programming Environment for Data a Analysis and Graphics de Richard A. Becker, John M. Chambers and Allan R. Wilks. Las caracter´ısticas de la versi´n de agosto de 1991 de S est´n recogidas en Statistical Models o a in S editado por John M. Chambers y Trevor J. Hastie. V´ase Apendice F [Referencias], e p´gina 100, para referencias concretas. a 1.3 Estad´ ıstica con R En la introducci´n a R no se ha mencionado la palabra estad´ o ıstica, sin embargo muchas personas utilizan R como un sistema estad´ ıstico. Nosotros preferimos describirlo como un entorno en el que se han implementado muchas t´cnicas estad´ e ısticas, tanto cl´sicas como a modernas. Algunas est´n incluidas en el entorno base de R y otras se acompa˜an en a n forma de bibliotecas (packages). El hecho de distinguir entre ambos conceptos es funda- mentalmente una cuesti´n hist´rica. Junto con R se incluyen ocho bibliotecas (llamadas o o
  • 9. Cap´ ıtulo 1: Introducci´n y Preliminares o 3 bibliotecas est´ndar) pero otras muchas est´n disponibles a trav´s de Internet en CRAN a a e (http://www.r-project.org). Como hemos indicado, muchas t´cnicas estad´ e ısticas, desde las cl´sicas hasta la ultima a ´ metodolog´ est´n disponibles en R, pero los usuarios necesitar´n estar dispuestos a traba- ıa, a a jar un poco para poder encontrarlas. Existe una diferencia fundamental en la filosof´ que subyace en R (o S) y la de otros ıa sistemas estad´ısticos. En R, un an´lisis estad´ a ıstico se realiza en una serie de pasos, con unos resultados intermedios que se van almacenando en objetos, para ser observados o analizados posteriormente, produciendo unas salidas m´ ınimas. Sin embargo en SAS o SPSS se obtendr´ de modo inmediato una salida copiosa para cualquier an´lisis, por ejemplo, ıa a una regresi´n o un an´lisis discriminante. o a 1.4 R en un sistema de ventanas La forma m´s conveniente de usar R es en una estaci´n de trabajo con un sistema de a o ventanas. Estas notas est´n escritas pensando en usuarios de estas caracter´ a ısticas. En particular nos referiremos ocasionalmente a la utilizaci´n de R en un sistema X-window, o aunque normalmente se pueden aplicar a cualquier implementaci´n del entorno R. o Muchos usuarios encontrar´n necesario interactuar directamente con el sistema opera- a tivo de su ordenador de vez en cuando. En estas notas se trata fundamentalmente de la interacci´n con el sistema operativo UNIX. Si utiliza R bajo Microsoft Windows necesitar´ o a realizar algunos peque˜os cambios. n El ajuste del programa para obtener el m´ximo rendimiento de las cualidades parame- a trizables de R es una tarea interesante aunque tediosa y no se considerar´ en estas notas. a Si tiene dificultades busque a un experto cercano a usted. 1.5 Utilizaci´n interactiva de R o Cuando R espera la entrada de ´rdenes, presenta un s´ o ımbolo para indicarlo. El s´ ımbolo predeterminado es ‘>’, que en UNIX puede coincidir con el s´ ımbolo del sistema, por lo que puede parecer que no sucede nada. Si ese es su caso, sepa que es posible modificar este s´ ımbolo en R. En estas notas supondremos que el s´ ımbolo de UNIX es ‘$’. Para utilizar R bajo UNIX por primera vez, el procedimiento recomendado es el siguiente: 1. Cree un subdirectorio, por ejemplo ‘trabajo’, en el que almacenar los archivos de datos ´ que desee analizar mediante R. Este ser´ el directorio de trabajo cada vez que utilice a R para este problema concreto. $ mkdir trabajo $ cd trabajo 2. Inicie R con la orden $ R 3. Ahora puede escribir ´rdenes para R (como se hace m´s adelante). o a 4. Para salir de R la orden es > q()
  • 10. Cap´ ıtulo 1: Introducci´n y Preliminares o 4 R preguntar´ si desea salvar los datos de esta sesi´n de trabajo. Puede responder yes a o (Si), no (No) o cancel (cancelar) pulsando respectivamente las letras y, n o c, en cada uno de cuyos casos, respectivamente, salvar´ los datos antes de terminar, terminar´ a a sin salvar, o volver´ a la sesi´n de R. Los datos que se salvan estar´n disponibles en la a o a siguiente sesi´n de R. o Volver a trabajar con R es sencillo: 1. Haga que ‘trabajo’ sea su directorio de trabajo e inicie el programa como antes: $ cd trabajo $ R 2. D´ las ´rdenes que estime convenientes a R y termine la sesi´n con la orden q(). e o o Bajo Microsoft Windows el procedimiento a seguir es b´sicamente el mismo: Cree una a carpeta o directorio. Ejecute R haciendo doble click en el icono correspondiente. Seleccione New dentro del men´ File para indicar que desea iniciar un nuevo problema (lo que eliminar´ u a todos los objetos definidos dentro del espacio de trabajo) y a continuaci´n seleccione Save o dentro del men´ File para salvar esta imagen en el directorio que acaba de crear. Puede u comenzar ahora los an´lisis y cuando salga de R, ´ste le preguntar´ si desea salvar la imagen a e a en el directorio de trabajo. Para continuar con este an´lisis posteriormente basta con pulsar en el icono de la imagen a salvada, o bien puede ejecutar R y utilizar la opci´n Open dentro del men´ File para o u seleccionar y abrir la imagen salvada. 1.6 Una sesi´n inicial o Se recomienda a los lectores que deseen ver c´mo funciona R que realicen la sesi´n inicial o o dada en el Apendice A [Ejemplo de sesion], p´gina 84. a 1.7 Ayuda sobre funciones y capacidades R contiene una ayuda similar a la orden man de UNIX. Para obtener informaci´n sobre o una funci´n concreta, por ejemplo solve, la orden es o > help(solve) Una forma alternativa es > ?solve Con las funciones especificadas por caracteres especiales, el argumento deber´ ir entre a comillas, para transformarlo en una ”cadena de caracteres”: > help("[[") Podr´ utilizar tanto comillas simples como dobles, y cada una de ellas puede utilizarse a dentro de la otra, como en la frase "Dijo ’Hola y adi´s’ y se march´". En estas notas o o utilizaremos dobles comillas. En muchas versiones de R puede acceder a la ayuda escrita en formato html, escribiendo > help.start() que ejecuta un lector Web (Netscape en UNIX) para leer estas p´ginas como hipertextos. a En UNIX, las peticiones de ayuda posteriores se envir´n al sistema de ayuda basado en a html.
  • 11. Cap´ ıtulo 1: Introducci´n y Preliminares o 5 Las versiones de Microsoft Windows de R poseen otros sistemas de ayuda opcionales. Utilice > ?help para obtener detalles adicionales. ´ 1.8 Ordenes de R. May´ sculas y min´ sculas u u T´cnicamente hablando, R es un lenguaje de expresiones con una sintaxis muy simple. e Consecuente con sus or´ ıgenes en UNIX, distingue entre may´sculas y min´sculas, de tal u u modo que A y a son s´ ımbolos distintos y se referir´n, por tanto, a objetos distintos. a Las ´rdenes elementales consisten en expresiones o en asignaciones. Si una orden consiste o en una expresi´n, se eval´a, se imprime y su valor se pierde. Una asignaci´n, por el contrario, o u o eval´a una expresi´n, no la imprime y guarda su valor en una variable. u o Las ´rdenes se separan mediante punto y coma, (‘;’), o mediante un cambio de l´ o ınea. Si al terminar la l´ınea, la orden no est´ sint´cticamente completa, R mostrar´ un signo de a a a continuaci´n, por ejemplo o + en la l´ ınea siguiente y las sucesivas y continuar´ leyendo hasta que la orden est´ a e sint´cticamente completa. El signo de continuaci´n puede ser modificado f´cilmente. En a o a estas notas omitiremos generalmente el s´ ımbolo de continuaci´n y lo indicaremos mediante o un sangrado. 1.9 Recuperaci´n y correcci´n de ´rdenes previas o o o Bajo muchas versiones de UNIX, R permite recuperar y ejecutar ´rdenes previas. Las o flechas verticales del teclado puede utilizarse para recorrer el historial de ´rdenes. Cuando o haya recuperado una orden con este procedimiento, puede utilizar las flechas horizontales para desplazarse por ella, puede eliminar caracteres con la tecla DEL , o a˜adir nuevos ca- n racteres. M´s adelante se dar´n mayores detalles, v´ase Apendice C [El editor de ordenes], a a e p´gina 93. a La recuperaci´n y edici´n en UNIX pueden ser f´cilmente adaptadas. Para ello debe o o a buscar en el manual de UNIX la informaci´n sobre readline. o Tambi´n puede utilizar el editor de textos emacs para trabajar m´s c´modamente de e a o modo interactivo con R, mediante ESS.1 1.10 Ejecuci´n de ´rdenes desde un archivo y redirecci´n de o o o la salida Si tiene ´rdenes almacenadas en un archivo del sistema operativo, por ejemplo o ´rdenes.R, en el directorio de trabajo, trabajo, puede ejecutarlas dentro de una sesi´n o o de R con la orden > source("´rdenes.R") o En la versi´n de Microsoft Windows, Source tambi´n est´ disponible dentro del men´ o e a u File. Por otra parte, la orden sink, como por ejemplo en 1 Acr´nimo en ingl´s de Emacs Speaks Statistics. o e
  • 12. Cap´ ıtulo 1: Introducci´n y Preliminares o 6 > sink("resultado.lis") enviar´ el resto de la salida, en vez de a la pantalla, al archivo del sistema operativo, a resultado.lis, dentro del directorio de trabajo. La orden > sink() devuelve la salida de nuevo a la pantalla. Si utiliza nombres absolutos de archivo en vez de nombres relativos, los resultados se almacena´n en ellos, independientemente del directorio de trabajo. a 1.11 Almacenamiento y eliminaci´n de objetos o Las entidades que R crea y manipula se denominan objetos. Estos pueden ser de mu- chos tipos: Variables, Variables indexadas, Cadenas de caracteres, Funciones, etc. Incluso estructuras m´s complejas construidas a partir de otras m´s sencillas. a a Durante una sesi´n de trabajo con R los objetos que se crean se almacenan por nombre o (Discutiremos este proceso en la siguiente secci´n). La orden o > objects() se puede utilizar para obtener los nombres de los objetos almacenados en R. Esta funci´n o es equivalente a la funci´n ls(). La colecci´n de objetos almacenados en cada momento se o o denomina espacio de trabajo (workspace). Para eliminar objetos puede utilizar la orden rm, por ejemplo: > rm(x, y, z, tinta, chatarra, temporal, barra) Los objetos creados durante una sesi´n de R pueden almacenarse en un archivo para su o uso posterior. Al finalizar la sesi´n, R pregunta si desea hacerlo. En caso afirmativo todos o los objetos se almacenan en el archivo ‘.RData’2 en el directorio de trabajo. En la siguiente ocasi´n que ejecute R, se recuperar´n los objetos de este archivo as´ como o a ı el historial de ´rdenes. o Es recomendable que utilice un directorio de trabajo diferente para cada problema que analice con R. Es muy com´n crear objetos con los nombres x e y, por ejemplo. Estos u nombres tienen sentido dentro de un an´lisis concreto, pero es muy dif´ dilucidar su a ıcil significado cuando se han realizado varios an´lisis en el mismo directorio. a 2 El punto inicial del nombre de este archivo indica que es invisible en UNIX.
  • 13. Cap´ ıtulo 2: C´lculos sencillos. N´meros y vectores a u 7 2 C´lculos sencillos. N´ meros y vectores a u 2.1 Vectores (num´ricos). Asignaci´n e o R utiliza diferentes estructuras de datos. La estructura m´s simple es el vector, que es a una colecci´n ordenada de n´meros. Para crear un vector, por ejemplo x, consistente en o u cinco n´meros, por ejemplo 10.4, 5.6, 3.1, 6.4 y 21.7, use la orden u > x <- c(10.4, 5.6, 3.1, 6.4, 21.7) Esta es una asignaci´n en la que se utiliza la funci´n c() que, en este contexto, puede o o tener un n´mero arbitrario de vectores como argumento y cuyo valor es el vector obtenido u mediante la concatenaci´n de todos ellos.1 o Un n´mero, por s´ mismo, se considera un vector de longitud uno. u ı Advierta que el operador de asignaci´n, (‘<-’), no es el operador habitual, ‘=’, que se o reserva para otro prop´sito, sino que consiste en dos caracteres, ‘<’ (‘menor que’) y ‘-’ o (‘gui´n’), que obligatoriamente deben ir unidos y ’apuntan’ hacia el objeto que recibe el o valor de la expresi´n.2 o La asignaci´n puede realizarse tambi´n mediante la funci´n assign(). Una forma equi- o e o valente de realizar la asignaci´n anterior es o > assign("x", c(10.4, 5.6, 3.1, 6.4, 21.7)) El operador usual, <-, puede interpretarse como una abreviatura de la funci´n assign(). o Las asignaciones pueden realizarse tambi´n con una flecha apuntando a la derecha, rea- e lizando el cambio obvio en la asignaci´n. Por tanto, tambi´n podr´ escribirse o e ıa > c(10.4, 5.6, 3.1, 6.4, 21.7) -> x Si una expresi´n se utiliza como una orden por s´ misma, su valor se imprime y se pierde 3 . o ı As´ pues, la orden ı > 1/x simplemente imprime los inversos de los cinco valores anteriores en la pantalla (por supuesto, el valor de x no se modifica). Si a continuaci´n hace la asignaci´n o o > y <- c(x, 0, x) crear´ un vector, y, con 11 elementos, consistentes en dos copias de x con un cero entre a ambas. 1 Con argumentos diferentes, por ejemplo listas, la acci´n de c() puede ser diferente. Vea Secci´n 6.2.1 o o [Concatenacion de listas], p´gina 29. a 2 El s´ımbolo de subrayado, ‘_’, es un sin´nimo del operador de asignaci´n, pero no aconsejamos su uti- o o lizaci´n ya que produce un c´digo menos legible. o o 3 Aunque, de hecho, se almacena en .Last.value hasta que se ejecute otra orden.
  • 14. Cap´ ıtulo 2: C´lculos sencillos. N´meros y vectores a u 8 2.2 Aritm´tica vectorial e Los vectores pueden usarse en expresiones aritm´ticas, en cuyo caso las operaciones e se realizan elemento a elemento. Dos vectores que se utilizan en la misma expresi´n no o tienen por qu´ ser de la misma longitud. Si no lo son, el resultado ser´ un vector de la e a longitud del m´s largo, y el m´s corto ser´ reciclado, repiti´ndolo tantas veces como sea a a a e necesario (puede que no un n´mero exacto de veces) hasta que coincida con el m´s largo. u a En particular, cualquier constante ser´ simplemente repetida. De este modo, y siendo x e a y los vectores antes definidos, la orden > v <- 2*x + y + 1 genera un nuevo vector, v, de longitud 11, construido sumando, elemento a elemento, el vector 2*x repetido 2.2 veces, el vector y, y el n´mero 1 repetido 11 veces. u Los operadores aritm´ticos elementales son los habituales +, -, *, / y ^ para elevar e a una potencia. Adem´s est´n disponibles las funciones log, exp, sin, cos, tan, sqrt, a a bien conocidas. Existen muchas m´s funciones, entre otras, las siguientes: max y min que a seleccionan respectivamente el mayor y el menor elemento de un vector; range cuyo valor es el vector de longitud dos, c(min(x), max(x)); length(x) que es el n´mero de elementos u o longitud de x; sum(x) que es la suma de todos los elementos de x; y prod(x) que es el producto de todos ellos. Dos funciones estad´ ısticas son mean(x), que calcula la media, esto es, sum(x)/length(x) y var(x) que calcula la cuasi-varianza, esto es, sum((x-mean(x))^2)/(length(x)-1) Si el argumento de var() es una matriz n × p, el resultado es la matriz de cuasi- covarianzas p×p correspondiente a interpretar las filas como vectores muestrales p-variantes. Para ordenar un vector dispone de la funci´n sort(x) que devuelve un vector del mismo o tama˜o que x con los elementos ordenados en orden creciente. Tambi´n dispone de order() n e y de sort.list(), que produce la permutaci´n del vector que corresponde a la ordenaci´n. o o Advierta que max y min seleccionan el mayor y el menor valor de sus argumentos, incluso aunque estos sean varios vectores. Las funciones paralelas pmax y pmin devuelven un vector (de la misma longitud del argumento m´s largo) que contiene en cada elemento el mayor y a menor elemento de dicha posici´n de entre todos los vectores de entrada. o En la mayor´ de los casos, el usuario no debe preocuparse de si los “n´meros” de un vec- ıa u tor num´rico son enteros, reales o incluso complejos. Los c´lculos se realizan internamente e a como n´meros de doble precisi´n, reales o complejos seg´n el caso. u o u Para trabajar con n´meros complejos, debe indicar expl´ u ıcitamente la parte compleja. As´ ı sqrt(-17) devuelve el resultado NaN y un mensaje de advertencia, pero sqrt(-17+0i) realiza correctamente el c´lculo de la ra´ cuadrada de este n´mero complejo. a ız u
  • 15. Cap´ ıtulo 2: C´lculos sencillos. N´meros y vectores a u 9 2.3 Generaci´n de sucesiones o En R existen varias funciones para generar sucesiones num´ricas. Por ejemplo, 1:30 e es el vector c(1,2, ...,29,30). El operador ’dos puntos’ tiene m´xima prioridad en una a expresi´n, as´ por ejemplo, 2*1:15 es el vector c(2,4,6, ...,28,30). Escriba n <- 10 y o ı, compare las sucesiones 1:n-1 y 1:(n-1). La forma 30:1 permite construir una sucesi´n descendente. o La funci´n seq() permite generar sucesiones m´s complejas. Dispone de cinco argu- o a mentos, aunque no se utilizan todos simult´neamente. Si se dan los dos primeros indican el a comienzo y el final de la sucesi´n, y si son los unicos argumentos, el resultado coincide con o ´ el operador ’dos puntos’, esto es, seq(2,10) coincide con 2:10. Los argumentos de seq(), y de muchas funciones de R, pueden darse adem´s de por a posici´n, por nombre, en cuyo caso, el orden en que aparecen es irrelevante. En esta o funci´n los dos primeros argumentos se pueden dar por nombre mediante from=valor-inicial o y to=valor-final; por tanto seq(1,30), seq(from=1, to=30) y seq(to=30, from=1) son formas equivalentes a 1:30. Los dos siguientes argumentos de seq() son by=valor y length=valor, y especifican el ’paso’ y ’longitud’ de la sucesi´n respectivamente. Si no se suministra ninguno, el valor o predeterminado es by=1 y length se calcula. Por ejemplo > seq(-5, 5, by=.2) -> s3 genera el vector c(-5.0, -4.8, -4.6, ..., 4.6, 4.8, 5.0) y lo almacena en s3 . Simi- larmente > s4 <- seq(length=51, from=-5, by=.2) genera los mismos valores y los almacena en s4. El quinto argumento de esta funci´n es along=vector, y si se usa debe ser el unico o ´ argumento, ya que crea una sucesi´n 1, 2, ..., length(vector), o la sucesi´n vac´ si el o o ıa vector es vac´ (lo que puede ocurrir). ıo Una funci´n relacionada con seq es rep(), que permite duplicar un objeto de formas o diversas. Su forma m´s sencilla es a > s5 <- rep(x, times=5) que coloca cinco copias de x, una tras otra, y las almacena en s5. 2.4 Vectores l´gicos o R no solo maneja vectores num´ricos, sino tambi´n l´gicos. Los elementos de un vector e e o l´gico s´lo pueden tomar dos valores: FALSE (falso) y TRUE (verdadero). Estos valores se o o representan tambi´n por F y T. e Los vectores l´gicos aparecen al utilizar condiciones. Por ejemplo, o > temp <- x > 13 almacena en temp un vector de la misma longitud de x y cuyos valores ser´n, respectiva- a mente, T o F de acuerdo a que los elementos de x cumplan o no la condici´n indicada: ser o mayores que 13.
  • 16. Cap´ ıtulo 2: C´lculos sencillos. N´meros y vectores a u 10 Los operadores l´gicos son < (menor), <= (menor o igual), > (mayor), >= (mayor o igual), o == (igual), y != (distinto). Adem´s, si c1 y c2 son expresiones l´gicas, entonces c1&c2 es a o su intersecci´n (“conjunci´n”), c1|c2 es su uni´n (“disyunci´n”) y !c1 es la negaci´n de o o o o o c1. Los vectores l´gicos pueden utilizarse en expresiones aritm´ticas, en cuyo caso se trans- o e forman primero en vectores num´ricos, de tal modo que F se transforma en 0 y T en 1. Sin e embargo hay casos en que un vector l´gico y su correspondiente num´rico no son equiva- o e lentes, como puede ver a continuaci´n. o 2.5 Valores faltantes En ocasiones puede que no todas las componentes de un vector sean conocidas. Cuando falta un elemento, lo que se denomina ’valor faltante’4 , se le asigna un valor especial, NA5 . En general, casi cualquier operaci´n donde intervenga un valor NA da por resultado NA. La o justificaci´n es sencilla: Si no se puede especificar completamente la operaci´n, el resultado o o no podr´ ser conocido, y por tanto no estar´ disponible. a a La funci´n is.na(x) crea un vector l´gico del tama˜o de x cuyos elementos s´lo valdr´n o o n o a T si el elemento correspondiente de x es NA, y F en caso contrario. > z <- c(1:3,NA); ind <- is.na(z) N´tese que la expresi´n l´gica x == NA es distinta de is.na(x) puesto que NA no es o o o realmente un valor, sino un indicador de una cantidad que no est´ disponible. Por tanto a x == NA es un vector de la misma longitud de x con todos sus elementos NA puesto que la expresi´n l´gica es incompleta. o o Adem´s hay una segunda clase de valores “faltantes”, producidos por el c´lculo. Son los a a 6 llamados valores NaN . Este tipo de dato no existe en S, y por tanto se confunden con NA en S-Plus. Ejemplos de NaN son > 0/0 o > Inf - Inf En resumen, is.na(xx) es TRUE tanto para los valores NA como para los NaN. Para diferenciar estos ultimos existe la funci´n is.nan(xx) que s´lo toma el valor TRUE para ´ o o valores NaN. 2.6 Vectores de caracteres Las cadenas de caracteres, o frases, tambi´n son utilizadas en R, por ejemplo, para e etiquetar gr´ficos. Una cadena de caracteres se construye escribiendo entre comillas la a sucesi´n de caracteres que la define, por ejemplo, "Altura" o "Resultados de la tercera o iteraci´n". o Los vectores de caracteres pueden concatenarse en un vector mediante la funci´n c(). o 4 En la literatura estad´ ıstica inglesa, “missing value” 5 Acr´nimo en ingl´s de “Not Available”, no disponible. o e 6 Acr´nimo en ingl´s de “Not a Number”, esto es, “No es un n´mero”. o e u
  • 17. Cap´ ıtulo 2: C´lculos sencillos. N´meros y vectores a u 11 Por otra parte, la funci´n paste() une todos los vectores de caracteres que se le sumi- o nistran y construye una sola cadena de caracteres. Tambi´n admite argumentos num´ricos, e e que convierte inmediatamente en cadenas de caracteres. En su forma predeterminada, en la cadena final, cada argumento original se separa del siguiente por un espacio en blanco, aunque ello puede cambiarse utilizando el argumento sep="cadena", que sustituye el espacio en blanco por cadena, la cual podr´ ser incluso vac´ ıa ıa. Por ejemplo, > labs <- paste(c("X","Y"), 1:10, sep="") almacena, en labs, el vector de caracteres c("X1", "Y2", "X3", "Y4", "X5", "Y6", "X7", "Y8", "X9", "Y10") Recuerde que al tener c("X", "Y") solo dos elementos, deber´ repetirse 5 veces para a 7 obtener la longitud del vector 1:10. 2.7 Vectores de ´ ındices. Selecci´n y modificaci´n de o o subvectores Puede seleccionar un subvector de un vector a˜adiendo al nombre del mismo un vector n de ´ ındices entre corchetes, [ y ]. En general podr´ obtener un subvector de cualquier a expresi´n cuyo resultado sea un vector, sin m´s que a˜adirle un vector de ´ o a n ındices entre corchetes. Los vectores de ´ ındices pueden ser de cuatro tipos distintos: 1. Un vector l´gico. En este caso el vector de ´ o ındices debe tener la misma longitud que el vector al que refiere. S´lo se seleccionar´n los elementos correspondientes a valores o a T del vector de ´ ındices y se omitir´ el resto. Por ejemplo, a > y <- x[!is.na(x)] almacena en y los valores no-faltantes de x, en el mismo orden. Si x tiene valores faltantes, el vector y ser´ m´s corto que x. An´logamente, a a a > (x+1)[(!is.na(x)) & x>0] -> z almacena en z los elementos del vector x+1 para los que el correspondiente elemento de x es no-faltante y positivo. 2. Un vector de n´meros naturales positivos. En este caso los elementos del vector de u ´ ındices deben pertenecer al conjunto {1, 2, . . . , length(x)}. El resultado es un vector formado por los elementos del vector referido que corresponden a estos ´ ındices y en el orden en que aparecen en el vector de ´ ındices. El vector de ´ ındices puede tener cualquier longitud y el resultado ser´ de esa misma longitud. Por ejemplo, x[6] es el a sexto elemento de x, y > x[1:10] es el vector formado por los diez primeros elementos de x, (supuesto que length(x) no es menor que 10). Por otra parte, 7 paste(..., collapse=ss) permite colapsar los argumentos en una sola cadena de caracteres separ´ndolos a mediante ss. Adem´s existen otras ´rdenes de manipulaci´n de caracteres. como sub y substring. Puede a o o encontrar su descripci´n en la ayuda del programa. o
  • 18. Cap´ ıtulo 2: C´lculos sencillos. N´meros y vectores a u 12 > c("x","y")[rep(c(1,2,2,1), times=4)] crea un vector de caracteres de longitud 16 formado por "x", "y", "y", "x" repetido cuatro veces. 3. Un vector de n´meros naturales negativos. En este caso, los ´ u ındices indican los ele- mentos del vector referido que deben excluirse. As´ pues, ı > y <- x[-(1:5)] almacena en el vector y todos los elementos de x excepto los cinco primeros (suponiendo que x tiene al menos cinco elementos). 4. Un vector de caracteres. Esta opci´n solo puede realizarse si el vector posee el atributo o names (nombres) para identificar sus componentes, en cuyo caso se comportar´ de modo a similar al punto 2. > fruta <- c(5, 10, 1, 20) > names(fruta) <- c("naranja", "pl´tano", "manzana", "pera") a > postre <- fruta[c("manzana","naranja")] La ventaja en este caso es que los nombres son a menudo m´s f´ciles de recordar que a a los ´ ındices num´ricos.Esta opci´n es especialmente util al tratar de la estructura de e o ´ “hoja de datos” (data frame) que veremos posteriormente. La variable de almacenamiento tambi´n puede ser indexada, en cuyo caso la asignaci´n e o se realiza solamente sobre los elementos referidos. La expresi´n debe ser de la forma o vector[vector de ´ındices] ya que la utilizaci´n de una expresi´n arbitraria en vez del nom- o o bre de un vector no tiene mucho sentido. El vector asignado debe ser de la misma longitud que el vector de ´ındices y, en el caso de un vector de ´ındices l´gico, debe ser de la misma longitud del vector que indexa. Por o ejemplo, > x[is.na(x)] <- 0 sustituye cada valor faltante de x por un cero. Por otra parte, > y[y < 0] <- -y[y < 0] equivale8 a > y <- abs(y) 2.8 Clases de objetos Los vectores son el tipo b´sico de objeto en R, pero existen m´s tipos que veremos de a a modo formal posteriormente. • Las matrices o, m´s generalmente, variables indexadas (Arrays) son generalizaciones a multidimensionales de los vectores. De hecho, son vectores indexados por dos o m´sa ındices y que se imprimen de modo especial. V´ase Cap´ ´ e ıtulo 5 [Matrices y variables indexadas], p´gina 20. a • Los factores sirven para representar datos categ´ricos. V´ase Cap´ o e ıtulo 4 [Factores], p´gina 17. a 8 Tenga en cuenta que abs() no se comporta correctamente con n´meros complejos, en ellos deber´ usar u ıa Mod().
  • 19. Cap´ ıtulo 2: C´lculos sencillos. N´meros y vectores a u 13 • Las listas son una forma generalizada de vector en las cuales los elementos no tienen por qu´ ser del mismo tipo y a menudo son a su vez vectores o listas. Las listas e permiten devolver los resultados de los c´lculos estad´ a ısticos de un modo conveniente. V´ase Secci´n 6.1 [Listas], p´gina 28. e o a • Las hojas de datos (data frames) son estructuras similares a una matriz, en que cada columna puede ser de un tipo distinto a las otras. Las hojas de datos son apropiadas para describir ‘matrices de datos’ donde cada fila representa a un individuo y cada columna una variable, cuyas variables pueden ser num´ricas o categ´ricas. Muchos e o experimentos se describen muy apropiadamente con hojas de datos: los tratamientos son categ´ricos pero la respuesta es num´rica. V´ase Secci´n 6.3 [Hojas de datos], o e e o p´gina 29. a • Las funciones son tambi´n objetos de R que pueden almacenarse en el espacio de e trabajo, lo que permite extender las capacidades de R f´cilmente. V´ase Cap´ a e ıtulo 10 [Escritura de funciones], p´gina 46. a
  • 20. Cap´ ıtulo 3: Objetos: Modos y atributos 14 3 Objetos: Modos y atributos 3.1 Atributos intr´ ınsecos: modo y longitud Las entidades que manipula R se conocen con el nombre de objetos. Por ejemplo, los vectores de n´meros, reales o complejos, los vectores l´gicos o los vectores de caracteres. u o Este tipo de objetos se denominan estructuras ‘at´micas’ puesto que todos sus elementos son o del mismo tipo o modo, bien sea numeric 1 (num´rico), complex (complejo), logical (l´gico) e o o character (car´cter). a Los elementos de un vector deben ser todos del mismo modo y ´ste ser´ el modo del e a vector. Esto es, un vector ser´, en su totalidad, de modo logical, numeric, complex o a character. La unica excepci´n a esta regla es que cualquiera de ellos puede contener el valor ´ o NA. Debe tener en cuenta que un vector puede ser vac´ pero pese a ello tendr´ un modo. ıo, a As´ el vector de caracteres vac´ aparece como character(0) y el vector num´rico vac´ ı, ıo e ıo aparece como numeric(0). R tambi´n maneja objetos denominados listas que son del modo list (lista) y que con- e sisten en sucesiones de objetos, cada uno de los cuales puede ser de un modo distinto. Las listas se denominan estructuras ‘recursivas’ puesto que sus componentes pueden ser asimismo listas. Existen otras estructuras recursivas que corresponden a los modos function (funci´n) y o expression (expresi´n). El modo function est´ formado por las funciones que constituyen R, o a unidas a las funciones escritas por cada usuario, y que discutiremos m´s adelante. El modo a expression corresponde a una parte avanzada de R que no trataremos aqu´ excepto en lo ı, m´ınimo necesario para el tratamiento de f´rmulas en la descripci´n de modelos estad´ o o ısticos. Con el modo de un objeto designamos el tipo b´sico de sus constituyentes fundamentales. a Es un caso especial de un atributo de un objeto. Los atributos de un objeto suministran informaci´n espec´ o ıfica sobre el propio objeto. Otro atributo de un objeto es su longitud. Las funciones mode(objeto) y length(objeto) se pueden utilizar para obtener el modo y longitud de cualquier estructura. Por ejemplo, si z es un vector complejo de longitud 100, entonces mode(z) es la cadena "complex", y length(z) es 100. R realiza cambios de modo cada vez que se le indica o es necesario (y tambi´n en algunas e ocasiones en que no parece que no lo es). Por ejemplo, si escribe > z <- 0:9 y a continuaci´n escribe o > digitos <- as.character(z) el vector digitos ser´ el vector de caracteres ("0", "1", "2", ..., "9"). Si a continua- a ci´n aplica un nuevo cambio de modo o > d <- as.integer(digitos) R reconstruir´ el vector num´rico de nuevo y, en este caso, d y z coinciden.2 Existe una a e colecci´n completa de funciones de la forma as.lo-que-sea(), tanto para forzar el cambio de o 1 El modo num´rico consiste realmente en dos modos distintos, integer (entero) y double (doble precisi´n). e o 2 En general, al forzar el cambio de num´rico a car´cter y de nuevo a num´rico, no se obtienen los mismos e a e resultados, debido, entre otros, a los errores de redondeo.
  • 21. Cap´ ıtulo 3: Objetos: Modos y atributos 15 modo, como para asignar un atributo a un objeto que carece de ´l. Es aconsejable consultar e la ayuda para familiarizarse con estas funciones. 3.2 Modificaci´n de la longitud de un objeto o Un objeto, aunque est´ “vac´ tiene modo. Por ejemplo, e ıo”, > v <- numeric() almacena en v una estructura vac´ de vector num´rico. Del mismo modo, character() es ıa e un vector de caracteres vac´ y lo mismo ocurre con otros tipos. Una vez creado un objeto ıo, con un tama˜o cualquiera, pueden a˜adirse nuevos elementos sin m´s que asignarlos a un n n a ´ ındice que est´ fuera del rango previo.Por ejemplo, e > v[3] <- 17 transforma v en un vector de longitud 3, (cuyas dos primeras componentes ser´n NA). Esta a regla se aplica a cualquier estructura, siempre que los nuevos elementos sean compatibles con el modo inicial de la estructura. Este ajuste autom´tico de la longitud de un objeto se utiliza a menudo, por ejemplo en la a funci´n scan() para entrada de datos. (V´ase Secci´n 7.2 [La funcion scan()], p´gina 34.) o e o a An´logamente, puede reducirse la longitud de un objeto sin m´s que realizar una nueva a a asignaci´n. Si, por ejemplo, alfa es un objeto de longitud 10, entonces o > alfa <- alfa[2 * 1:5] lo transforma en un objeto de longitud 5 formado por los elementos de posici´n par del o objeto inicial. 3.3 Obtenci´n y modificaci´n de atributos o o La funci´n attributes(objeto) proporciona una lista de todos los atributos no o intr´ ınsecos definidos para el objeto en ese momento. La funci´n attr(objeto, nombre) o puede usarse para seleccionar un atributo espec´ ıfico. Estas funciones no se utilizan habitualmente, sino que se reservan para la creaci´n de un nuevo atributo con fines o espec´ıficos, por ejemplo, para asociar una fecha de creaci´n o un operador con un objeto o de R. Sin embargo, es un concepto muy importante que no debe olvidar. La asignaci´n o eliminaci´n de atributos de un objeto debe realizarse con precauci´n, ya o o o que los atributos forman parte del sistema de objetos utilizados en R. Cuando se utiliza en la parte que recibe la asignaci´n, puede usarse para asociar un o nuevo atributo al objeto o para cambiar uno existente. Por ejemplo, > attr(z,"dim") <- c(10,10) permite tratar z como si fuese una matriz de 10 × 10. 3.4 Clases de objetos Cada objeto pertenece a una clase, y ello permite utilizar en R programaci´n dirigida a o objetos. Por ejemplo, si un objeto pertenece a la clase "data.frame", se imprimir´ de un modo a especial; cuando le aplique la funci´n plot() ´sta mostrar´ un gr´fico de un tipo especial; o e a a
  • 22. Cap´ ıtulo 3: Objetos: Modos y atributos 16 y otras funciones gen´ricas, como summary(), producir´n un resultado especial; todo ello e a en funci´n de la pertenencia a dicha clase. o Para eliminar temporalmente los efectos de la clase puede utilizar la funci´n unclass(). o Por ejemplo, si invierno pertenece a la clase "data.frame", entonces > invierno escribe el objeto en la forma de la clase, parecida a una matriz, en tanto que > unclass(invierno) lo imprime como una lista ordinaria. S´lo debe utilizar esta funci´n en situaciones muy o o concretas, como, por ejemplo, si hace pruebas para comprender el concepto de clase y de funci´n gen´rica. o e Las clases y las funciones gen´ricas ser´n tratadas muy brevemente en la Secci´n 10.9 e a o [Orientacion a objetos], p´gina 54. a
  • 23. Cap´ ıtulo 4: Factores Nominales y Ordinales 17 4 Factores Nominales y Ordinales Un factor es un vector utilizado para especificar una clasificaci´n discreta de los elemen- o tos de otro vector de igual longitud. En R existen factores nominales y factores ordinales. 4.1 Un ejemplo espec´ ıfico Suponga que dispone de una muestra de 30 personas de Australia1 de tal modo que su estado o territorio se especifica mediante un vector de caracteres con las abreviaturas de los mismos: > estado <- c("tas", "sa", "qld", "nsw", "nsw", "nt", "wa", "wa", "qld", "vic", "nsw", "vic", "qld", "qld", "sa", "tas", "sa", "nt", "wa", "vic", "qld", "nsw", "nsw", "wa", "sa", "act", "nsw", "vic", "vic", "act") Recuerde que, para un vector de caracteres, la palabra “ordenado” indica que est´ en a orden alfab´tico. e Un factor se crea utilizando la funci´n factor(): o > FactorEstado <- factor(estado) La funci´n print() trata a los factores de un modo distinto al de los vectores ordinarios: o > FactorEstado [1] tas sa qld nsw nsw nt wa wa qld vic nsw vic qld qld sa [16] tas sa nt wa vic qld nsw nsw wa sa act nsw vic vic act Levels: act nsw nt qld sa tas vic wa Puede utilizar la funci´n levels() para ver los niveles de un factor: o > levels(FactorEstado) [1] "act" "nsw" "nt" "qld" "sa" "tas" "vic" "wa" 4.2 La funci´n tapply(). Variables desastradas (ragged o arrays) Como continuaci´n del ejemplo anterior, suponga que disponemos en otro vector de los o ingresos de las mismas personas (medidos con unas unidades apropiadas) > ingresos <- c(60, 49, 40, 61, 64, 60, 59, 54, 62, 69, 70, 42, 56, 61, 61, 61, 58, 51, 48, 65, 49, 49, 41, 48, 52, 46, 59, 46, 58, 43) Para calcular la media muestral para cada estado podemos usar la funci´n tapply(): o > MediaIngresos <- tapply(ingresos, FactorEstado, mean) que devuelve el vector de medias con las componentes etiquetadas con los niveles: 1 Para quienes no conocen la estructura administrativa de Australia, existen ocho estados y territorios en la misma: Australian Capital Territory, New South Wales, Northern Territory, Queensland, South Australia, Tasmania, Victoria, y Western Australia; y sus correspondientes abreviaturas son: act, nsw, nt, qld, sa, tas, vic, y wa.
  • 24. Cap´ ıtulo 4: Factores Nominales y Ordinales 18 > MediaIngresos act nsw nt qld sa tas vic wa 44.500 57.333 55.500 53.600 55.000 60.500 56.000 52.250 La funci´n tapply() aplica una funci´n, en este ejemplo la funci´n mean(), a cada grupo o o o de componentes del primer argumento, en este ejemplo ingresos, definidos por los niveles del segundo argumento, en este ejemplo FactorEstado, como si cada grupo fuese un vector por s´ solo. El resultado es una estructura cuya longitud es el n´mero de niveles del factor. ı u Puede consultar la ayuda para obtener m´s detalles. a Suponga que ahora desea calcular las desviaciones t´ ıpicas de las medias de ingresos por estados. Para ello es necesario escribir una funci´n en R que calcule la desviaci´n t´ o o ıpica de un vector. Aunque a´n no se ha explicado en este texto c´mo escribir funciones2 , puede u o admitir que existe la funci´n var() que calcula la varianza muestral o cuasi-varianza, y que o la funci´n buscada puede construirse con la asignaci´n: o o > StdErr <- function(x) sqrt(var(x)/length(x)) Ahora puede calcular los valores buscados mediante > ErrorTipicoIngresos <- tapply(ingresos, FactorEstado, StdErr) con el siguiente resultado: > ErrorTipicoIngresos act nsw nt qld sa tas vic wa 1.500000 4.310195 4.500000 4.106093 2.738613 0.500000 5.244044 2.657536 Como ejercicio puede calcular el intervalo de confianza al 95% de la media de ingresos por estados. Para ello puede utilizar la funci´n tapply(), la funci´n length() para calcular los o o tama˜os muestrales, y la funci´n qt() para encontrar los percentiles de las distribuciones t n o de Student correspondientes. La funci´n tapply() puede utilizarse para aplicar una funci´n a un vector indexado por o o diferentes categor´ simult´neamente. Por ejemplo, para dividir la muestra tanto por el ıas a estado como por el sexo. Los elementos del vector se dividir´n en grupos correspondientes a a las distintas categor´ y se aplicar´ la funci´n a cada uno de dichos grupos. El resultado ıas a o es una variable indexada etiquetada con los niveles de cada categor´ ıa. 3 La combinaci´n de un vector con un factor para etiquetarlo, es un ejemplo de lo que se o llama variable indexada desastrada (ragged array) puesto que los tama˜os de las subclases n son posiblemente irregulares. Cuando estos tama˜os son iguales la indexaci´n puede hacerse n o impl´ıcitamente y adem´s m´s eficientemente, como veremos a continuaci´n. a a o 4.3 Factores ordinales Los niveles de los factores se almacenan en orden alfab´tico, o en el orden en que se e especificaron en la funci´n factor si ello se hizo expl´ o ıcitamente. A veces existe una ordenaci´n natural en los niveles de un factor, orden que deseamos o tener en cuenta en los an´lisis estad´ a ısticos. La funci´n ordered() crea este tipo de factores o y su uso es id´ntico al de la funci´n factor. Los factores creados por la funci´n factor los e o o denominaremos nominales o simplemente factores cuando no haya lugar a confusi´n, y los o 2 La escritura de funciones ser´ tratada en Cap´ a ıtulo 10 [Escritura de funciones], p´gina 46. a 3 En general de una variable indexada
  • 25. Cap´ ıtulo 4: Factores Nominales y Ordinales 19 creados por la funci´n ordered() los denominaremos ordinales. En la mayor´ de los casos o ıa la unica diferencia entre ambos tipos de factores consiste en que los ordinales se imprimen ´ indicando el orden de los niveles. Sin embargo los contrastes generados por los dos tipos de factores al ajustar Modelos lineales, son diferentes.
  • 26. Cap´ ıtulo 5: Variables indexadas. Matrices 20 5 Variables indexadas. Matrices 5.1 Variables indexadas (Arrays) Una variable indexada (array) es una colecci´n de datos, por ejemplo num´ricos, inde- o e xada por varios ´ ındices. R permite crear y manipular variables indexadas en general y en particular, matrices. Un vector de dimensiones es un vector de n´meros enteros positivos. Si su longitud es k u entonces la variable indexada correspondiente es k–dimensional. Los elementos del vector de dimensiones indican los l´ ımites superiores de los k ´ ındices. Los l´ımites inferiores siempre valen 1. Un vector puede transformarse en una variable indexada cuando se asigna un vector de dimensiones al atributo dim. Supongamos, por ejemplo, que z es un vector de 1500 elementos. La asignaci´n o > dim(z) <- c(3,5,100) hace que R considere a z como una variable indexada de dimensi´n 3 × 5 × 100. o Existen otras funciones, como matrix() y array(), que permiten asignaciones m´s a sencillas y naturales, como se ver´ en la Secci´n 5.4 [La funcion array()], p´gina 22. a o a Los elementos del vector pasan a formar parte de la variable indexada siguiendo la regla1 de que el primer ´ ındice es el que se mueve m´s r´pido y el ultimo es el m´s lento. a a ´ a Por ejemplo, si se define una variable indexada, a, con vector de dimensiones c(3,4,2), la variable indexada tendr´ 3×4×2 = 24 elementos que se formar´n a partir de los elementos a a originales en el orden a[1,1,1], a[2,1,1], ..., a[2,4,2], a[3,4,2]. 5.2 Elementos de una variable indexada Un elemento de una variable indexada puede referirse dando el nombre de la variable y, entre corchetes, los ´ ındices que lo refieren, separados por comas. En general, puede referir una parte de una variable indexada mediante una sucesi´n de o vectores ´ındices, teniendo en cuenta que si un vector ´ındice es vac´ equivale a utilizar todo ıo, el rango de valores para dicho ´ ındice. As´ en el ejemplo anterior, a[2,,] es una variable indexada 4×2, con vector de dimensi´n ı, o c(4,2) y sus elementos son c(a[2,1,1], a[2,2,1], a[2,3,1], a[2,4,1], a[2,1,2], a[2,2,2], a[2,3,2], a[2,4,2]) en ese orden. A su vez, a[,,] equivale a la variable completa, que coincide con omitir completamente los ´ ındices y utilizar simplemente a. Para cualquier variable indexada, por ejemplo Z, el vector de dimensi´n puede referirse o expl´ıcitamente mediante dim(Z) (en cualquiera de las dos partes de una asignaci´n). o Asimismo, si especifica una variable indexada con un solo ´ ındice o vector ´ ındice, s´lo o se utilizan los elementos correspondientes del vector de datos, y el vector de dimensi´n se o ignora. En caso de que el ´ ındice no sea un vector, sino a su vez una variable indexada, el tratamiento es distinto, como ahora veremos. 1 Esta regla es la que se utiliza en el lenguaje Fortran
  • 27. Cap´ ıtulo 5: Variables indexadas. Matrices 21 5.3 Uso de variables indexadas como ´ ındices Una variable indexada puede utilizar no s´lo un vector de ´ o ındices, sino incluso una variable indexada de ´ındices, tanto para asignar un vector a una colecci´n irregular de o elementos de una variable indexada como para extraer una colecci´n irregular de elementos. o Veamos un ejemplo sobre una matriz, que es una variable indexada con dos ´ ındices. Puede construirse un ´ındice matricial consistente en dos columnas y varias filas. Los ele- mentos del ´ ındice matricial son los ´ ındices fila y columna para construir la matriz de ´ ındices. Supongamos que X es una variable indexada 4 × 5 y que desea hacer lo siguiente: • Extraer los elementos X[1,3], X[2,2] y X[3,1] con una estructura de vector, y • Reemplazar dichos elementos de X con ceros. ındices de 3 × 2 como en el siguiente ejemplo. Para ello puede utilizar una matriz de ´ > x <- array(1:20,dim=c(4,5)) # Genera una variable indexada (4 × 5). > x [,1] [,2] [,3] [,4] [,5] [1,] 1 5 9 13 17 [2,] 2 6 10 14 18 [3,] 3 7 11 15 19 [4,] 4 8 12 16 20 > i <- array(c(1:3,3:1),dim=c(3,2)) > i ındices (3 × 2). # i es una matriz de ´ [,1] [,2] [1,] 1 3 [2,] 2 2 [3,] 3 1 > x[i] # Extrae los elementos. [1] 9 6 3 > x[i] <- 0 # Sustituye los elementos por ceros. > x [,1] [,2] [,3] [,4] [,5] [1,] 1 5 0 13 17 [2,] 2 0 10 14 18 [3,] 0 7 11 15 19 [4,] 4 8 12 16 20 > Un ejemplo algo m´s complejo consiste en generar la matriz de dise˜o de un dise˜o en a n n bloques definido por dos factores, bloques (niveles b) y variedades (niveles v), siendo el n´mero de parcelas n. Puede hacerlo del siguiente modo: u > Xb <- matrix(0, n, b) > Xv <- matrix(0, n, v) > ib <- cbind(1:n, bloques) > iv <- cbind(1:n, variedades) > Xb[ib] <- 1 > Xv[iv] <- 1 > X <- cbind(Xb, Xv) Adem´s, puede construir la matriz de incidencia, N, mediante a
  • 28. Cap´ ıtulo 5: Variables indexadas. Matrices 22 > N <- crossprod(Xb, Xv) Tambi´n puede construirla directamente mediante la funci´n table(): e o > N <- table(bloques, variedades) 5.4 La funci´n array() o Una variable indexada no s´lo puede construirse modificando el atributo dim de un o vector, sino tambi´n directamente mediante la funci´n array, que tiene la forma e o > Z <- array(vector de datos,vector de dimensiones) Por ejemplo, si el vector h contiene 24 n´meros (o incluso menos), la orden u > Z <- array(h, dim=c(3,4,2)) usa h para almacenar en Z una variable indexada de dimensi´n 3 × 4 × 2. Si el tama˜o de o n h es exactamente 24, el resultado coincide con el de > dim(Z) <- c(3,4,2) Sin embargo, si h es m´s corto de 24, sus valores se repiten desde el principio tantas veces a como sea necesario para obtener 24 elementos. (v´ase Secci´n 5.4.1 [Reciclado], p´gina 22). e o a El caso extremo, muy com´n, corresponde a un vector de longitud 1, como en este ejemplo u > Z <- array(0, c(3,4,2)) en que Z es una variable indexada compuesta enteramente de ceros. Adem´s, dim(Z), el vector de dimensiones, es el vector c(3,4,2), Z[1:24], es un vector a de datos que coincide con h, y tanto Z[], con ´ ındice vac´ como Z, sin ´ ıo, ındices, son la variable indexada con estructura de variable indexada. Las variables indexadas pueden utilizarse en expresiones aritm´ticas y el resultado es una e variable indexada formada a partir de las operaciones elemento a elemento de los vectores subyacentes. Los atributos dim de los operandos deben ser iguales en general y coincidir´n a con el vector de dimensiones del resultado. As´ pues, si A, B y C son variables indexadas ı similares, entonces > D <- 2*A*B + C + 1 almacena en D una variable indexada similar, cuyo vector de datos es el resultado de las operaciones indicadas sobre los vectores de datos subyacentes a A, B y C. Las reglas exactas correspondientes a los c´lculos en que se mezclan variables indexadas y vectores deben ser a estudiadas con detenimiento. 5.4.1 Operaciones con variables indexadas y vectores. Reciclado. Cuando se realizan operaciones que mezclan variables indexadas y vectores, se siguen los siguientes criterios: • La expresi´n se analiza de izquierda a derecha. o • Si un vector es m´s corto que otro, se extiende repitiendo sus elementos (lo que se a denomina reciclado) hasta alcanzar el tama˜o del vector m´s largo. n a • Si s´lo hay variables indexadas y vectores m´s cortos, las variables indexadas deben o a tener el mismo atributo dim, o se producir´ un error. a • Si hay un vector m´s largo que una variable indexada anterior, se produce un mensaje a de error.
  • 29. Cap´ ıtulo 5: Variables indexadas. Matrices 23 • Si hay variables indexadas y no se produce error, el resultado es una variable indexada del mismo atributo dim que las variables indexadas que intervienen en la operaci´n.o 5.5 Producto exterior de dos variables indexadas Una operaci´n de importancia fundamental entre variables indexadas es el producto o exterior. Si a y b son dos variables indexadas num´ricas, su producto exterior es una e variable indexada cuyo vector de dimensi´n es la concatenaci´n de los correspondientes de o o los operandos, en el orden de la operaci´n, y cuyo vector de datos subyacente se obtiene o mediante todos los posibles productos de los elementos de los vectores subyacentes de a y b. El producto exterior se obtiene mediante el operador %o%: > ab <- a %o% b o bien, en forma funcional, mediante outer: > ab <- outer(a, b, "*") La funci´n “multiplicaci´n” en esta ultima forma, puede reemplazarse por cualquier o o ´ funci´n de dos variables. Por ejemplo, para calcular la funci´n f (x, y) = cos(y)/(1 + x2 ) o o sobre la ret´ıcula formada por todos los puntos obtenidos combinando las ordenadas y abs- cisas definidas por los elementos de los vectores x e y respectivamente, puede utilizar2 las o ´rdenes: > f <- function(x, y) cos(y)/(1 + x^2) > z <- outer(x, y, f) En particular, el producto exterior de dos vectores, es una variable indexada con dos ´ ındices (esto es, una matriz, de rango 1 a lo sumo). Debe tener en cuenta que el producto exterior no es conmutativo. Ejemplo: Distribuci´n del determinante de una matriz de d´ o ıgitos de 2 × 2 Un ejemplo apropiado se presenta en el c´lculo del determinante de una matriz 2 × 2, a [a, b; c, d], en que cada elemento de la misma es un n´mero natural entre 0 y 9. El problema u planteado consiste en encontrar la distribuci´n de los determinantes, ad − bc, de todas las o matrices posibles de esta forma, y representarla gr´ficamente, supuesto que cada d´ a ıgito se elige al azar de una distribuci´n uniforme. o Para ello puede utilizar la funci´n outer() dos veces: o > d <- outer(0:9, 0:9) > fr <- table(outer(d, d, "-")) > plot(as.numeric(names(fr)), fr, type="h", xlab="Determinante", ylab="Frecuencia") Advierta c´mo se ha forzado el atributo names de la tabla de frecuencias a num´rico, para o e recuperar el rango de los valores de los determinantes. La forma aparentemente “obvia” de resolver este problema mediante iteraciones de tipo for, que se discutir´n en el Cap´ a ıtulo 9 [Ciclos y ejecucion condicional], p´gina 44, es tan ineficiente que es impracticable. Al a observar el resultado, tal vez le sorprenda que aproximadamente una de cada veinte matrices sea singular. 2 La definici´n de una funci´n en R se estudia en el cap´ o o ıtulo Cap´ ıtulo 10 [Escritura de funciones], p´gina 46. a
  • 30. Cap´ ıtulo 5: Variables indexadas. Matrices 24 5.6 Traspuesta generalizada de una variable indexada La funci´n aperm(a, perm) puede usarse para permutar la variable indexada a. El o argumento perm debe ser una permutaci´n de los enteros {1, . . . , k} siendo k el n´mero de o u ´ ındices de a. El resultado es una variable indexada del mismo tama˜o que a en la que la n dimensi´n que en la original era perm[j] ser´ ahora la dimensi´n j. Si A es una matriz, o a o entonces > B <- aperm(A, c(2,1)) almacena en B la matriz traspuesta de A. En el caso de matrices es m´s sencillo utilizar la a funci´n t(), y bastar´ escribir B <- t(A). o ıa 5.7 Operaciones con matrices Como ya se ha indicado varias veces, una matriz es simplemente una variable indexada con dos ´ ındices. Ahora bien, su importancia es tal que necesita un apartado especial. R dispone de muchos operadores y funciones dise˜ados espec´ n ıficamente para matrices. Por ejemplo, acabamos de ver que t(X) es la matriz traspuesta de X. Las funciones nrow y ncol devuelven el n´mero de filas y de columnas de una matriz. u 5.7.1 Producto matricial. Inversa de una matriz. Resoluci´n de o sistemas lineales El operador %*% realiza el producto matricial. Una matriz de n × 1 o de 1 × n puede ser utilizada como un vector n-dimensional en caso necesario. An´logamente R puede usar a autom´ticamente un vector en una operaci´n matricial convirti´ndolo en una matriz fila o a o e una matriz columna cuando ello es posible (A veces la conversi´n no est´ definida de modo o a unico, como veremos despu´s). ´ e Si, por ejemplo, A y B, son matrices cuadradas del mismo tama˜o, entonces n > A * B es la matriz de productos elemento a elemento, en tanto que > A %*% B es el producto matricial. Si x es un vector (de la dimensi´n apropiada) entonces o > x %*% A %*% x es una forma cuadr´tica.3 a La funci´n crossprod() realiza el producto cruzado de matrices, esto es o crossprod(X,y) suministra el mismo resultado que t(X)%*%y, pero la operaci´n es m´s o a eficiente. Si omite el segundo argumento de la funci´n crossprod(), ´sta lo toma igual al o e primero. Tambi´n existe la funci´n diag(). Si su argumento es una matriz, diag(matriz), de- e o vuelve un vector formado por los elementos de la diagonal de la misma. Si, por el contrario, 3 Si hubiese escrito x %*% x el resultado es ambiguo, pues tanto podr´ significar x x como xx , donde x es ıa la forma columna. En este tipo de casos, la interpretaci´n corresponde a la matriz de menor tama˜o, por o n lo que en este ejemplo el resultado es el escalar x x. La matriz xx puede calcularse mediante cbind(x) %*% x, mediante x %*% rbind(x) o mediante x %*% rbind(x), puesto que tanto el resultado de rbind() como el de cbind() son matrices.
  • 31. Cap´ ıtulo 5: Variables indexadas. Matrices 25 su argumento es un vector (de longitud mayor que uno), diag(vector), lo transforma en una matriz diagonal cuyos elementos diagonales son los del vector. Y, por ultimo, si su ´ argumento es un n´mero natural, n, lo transforma en una matriz identidad de tama˜o u n n × n. 5.7.2 Autovalores y autovectores Como ya hemos indicado, la funci´n eigen() calcula los autovalores y autovectores de o una matriz sim´trica. El resultado es una lista de dos componentes llamados values y e vectors. La asignaci´n o > ev <- eigen(Sm) almacenar´ esta lista en ev. Por tanto ev$val es el vector de autovalores de Sm y ev$vec es a la matriz de los correspondientes autovectores. Si s´lo quisi´ramos almacenar los autovalores o e podr´ ıamos haber hecho la asignaci´n:o > evals <- eigen(Sm)$values y en este caso evals s´lo contendr´ los autovalores, habi´ndose descartado la segunda o ıa e componente de la lista. Si se utiliza la directamente la expresi´n o > eigen(Sm) se imprimen las dos componentes, con sus nombres, en la pantalla. 5.7.3 Descomposici´n en valores singulares. Determinantes o La funci´n svd admite como argumento una matriz cualquiera, M, y calcula su descom- o posici´n en valores singulares, que consiste en obtener tres matrices, U, D y V, tales que la o primera es una matriz de columnas ortonormales con el mismo espacio de columnas que M, la segunda es una matriz diagonal de n´meros no negativos, y la tercera es una matriz de u columnas ortonormales con el mismo espacio de filas que M, tales que M=U%*%D%*%t(V). D se devuelve en forma de vector formado por los elementos diagonales. El resultado de la funci´n es una lista de tres componentes cuyos nombres son d, u y v, y que corresponden a o las matrices descritas. Si M es una matriz cuadrada, es f´cil ver que a > AbsDetM <- prod(svd(M)$d) calcula el valor absoluto del determinante de M. Si necesita este c´lculo a menudo, puede a definirlo como una nueva funci´n en R: o > AbsDet <- function(M) prod(svd(M)$d) tras lo cual puede usar AbsDet() como cualquier otra funci´n de R. Se deja como ejercicio, o trivial pero util, el c´lculo de una funci´n, tr(), que calcule la traza de una matriz cuadrada. ´ a o Tenga en cuenta que no necesita realizar ninguna iteraci´n; estudie atentamente el c´digo o o de la funci´n anterior. o 5.7.4 Ajuste por m´ ınimos cuadrados. Descomposici´n QR o La funci´n lsfit() devuelve una lista que contiene los resultados de un ajuste por o m´ ınimos cuadrados. Una asignaci´n de la forma o
  • 32. Cap´ ıtulo 5: Variables indexadas. Matrices 26 > MinCua <- lsfit(X, y) almacena los resultados del ajuste por m´ınimos cuadrados de un vector de observaciones, y, y una matriz de dise˜o, X. Para ver m´s detalles puede consultar la ayuda, y tambi´n la de n a e la funci´n ls.diag() para los diagn´sticos de regresi´n. Tenga en cuenta que no necesita o o o incluir un t´rmino independiente en X, ya que se incluye autom´ticamente. e a Otras funciones estrechamente relacionadas son qr() y similares. Considere las siguientes asignaciones: > Xplus <- qr(X) > b <- qr.coef(Xplus, y) > fit <- qr.fitted(Xplus, y) > res <- qr.resid(Xplus, y) que calculan la proyecci´n ortogonal de y sobre X y la almacenan en fit, la proyecci´n sobre o o el complemento ortogonal en res y el vector de coeficientes para la proyecci´n en b4 . o No se presupone que X sea de rango completo. Se buscan las redundancias y, si existen, se eliminan. Esta forma es la forma antigua, a bajo nivel, de realizar ajustes de m´ ınimos cuadra- dos. Aunque sigue siendo util en alg´n contexto, deber´ ser reemplazada por los modelos ´ u ıa ısticos, como se ver´ en el Cap´ estad´ a ıtulo 11 [Modelos estadisticos en R], p´gina 55. a 5.8 Submatrices. Funciones cbind() y rbind(). Las funciones cbind() y rbind() construyen matrices uniendo otras matrices (o vec- tores), horizontalmente (modo columna) o verticalmente (modo fila), respectivamente. En la asignaci´n o > X <- cbind(arg 1, arg 2, arg 3, ...) los argumentos pueden ser vectores de cualquier longitud o matrices con el mismo n´mero u de filas. El resultado es una matriz cuyas columnas son los argumentos concatenados, arg 1, arg 2, . . . Si alguno de los argumentos de cbind() es un vector, y hay alguna matriz, el vector no puede ser m´s largo que el n´mero de filas de las matrices presentes, y si es m´s corto, se a u a recicla hasta alcanzar el n´mero indicado. Si s´lo hay vectores, los m´s cortos se reciclan u o a hasta alcanzar el tama˜o del mayor. n La funci´n rbind() realiza el mismo papel, sustituyendo filas por columnas. o Supongamos que X1 y X2 tienen el mismo n´mero de filas. Para combinar las columnas u de ambas en una matriz, X, que tendr´ el mismo n´mero de filas, y a˜adirle una columna a u n inicial de unos, puede escribir > X <- cbind(1, X1, X2) El resultado de cbind() o de rbind() siempre es una matriz y estas funciones consti- tuyen, por tanto, la forma m´s sencilla para tratar un vector como una matriz columna o a una matriz fila, respectivamente. 4 b es esencialmente el resultado del operador “barra hacia atr´s” de Matlab. a
  • 33. Cap´ ıtulo 5: Variables indexadas. Matrices 27 5.9 La funci´n de concatenaci´n, c(), con variables o o indexadas En tanto que cbind() y rbind() son funciones de concatenaci´n que respetan el atributo o dim, la funci´n c() no lo hace, sino que despoja a los objetos num´ricos de los atributos o e dim y dimnames, lo que, por cierto, puede ser util en determinadas situaciones. ´ La forma oficial de transformar una variable indexada en el vector subyacente es utilizar la funci´n as.vector(), o > vec <- as.vector(X) Sin embargo, se obtiene un resultado an´logo utilizando la funci´n c() debido al efecto a o colateral citado: > vec <- c(X) Existen sutiles diferencias entre ambos resultados, pero la elecci´n entre ambas es fun- o damentalmente una cuesti´n de estilo (personalmente preferimos la primera forma). o 5.10 Tablas de frecuencias a partir de factores Hemos visto que un factor define una tabla de entrada simple. Del mismo modo, dos factores definen una tabla de doble entrada, y as´ sucesivamente. La funci´n table() ı o calcula tablas de frecuencias a partir de factores de igual longitud. Si existen k argumentos categ´ricos, el resultado ser´ una variable k-indexada, que contiene la tabla de frecuencias. o a Vimos en un ejemplo anterior, que FactorEstado era un factor que indicaba el estado de procedencia. La asignaci´n o > FrecEstado <- table(FactorEstado) almacena en FrecEstado una tabla de las frecuencias de cada estado en la muestra. Las frecuencias se ordenan y etiquetan con los niveles del factor. Esta orden es equivalente, y m´s sencilla, que a > FrecEstado <- tapply(FactorEstado, FactorEstado, length) Suponga ahora que FactorIngresos es un factor que define “tipos de ingresos”, por ejemplo, mediante la funci´n cut(): o > factor(cut(ingresos,breaks=35+10*(0:7))) -> FactorIngresos Entonces, puede calcular una tabla de frecuencias de doble entrada del siguiente modo: > table(FactorIngresos,FactorEstado) FactorEstado FactorIngresos act nsw nt qld sa tas vic wa (35,45] 1 1 0 1 0 0 1 0 (45,55] 1 1 1 1 2 0 1 3 (55,65] 0 3 1 3 2 2 2 1 (65,75] 0 1 0 0 0 0 1 0 La extensi´n a tablas de frecuencias de varias entradas es inmediata. o
  • 34. Cap´ ıtulo 6: Listas y hojas de datos 28 6 Listas y hojas de datos 6.1 Listas En R, una lista es un objeto consistente en una colecci´n ordenada de objetos, conocidos o como componentes. No es necesario que los componentes sean del mismo modo, as´ una lista puede estar ı compuesta de, por ejemplo, un vector num´rico, un valor l´gico, una matriz y una funci´n. e o o El siguiente es un ejemplo de una lista: > Lst <- list(nombre="Pedro", esposa="Mar´a", no.hijos=3, ı edad.hijos=c(4,7,9)) Los componentes siempre est´n numerados y pueden ser referidos por dicho n´mero. a u En este ejemplo, Lst es el nombre de una lista con cuatro componentes, cada uno de los cuales puede ser referido, respectivamente, por Lst[[1]], Lst[[2]], Lst[[3]] y Lst[[4]]. Como, adem´s, Lst[[4]] es un vector, Lst[[4]][1] refiere su primer elemento. a La funci´n length() aplicada a una lista devuelve el n´mero de componentes (del primer o u nivel) de la lista. Los componentes de una lista pueden tener nombre, en cuyo caso pueden ser referidos tambi´n por dicho nombre, mediante una expresi´n de la forma e o nombre de lista$nombre de componente Esta convenci´n permite la obtenci´n de una componente sin tener que recurrir a su o o n´mero. u En el ejemplo anterior, Lst$nombre coincide con Lst[[1]] y vale "Pedro", Lst$esposa coincide con Lst[[2]] y vale "Mar´a", ı Lst$edad.hijos[1] coincide con Lst[[4]][1] y vale 4. Tambi´n es posible utilizar los nombres de los componentes entre dobles corchetes, por e ejemplo, Lst[["nombre"]] coincide con Lst$nombre. Esta opci´n es muy util en el caso o ´ en que el nombre de los componentes se almacena en otra variable, como en > x <- "nombre"; Lst[[x]] Es muy importante distinguir claramente entre Lst[[1]] y Lst[1]. ‘[[. . . ]]’ es el operador utilizado para seleccionar un s´lo elemento, mientras que ‘[. . . ]’ es un operador o general de indexado. Esto es, Lst[[1]] es el primer objeto de la lista Lst, y si es una lista con nombres, el nombre no est´ incluido. Por su parte, Lst[1], es una sublista de la lista a Lst consistente en la primera componente. Si la lista tiene nombre, ´ste se transfiere a la e sublista. Los nombres de los componentes pueden abreviarse hasta el m´ ınimo de letras necesarios para identificarlos de modo exacto. As´ en ı, > Lista <- list(coeficientes=c(1.3,4), covarianza=.87) Lst$coeficientes puede especificarse mediante Lista$coe, y Lista$covarianza como Lista$cov. El vector de nombres es un atributo de la lista, y como el resto de atributos puede ser manipulado. Adem´s de las listas, tambi´n otras estructuras pueden poseer el atributo a e names.
  • 35. Cap´ ıtulo 6: Listas y hojas de datos 29 6.2 Construcci´n y modificaci´n de listas o o La funci´n list() permite crear listas a partir de objetos ya existentes. Una asignaci´n o o de la forma > Lista <- list(nombre 1=objeto 1,. . . ,nombre m=objeto m) almacena en Lista una lista de m componentes que son objeto 1, . . . , objeto m; a los cuales asigna los nombres nombre 1, . . . ,nombre m; que pueden ser libremente elegidos1 . Si omite los nombres, las componentes s´lo estar´n numeradas. Las componentes se copian o a para construir la lista y los originales no se modifican. Las listas, como todos los objetos indexados, pueden ampliarse especificando compo- nentes adicionales. Por ejemplo > Lst[5] <- list(matriz=Mat) 6.2.1 Concatenaci´n de listas o Al suministrar listas como argumentos a la funci´n c() el resultado es una lista, cuyos o componentes son todos los de los argumentos unidos sucesivamente. > lista.ABC <- c(lista.A, lista.B, lista.C) Recuerde que cuando los argumentos eran vectores, esta funci´n los un´ todos en un o ıa unico vector. En este caso, el resto de atributos, como dim, se pierden. ´ 6.3 Hojas de datos (Data frames) Una hoja de datos 2 (Data frame) es una lista que pertenece a la clase "data.frame". Hay restricciones en las listas que pueden pertenecer a esta clase, en particular: • Los componentes deben ser vectores (num´ricos, cadenas de caracteres, o l´gicos), e o factores, matrices num´ricas, listas u otras hojas de datos. e • Las matrices, listas, y hojas de datos contribuyen a la nueva hoja de datos con tantas variables como columnas, elementos o variables posean, respectivamente. • Los vectores num´ricos y los factores se incluyen sin modificar, los vectores no num´ricos e e se fuerzan a factores cuyos niveles son los unicos valores que aparecen en el vector. ´ • Los vectores que constituyen la hoja de datos deben tener todos la misma longitud, y las matrices deben tener el mismo tama˜o de filas n Las hojas de datos pueden interpretarse, en muchos sentidos, como matrices cuyas colum- nas pueden tener diferentes modos y atributos. Pueden imprimirse en forma matricial y se pueden extraer sus filas o columnas mediante la indexaci´n de matrices. o 6.3.1 Construcci´n de hojas de datos o Puede construir una hoja de datos utilizando la funci´n data.frame: o 1 Aunque R permite lo contrario, deber´ ser distintos entre s´ ıan ı 2 Hemos utilizado esta traducci´n por analog´ con la “hoja de c´lculo” o ıa a
  • 36. Cap´ ıtulo 6: Listas y hojas de datos 30 > cont <- data.frame(dom=FactorEstado, bot=ingresos, dis=FactorIngresos) Puede forzar que una lista, cuyos componentes cumplan las restricciones para ser una hoja de datos, realmente lo sea, mediante la funci´n as.data.frame() o La manera m´s sencilla de construir una hoja de datos es utilizar la funci´n a o read.table() para leerla desde un archivo del sistema operativo. Esta forma se tratar´a en el Cap´ ıtulo 7 [Lectura de datos desde un archivo], p´gina 33. a 6.3.2 Funciones attach() y detach() La notaci´n $ para componentes de listas, como por ejemplo cont$dom, no siempre es o la m´s apropiada. En ocasiones, ser´ c´modo que los componentes de una lista o de una a ıa o hoja de datos pudiesen ser tratados temporalmente como variables cuyo nombre fuese el del componente, sin tener que especificar expl´ıcitamente el nombre de la lista. La funci´n attach() puede tener como argumento el nombre de una lista o de una hoja o de datos y permite conectar la lista o la hoja de datos directamente. Supongamos que lentejas es una hoja de datos con tres variables, lentejas$u, lentejas$v y lentejas$w. La orden > attach(lentejas) conecta la hoja de datos coloc´ndola en la segunda posici´n de la trayectoria de b´squeda a o u y, supuesto que no existen variables denominadas u, v o w en la primera posici´n; u, v y w o aparecer´n como variables por s´ mismas. Sin embargo, si realiza una asignaci´n a una de a ı o estas variables, como por ejemplo > u <- v+w no se sustituye la componente u de la hoja de datos, sino que se crea una nueva variable, u, en el directorio de trabajo, en la primera posici´n de la trayectoria de b´squeda, que o u enmascarar´ a la variable u de la hoja de datos. Para realizar un cambio en la propia hoja a de datos, basta con utilizar la notaci´n $: o > lentejas$u <- v+w Este nuevo valor de la componente u no ser´ visible de modo directo hasta que desconecte a y vuelva a conectar la hoja de datos. Para desconectar una hoja de datos, utilice la funci´n o > detach() Esta funci´n desconecta la entidad que se encuentre en la segunda posici´n de la trayec- o o toria de b´squeda. Una vez realizada esta operaci´n dejar´n de existir las variables u, u o a v y w como tales, aunque seguir´n existiendo como componentes de la hoja de datos. a Las entidades que ocupan en la trayectoria de b´squeda posiciones superiores a la se- u gunda, pueden desconectarse dando su posici´n o su nombre como argumento a la funci´n o o detach. Personalmente preferimos la segunda opci´n, como por ejemplo detach(lentejas) o o detach("lentejas") Nota: La trayectoria de b´squeda puede almacenar un n´mero finito y peque˜o u u n de elementos, por tanto (puesto que adem´s no es necesario) no debe conectar a una misma hoja de datos m´s de una vez. Del mismo modo, es conveniente a desconectar una hoja de datos cuando termine de utilizar sus variables.
  • 37. Cap´ ıtulo 6: Listas y hojas de datos 31 Nota: En la versi´n actual de R s´lo se pueden conectar listas y hojas de datos o o en la posici´n 2 o superior. No es posible asignar directamente en una lista u o hoja de datos conectada (por tanto, en cierto sentido, son est´ticas). a 6.3.3 Trabajo con hojas de datos Una metodolog´ de trabajo para tratar diferentes problemas utilizando el mismo direc- ıa torio de trabajo es la siguiente: • Re´na todas las variables de un mismo problema en una hoja de datos y d´le un nombre u e apropiado e informativo; • Para analizar un problema, conecte, mediante attach(), la hoja de datos correspon- diente (en la posici´n 2) y utilice el directorio de trabajo (en la posici´n 1) para los o o c´lculos y variables temporales; a • Antes de terminar un an´lisis, a˜ada las variables que deba conservar a la hoja de a n datos utilizando la forma $ para la asignaci´n y desconecte la hoja de datos mediante o detach(); • Para finalizar, elimine del directorio de trabajo las variables que no desee conservar, para mantenerlo lo m´s limpio posible. a De este modo podr´ analizar diferentes problemas utilizando el mismo directorio, aunque a todos ellos compartan variables denominadas x, y o z, por ejemplo. 6.3.4 Conexi´n de listas arbitrarias o La funci´n attach() es una funci´n gen´rica, que permite conectar en la trayectoria o o e de b´squeda no s´lo directorios y hojas de datos, sino tambi´n otros tipos de objetos, en u o e particular cualquier lista, como en > attach(cualquier.lista) Posteriormente podr´ desconectar el objeto utilizando la funci´n detach, utilizando a o como argumento el n´mero de posici´n o, preferiblemente, su nombre. u o 6.3.5 Gesti´n de la trayectoria de b´ squeda o u La funci´n search devuelve la trayectoria de b´squeda actual y por tanto es la mejor o u manera de conocer qu´ hojas de datos, listas o bibliotecas han sido conectadas o desconec- e tadas. Si no ha realiado ninguna conexi´n o desconexi´n su valor es o o > search() [1] ".GlobalEnv" "Autoloads" "package:base" donde .GlobalEnv corresponde al espacio de trabajo.3 Una vez conectada la hoja de datos, lentejas, tendr´ ıamos > search() [1] ".GlobalEnv" "lentejas" "Autoloads" "package:base" > ls(2) [1] "u" "v" "w" 3 Consulte la ayuda sobre autoload para la descripci´n del significado del segundo t´rmino. o e
  • 38. Cap´ ıtulo 6: Listas y hojas de datos 32 y, como vimos, ls (o objects) puede usarse para examinar los contenidos de cualquier posici´n en la trayectoria de b´squeda. o u Por ultimo, desconectamos la hoja de datos y comprobamos que ha sido eliminada de la ´ trayectoria de b´squeda. u > detach("lentejas") > search() [1] ".GlobalEnv" "Autoloads" "package:base"
  • 39. Cap´ ıtulo 7: Lectura de datos de un archivo 33 7 Lectura de datos de un archivo Los datos suelen leerse desde archivos externos y no teclearse de modo interactivo. Las capacidades de lectura de archivos de R son sencillas y sus requisitos son bastante estrictos cuando no inflexibles. Se presupone que el usuario es capaz de modificar los archivos de datos con otras herramientas, por ejemplo con editores de texto1 , para ajustarlos a las necesidades de R. Generalmente esta tarea es muy sencilla. La funci´n read.fwf() puede utilizarse para leer un archivo con campos de anchura fija o no delimitados.(Esta funci´n utiliza un programa perl para transformar el archivo en otro o adaptado para su lectura con read.table.) La funci´n count.fields() cuenta el n´mero o u de campos por l´ ınea de un archivo de campos delimitados. Estas dos funciones pueden resolver algunos problemas elementales, pero en la mayor´ de los casos es mejor preparar ıa el archivo a las necesidades de R antes de comenzar el an´lisis. a Si los datos se van a almacena en hojas de datos, m´todo que recomendamos, puede leer e los datos correspondientes a las mismas con la funci´n read.table(). Existe tambi´n una o e funci´n m´s gen´rica, scan(), que puede utilizar directamente. o a e 7.1 La funci´n read.table() o Para poder leer una hoja de datos directamente, el archivo externo debe reunir las condiciones adecuadas. La forma m´s sencilla es: a • La primera l´ınea del archivo debe contener el nombre de cada variable de la hoja de datos. • En cada una de las siguientes l´ıneas, el primer elemento es la etiqueta de la fila, y a continuaci´n deben aparecer los valores de cada variable. o Si el archivo tiene un elemento menos en la primera l´ ınea que en las restantes, obliga- toriamente ser´ el dise˜o anterior el que se utilice. A continuaci´n aparece un ejemplo de a n o las primeras l´ıneas de un archivo, datos.casas, con datos de viviendas, preparado para su lectura con esta funci´n. o ¨ Archivo de entrada con nombres de variables y etiquetas de filas: Precio Superficie ´rea A Habitaciones A~os n Calef 01 52.00 111.0 830 5 6.2 no 02 54.75 128.0 710 5 7.5 no 03 57.50 101.0 1000 5 4.2 no 04 57.50 131.0 690 6 8.8 no 05 59.75 93.0 900 5 1.9 si ... © Predeterminadamente, los elementos num´ricos (excepto las etiquetas de las filas) se e almacenan como variables num´ricas; y los no num´ricos, como Calef, se fuerzan como e e factores. Es posible modificar esta acci´n. o 1 En UNIX puede utilizar el programa perl o los editores sed y awk. Existen versiones para Microsoft Windows.
  • 40. Cap´ ıtulo 7: Lectura de datos de un archivo 34 PreciosCasas - read.table(datos.casas) A menudo no se dispone de etiquetas de filas. En ese caso, tambi´n es posible la lectura e y el programa a˜adir´ unas etiquetas predeterminadas. As´ si el archivo tiene la forma n a ı, siguiente, ¨ Archivo sin etiquetas de filas: Precio Superficie ´rea A Habitaciones A~os n Calef 52.00 111.0 830 5 6.2 no 54.75 128.0 710 5 7.5 no 57.50 101.0 1000 5 4.2 no 57.50 131.0 690 6 8.8 no 59.75 93.0 900 5 1.9 si ... © podr´ leerse utilizando un par´metro adicional a a PreciosCasas - read.table(datos.casas, header=T) donde el par´metro adicional, header=T, indica que la primera l´ a ınea es una l´ ınea de cabeceras y que no existen etiquetas de filas expl´ ıcitas. 7.2 La funci´n scan() o Supongamos que el archivo entrada.txt contiene los datos correspondientes a tres vec- tores, de la misma longitud, el primero de tipo car´cter y los otros dos de tipo num´rico, a e escritos de tal modo que en cada l´ınea aparecen los valores correspondientes de cada uno de ellos. En primer lugar, utilizamos la funci´n scan() para leer los tres vectores, del siguiente o modo entrada - scan(entrada.txt, list(,0,0)) El segundo argumento es una estructura de lista que establece el modo de los tres vec- tores que se van a leer. El resultado se almacena en entrada, que ser´ una lista con tres a componentes correspondientes a los vectores le´ ıdos. Puede referir cada uno de los vectores mediante la indexaci´n: o etiqueta - entrada[[1]]; x - entrada[[2]]; y - entrada[[3]] Tambi´n podr´ haber utilizado nombres en la lista que define el modo de lectura, por e ıa ejemplo entrada - scan(entrada.txt, list(etiqueta=,x=0,y=0)) En este caso, puede referir cada uno de los vectores con la notaci´n $. Si desea acceder o a las variables separadamente deber´, o bien asignarlas a variables del espacio de trabajo, a etiqueta - entrada$etiqueta; x - entrada$x; y - entrada$y o bien conectar la lista completa en la posici´n 2 de la trayectoria de b´squeda (v´ase o u e Secci´n 6.3.4 [Conexion de listas arbitrarias], p´gina 31). o a Si el segundo argumento hubiese sido un s´lo elemento y no una lista, todos los elementos o del archivo deber´ ser del tipo indicado y se hubiesen le´ en un s´lo vector. ıan ıdo o
  • 41. Cap´ ıtulo 7: Lectura de datos de un archivo 35 X - matrix(scan(light.dat, 0), ncol=5, byrow=TRUE) La funci´n scan permite realizar lecturas m´s complejas, como puede consultar en la o a ayuda. 7.3 Acceso a datos internos En la distribuci´n de R se incluyen unos cincuenta objetos con datos, y otros m´s o a se incluyen en las bibliotecas (incluyendo las est´ndar). Para utilizar estos datos, deben a cargarse expl´ıcitamente2 utilizando la funci´n data. Para obtener una lista de los datos o existentes en el sistema base utilice data() y para cargar uno, por ejemplo infert, debe suministrar dicho nombre como argumento de la funci´n data. o data(infert) Normalmente una orden de este tipo carga un objeto del mismo nombre que suele ser una hoja de datos. Sin embargo, tambi´n es posible que se carguen varios objetos, por lo que e en cada caso debe consultar la ayuda interactiva sobre el objeto concreto para conocer exactamente la acci´n que realizar´. o a 7.3.1 Acceso a datos de una biblioteca Para acceder a los datos incluidos en una biblioteca, basta utilizar el argumento package en la funci´n data. Por ejemplo, o data(package=nls) data(Puromycin, package=nls) Si la biblioteca ya ha sido conectada mediante la funci´n library, sus datos habr´n o a sido incluidos autom´ticamente en la trayectoria de b´squeda y no ser´ necesario incluir el a u a argumento package. As´ ı, library(nls) data() data(Puromycin) presentar´ una lista de todos los datos de todas las bibliotecas conectadas en ese momento a (que ser´n al menos la biblioteca base y la biblioteca nls) y posteriormente cargar´ los datos a a Puromycin de la primera librer´ en la trayectoria de b´squeda en que encuentre unos datos ıa u con dicho nombre. Las librer´ creadas por los usuarios son una fuente valiosa de datos. Por supuesto, las ıas notas del Dr. Venables, fuente original de esta introducci´n, contienen un conjunto de datos o que se encuentra disponible en CRAN en la biblioteca Rnotes. 2 En S-Plus la carga expl´ ıcita no es necesaria.
  • 42. Cap´ ıtulo 7: Lectura de datos de un archivo 36 7.4 Edici´n de datos o Una vez creada una estructura de datos, la funci´n data.entry, disponible en algunas o versiones de R, permite modificarla. La orden % x.nuevo - data.entry(x.viejo) edita x.viejo utilizando un entorno similar a una hoja de c´lculo. Al finalizar, el objeto a se almacena en x.nuevo. x.viejo, y por tanto x.nuevo, puede ser una matriz, una hoja de datos, un vector o cualquier objeto at´mico. o Si utiliza la funci´n sin argumentos o x.nuevo - data.entry() permite introducir datos desde una hoja vac´ıa. 7.5 C´mo importar datos o En muchos casos es necesario importar datos desde bases de datos o, en general, desde archivos preparados para otros programas. Se est´n desarrollando varias bibliotecas para a realizar estas tareas. En este momento existe la biblioteca stataread que lee y escribe archivos de Stata, y la biblioteca foreign, en fase experimental, que lee archivos de SAS, Minitab y SPSS. Otras bibliotecas permiten el acceso a bases de datos que soportan SQL3 , y se est´ terminando la biblioteca RODBC para acceder a bases de datos ODBC (tales a como Access en Microsoft Windows). 3 Acr´nimo en ingl´s de Standard Query Language. o e
  • 43. Cap´ ıtulo 8: Distribuciones probabil´ ısticas 37 8 Distribuciones probabil´ ısticas 8.1 Tablas estad´ ısticas R contiene un amplio conjunto de tablas estad´ ısticas. Para cada distribuci´n soportada, o hay funciones que permiten calcular la funci´n de distribuci´n, F (x) = P (X ≤ x), la funci´n o o o de distribuci´n inversa1 , la funci´n de densidad y generar n´meros pseudoaleatorios de la o o u distribuci´n. Las distribuciones son las siguientes: o Distribuci´n o nombre en R argumentos adicionales beta beta shape1, shape2, ncp binomial binom size, prob Cauchy cauchy location, scale ji cuadrado chisq df, ncp exponencial exp rate F de Snedecor f df1, df1, ncp gamma gamma shape, scale geom´trica e geom prob hipergeom´trica e hyper m, n, k log-normal lnorm meanlog, sdlog log´ıstica logis location, scale binomial negativa nbinom size, prob normal norm mean, sd Poisson pois lambda t de Student t df, ncp uniforme unif min, max Weibull weibull shape, scale Wilcoxon wilcox m, n Para construir el nombre de cada funci´n, utilice el nombre de la distribuci´n precedido o o de ‘d’ para la funci´n de densidad, ‘p’ para la funci´n de distribuci´n, ‘q’ para la funci´n o o o o de distribuci´n inversa, y ‘r’ para la generaci´n de n´meros pseudoaleatorios. El primer o o u argumento es x para la funci´n de densidad, q para la funci´n de distribuci´n, p para la o o o funci´n de distribuci´n inversa, y n para la funci´n de generaci´n de n´meros pseudoaleato- o o o o u rios (excepto en el caso de rhyper y rwilcox, en los cuales es nn). En el momento de escribir este manual, el par´metro ncp s´lo est´ disponible pr´cticamente en las funciones a o a a de distribuci´n. Para conocer d´nde puede usarlo utilice la ayuda interactiva. o o Adem´s de las anteriores, existen las funciones ptukey y qtukey para la distribuci´n del a o rango estudentizado de muestras de una distribuci´n normal. o Los siguientes ejemplos clarificar´n estos conceptos: a ## P valor a dos colas de la distribuci´n t_13 o 2*pt(-2.43, df = 13) ## Percentil 1 superior de una distribuci´n F(2, 7) o 1 Dado q, el menor x tal que P (X ≤ x) q
  • 44. Cap´ ıtulo 8: Distribuciones probabil´ ısticas 38 qf(0.99, 2, 7) 8.2 Estudio de la distribuci´n de unos datos o Dados unos datos (unidimensionales), su distribuci´n puede estudiarse de muchas formas. o La m´s sencilla es realizar un resumen estad´ a ıstico, y ello puede obtenerse f´cilmente con a cualquiera de las funciones summary o fivenum; y tambi´n puede realizar un diagrama de e tallo y hojas con la funci´n stem. o data(faithful) attach(faithful) summary(eruptions) Min. 1st Qu. Median Mean 3rd Qu. Max. 1.600 2.163 4.000 3.488 4.454 5.100 fivenum(eruptions) [1] 1.6000 2.1585 4.0000 4.4585 5.1000 stem(eruptions) The decimal point is 1 digit(s) to the left of the | 16 | 070355555588 18 | 000022233333335577777777888822335777888 20 | 00002223378800035778 22 | 0002335578023578 24 | 00228 26 | 23 28 | 080 30 | 7 32 | 2337 34 | 250077 36 | 0000823577 38 | 2333335582225577 40 | 0000003357788888002233555577778 42 | 03335555778800233333555577778 44 | 02222335557780000000023333357778888 46 | 0000233357700000023578 48 | 00000022335800333 50 | 0370 En vez del diagrama de tallo y hojas, puede representar el histograma utilizando la funci´n hist. o hist(eruptions) # define intervalos menores y a~ade un gr´fico de densidad n a hist(eruptions, seq(1.6, 5.2, 0.2), prob=TRUE) lines(density(eruptions, bw=0.1)) rug(eruptions) # muestra los puntos La funci´n density permite realizar gr´ficos de densidad y la hemos utilizado para o a superponer este gr´fico en el ejemplo. La anchura de banda, bw, ha sido elegida probando a varias, ya que el valor predeterminado produce un gr´fico mucho m´s suavizado. Si necesita a a
  • 45. Cap´ ıtulo 8: Distribuciones probabil´ ısticas 39 utilizar m´todos autom´ticos de elecci´n de ancho de banda, utilice las bibliotecas MASS e a o y KernSmooth. Histogram of eruptions 0.7 0.6 0.5 Relative Frequency 0.4 0.3 0.2 0.1 0.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 eruptions Podemos representar la funci´n de distribuci´n emp´ o o ırica mediante la funci´n ecdf de la o biblioteca est´ndar stepfun. a library(stepfun) plot(ecdf(eruptions), do.points=FALSE, verticals=TRUE) Esta distribuci´n, obviamente, no corresponde a ninguna de las distribuciones est´ndar. o a Pero podemos estudiar qu´ ocurre con las erupciones de m´s de tres minutos. Vamos a e a seleccionarlas, ajustarles una distribuci´n normal y superponer la distribuci´n ajustada. o o long - eruptions[eruptions 3] plot(ecdf(long), do.points=FALSE, verticals=TRUE) x - seq(3, 5.4, 0.01) lines(x, pnorm(x, mean=mean(long), sd=sqrt(var(long))), lty=3) ecdf(long) 1.0 0.8 0.6 Fn(x) 0.4 0.2 0.0 3.0 3.5 4.0 4.5 5.0 x Los gr´ficos cuantil-cuantil (Q-Q plots) pueden ayudarnos a examinar los datos m´s a a cuidadosamente.
  • 46. Cap´ ıtulo 8: Distribuciones probabil´ ısticas 40 par(pty=s) qqnorm(long); qqline(long) que muestran un ajuste razonable, aunque la cola de la derecha es m´s corta de lo que ser´ a ıa esperable en una distribuci´n normal. Vamos a compararla con unos datos pseudoaleatorios o tomados de una distribuci´n t5 . o Normal Q−Q Plot 5.0 4.5 Sample Quantiles 4.0 3.5 3.0 −2 −1 0 1 2 Theoretical Quantiles x - rt(250, df = 5) qqnorm(x); qqline(x) que la mayor´ de las veces (recuerde que es una muestra pseudo aleatoria) tendr´ colas m´s ıa a a largas de lo que ser´ esperable en una distribuci´n normal. Podemos realizar un gr´fico ıa o a cuantil-cuantil de estos datos, pero frente a la distribuci´n t5 , mediante o qqplot(qt(ppoints(250), df=5), x, xlab=gr´fico Q-Q de t_5) a qqline(x) Por ultimo, realicemos un contraste de hip´tesis para comprobar la normalidad. La ´ o biblioteca ctest permite realizar el contraste de Shapiro-Wilk library(ctest) shapiro.test(long) Shapiro-Wilk normality test data: long W = 0.9793, p-value = 0.01052 y el contraste de Kolmogorov-Smirnov ks.test(long, pnorm, mean=mean(long), sd=sqrt(var(long))) One-sample Kolmogorov-Smirnov test data: long D = 0.0661, p-value = 0.4284 alternative hypothesis: two.sided
  • 47. Cap´ ıtulo 8: Distribuciones probabil´ ısticas 41 Hemos utilizado los datos como ejemplo de uso de las funciones, sin estudiar si el mismo es v´lido. En este caso no lo ser´ ya que se han estimado los par´metros de la distribuci´n a ıa a o normal a partir de la misma muestra. 8.3 Contrastes de una y de dos muestras Acabamos de comparar una muestra con una distribuci´n normal, pero es mucho m´s o a habitual comparar aspectos de dos muestras. Consideremos los siguientes datos, tomados de Rice (1995, p.490), del calor latente en la fusi´n del hielo expresados en cal/gm. o M´todo A: 79.98 80.04 80.02 80.04 80.03 80.03 80.04 79.97 e 80.05 80.03 80.02 80.00 80.02 M´todo B: 80.02 79.94 79.98 79.97 79.97 80.03 79.95 79.97 e Podemos comparar gr´ficamente las dos muestras mediante un diagrama de cajas. a A - scan() 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 - scan() 80.02 79.94 79.98 79.97 79.97 80.03 79.95 79.97 boxplot(A, B) que muestra claramente que el primer grupo tiende a tener mayores resultados que el se- gundo. 80.04 80.02 80.00 79.98 79.96 79.94 1 2 Para contrastar la igualdad de medias de las dos poblaciones, se puede utilizar el con- traste t de Student para dos muestras independientes, del siguiente modo: t.test(A, B) Welch Two Sample t-test data: A and B t = 3.2499, df = 12.027, p-value = 0.00694
  • 48. Cap´ ıtulo 8: Distribuciones probabil´ ısticas 42 alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: 0.01385526 0.07018320 sample estimates: mean of x mean of y 80.02077 79.97875 que indica una diferencia significativa (Bajo las condiciones del modelo, incluida la norma- lidad). Esta funci´n, de modo predeterminado, no presupone que las varianzas son iguales o (al contrario que la funci´n an´loga de S-Plus, t.test). Si desea contrastar la igualdad o a de varianzas, puede utilizar la funci´n var.test de la biblioteca ctest. o library(ctest) var.test(A, B) F test to compare two variances data: A and B F = 0.5837, num df = 12, denom df = 7, p-value = 0.3938 alternative hypothesis: true ratio of variances is not equal to 1 95 percent confidence interval: 0.1251097 2.1052687 sample estimates: ratio of variances 0.5837405 que no muestra evidencia de diferencias significativas (Bajo las condiciones del modelo, que incluyen normalidad). Si hubi´semos admitido esta hip´tesis previamente, podr´ e o ıamos haber realizado un contraste m´s potente, como el siguiente: a t.test(A, B, var.equal=TRUE) Two Sample t-test data: A and B t = 3.4722, df = 19, p-value = 0.002551 alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: 0.01669058 0.06734788 sample estimates: mean of x mean of y 80.02077 79.97875 Como hemos indicado, una de las condiciones de aplicaci´n de los contrastes anteriores o es la normalidad. Si ´sta falla, puede utilizar el contraste de dos muestras de Wilcoxon (o e de Mann-Whitney) que solo presupone en la hip´tesis nula que la distribuci´n com´n es o o u continua. library(ctest) wilcox.test(A, B) Wilcoxon rank sum test with continuity correction
  • 49. Cap´ ıtulo 8: Distribuciones probabil´ ısticas 43 data: A and B W = 89, p-value = 0.007497 alternative hypothesis: true mu is not equal to 0 Warning message: Cannot compute exact p-value with ties in: wilcox.test(A, B) Advierta el mensaje de advertencia (Warning . . . ): Existen valores repetidos en cada mues- tra, lo que sugiere que los datos no proceden de una distribuci´n continua (puede que ello o ocurra debido al redondeo). Adem´s del diagrama de cajas, existen m´s m´todos para comparar gr´ficamente dos a a e a muestras. As´ las ordenes siguientes: ı, ´ library(stepfun) plot(ecdf(A), do.points=FALSE, verticals=TRUE, xlim=range(A, B)) plot(ecdf(B), do.points=FALSE, verticals=TRUE, add=TRUE) representan las dos funciones de distribuci´n emp´ o ıricas. Por otra parte la funci´n qqplot o realizar´ un gr´fico cuantil-cuantil de las dos muestras. ıa a El contraste de Kolmogorov-Smirnov, que s´lo presupone que la distribuci´n com´n es o o u continua, tambi´n puede aplicarse: e ks.test(A, B) Two-sample Kolmogorov-Smirnov test data: A and B D = 0.5962, p-value = 0.05919 alternative hypothesis: two.sided Warning message: cannot compute correct p-values with ties in: ks.test(A, B) si´ndole de aplicaci´n la misma precauci´n del contraste de Wilcoxon. e o o
  • 50. Cap´ ıtulo 9: Ciclos. Ejecuci´n condicional o 44 9 Ciclos. Ejecuci´n condicional o 9.1 Expresiones agrupadas R es un lenguaje de expresiones, en el sentido de que el unico tipo de orden que posee es ´ una funci´n o expresi´n que devuelve un resultado. Incluso una asignaci´n es una expresi´n, o o o o cuyo resultado es el valor asignado1 y que puede utilizarse en cualquier sitio en que pueda utilizarse una expresi´n. En particular es posible realizar asignaciones m´ltiples. o u Las ´rdenes pueden agruparse entre llaves, {expr 1;. . . ; expr m}, en cuyo caso el o valor del grupo es el resultado de la ultima expresi´n del grupo que se haya evaluado. ´ o Puesto que un grupo es por s´ mismo una expresi´n, puede incluirse entre par´ntesis y ser ı o e utilizado como parte de una expresi´n mayor. Este proceso puede repetirse si se considera o necesario. ´ 9.2 Ordenes de control 9.2.1 Ejecuci´n condicional: la orden if o Existe una construcci´n condicional de la forma o if (expr 1) expr 2 else expr 3 donde expr 1 debe producir un valor l´gico, y si ´ste es verdadero, (T), se ejecutar´ expr 2. o e a Si es falso, (F), y se ha escrito la opci´n else, que es opcional, se ejecutar´ expr 3. o a A menudo suelen utilizarse los operadores y || como condiciones de una orden if. En tanto que y | se aplican a todos los elementos de un vector, y || se aplican a vectores de longitud uno y s´lo eval´an el segundo argumento si es necesario, esto es, si el o u valor de la expresi´n completa no se deduce del primer argumento. o Existe una versi´n vectorizada de la construcci´n if/else, que es la funci´n ifelse, o o o que tiene la forma ifelse(condici´n, a, b) y devuelve un vector cuya longitud es la del o m´s largo de sus argumentos y cuyo elemento i es a[i] si condici´n[i] es cierta, y b[i] a o en caso contrario. ´ 9.2.2 Ciclos: Ordenes for, repeat y while Existe una construcci´n repetitiva de la forma o for (nombre in expr 1) expr 2 donde nombre es la variable de control de iteraci´n, expr 1 es un vector (a menudo de la o forma m:n), y expr 2 es una expresi´n, a menudo agrupada, en cuyas sub-expresiones puede o aparecer la variable de control, nombre. expr 2 se eval´a repetidamente conforme nombre u recorre los valores del vector expr 1. Por ejemplo, suponga que ind es un vector de indicadores de clase y se quieren hacer gr´ficos de y sobre x, separados para cada clase. Una posibilidad es usar la funci´n a o coplot(), que veremos m´s adelante, que produce una matriz de gr´ficos correspondientes a a a cada nivel del factor. Otra forma de hacerlo es usar la funci´n for: o 1 La asignaci´n devuelve el resultado de modo invisible. Basta escribirla entre par´ntesis para comprobarlo. o e
  • 51. Cap´ ıtulo 9: Ciclos. Ejecuci´n condicional o 45 xc - split(x, ind) yc - split(y, ind) for (i in 1:length(yc)) { plot(xc[[i]], yc[[i]]); abline(lsfit(xc[[i]], yc[[i]])) } La funci´n split() produce una lista de vectores dividiendo un vector de acuerdo a las o clases especificadas por un factor. Consulte la ayuda para obtener m´s detalles. a Nota: En R, la funci´n for() se utiliza mucho menos que en lenguajes tradi- o cionales, ya que no aprovecha las estructuras de los objetos. El c´digo que o trabaja directamente con las estructuras completas suele ser m´s claro y m´s a a r´pido. a Otras estructuras de repetici´n son o repeat expr y while (condici´n) expr o La funci´n break se utiliza para terminar cualquier ciclo. Esta es la unica forma (salvo o ´ que se produzca un error) de finalizar un ciclo repeat. La funci´n next deja de ejecutar el resto de un ciclo y pasa a ejecutar el siguiente2 . o Las ´rdenes de control se utilizan habitualmente en la escritura de funciones, que se o tratar´n en el Cap´ a ıtulo 10 [Escritura de funciones], p´gina 46, donde se ver´n varios ejem- a a plos. 2 No existe equivalente para esta orden en Fortran o Basic
  • 52. Cap´ ıtulo 10: Escritura de nuevas funciones 46 10 Escritura de nuevas funciones Como hemos visto informalmente hasta ahora, R permite crear objetos del modo func- tion, que constituyen nuevas funciones de R, que se pueden utilizar a su vez en expresiones posteriores. En este proceso, el lenguaje gana considerablemente en potencia, comodidad y elegancia, y aprender a escribir funciones utiles es una de las mejores formas de conseguir ´ que el uso de R sea c´modo y productivo. o Debemos recalcar que muchas de las funciones que se suministran con R, como mean, var o postscript, est´n de hecho escritas en R y, por tanto, no difieren materialmente de a las funciones que pueda escribir el usuario. Para definir una funci´n debe realizar una asignaci´n de la forma o o NombreDeFuncion -function(arg 1, arg 2, ...) expresi´n o donde expresi´n es una expresi´n de R (normalmente una expresi´n agrupada) que utiliza o o o los argumentos arg i para calcular un valor que es devuelto por la funci´n. o El uso de la funci´n es normalmente de la forma NombreDeFuncion(expr 1,expr 2,...) o y puede realizarse en cualquier lugar en que el uso de una funci´n sea correcto. o 10.1 Ejemplos elementales En primer lugar, consideremos una funci´n que calcule el estad´ o ıstico t de Student para dos muestras realizando “todos los pasos”. Este es un ejemplo muy artificial, naturalmente, ya que hay otros modos, mucho m´s sencillos, de obtener el mismo resultado. a La funci´n se define del siguiente modo: o DosMuestras - function(y1, y2) { n1 - length(y1); n2 - length(y2) yb1 - mean(y1); yb2 - mean(y2) s1 - var(y1); s2 - var(y2) s - ((n1-1)*s1 + (n2-1)*s2)/(n1+n2-2) tst - (yb1 - yb2)/sqrt(s2*(1/n1 + 1/n2)) tst } Una vez definida esta funci´n, puede utilizarse para realizar un contraste de t de Student o para dos muestras, del siguiente modo: tStudent - DosMuestras(datos$hombre, datos$mujer); tStudent En segundo lugar, considere por ejemplo la creaci´n de una funci´n1 que calcule los o o coeficientes de la proyecci´n ortogonal del vector y sobre el espacio de las columnas de la o matriz X, esto es, la estimaci´n de los coeficientes de regresi´n por m´ o o ınimos cuadrados. Esta tarea se realizar´ normalmente con la funci´n qr(); sin embargo es algo compleja y ıa o compensa tener una funci´n como la siguiente para usarla directamente. o Dado un vector, yn×1 , y una matriz, Xn×p , entonces definimos Xy del siguiente modo: (X X)− X y, donde (X X)− es la inversa generalizada de X X. Podemos definir la funci´n Proyeccion del siguiente modo o 1 En Matlab, ser´ la orden ıa
  • 53. Cap´ ıtulo 10: Escritura de nuevas funciones 47 Proyeccion - function(X, y) { X - qr(X) qr.coef(X, y) } Una vez creada, puede utilizarla en cualquier expresi´n, como en la siguiente: o CoefReg - Proyeccion(matrizX, variabley) La funci´n lsfit() realiza la misma acci´n2 . Tambi´n utiliza las funciones qr() y o o e qr.coef() en la forma anterior para realizar esta parte del c´lculo. Por lo tanto puede ser a interesante haber aislado esta parte en una funci´n si se va a utilizar frecuentemente. Si o ello es as´ probablemente ser´ conveniente construir un operador binario matricial para ı, ıa que el uso sea m´s c´modo. a o 10.2 C´mo definir un operador binario o Si hubi´semos dado a la funci´n Proyeccion un nombre delimitado por s´ e o ımbolos de porcentaje, %, por ejemplo de la forma %barra% podr´ utilizarse como un operador binario en vez de con la forma funcional. Suponga, por ıa ejemplo, que elige3 como nombre, entre los s´ ımbolos de porcentaje, el de !. La definici´n o de la funci´n deber´ comenzar as´ o ıa ı: %!% - function(X, y) { ... } donde hay que destacar la utilizaci´n de comillas. Una vez definida la funci´n se utilizar´ o o ıa de la forma X %!% y. Los operadores producto matricial, %*%, y producto exterior, %o%, son ejemplos de ope- radores binarios definidos de esta forma. 10.3 Argumentos con nombre. Valores predeterminados Ya vimos en la Secci´n 2.3 [Generacion de sucesiones], p´gina 9 que cuando los argumen- o a tos se dan por nombre, “nombre=objeto”, el orden de los mismos es irrelevante. Adem´s a pueden utilizarse ambas formas simult´neamente: se puede comenzar dando argumentos a por posici´n y despu´s a˜adir argumentos por nombre. o e n Esto es, si la funci´n fun1 est´ definida como o a fun1 - function(datos, hoja.datos, grafico, limite) { [aqu´ ir´ la definici´n] ı ıa o } las siguientes llamadas a la funci´n son equivalentes: o resultado - fun1(d, hd, T, 20) resultado - fun1(d, hd, grafico=T, limite=20) resultado - fun1(datos=d, limite=20, grafico=T, hoja.datos=hd) 2 Vea tambi´n los m´todos descritos en Cap´ e e ıtulo 11 [Modelos estadisticos en R], p´gina 55 a 3 El uso del s´ımbolo para el nombre, como en Matlab, no es una elecci´n conveniente, ya que presenta o ciertos problemas en este contexto.
  • 54. Cap´ ıtulo 10: Escritura de nuevas funciones 48 En muchos casos, puede suministrarse un valor predeterminado para algunos argumentos, en cuyo caso al ejecutar la funci´n el argumento puede omitirse si el valor predeterminado o es apropiado. Por ejemplo, si fun1 estuviese definida como fun1 - function(datos, hoja.datos, grafico=TRUE, limite=20) { ... } la llamada a la funci´n o resultado - fun1(d, hd) ser´ equivalente a cualquiera de las tres llamadas anteriores. Tenga en cuenta que puede ıa modificar los valores predeterminados, como en el caso siguiente: resultado - fun1(d, hd, limite=10) Es importante destacar que los valores predeterminados pueden ser expresiones arbi- trarias, que incluso involucren otros argumentos de la misma funci´n, y no est´n restringidos o a a ser constantes como en el ejemplo anterior. 10.4 El argumento ‘...’ Otra necesidad frecuente es la de que una funci´n pueda pasar los valores de sus argu- o mentos a otra funci´n. Por ejemplo, muchas funciones gr´ficas, como plot(), utilizan la o a funci´n par(), y permiten al usuario pasar los par´metros gr´ficos a par() para contro- o a a lar el resultado gr´fico. (V´ase Secci´n 12.4.1 [La funcion par()], p´gina 76 para detalles a e o a adicionales sobre la funci´n par().) Esta acci´n puede realizarse incluyendo un argumento o o adicional, “...”, en la funci´n, que puede ser traspasado. A continuaci´n se incluye un o o bosquejo de ejemplo. fun1 - function(datos, hoja.datos, grafico=TRUE, limite=20, ...) { [Algunas ´rdenes] o if (grafico) par(pch=*, ...) [M´s ´rdenes] a o } 10.5 Asignaciones dentro de una funci´n o Es fundamental tener en cuenta que cualquier asignaci´n ordinaria realizada dentro de o una funci´n es local y temporal y se pierde tras salir de la funci´n. Por tanto, la asignaci´n o o o X - qr(X) no afecta al valor del argumento de la funci´n en que se utiliza. o Para comprender completamente las reglas que gobiernan el ´mbito de las asignaciones a en R es necesario familiarizarse con la noci´n de marco (frame) de evaluaci´n. Este es un o o tema complejo que no ser´ tratado en este manual. a Si desea realizar asignaciones globales y permanentes dentro de una funci´n, deber´ o a utilizar el operador de ‘superasignaci´n’, -, o la funci´n assign. Puede encontrar una o o explicaci´n m´s detallada consultando la ayuda. o a El operador - es diferente en R y en S-Plus. Las diferencias ser´n tratadas en la a Secci´n 10.7 [Ambito], p´gina 51. o a
  • 55. Cap´ ıtulo 10: Escritura de nuevas funciones 49 10.6 Ejemplos m´s complejos a 10.6.1 Factores de eficiencia en dise˜ o en bloques n Estudiaremos ahora un ejemplo de funci´n m´s complejo: el c´lculo de factores de o a a eficiencia en un dise˜o en bloques. (Algunos aspectos de este problema ya han sido tratados n en la Secci´n 5.3 [Variables indexadas utilizadas como indices], p´gina 21.) o a Un dise˜o en bloques est´ definido por dos factores, por ejemplo bloques (b niveles) y n a variedades, (v niveles). Si Rv×v y Kb×b son las matrices de r´plicas y tama˜o de bloque, e n y Nb×v , es la matriz de incidencia, entonces los factores de eficiencia se definen como los autovalores de la matriz E = Iv − R−1/2 N K −1 N R−1/2 = Iv − A A, donde A = K −1/2 N R−1/2 . Por ejemplo, la funci´n podr´ escribirse as´ o ıa ı: EfiDisBlo - function(bloques, variedades) { bloques - as.factor(bloques) # peque˜a precauci´n n o b - length(levels(bloques)) variedades - as.factor(variedades) # peque˜a precauci´n n o v - length(levels(variedades)) K - as.vector(table(bloques)) # elimina el atributo dim R - as.vector(table(variedades)) # elimina el atributo dim N - table(bloques, variedades) A - 1/sqrt(K) * N * rep(1/sqrt(R), rep(b, v)) sv - svd(A) list(eficiencia=1 - sv$d^2, cvbloques=sv$u, cvvariedad=sv$v) } Desde el punto de vista num´rico, es levemente mejor trabajar con la funci´n descom- e o posici´n SVD en vez de con la funci´n de los autovalores. o o El resultado de esta funci´n es una lista que contiene los factores de eficiencia como o primera componente, y que adem´s incluye dos contrastes, puesto que, a veces, suministran a informaci´n adicional util. o ´ 10.6.2 C´mo eliminar los nombres al imprimir una variable o indexada Para imprimir grandes matrices o variables indexadas en general, a menudo es interesante hacerlo en forma compacta sin los nombres de variables. La simple eliminaci´n del atributo o dimnames no es suficiente, sino que la soluci´n consiste en asignar a dicho atributo cadenas o de caracteres vac´ ıas. Por ejemplo, para imprimir la matriz X puede escribir temp - X dimnames(temp) - list(rep(, nrow(X)), rep(, ncol(X)) temp; rm(temp) Este resultado puede conseguirse f´cilmente definiendo la funci´n SinNombres, que a o aparece a continuaci´n, que da un peque˜o rodeo para conseguir el mismo resultado al o n
  • 56. Cap´ ıtulo 10: Escritura de nuevas funciones 50 tiempo que ilustra el hecho de que las funciones pueden ser cortas y al mismo tiempo muy efectivas y utiles. ´ SinNombres - function(a) { ## Elimina los nombres de dimensiones para impresi´n compacta. o d - list() l - 0 for(i in dim(a)) { d[[l - l + 1]] - rep(, i) } dimnames(a) - d a } Una vez definida la funci´n, para imprimir la matriz X en forma compacta basta con o escribir SinNombres(X) Esta funci´n es de especial utilidad al imprimir variables indexadas de tipo entero y de o gran tama˜o, en que el inter´s real se centra m´s en los posibles patrones que en los valores n e a en s´ mismos. ı 10.6.3 Integraci´n num´rica recursiva o e Las funciones pueden ser recursivas e, incluso, pueden definir funciones en su interior. Advierta, sin embargo, que dichas funciones, y por supuesto las variables, no son heredadas por funciones llamadas en marcos de evaluaci´n superior, como lo ser´ si estuviesen en la o ıan trayectoria de b´squeda. u El ejemplo siguiente muestra una forma, un tanto ingenua, de realizar integraci´n o num´rica unidimensional recursivamente. El integrando se eval´a en los extremos del e u intervalo y en el centro. Si el resultado de aplicar la regla del trapecio a un solo intervalo es bastante pr´xima al resultado de aplicarlo a los dos, entonces este ultimo valor se o ´ considera el resultado. En caso contrario se aplica el procedimiento a cada uno de los dos intervalos. El resultado es un proceso de integraci´n adaptativo que concentra las o evaluaciones de la funci´n en las regiones en que es menos lineal. Conlleva, sin embargo, o un gran consumo de recursos, y la funci´n solo es competitiva con otros algoritmos cuando o el integrando es al tiempo suave y dif´ de evaluar. El ejemplo es tambi´n un peque˜o ıcil e n rompecabezas de programaci´n en R. o area - function(f, a, b, eps = 1.0e-06, lim = 10) { fun1 - function(f, a, b, fa, fb, a0, eps, lim, fun) { ## La funci´n ‘fun1’ s´lo es visible dentro de ‘area’ o o d - (a + b)/2 h - (b - a)/4 fd - f(d) a1 - h * (fa + fd) a2 - h * (fd + fb) if(abs(a0 - a1 - a2) eps || lim == 0) return(a1 + a2) else { return(fun(f, a, d, fa, fd, a1, eps, lim - 1, fun) +
  • 57. Cap´ ıtulo 10: Escritura de nuevas funciones 51 fun(f, d, b, fd, fb, a2, eps, lim - 1, fun)) } } fa - f(a) fb - f(b) a0 - ((fa + fb) * (b - a))/2 fun1(f, a, b, fa, fb, a0, eps, lim, fun1) } ´ 10.7 Ambito Este apartado es algo m´s t´cnico que otras partes de este documento. Sin embargo, a e pormenoriza una de las mayores diferencias entre S-Plus y R. Los s´ımbolos que tienen lugar en el cuerpo de una funci´n se dividen en tres clases: o par´metros formales, variables locales y variables libres. Los par´metros formales son los a a que aparecen en la lista de argumentos de la funci´n y sus valores quedan determinados o por el proceso de asignaci´n de los argumentos de la funci´n a los par´metros formales. o o a Las variables locales son aquellas cuyos valores est´n determinados por la evaluaci´n de a o expresiones en el cuerpo de las funciones. Las variables que no son par´metros formales a ni variables locales se denominan variables libres. Las variables libres se transforman en variables locales si se les asigna valor. Para aclarar los conceptos, consideremos la siguiente funci´n: o f - function(x) { y - 2*x print(x) print(y) print(z) } En esta funci´n, x es un par´metro formal, y es una variable local y z es una variable o a libre. En R la asignaci´n de valor a una variable libre se realiza consultando el entorno en el o que la funci´n se ha creado, lo que se denomina ´mbito l´xico. En primer lugar definamos o a e la funci´n cubo: o cubo - function(n) { sq - function() n*n n*sq() } La variable n de la funci´n sq no es un argumento para esta funci´n. Por tanto es una o o variable libre y las reglas de ´mbito deben utilizarse para determinar el valor asociado con a ella. En un ´mbito est´tico (como en S-Plus) el valor es el asociado con una variable global a a llamada n. En un ´mbito l´xico (como en R) es un par´metro para la funci´n cubo puesto a e a o que hay una asignaci´n activa para la variable n en el momento en que se define la funci´n o o sq. La diferencia de evaluaci´n entre R y S-Plus es que S-Plus intenta encontrar una o variable global llamada n en tanto que R primero intenta encontrar una variable llamada n en el entorno creado cuando se activ´ cubo. o ## primera evaluaci´n en S o
  • 58. Cap´ ıtulo 10: Escritura de nuevas funciones 52 S cubo(2) Error in sq(): Object n not found Dumped S n - 3 S cubo(2) [1] 18 ## la misma funci´n evaluada en R o R cubo(2) [1] 8 El ´mbito lexicogr´fico puede utilizarse para conceder a las funciones un estado cam- a a biante. En el siguiente ejemplo mostramos c´mo puede utilizarse R para simular una cuenta o bancaria. Una cuenta bancaria necesita tener un balance o total, una funci´n para realizar o dep´sitos, otra para retirar fondos, y una ultima para conocer el balance. o ´ Conseguiremos esta capacidad creando tres funciones dentro de anota.importe y de- volviendo una lista que los contiene. Cuando se ejecuta anota.importe toma un argumento num´rico, total, y devuelve una lista que contiene las tres funciones. Puesto que estas fun- e ciones est´n definidas dentro de un entorno que contiene a total, ´stas tendr´n acceso a a e a su valor. El operador de asignaci´n especial, -, se utiliza para cambiar el valor asociado con o total. Este operador comprueba los entornos creados desde el actual hasta el primero hasta encontrar uno que contenga el s´ ımbolo total y cuando lo encuentra, sustituye su valor en dicho entorno por el valor de la derecha de la expresi´n. Si se alcanza el nivel o superior, correspondiente al entorno global, sin encontrar dicho s´ ımbolo, entonces lo crea en ´l y realiza la asignaci´n. Para muchos usos, - crea una variable global y le asigna e o el valor de la derecha de la expresi´n4 . Solo cuando - ha sido utilizado en una funci´n o o que ha sido devuelta como el valor de otra funci´n ocurrir´ la conducta especial que hemos o a descrito. anota.importe - function(total) { list( deposito = function(importe) { if(importe = 0) stop(Los dep´sitos deben ser positivos!n) o total - total + importe cat(Depositado,importe,. El total es, total, nn) }, retirada = function(importe) { if(importe total) stop(No tiene tanto dinero!n) total - total - importe cat(Descontado, importe,. El total es, total,nn) }, balance = function() { cat(El total es, total,nn) } ) 4 En cierto sentido esto emula la conducta en S-Plus puesto que en S-Plus este operador siempre crea o asigna a una variable global.
  • 59. Cap´ ıtulo 10: Escritura de nuevas funciones 53 } Antonio - anota.importe(100) Roberto - anota.importe(200) Antonio$retirada(30) Antonio$balance() Roberto$balance() Antonio$deposit(50) Antonio$balance() Antonio$retirada(500) 10.8 Personalizaci´n del entorno o El usuario de R puede adaptar el entorno de trabajo a sus necesidades de varias formas. Existe un archivo de inicializaci´n del sistema y cada directorio puede tener su propio o archivo de inicializaci´n especial. Por ultimo, puede usar las funciones especiales .First y o ´ .Last. El archivo de inicializaci´n del sistema se denomina Rprofile y se encuentra en el o subdirectorio library del directorio inicial de R. Las ´rdenes contenidas en este archivo o se ejecutan cada vez que se comienza una sesi´n de R, sea cual sea el usuario. Existe un o segundo archivo, personal, denominado .Rprofile5 que puede estar en cualquier directorio. Si ejecuta R desde un directorio que contenga este archivo, se ejecutar´n las ´rdenes que a o incluya. Este archivo permite a cada usuario tener control sobre su espacio de trabajo y permite disponer de diferentes m´todos de inicio para diferentes directorios de trabajo. e Si no existe el archivo .Rprofile en el directorio inicial, entonces R buscar´ si existe el a archivo .Rprofile en el directorio inicial del usuario y, si existe, lo utilizar´. a Si existe la funci´n .First() (en cualquiera de los dos archivos de perfil o en el archivo o de imagen ‘.RData’) recibir´ un tratamiento especial, ya que se ejecutar´ al comienzo de a a la sesi´n de R, y por tanto puede utilizarse para inicializar el entorno. Por ejemplo, la o definici´n del siguiente ejemplo sustituye el s´ o ımbolo de R para que sea $ y establece otras caracter´ısticas que quedan establecidas en el resto de la sesi´n. o En resumen, la secuencia en que se ejecutan los archivos es, ‘Rprofile’, ‘.Rprofile’, ‘.RData’ y por ultimo la funci´n .First(). Recuerde que cualquier definici´n en un archivo ´ o o posterior enmascarar´ las de un archivo precedente. a .First - function() { options(prompt=$ , continue=+t) # $ ser´ el s´ a ımbolo de sistema options(digits=5, length=999) # personaliza n´meros y resultados u x11() # abre una ventana para gr´ficos a par(pch = +) # car´cter para realizaci´n de gr´ficos a o a 5 Por tanto, al comenzar su nombre con un punto, en UNIX, ser´ un archivo oculto. a
  • 60. Cap´ ıtulo 10: Escritura de nuevas funciones 54 source(paste(getwd(), /R/MisOrdenes.R, sep = )) # ejecuta las ´rdenes contenidas en MisOrdenes.R o library(stepfun) # conecta la biblioteca stepfun } De modo an´logo, si existe la funci´n .Last(), se ejecutar´ al t´rmino de la sesi´n. A a o a e o continuaci´n se muestra un ejemplo de esta funci´n. o o .Last - function() { Graficos.off() # Una peque˜a medida de seguridad. n cat(paste(system.date(),nAdi´sn)) o # Ya es la hora de irse. } 10.9 Clases. Funciones gen´ricas. Orientaci´n a objetos e o La clase de un objeto determina de qu´ modo ser´ tratado por lo que se conoce como e a funciones gen´ricas. Volviendo la oraci´n por pasiva, una funci´n ser´ gen´rica si realiza e o o a e una tarea o acci´n sobre sus argumentos espec´ o ıfica de la clase de cada argumento. Si el argumento carece del atributo clase, o lo posee de uno no contemplado espec´ ıficamente por la funci´n gen´rica en cuesti´n, se suministra una acci´n predeterminada. o e o o El mecanismo de clase ofrece al usuario la posibilidad de dise˜ar y escribir funciones n gen´ricas para prop´sitos especiales. Entre otras funciones gen´ricas se encuentran plot(), e o e para representar objetos gr´ficamente, summary(), para realizar an´lisis descriptivos de a a varios tipos, y anova(), para comparar modelos estad´ ısticos. El n´mero de funciones gen´ricas que pueden tratar una clase de modo espec´ u e ıfico puede ser muy grande. Por ejemplo, entre las funciones que pueden tratar de modo espec´ ıfico objetos de la clase data.frame se encuentran [ [[- any as.matrix [- model plot summary Puede obtener la lista completa utilizando la funci´n methods: o methods(class=data.frame) Como es esperable, el n´mero de clases que una funci´n gen´rica puede tratar tambi´n u o e e puede ser grande. Por ejemplo, la funci´n plot() tiene variantes, entre otras, para las o siguientes clases de objetos: data.frame default density factor Tambi´n en este caso puede obtener la lista completa actual utilizando la funci´n methods: e o methods(plot)
  • 61. Cap´ ıtulo 11: Modelos estad´ ısticos en R 55 11 Modelos estad´ ısticos en R En este apartado, suponemos al lector familiarizado con la terminolog´ estad´ ıa ıstica, en particular con el an´lisis de regresi´n y el an´lisis de varianza. Posteriormente haremos a o a algunas suposiciones m´s ambiciosas, particularmente el conocimiento de modelos lineales a generalizados y regresi´n no lineal. o Los requisitos para el ajuste de modelos estad´ ısticos est´n suficientemente bien definidos a para hacer posible la construcci´n de herramientas generales de aplicaci´n a un amplio o o espectro de problemas. R contiene un conjunto de posibilidades que hace que el ajuste de modelos estad´ ısticos sea muy simple. Como hemos mencionado en la introducci´n, la salida b´sica es m´ o a ınima, y es necesario utilizar las funciones extractoras para obtener todos los detalles. 11.1 Definici´n de modelos estad´ o ısticos. F´rmulas o El ejemplo b´sico de un modelo estad´ a ıstico es un modelo de regresi´n lineal con errores o independientes y homosced´sticos a p yi = βj xij + ei , ei ∼ NID(0, σ 2 ), i = 1, . . . , n j=0 En notaci´n matricial puede escribirse o y = Xβ + e donde y es el vector de respuesta, y X es la matriz del modelo o matriz de dise˜o, formada n por las columnas x0 , x1 , . . . , xp , que son las variables predictoras. Muy a menudo x0 ser´ a una columna de unos y definir´ el punto de corte o t´rmino independiente. a e Ejemplos Antes de dar una definici´n formal, algunos ejemplos ayudar´n a centrar las ideas. o a Supongamos que y, x, x0, x1, x2, . . . son variables num´ricas, que X es una matriz y que e A, B, C, . . . son factores. Las f´rmulas que aparecen en la parte izquierda de la siguiente o tabla, especifican los modelos estad´ ısticos descritos en la parte de la derecha. y∼x y∼1+x Ambos definen el mismo modelo de regresi´n lineal de y sobre x. El primero o contiene el t´rmino independiente impl´ e ıcito y el segundo, expl´ ıcito. y∼0+x y ∼ -1 + x y ∼ x - 1 Regresi´n lineal de y sobre x sin t´rmino independiente, esto es, que pasa por o e el origen de coordenadas. log(y) ∼ x1 + x2 Regresi´n m´ltiple de la variable transformada, log(y), sobre x 1 y x 2 (con un o u t´rmino independiente impl´ e ıcito).
  • 62. Cap´ ıtulo 11: Modelos estad´ ısticos en R 56 y ∼ poly(x,2) y ∼ 1 + x + I(x^2) Regresi´n polinomial de y sobre x de segundo grado. La primera forma utiliza o polinomios ortogonales y la segunda utiliza potencias de modo expl´ ıcito. y ∼ X + poly(x,2) Regresi´n m´ltiple de y con un modelo matricial consistente en la matriz X y o u t´rminos polinomiales en x de segundo grado. e y∼A An´lisis de varianza de entrada simple de y, con clases determinadas por A. a y∼A+x An´lisis de covarianza de entrada simple de y, con clases determinadas por A, a y con covariante x. y ∼ A*B y ∼ A + B + A:B y ∼ B %in% A y ∼ A/B Modelo no aditivo de dos factores de y sobre A y B. Los dos primeros es- pecifican la misma clasificaci´n cruzada y los dos ultimos especifican la misma o ´ clasificaci´n anidada. En t´rminos abstractos, los cuatro especifican el mismo o e subespacio de modelos. y ∼ (A + B + C)^2 y ∼ A*B*C - A:B:C Experimento con tres factores con un modelo que contiene efectos principales e interacciones de dos factores solamente. Ambas f´rmulas especifican el mismo o modelo. y∼A*x y ∼ A/x y ∼ A/(1 + x) - 1 Modelos de regresi´n lineal simple separados de y sobre x para cada nivel de o A. La ultima forma produce estimaciones expl´ ´ ıcitas de tantos t´rminos inde- e pendientes y pendientes como niveles tiene A. y ∼ A*B + Error(C) Un experimento con dos factores de tratamiento, A y B, y estratos de error determinados por el factor C. Por ejemplo, un experimento split plot, con gr´ficos completos (y por tanto tambi´n subgr´ficos) determinados por el factor a e a C. El operador ∼ se utiliza para definir una f´rmula de modelo en R. La forma, para un o modelo lineal ordinario es respuesta ∼ op 1 term 1 op 2 term 2 op 3 term 3 . . . donde respuesta es un vector o una matriz (o una expresi´n que eval´e a un vector o matriz) o u que definen, respectivamente, la o las variables respuesta op i es un operador, bien +, bien -, que implica la inclusi´n o exclusi´n, respectiva- o o mente, de un t´rmino en el modelo. El primero, +, es opcional. e term i es un t´rmino de uno de los siguientes tipos e
  • 63. Cap´ ıtulo 11: Modelos estad´ ısticos en R 57 • una expresi´n vectorial, una expresi´n matricial, o el n´mero 1; o o o u • un factor; o • una expresi´n de f´rmula consistente en factores, vectores o matrices conec- o o tados mediante operadores de f´rmula. o En todos los casos, cada t´rmino define una colecci´n de columnas que deben e o ser a˜adidas o eliminadas de la matriz del modelo. Un 1 significa un t´rmino n e independiente y est´ incluido siempre, salvo que se elimine expl´ a ıcitamente. Los operadores de f´rmula son similares a la notaci´n de Wilkinson y Rogers utilizada en o o los programas Glim y Genstat. Un cambio inevitable es que el operador ‘.’ se ha sustituido por ‘:’ puesto que el punto es un car´cter v´lido para nombres de objetos en R. Un resumen a a de la notaci´n se encuentra en la siguiente tabla (basada en Chambers Hastie, 1992, p.29). o Y ∼M Y se modeliza como M. M1 +M2 Incluye M 1 y M 2. M1 -M2 Incluye M 1 exceptuando los t´rminos de M 2. e M1 :M2 El producto tensorial de M 1 y M 2. Si ambos son factores, corresponde al factor “subclases”. M 1 %in% M 2 Similar a M 1:M 2, pero con diferente codificaci´n. o M1 *M2 M 1 + M 2 + M 1:M 2. M1 /M2 M 1 + M 2 %in% M 1. M ^n Todos los t´rminos de M junto a las “interacciones” hasta el orden n e I(M ) A´ M. Dentro de M todos los operadores tienen su sentido aritm´tico habitual ısla e y este t´rmino aparece en la matriz del modelo. e Advierta que, dentro de los par´ntesis que habitualmente rodean los argumentos de una e funci´n, todos los operadores tienen su sentido aritm´tico habitual. La funci´n I() es o e o la funci´n identidad, utilizada solamente para poder introducir t´rminos en las f´rmulas, o e o defini´ndolos mediante operadores aritm´ticos. e e En particular, cuando las f´rmulas especifican columnas de la matriz del modelo, la o especificaci´n de los par´metros es impl´ o a ıcita. Este no es el caso en otros contextos, por ejemplo en la especificaci´n de modelos no lineales. o 11.1.1 Contrastes Es necesario conocer, aunque sea someramente, el modo en que las f´rmulas del modelo o determinan las columnas de la matriz del modelo. Esto es sencillo si las variables son
  • 64. Cap´ ıtulo 11: Modelos estad´ ısticos en R 58 continuas, ya que cada una constituir´ una columna de dicha matriz. Del mismo modo, si a el modelo incluye un t´rmino independiente, contribuir´ con una columna de unos. e a En el caso de un factor, A, con k niveles, la respuesta depende de si el factor es nominal u ordinal. En el caso de un factor nominal, se generan k − 1 columnas correspondien- tes a los indicadores desde el segundo hasta el k-´simo nivel del factor. (Por tanto, la e parametrizaci´n impl´ o ıcita consiste en contrastar la respuesta del primer nivel frente a cada uno de los restantes niveles.) En el caso de un factor ordinal, las k − 1 columnas son los polinomios ortogonales sobre 1, ..., k, omitiendo el t´rmino constante. e Esta situaci´n puede parecerle complicada, pero a´n hay m´s. En primer lugar, si el o u a t´rmino independiente se omite en un modelo que contiene alg´n t´rmino de tipo factor, el e u e primero de dichos t´rminos se codifica en k columnas correspondientes a los indicadores de e todos los niveles del factor. En segundo lugar, todo este comportamiento puede cambiarse mediante el argumento contrasts de options. Los valores predeterminados son: options(contrasts = c(contr.treatment, contr.poly)) La raz´n por la que se indican estos valores es que los valores predeterminados en R son o distintos de los de S en el caso de factores nominales, ya que S utiliza los contrastes de Helmert. Por tanto, para obtener los mismos resultados que en S-Plus, deber´ escribir: a options(contrasts = c(contr.helmert, contr.poly)) Esta diferencia es deliberada, ya que entendemos que los contrastes predeterminados de R son m´s sencillos de interpretar para los principiantes. a Caben a´n m´s posibilidades, ya que el esquema de contraste a utilizar puede fijarse u a para cada t´rmino del modelo utilizando las funciones contrasts y C. e Tampoco hemos considerado los t´rminos de interacci´n, que generan los productos de e o las columnas introducidas por los t´rminos de sus componentes. e Pese a que los detalles son complicados, las f´rmulas de modelos en R generan habi- o tualmente los modelos que un estad´ ıstico experto podr´ esperar, supuesto que se preserve ıa la marginalidad. Por ejemplo, el ajuste de un modelo con interacci´n y, sin embargo, sin o los correspondientes efectos principales conducir´ en general a resultados sorprendentes, y a debe reservarse s´lo a los especialistas. o 11.2 Modelos lineales La funci´n primaria para el ajuste de modelos m´ltiples ordinarios es lm() y una versi´n o u o resumida de su uso es la siguiente: modelo.ajustado - lm(formula.de.modelo, data=hoja.de.datos) Por ejemplo fm2 - lm(y ∼ x1 + x2, data=produccion) ajustar´ un modelo de regresi´n m´ltiple de y sobre x 1 y x 2 (con t´rmino independiente a o u e impl´ ıcito). El t´rmino data=produccion, pese a ser opcional, es importante y especifica que e cualquier variable necesaria para la construcci´n del modelo debe provenir en primer o lugar de la hoja de datos produccion, y ello independientemente de que la hoja de datos produccion haya sido conectada a la trayectoria de b´squeda o no. u
  • 65. Cap´ ıtulo 11: Modelos estad´ ısticos en R 59 11.3 Funciones gen´ricas de extracci´n de informaci´n del e o o modelo El valor de lm() es el objeto modelo ajustado; que consiste en una lista de resultados de clase lm. La informaci´n acerca del modelo ajustado puede imprimirse, extraerse, dibujarse, o etc. utilizando funciones gen´ricas orientadas a objetos de clase lm. Algunas de ellas son: e add1 coef effects kappa predict residuals alias deviance family labels print step anova drop1 formula plot proj summary A continuaci´n se incluye una breve descripci´n de las m´s utilizadas. o o a anova(objeto 1, objeto 2) Compara un submodelo con un modelo externo y produce una tabla de an´lisis a de la varianza. coefficients(objeto) Extrae la matriz de coeficientes de regresi´n. o Forma reducida: coef(objeto). deviance(objeto) Suma de cuadrados residual, ponderada si es lo apropiado. formula(objeto) Extrae la f´rmula del modelo. o plot(objeto) Crea cuatro gr´ficos que muestran los residuos, los valores ajustados y algunos a diagn´sticos o predict(objeto, newdata=hoja.de.datos) La nueva hoja de datos que se indica debe tener variables cuyas etiquetas coin- cidan con las de la original. El resultado es un vector o matriz de valores predichos correspondiente a los valores de las variables de hoja.de.datos. print(objeto) Imprime una versi´n concisa del objeto. A menudo se utiliza impl´ o ıcitamente. residuals(objeto) Extrae la matriz de residuos, ponderada si es necesario. La forma reducida es resid(objeto). step(objeto) Selecciona un modelo apropiado a˜adiendo o eliminando t´rminos y preservando n e las jerarqu´ Se devuelve el modelo que en este proceso tiene el m´ximo valor ıas. a 1 de AIC . summary(objeto) Imprime un resumen estad´ ıstico completo de los resultados del an´lisis de re- a gresi´n. o 1 Acr´nimo de Akaike’s an Information Criterion o
  • 66. Cap´ ıtulo 11: Modelos estad´ ısticos en R 60 11.4 An´lisis de varianza. Comparaci´n de modelos a o El an´lisis de varianza2 es otra de las t´cnicas aqu´ recogidas. a e ı La funci´n de ajuste de modelo aov(formula.de.modelo, data=hoja.de.datos) opera o en el nivel m´s simple de modo muy similar a la funci´n lm(), y muchas de las funciones a o gen´ricas contenidas en la Secci´n 11.3 [Funciones genericas de extraccion de informacion e o del modelo], p´gina 59, le son de aplicaci´n. a o Debemos destacar que, adem´s, aov() realiza un an´lisis de modelos estratificados de a a error m´ltiple, tales como experimentos split plot, o dise˜os en bloques incompletos bal- u n anceados con recuperaci´n de informaci´n inter-bloques. La f´rmula o o o respuesta ∼ formula.media + Error(formula.estratos) especifica un experimento multiestrato con estratos de error definidos por formula.estratos. En el caso m´s sencillo, formula.estratos es un factor, cuando define un experimento con a dos estratos, esto es, dentro de y entre los niveles de un factor. Por ejemplo, si todas las variables predictoras son factores, un modelo como el siguiente: mf - aov(cosecha ∼ v + n*p*k + Error(granjas/bloques), data=datos.granjas) ser´ utilizable para describir un experimento con media del modelo v + n*p*k y tres estratos ıa de error: “entre granjas”, “dentro de granjas, entre bloques” y “dentro de bloques”. 11.4.1 Tablas ANOVA Debe tenerse en cuenta que la tabla ANOVA corresponde a una sucesi´n de modelos o ajustados. Las sumas de cuadrados que en ella aparecen corresponden a la disminuci´n en o las sumas de cuadrados residuales como resultado de la inclusi´n de un t´rmino concreto o e en un lugar concreto de la sucesi´n. Por tanto el orden de inclusi´n s´lo ser´ irrelevante en o o o a experimentos ortogonales. Para experimentos multiestrato el procedimiento consiste, en primer lugar, en proyectar la respuesta sobre los estratos de error, una vez m´s en secuencia, y, despu´s, en ajustar a e la media del modelo a cada proyecci´n. Para m´s detalles, consulte Chambers Hastie o a (1992). Una alternativa m´s flexible a la tabla ANOVA completa es comparar dos o m´s modelos a a directamente utilizando la funci´n anova(). o anova(modelo.ajustado.1, modelo.ajustado.2, ...) El resultado es una tabla ANOVA que muestra las diferencias entre los modelos ajustados cuando se ajustan en ese orden preciso. Los modelos ajustados objeto de comparaci´n o constituyen por tanto una sucesi´n jer´rquica. Este resultado no suministra informaci´n o a o distinta a la del caso predeterminado, pero facilita su comprensi´n y control. o 2 Su acr´nimo en ingl´s es ANOVA, de ANalysis Of Variance. En alguna literatura en espa˜ol, el acr´nimo o e n o se sustituye por ANDEVA, de AN´lisis DE VArianza. a
  • 67. Cap´ ıtulo 11: Modelos estad´ ısticos en R 61 11.5 Actualizaci´n de modelos ajustados o La funci´n update() se utiliza muy a menudo para ajustar un modelo que difiere de uno o ajustado previamente en unos pocos t´rminos que se a˜aden o se eliminan. Su forma es: e n modelo.nuevo - update(modelo.anterior, f´rmula.nueva) o En f´rmula.nueva puede utilizarse un punto, ‘.’, para hacer referencia a “la parte co- o rrespondiente de la f´rmula del modelo anterior”. Por ejemplo, o fm05 - lm(y ∼ x1 + x2 + x3 + x4 + x5, data = produccion) fm6 - update(fm05, . ∼ . + x6) smf6 - update(fm6, sqrt(.) ∼ .) ajusta una regresi´n m´ltiple con cinco variables, (procedentes si es posible) de la hoja de o u datos produccion; despu´s ajusta un modelo adicional incluyendo un sexto regresor; y, por e ultimo, ajusta una variante del modelo donde se aplica una transformaci´n ra´ cuadrada a ´ o ız la variable predicha. Advierta especialmente que si especifica el argumento data en la llamada original a la funci´n de ajuste del modelo, esta informaci´n se pasa a su vez a trav´s del objeto modelo o o e ajustado a la funci´n update() y sus asociadas. o El nombre “.” puede utilizarse tambi´n en otros contextos, pero con un significado e levemente distinto. Por ejemplo, gra.completo - lm(y ∼ . , data=produccion) ajustar´ un modelo con respuesta y, y como variables predictoras, todas las de la hoja de a datos produccion. Otras funciones que permiten explorar sucesiones crecientes de modelos son add1(), drop1() y step(). Consulte la ayuda para obtener informaci´n de las mismas. o 11.6 Modelos lineales generalizados Los modelos lineales generalizados constituyen una extensi´n de los modelos lineales, o para tomar en consideraci´n tanto distribuciones de respuestas no normales como transfor- o maciones para conseguir linealidad, de una forma directa. Un modelo lineal generalizado puede describirse seg´n las siguientes suposiciones: u • Existe una variable respuesta, y, y unas variables est´ ımulo, x1 , x2 , . . . , cuyos valores influyen en la distribuci´n de la respuesta. o • Las variables est´ımulo influyen en la distribuci´n de y mediante una funci´n lineal o o solamente. Esta funci´n lineal recibe el nombre de predictor lineal, y se escribe habi- o tualmente η = β1 x1 + β2 x2 + · · · + βp xp , por tanto xi no influye en la distribuci´n de y si y s´lo si βi = 0. o o • La distribuci´n de y es de la forma o A fY (y; µ, ϕ) = exp {yλ(µ) − γ (λ(µ))} + τ (y, ϕ) ϕ donde ϕ es un par´metro de escala (posiblemente conocido) que permanece constante a para todas las observaciones, A representa una ponderaci´n a priori que se supone o
  • 68. Cap´ ıtulo 11: Modelos estad´ ısticos en R 62 conocida pero que puede variar con las observaciones, y µ es la media de y. Por tanto, se supone que la distribuci´n de y queda determinada por su media y tal vez un o par´metro de escala. a • La media, µ, es una funci´n inversible del predictor lineal: o µ = m(η), η = m−1 (µ) = (µ) y esta funci´n inversa, (), se denomina funci´n de enlace. o o Estas suposiciones son suficientemente amplias para acomodar una amplia clase de mode- los utiles en la pr´ctica estad´ ´ a ıstica y, al tiempo, suficientemente estrictas como para permitir el desarrollo de una metodolog´ unificada de estimaci´n e inferencia, al menos aproxi- ıa o madamente. Los interesados en este tema pueden consultar cualquiera de los trabajos de referencia sobre este tema, tales como McCullagh Nelder (1989) o Dobson (1990). 11.6.1 Familias La clase de modelos lineales generalizados que pueden ser tratados en R incluye las distribuciones de respuesta gaussian (normal), binomial, poisson, inverse gaussian (nor- mal inversa) y gamma as´ como los modelos de quasi-likelihood (cuasi-verosimilitud) cuya ı distribuci´n de respuesta no est´ expl´ o a ıcitamente definida. En este ultimo caso debe especi- ´ ficarse la funci´n de varianza como una funci´n de la media, pero en el resto de casos esta o o funci´n est´ impl´ o a ıcita en la distribuci´n de respuesta. o Cada distribuci´n de respuesta admite una variedad de funciones de enlace para conec- o tar la media con el predictor lineal. La tabla siguiente recoge las que est´n disponibles a autom´ticamente. a Nombre de la familia Funci´n de enlace o binomial logit, probit, cloglog gaussian identity Gamma identity, inverse, log inverse.gaussian 1/mu^2 poisson identity, log, sqrt quasi logit, probit, cloglog, identity, inverse, log, 1/mu^2, sqrt La combinaci´n de una distribuci´n de respuesta, una funci´n de enlace y otras informa- o o o ciones que son necesarias para llevar a cabo la modelizaci´n se denomina familia del modelo o lineal generalizado. 11.6.2 La funci´n glm o Puesto que la distribuci´n de la respuesta depende de las variables de est´ o ımulo solamente a trav´s de una funci´n lineal, se puede utilizar el mismo mecanismo de los modelos lineales e o para especificar la parte lineal de un modelo generalizado. Sin embargo la familia debe especificarse de modo distinto. La funci´n glm() permite ajustar un modelo lineal generalizado y tiene la forma siguiente o
  • 69. Cap´ ıtulo 11: Modelos estad´ ısticos en R 63 modelo.ajustado - glm(formula.de.modelo, family = generador.de.familia, data=hoja.datos) La unica caracter´ ´ ıstica nueva es generador.de.familia que es el instrumento mediante el que se describe la familia. Es el nombre de una funci´n que genera una lista de funciones y o expresiones que, juntas, definen y controlan el modelo y el proceso de estimaci´n. Aunque o puede parecer complicado a primera vista, su uso es bastante sencillo. Los nombres de los generadores de familias est´ndar suministrados con R aparecen en a la tabla de la Secci´n 11.6.1 [Familias], p´gina 62 con la denominaci´n de “Nombre de o a o la familia”. Si adem´s debe seleccionar una funci´n de enlace, debe indicarla como un a o par´metro, entre par´ntesis, del nombre de la familia. En el caso de la familia quasi, la a e funci´n de varianza puede especificarse del mismo modo. o Veamos algunos ejemplos. La familia gaussiana (gaussian) Una expresi´n de la forma o mf - glm(y ∼ x1 + x2, family = gaussian, data = ventas) obtiene el mismo resultado que mf - lm(y ∼ x1+x2, data=ventas) pero con menor eficiencia. Tenga en cuenta que la familia gaussiana no dispone autom´ti- a camente de una serie de funciones de enlace, por lo que no admite par´metros. Si en un a problema necesita utilizar la familia gaussiana con un enlace no est´ndar, la soluci´n pasa a o por el uso de la familia quasi, como veremos posteriormente. La familia binomial (binomial) Consideremos el siguiente ejemplo artificial, tomado de Silvey (1970). Los hombres de la isla de Kalythos, en el mar Egeo, sufren una enfermedad ocular cong´nita cuyos efectos se acrecientan con la edad. Se tom´ una muestra de varios isle˜os e o n de diferentes edades cuyos resultados se muestran a continuaci´n: o Edad: 20 35 45 55 70 No. sujetos: 50 50 50 50 50 No. 6 17 26 37 44 invidentes: Consideramos el problema de ajustar un modelo log´ ıstico y otro probit a estos datos, y estimar en cada modelo el par´metro LD50, correspondiente a la edad en que la probabilidad a de ceguera es del 50%. Si y es el n´mero de invidentes a la edad x, y n es el n´mero de sujetos estudiados, u u ambos modelos tienen la forma y ∼ B(n, F (β0 + β1 x)) donde, para el caso probit, F (z) = Φ(z) es la funci´n de distribuci´n normal (0,1), y en el o o caso logit (que es el predeterminado), F (z) = ez /(1 + ez ). En ambos casos, LD50 se define como LD50 = −β0 /β1
  • 70. Cap´ ıtulo 11: Modelos estad´ ısticos en R 64 Esto es, el punto en que el argumento de la funci´n de distribuci´n es cero. o o El primer paso es preparar los datos en una hoja de datos kalythos - data.frame(x = c(20,35,45,55,70), n = rep(50,5), y = c(6,17,26,37,44)) Para ajustar un modelo binomial utilizando glm() existen dos posibilidades para la respuesta: • Si la respuesta es un vector, entonces debe corresponder a datos binarios y por tanto s´lo debe contener ceros y unos. o • Si la respuesta es una matriz de dos columnas, la primera columna debe contener el n´mero de ´xitos y la segunda el de fracasos. u e Aqu´ vamos a utilizar la segunda de estas convenciones, por lo que debemos a˜adir una ı n matriz a la hoja de datos: kalythos$Ymat - cbind(kalythos$y, kalythos$n - kalythos$y) Para ajustar los modelos utilizamos fmp - glm(Ymat ∼ x, family = binomial(link=probit), data = kalythos) fml - glm(Ymat ∼ x, family = binomial, data = kalythos) Puesto que la funci´n de enlace logit es la predeterminada, este par´metro puede omitirse o a en la segunda expresi´n. Para ver los resultados de cada ajuste usaremos o summary(fmp) summary(fml) Ambos modelos se ajustan bien (demasiado bien). Para estimar LD50 podemos usar la siguiente funci´n: o ld50 - function(b) -b[1]/b[2] ldp - ld50(coef(fmp)); ldl - ld50(coef(fmp)); c(ldp, ldl) y obtendremos los valores 43.663 y 43.601 respectivamente. Modelos de Poisson (poisson) Para la familia poisson el enlace predeterminado es log, y en la pr´ctica el uso fun- a damental de esta familia es ajustar modelos loglineales de Poisson a datos de frecuencias, cuya distribuci´n en s´ es a menudo multinomial. Este es un tema amplio e importante que o ı no discutiremos aqu´ y que incluso constituye una parte fundamental de la utilizaci´n de ı o modelos generalizados no gaussianos. A veces surgen datos aut´nticamente poissonianos que, en el pasado se analizaban a e menudo como datos gaussianos tras aplicarles una transformaci´n logar´ o ıtmica o de ra´ ız cuadrada. Como alternativa al ultimo, puede ajustarse un modelo lineal generalizado de ´ Poisson, como en el siguiente ejemplo: fmod - glm(y ∼ A + B + x, family = poisson(link=sqrt), data = frec.gusanos)
  • 71. Cap´ ıtulo 11: Modelos estad´ ısticos en R 65 Modelos de cuasi-verosimilitud (quasi) En todas las familias, la varianza de la respuesta depender´ de la media, y el par´metro de a a escala actuar´ como un multiplicador. La forma de dependencia de la varianza respecto de la a media es una caracter´ıstica de la distribuci´n de respuesta, por ejemplo para la distribuci´n o o de Poisson ser´ Var[y] = µ. a Para estimaci´n e inferencia de cuasi-verosimilitud, la distribuci´n de respuesta precisa o o no est´ especificada, sino m´s bien s´lo la funci´n de enlace y la forma en que la funci´n a a o o o de varianza depende de la media. Puesto que la estimaci´n de cuasi-verosimilitud utiliza o formalmente las mismas t´cnicas de la distribuci´n gaussiana, esta familia permite ajustar e o modelos gaussianos con funciones de enlace no est´ndar o incluso con funciones de varianza. a Por ejemplo, consideremos la regresi´n no lineal siguiente o θ 1 z1 y= +e z2 − θ 2 que puede escribirse tambi´n de la forma e 1 y= +e β1 x1 + β2 x2 donde x1 = z2 /z1 , x2 = −1/x1 , β1 = 1/θ1 y β2 = θ2 /θ1 . Suponiendo que existe una hoja de datos apropiada, bioquimica, podemos ajustar este modelo mediante nlfit - glm(y ∼ x1 + x2 - 1, family = quasi(link=inverse, variance=constant), data = bioquimica) Si desea mayor informaci´n, lea las ayudas correspondientes. o 11.7 Modelos de M´ ınimos cuadrados no lineales y de M´xima verosimilitud a Ciertas formas de modelos no lineales pueden ajustarse mediante Modelos Lineales Ge- neralizados, con la funci´n glm(), pero en la mayor´ de los casos ser´ necesario utilizar o ıa a optimizaci´n no lineal. La funci´n que lo realiza en R es nlm(), que reemplaza aqu´ a o o ı las funciones ms() y nlmin() de S-Plus. Buscamos los valores de los par´metros que a minimizan alg´n ´ u ındice de falta de ajuste y nlm() lo resuelve probando varios par´metros a iterativamente. Al contrario que en la regresi´n lineal, por ejemplo, no existe garant´ de o ıa que el procedimiento converja a unos estimadores satisfactorios. La funci´n nlm() necesita o unos valores iniciales de los par´metros a estimar y la convergencia depende cr´ a ıticamente de la calidad de dichos valores iniciales. 11.7.1 M´ ınimos cuadrados Una forma de ajustar un modelo no lineal es minimizar la suma de los cuadrados de los errores o residuos (SSE). Este m´todo tiene sentido si los errores observados pueden e proceder de una distribuci´n normal. o Presentamos un ejemplo debido a Bates Watts (1988), p´gina 51. Los datos son: a
  • 72. Cap´ ıtulo 11: Modelos estad´ ısticos en R 66 x - c(0.02, 0.02, 0.06, 0.06, 0.11, 0.11, 0.22, 0.22, 0.56, 0.56, 1.10, 1.10) y - c(76, 47, 97, 107, 123, 139, 159, 152, 191, 201, 207, 200) El modelo a ajustar es: fn - function(p) sum((y - (p[1] * x)/(p[2] + x))^2) Para realizar el ajuste necesitamos unos valores iniciales de los par´metros. Una forma de a encontrar unos valores iniciales apropiados es representar gr´ficamente los datos, conjeturar a unos valores de los par´metros, y dibujar sobre los datos la curva correspondiente a estos a valores. plot(x, y) xajustado - seq(.02, 1.1, .05) yajustado - 200*xajustado/(.1+xajustado) lines(spline(xajustado,yajustado)) Aunque se podr´ tratar de encontrar unos valores mejores, los valores obtenidos, 200 y ıa 0.1, parecen adecuados. Ya podemos realizar el ajuste: resultado - nlm(fn,p=c(200,.1),hessian=TRUE) Tras el ajuste, resultado$minimum contiene SSE, y resultado$estimates contiene los estimadores por m´ ınimos cuadrados de los par´metros. Para obtener los errores t´ a ıpicos aproximados de los estimadores (SE) escribimos lo siguiente: sqrt(diag(2*resultado$minimum/(length(y) - 2) * solve(resultado$hessian))) El n´mero 2 en dicha expresi´n representa el n´mero de par´metros. Un intervalo de u o u a confianza al 95% ser´: El estimador del par´metro ± 1.96 SE. Podemos representar el ajuste a a en un nuevo gr´fico: a plot(x,y) xajustado - seq(.02,1.1,.05) yajustado - 212.68384222*xajustado/(0.06412146+xajustado) lines(spline(xajustado,yajustado)) La biblioteca nls contiene muchas m´s posibilidades para ajustar modelos no lineales por a m´ınimos cuadrados. El modelo que acabamos de ajustar es el modelo de Michaelis-Menten, por tanto podemos usar df - data.frame(x=x, y=y) fit - nls(y ∼ SSmicmen(x, Vm, K), df) fit Nonlinear regression model model: y ∼ SSmicmen(x, Vm, K) data: df Vm K 212.68370711 0.06412123 residual sum-of-squares: 1195.449 summary(fit) Formula: y ∼ SSmicmen(x, Vm, K) Parameters: Estimate Std. Error t value Pr(|t|)
  • 73. Cap´ ıtulo 11: Modelos estad´ ısticos en R 67 Vm 2.127e+02 6.947e+00 30.615 3.24e-11 K 6.412e-02 8.281e-03 7.743 1.57e-05 Residual standard error: 10.93 on 10 degrees of freedom Correlation of Parameter Estimates: Vm K 0.7651 11.7.2 M´xima verosimilitud a El m´todo de m´xima verosimilitud es un m´todo de ajuste de un modelo no lineal que e a e puede aplicarse incluso cuando los errores no son normales. El m´todo busca los valores de e los par´metros que maximizan la log-verosimilitud o, lo que es igual, minimizan el valor de a la -log-verosimilitud. El siguiente ejemplo, tomado de Dobson (1990), pp. 108-11, ajusta un modelo log´ ıstico a los datos de dosis-respuesta, que claramente tambi´n podr´ ajustarse e ıa utilizando la funci´n glm(). Los datos son: o x - c(1.6907, 1.7242, 1.7552, 1.7842, 1.8113, 1.8369, 1.8610, 1.8839) y - c( 6, 13, 18, 28, 52, 53, 61, 60) n - c(59, 60, 62, 56, 63, 59, 62, 60) La -log-verosimilitud a minimizar es: fn - function(p) sum( - (y*(p[1]+p[2]*x) - n*log(1+exp(p[1]+p[2]*x)) + log(choose(n, y)) )) Elegimos unos valores iniciales y realizamos el ajuste: out - nlm(fn, p = c(-50,20), hessian = TRUE) Tras lo cual, resultado$minimum contiene la -log-verosimilitud, y resultado$estimates contiene los estimadores de m´xima verosimilitud. Para obtener los SE aproximados de los a par´metros, escribimos: a sqrt(diag(solve(out$hessian))) El intervalo de confianza al 95% es: El estimador del par´metro ± 1.96 SE. a 11.8 Algunos modelos no-est´ndar a Concluimos esta parte con una breve menci´n a otras posibilidades de R para regresi´n o o especial y an´lisis de datos. a • Modelos mezclados. La biblioteca creada por usuarios, nlme, contiene las funciones lme y nlme para modelos de efectos mezclados lineales y no lineales, esto es, regresiones lineales y no lineales en las cuales algunos coeficientes corresponden a efectos aleatorios. Estas funciones hacen un uso intensivo de las f´rmulas para especificar los modelos. o • Regresi´n con aproximaci´n local. La funci´n loess() ajusta una regresi´n no o o o o param´trica utilizando regresi´n polinomial localmente ponderada. Este tipo de e o regresi´n es util para poner de relieve una tendencia en datos confusos o para reducir o ´ datos y obtener alguna luz sobre la estructura de grandes conjuntos de datos.
  • 74. Cap´ ıtulo 11: Modelos estad´ ısticos en R 68 La biblioteca modreg contiene la funci´n loess as´ como posibilidades de regresi´n o ı o “projection pursuit”. • Regresi´n robusta. Existen varias funciones para ajustar modelos de regresi´n o o resistentes a la influencia de valores an´malos (outliers) en los datos. La funci´n o o lqs en la biblioteca del mismo nombre contiene los algoritmos m´s recientes para a ajustes altamente resistentes. Otras funciones menos resistentes pero m´s eficientes a estad´ısticamente se encuentran en otras bibliotecas creadas por usuarios, por ejemplo la funci´n rlm en la biblioteca MASS. o • Modelos aditivos. Esta t´cnica intenta construir una funci´n de regresi´n a partir de e o o funciones aditivas suaves de las variables predictoras, habitualmente una por cada va- riable predicha. Las funciones avas y ace en la biblioteca acepack y las funciones bruto y mars de la biblioteca mda son ejemplos de estas t´cnicas contenidas en bibliotecas e creadas por usuarios para R. • Modelos basados en ´rboles. En vez de buscar un modelo lineal global expl´ a ıcito para predicci´n o interpretaci´n, los modelos basados en ´rboles intentan bifurcar los datos, o o a recursivamente, en puntos cr´ ıticos de las variables predictoras con la finalidad de con- seguir una partici´n de los datos en grupos tan homog´neos dentro del grupo y tan o e heterog´neos de un grupo a otro, como sea posible. Los resultados a menudo con- e ducen a una comprensi´n de los datos que otros m´todos de an´lisis de datos no suelen o e a suministrar. Los modelos se especifican en la forma de un modelo lineal ordinario. La funci´n de o ajuste es tree(), y muchas funciones gen´ricas, como plot() y text() pueden mostrar e los resultados de este ajuste de modo gr´fico. a Puede encontrar estos modelos en las bibliotecas creadas por usuarios rpart y tree.
  • 75. Cap´ ıtulo 12: Procedimientos gr´ficos a 69 12 Procedimientos gr´ficos a Las posibilidades gr´ficas son un componente de R muy importante y vers´til. Es posi- a a ble utilizarlas para mostrar una amplia variedad de gr´ficos estad´ a ısticos y tambi´n para e construir nuevos tipos de gr´ficos. a Los gr´ficos pueden usarse tanto en modo interactivo como no interactivo, pero en la a mayor´ de los casos el modo interactivo es m´s productivo. Adem´s al iniciar R en este ıa a a modo, se activa un dispositivo para mostrar gr´ficos. Aunque este paso es autom´tico, es a a util conocer que la orden es X11(), aunque tambi´n puede usar windows() en Microsoft ´ e Windows. Las ´rdenes gr´ficas se dividen en tres grupos b´sicos: o a a • Alto nivel Son funciones que crean un nuevo gr´fico, posiblemente con ejes, etiquetas, a t´ ıtulos, etc.. • Bajo nivel Son funciones que a˜aden informaci´n a un gr´fico existente, tales como n o a puntos adicionales, l´ ıneas y etiquetas. • Interactivas Son funciones que permiten interactuar con un gr´fico, a˜adiendo o elimi- a n nando informaci´n, utilizando un dispositivo apuntador, como un rat´n. o o Adem´s, en R existe una lista de par´metros gr´ficos que pueden utilizarse para adaptar a a a los gr´ficos. a 12.1 Funciones gr´ficas de nivel alto a Las ´rdenes gr´ficas de nivel alto est´n dise˜adas para generar un gr´fico completo a o a a n a partir de unos datos pasados a la funci´n como argumento. Cuando es necesario se generan o autom´ticamente ejes, etiquetas o t´ a ıtulos (salvo que se especifique lo contrario). Estas o ´rdenes comienzan siempre un nuevo gr´fico, borrando el actual si ello es necesario. a 12.1.1 La funci´n plot o Una de las funciones gr´ficas m´s utilizadas en R es plot, que es una funci´n gen´rica, a a o e esto es, el tipo de gr´fico producido es dependiente de la clase del primer argumento. a plot(x, y) plot(xy) Si x e y son vectores, plot(x, y) produce un diagrama de dispersi´n de yo sobre x. El mismo efecto se consigue suministrando un unico argumento (como ´ se ha hecho en la segunda forma) que sea bien una lista con dos elementos, x e y, bien una matriz con dos columnas. plot(x) Si x es una serie temporal, produce un gr´fico temporal, si x es un vector a num´rico, produce un gr´fico de sus elementos sobre el ´ e a ındice de los mismos, y si x es un vector complejo, produce un gr´fico de la parte imaginaria sobre la a real de los elementos del vector. plot(f ) plot(f, y) Sean f un factor, e y un vector num´rico. La primera forma genera un diagrama e de barras de f ; la segunda genera diagramas de cajas de y para cada nivel de f.
  • 76. Cap´ ıtulo 12: Procedimientos gr´ficos a 70 plot(hd) plot(∼ expr) plot(y ∼ expr) Sean hd, una hoja de datos; y, un objeto cualquiera; y expr, una lista de nombres de objetos separados por s´ ımbolos ‘+’ (por ejemplo, a + b + c). Las dos primeras formas producen diagramas de todas las parejas de variables de la hoja de datos hd (en el primer caso) y de los objetos de la expresi´n expr o (en el segundo caso). La tercera forma realiza sendos gr´ficos de y sobre cada a objeto nombrado en la expresi´n expr (uno para cada objeto). o 12.1.2 Representaci´n de datos multivariantes o R posee dos funciones muy utiles para representar datos multivariantes. Si X es una ´ matriz num´rica o una hoja de datos, la orden e pairs(X) produce una matriz de gr´ficos de dispersi´n para cada pareja de variables definidas por a o las columnas de X, esto es, cada columna de X se representa frente a cada una de las dem´s a columnas, y los n(n−1) gr´ficos se presentan en una matriz de gr´ficos con escalas constantes a a sobre las filas y columnas de la matriz. Cuando se trabaja con tres o cuatro variables, la funci´n coplot puede ser m´s apro- o a piada. Si a y b son vectores num´ricos y c es un vector num´rico o un factor (todos de la e e misma longitud) entonces la orden coplot(a ∼ b | c) produce diagramas de dispersi´n de a sobre b para cada valor de c. Si c es un factor, o esto significa que a se representa sobre b para cada nivel de c. Si c es un vector num´rico, e entonces se agrupa en intervalos y para cada intervalo se representa a sobre b para los valores de c dentro del intervalo. El n´mero y tama˜o de los intervalos puede controlarse con el u n argumento given.values de la funci´n coplot(). La funci´n co.intervals() tambi´n es o o e util para seleccionar intervalos. Asimismo, es posible utilizar dos variables condicionantes ´ con una orden como coplot(a ∼ b | c + d) que produce diagramas de a sobre b para cada intervalo de condicionamiento de c y d. Las funciones coplot() y pairs() utilizan el argumento panel para personalizar el tipo de gr´fico que aparece en cada panel o recuadro. El valor predeterminado es points() para a producir un diagrama de dispersi´n, pero si se introducen otras funciones gr´ficas de nivel o a bajo de los dos vectores x e y como valor de panel, se produce cualquier tipo de gr´fico que a se desee. Una funci´n util en este contexto es panel.smooth(). o ´ 12.1.3 Otras representaciones gr´ficas a Existen otras funciones gr´ficas de nivel alto que producen otros tipos de gr´ficos. Al- a a gunas de ellas son las siguientes:
  • 77. Cap´ ıtulo 12: Procedimientos gr´ficos a 71 qqnorm(x) qqline(x) qqplot(x, y) Gr´ficos de comparaci´n de distribuciones. El primero representa el vector x a o sobre los valores esperados normales. El segundo le a˜ade una recta que pasa n por los cuartiles de la distribuci´n y de los datos. El tercero representa los o cuantiles de x sobre los de y para comparar sus distribuciones respectivas. hist(x) hist(x, nclass=n) hist(x, breaks=b, ...) Produce un histograma del vector num´rico x. El n´mero de clases se cal- e u cula habitualmente de modo correcto, pero puede elegir uno con el argumento nclass, o bien especificar los puntos de corte con el argumento breaks. Si est´ a presente el argumento probability=TRUE, se representan frecuencias relativas en vez de absolutas. dotplot(x, ...) Construye un gr´fico de puntos de x. En este tipo de gr´ficos, el eje y etiqueta a a los datos de x y el eje x da su valor. Por ejemplo, permite una selecci´n visual o sencilla de todos los elementos con valores dentro de un rango determinado. image(x, y, z, ...) contour(x, y, z, ...) persp(x, y, z, ...) Gr´ficos tridimensionales. image representa una ret´ a ıcula de rect´ngulos con a colores diferentes seg´n el valor de z, contour representa curvas de nivel de z, u y persp representa una superficie tridimensional de z. 12.1.4 Argumentos de las funciones gr´ficas de nivel alto a Existe una serie de argumentos que pueden pasarse a las funciones gr´ficas de nivel alto, a entre otros los siguientes: add=TRUE Obliga a la funci´n a comportarse como una funci´n a nivel bajo, de modo que o o el gr´fico que genere se superpondr´ al gr´fico actual, en vez de borrarlo (s´lo a a a o en algunas funciones) axes=FALSE o ´ Suprime la generaci´n de ejes. Util para crear ejes personalizados con la funci´n o axis. El valor predeterminado es axes=TRUE, que incluye los ejes. log=x log=y log=xy Hace que el eje x, el eje y, o ambos ejes, sean logar´ ıtmicos. En algunos gr´ficos a no tiene efecto. type= Este argumento controla el tipo de gr´fico producido, de acuerdo a las siguientes a posibilidades: type=p Dibuja puntos individuales. Este es el valor predeterminado
  • 78. Cap´ ıtulo 12: Procedimientos gr´ficos a 72 type=l Dibuja l´ ıneas type=b Dibuja puntos y l´ ıneas que los unen type=o Dibuja puntos y l´ ıneas que los unen, cubri´ndolos e type=h Dibuja l´ ıneas verticales desde cada punto al eje X type=s type=S Dibuja un gr´fico de escalera. En la primera forma, la escalera a comienza hacia la derecha, en la segunda, hacia arriba. type=n No se realiza ning´n gr´fico, aunque se dibujan los ejes (salvo indi- u a caci´n en contra) y se prepara el sistema de coordenadas de acuerdo o a los datos. Suele utilizarse para crear gr´ficos en los que a conti- a nuaci´n se utilizar´n ´rdenes de nivel bajo. o a o xlab=cadena ylab=cadena Definen las etiquetas de los ejes x e y, en vez de utilizar las etiquetas prede- terminadas, que normalmente son los nombres de los objetos utilizados en la llamada a la funci´n gr´fica de nivel alto. o a main=cadena T´ıtulo del gr´fico, aparece en la parte superior con tama˜o de letra grande. a n sub=cadena Subt´ ıtulo del gr´fico, aparece debajo del eje x con tama˜o de letra peque˜o. a n n 12.2 Funciones gr´ficas de nivel bajo a A veces las funciones gr´ficas de nivel alto no producen exactamente el tipo de gr´fico a a deseado. En este caso pueden a˜adirse funciones gr´ficas de nivel bajo para a˜adir infor- n a n maci´n adicional (tal como puntos, l´ o ıneas o texto) al gr´fico actual. a Algunas de las funciones gr´ficas de nivel bajo m´s usuales son: a a points(x, y) lines(x, y) A˜aden puntos o l´ n ıneas conectadas al gr´fico actual. El argumento type de la a funci´n plot() puede pasarse a esta funciones (y su valor predeterminado es o p para points y l para lines.) text(x, y, etiquetas, ...) A˜ade texto al gr´fico en las coordenadas x, y. Normalmente, etiquetas, es n a un vector de enteros o de caracteres, en cuyo caso, etiquetas[i] se dibuja en el punto (x[i], y[i]). El valor predeterminado es 1:length(x). Nota: Esta funci´n se utiliza a menudo en la secuencia o plot(x, y, type=n); text(x, y, nombres) El par´metro gr´fico type=n suprime los puntos pero construye los ejes, y la a a funci´n text permite incluir caracteres especiales para representar los puntos, o como se especifica en el vector de caracteres nombres.
  • 79. Cap´ ıtulo 12: Procedimientos gr´ficos a 73 abline(a, b) abline(h=y) abline(v=x) abline(lm.obj) A˜ade al gr´fico actual, una recta de pendiente b y ordenada en el origen a. n a La forma h=y representa una recta horizontal de altura y, y la forma v=x, una similar, vertical. En el cuarto caso, lm.obj puede ser una lista con un componente coefficients de longitud 2 (como el resultado de una funci´n de o ajuste de un modelo) que se interpretan como ordenada y pendiente, en ese orden. polygon(x, y, ...) A˜ade al gr´fico actual un pol´ n a ıgono cuyos v´rtices son los elementos de (x,y); e (opcionalmente) sombreado con l´ıneas, o relleno de color si el perif´rico lo ad- e mite. legend(x, y, letrero, ...) A˜ade al gr´fico actual un letrero o leyenda, en la posici´n especificada. Los n a o caracteres para dibujar, los estilos de l´ ıneas, los colores, etc. est´n identificados a con los elementos del vector letrero. Debe darse al menos otro argumento m´s, v, un vector de la misma longitud que letrero, con los correspondientes a valores de dibujo, como sigue: legend( , fill=v) Colores para rellenar legend( , col=v) Colores de puntos y l´ ıneas legend( , lty=v) Tipos de l´ ınea legend( , lwd=v) Anchura de l´ ınea legend( , pch=v) Caracteres para dibujar (vector de caracteres) title(main, sub) A˜ade un t´ n ıtulo, main, en la parte superior del gr´fico actual, de tama˜o grande, a n y un subt´ ıtulo, sub, en la parte inferior, de tama˜o menor. n axis(side, ...) A˜ade al gr´fico actual un eje en el lado indicado por el primer argumento (de n a 1 a 4, en el sentido de las agujas del reloj, siendo el 1 la parte inferior). Otros argumentos controlan la posici´n de los ejes, dentro o fuera del gr´fico, las o a marcas y las etiquetas. Es util para a˜adir ejes tras utilizar la funci´n plot() ´ n o con el argumento axes=FALSE. Las funciones gr´ficas de nivel bajo necesitan normalmente alguna informaci´n de a o posici´n, como las coordenadas x e y, para determinar d´nde colocar los nuevos elementos. o o Las coordenadas se dan en t´rminos de coordenadas de usuario, las cuales est´n definidas e a
  • 80. Cap´ ıtulo 12: Procedimientos gr´ficos a 74 por las funciones gr´ficas de alto nivel previas y se toman en funci´n de los datos a o suministrados a estas funciones. Los dos argumentos, x e y, pueden sustituirse por un solo argumento de clase lista con dos componentes llamados x e y, o por una matriz con dos columnas. De este modo, funciones como locator(), que vemos a continuaci´n, pueden usarse para especificar interactivamente o posiciones en un gr´fico. a 12.2.1 Anotaciones matem´ticas a En muchas ocasiones es conveniente a˜adir s´ n ımbolos matem´ticos y f´rmulas a un gr´fico. a o a En R es posible hacerlo especificando una expresi´n, en vez de una cadena de caracteres, o en cualquiera de las funciones text, mtext, axis o title. Por ejemplo, la orden siguiente dibuja la f´rmula de la distribuci´n binomial en la posici´n x, y: o o o text(x, y, expression(paste(bgroup((, atop(n, x), )), p^x, q^{n-x}))) Puede obtener informaci´n detallada con las ´rdenes: o o help(plotmath) example(plotmath) 12.2.2 Fuentes vectoriales Hershey Es posible escribir texto utilizando las fuentes vectoriales Hershey en las funciones text y contour. Existen tres razones para utilizar estas fuentes: • Producen mejores resultados, especialmente en pantalla, con textos rotados o de peque˜o tama˜o. n n • Contienen s´ ımbolos que pueden no estar disponibles en las fuentes ordinarias, como signos del zodiaco, cartogr´ficos o astron´micos. a o • Contienen caracteres cir´ ılicos y japoneses (Kana y Kanji). La informaci´n detallada, incluyendo las tablas de caracteres, puede obtenerla con las o o ´rdenes: help(Hershey) example(Hershey) help(Japanese) example(Japanese) 12.3 Funciones gr´ficas interactivas a R dispone de funciones que permiten al usuario extraer o a˜adir informaci´n a un gr´fico n o a utilizando el rat´n. La m´s sencilla es la funci´n locator(): o a o locator(n, type) Permite que el usuario seleccione posiciones del gr´fico actual, fundamental- a mente, utilizando el bot´n primario del rat´n, hasta que haya seleccionado n o o puntos (el valor predeterminado son 512) o pulse el bot´n secundario. El argu- o mento type permite dibujar utilizando los puntos seleccionados con el mismo significado que en las funciones de nivel alto. Su valor predeterminado es no
  • 81. Cap´ ıtulo 12: Procedimientos gr´ficos a 75 dibujar. La funci´n locator() devuelve las coordenadas de los puntos selec- o cionados en una lista con dos componentes, x e y. La funci´n locator() suele utilizarse sin argumentos. Es particularmente util para o ´ seleccionar interactivamente posiciones para elementos gr´ficos tales etiquetas cuando es a dif´ calcular previamente d´nde deben colocarse. Por ejemplo, para colocar un texto ıcil o informativo junto a un punto an´malo, la orden o text(locator(1), An´malo, adj=0) o puede ser util. En el caso de que no se disponga de rat´n, la funci´n locator() a´n puede ´ o o u ser utilizada; en este caso se preguntar´n al usuario las coordenadas de x e y. a identify(x, y, etiquetas) Permite identificar cualquiera de los puntos definidos por x e y utilizando el bot´n primario del rat´n, dibujando la correspondiente componente de o o etiquetas al lado (o el ´ ındice del punto si no existe etiquetas). Al pulsar el bot´n secundario del rat´n, devuelve los ´ o o ındices de los puntos seleccionados. A veces interesa identificar puntos particulares en un gr´fico y no sus posiciones. Por a ejemplo, si queremos que el usuario seleccione una observaci´n de inter´s y, posteriormente, o e manipularla en alg´n modo. Dado un n´mero de coordenadas, (x, y), en dos vectores u u num´ricos, x e y, podr´ e ıamos usar la funci´n identify() del siguiente modo: o plot(x, y) identify(x, y) La funci´n identify() no realiza ning´n gr´fico por s´ misma sino que permite al usuario o u a ı mover el puntero del rat´n y pulsar junto a un punto. El punto m´s pr´ximo al puntero o a o (si est´ suficientemente pr´ximo) se identificar´ dibujando junto a ´l su n´mero ´ a o a e u ındice, esto es, la posici´n que ocupa en los vectores x e y. Alternativamente podr´ haber utilizado o ıa una cadena de caracteres (como por ejemplo el nombre del caso) para la identificaci´n, o utilizando el argumento etiquetas, o inhabilitar la identificaci´n utilizando el argumento o plot=FALSE. Cuando se pulsa el bot´n secundario, la funci´n devuelve los ´ o o ındices de los puntos seleccionados, que podr´n ser utilizados para obtener los puntos correspondientes a de los vectores x e y. 12.4 Uso de par´metros gr´ficos a a Al crear gr´ficos, especialmente con fines de presentaci´n o publicaci´n, es posible que R a o o no produzca de modo autom´tico la apariencia exacta que se desea. Ahora bien, es posible a personalizar cada aspecto del gr´fico utilizando par´metros gr´ficos. R dispone de muchos a a a par´metros gr´ficos que controlan aspectos tales como estilo de l´ a a ınea, colores, disposici´n o de las figuras y justificaci´n del texto entre otros muchos. Cada par´metro gr´fico tiene un o a a nombre (por ejemplo, ‘col’, que controla los colores) y toma un valor (por ejemplo, blue, para indicar el color azul). Por cada dispositivo gr´fico activo, se mantiene una lista de par´metros gr´ficos, y cada a a a dispositivo gr´fico dispone de un conjunto predeterminado de par´metros cuando se inicia- a a liza. Los par´metros gr´ficos pueden indicarse de dos modos; bien de modo permanente, lo a a que afectar´ a todas las funciones gr´ficas que accedan al dispositivo gr´fico, bien tempo- a a a ralmente, lo que s´lo afecta a la funci´n gr´fica que lo utiliza en ese momento. o o a
  • 82. Cap´ ıtulo 12: Procedimientos gr´ficos a 76 12.4.1 Cambios permanentes. La funci´n par() o La funci´n par() se utiliza para acceder a la lista de par´metros gr´ficos del dispositivo o a a gr´fico actual y para modificarla. a par() Sin argumentos, devuelve una lista de todos los par´metros gr´ficos y sus valo- a a res, para el dispositivo gr´fico actual. a par(c(col, lty)) Con un vector de caracteres como argumento, devuelve una lista que contiene s´lo los valores de los par´metros citados. o a par(col=4, lty=2) Con argumentos con nombre (o una lista como argumento) establece los valores de estos par´metros y devuelve (de modo invisible) una lista con los valores a originales de los par´metros. a Al modificar cualquier par´metro con la funci´n par(), la modificaci´n es permanente, en a o o el sentido de que cualquier llamada a una funci´n gr´fica (en el mismo dispositivo gr´fico) o a a vendr´ afectada por dicho valor. Puede pensarse que este tipo de asignaci´n equivale a a o modificar los valores predeterminados de los par´metros que utilizar´n las funciones gr´ficas a a a salvo que se les indique un valor alternativo. Las llamadas a la funci´n par() siempre afectan a los valores globales de los par´metros o a gr´ficos, incluso aunque la llamada se realice desde una funci´n. Esta conducta a menudo no a o es satisfactoria; habitualmente desear´ ıamos modificar algunos par´metros, realizar algunos a gr´ficos y volver a los valores originales para no afectar a la sesi´n completa de R. Este a o trabajo recae en el usuario, que debe almacenar el resultado de par() cuando realice alg´n u cambio y restaurarlo cuando el gr´fico est´ completo. a e par.anterior - par(col=4,lty=2) . . . varias ´rdenes gr´ficas . . . o a par(par.anterior) 12.4.2 Cambios temporales. Argumentos de las funciones gr´ficas a Los par´metros gr´ficos tambi´n pueden pasarse a pr´cticamente todas las funciones a a e a gr´ficas como argumentos con nombre, lo que tiene el mismo efecto que utilizarlos en la a funci´n par(), excepto que los cambios s´lo existen durante la llamada a la funci´n. Por o o o ejemplo: plot(x, y, pch=+) realiza un diagrama de dispersi´n utilizando el signo de sumar, +, para representar cada o punto, sin cambiar el car´cter predeterminado para gr´ficos posteriores. a a 12.5 Par´metros gr´ficos habituales a a A continuaci´n se detallan muchos de los par´metros gr´ficos habituales. La ayuda o a a de la funci´n par() contiene un resumen m´s conciso; por lo que puede considerar esta o a descripci´n como una alternativa m´s detallada. o a Los par´metros gr´ficos se presentar´n en la siguiente forma: a a a
  • 83. Cap´ ıtulo 12: Procedimientos gr´ficos a 77 nombre=valor Descripci´n del efecto del par´metro. nombre es el nombre del par´metro, esto o a a es, el nombre del argumento que debe usar en la funci´n par() o cualquier o funci´n gr´fica. valor es un valor t´ o a ıpico del par´metro. a 12.5.1 Elementos gr´ficos a Los gr´ficos de R est´n formados por puntos, l´ a a ıneas, texto y pol´ ıgonos (regiones rellenas). Existen par´metros gr´ficos que controlan c´mo se dibujan los elementos gr´ficos citados, a a o a como los siguientes: pch=+ Car´cter que se utiliza para dibujar un punto. El valor predeterminado var´ a ıa entre dispositivos gr´ficos, pero normalmente es ‘◦’. Los puntos tienden a apare- a cer en posici´n levemente distinta de la exacta, salvo que utilice el car´cter . o a que produce puntos centrados. pch=4 Si pch toma un valor entre 0 y 18, ambos inclusive, se utiliza un s´ ımbolo especial para realizar los gr´ficos. Para saber cuales son los s´ a ımbolos, utilice las ´rdenes o plot(1,t=n) legend(locator(1), as.character(0:18), marks=0:18) y pulse en la parte superior del gr´fico. a lty=2 Es el tipo de l´ ınea. Aunque algunos tipos no pueden dibujarse en determinados dispositivos gr´ficos, siempre, el tipo 1 corresponde a una l´ a ınea continua, y los tipos 2 o superior corresponden a l´ ıneas con puntos, rayas o combinaciones de ambos. lwd=2 Es la anchura de l´ ınea, medida en m´ltiplos de la anchura “base”. Afecta tanto u a los ejes como a las l´ ıneas dibujadas con la funci´n lines(), etc. o col=2 Es el color que se utiliza para los puntos, l´ ıneas, texto, im´genes y relleno a de zonas. Cada uno de estos elementos gr´ficos admite una lista de colores a posibles y el valor de este par´metro es un ´ a ındice para esta lista. Obviamente este par´metro solo tiene aplicaci´n en algunos dispositivos. a o font=2 Es un entero que indica qu´ fuente se utilizar´ para el texto. Si es posible, 1 e a corresponde a texto normal, 2 a negrilla, 3 a it´lica y 4 a it´lica negrilla. a a font.axis font.lab font.main font.sub Es la fuente que se utilizar´, respectivamente, para escribir en los ejes, para el a etiquetado de x e y, y para el t´ ıtulo y el subt´ ıtulo. adj=-0.1 Indica c´mo debe justificarse el texto respecto de la posici´n de dibujo. Un 0 o o indica justificaci´n a la izquierda, un 1 indica justificaci´n a la derecha, y un o o 0.5 indica centrado. Puede usar cualquier otro valor que indicar´ la proporci´n a o de texto que aparece a la izquierda de la posici´n de dibujo, por tanto un valor o de -0.1 dejar´ un 10% de la anchura del texto entre el mismo y la posici´n de a o dibujo. cex=1.5 Es el car´cter de expansi´n. Su valor indica el tama˜o de los caracteres de a o n texto (incluidos los caracteres de dibujo) respecto del tama˜o predeterminado. n
  • 84. Cap´ ıtulo 12: Procedimientos gr´ficos a 78 12.5.2 Ejes y marcas de divisi´n o Muchos de los gr´ficos de nivel alto en R tienen ejes, pero, adem´s, siempre es posible a a construirlos con la funci´n gr´fica de nivel bajo, axis(). Los ejes tienen tres componentes o a principales: La l´ ınea del eje, cuyo estilo lo controla el par´metro lty, las marcas de divisi´n, a o que indican las unidades de divisi´n del eje, y las etiquetas de divisi´n, que indican las o o unidades de las marcas de divisi´n. Estas componentes pueden modificarse con los siguientes o par´metros gr´ficos: a a lab=c(5, 7, 12) Los dos primeros n´meros indican el n´mero de marcas del eje x y del eje y u u respectivamente, y el tercer n´mero es la longitud de las etiquetas de los ejes u medida en caracteres (incluido el punto decimal). Atenci´n: Si elige un n´mero o u muy peque˜o puede que todas las etiquetas de divisi´n se redondeen al mismo n o n´mero. u las=1 Corresponde a la orientaci´n de las etiquetas de los ejes. Un 0 indica paralelo o al eje, un 1 indica horizontal, y un 2 indica perpendicular al eje. mgp=c(3, 1, 0) Son las posiciones de las componentes de los ejes. La primera es la distancia desde la etiqueta del eje al propio eje, medida en l´ ıneas de texto. La segunda es la distancia hasta las etiquetas de divisi´n. La tercera y ultima es la distancia o ´ desde el eje a la l´ ınea del eje (normalmente cero). Los valores positivos indican que est´ fuera de la zona de dibujo, y los negativos indican que est´ dentro. a a tck=0.01 Es la longitud de las marcas de divisi´n, dada como una fracci´n de la zona de o o dibujo. Cuando tck es peque˜o (menos de 0.5) las marcas de divisi´n de ambos n o ejes ser´n del mismo tama˜o. Un valor de 1 har´ que aparezca una rejilla. Si a n a el valor es negativo, las marcas de divisi´n se har´n por la parte exterior de la o a zona de dibujo. Utilice tck=0.01 y mgp=c(1,-1.5,0) para obtener marcas de divisi´n internas. o xaxs=s yaxs=d Estilo de eje de los ejes x e y respectivamente. Con los estilos s (est´ndar) y a e (extendido) tanto la mayor marca como la menor caen fuera del intervalo de los datos. Los ejes extendidos pueden ampliarse levemente si hay alg´n punto u muy pr´ximo al borde. Este estilo de ejes puede dejar a veces grandes zonas en o blanco cerca de los bordes. Con los estilos i (interno) y r (predeterminado) las marcas de divisi´n siempre caen dentro del rango de los datos, aunque el o estilo r deja un peque˜o espacio en los bordes. n Si selecciona el estilo d (directo) se procede a bloquear los ejes actuales y los utiliza para los siguientes gr´ficos hasta que el par´metro se cambie a otro a a de los valores. Este procedimiento es util para generar series de gr´ficos con ´ a escalas fijas. 12.5.3 M´rgenes de las figuras a Un gr´fico de R se denomina figura y comprende una zona de dibujo rodeada de a m´rgenes (que posiblemente contendr´n etiquetas de ejes, t´ a a ıtulos, etc.) y, normalmente, acotada por los propios ejes.
  • 85. Cap´ ıtulo 12: Procedimientos gr´ficos a 79 Una figura t´ ıpica es −−−−−−−−−−−−−−−−−− −−−−−−−−−−−−−−−−−− −−−−−−−−−−−−−−−−−− −−−−−−−−−−−−−−−−−− mar[3] −−−−−−−−−−−−−−−−−− −−−−−−−−−−−−−−−−−− 3.0 Plot region 1.5 0.0 y mai[2] −1.5 −3.0 −3.0 −1.5 0.0 1.5 3.0 mai[1] x Margin Los par´metros gr´ficos que controlan la disposici´n de la figura incluyen: a a o mai=c(1, 0.5, 0.5, 0) Anchuras de los m´rgenes inferior, izquierdo, superior y derecho respectiva- a mente, medidos en pulgadas. mar=c(4, 2, 2, 1) Similar a mai, pero medido en l´ ıneas de texto. Los par´metros mar y mai est´n relacionados en el sentido de que un cambio en uno se a a refleja en el otro. Los valores predeterminados son a menudo demasiado grandes, el margen derecho se necesita raramente, igual que el superior si no se incluye t´ ıtulo. Los m´rgenes a inferior e izquierdo s´lo necesitan el tama˜o preciso para incluir las etiquetas de ejes y de o n divisi´n. Adem´s el valor predeterminado no tiene en cuenta la superficie del dispositivo o a gr´fico. As´ si utiliza el dispositivo postscript() con el argumento height=4 obtendr´ a ı, a un gr´fico en que la mitad del mismo son m´rgenes, salvo que expl´ a a ıcitamente cambie mar o mai. Cuando hay figuras m´ltiples, como veremos despu´s, los m´rgenes se reducen a la u e a mitad, aunque suele ser insuficiente cuando varias figuras comparten la misma p´gina.a 12.5.4 Figuras m´ ltiples u R permite la creaci´n de una matriz de n × m figuras en una sola p´gina. Cada figura o a tiene sus propios m´rgenes, y la matriz de figuras puede estar opcionalmente rodeada de a un margen exterior , tal como se muestra en la siguiente figura:
  • 86. Cap´ ıtulo 12: Procedimientos gr´ficos a 80 −−−−−−−−−−−−−−− −−−−−−−−−−−−−−− −−−−−−−−−−−−−−− oma[3] −−−−−−−−−−−−−−− −−−−−−−−−−−−−−− omi[4] mfg=c(3,2,3,2) omi[1] mfrow=c(3,2) Los par´metros gr´ficos relacionados con las figuras m´ltiples son los siguientes: a a u mfcol=c(3, 2) mfrow=c(2, 4) Definen el tama˜o de la matriz de figuras m´ltiples. En ambos, el primer valor n u es el n´mero de filas, el segundo el de columnas. La diferencia entre los dos, es u que con el primero, mfcol, la matriz se rellena por columnas, en tanto que con el segundo, mfrow, lo hace por filas. La distribuci´n en la figura del ejemplo se o ha creado con mfrow=c(3,2) y se ha representado la p´gina en el momento en a que se han realizado los cuatro primeros gr´ficos. a mfg=c(2, 2, 3, 2) Definen la posici´n de la figura actual dentro de la matriz de figuras m´ltiples. o u Los dos primeros valores indican la fila y columna de la figura actual, en tanto que los dos ultimos son el n´mero de filas y columnas de la matriz de figuras ´ u m´ltiples. Estos par´metros se utilizan para seleccionar cada una de las dife- u a rentes figuras de la matriz. Incluso, los dos ultimos valores pueden ser distintos ´ de los verdaderos valores, para poder obtener figuras de tama˜os distintos en n la misma p´gina. a fig=c(4, 9, 1, 4)/10 Definen la posici´n de la figura actual en la p´gina. Los valores son las posiciones o a de los bordes izquierdo, derecho, inferior y superior respectivamente, medidos como la proporci´n de p´gina desde la esquina inferior izquierda. El ejemplo o a corresponder´ a una figura en la parte inferior derecha de la p´gina. Este ıa a par´metro permite colocar una figura en cualquier lugar de la p´gina. a a oma=c(2, 0, 3, 0) omi=c(0, 0, 0.8, 0) Definen el tama˜o de los m´rgenes exteriores. De modo similar a mar y mai, el n a primero est´ expresado en l´ a ıneas de texto y el segundo en pulgadas, correspon- den a los m´rgenes inferior, izquierdo, superior y derecho respectivamente. a Los m´rgenes exteriores son particularmente utiles para ajustar convenientemente los a ´ t´ ıtulos, etc. Puede a˜adir texto en estos m´rgenes con la funci´n mtext() sin m´s que n a o a
  • 87. Cap´ ıtulo 12: Procedimientos gr´ficos a 81 utilizar el argumento outer=T. R no crea m´rgenes exteriores predeterminadamente, pero a pueden crearse utilizando las funciones oma y omi. Es posible crear disposiciones de figuras m´ltiples m´s complejas utilizando las funciones u a split.screen() y layout(). 12.6 Dispositivos gr´ficos a R puede generar gr´ficos (con niveles de calidad diversos) en casi todos los tipos de a pantalla o dispositivos de impresi´n. Ahora bien, en primer lugar es necesario informarle o del tipo de dispositivo de que se trata. Esta acci´n se realiza iniciando un controlador o de dispositivo. El prop´sito de un controlador de dispositivo es convertir las instrucciones o gr´ficas de R (por ejemplo, ‘dibuja una l´ a ınea’) en una forma que el dispositivo concreto pueda comprender. Los controladores de dispositivo se inician llamando a una funci´n de controlador de o dispositivo. Existe una funci´n para cada controlador de dispositivo y la lista completa o puede conseguirse con help(Devices). Por ejemplo, la orden postscript() dirige cualquier salida gr´fica a la impresora en formato PostScript. Algunos controladores a de dispositivo habituales son: X11() Para uso con los sistemas de ventanas X11 y Microsoft Windows. postscript() Para imprimir en impresoras PostScript o crear archivos con este formato. pictex() Crea un archivo para LaTEX. Al terminar de utilizar un dispositivo, aseg´rese de finalizar el mismo utilizando la orden u dev.off() Esta orden asegura que el dispositivo finaliza correctamente; por ejemplo en el caso de una impresora asegura que cada p´gina sea completada y enviada a la impresora. a 12.6.1 Inclusi´n de gr´ficos PostScript en documentos o a Si utiliza el argumento file en la funci´n postscript(), almacenar´ los gr´ficos, en o a a formato PostScript, en el archivo que desee. Tenga en cuenta que si el archivo ya existe, ser´ previamente borrado. Ello ocurre aunque el archivo se haya creado previamente en la a misma sesi´n de R. El gr´fico tendr´ orientaci´n apaisada salvo que especifique el argumento o a a o horizontal=FALSE. El tama˜o del gr´fico se controla con los argumentos width (anchura) y n a height (altura) que se utilizan como factores de escala para ajustarlo a dichas dimensiones. Por ejemplo, la orden postscript(grafico.ps, horizontal=FALSE, height=5, pointsize=10) producir´ un archivo que contiene el c´digo PostScript para una figura de cinco pulgadas a o de alto, que podr´ ser incluido en un documento. A menudo dicha inclusi´n requiere que a o 1 el archivo se almacene en formato EPS . El archivo que produce R es de este tipo, pero s´lo lo indicar´ expresamente si se utiliza el argumento onefile=FALSE. Esta notaci´n es o a o 1 Acr´nimo en ingl´s de o e Encapsulated PostScript
  • 88. Cap´ ıtulo 12: Procedimientos gr´ficos a 82 consecuencia de la compatibilidad con S e indica que la salida est´ constituida por una sola a p´gina. Por tanto para crear un gr´fico que se pueda incluir sin problema en cualquier a a procesador, deber´ utilizar una orden an´loga a la siguiente: a a postscript(grafico.eps, horizontal=FALSE, onefile=FALSE, height=8, width=6, pointsize=10) 12.6.2 Dispositivos gr´ficos m´ ltiples a u La utilizaci´n avanzada de R implica a menudo tener varios dispositivos gr´ficos en o a uso simult´neamente. Naturalmente, s´lo un dispositivo gr´fico acepta las ´rdenes gr´ficas a o a o a en cada momento, y se denomina dispositivo actual. Cuando se abren varios dispositivos, forman una sucesi´n numerada cuyos nombres determinan el tipo de dispositivo en cada o posici´n. o Las principales ´rdenes utilizadas para trabajar con varios dispositivos y sus significados o son las siguientes: X11() Abre una ventana en Unix y Microsoft Windows windows() Abre una ventana en Microsoft Windows postscript() pictex() ... Cada llamada a una funci´n de controlador de dispositivo abre un nuevo dis- o positivo gr´fico y, por tanto, a˜ade un elemento a la lista de dispositivos, al a n tiempo que este dispositivo pasa a ser el dispositivo actual al que se enviar´n a los resultados gr´ficos. (En algunas plataformas es posible que existan otros a dispositivos disponibles.) dev.list() Devuelve el n´mero y nombre de todos los dispositivos activos. El dispositivo u de la posici´n 1 es siempre el dispositivo nulo que no acepta ninguna orden o gr´fica. a dev.next() dev.prev() Devuelve el n´mero y nombre del dispositivo gr´fico siguiente o anterior, re- u a spectivamente, al dispositivo actual. dev.set(which=k) Puede usarse para hacer que el dispositivo que ocupa la posici´n k en la lista o de dispositivos sea el actual. Devuelve el n´mero y nombre del dispositivo. u dev.off(k) Cierra el dispositivo gr´fico que ocupa la posici´n k de la lista de dispositivos. a o Para algunos dispositivos, como los postscript, finalizar´ el gr´fico, bien im- a a primi´ndolo inmediatamente, bien completando la escritura en el archivo, de- e pendiendo de c´mo se ha iniciado el dispositivo. o
  • 89. Cap´ ıtulo 12: Procedimientos gr´ficos a 83 dev.copy(device, ..., which=k) dev.print(device, ..., which=k) realiza una copia del dispositivo k. Aqu´ device, es una funci´n de disposi- ı, o tivo, como postscript, con argumentos adicionales si es necesario, especifica- dos por .... La funci´n dev.print es similar, pero el dispositivo copiado se o cierra inmediatamente, lo que finaliza las acciones pendientes que se realizan inmediatamente. graphics.off() Cierra todos los dispositivos gr´ficos de la lista, excepto el dispositivo nulo. a 12.7 Gr´ficos din´micos a a R no dispone (en este momento) de ninguna funci´n de gr´ficos din´micos, por ejemplo o a a para rotar una nube de puntos o activar y desactivar puntos interactivamente. Sin embargo existen muchas de estas posibilidades disponibles en el sistema XGobi de Swayne, Cook y Buja, disponible en http://www.research.att.com/areas/stat/xgobi/ a las que puede acceder desde R a trav´s de la biblioteca xgobi. e XGobi est´ disponible actualmente para X Windows, tanto en Unix como en Microsoft a Windows, y existen conexiones con R disponibles en ambos sistemas.
  • 90. Apendice A: Primera sesi´n con R o 84 Apendice A Primera sesi´n con R o La siguiente sesi´n pretende presentar algunos aspectos del entorno R, utiliz´ndolos. o a Muchos de estos aspectos le ser´n desconocidos e incluso enigm´ticos al principio, pero esta a a sensaci´n desaparecer´ r´pidamente. La sesi´n est´ escrita para el sistema UNIX, por lo o a a o a que es posible que los usuarios de Microsoft Windows deban realizar peque˜os cambios. n Con´ctese e inicie el sistema de ventanas. Es necesario que disponga del archivo e ‘morley.data’ en su directorio de trabajo, por lo que, si es necesario, deber´ a copiarlo. Si no sabe hacerlo, consulte con un experto local. Si ya lo ha copiado, contin´e. u $R Ejecute R. Comienza R y aparece el mensaje inicial. (Dentro de R no mostraremos el s´ ımbolo de ‘preparado’ en la parte izquierda para evitar confusiones.) help.start() Muestra la ayuda interactiva, que est´ escrita en formato html, utilizando el a lector WEB disponible en el ordenador. Si utiliza esta ayuda comprender´ a mejor el funcionamiento de R. Minimice la ventana de ayuda y contin´e la sesi´n. u o x - rnorm(50) y - rnorm(x) Genera dos vectores que contienen cada uno 50 valores pseudoaleatorios obtenidos de una distribuci´n normal (0,1) y los almacena en x e y. o plot(x, y) Aparecer´ una ventana gr´fica autom´ticamente. En ella se representan los a a a puntos antes generados, tomando cada componente de x y de y como las coor- denadas de un punto del plano. ls() Presenta los nombres de los objetos existentes en ese momento en el espacio de trabajo de R. rm(x, y) Elimina los objetos x e y. x - 1:20 Almacena en x el vector (1, 2, . . . , 20). w - 1 + sqrt(x)/2 A partir del vector x, crea un vector ponderado de desviaciones t´ ıpicas, y lo almacena en w. hoja.de.datos - data.frame(x=x, y= x + rnorm(x)*w) hoja.de.datos Crea una hoja de datos de dos columnas, llamadas x e y, y la almacena en hoja.de.datos. A continuaci´n la presenta en pantalla. o regr - lm(y ∼ x, data=hoja.de.datos) summary(regr) Realiza el ajuste de un modelo de regresi´n lineal de y sobre x, lo almacena en o regr, y presenta en pantalla un resumen del an´lisis. a
  • 91. Apendice A: Primera sesi´n con R o 85 regr.pon - lm(y ∼ x, data=hoja.de.datos, weight=1/w^2) summary(regr.pon) Puesto que se conocen las desviaciones t´ ıpicas, puede realizarse una regresi´n o ponderada. attach(hoja.de.datos) Conecta la hoja de datos, de tal modo que sus columnas aparecen como varia- bles. regr.loc - lowess(x, y) Realiza una regresi´n local no param´trica. o e plot(x, y) Representa el gr´fico bidimensional est´ndar. a a lines(x, regr.loc$y) Le a˜ade la regresi´n local. n o abline(0, 1, lty=3) Le a˜ade la verdadera recta de regresi´n (punto de corte 0, pendiente 1). n o abline(coef(regr)) Le a˜ade la recta de regresi´n no ponderada. n o abline(coef(regr.pon), col = red) Le a˜ade la recta de regresi´n ponderada. n o detach() Desconecta la hoja de datos, elimin´ndola de la trayectoria de b´squeda. a u plot(fitted(regr), resid(regr), xlab=Predichos, ylab=Residuos, main=Residuos / Predichos) Un gr´fico diagn´stico de regresi´n para investigar la posible heteroscedastici- a o o dad. qqnorm(resid(regr), main=Residuos por rangos) Gr´fico en papel probabil´ a ıstico normal para comprobar asimetr´ aplastamiento ıa, y datos an´malos. (No es muy util en este caso) o ´ rm(x,w,hoja.de.datos,regr,regr.pon,regr.loc) Elimina los objetos creados. file.show(morley.data) Presenta el contenido del archivo. mm - read.table(morley.data) mm Lee los datos de Michaelson y Morley y los almacena en la hoja de datos mm, y la muestra en pantalla a continuaci´n. Hay cinco experimentos (columna Expt) o y cada uno contiene 20 series (columna Run) y la columna Speed contiene la velocidad de la luz medida en cada caso, codificada apropiadamente. mm$Expt - factor(mm$Expt) mm$Run - factor(mm$Run) Transforma Expt y Run en factores.
  • 92. Apendice A: Primera sesi´n con R o 86 attach(mm) Conecta la hoja de datos en la posici´n predeterminada: la 2. o plot(Expt, Speed, main=Velocidad de la luz, xlab=No. Experimento) Compara los cinco experimentos mediante diagramas de cajas. fm - aov(Speed ∼ Run + Expt, data=mm) summary(fm) Analiza los datos como un dise˜o en bloques aleatorizados, tomando las ‘series’ n y los ‘experimentos’ como factores. fm0 - update(fm, . ∼ . - Run) anova(fm0,fm) Ajusta el submodelo eliminando las ‘series’, y lo compara utilizando un an´lisis a de la varianza. detach() rm(fm, fm0) Desconecta la hoja de datos y elimina los objetos creados, antes de seguir ade- lante. Consideraremos ahora nuevas posibilidades gr´ficas. a x - seq(-pi, pi, len=50) y - x x es un vector con 50 valores equiespaciados en el intervalo −π ≤ x ≤ π. El vector y es id´ntico a x. e f - outer(x, y, function(x, y) cos(y)/(1 + x^2)) f es una matriz cuadrada, cuyas filas y columnas est´n indexadas por x e y a respectivamente, formada por los valores de la funci´n cos(y)/(1 + x2 ). o oldpar - par(no.readonly = TRUE) par(pty=s) Almacena los par´metros gr´ficos y modifica el par´metro pty (zona de dibujo) a a a para que valga “s” (cuadrado). contour(x, y, f) contour(x, y, f, nlevels=15, add=TRUE) Dibuja un mapa de curvas de nivel de f ; y despu´s le a˜ade m´s l´ e n a ıneas para obtener m´s detalle. a fa - (f-t(f))/2 fa es la “parte asim´trica” de f . (t(f) es la traspuesta de f). e contour(x, y, fa, nint=15) Dibuja un mapa de curvas de nivel,. . . par(oldpar) . . . y recupera los par´metros gr´ficos originales. a a image(x, y, f) image(x, y, fa) Dibuja dos gr´ficos de densidad a
  • 93. Apendice A: Primera sesi´n con R o 87 objects(); rm(x, y, f, fa) Presenta los objetos existentes y elimina los objetos creados, antes de seguir adelante. Con R tambi´n puede utilizar n´meros complejos. 1i se utiliza para representar la e u unidad imaginaria, i. th - seq(-pi, pi, len=100) z - exp(1i*th) par(pty=s) plot(z, type=l) La representaci´n gr´fica de un argumento complejo consiste en dibujar la parte o a imaginaria frente a la real. En este caso se obtiene un c´ ırculo. w - rnorm(100) + rnorm(100)*1i Suponga que desea generar puntos pseudoaleatorios dentro del c´ ırculo unidad. Un primer intento consiste en generar puntos complejos cuyas partes real e imaginaria, respectivamente, procedan de una normal (0,1) . . . w - ifelse(Mod(w) 1, 1/w, w) . . . y sustituir los que caen fuera del c´ ırculo por sus inversos. plot(w, xlim=c(-1,1), ylim=c(-1,1), pch=+,xlab=x, ylab=y) lines(z) Todos los puntos est´n dentro del c´ a ırculo unidad, pero la distribuci´n no es o uniforme. w - sqrt(runif(100))*exp(2*pi*runif(100)*1i) plot(w, xlim=c(-1,1), ylim=c(-1,1), pch=+, xlab=x, ylab=y) lines(z) Este segundo m´todo utiliza la distribuci´n uniforme. En este caso, los puntos e o presentan una apariencia m´s uniformemente espaciada sobre el c´ a ırculo. rm(th, w, z) De nuevo elimina los objetos creados, antes de seguir adelante. q() Termina el programa R. Se le preguntar´ si desea salvar el espacio de trabajo. a Puesto que esta sesi´n ha sido solamente de presentaci´n, probablemente de- o o ber´ contestar que no. ıa
  • 94. Apendice B: Ejecuci´n de R o 88 Apendice B Ejecuci´n de R o B.1 Ejecuci´n de R en UNIX o La orden ‘R’ se utiliza para ejecutar R con diferentes opciones, de la forma R [opciones] [archivoentrada] [archivosalida], o, a trav´s del interfaz R CMD, para acceder a varias herramientas de R (por ejemplo, para e procesar archivos de formato de documentaci´n de R o manipular bibliotecas) que no est´n o a dise˜adas para ser usadas “directamente”. n Muchas opciones controlan lo que ocurre al comenzar y al terminar una sesi´n de R. El o mecanismo de inicio (Utilice ‘help(Startup)’ para informaci´n actualizada) es el siguiente: o • Salvo que se especifique la opci´n ‘--no-environ’, R busca el archivo ‘.Renviron’ en el o directorio actual; si no lo encuentra, busca el archivo indicado en la variable de entorno R_ENVIRON, y si esta variable no existe, busca el archivo ‘.Renviron’ en el directorio inicial del usuario. Si encuentra alguno de estos archivos, se ejecuta (como si se lo diese como argumento a la funci´n source dentro de R) para dar valores a las variables de o entorno. Las variables se exportan autom´ticamente, supuesto que se les d´ valor en a e l´ ıneas de la forma ‘nombre=valor’. Algunas de estas variables son: R_PAPERSIZE (tama˜o predeterminado del papel), n R_PRIMTCMD (orden predeterminada de impresi´n), o R_LIBS (lista de bibliotecas que deben buscarse), y R_VSIZE y R_NSIZE que describiremos despu´s. e • A continuaci´n, R busca el perfil de inicio global (para todos los usuarios) salvo que o se haya especificado la opci´n ‘--no-site-file’. El nombre de este archivo se toma o del valor de la variable de entorno R_PROFILE. Si esta variable no existe, el valor predeterminado es ‘$R_HOME/etc/Rprofile’. • Una vez acabado el paso anterior, si no se ha especificado la opci´n ‘--no-init-file’, o R busca un archivo llamado ‘.Rprofile’ en el directorio actual, y si no lo encuentra all´ lo busca en el directorio inicial del usuario. Si encuentra el archivo, lo ejecuta. ı, • Si existe un archivo llamado ‘.RData’, que contenga una imagen de espacio de trabajo, lo utiliza para restaurar el espacio de trabajo, salvo que se haya especificado la opci´n o ‘--no-restore’. • Por ultimo, si existe una funci´n llamada .First, la ejecuta. (Del mismo modo, si ´ o existe una funci´n llamada .Last ser´ ejecutada al finalizar la sesi´n de R) La funci´n o a o o puede definirse en los perfiles de inicio o residir en el archivo de imagen ‘.RData’. Adem´s de todo lo indicado, existen opciones para controlar la memoria disponible en a una sesi´n de R (Utilice ‘help(Memory)’ para disponer de informaci´n actualizada). R o o utiliza un modelo de memoria est´tico. Esto es, en el momento de iniciarse, el sistema a operativo le reserva una cantidad fija de memoria, que no puede alterarse durante la sesi´n. o Por tanto, pudiera ocurrir que no exista memoria suficiente en alg´n momento para realizar u una acci´n, por ejemplo, para leer un archivo de datos muy grande. Las opciones ‘--nsize’ o y ‘--vsize’ (o las variables de entorno R_NSIZE y R_VSIZE) controlan la memoria disponible para objetos de tama˜os fijo y variable, respectivamente. n Las opciones que pueden darse al ejecutar R son las siguientes:
  • 95. Apendice B: Ejecuci´n de R o 89 --help -h Muestra un peque˜o mensaje de ayuda y termina correctamente. n --version Muestra la informaci´n de la versi´n y termina correctamente. o o RHOME Muestra la trayectoria al “directorio inicial” de R y termina correctamente. Salvo la p´gina de ayuda en UNIX y el archivo de ejecuci´n, la instalaci´n de a o o R pone todos los archivos (ejecutables, bibliotecas, etc.) en este directorio. --save --no-save Indica si debe salvar la imagen del entorno al terminar la sesi´n. En modo in- o teractivo, si no ha especificado ninguna, le preguntar´. En modo no interactivo a es obligatorio usar una. --no-environ No lee ning´n archivo para dar valor a las variables de entorno. u --no-site-file No lee el perfil de inicio global al iniciar el programa. --no-init-file No lee el perfil de inicio de usuario al iniciar el programa. --restore --no-restore Indica si la imagen salvada (archivo ‘.Rdata’ en el directorio en que R se haya iniciado) debe ser recuperada o no. El valor predeterminado es recuperarla. --vanilla Combina las opciones ‘--no-save’, ‘--no-environ’ ‘--no-site-file’, ‘--no-init-file’, y ‘--no-restore’. --no-readline Desactiva la edici´n de ´rdenes a trav´s de readline. Esta opci´n suele utilizarse o o e o cuando se ejecuta R desde Emacs utilizando la biblioteca ESS (“Emacs Speaks Statistics”). V´ase Apendice C [El editor de ordenes], p´gina 93, para ampliar e a esta informaci´n. o --vsize=N Indica la cantidad de memoria utilizada para objetos de tama˜o variable. N n debe ser un entero, en cuyo caso la unidad de medida es el octeto o byte, o un entero seguido de una letra que indica la unidad de medida en octetos: ‘M’, ‘K’, o ‘k’, que corresponden respectivamente a ‘Mega’ (2^20), ‘Kilo’ (2^10) (de ordenador), o ‘kilo’decimal (1000). --nsize=N Indica la cantidad de memoria utilizada para objetos de tama˜o fijo. Las con- n sideraciones realizadas en el apartado anterior son v´lidas para N. a --quiet --silent -q No muestra ni el mensaje de copyright ni los mensajes de inicio.
  • 96. Apendice B: Ejecuci´n de R o 90 --slave Ejecuta R con el m´ ınimo de salidas posible. Esta opci´n se utiliza con programas o que se sirven de R para realizar c´lculos para ellos mismos. a --verbose Muestra el m´ximo de salidas posible. Adem´s modifica la opci´n verbose a a a o TRUE. R utiliza esta opci´n para controlar si debe mostrar mensajes de diag- o n´stico. o --debugger=depurador -d depurador Ejecuta R desde el programa de depuraci´n (debugger) depurador. En este o caso, si existen otras opciones, se descartan. Cualquier otra opci´n debe darse o al iniciar R desde el programa de depuraci´n. o --gui=tipo Utiliza tipo como interfaz gr´fico (advierta que esto tambi´n incluye los gr´ficos a e a interactivos). Los valores posibles de tipo son X11 (predeterminado) y GNOME, supuesto que GNOME est´ disponible. e La entrada y la salida pueden redirigirse de la manera habitual, utilizando ‘’ and ‘’. R CMD permite utilizar varias herramientas que son utiles en conjunci´n con R, pero que ´ o no est´n dise˜adas para usarlas “directamente”. La forma general es a n R CMD orden argumentos donde orden es el nombre de la herramienta y argumentos son los argumentos que se pasan a la misma. Las herramientas disponibles son: BATCH Ejecuta R en modo no interactivo. COMPILE Compila archivos para uso con R. SHLIB Construye bibliotecas compartidas del sistema operativo para carga din´mica. a INSTALL Instala bibliotecas a˜adidas. n REMOVE Elimina bibliotecas a˜adidas. n build Construye bibliotecas a˜adidas. n check Comprueba bibliotecas a˜adidas. n Rdconv Convierte desde formato Rd a otros formatos, incluyendo html, Nroff, LaTEX, texto ASCII sin formato, y formato de documentaci´n S. o Rd2dvi Convierte desde formato Rd a DVI/PDF. Rd2txt Convierte desde formato Rd a texto con formato. Rdindex Extrae informaci´n de ´ o ındices de archivos Rd. Sd2Rd Convierte desde formato de documentaci´n S a formato Rd. o Las cinco primeras herramientas (BATCH, COMPILE, SHLIB, INSTALL, y REMOVE) pueden ejecutarse “directamente” sin la opci´n CMD, esto es, en la forma R orden argumentos. o Utilice la orden R CMD herramienta --help para obtener informaci´n sobre cada una de las herramientas descritas. o
  • 97. Apendice B: Ejecuci´n de R o 91 B.2 Ejecuci´n de R en Microsoft Windows o El procedimiento de inicio en Microsoft Windows es muy similar al de UNIX, pero no necesariamente id´ntico. Existen dos versiones de R en este sistema operativo: Una basada e en ventanas MDI, RGui.exe, y otra en ventanas SDI, Rterm.exe, pensada especialmente para uso no interactivo. Muchas opciones controlan lo que ocurre al comenzar y al terminar una sesi´n de R. El o mecanismo de inicio (Utilice ‘help(Startup)’ para informaci´n actualizada) es el siguiente. o Las referencias al “directorio inicial” deben ser aclaradas, ya que ´ste no siempre est´ e a definido en Microsoft Windows. Si se ha definido la variable de entorno R_USER, entonces su valor es el directorio inicial. En caso contrario, lo define la variable de entorno HOME; y si tampoco est´ definida, lo har´n las variables HOMEDRIVE y HOMEPATH (que normalmente est´n a a a definidas en Windows NT). Si ninguna de las variables mencionadas existe, el directorio inicial ser´ el directorio de trabajo. a • Salvo que se especifique la opci´n ‘--no-environ’, R busca el archivo ‘.Renviron’ en o el directorio actual; si no lo encuentra, busca el archivo ‘.Renviron’ en el directorio inicial del usuario. Si encuentra alguno de estos archivos, se ejecuta (como si se lo diese como argumento a la funci´n source dentro de R) para dar valores a las variables de o entorno. Se asigna valor a las variables en l´ ıneas de la forma ‘nombre=valor’. Algunas de estas variables son R_PAPERSIZE (tama˜o predeterminado del papel), n R_PRIMTCMD (orden predeterminada de impresi´n), o R_LIBS (lista de bibliotecas que deben buscarse), y R_VSIZE y R_NSIZE que describiremos despu´s. e Las variables de entorno tambi´n pueden indicarse como parejas de la forma ‘nom- e bre=valor’ en la propia l´ınea de ´rdenes. o • A continuaci´n, R busca el archivo de perfil de inicio en el ordenador, salvo que se o indique la opci´n ‘--no-site-file’. El nombre del archivo se almacena en la variable o de entorno R_PROFILE y si no existe se toma ‘$R_HOME/etc/Rprofile’. • Si no se ha indicado ‘--no-init-file’, R busca el archivo ‘.Rprofile’ en el directorio actual o en el de inicio del usuario y ejecuta las ´rdenes en ´l contenidas. o e • A continuaci´n carga el archivo de imagen ‘.RData’, si existe, salvo que se indique la o opci´n ‘--no-restore’. o • Si existe la funci´n .First, la ejecuta. Esta funci´n, as´ como la funci´n .Last que se o o ı o ejecuta la finalizar la sesi´n de R, pueden definirse en los perfiles de inicio adecuados, o o residir en el archivo ‘.RData’. Adem´s de todo lo indicado, existen opciones para controlar la memoria disponible en a una sesi´n de R (Utilice ‘help(Memory)’ para disponer de informaci´n actualizada). R o o utiliza un modelo de memoria est´tico. Esto es, en el momento de iniciarse, el sistema a operativo le reserva una cantidad fija de memoria, que no puede alterarse durante la sesi´n. o Por tanto, pudiera ocurrir que no exista memoria suficiente en alg´n momento para realizar u una acci´n, por ejemplo, para leer un archivo de datos muy grande. Las opciones ‘--nsize’ o y ‘--vsize’ (o las variables de entorno R_NSIZE y R_VSIZE) controlan la memoria disponible para objetos de tama˜os fijo y variable, respectivamente. n
  • 98. Apendice B: Ejecuci´n de R o 92 Las opciones que pueden darse al ejecutar R en Microsoft Windows son las siguientes: --version Muestra la informaci´n de la versi´n y termina correctamente. o o --mdi --sdi --no-mdi Inidica si Rgui se comportar´ como un programa MDI (predeterminado), donde a cada nueva ventana est´ contenida dentro de la ventana principal, o como un a programa SDI, donde cada ventana aparece de modo independiente en el es- critorio. --save --no-save Indica si debe salvar la imagen del entorno al terminar la sesi´n. En modo in- o teractivo, si no ha especificado ninguna, le preguntar´. En modo no interactivo a es obligatorio usar una. --restore --no-restore Indica si la imagen salvada (archivo ‘.Rdata’ en el directorio en que R se haya iniciado) debe ser recuperada o no. El valor predeterminado es recuperarla. --no-site-file No lee el perfil de inicio global al iniciar el programa. --no-init-file No lee el archivo ‘.Rprofile’ del directorio del usuario (perfil de inicio de usuario) al iniciar el programa. --no-environ No lee el archivo ‘.Renviron’. --vanilla Combina las opciones --no-save, --no-restore, --no-site-file, --no-init-file y --no-environ. -q --quiet --silent No muestra el mensaje de inicio. --slave Ejecuta R con el m´ ınimo de salidas posible. --verbose Muestra el m´ximo de salidas posible. a --ess Prepara Rterm para uso en modo R-inferior en ESS.
  • 99. Apendice C: El editor de ´rdenes o 93 Apendice C El editor de ´rdenes o C.1 Preliminares Si la biblioteca de GNU, ‘readline’, est´ disponible cuando se compila R en UNIX, se a puede utilizar un editor interno de l´ ıneas de ´rdenes que permite recuperar, editar y volver o a ejecutar las ´rdenes utilizadas previamente. o Este editor puede desactivarse (lo que permite utilizar ESS1 ) dando la opci´n de inicio o ‘--no-readline’. La versi´n de Microsoft Windows dispone de un editor m´s sencillo. Vea la opci´n o a o ‘Console’ en el men´ ‘Help’. u Cuando use R con las posibilidades de readline, estar´n disponibles las opciones que a posteriormente se indican. Tenga en cuenta las siguientes convenciones tipogr´ficas usuales: a Muchas de las ´rdenes utilizan caracteres caracteres Control y Meta. Los caracteres o Control, tales como Control-m, se obtienen pulsando la tecla CTRL y, sin soltarla, pulsando la tecla m , y en la tabla los escribiremos como C-m. Los caracteres Meta, tales como Meta- b, se obtienen pulsando la tecla META y, despu´s de soltarla, pulsando la tecla b , y en la e tabla los escribiremos como M-b. Si su teclado no tiene la tecla META , puede obtenerlos mediante una secuencia de dos caracteres que comienza con ESC. Esto es, para obtener M-b, deber´ escribir ESC b . Estas secuencias ESC tambi´n puede utilizarlas aunque su teclado s´ a e ı disponga de la tecla META . Debe tener en cuenta que en los caracteres Meta se distingue entre may´sculas y min´sculas, por lo que puede que sea distinto el resultado si se pulsa u u M-b o M-B. C.2 Edici´n de acciones o R conserva un historial de las ´rdenes que se teclean, incluyendo las l´ o ıneas err´neas, o lo que permite recuperar las l´ ıneas del historial, modificarlas si es necesario, y volver a ejecutarlas como nuevas ´rdenes. Si el estilo de edici´n de ´rdenes es emacs cualquier o o o car´cter que teclee se inserta en la orden que se est´ editando, desplazando los caracteres a a que est´n a la derecha del cursor. En el estilo vi el modo de inserci´n de caracteres se inicia e o con M-i o M-a, y se finaliza con ESC . Cuando pulse la tecla RET , la orden completa ser´ ejecutada. a Otras acciones posibles de edici´n se resumen en la tabla siguiente. o C.3 Resumen del editor de l´ ıneas de ´rdenes o 1 Corresponde al acr´nimo del editor de textos, ‘Emacs Speaks Statistics’; o vea la direcci´n o http://ess.stat.wisc.edu/
  • 100. Apendice C: El editor de ´rdenes o 94 Recuperaci´n de ´rdenes y movimiento vertical o o C-p Recupera la orden anterior (retrocede en el historial). C-n Recupera la orden posterior (avanza en el historial). C-r text Recupera la ultima orden que contenga la cadena texto. ´ En muchos terminales, es posible utilizar las teclas de flecha hacia arriba y flecha hacia abajo, respectivamente, en vez de C-p y C-n. Movimiento horizontal del cursor C-a Va al principio de la l´ ınea. C-e Va al final de la l´ ınea. M-b Retrocede una palabra. M-f Avanza una palabra. C-b Retrocede un car´cter. a C-f Avanza un car´cter. a En muchos terminales, es posible utilizar las teclas de flecha hacia la izquierda y flecha hacia la derecha, respectivamente, en vez de C-b y C-f. Edici´n o text Inserta texto en el cursor. C-f text A˜ade texto tras el cursor. n DEL Borra el car´cter a la izquierda del cursor. a C-d Borra el car´cter bajo el cursor. a M-d Borra el resto de la palabra bajo el cursor, y la guarda. C-k Borra el resto de la l´ ınea desde el cursor, y lo guarda. C-y Inserta el ultimo texto guardado. ´ C-t Intercambia el car´cter bajo el cursor con el siguiente. a M-l Cambia el resto de la palabra a min´sculas. u M-c Cambia el resto de la palabra a may´sculas. u RET Vuelve a ejecutar la l´ ınea. Al pulsar RET , se termina la edici´n de la l´ o ınea.
  • 101. Apendice D: ´ Indice de funciones y variables 95 Apendice D ´ Indice de funciones y variables ! + ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 + ............................................ 8 != . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 % %*% . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 %o% . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 ^ ^ ............................................ 8 * * ............................................ 8 - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 - ............................................ 8 = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 .First . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 .Last . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 A abline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 / ace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 / ............................................ 8 add1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 anova . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59, 60 aov . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 : aperm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 : ............................................ 9 array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 as.data.frame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 = as.vector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 == . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 attach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 attr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 ? attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 ? ............................................ 4 avas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 axis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 | | . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 || . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 B boxplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 ~ break . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 ~ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 bruto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
  • 102. Apendice D: ´ Indice de funciones y variables 96 C G c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7, 10, 27, 29 glm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 cbind . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 coef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 H coefficients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 contour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 hist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38, 71 Contrastes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 coplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 cos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 I crossprod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22, 24 identify. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 cut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 ifelse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 D is.na . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 is.nan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 data.entry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 data.frame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 K density . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 ks.test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 detach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 dev.list. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 dev.next. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 L dev.off . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 legend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 dev.prev. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 length . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8, 14 dev.set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 levels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 deviance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 lines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 diag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 list . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 dim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 lm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 dotplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 lme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 drop1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 locator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 loess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67, 68 log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 lqs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 E lsfit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 ecdf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 eigen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 M Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 mars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 exp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 max . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 mean . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 min . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 F mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 F ............................................ 9 factor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 N FALSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 NA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 fivenum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 NaN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 ncol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 formula . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 next . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 function. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 nlm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65, 66, 67
  • 103. Apendice D: ´ Indice de funciones y variables 97 nlme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 S nrow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 scan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 seq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 O shapiro.test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 sin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 ordered . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 sink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 outer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 split . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 sqrt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 P stem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 pairs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 step . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59, 61 par . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 sum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 paste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38, 59 persp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 svd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 pictex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59, 69 T pmax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 t . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 pmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 T ............................................ 9 points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 t.test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 polygon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22, 27 postscript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 tan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 predict . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 tapply . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 print . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 prod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 title . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 TRUE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Q qqline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39, 71 U qqnorm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39, 71 unclass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 qqplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 qr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 V R var . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 range . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 var.test. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 vector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 rbind . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 read.fwf. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 read.table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 W rep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 repeat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 wilcox.test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 resid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 residuals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 rlm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 X rm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 X11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
  • 104. Apendice E: ´ Indice de conceptos 98 Apendice E ´ Indice de conceptos A G Acceso a datos internos . . . . . . . . . . . . . . . . . . . . . . 35 Gr´ficos cuantil-cuantil . . . . . . . . . . . . . . . . . . . . . . . 39 a Actualizaci´n de modelos ajustados . . . . . . . . . . . 61 o Gr´ficos din´micos . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 a a Ajuste por m´ ınimos cuadrados . . . . . . . . . . . . . . . . 25 ´ Ambito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 An´lisis de varianza . . . . . . . . . . . . . . . . . . . . . . . . . . 60 a Argumentos con nombre. . . . . . . . . . . . . . . . . . . . . . 47 H Asignaci´n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 o Hojas de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Atributos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Autovalores y autovectores . . . . . . . . . . . . . . . . . . . 25 I B Indexaci´n de vectores . . . . . . . . . . . . . . . . . . . . . . . 11 o Bibliotecas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Indexaci´n de y mediante variables indexadas . . 20 o C K Ciclos y ejecuci´n condicional . . . . . . . . . . . . . . . . . o 44 Kolmogorov-Smirnov, contraste de . . . . . . . . . . . . 40 Clases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15, 54 C´mo definir un operador binario . . . . . . . . . . . . . o 47 C´mo importar datos . . . . . . . . . . . . . . . . . . . . . . . . o 36 Concatenaci´n de listas . . . . . . . . . . . . . . . . . . . . . . o 29 L Contrastes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 Lectura de datos desde un archivo . . . . . . . . . . . . 33 Contrastes de una y de dos muestras . . . . . . . . . . 41 Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 Controladores de dispositivos gr´ficos . . . . . . . . . a 81 D M Descomposici´n en valores singulares . . . . . . . . . . o 25 M´xima verosimilitud . . . . . . . . . . . . . . . . . . . . . . . . a 67 Descomposici´n QR . . . . . . . . . . . . . . . . . . . . . . . . . . o 25 M´ ınimos cuadrados no lineales . . . . . . . . . . . . . . . . 65 Determinantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Modelos aditivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Diagrama de cajas . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Modelos basados en ´rboles . . . . . . . . . . . . . . . . . . . a 68 Distribuciones de probabilidad . . . . . . . . . . . . . . . . 37 Modelos estad´ısticos . . . . . . . . . . . . . . . . . . . . . . . . . 55 Modelos lineales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Modelos lineales generalizados . . . . . . . . . . . . . . . . 61 E Modelos mezclados. . . . . . . . . . . . . . . . . . . . . . . . . . . 67 Eliminar objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Escritura de funciones . . . . . . . . . . . . . . . . . . . . . . . . 46 Espacio de trabajo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Estimaci´n de la densidad . . . . . . . . . . . . . . . . . . . . 38 o O Expresiones agrupadas . . . . . . . . . . . . . . . . . . . . . . . 44 Objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 ´ Ordenes de control . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 Orientaci´n a objetos . . . . . . . . . . . . . . . . . . . . . . . . 54 o F Factores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17, 58 Factores ordinales . . . . . . . . . . . . . . . . . . . . . . . . 17, 58 P Familias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 F´rmulas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 o Par´metros gr´ficos . . . . . . . . . . . . . . . . . . . . . . . . . . a a 76 Funci´n de distribuci´n emp´ o o ırica . . . . . . . . . . . . . . 39 Personalizaci´n del entorno . . . . . . . . . . . . . . . . . . . o 53 Funciones gen´ricas . . . . . . . . . . . . . . . . . . . . . . . . . . 54 e Producto exterior de variables indexadas . . . . . . 23 Funciones y operadores aritm´ticos . . . . . . . . . . . . . 8 e Producto matricial . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
  • 105. Apendice E: ´ Indice de conceptos 99 R Tabulaci´n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 o Redirecci´n de la entrada y la salida . . . . . . . . . . . 5 o Traspuesta generalizada de una variable indexada Regla de reciclado . . . . . . . . . . . . . . . . . . . . . . . . . 8, 22 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Regresi´n con aproximaci´n local . . . . . . . . . . . . . 67 o o Trayectoria de b´squeda. . . . . . . . . . . . . . . . . . . . . . 31 u Regresi´n robusta. . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 o V S Valores faltantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Shapiro-Wilk, contraste de . . . . . . . . . . . . . . . . . . . 40 Valores predeterminados . . . . . . . . . . . . . . . . . . . . . 47 Student, contraste t de . . . . . . . . . . . . . . . . . . . . . . . 41 Vectores de caracteres . . . . . . . . . . . . . . . . . . . . . . . . 10 Sucesiones regulares . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 W T Wilcoxon, contraste de . . . . . . . . . . . . . . . . . . . . . . . 42
  • 106. Apendice F: Referencias 100 Apendice F Referencias D. M. Bates and D. G. Watts (1988), Nonlinear Regression Analysis and Its Applications. John Wiley Sons, New York. Richard A. Becker, John M. Chambers and Allan R. Wilks (1988), The New S Language. Chapman Hall, New York. This book is often called the “Blue Book ”. John M. Chambers and Trevor J. Hastie eds. (1992), Statistical Models in S. Chapman Hall, New York. This is also called the “White Book ”. Annette J. Dobson (1990), An Introduction to Generalized Linear Models, Chapman and Hall, London. Peter McCullagh and John A. Nelder (1989), Generalized Linear Models. Second edition, Chapman and Hall, London. John A. Rice (1995), Mathematical Statistics and Data Analysis. Second edition. Duxbury Press, Belmont, CA. S. D. Silvey (1970), Statistical Inference. Penguin, London.