sábado, 31 de diciembre de 2011

Sweave, FactoMineR y PDFs


El asunto es que estoy escribiendo un informe en LaTeX con Sweave. Lo hago así porque de esta forma me aseguro que añadir una variable o cambiar un dato no será un problema. El informe se volverá a generar en un minuto con todos los cambios.
El análisis que hago en concreto es un Análisis Factorial Múltiple o MFA (Multiple Factor Analysis) con el paquete FactoMineR. Se trata de un análisis de reducción de la dimensión cuando tenemos varios grupos de variables, tanto cuantitativas como cualitativas. Además este análisis permite estudiar los ejes principales mediante algunos gráficos y, como era de esperar, la representación de los individuos con las componentes principales.
En concreto utilizo PDFLaTeX directamente con el archivo .tex que resulta de procesar el archivo .Rnw con el Sweave. Así, los gráficos deben estar en formato PDF o PNG y no EPS. Ahora con Sweave esta es la opción por defecto.
Bueno, el caso es que los gráficos generados por el Sweave estaban vacíos. Eran archivos PDF con el nombre habitual por defecto, pero vacíos. ¿Sería un bug de Sweave? ¿Un error de mi instalación de R? ¿Un problema al cambiar de carpeta los archivos PDF?

Pues me costó un buen rato descubrir la razón del problema. Como siempre, lo primero fue aislar el error. No era un problema de Sweave, ni de mi instalación de R, ni de las opciones del Sweave (cambio de carpeta para las imágenes). Tuve que hacer unas cuantas pruebas, para descubrir que el problema estaba en los gráficos que generaba el paquete FactoMineR. En mi caso la función plot.MFA(). Tal vez, si hubiera leído mejor la ayuda de la función...

Bien, pues aquí va la explicación:
Resulta que para generar un gráfico en PDF, debemos desviar el dispositivo de salida gráfica hacia un archivo PDF. Eso se hace manualmente con la instrucción pdf() y seguramente lo debemos cerrar con la instrucción dev.off(). Eso es lo que hace automáticamente el Sweave.
Resulta que leyendo el código de la función plot.MFA() observé que, por defecto, hace una llamada a un nuevo dispositivo con la instrucción dev.new(). Ese era el problema.
Si abrimos el dispositivo pdf() y luego otro dispositivo con dev.new(), entonces el gráfico va al segundo dispositivo y al cerrarlo con dev.off(), cerramos el segundo y no el primero. La gente de FactoMineR tenía el problema previsto con un parámetro new.plot=TRUE que para mi gusto debería estar en FALSE por defecto. Ellos lo han puesto en TRUE para que podamos ver unos cuantos gráficos sin machacar el anterior, pero eso en mi caso era mortal.
En resumen, con la opción new.plot=FALSE, he podido generar el informe con PDFLaTeX sin problemas.
Moraleja: si pensáis en una función que genere varios gráficos seguidos, hay que pensar en un parámetro que regule la presentación uno a uno y que, mejor por defecto, no abra un nuevo dispositivo para cada uno.

sábado, 5 de noviembre de 2011

RKWard 0.5.7 para el nuevo R 2.14.0



Los desarrolladores de RKWard han lanzado una nueva versión (23 de octubre de 2011) de este magnífico software. Lo que me ha pasado es que al actualizar R a su versión 2.14.0, el RKWard dejó de funcionar. Pero como era de esperar, los amigos de RKWard ya estaban preparados.
Como yo utilizo Kubuntu (natty) he buscado el repositorio adecuado para actualizar RKWard que es

deb http://ppa.launchpad.net/rkward-devel/rkward-stable-cran/ubuntu natty main

y automáticamente se ha actualizado sin problema ninguno. Como veis todavía sigo con la versión natty o 11.04 de Kubuntu, ya que me gusta esperar algunos días antes de pasar a la nueva 11.10.

Además de nuevos detalles y corrección de errores, esta versión de RKWard viene con una importante mejora en la forma de añadir complementos, ya que ahora estos complementos se instalan como paquetes de R.

Aunque hay una versión para Windows, yo no la recomiendo ya que requiere un escritorio KDE para Windows y todavía no está demasiado desarrollada. Una opción alternativa y que comentaré próximamente es el programa multiplataforma RStudio que viene pegando fuerte.

martes, 12 de abril de 2011

El código de una función


Una de las ventajas de utilizar un programa como R de código libre es la posibilidad de aprender a través de la lectura del código de las funciones incorporadas, ya sea de los paquetes oficiales del CRAN o de los que proporcionan todas las personas que contribuyen de forma particular.

La forma más sencilla de acceder al código de una función es con la llamada a su nombre (sin paréntesis). Por ejemplo, para ver el código de la función matrix():

> matrix
function (data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)
{
data <- as.vector(data)
if (missing(nrow))
nrow <- ceiling(length(data)/ncol)
else if (missing(ncol))
ncol <- ceiling(length(data)/nrow)
.Internal(matrix(data, nrow, ncol, byrow, dimnames))
}
< environment: namespace:base >


Desgraciadamente los comentarios de estas funciones en los paquetes instalados se han eliminado para ahorrar memoria. Si queremos acceder al código fuente original, podemos descargar directamente el código de los paquetes del CRAN y descomprimirlos. Como los archivos están escritos con texto plano, podemos utilizar cualquier editor de texto para leer su contenido. Para los paquetes básicos de R, la carpeta es $R_HOME/src/library/NombrePaquete/R/.

En algunos casos, una función llama a otra función parcialmente oculta. Esa función oculta está en un namespace y se puede acceder a ella mediante la función getAnywhere("NombreFunción"). Esta función proporciona el namespace del que procede la función requerida y entonces podemos acceder a las fuentes de paquete correspondiente. Esto es así para los métodos S3 tales como plot.factor:

> plot.factor
Error: object 'plot.factor' not found
> getAnywhere("plot.factor")
A single object matching ‘plot.factor’ was found
It was found in the following places
registered S3 method for plot from namespace graphics
namespace:graphics
with value

function (x, y, legend.text = NULL, ...)
{
...
}
< environment: namespace:graphics >


El archivo que contiene el código de plot.factor es $R_HOME/src/graphics/R/plot.R.

Como ejemplo consideremos la función t.test(). Si queremos acceder a su código tenemos:

> t.test
function (x, ...)
UseMethod("t.test")
< environment: namespace:stats >

La llamada a UseMethod() oculta el código, pero nos indica que se trata de una función S3 genérica que llama a un método específico que será el apropiado para la clase del objeto. De modo que podemos preguntar cuales son los métodos apropiados así:

> methods(t.test)
[1] t.test.default* t.test.formula*

Non-visible functions are asterisked

De modo que ahora ya conocemos los métodos y podemos ver el código:

> getAnywhere(t.test.default)
A single object matching ‘t.test.default’ was found
It was found in the following places
registered S3 method for t.test from namespace stats
namespace:stats
with value

function (x, y = NULL, alternative = c("two.sided", "less", "greater"),
mu = 0, paired = FALSE, var.equal = FALSE, conf.level = 0.95,
...)
{
AQUÍ VEMOS EL CÓDIGO
}
< environment: namespace:stats >


En el caso de fuentes S4 es conveniente trabajar con los archivos fuente del paquete. Las funciones getClass(), getGeneric() y getMethod() nos pueden ayudar.

Cuando en el código de una función de R aparecen funciones del tipo .C(), .Call(), .Fortran(), .External() o .Internal() y .Primitive() es que llaman a código compilado. En estos casos deberemos mirar las fuentes originales (en C, C++ o Fortran) si queremos comprender todo el código.

Para més información consultar el artículo de Uwe Ligges:

R Help Desk en la Rnews_2006-4

jueves, 10 de marzo de 2011

El gráfico beanplot



Ciertamente, cuando se desea representar gráficamente unos datos cuantitativos univariantes existen varias posibilidades con diversas propiedades. Podemos hacer un histograma, un diagrama de tallo y hojas (stem-and-leaf), un diagrama de caja (boxplot), una densidad estimada y muchos más. Pero cuando se trata de comparar los valores de una variable cuantitativa para varias poblaciones o tratamientos, la mayoría no sirve. Por ejemplo, comparar un conjunto de histogramas o de gráficos de tallo y hojas es muy difícil, básicamente por el espacio que requieren. Así, para comparar datos univariantes en diferentes poblaciones casi siempre se utiliza el boxplot de Tukey o un gráfico de puntos unidimensional tipo stripchart cuando hay pocos datos.
Aunque hay algunas variaciones del boxplot clásico, como incrementar la anchura de la caja en función del número de observaciones con el parámetro varwidth=T, este gráfico se basa esencialmente en los estadísticos de posición como la mediana y las bisagras.
Otra posibilidad es el gráfico de violín descrito por Hintze and Nelson (1998) en el que una densidad se combina con los cuartiles del boxplot. En este gráfico no se muestran los valores atípicos (outliers).
Algunas críticas que se pueden hacer al boxplot se deben precisamente a la utilización de los cuartiles como elementos de difícil explicación (?) para los no matemáticos y la definición arbitraria del concepto de outlier. En un gráfico de violín la distribución subyacente es más visible, pero los datos concretos no se ven y no se conoce el número de observaciones del grupo.
El beanplot es una combinación de un gráfico de densidad (doble) con las marcas de todos los datos. Dichas marcas cambian de color si se salen del interior de la doble densidad y se alargan si coinciden algunos datos con el mismo valor.
Para poder comparar los grupos, se señalan las medias de cada grupo y la media general.
Por otra parte, si en la población general hay un factor con dos niveles, como el sexo, de puede considerar un beanplot asimétrico con dos densidades distintas en función del factor.
Sin embargo, aunque la vistosidad del beanplot parece aventajar al boxplot, no debemos olvidar que el boxplot se creó con la intención de tener un gráfico sencillo y sobre todo robusto, es decir, basado en estadísticos de orden.

Como es gratis, con cualquier conjunto de datos podemos hacer los dos gráficos, incluso no es difícil añadir al boxplot los datos concretos en otro color, y representaremos el que mejor explique nuestro experimento o los dos, si lo creemos conveniente.

sábado, 12 de febrero de 2011

La velocidad de la luz (3)

En primer lugar vamos a calcular los estadísticos más comunes con la ayuda del paquete fBasics y su función basicStats:
library(fBasics)
basicStats(tiempo)
##                  tiempo
## nobs          66.000000
## NAs            0.000000
## Minimum      -44.000000
## Maximum       40.000000
## 1. Quartile   24.000000
## 3. Quartile   30.750000
## Mean          26.212121
## Median        27.000000
## Sum         1730.000000
## SE Mean        1.322658
## LCL Mean      23.570591
## UCL Mean      28.853652
## Variance     115.462005
## Stdev         10.745325
## Skewness      -4.391574
## Kurtosis      25.518829

A primera vista podemos ver que hay mucha diferencia entre la media y la mediana, el recorrido es muy ancho y la asimetría elevada.

Podemos calcular los límites para que un valor sea considerado como atípico (outlier) con las bisagras (según Tukey).

LowerHinge - 1.5*(UH-LH), UpperHinge + 1.5*(UH-LH)
lh <- fivenum(tiempo)[2]
uh <- fivenum(tiempo)[4]
iqr <- uh - lh
c(lh,uh) + c(-1,1)*1.5*iqr
## [1] 13.5 41.5

o con los cuartiles:

Q1 - 1.5*IQR, Q3 + 1.5*IQR
q1 <- as.numeric(quantile(tiempo,0.25))
q3 <- as.numeric(quantile(tiempo,0.75))
c(q1,q3) + c(-1,1)*1.5*IQR(tiempo)
## [1] 13.875 40.875

En cualquier caso resulta evidente que los valores –44 y –2 son atípicos. El tratamiento de los outliers es otro de los asuntos que requieren un poco de sentido común. Algunas veces los valores atípicos tienen un especial interés como evidencia de un suceso extraordinario. Un valor atípico en la distribución del brillo observado por un satélite de vigilancia puede representar el lanzamiento de un misil. Un valor atípico en la distribución de las alturas puede mostrar a un jugador de baloncesto. En estos casos la distribución general muestra la rutina o la normalidad, mientras que los sucesos extraordinarios caen fuera. Pero Newcomb esperaba una distribución bien formada, con un claro centro y, en cambio, dos valores atípicos molestaban.

Cuando los valores atípicos son sorprendentes o inesperados, en primer lugar, hemos de buscar la causa o explicación, tal como un error del equipo de medida o un error de escritura del dato. Casi todos los grandes conjuntos de datos contienen errores, con frecuencia por erratas al entrar los datos en el archivo informático. Los valores atípicos sirven para detectar estos errores y corregirlos al repasar los datos originales. Si el equipo de medida falla o alguna otra condición anormal ha provocado el valor atípico, entonces debemos borrar el dato sin ningún problema. También el valor atípico puede evidenciar una extraordinaria incidencia o una inesperada variabilidad de los datos.

Newcomb, finalmente, despreció el más pequeño de los valores (–44) y retuvo los otros. El basó su estimación de la velocidad de la luz en el término medio (la media) de sus observaciones. La media de las 66 observaciones es 26.21; la media de las 65 retenidas es 27.29. El fuerte efecto de un único valor –44 sobre la media es un motivo para descartarlo, cuando nuestro interés es el centro de la distribución como un todo.

Para estos datos, la media recortada al 5% es 27.4.

mean(tiempo)
## [1] 26.21212
mean(tiempo[-6])
## [1] 27.29231
mean(tiempo, trim=0.05)
## [1] 27.4

La mediana es directamente 27 o puede subir a 27.5 si suprimimos los dos valores negativos.

median(tiempo[-c(6,10)])
## [1] 27.5

Todavía podemos contemplar los datos de Newcomb con otro gráfico. Cuando los datos representan observaciones similares tomadas a lo largo del tiempo, es bastante sensato dibujarlas con el tiempo o el orden temporal en que las observaciones fueron hechas.

La figura dibuja los lapsos de tiempo de Newcomb con su orden de recogida. El gráfico contiene una cierta sugerencia en el sentido de que la variabilidad (la anchura vertical del gráfico) disminuye con el tiempo. En particular, las dos observaciones atípicas fueron hechas muy pronto. Puede que él ganara experiencia y se hizo más hábil en la utilización de su aparato. Los efectos del aprendizaje, como en este caso, son bastante comunes. Si dejamos a Newcomb 20 observaciones para aprender, la media de los 46 restantes es 28.15.

mean(tiempo[-(1:20)])
## [1] 28.15217

Las medidas más modernas sugieren que el "verdadero valor" del lapso de tiempo medido por el experimento de Newcomb es 33.02. Eliminar los valores atípicos o permitir un período de aprendizaje no mueven el término medio más cerca del valor cierto. En todo caso, los ajustes basados sólo en criterios subjetivos son sospechosos. Si es posible, siempre es necesario hallar la razón de un valor atípico.

viernes, 19 de noviembre de 2010

La velocidad de la luz (2)

Figura 1. Diferentes histogramas con los 66 datos de Newcomb.

La primera observación evidente sobre los datos de Newcomb es que éstos varían. ¿Porqué? Se supone que, sobre todo, cada observación se hizo con el mismo patrón, medida por un observador cualificado y con el mismo aparato cada vez. Newcomb sabía, y nosotros también, que las medidas más precisas casi siempre varían. El entorno de cada medida es ligeramente diferente. El aparato cambia un poco con la temperatura, la densidad de la atmósfera también cambia de un día a otro, y así con otros detalles. Newcomb hizo lo que pudo para eliminar las fuentes de variación que podía anticipar y su experimento 0btuvo unas observaciones con menos variación que las de los científicos anteriores. Pero incluso el mejor experimento produce resultados variables. Por ello Newcomb tomó muchas medidas y no sólo una. La media de los 66 valores es menos variable que el resultado de una única medida, la media no depende tanto de la temperatura y la densidad atmosférica como una sola observación. Si nos ponemos ahora en el lugar de Newcomb, estaremos tentados por calcular la media de los datos, convertir esta velocidad en una nueva y mejor estimación de la velocidad de la luz y salir corriendo para incrementar nuestra reputación al publicar el resultado. La tentación de hacer un cálculo rutinario y anunciar la respuesta se presenta siempre que los datos han sido recogidos para contestar una cuestión específica. Las computadoras son muy buenas para los cálculos rutinarios, de manera que sucumbir a la tentación es un camino fácil. El primer paso hacia la sofisticación estadística es resistir la tentación de calcular sin pensar. Como la variabilidad está presente en cualquier conjunto de datos, debemos primero examinar la naturaleza de la variación y, en algunos casos, quedaremos sorprendidos por lo que veremos.

La distribución

El patrón de variación de una variable es su distribución. La distribución presenta los valores numéricos que toma una variable y la frecuencia con la que cada valor ocurre.

La mejor manera de observar una distribución es representarla gráficamente. Conocemos varias técnicas gráficas para representar los datos de Newcomb. En particular el histograma.

Para hacer un histograma, se procede en tres pasos:

  1. Se divide el rango de los datos en clases, casi siempre de la misma longitud.
  2. Se cuenta el número de observaciones que caen en cada clase, es decir, las frecuencias absolutas y se construye la tabla de frecuencias.
  3. Se dibuja el histograma.

Como el propósito de un histograma es mostrar la forma de una distribución, debemos estar muy atentos a los aspectos más visuales del gráfico. Nuestros ojos responden al área de las barras, de forma que ésta ha de ser proporcional a la frecuencia de la clase.

Ahora bien, antes de dibujar un histograma hay que decidir el número de clases, y eso es cuestión de opiniones.

La figura 1 se ha creado con el siguiente código:

tiempo <- Newcomb$Time*10^9 - 24800

png("histogramas.png")
oldpar <- par(mfrow=c(2,2))

hist.a <- hist(tiempo, breaks=-60+5*1:25, main=NULL, xlab="Tiempo (a)", ylab="Frecuencia", ylim=c(0,30), col="grey")
text(hist.a$mids, hist.a$counts, labels=ifelse(hist.a$counts==0,"",hist.a$counts), pos=3)

hist.b <- hist(tiempo, breaks=-52.5+5*1:25, main=NULL, xlab="Tiempo (b)", ylab="Frecuencia", ylim=c(0,30), col="grey")
text(hist.b$mids, hist.b$counts, labels=ifelse(hist.b$counts==0,"",hist.b$counts), pos=3)

hist.c <- hist(tiempo, breaks=c(-44,-33.5,-23,-12.5,-2,8.5,19,29.5,40,50.5), 
                          main=NULL, xlab="Tiempo (c)", ylab="Frecuencia", ylim=c(0,45), col="grey")
text(hist.c$mids, hist.c$counts, labels=ifelse(hist.c$counts==0,"",hist.c$counts), pos=3)

hist.d <- hist(tiempo, breaks=-60+10*1:12, main=NULL, xlab="Tiempo (d)", ylab="Frecuencia", ylim=c(0,45), col="grey")
text(hist.d$mids, hist.d$counts, labels=ifelse(hist.d$counts==0,"",hist.d$counts), pos=3)

par(oldpar)
dev.off()
Los histogramas de la figura 1 son diferentes en función de les clases que formemos.
  1. En el caso (a) el histograma está formado con los intervalos ]-60,-55], ]-55,-50],... de anchura 5 y marca de clase en los puntos –57.5, -52.5,..., -2.5, 2.5,..., 52.5, 57.5.
  2. En (b) el histograma está formado con los intervalos ]-52.5,-47.5], ]-47.5,-42.5],..., también con una longitud de 5 y con las marcas de clase en los valores -50, -45,..., -5, 0, 5,...,60.
  3. Si nosotros no decidimos los límites de los intervalos, la macro de Excel “Análisis de datos:Histograma” proporciona el gráfico (c). La anchura de los intervalos es 10.5 y el límite inferior del primer intervalo es el valor mínimo –44. El programa de Estadística SPSS construye un histograma con las marcas de clase -40, -30,..., -10, 0, 10,..., 40 y, por tanto, intervalos de longitud 10.
  4. Cuando consideramos intervalos de anchura 10 y centrados con marcas de clase -55, -45,..., -5, 5,..., 55, tenemos el histograma (d).

Los histogramas anteriores tienen la característica común de que todos los intervalos son de la misma longitud. Con estos datos podríamos considerar un primer intervalo, como por ejemplo ]-45,-15] que tiene una frecuencia absoluta de 2, y dibujar una barra con la altura de manera que el área sea proporcional a 2.

hist.e <- hist(tiempo, breaks=c(-45,15,20,25,30,35,40), 
                       main=NULL, xlab="Tiempo (e)", 
                       ylab="Frecuencia", ylim=c(0,0.09), col="grey")
text(hist.e$mids, hist.e$intensities,
                  labels=ifelse(hist.e$counts==0,"",hist.e$counts), pos=3)
lines(density(tiempo)) 

Otro tipo de gráfico que podemos utilizar con estos datos es el gráfico de tallo y hojas (stem and leaf):

stem(tiempo)

El resultado es, más o menos, así:

## 
##   The decimal point is 1 digit(s) to the right of the |
## 
##   -4 | 4
##   -3 | 
##   -2 | 
##   -1 | 
##   -0 | 2
##    0 | 
##    1 | 669
##    2 | 01122333444445555566666777777888888899999
##    3 | 0001122222334666679
##    4 | 0

La construcción de este gráfico no es tan arbitraria como el histograma y permite la reproducción de los datos originales.

Cualquier científico de laboratorio sabe que incluso las medidas más precisas varían, pero espera una distribución simétrica y con un único pico. Entonces el mejor estimador del verdadero valor de la cantidad medida es el centro de la distribución. Los histogramas y el gráfico de tallo y hojas muestran que Newcomb no fue afortunado, ya que los datos contienen valores atípicos (outliers). ¿Qué hay que hacer con ellos?

(continuará...)

martes, 16 de noviembre de 2010

La velocidad de la luz (1)

Simon Newcomb
Simon Newcomb


Los viajes de la luz son rápidos, pero no instantáneos. La luz tarda alrededor de un segundo en llegar desde la luna y sobre 10 billones de años desde el objeto más distante que se ha observado en nuestro expansivo universo. Como la radio y el radar también viajan a la velocidad de la luz, un valor ajustado de esta velocidad es muy importante para la comunicación con los astronautas y los satélites en órbita. Un valor ajustado de la velocidad de la luz también es muy importante para los diseñadores de computadoras, ya que las señales eléctricas viajan a esta velocidad.

La primera medida razonablemente ajustada de la velocidad de la luz se hizo hace más de 100 años gracias a los experimentos de A. A. Michelson y Simon Newcomb. La siguiente tabla contiene las 66 medidas hechas por Newcomb entre julio y septiembre de 1882.

28 22 36 26 28 28
26 24 32 30 27 24
33 21 36 32 31 25
24 25 28 36 27 32
34 30 25 26 26 25
-44 23 21 30 33 29
27 29 28 22 26 27
16 31 29 36 32 28
40 19 37 23 32 29
-2 24 25 27 24 16
29 20 28 27 39 23
Tabla. Medidas de Newcomb del lapso de la luz


Un conjunto de datos como estos no tiene sentido sin la información sobre su contexto. Debemos contestar algunas preguntas iniciales sobre cualquier conjunto de datos. Primero, "¿Qué variable se está midiendo?" Newcomb midió cuanto tiempo tardaba la luz en ir y volver desde su laboratorio en el río Potomac hasta un espejo en la base del monumento a Washington, una distancia de aproximadamente 7400 metros. Tal como nosotros calculamos la velocidad de un coche como el tiempo necesario para recorrer un kilómetro, Newcomb calculó la velocidad de la luz a partir del tiempo de ese viaje.

Contestar la pregunta ¿Qué variable se está midiendo? requiere una descripción del instrumento utilizado para hacer la medida. Entonces podremos juzgar si la variable medida es apropiada para nuestro propósito. Este juicio frecuentemente pide un conocimiento de experto en el campo particular de estudio. Por ejemplo, Newcomb inventó un nuevo y complicado aparato para medir el lapso de la luz. Nosotros como estadísticos aceptamos el juicio de los físicos en el sentido de que este instrumento es apropiado para la tarea encomendada y más preciso que los instrumentos anteriores.

El estudio de Newcomb de la velocidad de la luz mide una variable claramente definida y fácilmente comprensible. Preguntas sobre las medidas son mucho más difíciles de contestar en los campos de las Ciencias Sociales y Económicas que en las Físicas. Nosotros nos podemos poner de acuerdo fácilmente en el tipo de medida apropiado para calcular la altura de una persona, pero ¿como medimos la inteligencia?

Los usuarios de datos deberían ser conscientes de que considerar los números con su valor nominal, sin pensar en la variable medida y el proceso utilizado para medirla, puede producir serias malinterpretaciones.

Las dos preguntas que faltan sobre cualquier conjunto de datos deberían contestarse con mayor senzillez: ¿Cuales son las unidades de medida? y ¿Como están registrados los datos?

El paquete MASS contiene la base de datos newcomb con los datos de la tabla anterior, pero desordenados. Es mejor obtener los datos originales en la siguiente dirección:

http://people.reed.edu/~jones/141/Newcomb.html


La primera medida de Newcomb del lapso de la luz fué 0,000024828 segundos. De manera que su unidad de medida fueron los segundos. Pero los valores de la tabla inicial no se parecen a 0,000024828. Estos números son incómodos de escribir y difíciles de tratar aritméticamente. En consecuencia nosotros hemos movido la coma decimal nueve posiciones a la derecha, esto es 24828, y hemos registrado únicamente la desviación respecto a 24800. Así pues, 28 es el resumen de 0,000024828 y -2 significa 0,000024798. Este procedimiento se conoce como codificación de los datos. Se debe codificar cuando los datos originales contienen muchas cifras de las cuales sólo algunas varían de observación en observación. Los datos codificados son más fáciles de leer. Además, si utilizamos una calculadora o una computadora, reducir el número de cifras mejora los cálculos aritméticos y su precisión.

Ahora que hemos entendido lo que significan los datos de la tabla y su procedencia, podemos empezar a mirarlos más de cerca y estudiarlos más a fondo. En cualquier caso, y aunque parezca que los datos ya se entienden, conviene siempre contestar las tres preguntas preliminares.

(continuará...)

Bibliografía

D.S. Moore & G.P. McCabe, Introduction to the Practice of Statistics, W.H. Freeman & Company.