Texto universitario

_____________________________

 

Modulo 5. Laboratorio R  

 


5. Lenguaje R


Las estadísticas, concebidas ampliamente, son el proceso de obtener significado, comprensión y modelos del comportamiento de los datos. Como tal, las estadísticas son un proceso fundamentalmente humano y no mecánico informático, que hace con grandes conjuntos de números incrustados como datos complejos, susceptibles de consignación humana. Algunas personas piensan que las estadísticas son solo un último proceso de la investigación empírica. Se diseña el estudio experimental empírico o sintético, se recogen los datos y luego se realiza un análisis estadístico de los datos. Esta visión es muy estrecha para el pensamiento estadístico. En particular vemos el proceso de obtener datos para un análisis como la parte de su análisis real. Por lo tanto, lo que la mayoría refiere como “preprocesamiento” o “discusión de datos” es una parte integral de las estadísticas. De hecho, durante el análisis real se invertirá en el esfuerzo intelectual de los datos. 


R hace que todo sea fácil, una vez que se acostumbra a su semántica y sintaxis. No hay manera de evadir las herramientas basadas en comandos si desea ser eficiente con los datos. Necesita escribir comandos de programación, en lugar de tratar con los datos exclusivamente a través de alguna interfaz gráfica de usuario. El uso de una herramienta de software basada en apuntar y hacer clic, como Excel, le ralentiza y es propenso a errores. Lo que es más importante, hace que sea más difícil para otros reproducir sus análisis. Señalar y hacer clic en sí mismo a través de alguna interface Excel, significa que otro investigador tendrá dificultades para rastrear sus pasos. Necesita un registro de su análisis en forma de código de programación dado que las hojas de cálculo de largas listas generan un error en el histórico[1]. 


El resultado de esta discusión es que es de importancia aprender un poco de R. El hecho de que esto implica escribir comandos en lugar de hacer clic en sí mismo a través de alguna interface gráfica puede parecer a primera vista desalentador. Pero no se angustie, le guiaremos paso a paso como novato recién llegado.


R es un entorno informático estadístico. Es un software gratuito (de código abierto) para computación estadística y gráfica[2] y un lenguaje de computadora diseñado para aplicaciones estadísticas y gráficas típicas. El lenguaje R incluye la capacidad de guardar y ejecutar comandos almacenados en archivos de script y en un editor integrado en la interfaz gráfica de usuario R (R-GUI). Está disponible para la mayoría de las plataformas, incluidas las plataformas Unix / Linux, PC y Macintosh. Además, miles de paquetes de librerías están disponibles, y los usuarios reciben herramientas para hacer paquetes.


El núcleo de R es un lenguaje informático interpretado. Este lenguaje proporciona el control lógico de la ramificación y la programación modular utilizando funciones. R contiene funciones y datos para implementar e ilustrar los procedimientos estadísticos más comunes, incluyendo regresión y ANOVA, pruebas paramétricas y no paramétricas clásicas, análisis de conglomerados, estimación de densidad y mucho más… Se proporciona un amplio conjunto de funciones de distribución de probabilidad y generadores númericos, así como un entorno gráfico para el análisis exploratorio de datos y la creación de gráficos de presentación.


R es un lenguaje interpretado, es decir, el sistema procesa los comandos ingresados ??por el usuario, quien escribe los comandos en el símbolo del sistema o envía los comandos desde un archivo llamado script. Suponemos que nuestros lectores usan R en una estación de trabajo de gráficos que se ejecuta un sistema de ventanas, como Windows, Macintosh o sistemas de ventanas X. En un sistema de ventanas, los usuarios interactúan con R a través de la consola R. Excepto por las operaciones más simples, la mayoría de los usuarios preferirán escribir comandos en un script para guardar el reescrito y para separar los comandos de los resultados. Sin embargo, comencemos trabajando directamente en el símbolo del sistema.


Cuando usamos la interfaz de línea de comandos, cada comando o expresión a evaluar se escribe en el símbolo del sistema e inmediatamente se evalúa cuando se presiona la tecla Intro al final de una declaración sintácticamente completa. 


5.1 Computación R 


La informática es fundamental para nuestra concepción de las estadísticas, tanto en la práctica, como en la enseñanza; dado que es necesario realizar simulaciones y gráficos para comprender los datos, los modelos y las propiedades estadísticas de los ajustes de modelos. Es necesario saber cómo acceder a datos necesarios para ensayar ejemplos, una introducción a R sobre tareas de procesamiento, análisis y programación de datos que surgen en la aplicación de la regresión. Además de hacer uso de punteros a paquetes útiles para el análisis de datos en R.


Algunos códigos de nuestros ejemplos utilizan otros paquetes de los que se pide ver, que se cargan al principio de R con librerías. Puede instalar el paquete RStudio haciendo clic en la pestaña de Packages & Data y a continuación instalar paquetes, escriba el nombre de los paquetes y haga clic en instalar. Cuando desee utilizar paquetes cárguelos según sea necesario, por ejemplo escribiendo Library (“brms”).


Para el uso de encajar modelos de regresión en este curso, sería suficiente con instalar rstanarm 


install.packages("rstanarm")

o

install.packages("rstanarm", repos = c("http://rstudio.org/_packages", "http://cran.rstudio.com"))


install.packages("promises")


Una vez concluida la instalación de un paquete, podrás usar sus funciones con la función library(). Sólo tienes que llamar esta función usando como argumento con el nombre del paquete que quieres utilizar


library (rstanarm)


Es importante que en mente debes hacer una llamada a library() cada que inicies una sesión en R. Aunque hayas importado las funciones de un paquete con anterioridad, las sesiones de R se inician “limpias”, sólo con los objetos y funciones de base. Los paquetes que hemos importado en nuestra sesión actual aparecen al llamar sessionInfo().También podemos ver qué paquetes tenemos ya instalados ejecutando la función installed.packages() sin ningún argumento. 


Casi siempre hacemos nuestra computación escribiendo scripts, en lugar de simplemente escribir comandos en la ventana de la consulta de R; por lo tanto, sugerimos escribir la línea de cargar librería justo al principio de cualquier de los scripts R que incluyamos, por ejemplo los llamados a stan_glm ( library(rstanarm) ). Para más información:


vignette("priors", package="rstanarm")



Puede descargar los archivos haciendo clic en enlace directo http://www.libertadacademica.com/ del archivo ROS-Examples-master.zip. 


5.1.1 Lo básico


Comenzaremos con las matemáticas más simples, la aritmética de numerosas operaciones en R. Consideramos que ya instaló R y RStudio. Donde RStudio es un paquete por default que facilita la gestión de proyectos en su flujo de trabajo. Al abrir RStudio, lo primero que ve es la consola, que es su ventana al mundo R. La consola es donde escribe los comandos justo después del símbolo “>”. Junto a él, verá un cursor parpadeante “|”. El parpadeo es la forma de R de decirle que está listo para que ingrese algunos códigos de comando. Una manera muy reduccionista es pensar en R como una calculadora. Este es nuestro punto de partida. 


La informática es fundamental para la estadística, sino sabes programar considera seguir paso a paso desde el comienzo. Comencemos escribiendo estas líneas a la vez y mirando los resultados en la consola de R. 


> 1/4

[1] 0.25

> sqrt(5)

[1] 2.236068

> curve(x^3+5, from=-3, to=3)


Se puede ver que regresa el decimal de 1/4, la raíz cuadrada de 5 y gracias la función f(x)=x^3+5. Por ahora salga de la sesión de R cerrando la ventanas de RStudio.


La adición y la sustracción se expresan:

> 3+5

[1] 8

> 4-2

[1] 2


Si teclea “4-” y Enter varias veces R devuelve “+”, no como un signo de adición. Es la forma de R de mostrarle que el último comando está incompleto. Hay dos maneras de salir de esto, ya sea suministrado un segundo número o abortando presionando Esc. Recuerde esto para cada vez que vea un signo suma en lugar de un “>” en la consola. Cuando esté en la consola y el cursor parpadee, puede presionar las flechas arriba y abajo para alternar entre el historial de comandos ejecutados. Esto puede ahorrar algo de escritura en caso de que desee volver a ejecutar un comando. Vamos a hacer un poco de aritmética, la división y la multiplicación y llevar un número a la potencia de otro número:


> 2/2 #división

[1] 1

> 3*5 # multiplicación 

[1] 15

> 2^8 # dos a la potencia de ocho

[1] 256


Ahora combinaremos operaciones aritméticas y utilizaremos parentesis para dar el orden predeterminado de las operaciones. Comparemos la salida de los dos comandos siguientes. 


> (2+3)*3

[1] 15

> 2+(3*3)

[1] 11


Las operaciones matemáticas simples tienen estructura “A operación B” justo como en las matemáticas. Sin embargo, la mayoría de las “funciones” en R se ven diferentes:


función(argumento1, argumento2,…)


Una función se puede considerar como un verbo o una acción. Los argumentos son las entradas de las funciones sobre los que son entradas para actuar la función. La mayoría de las funciones tienen al menos un argumento. Si una función tiene varios argumentos, están separados por comas. Algunos argumentos son obligatorios (la función no se ejecutará sin que se le proporcione un argumento específico). Otros argumentos son opcionales. Todo esto es bastante abstracto, así que vamos a demostrar esto con la función de sqrt() que realiza la raíz cuadrada:


> sqrt(7)

[1] 2.645751


Esta función solo tiene un argumento obligatorio. Necesita un número para tomar la raíz cuadrada de 7. Si no lo proporciona el argumento correspondiente, recibirá un mensaje de error: 


> aqrt()

Error in aqrt() : no se pudo encontrar la función "aqrt"


Otra función básica es la de valor absoluto abs(). Esta función devuelve el argumento en su valor positivo. 

> abs(-2)

[1] 2


Hasta ahora hemos escrito directamente en la consola. Sin embargo, esto es exactamente lo que no desea hacer en un análisis real. En su lugar, es necesario preparar un script de R, que contiene todo lo necesario para reproducir el análisis. La extensión del archivo .R es un archivo script. Vaya al menú File y selecciones la pestaña “New File”, una vez que hay abierto un nuevo archivo de script, la pantalla de RStudio se divide en dos mitades. La mitad superior es el script de R; la mitad inferior es la consola. Piense en su script de R como una receta y la consola de R como la cocina que procesa de acuerdo con la receta. Una metáfora alternativa es que su script R es el volante y la consola es el motor. 


Escriba el siguiente comando en el script de R (no en la consola) y presiente Enter.


 2*5


No pasa nada. El comando anterior solo está en le script ya no se ejecuta. Para que algo suceda, debe colocar el cursor en la línea del comando y  COMMAND+ENTER en un MAC y CTRL+ENTER en un PC. Esto enviará las instrucciones desde el script hasta la consola, donde R ejecuta el comando. 


Cuando trabaje con R, intente trabajar tanto como sea posible en el script, que debe contener todo lo necesario para reproducir el análisis. Los scripts también le permiten comentar su código, lo que puede hacer con el símbolo “#”. Todo a la derecha del # será ignorado por R. Así es como puede documentar los comandos. 


2*3 # multiplicación 


Comentar (documentar) es crucial. Imaginemos volver a su análisis después de un descanso de dos años, lo que sucede sorprendentemente a menudo. Para un análisis de datos razonablemente complejos, puede tomar horas averiguar qué está pasando. Su futuro yo le agradecerá dejar comentarios con ayuda de #. Los comentarios completos garantizan la reproducibilidad ya que otros investigadores tendrán más facilidad de leer el código. El resultado de esta práctica ayuda a pensar lo que se está haciendo.


Asignación de variables 

Vamos a usar el script de R para asignar variables. Escriba el siguiente comando en el script de R (no en la consola).

x<-2*6

Envía este comando a la consola con COMMAND+ENTER o CTRL+ENTER, no sucede en apariencia nada, pero el “<-” asigna lo que está a la derecha en el nombre de la izquierda. En este caso se denomina “x” y almacena la salida de “2*6”. Al escribir el nombre en el contenedor, se recupera el contenido.

> x

[1] 12

 

También la “x” se puede usar en otras operaciones matemáticas como si fuera un número. 

> x/3

[1] 4


Tenga en cuenta que R distingue entre mayúsculas y minúsculas, cuide este detalle a la hora de escribir código. Para recuperar una lista de todos los objetos del entorno de trabajo actual, escriba ls() (función de lista).

> ls()

[1] "x"


Observe una curiosidad sobre la función ls(): es una de las pocas funciones de R que no necesita ningún argumento, por lo que ejecuta la función sin ningún argumento y no genera un mensaje de error. 


Hasta este punto, el objeto “x” solo contenía un número. Una función práctica c() para crear objetos dimensionales de varios objetos, los vectores. 

x<-c(4.3,4,7)

> x

[1] 4.3 4.0 7.0

El objeto x es lo que se llama un vector. En R un vector simplemente es una lista de números. Puede probar la longitud de un vector con la función lengh().

> length(x)

[1] 3


Hay diferentes tipos de vectores, si bien “x” no contiene números, lo hace tipo numérico. La función mode() y class() se pueden usar para evaluar tipos de vectores. 

> mode(x)

[1] "numeric"

Es importante saber conque tipo de de vector está tratando dado que ciertas operaciones matemáticas solo se pueden aplicar a vectores numéricos. Creemos una secuencia de enteros de 10 a 1 utilizando la función de dos puntos. En R, los dos puntos “:” son un operador de secuencia que crea una secuencia de enteros desde el primer número hasta el último número. 


> miNumeros <- 10:1

> miNumeros

 [1] 10  9  8  7  6  5  4  3  2  1

Dado que miNumeros es un vector numérico, es posible realizar todo tipo de nuevas operaciones matemáticas en él. El código siguiente muestra algunas funciones de resumen útiles.

> sum(miNumeros) # suma números del vector

[1] 55

> min (miNumeros) # extrae el valor menor 

[1] 1

> max (miNumeros) # extrar el valor máximo

[1] 10


A menudo debe operar subconjuntos específicos de datos. Los vectores se pueden indexar por posición. Conceptualmente, es importante separar la posición de un vector del valor que almacena en dicha posición. Dado que cada vector en R está ordenado, es posible utilizar índices para solicitar el primer punto de datos, etc. 

> miNumeros[1]

[1] 10

> miNumeros[2]

[1] 9

> miNumeros[4:7]

[1] 7 6 5 4


Ahora que conocemos lo básico de indexación, también puede entender por qué hay un [?] delante de cada línea de salida de R que ha visto hasta ahora. Crear una secuencia de enteros más larga le ayudaría a envolver su cabeza alrededor de esto. 

> 1:100

  [1]   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18

 [19]  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36

 [37]  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54

 [55]  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72

 [73]  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90

 [91]  91  92  93  94  95  96  97  98  99 100 



[1] significa simplemente primera posición y el resto las posiciones relativas a los datos como si estuvieran en usa sola línea de texto. Siempre que haya una alto de línea, R mostrará la posición del primer valor que inicia una nueva fila. Los números de los corchetes de la izquierda pueden ser diferentes en la pantalla: esto dependerá de la resolución de la pantalla y de la resolución de la fuente impresa en la consola de R. 


Marcos de datos


Los marcos de datos son básicamente en R una hoja de cálculo. Un marco de datos es un objeto bidimensional, con filas y columnas. Cada columna contienen un vector. Vamos a crear un marco de datos. El siguiente comando concatena tres nombres en un vector. 


participantes <- c('rogelio','luis','liz')


A continuación, la función data.frame() se utiliza para crear un marco de datos a mano. Cada argumento de esta función se convierte en una columna. Aquí, el vector participante será la primera columna. La segunda columna se denomina puntuación y se proporciona un vector de tres números. 


> midf<- data.frame(participantes, calificacion= c(57,90,89))

> midf

  participantes calificacion

1       rogelio           57

2          luis           90

3           liz           89


Nota. Los acentos en R en esta versión no se permiten porque por default está en inglés. Para algunos etiquetas permite usar:

> Sys.setenv(LANG = "en")


Dado que un marco de datos es bidimesional, puede solicitar el número de filas o columnas. 

> nrow(midf)

[1] 3

> ncol(midf)

[1] 2


Solicitar columnas de nombres:

> colnames(midf)

[1] "participantes" "calificacion" 


Los marcos de datos se pueden indexar a través del nombre de la Columna mediante el operador de singo  “$”:

> midf$calificacion

[1] 57 90 89


Esto da como resultado un vector numérico. A continuación, puede aplicar funciones de resumen a este vector, como calcular la media:

> mean(midf$calificacion)

[1] 78.66667


Puede comprobar la estructura del marco de datos con la función str():

> str(midf)

'data.frame': 3 obs. of  2 variables:

 $ participantes: chr  "rogelio" "luis" "liz"

 $ calificacion : num  57 90 89


Esta función enumera todas las columnas y sus tipos vectoriales. Observe una curiosidad, la columna de participantes se indica que es un vector carácter (char). La función summary() proporciona un resumen útil, que enumera el número de puntos de datos para cada participante, así como lo que denomina un “resumen de cinco números” de la columna de calificación.


> summary(midf)

 participantes       calificación  

 Length:3           Min.   :57.00  

 Class :character   1st Qu.:73.00  

 Mode  :character   Median :89.00  

                    Mean   :78.67  

                    3rd Qu.:89.50  

                    Max.   :90.00  

Extraer filas y columnas

> midf[1,]

  participantes calificacion

1       rogelio           57

> midf[,2]

[1] 57 90 89

Al cargar archivos en su entorno de trabajo, R necesita saber qué carpeta de su equipo debe mirar, lo que se llama el “directorio de trabajo”. Utilice getwd() para comprobar el directorio de trabajo actual.ç

> getwd()

[1] "/Users/administradorcie/Documents/ALibros 2020 Prin CIE/Libro Estadistica2020/ROS-Examples"


Esta es la carpeta de su máquina donde R actualmente ‘mira’ y es donde espera sus archivos. Puede ver contenido de la carpeta R, utilizando la función list.files(). Una vez establecido el directorio de trabajo, se carga allí el archivo “nettle_1999_climate.csv” utilizando read.csv() de la siguiente manera. La extensión .csv significa que se trata de un archivo separado por comas (internamente las columnas están separadas por comas). Este conjunto de datos está tomado del libro de Nettl 1999 Linguistic Diversity[3]. 


Si no hay ningún mensaje de error ha cargado correctamente el archivo, Si hay mensajes de error compruebe la sintaxis del nombre y de la función escritos correctamente. Cada vez que cargue un archivo en R, el siguiente paso debe ser comprobar su contenido. La función head() muestra la lista de las primeras 6 filas del marco de datos en este caso de “Nettle”:

> head(nettle)

     Country Population Area  MGS Langs

1    Algeria       4.41 6.38 6.60    18

2     Angola       4.01 6.10 6.22    42

3  Australia       4.24 6.89 6.00   234

4 Bangladesh       5.07 5.16 7.40    37

5      Benin       3.69 5.05 7.14    52

6    Bolivia       3.88 6.04 6.92    38


La función tail() muestra las últimas 6 filas de la cola del marco de datos:

> tail(nettle)

     Country Population Area  MGS Langs

69 Venezuela       4.31 5.96 7.98    40

70   Vietnam       4.83 5.52 8.80    88

71     Yemen       4.09 5.72 0.00     6

72     Zaire       4.56 6.37 9.44   219

73    Zambia       3.94 5.88 5.43    38

74  Zimbabwe       4.00 5.59 5.29    18


Es importante discutir algunos puntos más con respecto a la gestión de archivos para proyectos de análisis de datos. En primer lugar, al salir de RStudio, aparecerá una pregunta “salir de las sesión R”, que le preguntará si desea guardar el contenido de su área de trabajo. Haga clic en “No”. Cada vez que abra R o RStudio. La nueva sesión de R debe abrir un nuevo entorno de trabajo y cargarse en los archivos necesarios. No desea que los objetos de proyectos de análisis anteriores estén flotando, lo que puede ralentizar las cosas y provocar conflictos de nomenclatura (como objetos con el mismo nombre). En su lugar, desea mantener todos los datos externos a R. 


Tampoco hay ningún problema si invalida o estropea un objeto R dentro de una sesión. Supongamos que accidentalmente invalida una columna con NA (valores que faltan). Esto no es un problema en lo absoluto. Simplemente vuelva a ejecutar la totalidad de su script  hasta el punto en que ocurrió el error, y tendrías todo de vuelta a donde estaba. Para la mayoría de los análisis simples, no hay realmente ningún propósito para respaldar los objetos R. Es buena idea estructurar su flujo de trabajo alrededor de un .CVS archivo, ya que estos son bastantes fáciles de tratar en R. Por supuesto, R es compatible con muchos otros tipos de archivos. 


Hay demasiados tipos de archivos para cubrir en este curso. A menudo, puede recurrir a Excel para abrir un archivo y guardarlo en un formato que pueda leer fácilmente en R, como .csv. Sin embargo, sugerimos cargar los archivos en R como texto, utilizando la función readLines() o read.table() especificando parámetros de control de estas funciones (ver las ayudas de estas funciones).


Llamadas a funciones y obtener ayuda


Para volver a abrir R y jugar un poco, utilizando la función de asignación (“<-”). Para empezar, escriba la siguiente línea para su archivo script.R y copie y pegue en la ventana de R:


a <- 3 

print(a) 

b <- 10 

a+b 

a*b 

exp(a) 

10^a 

log(b) 

log10(b) 

a^b 

round(3.435, 0) 

round(3.435, 1) 

round(3.435, 2) 


R se basa en funciones, que incluyen operaciones matemáticas (exp, log, sqrt,…) y muchas otras rutinas como print, round,… la función c() concatena los números en un vector. Por ejemplos, escriba c(4,10,-1,2.4) en la consulta de R:


> x<-c(4,10,-1,2.4)

> print(x)

[1]  4.0 10.0 -1.0  2.4


La función seq crea una una secuencia de números igualmente espaciados; por ejemplo seq(3,56,10) y retorna la secuencia 3 13 23 33 43 53. La función seq funciona con enteros y decimales. Para los enteros a:b se abrevia seq(a,b,1) para b>a o seq(a,b,-1) si b>a. Probemos los siguientes comandos:


> c(1,3,5)

[1] 1 3 5

> 1:5

[1] 1 2 3 4 5

> c(1:5,1,3,5)

[1] 1 2 3 4 5 1 3 5

> c(1:5,10:20)

 [1]  1  2  3  4  5 10 11 12 13 14 15 16 17 18 19 20

> seq(-1,9,2)

[1] -1  1  3  5  7  9


Puede obtener ayuda sobre cualquier función usando “?” en R. Por ejemplo escriba en la consola ?seq. Esto debería abrir una ventana emergente con un archivo del documento de ayuda que normalmente explica qué es, qué hacer… y algunos ejemplos de aplicación que puede pegar en la consola de R para observar lo qué sucede. 


Muestreo y números aleatorios 


A continuación se muestra cómo obtener un número aleatorio, distribuido uniformemente entre 0 y 1000; y luego dos números entre el mismo rango:


> runif(1,0,1000)

[1] 702.2285

> runif(2,0,1000)

[1] 479.18544  84.02615


Supongamos que queremos elegir uno de los tres colores con la misma probabilidad:


> color<- c("blue", "red", "green")

> sample(color,1)

Supongamos que queremos muestras con probabilidad desigual:

> color<- c("blue", "red", "green")

> p<- c(0.5,0.3,0.2)

> sample(color,1,prob=p)

O podemos hacerlo todo en una línea, que es más compacta pero menos legible:

> sample(c("blue", "red", "green"), 1, prob=c(0.5,0.3,0.2))

[1] "blue"


Tipos de datos


Datos numéricos. En R, los números se almacenan como datos numeric. Esto incluye muchos de los ejemplos anteriores, así como constantes especiales como pi.


Números grandes y pequeños. R reconoce la notación científica. Un millón se puede escribir como 1000000 o 1e6, pero no como 1,000,000. La notación científica también funciona para números pequeños, por ejemplo, 1e-6 es 0.000001.

Infinito. Escriba en R una línea a la vez y vea lo que sucede con:

> 1/0

[1] Inf

> -1/0

[1] -Inf

> exp(1000)

[1] Inf

> exp(-1000)

[1] 0

> 1/Inf

[1] 0

> Inf+Inf

[1] Inf

> -Inf-Inf

[1] -Inf

> 0/0

[1] NaN

> Inf-Inf

[1] NaN


Esas dos últimas operaciones devuelven NaN (No un número); tipo ?Inf para más información sobre el tema. En general tratamos de evitar trabajar con infinito, pero es conveniente tener Inf para aquellos momentos en los que accidentalmente dividimos por cero o realizamos otra operación matemática ilegal.


Faltan datos. En R, NA es una palabra clave especial que representa los datos que faltan. (?NA). Pruebe estos comando en R:

> NA

[1] NA

> 2+NA

[1] NA

> NA-NA

[1] NA

> NA*NA

[1] NA

> c(NA,NA,NA)

[1] NA NA NA

> c(1,NA,3)

[1]  1 NA  3

> 10*c(1,NA,3)

[1] 10 NA 30

> NA/0

[1] NA

> Na+Inf

Error: objeto 'Na' no encontrado

> is.na(NA)

[1] TRUE

> is.na(c(1,NA,3))

[1] FALSE  TRUE FALSE


La función is.na() comprueba si el argumento es NA o no. 


Cadenas de caracteres. Vamos a muestra un color aleatorio y un números aleatorio y ponerlos juntos:


> color<-sample(c("blue", "red", "green"), 1, prob=c(0.5,0.3,0.2))

> number<-runif(1,0,100)

> paste(color, number)

[1] "green 29.4468870153651"


Aquí hay algo más ilustrativo:

> paste(color, round(number,0))

[1] "green 29"


True, False, and ifelse

Intente antes esto:

> 2+3==4

[1] FALSE

> 2+3==5

[1] TRUE

> 1<2

[1] TRUE

> 2<1

[1] FALSE



En el siguiente ejemplo se ilustran algunas operaciones básicas con vectores. Los comandos R se ingresan en el indicador en la ventana de la consola R. El carácter del indicador es > y cuando se continúa una línea, el indicador cambia a +. (Los símbolos del indicador se pueden cambiar).



Ejemplo 1.1 (Datos de temperatura) Las temperaturas anuales promedio en Morelia, se registraron en grados Fahrenheit para un mes de octubre:


Años 2000 2001 2002 2003

Media Tem. 51.9 51.81 51.9 53


La función de combinación c crea un vector a partir de sus argumentos, y el resultado puede almacenarse en vectores definidos por el usuario. Utilizamos la función de combinación para ingresar nuestros datos y almacenar en un objeto llamado temps.


> temps = c(51.9, 51.8, 51.9, 53)


Para mostrar el valor de las temperaturas, uno simplemente escribe el nombre.


> temps

[1] 51.9 51.8 51.9 53.0


Supongamos que queremos convertir las temperaturas Fahrenheit (F) a temperaturas Celsius (C). La fórmula para la conversión es C = 5/9 (F −32). Es fácil aplicar esta fórmula a todas las temperaturas en un solo paso, porque las operaciones aritméticas en R están vectorizadas; las operaciones se aplican elemento por elemento. Por ejemplo, para restar 32 de cada elemento de temp:


> temps - 32

[1] 19.9 19.8 19.9 21.0


Luego (5/9) * (temps-32) multiplica cada diferencia por 5/9. Las temperaturas en grados Celsius son:


> (5/9) * (temps - 32)

[1] 11.05556 11.00000 11.05556 11.66667


De 2000 a 2003, las temperaturas medias anuales (Fahrenheit) en el estado de Michoacán fueron 48, 48.2, 48, 48.7. Almacenamos las temperaturas estatales en el vector CT y comparamos con las de Morelia con los promedios estatales. Por ejemplo, uno puede calcular las diferencias anuales en las temperaturas medias. Aquí CT y temp son vectores de longitud cuatro y la operación de resta se aplica elemento por elemento. El resultado es el vector de cuatro diferencias.


> CT = c(48, 48.2, 48, 48.7)

> temps - CT

[1] 3.9 3.6 3.9 4.3


Los cuatro valores en el resultado son diferencias en las temperaturas medias de 2000 a 2003. Parece que, en promedio, Morelia  disfrutó de temperaturas ligeramente más cálidas que el estado de Michoacán en este período.


Si deseamos saber cuantos datos tiene un vector, empezamos la función length().


> length(CT)

[1] 4


Ejemplo 1.2 La estatura máxima de los egresados de QFB es una secuencia regular para el vector ann, que podemos generar utilizando la función de secuencia seq(). Nuestro primer valor de datos corresponde al año 2008, por lo que la secuencia puede ser creada por:


> ann <- seq(from=2008, to=1948, by=-4)


O equivalente: 


> ann = seq(2008, 1948, -4)


Podemos asignar a cada año un valor de manera individual:


> qfb[4] = 189

> qfb[5] = 189


El operador de secuencia : nos permite realizar esta operación en un solo paso:


> qfb[4:5] = 189


Podemos asignar los valores de qfb con:


> qfb<- c(185,182,182,189,189,188,185,185,177,182,182,193,183,179,179,175)



Y mostrarlos con


> qfb

 [1] 185 182 182 188 188 188 185 185 177 182 182 193 183 179 179 175


¿Los egresados son más altos que los hombres adultos promedio?

Según el Sistema Nacional de Información Estadística y Geográfica, en 2005 la altura promedio de un hombre adulto fue de 175.768 cm. La media de la muestra se calcula mediante la función media.


> mean(qfb)

[1] 183.4375


Curiosamente, los egresados de Sonora tienen estaturas para estos años:


> sonora <- c(175, 193, 185, 187, 188, 173, 180, 177, 183,

+   185, 180, 180, 182, 178, 178, 173)


también tienden a ser más altos que el promedio.


> mean(sonora)

[1] 181.0625


Luego, usamos operaciones vectorizadas para calcular las diferencias en la altura y el oponente principal, y almacenamos el resultado en la diferencia. Una manera fácil de mostrar nuestros datos es como un cuadro de datos:


Tabla 5.1 Ejemplo de datos


> ann = seq(from=2008, to=1948, by=-4)

> qfb = c(185, 182, 182, 188, 188, 188, 185, 185, 177,

+   182, 182, 193, 183, 179, 179, 175)

> sonora = c(175, 193, 185, 187, 188, 173, 180, 177, 183,

+   185, 180, 180, 182, 178, 178, 173)

> diferencia = qfb - sonora

> data.frame(ann, qfb, sonora, diferencia)

    ann   qfb   sonora   diferencia

1  2008 185    175         10

2  2004 182    193        -11

3  2000 182    185         -3

4  1996 188    187          1

5  1992 188    188          0

6  1988 188    173         15

7  1984 185    180          5

8  1980 185    177          8

9  1976 177    183         -6

10 1972 182    185         -3

11 1968 182    180          2

12 1964 193    180         13

13 1960 183    182          1

14 1956 179    178          1

15 1952 179    178          1

16 1948 175    173          2



Vemos que la mayoría, pero no todas, las diferencias en altura son positivas. Otro enfoque para determinar si el egresado es más alto, es comparar las alturas con el operador lógico >. Al igual que la aritmética básica de operaciones, esta operación es vectorizada. El resultado será un vector de valores lógicos (VERDADERO / FALSO) que tiene la misma longitud que los dos vectores que se comparan.


> taller <- qfb > sonora

> taller

 [1]  TRUE FALSE FALSE  TRUE FALSE  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRU


La función de tabla resume datos discretos como el resultado en el vector:


> table(taller)

taller

FALSE  TRUE 

    5    11


Podemos usar el resultado de la tabla para mostrar porcentajes si dividimos el resultado entre 16 y multiplicamos ese resultado por 100.


> table(taller) / 16 * 100

taller

FALSE  TRUE 

31.25     68.75 


Por lo tanto, en las últimas 16 mediciones promedio anual de egresados, por ejemplo, podríamos mostrar un gráfico de barras de diferencias utilizando la función de gráfico de barras barplot. Para el gráfico usamos la función rev para revertir el orden de las diferencias para que los año aumente de izquierda a derecha. También proporcionamos una etiqueta descriptiva para ambos ejes.


> barplot(rev(diferencia), xlab ="estaturas promedio egresados 1948 a 2008",ylab="Direfencia de alturas en cm")


Imagen

Figura 5.1a Diagrama de barras de egresados de qfb y sonora.


El diagrama de barras de las diferencias en las alturas se muestra en la Figura 5.1a. También sería interesante mostrar un diagrama de dispersión de los datos. La versión del diagrama de dispersión se puede obtener en R mediante


> plot(qfb, sonora)


Imagen


Figura 5.1b Dispersión de datos 


Ejemplo 1.3 A finales del siglo XIX, los oficiales prusianos recopilaron datos sobre la muerte de soldados en 10 cuerpos que registraban muertes debido a Patadas de Caballo, durante un período de 20 años. Los 200 valores se resumen en la Tabla 5.2.


Imagen

Tabla 5.2 Fatídicas muertes por patadas de caballo a prusianos


Para ingresar estos datos, utilizamos la función de combinación c.


> k = c(0, 1, 2, 3, 4)

> x = c(109, 65, 22, 3, 1)


Para mostrar un diagrama de barras de las frecuencias, utilizamos la función de diagrama de barras barplot(x). La función diagrama produce un diagrama de barras como la Figura 5.2, pero sin las etiquetas debajo de las barras. El argumento names.arg es opcional; asigna etiquetas para mostrar debajo las barras. La figura 5.2 se obtiene mediante.


> k = c(0, 1, 2, 3, 4)

> x = c(109, 65, 22, 3, 1)

> barplot(x, names.arg=k)


Imagen


Figura 5.2 Distribución de frecuencias para muertes por patadas de caballo a prusianos.


La distribución de frecuencia relativa de los datos observados en x se calcula fácilmente usando la aritmética vectorizada en R. Por ejemplo, la proporción muestral de 1 es 65/200 = 0.545. La expresión x/sum (x) divide cada elemento de el vector x por la suma del vector (200). El resultado es un vector de la misma longitud que x que contiene las proporciones muestrales de los recuentos de muerte de 0 a 4.


> p = x / sum(x)

> p

[1] 0.545 0.325 0.110 0.015 0.005


El centro de esta distribución se puede estimar por su media muestral, que es:


Imagen


La última línea es simplemente la suma de p*k, porque R calcula este producto elemento por elemento ("vectorizado"). Ahora podemos escribir la fórmula de la media muestral como la suma del vector p*k. El valor de la media muestral luego se asigna a r.


> r = sum(p * k)

> r

[1] 0.61


Del mismo modo, se puede calcular una estimación de la varianza. Aplicar la fórmula de cálculo para la varianza de una muestra y1,..., yn:


Imagen


Aquí la media muestral es el valor r calculado arriba y:


Imagen

entonces la expresión dentro de las llaves se puede codificar como x*(k-r)^2. La varianza muestral v es:


> v = sum(x * (k - r)^2) / 199

> v

[1] 0.6109548


Entre las distribuciones de conteo que pueden ajustarse a estos datos (binomial, geométrico, binomial negativo, Poisson, etc.), el Poisson es el que tiene igual media y varianza. La media de la muestra 0.61 y la varianza de la muestra 0.611 son casi iguales, lo que sugiere ajustar un Distribución de Poisson a los datos. El modelo de Poisson tiene función de probabilidad de: 


Imagen 


Donde:

 Imagen

es la media de la distribución. La media de la muestra 0.61 es nuestra estimación de la media de la población λ. Sustituyendo la media de la muestra por λ en la densidad (1.1), las probabilidades de Poisson correspondientes son:


> f = r^k * exp(- r) / factorial(k)

> f

[1] 0.543350869 0.331444030 0.101090429 0.020555054 0.003134646


R tiene funciones de probabilidad para muchas distribuciones, incluyendo Poisson. Las funciones de densidad R comienzan con "d" y la función de densidad de Poisson es dpois. Las probabilidades anteriores también se pueden calcular como:


> f = dpois(k, r)

> f

[1] 0.543350869 0.331444030 0.101090429 0.020555054 0.003134646


R proporciona funciones para la densidad, función de distribución acumulativa (CDF), percentiles y para generar variables aleatorias para muchas distribuciones comúnmente aplicadas. Para la distribución de Poisson, estas funciones son dpois, ppois, qpois y rpois, respectivamente. Para la distribución normal, estas funciones son dnorm, pnorm, qnorm y rnorm.


¿Qué tan bien se ajusta el modelo de Poisson a los datos de la patada de caballo mortal? En una muestra de tamaño 200, los recuentos esperados son 200 f(k).


> floor(200*f)

[1] 108  66  20   4   0

> x

[1] 109  65  22   3   1


para k = 0,1,2,3,4, respectivamente. Los recuentos esperados y observados están muy de acuerdo, por lo que el modelo de Poisson parece ser bueno para estos datos. Uno puede comparar alternativamente las probabilidades de Poisson (almacenadas en el vector f) con las proporciones de la muestra (almacenadas en el vector p). Para resumir nuestra comparación de las probabilidades en una matriz, podemos usar rbind o cbind. Ambas funciones unen vectores para formar matrices; con rbind los vectores se convierten en filas, y con cbind el los vectores se convierten en columnas, aquí usamos cbind para construir una matriz con las columnas k, p y f.



> cbind(k, p, f)

     k     p           f

[1,] 0 0.545 0.543350869

[2,] 1 0.325 0.331444030

[3,] 2 0.110 0.101090429

[4,] 3 0.015 0.020555054

[5,] 4 0.005 0.003134646


Parece que las proporciones observadas p están cerca de las probabilidades de Poisson (0.61) en f.


5.1.2 Fuentes de datos, importación y exportación


El mundo ahora se basa en datos. La cantidad de datos generados y almacenados en todo el mundo es enorme, y lo es en todos los campos, áreas y sectores que uno pueda imaginar. Sin embargo, acceder a los datos no suele ser nada fácil. Hay muchas razones por las que no se comparten los datos. Una de las razones más serias es la privacidad y la confidencialidad. Los datos que involucran información personal siempre están protegidos de alguna manera por la ley y no se pueden compartir con otros simplemente porque sí. Sin embargo, la mayoría de las veces la razón es aún más simple. Recopilar y almacenar datos es una tarea tediosa y engorrosa y una vez que alguien lo ha hecho, tiene un valor abrumador que se puede transformar en enormes ganancias, por lo que, por supuesto, nadie está dispuesto a compartir un bien tan valioso.


Antes de cualquier tipo de procesamiento, hay cuatro aspectos a considerar, sin importar qué tipo de datos esté enfrentando un analista o qué tipo de análisis se va a realizar.


• Obtención: como se indicó anteriormente, aunque los datos están en todas partes, la obtención de datos puede variar desde algo tan fácil como recibir un archivo tabulado con toda la información hasta algo avanzado, como programar un script automatizado que recopile la información.

• Fiabilidad: esto, por supuesto, no es nuevo en el análisis de datos moderno, pero puede tener un impacto profundo en él. Se debe cuestionar la fuente de datos en sí. ¿Estamos obteniendo los datos de la fuente original? ¿De un tercero? Cuando generamos los datos nosotros mismos, ¿qué podría estar fallando? Además de una discusión abstracta sobre la confiabilidad, todas las fuentes de datos deben examinarse en profundidad para verificar cuán confiables son y para verificar posibles inexactitudes.

• Almacenamiento: A veces, y cada vez con mayor frecuencia, la cantidad de datos es tanta que no caben ni siquiera en el disco duro más grande. Esta es la primera razón para adoptar soluciones en línea, donde las ventajas de trabajar en la nube superan los problemas de almacenamiento.

• Procesamiento: incluso cuando el volumen no es tan grande y se puede almacenar en una computadora estándar, es frecuente que la memoria RAM esté sobrecargada. Por ejemplo, una base de datos de 10 GB en un solo archivo se puede almacenar en el disco duro de cualquier computadora, pero dicho archivo no se puede cargar completamente en la memoria RAM, ya que la mayoría de las computadoras no suelen tener más de 8 GB de RAM. Aquí surgen dos alternativas. Algunas soluciones de software especializadas son capaces de abrir el archivo de forma secuencial, cargando en la RAM en cada momento solo lo estrictamente necesario, o incluso algunos son capaces de leer el archivo directamente desde el disco duro. Aunque esta es una solución muy inteligente, ralentiza la carga y la escritura. La otra alternativa es, por supuesto, la computación en la nube, y por eso se ha vuelto tan importante.


El científico de datos debe tener esto en cuenta, pero una vez que se hayan abordado estos aspectos, ya no afectarán las conclusiones del análisis. El hecho de que un método se aplique localmente en una computadora o utilizando servicios en línea los datos deben permitan la computación distribuida afecta profundamente la eficiencia y la forma en que deben implementarse. Sin embargo, esto no afecta la elección particular de un algoritmo para un problema dado y el código para escribir en R. En la misma línea, una vez comprobada la autenticidad de la fuente, el código a ejecutar es idéntico independientemente de que las conclusiones finales se puedan reclamar con más o menos certeza.


5.2 Regresión lineal simple


La regresión lineal simple hace honor a su nombre: es un enfoque muy sencillo para predecir una respuesta cuantitativa Y sobre la base de una única variable predictora X. Se supone que existe aproximadamente una relación lineal entre X y Y. Matemáticamente, podemos escribir esta relación lineal como: 

 

Imagen Ec. 5.1

 

Puede leer “≈” como “aproximadamente se modela como”. A veces describiremos (5.1) diciendo que estamos retrocediendo Y sobre X (o Y sobre X). Por ejemplo, X puede representar publicidad y Y puede representar ventas. Entonces podemos hacer una regresión de las ventas por publicidad ajustando el modelo


Imagen


En la ecuación 5.1, β0 y β1 son dos constantes desconocidas que representan los términos de intersección y pendiente en el modelo lineal. Juntos, β0 y β1 se conocen como coeficientes o parámetros del modelo. Una vez que hemos utilizado nuestros datos de entrenamiento para producir estimaciones Imagen y Imagen para los coeficientes del modelo, podemos predecir las ventas futuras sobre la base de un valor particular de la publicidad calculando: 


Imagen.  Ec. 5.2


donde Imagen indica una predicción de Y sobre la base de X = x. Aquí usamos un símbolo de sombrero, Imagen, para denotar el valor estimado de un parámetro o coeficiente desconocido, o para denotar el valor predicho de la respuesta.


Imagen


representan n pares de observación, cada uno de los cuales consta de una medida de X y una medida de Y. En el ejemplo de Publicidad, este conjunto de datos consta del presupuesto de publicidad y las ventas de productos en n = 200 mercados diferentes. Nuestro objetivo es obtener estimaciones de coeficientes Imagen y Imagen de manera que el modelo lineal (3.1) se ajuste bien a los datos disponibles, es decir, de modo que Imagen para i = 1,..., n. En otras palabras, queremos encontrar una intersección Imagen y una pendiente Imagen tal que la línea resultante esté lo más cerca posible de los n = 200 puntos de datos. Hay varias formas de medir la cercanía. Sin embargo, con mucho, el enfoque más común implica minimizar el criterio de mínimos cuadrados por lo que adoptamos ese enfoque en este apartado. 



Imagen


Figura 5.3 Ventas (eje y) y publicidad (eje x)


Sea Imagen la predicción de Y basada en el i-ésimo valor de X. Entonces Imagen representa el i-ésimo residuo; esta es la diferencia entre el i-ésimo valor de respuesta observado y el i-ésimo valor de respuesta que se predice por nuestro modelo lineal. Definimos la suma de cuadrados residual (RSS) como:


Imagen


o equivalentemente como:


Imagen


El enfoque de mínimos cuadrados elige Imagen y Imagen para minimizar el RSS. Usando un poco de cálculo, se puede demostrar que los minimizadores son:


ImagenEc. (5.3)


Imagen


Donde:


Imagen


son las medias muestrales. En otra palabras, (5.3) define las estimaciones del coeficiente de mínimos cuadrados para regresión.


La figura anterior muestra el ajuste de regresión lineal simple a los datos de publicidad, donde Imagen = 7.03 y Imagen = 0.0475. En otras palabras, de acuerdo con esta aproximación, $1,000 adicionales gastados en publicidad se asocian con la venta de aproximadamente 47,5 unidades adicionales del producto. En la Figura siguiente, hemos calculado RSS para varios valores de β0 y β1, utilizando los datos publicitarios con las ventas como respuesta y la publicidad como predictor. En cada gráfico, el punto rojo representa el par de estimaciones de mínimos cuadrados Imagen dadas por (5.3). Estos valores minimizan claramente el RSS.



Imagen

Figura 5.4 Gráficos de contorno y tridimensionales del RSS en los datos publicitarios. Los puntos rojos corresponden a las estimaciones de mínimos cuadrados Imagen y Imagen.



5.2.1 Evaluación de la precisión de las estimaciones de coeficientes 


Recuerde que en Imagenque asumimos que la verdadera relación entre X y Y toma la forma Imagen para alguna función desconocida f, donde es una media cero término de error aleatorio. Si f debe aproximarse mediante una función lineal, entonces podemos escribir esta relación como


Imagen Ec.5.4


Aquí, Imagen es el término de intersección, es decir, el valor esperado de Y cuando X = 0 y Imagen es la pendiente, el aumento promedio en Y asociado con un aumento de una unidad en X. El término de error es un comodín para lo que echamos de menos con este modelo simple: la verdadera relación probablemente no sea lineal, puede haber otras variables que causen variación en Y y puede haber un error de medición. Normalmente asumimos que el término de error es independiente de X.


El modelo dado por (5.4) define la línea de regresión de la población, que es la mejor aproximación lineal a la verdadera relación entre X e Y . Las estimaciones del coeficiente de regresión de mínimos cuadrados (5.3) caracterizan la línea de mínimos cuadrados (5.2). El panel de la izquierda de la Figura 5.5 muestra estas dos líneas en un ejemplo simulado simple. Creamos 100 aleatorias X y generamos 100  correspondientes Y del modelo.


Imagen Ec. 5.5


donde se generó a partir de una distribución normal con media cero. La línea roja en el panel de la izquierda de la Figura 5.5 muestra la relación verdadera, f (X) = 2 + 3X, mientras que la línea azul es la estimación de mínimos cuadrados basada en los datos observados. La verdadera relación generalmente no se conoce para datos reales, pero la línea de mínimos cuadrados siempre se puede calcular usando las estimaciones de coeficientes dadas en (5.3). En otras palabras, en aplicaciones reales, tenemos acceso a un conjunto de observaciones a partir de las cuales podemos calcular la línea de mínimos cuadrados; sin embargo, la línea de regresión de la población no se observa. En el panel de la derecha de la Figura 5.5 hemos generado diez conjuntos de datos diferentes del modelo dado por (5.5) y hemos trazado las diez líneas de mínimos cuadrados correspondientes. Observe que diferentes conjuntos de datos generados a partir del mismo modelo verdadero dan como resultado líneas de mínimos cuadrados ligeramente diferentes, pero la línea de regresión de la población no observada no cambia.


Imagen

Figura 5.5 Un conjunto de datos simulados. Izquierda: la línea roja representa la relación verdadera, f (X) = 2 + 3X, que se conoce como la línea de regresión de la población. La línea azul es la línea de mínimos cuadrados; es la estimación de mínimos cuadrados para f (X) basada en los datos observados, que se muestran en negro. Derecha: La línea de regresión de la población se muestra nuevamente en rojo y la línea de mínimos cuadrados en azul oscuro. En azul claro, se muestran diez líneas de mínimos cuadrados, cada una calculada sobre la base de un conjunto separado de observaciones aleatorias. Cada línea de mínimos cuadrados es diferente, pero en promedio, las líneas de mínimos cuadrados están bastante cerca de la línea de regresión de la población.


A primera vista, la diferencia entre la línea de regresión de la población y la línea de mínimos cuadrados puede parecer sutil y confusa. Solo tenemos un conjunto de datos, entonces, ¿qué significa que dos líneas diferentes describan la relación entre el predictor y la respuesta? Fundamentalmente, el concepto de estas dos líneas es una extensión natural del enfoque estadístico estándar de usar información de una muestra para estimar las características de una gran población. Por ejemplo, suponga que estamos interesados en conocer la media poblacional μ de alguna variable aleatoria Y. Desafortunadamente, μ es desconocido, pero tenemos acceso a n observaciones de Y, que podemos escribir como Imagen, y que podemos usar para estimar μ. Una estimación razonable es Imagen, donde:

Imagen

es la media muestral. La media de la muestra y la media de la población son diferentes, pero en general la media de la muestra proporcionará una buena estimación de la media de la población. De la misma manera, los coeficientes desconocidos β0 y β1 en la regresión lineal definen la línea de regresión de la población. Buscamos estimar estos coeficientes desconocidos usando Imagen y Imagendados en (5.3). Estas estimaciones de coeficientes definen la línea de mínimos cuadrados.


La analogía entre la regresión lineal y la estimación de la media de una variable aleatoria es adecuada, basada en el concepto de sesgo. Si usamos la media muestral Imagen para estimar μ, esta estimación es insesgada, en el sentido de que, en promedio, esperamos que Imagen sea igual a μ. ¿Qué significa esto exactamente? Significa que sobre la base de un conjunto particular de observaciones Imagen, Imagen  podría sobreestimarse μ y, sobre la base de otro conjunto de observaciones, Imagen podría subestimar μ. Pero si pudiéramos promediar un gran número de estimaciones de μ obtenidas de un gran número de conjuntos de observaciones, entonces este promedio sería exactamente igual a μ. Por lo tanto, un estimador insesgado no sobreestima ni subestima sistemáticamente el parámetro verdadero. La propiedad del sesgo también se aplica a las estimaciones del coeficiente de mínimos cuadrados dadas por (5.3): si estimamos β0 y β1 sobre la base de un conjunto de datos en particular, nuestras estimaciones no serán exactamente iguales a β0 y β1. Pero si pudiéramos promediar las estimaciones obtenidas sobre una gran cantidad de conjuntos de datos, ¡entonces el promedio de estas estimaciones sería acertado! De hecho, podemos ver en el panel de la derecha de la Figura 5.5 que el promedio de muchas líneas de mínimos cuadrados, cada una estimada a partir de un conjunto de datos separado, está bastante cerca de la línea de regresión de la población real.


Continuamos con la analogía con la estimación de la media poblacional μ de una variable aleatoria Y. Una pregunta natural es la siguiente: ¿qué precisión tiene la media muestral Imagen como una estimación de μ? Hemos establecido que el promedio de ˆμ sobre muchos conjuntos de datos será muy cercano a μ, pero que una sola estimación de Imagen puede ser una subestimación o sobreestimación sustancial de μ. ¿A qué distancia estará esa única estimación de Imagen? En general, respondemos a esta pregunta calculando el error estándar de Imagen, escrito como SE (Imagen). Para ellos tenemos la conocida fórmula:


Imagen. Ec. 5.6




Referencias


[1] http://www.eusprig.org/horror-stories.htm

[2] http://www.R-project.org/

[3] Nettle, Daniel. (1999). Linguistic Diversity.

 

Autores:

Eduardo Ochoa Hernández
Nicolás Zamudio Hernández
Berenice Yahuaca Juárez
Erasmo Cadenas Calderón
Abraham Zamudio Durán
Lizbeth Guadalupe Villalon Magallan
Pedro Gallegos Facio
Gerardo Sánchez Fernández
Rogelio Ochoa Barragán
Monica Rico Reyes