R, RStudio y Posit Cloud: tres cosas distintas
Antes de tocar una sola tecla conviene deshacer una confusión que acompaña a casi todo el que empieza. R, RStudio y Posit Cloud suelen nombrarse como si fueran lo mismo, y no lo son. Son tres piezas que encajan, y entender el encaje ahorra horas de desconcierto más adelante.
R es el lenguaje
Es el motor que calcula. Un programa sin ventanas que recibe instrucciones escritas y devuelve resultados. Si sólo instala R, trabaja en una consola negra, sin ayudas.
gratuito código abierto desde 1993
RStudio es el taller
Es el entorno de desarrollo: el mesón donde R trabaja cómodo. Pone alrededor del motor un editor con colores, la consola, la lista de objetos, los gráficos y la ayuda. R funciona sin él; usted no.
de Posit gratuito desde 2011
Posit Cloud es el taller en la nube
El mismo RStudio, pero ejecutándose en un servidor y mostrándose en el navegador. No se instala nada, los proyectos quedan guardados y se abren desde cualquier computador del mundo.
sin instalar plan gratuito posit.cloud
Definición · Entorno de desarrollo integrado
Un IDE (del inglés integrated development environment) es un programa que reúne en una sola ventana todo lo que hace falta para escribir, ejecutar y revisar código: editor de texto con resaltado, consola de ejecución, inspector de variables, visor de gráficos, ayuda y control de versiones. RStudio es el IDE de referencia para R.
La analogía que sí funciona
Piense en un carro. R es el motor: lo que de verdad mueve. RStudio es la cabina: el timón, los pedales, el tablero y los espejos. Se puede hacer andar un motor sin cabina —con unos cables y mucho cuidado—, pero nadie lo haría si tiene la cabina a mano. Y Posit Cloud es alquilar el carro completo en otra ciudad: no es suyo, no lo guarda en su garaje, pero está listo y andando en treinta segundos.
¿Por qué R y no una hoja de cálculo?
Una hoja de cálculo guarda resultados; un guion de R guarda el procedimiento. Esa diferencia, que parece menor, lo cambia todo:
Con el ratón
- Si llegan datos nuevos hay que repetir cada clic.
- Nadie puede revisar qué se hizo exactamente.
- Un error de celda pasa inadvertido para siempre.
- El análisis vive en un archivo y muere con él.
Con un guion de R
- Datos nuevos: se vuelve a ejecutar y ya está.
- El guion es la memoria del método.
- Cualquiera puede repetir el resultado, letra por letra.
- El trabajo se reutiliza en el proyecto siguiente.
Un poco de historia
R nació en el Departamento de Estadística de la Universidad de Auckland, en Nueva Zelanda. Lo escribieron Ross Ihaka y Robert Gentleman —de ahí la letra R, que es la inicial de los dos— como una versión libre del lenguaje S de los laboratorios Bell. La primera versión pública salió en 1993 y en 1997 se formó el equipo internacional que lo mantiene y el repositorio CRAN, donde hoy viven más de veinte mil paquetes. RStudio apareció en 2011, de la mano de J. J. Allaire; su empresa cambió de nombre a Posit en 2022.
Lo que hay que saber antes de seguir
El resto del cuaderno da por hecho tres ideas, y conviene fijarlas ahora:
- R es un lenguaje de órdenes, no de menús Todo lo que se hace se escribe. Al principio cuesta más que apuntar con el ratón; a las dos semanas es mucho más rápido, porque el teclado no obliga a buscar nada.
-
El guion es el trabajo
La consola es un borrador: lo que se escribe allí se pierde. El
guion —un archivo con extensión
.R— es lo que se guarda, se corrige y se entrega. - Casi todo son vectores En R, un número suelto es un vector de largo uno. Por eso las funciones trabajan sobre conjuntos enteros de datos sin necesidad de bucles, y por eso el código termina siendo tan corto.
Pruébelo ya
Esta es una celda de verdad: el editor es el mismo que usa RStudio y el que ejecuta es R. Cambie los números, pulse Ctrl+Enter y vea qué pasa.
Entrar a Posit Cloud y abrir el primer proyecto
Posit Cloud es RStudio funcionando en un servidor de Posit y mostrándose en su navegador. No hay que instalar R, ni RStudio, ni preocuparse por la versión: el salón de sistemas, el portátil de la casa y el computador de la biblioteca ven exactamente el mismo proyecto. El plan gratuito basta de sobra para todo este cuaderno.
Lo que ofrece el plan gratuito
Una cuenta sin costo, proyectos ilimitados en su espacio personal y unas 25 horas de cómputo al mes. Para un curso de estadística con tablas de unos pocos miles de filas, eso sobra. Si algún día se queda corto, siempre puede instalar R y RStudio en su propio computador: el código es exactamente el mismo.
-
Abrir el sitio
En la barra de direcciones escriba
posit.cloudy pulse Enter. Verá la página de bienvenida con dos botones: Sign Up para crear la cuenta y Log In para entrar si ya la tiene.P posit Cloud Log In Sign UpDo, share, teach and learn data scienceAnaliza tus datos con RStudio en el navegador. Sin instalar nada.Recreación de la pantalla. El botón que interesa es Sign Up, arriba a la derecha.
-
Crear la cuenta
Puede registrarse con el correo institucional o entrar directamente con una cuenta de Google. Lo segundo es más rápido y evita recordar otra contraseña. Si usa correo, llegará un mensaje de confirmación: hay que abrirlo y pulsar el enlace antes de poder entrar.
Crear una cuenta— o con su correo —nombre@institucion.edu.co••••••••Sign UpSi el correo de confirmación no aparece, revise la carpeta de correo no deseado: es lo que ocurre casi siempre.
-
Reconocer el espacio de trabajo
Al entrar aparece Your Workspace, su espacio personal. A la izquierda está la lista de espacios; al centro, los proyectos. La primera vez está vacío, y eso es justamente lo que se espera.
Si el profesor comparte un espacio del curso, aparecerá debajo con su nombre, y los proyectos que ponga allí los verán todos los estudiantes.
P posit Cloud NM Néstor M.SpacesYour WorkspaceEstadística 2026New SpaceLearnGuideRecipesYour Workspace
New ProjectAún no hay proyectos aquí.El botón New Project, arriba a la derecha, es el que abre el menú del paso siguiente.
-
Crear el proyecto de R
Pulse New Project y escoja la primera opción: New RStudio Project. Las otras sirven para Python y para copiar proyectos de GitHub; por ahora no hacen falta.
P posit Cloud NM Néstor M.New ProjectNew RStudio Project Un proyecto vacío con R y RStudioNew Jupyter ProjectPara trabajar en PythonNew Project from GitCopia un repositorioLa primera vez tarda entre veinte y cuarenta segundos: Posit está levantando una máquina con R sólo para usted.
-
Ponerle nombre al proyecto
Arriba, donde dice Untitled Project, haga clic y escriba un nombre con sentido:
Estadistica_2026oTaller_Regresion. Dentro de un mes habrá seis proyectos y ninguno se llamará «Untitled» por accidente.Nombres que se agradecen después
Sin tildes, sin eñes y sin espacios. Use guion bajo para separar palabras. Es una costumbre que viene de que los nombres de archivo viajan entre sistemas operativos distintos, y los acentos no siempre sobreviven el viaje.
-
Guardar y volver
Posit Cloud guarda solo, pero conviene pulsar el disquete (Ctrl+S) cada vez que se escribe algo importante. Para salir basta cerrar la pestaña; el proyecto queda donde estaba, con los objetos y los archivos intactos, listo para la próxima sesión.
Dos tropiezos del primer día
«El proyecto no abre y la pantalla queda gris.» Casi siempre es un bloqueador de ventanas emergentes o una extensión del navegador. Pruebe en una ventana de incógnito.
«Instalé un paquete y al volver ya no está.» Los paquetes se instalan dentro del proyecto, no en la cuenta. Si crea un proyecto nuevo, hay que volver a instalarlos allí. Por eso conviene trabajar todo el curso en un mismo proyecto.
Para practicar
- Cree la cuenta y abra un proyecto llamado
Cuaderno_R. - En la consola escriba
R.version.stringy pulse Enter: le dirá qué versión de R le tocó. - Escriba
2026 - 1993y confirme que RStudio responde[1] 33, los años que tiene R.
Anatomía de RStudio: los cuatro paneles
La primera vez, RStudio parece una cabina de avión. No lo es: son cuatro paneles, y cada uno responde a una pregunta distinta. Cuando se sabe qué pregunta responde cada cual, la pantalla deja de intimidar.
Esta es la ventana, recreada aquí mismo. Pase el ratón por encima o toque cada panel para ver qué hace.
# Análisis del consumo de energíalibrary(ggplot2) datos <- read.csv("hogares.csv")modelo <- lm(consumo ~ area, data = datos) summary(modelo)
| datos | 30 obs. of 3 variables |
| modelo | List of 12 |
| n | 30 |
| media | 238.1667 |
| consumo | num [1:30] 182 215 240 198 … |
La ventana de RStudio, recreada con HTML. No es una imagen: los colores del código son los del tema que RStudio trae por omisión, llamado Textmate.
Qué hace cada panel
El recorrido de una orden
Siga el camino: usted escribe en el editor (1) y pulsa Ctrl+Enter; la línea viaja a la consola (3), que es donde R la ejecuta. Si la orden crea un objeto, éste aparece en el entorno (2). Si dibuja algo, el resultado sale en Plots (4). Todo el trabajo con R es ese circuito, repetido mil veces.
Lo primero que conviene cambiar
En Tools ▸ Global Options ▸ General hay dos casillas que ahorran disgustos:
Desmarcar «Restore .RData»
Si queda marcada, RStudio reabre los objetos de la sesión anterior y el guion parece funcionar cuando en realidad está incompleto. El día que lo ejecute en otro computador, fallará.
«Save workspace: Never»
Por la misma razón. Lo que debe sobrevivir entre sesiones es el guion, no la memoria. Si el guion está completo, los objetos se vuelven a crear en segundos.
Para practicar
- En su proyecto, abra un guion nuevo con Ctrl+Shift+N y vea cómo la ventana se parte en cuatro.
- Escriba
x <- 1:10y ejecútelo con Ctrl+Enter. Compruebe quexaparece en Environment. - Escriba
plot(x, x^2)y vea el resultado en Plots. - Escriba
?ploty vea cómo se abre la pestaña Help.
Videotutorial: RStudio de principio a fin
Doce capítulos que recorren todo lo que hay que saber para trabajar en RStudio, desde crear el proyecto hasta ajustar un modelo. La pantalla se mueve sola: escribe, pulsa y los paneles responden, igual que si alguien estuviera al teclado. Puede pausar en cualquier momento, repetir un capítulo o bajar la velocidad.
mean {base}
Arithmetic Mean
Generic function for the (trimmed) arithmetic mean.
mean(x, trim = 0, na.rm = FALSE, ...)
Cómo usar RStudio
Doce capítulos, unos nueve minutos. Con narración, subtítulos y la pantalla moviéndose sola. Puede pausar y repetir cuando quiera.
Prof. Néstor Fabio Montoya Palacios
Sobre la narración
La narración viene encendida. Al pulsar reproducir, el videotutorial lee en voz alta cada subtítulo con el sintetizador de voz del propio navegador; el botón del altavoz la silencia y la vuelve a encender. Conviene subir el volumen del equipo antes de empezar, y en el celular comprobar que no está en silencio.
El cuaderno busca primero una voz en español instalada en el equipo, y prefiere las de América. Si no encuentra ninguna, avisa y narra con la voz que el navegador traiga por omisión; los subtítulos dicen exactamente lo mismo, palabra por palabra.
El flujo de trabajo y los atajos que lo sostienen
Quien aprende R por su cuenta suele cometer el mismo error de principio: trabajar en la consola. Funciona durante una tarde y se derrumba al día siguiente, cuando hay que repetir el análisis y nadie recuerda el orden de las órdenes. El flujo correcto es otro, y tiene cuatro movimientos.
- Escribir en el guion, no en la consola Abra un archivo con Ctrl+Shift+N y escriba ahí. La consola queda para tanteos de un segundo: «¿cuánto da esto?», «¿cómo se llamaba esa columna?».
- Ejecutar línea a línea mientras se construye Ctrl+Enter manda a la consola la línea del cursor y baja a la siguiente. Así se comprueba cada paso en el momento, que es la forma rápida de encontrar un error: en cuanto aparece.
- Revisar el entorno Después de cada asignación, mire el panel Environment. Si el objeto no está ahí, o no tiene la forma que esperaba, el problema está en esa línea y no tres líneas después.
- Antes de entregar, reiniciar y correr todo Ctrl+Shift+F10 reinicia R con la memoria vacía; Ctrl+Shift+Enter ejecuta el guion entero. Si corre limpio de arriba abajo, el análisis es reproducible. Si no, es que algo dependía de un objeto fantasma.
La prueba de fuego
Un análisis que sólo funciona en la sesión donde se escribió no sirve. Esa es la razón por la que conviene desactivar el guardado automático del espacio de trabajo en Tools ▸ Global Options: obliga a que el guion esté completo de verdad.
Los atajos que de verdad se usan
No hay que aprenderlos todos. Estos diez cubren el noventa por ciento del tiempo frente a la pantalla. En Mac, Ctrl es Cmd y Alt es Option.
<- con sus espacios.
|>.
+.
La lista completa
Alt+Shift+K abre, dentro de RStudio, la tarjeta con todos los atajos. Es más cómodo que buscarla en internet.
Los cuatro errores que verá esta semana
Ninguno es grave y todos tienen la misma causa: R es literal. Conviene reconocerlos de un vistazo.
| Mensaje | Qué pasó de verdad | Cómo se arregla |
|---|---|---|
object 'x' not found |
El objeto no existe, o se escribió con otra mayúscula. R
distingue Datos de datos. |
Revise el panel Environment y copie el nombre de ahí. |
could not find function "ggplot" |
El paquete está instalado pero no cargado en esta sesión. | Añada library(ggplot2) arriba del guion. |
La consola muestra + y no responde |
Falta cerrar un paréntesis, un corchete o unas comillas. | Pulse Esc y vuelva a escribir la orden completa. |
unexpected symbol |
Falta una coma entre dos argumentos, o sobra un paréntesis. | Lea el número de línea que R indica: el error está ahí o justo encima. |
Leer un error sin asustarse
R dice primero dónde ocurrió —Error in
mean(x) :— y después qué pasó. Esa primera parte es la
valiosa: señala la función exacta. Y una advertencia
(Warning) no es un error: el cálculo se hizo, pero
R quiere avisar de algo. Léala; muchas veces está diciendo que había
valores faltantes.
Pruébelo: provoque el error a propósito
Ejecute esta celda tal como está. Fallará, y es lo que se busca: hay que acostumbrarse a leer el mensaje y no a temerlo.
Corríjalo usted mismo: cambie notas_taller por
Notas_Taller en la última línea y vuelva a
ejecutar. Debe responder [1] 3.5.
Por qué no se escriben mayúsculas en los nombres
Precisamente por esto. La costumbre en R es usar sólo minúsculas y
guion bajo: notas_taller,
consumo_hogares,
modelo_lineal. Quien mezcla mayúsculas termina
perdiendo tardes enteras persiguiendo una letra.
Los paquetes: la biblioteca de R
R recién instalado trae lo esencial: aritmética, vectores, tablas, gráficos básicos, distribuciones de probabilidad y modelos lineales. Todo lo demás llega en paquetes: colecciones de funciones que alguien escribió, documentó y publicó en CRAN, el repositorio oficial. Pasan de veinte mil, y esa biblioteca es la verdadera razón por la que R se impuso en la estadística aplicada.
Definición · Paquete y biblioteca
Un paquete es un conjunto de funciones, datos y documentación
distribuido como una unidad. La biblioteca (library) es la
carpeta del computador donde se guardan los paquetes instalados. De ahí
viene el nombre de la función library(): no
instala nada, va a la biblioteca y trae a la mesa un paquete que ya está
allí.
install.packages("x")
Una sola vez por proyecto o por computador. Descarga el paquete de internet y lo deja en la biblioteca. Puede tardar minutos.
El nombre va entre comillas.
No se escribe dentro del guion que se entrega: se ejecuta en la consola, una vez.
library(x)
En cada sesión, cada vez que se abre R. Es instantáneo: sólo pone las funciones del paquete a disposición.
El nombre va sin comillas.
Sí va en el guion, y siempre en las primeras líneas, para que quien lo lea sepa qué hace falta.
El error más repetido del primer mes
could not find function "ggplot" casi nunca
significa que falte instalar: significa que falta
library(ggplot2). Instalar es bajar el libro a la
biblioteca; cargar es sacarlo del estante y ponerlo sobre la mesa. Cerrar
R devuelve todos los libros al estante.
Los paquetes que vale la pena conocer
Esta es la lista corta: lo que de verdad se usa en un curso de estadística y en una tesis. El autocompletado del editor de este cuaderno conoce las funciones principales de todos ellos.
| Paquete | Para qué sirve | Funciones que verá |
|---|---|---|
| tidyverse | Un paquete que instala a la vez los ocho siguientes. Es el estándar moderno para manejar datos. | library(tidyverse) |
| dplyr | Filtrar, ordenar, crear columnas y resumir por grupos. | filter, mutate, group_by, summarise |
| ggplot2 | Gráficos por capas, los de calidad de publicación. | ggplot, aes, geom_point, labs |
| tidyr | Pasar tablas de formato ancho a largo y al revés. | pivot_longer, pivot_wider, drop_na |
| readr · readxl | Leer archivos .csv y de Excel. | read_csv, read_excel |
| stringr · lubridate | Textos y fechas sin sufrir. | str_detect, ymd |
| car · lmtest | Diagnóstico de la regresión: colinealidad, heterocedasticidad, autocorrelación. | vif, bptest, dwtest |
| psych | Descriptivos completos, alfa de Cronbach y análisis factorial exploratorio. | describe, alpha, fa |
| MASS | Modelos clásicos, entre ellos la logística ordinal. | polr, stepAIC |
| broom | Convierte la salida de un modelo en una tabla ordenada, lista para informar. | tidy, glance, augment |
| lavaan · lme4 | Ecuaciones estructurales y modelos multinivel. | cfa, sem, lmer |
| knitr · rmarkdown | Informes que mezclan texto, código y resultados en un solo documento. | kable, render |
Preparar el proyecto de una vez
Ejecute este bloque una sola vez en la consola de RStudio, al empezar el curso. Instala sólo lo que falte y después comprueba que todo quedó bien.
Aquí no, allá sí
El bloque de arriba no funciona dentro de este cuaderno, y es
correcto que no funcione: el R del navegador no se conecta a CRAN. Para
probar un paquete aquí se usa webr::install("nombre"),
que trae una versión compilada para la web. En RStudio, en cambio, se usa
install.packages() como siempre.
Dos preguntas que ahorran tiempo
¿Qué trae un paquete?
Escriba help(package = "dplyr") para el
índice completo, o ?filter para una función
concreta. Muchos paquetes traen además guías largas:
browseVignettes("dplyr").
¿De qué paquete es esta función?
Si dos paquetes tienen una función con el mismo nombre, gana el que
se cargó de último. Para no dudar, escriba el paquete delante:
dplyr::filter(). Las dos dobles comas son la
forma de decir «ésta y no otra».
El choque clásico
MASS y stats también
tienen una función select() y una
filter(). Si carga MASS
después de tidyverse, los verbos de
dplyr dejan de responder. Solución: cargue
tidyverse de último, o llame
MASS::polr() sin cargar el paquete entero.
Los datos en R: vectores, factores y tablas
Antes de calcular nada hay que saber en qué forma guarda R la información. Son cuatro estructuras, y se construyen una encima de otra, como muñecas rusas.
Vector
Varios valores del mismo tipo, en fila. Es la pieza básica.
c(2, 5, 9)
Factor
Un vector de categorías, con sus niveles declarados y ordenados.
factor(c("alto","bajo"))
data.frame
Varios vectores del mismo largo puestos como columnas. Es la tabla de datos.
data.frame(x, y)
Lista
Una bolsa que guarda cualquier cosa: vectores, tablas, otros
modelos. Un lm() es una lista.
list(a = 1, b = "x")
La regla silenciosa del vector
Un vector sólo guarda un tipo de dato. Si mezcla, R convierte
todo al tipo más general sin avisar:
c(1, 2, "tres") se vuelve texto, y entonces
mean() falla. Cuando una columna que debería ser
numérica aparece como chr en
str(), casi siempre es porque un dato traía una
coma decimal, un espacio o un guion.
Los cuatro tipos de dato
| Tipo | En R | Ejemplo | Para qué se usa |
|---|---|---|---|
| Numérico | numeric / num | 3.14, 240 | Mediciones, conteos, cualquier cosa que se promedie. |
| Texto | character / chr | "Cartago" | Nombres, códigos, identificadores. Siempre entre comillas. |
| Lógico | logical / logi | TRUE, FALSE | Condiciones y filtros. Sin comillas y en mayúscula sostenida. |
| Categórico | factor / Factor | factor("bajo") | Variables cualitativas y grupos en los modelos. |
Los valores faltantes son NA
NA no es cero ni es texto: es «no se sabe».
Por eso mean(c(1, 2, NA)) devuelve
NA: si falta un dato, el promedio es
desconocido. Para ignorarlos se usa
mean(x, na.rm = TRUE), y para contarlos,
sum(is.na(x)).
Verlo funcionando
Esta celda recorre las cuatro estructuras. Ejecútela y vaya comparando cada salida con el comentario que la precede.
Traer datos de afuera
En el curso los datos suelen venir en un archivo. En RStudio hay dos caminos, y conviene usar el primero porque queda escrito en el guion.
- Subir el archivo al proyecto En Posit Cloud, panel Files ▸ botón Upload. El archivo queda junto al guion, así que basta nombrarlo sin ruta completa.
-
Leerlo con la función correcta
Ahí está la trampa colombiana: Excel en español guarda los
.csvcon punto y coma como separador y coma decimal. Para esos archivos la función esread.csv2(), con el dos al final. Si usaread.csv()le saldrá una sola columna con todo adentro. -
Comprobar antes de confiar
Siempre, sin excepción:
str(datos),head(datos)ysummary(datos). Si una columna numérica salió comochr, el problema es el archivo, no R.
Para practicar
- Cambie
treesporirisen la celda anterior y vuelva a ejecutar. ¿Qué columna no es numérica? - Con
iris, calcule la media deSepal.Lengthy la tabla de frecuencias deSpecies. - Quédese sólo con las flores de pétalo largo:
iris[iris$Petal.Length > 5, ]. ¿Cuántas son?
El laboratorio: RStudio aquí mismo
Esto no es una imitación decorativa: es un RStudio reducido pero funcional. El editor es Monaco, el mismo de Visual Studio Code, con autocompletado de funciones de R y ayuda al pasar el ratón; la consola acepta órdenes y las ejecuta con R 4.6.0 compilado para el navegador; el entorno se actualiza solo; y los gráficos salen en su panel, con historial.
Úselo para ensayar antes de llevar el código a Posit Cloud, o cuando no tenga internet suficiente para abrir la nube.
Ayuda
Escriba ?nombre en la consola — por ejemplo
?lm — y la ficha de esa función aparecerá aquí.
En el editor, pase el ratón por encima del nombre de una función para ver su descripción, y pulse Ctrl + Espacio para abrir el autocompletado.
Autocompletado
Escriba las tres primeras letras de una función y pulse Ctrl+Espacio. Aparecen sus argumentos, su descripción y el paquete al que pertenece. Lo mismo que hace RStudio con Tab.
Los mismos atajos
Ctrl+Enter ejecuta la línea o la selección; Ctrl+Shift+Enter ejecuta el guion entero. En la consola, ↑ recupera la orden anterior.
En qué se diferencia
Es R de verdad, pero dentro del navegador: no lee archivos de su
computador y los paquetes se instalan con
webr::install(). Para un trabajo real, use
Posit Cloud.
Describir unos datos: centro, dispersión y forma
Describir un conjunto de datos es reducir cientos de números a unos pocos que digan lo esencial. Siempre se responden las mismas tres preguntas, y en este orden: ¿alrededor de qué valor están?, ¿qué tan separados? y ¿con qué forma se reparten?
1 · El centro
Definición · Media aritmética
Es el punto de equilibrio de los datos: el valor en el que la barra se sostendría si cada dato fuera una pesa igual.
mean(x).Definición · Mediana
Es el valor que deja la mitad de los datos a cada lado, una vez ordenados. Con \(n\) impar es el dato central; con \(n\) par, el promedio de los dos centrales.
median(x).Cuándo la media engaña
La media se deja arrastrar por un solo dato extremo; la mediana no. Si en un salón de diez estudiantes nueve ganan dos millones y uno gana doscientos, la media dice 21,8 millones y la mediana dice 2. Para ingresos, precios de vivienda o tiempos de espera, informe siempre la mediana, o las dos.
Regla práctica: si \(\bar{x} \gt \mathrm{Me}\), hay cola hacia la derecha; si \(\bar{x} \lt \mathrm{Me}\), hacia la izquierda; si son casi iguales, el reparto es simétrico.
2 · La dispersión
Dos grupos pueden tener la misma media y no parecerse en nada. Lo que los distingue es cuánto se alejan los datos de ese centro.
Definición · Varianza y desviación estándar
var(x) y
sd(x).La varianza queda en unidades al cuadrado —kilovatios hora al cuadrado no significa nada—, y por eso se informa casi siempre la desviación estándar, que vuelve a las unidades originales.
¿Por qué \(n-1\) y no \(n\)?
Porque las desviaciones se miden respecto a \(\bar{x}\), que salió de los mismos datos. Eso hace que el conjunto parezca algo menos disperso de lo que es la población. Dividir entre \(n-1\) corrige ese sesgo: la varianza muestral así calculada estima sin sesgo la varianza de la población. A \(n-1\) se le llama grados de libertad: conocidos \(\bar{x}\) y \(n-1\) desviaciones, la última ya no es libre.
Definición · Coeficiente de variación
Por debajo del 15 % la dispersión es baja; entre 15 y 30 %, moderada; por encima de 30 %, alta. Sólo tiene sentido con variables positivas y de media no cercana a cero.
3 · La posición y la forma
Los cuartiles parten la muestra ordenada en cuatro partes iguales. Con ellos se arma el diagrama de caja, que de un vistazo muestra centro, dispersión, asimetría y datos raros.
quantile(x), IQR(x) y
boxplot(x), que la aplica sola.Un atípico no es un error
Antes de borrar nada, averigüe de dónde salió. Puede ser un error de digitación —una coma corrida— o puede ser el dato más interesante del conjunto: la finca que produce el triple, el paciente que no respondió al tratamiento. Se documenta y se decide; nunca se elimina en silencio.
Las órdenes, en una tabla
| Qué se quiere | Orden en R | Observación |
|---|---|---|
| Tamaño de muestra | length(x) | En una tabla, nrow(). |
| Media | mean(x) | na.rm = TRUE si hay faltantes. |
| Mediana | median(x) | Resiste los atípicos. |
| Varianza · desviación | var(x) · sd(x) | Muestrales, dividen entre \(n-1\). |
| Recorrido | diff(range(x)) | range() da el par mínimo-máximo. |
| Cuartiles | quantile(x) | Con probs= se piden otros. |
| Rango intercuartílico | IQR(x) | \(Q_3-Q_1\). |
| Todo junto | summary(x) | Los cinco números y la media. |
| Frecuencias | table(x) | Para variables categóricas. |
| Por grupos | tapply(x, g, mean) | Aplica la función dentro de cada grupo. |
La moda no tiene función propia
R no trae una función mode() para la moda
estadística: la función mode() que existe devuelve
el tipo de almacenamiento del objeto, que es otra cosa. Para la
categoría más frecuente se usa
names(which.max(table(x))).
El recibo de la luz de treinta hogares
El contexto
Datos del casoLa junta de acción comunal de un barrio de Cartago quiere presentar a la empresa de energía una queja por el valor de las facturas. Antes de escribir el oficio necesita cifras: no sirve decir «todos pagamos mucho». Se recogen los consumos del último mes, en kilovatios hora, de treinta viviendas de tamaño parecido.
La pregunta que hay que responder es triple: ¿cuánto gasta un hogar típico?, ¿qué tan parejo es el gasto entre vecinos? y ¿hay alguna vivienda con un consumo que se salga de lo razonable?
Qué vamos a calcular y por qué
- El tamaño de muestra Siempre primero. Un resumen sin \(n\) no se puede interpretar: no es lo mismo una media de treinta hogares que de tres.
- Media y mediana, juntas Comparar las dos revela de inmediato si hay asimetría. Si la media supera a la mediana, unos pocos consumos altos están empujando el promedio, y entonces el «hogar típico» no es el promedio.
- Desviación estándar y coeficiente de variación La desviación dice cuánto se aparta un hogar del centro, en kWh. El coeficiente de variación lo pone en porcentaje y permite comparar este barrio con otro aunque los niveles de consumo sean distintos.
- Cuartiles y la regla de Tukey Para responder la tercera pregunta con un criterio objetivo, y no «a ojo».
- Dos gráficos El histograma muestra la forma del reparto; el diagrama de caja, el centro, la dispersión y los atípicos. Juntos cuentan la historia completa.
Lea el código antes de ejecutarlo
El guion está comentado línea por línea. Léalo de arriba abajo, pulse Ejecutar y después vuelva a leerlo comparando cada orden con su resultado en la consola. Esa ida y vuelta es la que enseña.
Lectura de los resultados
- n = 30
- Treinta viviendas. Suficiente para describir el barrio, corto para generalizar a la ciudad.
- media = 238,17
- El consumo promedio del barrio es de unos 238 kWh al mes.
- mediana = 234
- La mitad de los hogares consume menos de 234 kWh. Como la media está apenas 4 kWh por encima, el reparto es casi simétrico, con una ligerísima cola hacia la derecha. Aquí sí se puede hablar del promedio sin engañar a nadie.
- sd = 49,23
- Un hogar se aparta del centro, en promedio, unos 49 kWh.
- CV = 20,7 %
- Dispersión moderada. El gasto entre vecinos es razonablemente parejo; no hay dos grupos de consumo muy distintos dentro del barrio.
- cuartiles
- \(Q_1 = 200{,}25\) y \(Q_3 = 266{,}75\): la mitad central de los hogares está entre esos dos valores. El rango intercuartílico es 66,5 kWh.
- límites de Tukey
- \([100{,}5 \,;\, 366{,}5]\). El máximo observado, 356 kWh, cae
dentro. R devuelve
numeric(0), que es un vector vacío: no hay ningún dato atípico.
Cómo se escribe esto en el oficio
«En una muestra de 30 viviendas del barrio, el consumo mensual medio fue de 238,2 kWh (DE = 49,2), con una mediana de 234 kWh y un recorrido de 160 a 356 kWh. El coeficiente de variación fue del 20,7 %, y no se identificaron valores atípicos según el criterio de Tukey.»
Fíjese en lo que lleva: \(n\), medida de centro, medida de dispersión entre paréntesis, recorrido y el criterio usado para los atípicos. Nada más, y nada menos.
Lo que estos datos NO dicen
No dicen si la tarifa es justa, porque para eso haría falta comparar con el consumo de otros barrios o con el valor facturado por kilovatio. Describir es el primer nivel del análisis; concluir que hay una diferencia real exige el segundo, que es la inferencia. Un buen informe no confunde los dos.
Para practicar
- Cambie el último valor, 356, por 956 —como si alguien hubiera digitado mal— y vuelva a ejecutar. ¿Cuánto se mueve la media? ¿Y la mediana? ¿Aparece ahora un atípico?
- Añada
quantile(consumo, probs = c(0.10, 0.90)): ¿entre qué valores está el 80 % central de los hogares? - Calcule cuántos hogares superan los 300 kWh con
sum(consumo > 300)y qué porcentaje representan conmean(consumo > 300). - En RStudio, copie el guion con el botón Copiar para RStudio, péguelo en un archivo nuevo y ejecútelo con Ctrl+Shift+Enter. Debe obtener exactamente las mismas cifras.
Cómo llegan 120 estudiantes al campus
El contexto
Datos del casoLa universidad estudia poner un parqueadero de bicicletas con techo y necesita saber si se justifica. Se encuesta a 120 estudiantes y se les pregunta cómo llegan habitualmente: a pie, en bicicleta, en bus, en carro o en moto.
La variable es cualitativa nominal: sus valores son etiquetas, no números. No tiene sentido preguntar por el «promedio del medio de transporte». Lo que se hace es contar, y presentar esos conteos en una tabla de frecuencias.
La teoría, en cuatro símbolos
Una tabla de frecuencias tiene siempre las mismas cuatro columnas. Vale la pena fijar la notación porque es la que usan todos los textos.
| Símbolo | Nombre | Qué es | En R |
|---|---|---|---|
| \(n_i\) | Frecuencia absoluta | Cuántos casos hay en la categoría \(i\). | table(x) |
| \(N_i\) | Absoluta acumulada | Suma de las anteriores más la actual. | cumsum(table(x)) |
| \(f_i\) | Frecuencia relativa | \(f_i = n_i / n\). Siempre entre 0 y 1. | prop.table(table(x)) |
| \(p_i\) | Porcentaje | \(p_i = 100\,f_i\). | 100 * prop.table(table(x)) |
La acumulada, con cuidado
\(N_i\) y \(f\) acumulada sólo tienen sentido si las categorías están ordenadas. En una variable nominal como ésta, decir «el 57 % llega a pie o en bicicleta» depende de en qué orden se pusieron, y por eso es una cifra que hay que justificar. En una variable ordinal —bajo, medio, alto— la acumulada sí es informativa por sí sola.
Qué hace cada parte del guion
-
Construir la variable con
rep()En lugar de escribir 120 palabras, se indica cuántas veces se repite cada categoría. Es la forma habitual de meter en R una tabla que ya viene resumida. -
Declararla como
factorConlevelsse fija el orden en que aparecerán las categorías. Sin ese argumento R las ordena alfabéticamente, que casi nunca es el orden que uno quiere. -
Contar y convertir
table()cuenta,prop.table()divide entre el total ycumsum()acumula. Tres funciones, tres columnas. -
Armar la tabla y comprobarla
Se juntan las columnas en un
data.framey se verifica que sumen \(n\) y 1. -
La moda
which.max()devuelve la posición del máximo, no su valor; por eso se usa para indexar el vector de nombres. Es el error más común al buscar la moda en R. - Los gráficos Barras para comparar magnitudes y pastel para mostrar la composición del total.
Lectura de los resultados
- Bus = 41 (34,17 %)
- Es la moda: la categoría más frecuente. Uno de cada tres estudiantes llega en bus.
- A pie = 34 (28,33 %)
- Segunda opción. Sumada con el bus, el 62,5 % del estudiantado llega sin vehículo propio.
- Bicicleta = 22 (18,33 %)
- Casi uno de cada cinco. Es la cifra que decide el caso: 22 estudiantes de 120 ya llegan en bicicleta sin que haya parqueadero techado.
- Moto = 15 · Carro = 8
- Entre los dos, apenas el 19,2 %. El campus no tiene un problema de vehículos particulares.
- suma_ni = 120 · suma_fi = 1
- La comprobación cuadra: la tabla está bien construida.
La respuesta a la pregunta de la universidad
El 18,3 % llega en bicicleta y el 28,3 % a pie —un grupo que podría pasarse a la bicicleta si hubiera dónde dejarla—. Frente al 6,7 % que usa carro, la inversión en parqueadero de bicicletas atiende a muchísima más gente que ampliar el de automóviles. Los datos no deciden, pero ponen la discusión sobre cifras.
Barras o pastel
El diagrama de barras es casi siempre mejor: el ojo humano compara longitudes con precisión y ángulos con torpeza. El pastel sirve cuando lo que importa es la idea de «parte de un todo» y hay pocas categorías. Con más de cinco o seis porciones se vuelve ilegible, y si las categorías no suman el total, es directamente incorrecto.
Para practicar
- Ordene las barras de mayor a menor con
barplot(sort(ni, decreasing = TRUE)). ¿Se lee mejor? - Añada una segunda variable, el semestre, y construya una tabla
cruzada:
table(transporte, semestre). - Calcule qué porcentaje llega en un vehículo propio (moto o carro)
con
sum(ni[c("Carro","Moto")]) / sum(ni). - Cambie el orden de
levelsy observe cómo cambian la tabla, la acumulada y los dos gráficos. Esa es exactamente la razón por la que el orden hay que decidirlo, no dejarlo al azar.
Las distribuciones y las cuatro letras de R
La estadística descriptiva mira hacia atrás: resume lo que ya pasó. La probabilidad mira hacia adelante: dice qué tan creíble es lo que puede pasar. El puente entre las dos es el modelo de distribución, una fórmula que asigna probabilidades a los valores posibles de una variable.
Definición · Variable aleatoria
Es una regla que asigna un número al resultado de un experimento cuyo desenlace no se conoce de antemano. Es discreta si sus valores se pueden contar —el número de bombillos defectuosos en un lote— y continua si puede tomar cualquier valor de un intervalo —la estatura de una persona—.
La convención que vale para toda distribución
Aquí está la idea que ahorra memorizar cien funciones. En R, el nombre de toda función de probabilidad se arma con un prefijo y el nombre de la distribución:
densidad
En las discretas, \(P(X=k)\). En las continuas, la altura de la curva, que no es una probabilidad.
dbinom, dnorm
acumulada
\(P(X \le q)\): el área o la suma a la izquierda. Con
lower.tail = FALSE, la cola derecha.
pbinom, pnorm
cuantil
La inversa de la anterior: dada una probabilidad, ¿qué valor la deja por debajo?
qbinom, qnorm
aleatorio
Genera valores al azar según la distribución. Es la base de toda simulación.
rbinom, rnorm
Lo que hay que memorizar
Sólo cuatro letras y una lista de nombres:
binom, norm,
pois, unif,
exp, t,
chisq, f. Combínelos y
tiene las treinta y dos funciones que se usan en un curso entero.
La distribución binomial
Modelo binomial
Cuenta cuántos éxitos hay en \(n\) ensayos independientes, cada uno con la misma probabilidad \(p\) de éxito.
Las cuatro condiciones
Un experimento es binomial sólo si: (1) el número de ensayos está fijado de antemano; (2) cada ensayo tiene exactamente dos resultados; (3) la probabilidad de éxito no cambia de un ensayo a otro; (4) los ensayos son independientes. Si falla alguna, el modelo no aplica. Sacar cartas sin devolverlas, por ejemplo, rompe la tercera y la cuarta.
La distribución normal
Modelo normal
El puntaje z traslada cualquier normal a la normal estándar, de media 0 y desviación 1:
La regla 68 – 95 – 99,7
En toda distribución normal, sin importar \(\mu\) ni \(\sigma\):
De ahí sale el famoso \(\pm 1{,}96\,\sigma\) para el 95 % exacto, que es la base de los intervalos de confianza.
En una continua, \(P(X=x)=0\)
Preguntar por la probabilidad de que alguien mida exactamente
158,7 cm no tiene sentido: el área bajo un punto es cero. Siempre se
pregunta por intervalos. Por eso dnorm() no
devuelve una probabilidad sino una altura, y quien la informa como
porcentaje se equivoca.
Dos caminos para la misma respuesta
Toda probabilidad se puede obtener de dos maneras: con la fórmula exacta o simulando muchas veces el experimento. La segunda es más lenta pero siempre funciona, incluso cuando no hay fórmula. Las dos deben coincidir, y comprobarlo es la mejor manera de verificar que uno entendió el modelo.
Camino exacto
Se usa la fórmula de la distribución.
1 - pbinom(2, 20, 0.05)
Instantáneo y exacto, pero exige que el modelo tenga fórmula cerrada.
Camino por simulación
Se repite el experimento miles de veces y se cuenta.
mean(rbinom(10000, 20, 0.05) >= 3)
Aproximado, pero sirve para cualquier situación, por enredada que sea.
set.seed(), siempre
Antes de cualquier simulación, fije la semilla. Sin ella, su resultado y el del compañero difieren en el tercer decimal y nadie sabe si es azar o error. Con ella, el trabajo es reproducible: cualquiera obtiene exactamente sus cifras.
El lote de bombillos y el riesgo del comprador
El contexto
Control de calidadUna institución compra bombillos LED por lotes de 20. El proveedor certifica que, en su producción, el 5 % sale defectuoso. El almacenista acordó un criterio de recepción sencillo: revisa el lote completo y lo rechaza si encuentra tres o más bombillos malos.
Tres preguntas, que son las tres preguntas de todo control de calidad: ¿qué tan probable es que un lote salga perfecto?, ¿con qué frecuencia se va a rechazar un lote que en realidad cumple lo pactado? y ¿cuántos defectuosos hay que esperar en promedio?
El modelo que aplica
Llamemos \(X\) al número de bombillos defectuosos en el lote. Las cuatro condiciones binomiales se cumplen: hay 20 ensayos fijos, cada bombillo está bien o mal, la proporción de defectuosos del proveedor es siempre 0,05 y un bombillo no influye en otro. Entonces
El criterio de rechazo es el suceso \(X \ge 3\), cuya probabilidad es \(1-P(X\le 2)\).
Qué calcula cada bloque del guion
-
Probabilidades puntuales con
dbinomdbinom(0, 20, 0.05)es exactamente \(\binom{20}{0}(0{,}05)^0(0{,}95)^{20}\). La función hace el número combinatorio por usted. -
Probabilidades acumuladas con
pbinomDevuelve \(P(X\le q)\). Para la cola derecha hay dos caminos:1 - pbinom(2, ...)ypbinom(2, ..., lower.tail = FALSE). Dan el mismo número, pero el segundo es más preciso cuando la probabilidad es muy pequeña, porque evita restar dos cantidades casi iguales. - Esperanza y desviación teóricas \(E(X)=np\) y \(\mathrm{DE}(X)=\sqrt{np(1-p)}\). Se calculan a mano para tenerlas con qué comparar.
-
Toda la distribución de un golpe
dbinom(0:6, 20, 0.05): la función recibe un vector y devuelve siete probabilidades. Así se trabaja en R. -
La comprobación por simulación
Se generan 10 000 lotes con
rbinom()y se cuenta qué fracción tiene tres o más defectuosos. Debe parecerse mucho al valor exacto; si no se parece, hay un error en alguna parte.
Lectura de los resultados
- P(X = 0) = 0,3585
- Sólo el 35,8 % de los lotes llega sin un solo bombillo defectuoso. Dicho de otro modo: en dos de cada tres lotes aparece al menos uno malo, y eso es perfectamente compatible con lo pactado.
- P(X = 2) = 0,1887
- Encontrar exactamente dos defectuosos ocurre en casi uno de cada cinco lotes.
- P(X ≤ 1) = 0,7358
- Casi tres de cada cuatro lotes traen cero o un defectuoso.
- P(X ≥ 3) = 0,0755
- La respuesta a la segunda pregunta. Aunque el proveedor cumpla exactamente lo prometido, el 7,5 % de sus lotes será rechazado. Es el llamado riesgo del productor: un error que el criterio comete por su propio diseño, no por culpa de nadie.
- E(X) = 1 · DE(X) = 0,9747
- Se espera un defectuoso por lote, con una variación típica de aproximadamente uno.
- simulación: media 0,9937 · sd 0,972 · P̂ = 0,0758
- Los 10 000 lotes simulados reproducen la teoría: 0,0758 contra 0,0755. La diferencia está en el tercer decimal, que es lo que cabe esperar con ese tamaño de simulación.
Qué debería hacer el almacenista
Rechazar uno de cada trece lotes buenos es caro para ambas partes. Si
quiere ser menos severo puede subir el umbral a cuatro:
pbinom(3, 20, 0.05, lower.tail = FALSE) da
0,0159, es decir, el 1,6 %. Pero ojo: al bajar el riesgo del
productor sube el del comprador, porque pasarán lotes realmente malos.
Esa negociación es el corazón del muestreo de aceptación, y aquí se ve
con dos líneas de R.
El error de interpretación clásico
«Encontré dos defectuosos, luego el proveedor me engañó.» Falso: con \(p=0{,}05\), encontrar dos defectuosos en veinte es de los resultados más comunes que hay. Un dato aislado no refuta un modelo; para eso hace falta una prueba de hipótesis sobre varios lotes. Confundir «poco probable» con «imposible» es el error que más veces se comete al empezar.
Para practicar
- ¿Y si el proveedor empeora y
p = 0.10? Cambie el valor y vuelva a ejecutar: ¿a cuánto sube la probabilidad de rechazo? - Con lotes de 50 y
p = 0.05, ¿cuál es el número esperado de defectuosos? ¿Sigue sirviendo el umbral de tres? - Calcule el valor \(k\) por debajo del cual está el 95 % de los
lotes con
qbinom(0.95, 20, 0.05). ¿Coincide con el umbral del almacenista? - Suba la simulación a
100000lotes. ¿Se acerca más al valor exacto? ¿Cuánto más?
Estaturas, percentiles y el diseño de un uniforme
El contexto
Antropometría aplicadaUna empresa va a confeccionar el uniforme de las trabajadoras de una cadena de almacenes. Los estudios antropométricos del país indican que la estatura de las mujeres adultas se reparte aproximadamente como una normal de media 158,7 cm y desviación estándar 6,2 cm.
El departamento de producción necesita respuestas concretas: ¿qué porcentaje de mujeres mide menos de 1,50 m?, ¿cuántas pasan de 1,70?, ¿qué estatura hay que tomar para cubrir al 90 %? y ¿entre qué dos estaturas está el 95 % central, que es el rango de tallas que vale la pena producir?
El modelo
Cada pregunta del caso se traduce a un área bajo la curva, y cada área a una orden de R:
| Pregunta | En símbolos | En R |
|---|---|---|
| ¿Cuántas miden menos de 150? | \(P(X \lt 150)\) | pnorm(150, mu, sigma) |
| ¿Cuántas pasan de 170? | \(P(X \gt 170)\) | pnorm(170, mu, sigma, lower.tail = FALSE) |
| ¿Cuántas entre 155 y 165? | \(P(155 \lt X \lt 165)\) | pnorm(165,…) - pnorm(155,…) |
| ¿Qué estatura cubre al 90 %? | \(x\) tal que \(P(X \lt x)=0{,}90\) | qnorm(0.90, mu, sigma) |
| ¿El 95 % central? | percentiles 2,5 y 97,5 | qnorm(c(0.025, 0.975), mu, sigma) |
El truco que nunca falla
Antes de escribir nada, dibuje la curva en una hoja y sombree el área
que le piden. Si el área está a la izquierda, es
pnorm() directo. Si está a la derecha, agregue
lower.tail = FALSE. Si está en el medio, reste
dos pnorm(). Y si le dan el área y le piden la
estatura, es qnorm(). Con ese dibujo no hay forma
de equivocarse de función.
El puntaje z, y por qué importa
La orden (170 - mu) / sigma del guion calcula el
puntaje z de una estatura de 1,70. El resultado, 1,82, significa que esa
mujer está 1,82 desviaciones estándar por encima de la media. Ese
número es el que permite comparar cosas incomparables: una estatura con una
nota, un salario con un tiempo de reacción. Todo lo que se tipifica vive en
la misma escala.
Lectura de los resultados
- P(X < 150) = 0,0803
- El 8 % de las mujeres mide menos de 1,50 m. De cada cien uniformes, ocho necesitan talla pequeña especial.
- P(X > 170) = 0,0342
- Apenas el 3,4 % pasa de 1,70 m.
- P(155 < X < 165) = 0,5699
- Entre 1,55 y 1,65 está el 57 % de la población. Es el tramo donde se concentra la producción: diez centímetros cubren más de la mitad de los casos.
- z(170) = 1,8226
- Una mujer de 1,70 está a 1,82 desviaciones del centro. Como la regla empírica dice que el 95 % cae entre \(\pm 2\) desviaciones, esa estatura es alta pero no excepcional.
- percentil 90 = 166,65 cm
- La respuesta a la tercera pregunta. Confeccionando hasta 1,67 m se cubre al 90 % de las trabajadoras.
- cuartiles = 154,52 · 158,70 · 162,88
- La mitad central de las mujeres mide entre 154,5 y 162,9 cm. Note que el segundo cuartil coincide exactamente con \(\mu\): en una distribución simétrica, media y mediana son el mismo número.
- 68 – 95 – 99,7
- R devuelve 0,6827, 0,9545 y 0,9973. La regla empírica no es una aproximación de aula: son los valores exactos de la normal, y el cálculo lo confirma.
- intervalo del 95 % = [146,55 ; 170,85]
- La respuesta a la cuarta pregunta. Produciendo tallas para el rango de 1,47 a 1,71 m se atiende al 95 % de la población, y se deja fuera un 2,5 % por cada lado que se resolverá con confección a la medida.
Sobre el gráfico
El guion dibuja la curva y sombrea el área entre 155 y 165 con
polygon(). La técnica es general y sirve para
cualquier región: se recorre el tramo de la curva y se vuelve por el eje
horizontal, cerrando el polígono. Es la figura que hay que saber hacer
para explicar un valor p en una prueba de hipótesis.
El modelo es un modelo
Las estaturas reales no son exactamente normales: no hay estaturas negativas y la cola derecha es algo más pesada. La normal es una aproximación excelente en el centro y menos fiable en los extremos. Por eso conviene desconfiar de los cálculos a más de tres desviaciones: decir «la probabilidad de que alguien mida 2,10 es de 1 entre 50 millones» es extrapolar el modelo mucho más allá de donde se verificó.
Para practicar
- En hombres colombianos la media ronda los 170,6 cm con \(\sigma = 6{,}8\). Cambie los dos valores y repita todo el guion.
- ¿Qué estatura deja por debajo al 99 %? Use
qnorm(0.99, mu, sigma). - Compruebe la simetría: verifique que
pnorm(mu - 5, mu, sigma)ypnorm(mu + 5, mu, sigma, lower.tail = FALSE)dan el mismo número. - Simule mil estaturas con
set.seed(1); x <- rnorm(1000, mu, sigma)y comparemean(x < 150)con el 0,0803 teórico.
Ajustar una curva: seis modelos y una sola idea
Regresión es responder una pregunta muy concreta: si conozco \(x\), ¿qué puedo decir de \(y\)? La respuesta es una curva que pasa lo más cerca posible de los puntos observados. Lo que cambia de un modelo a otro es la forma de esa curva; el criterio para escogerla es siempre el mismo.
El criterio: mínimos cuadrados
Definición · Residuo y suma de cuadrados
El residuo de una observación es lo que el modelo no acierta:
El método de mínimos cuadrados escoge los parámetros que hacen mínima la suma de los residuos al cuadrado:
La recta de regresión
Para el modelo \(y = \beta_0 + \beta_1 x + \varepsilon\), el mínimo se alcanza en
De la segunda igualdad se deduce algo elegante: la recta pasa siempre por el punto \((\bar{x},\bar{y})\), el centro de gravedad de la nube.
Definición · Coeficiente de determinación
Tres cosas que \(R^2\) NO dice
No dice que el modelo sea correcto. Un \(R^2\) de 0,95 con una recta sobre datos claramente curvos sigue siendo un modelo equivocado.
No se puede comparar entre escalas distintas. El \(R^2\) de un modelo en logaritmos no es comparable con el de uno en escala original: miden la variación de cosas diferentes.
No prueba causalidad. Ni siquiera un \(R^2\) de 0,99. Que dos cosas vayan juntas no dice cuál mueve a cuál, ni si las mueve una tercera.
El catálogo de curvas
Estos son los cinco modelos que aparecen en los ejemplos siguientes.
Cuatro de ellos se ajustan con el mismo lm(),
porque admiten una transformación que los vuelve lineales.
| Modelo | Ecuación | Cómo se linealiza | Orden en R |
|---|---|---|---|
| Lineal | \(y = a + b\,x\) | ya lo es | lm(y ~ x) |
| Cuadrático | \(y = a + b\,x + c\,x^{2}\) | es lineal en los parámetros | lm(y ~ x + I(x^2)) |
| Potencial | \(y = a\,x^{b}\) | \(\ln y = \ln a + b \ln x\) | lm(log(y) ~ log(x)) |
| Exponencial | \(y = a\,e^{b x}\) | \(\ln y = \ln a + b\,x\) | lm(log(y) ~ x) |
| Logístico | \(y = \dfrac{A}{1+e^{(x_m-x)/s}}\) | no se linealiza | nls(y ~ SSlogis(x, Asym, xmid, scal)) |
Cómo reconocer cuál usar, mirando
- Recta en papel normal → lineal.
- Curva con un máximo o un mínimo → cuadrático.
- Recta en papel log-log (los dos ejes logarítmicos) → potencial.
- Recta en papel semilog (sólo el eje \(y\)) → exponencial.
- Forma de S con un techo → logístico.
La linealización, y su precio
Tomar logaritmos convierte una curva en una recta, y eso permite usar
lm(). Pero hay que saber qué se está haciendo:
Lo que se gana
- Una solución exacta, sin iteraciones ni valores iniciales.
- Todo el aparato de la regresión lineal: pruebas t, intervalos, diagnósticos.
- Un gráfico que delata el modelo: si en log-log sale recta, el modelo potencial es el bueno.
Lo que se paga
- Se minimizan los errores en la escala logarítmica, no en la original. Equivale a minimizar el error relativo.
- El \(R^2\) que informa R es el de la escala transformada.
- No admite valores cero ni negativos: no existe \(\ln 0\).
- Al deshacer el logaritmo, \(\exp(\hat{\beta_0})\) estima la mediana, no la media.
Cuando la respuesta es sí o no: la regresión logística
Modelo logístico binario
Si \(y\) sólo vale 0 o 1, una recta es inservible: daría probabilidades negativas o mayores que uno. La solución es modelar el logit de la probabilidad:
El logit lleva el intervalo \((0,1)\) a toda la recta real, y por eso la fórmula lineal vuelve a servir. Al deshacerlo, la probabilidad queda siempre entre 0 y 1, con forma de S.
Cómo se lee un coeficiente logístico
El coeficiente \(\beta_1\) está en escala de logaritmo de momios, que no le dice nada a nadie. Lo que se informa es su exponencial:
Si \(\mathrm{OR}=1\), \(x\) no influye. Si \(\mathrm{OR} \gt 1\), aumenta el riesgo; si \(\mathrm{OR} \lt 1\), lo reduce. En porcentaje: \((\mathrm{OR}-1)\times 100\,\%\).
Elegir entre varios modelos
| Herramienta | Qué hace | Cómo se lee |
|---|---|---|
summary(m) | Coeficientes, errores, pruebas t y \(R^2\). | Valor p menor que 0,05: el término aporta. |
AIC(m1, m2) | Compara ajuste penalizando parámetros. | Gana el AIC menor. Sirve aunque los modelos no estén anidados. |
anova(m1, m2) | Prueba F entre modelos anidados. | Valor p menor que 0,05: el modelo grande mejora de verdad. |
plot(m) | Cuatro gráficos de diagnóstico. | Residuos sin patrón y puntos sobre la recta Q-Q. |
Los supuestos, que casi nadie revisa
La regresión lineal supone cuatro cosas sobre los residuos: linealidad (la forma es la correcta), independencia (un residuo no anuncia al siguiente), homocedasticidad (la dispersión no cambia con \(x\)) y normalidad (para las pruebas t y los intervalos). Los dos gráficos que trae el ejemplo 5 —residuos contra ajustados, y Q-Q normal— revisan las cuatro en diez segundos.
Nunca extrapole sin avisar
Un modelo sólo vale dentro del rango de \(x\) que se observó. Fuera de él, la fórmula sigue dando números, pero nadie ha comprobado que la forma se mantenga. Es el error que hace que las proyecciones a diez años parezcan ciencia y sean aritmética ciega.
El letrero del géiser Old Faithful
El contexto
Datos reales · REn el Parque Nacional de Yellowstone, el géiser Old Faithful tiene un letrero que anuncia a qué hora será la siguiente erupción. Los guardaparques no adivinan: usan una regla obtenida de los datos. Cuanto más dura una erupción, más tarda en volver, porque la cámara subterránea gasta más agua y tiene que recargarse.
El conjunto faithful, que viene con R, trae
272 erupciones con dos medidas: la duración en minutos y la
espera hasta la siguiente. La pregunta es la del guardaparque:
acabo de ver una erupción de 4 minutos; ¿cuándo pongo el letrero?
El modelo
El orden de las cosas
-
Conocer los datos antes de modelarlos
str(),head()ysummary(). Saber cuántas filas hay y en qué unidades están las variables evita disparates después. - Mirar la nube de puntos Antes de cualquier ajuste. Una recta sobre datos curvos da coeficientes perfectamente calculados y completamente inútiles. Aquí, además, el gráfico revela algo interesante: hay dos grupos de erupciones, cortas y largas.
-
Medir la fuerza con la correlación
cor()da el número;cor.test()añade la prueba de hipótesis y el intervalo de confianza. -
Ajustar con
lm()y leersummary()La fórmulawaiting ~ eruptionsse lee «espera explicada por duración». - Pronosticar, con su intervalo Un pronóstico sin margen de error no es un pronóstico. Y hay que escoger bien cuál de los dos intervalos se informa.
-
Revisar los supuestos
Dos gráficos de residuos. Si fallan, los valores p del
summary()no son de fiar.
Lectura de los resultados
- r = 0,9008
- Correlación positiva y muy fuerte. La prueba da \(t = 34{,}089\) con 270 grados de libertad y \(p \lt 2{,}2\times10^{-16}\): la relación no es casualidad. El intervalo del 95 % para \(r\) va de 0,876 a 0,921.
- β₀ = 33,47
- El anclaje de la recta. No se interpreta: una erupción de cero minutos no existe, y 0 está fuera del rango observado (1,6 a 5,1 min).
- β₁ = 10,73
- El coeficiente que importa. Por cada minuto más de erupción, la siguiente se demora 10,73 minutos más. Su error estándar es 0,3148, el estadístico \(t\) vale 34,09 y el valor p es prácticamente cero.
- IC 95 % de β₁ = [10,11 ; 11,35]
- El efecto está estimado con buena precisión: entre diez y once minutos y medio por minuto de erupción. El intervalo no contiene al cero, que es otra forma de ver que el efecto es significativo.
- R² = 0,8115
- La duración explica el 81 % de la variación de las esperas. El 19 % restante son otras causas y ruido de medición.
- error estándar residual = 5,914
- Un pronóstico típico se equivoca unos seis minutos. Ésta es la cifra que de verdad le interesa al guardaparque, más que el \(R^2\).
- predicción para 4 min
- \(\hat{y} = 33{,}47 + 10{,}73\times 4 = 76{,}39\) minutos. El intervalo de confianza es [75,62 ; 77,17] y el de predicción, [64,72 ; 88,06].
Los dos intervalos, que no son lo mismo
El de confianza estima dónde está la espera media de todas las erupciones de cuatro minutos: un intervalo de un minuto y medio de ancho. El de predicción estima dónde caerá la próxima erupción concreta: veintitrés minutos de ancho.
El segundo es mucho más ancho porque carga con dos incertidumbres: la de la recta y la variabilidad individual. El letrero del parque necesita el de predicción, no el de confianza. Informar el estrecho cuando se pronostica un caso individual es un error serio, y frecuente.
Lo que el gráfico cuenta y el R² calla
Mire la nube de puntos: no es una sola nube alargada, son dos racimos. Las erupciones cortas, de unos dos minutos, van seguidas de esperas de unos 55; las largas, de más de cuatro, de esperas cercanas a 80. La recta los atraviesa y funciona bien, pero el fenómeno real es bimodal: el géiser alterna entre dos regímenes.
Ningún resumen numérico habría revelado eso. Es la razón por la que el gráfico va siempre antes que el modelo.
Los supuestos, revisados
En residuos contra ajustados los puntos se reparten alrededor de cero sin abrirse en abanico: la dispersión es constante. Se notan los dos racimos, que es lo que ya sabíamos. En el Q-Q normal los puntos siguen la recta salvo en los extremos. Para \(n=272\) eso es más que suficiente: las pruebas t son válidas.
Para practicar
- Invierta el modelo:
lm(eruptions ~ waiting). ¿Cambia el \(R^2\)? ¿Cambian los coeficientes? ¿Por qué ocurre lo uno y no lo otro? - Pronostique la espera para una erupción de 1,8 y para una de 5,0 minutos. Compare los anchos de los intervalos de predicción.
- Pida el pronóstico para 8 minutos. R lo calcula sin protestar: ¿por qué esa cifra no sirve para nada?
- Ajuste el modelo sólo con las erupciones largas:
lm(waiting ~ eruptions, data = faithful[faithful$eruptions > 3, ]). ¿Qué le pasa al \(R^2\) y por qué?
Por qué doblar la velocidad no dobla la distancia de frenado
El contexto
Datos reales · REl conjunto cars recoge 50 ensayos de
frenado hechos en los años veinte: se lanzaba el automóvil a cierta
velocidad, se frenaba a fondo y se medía la distancia hasta detenerse.
Es uno de los conjuntos más antiguos que trae R, y sigue enseñando lo
mismo que el día que se midió.
La pregunta es la que está detrás de todos los límites de velocidad: si voy al doble de rápido, ¿necesito el doble de distancia para frenar? La intuición dice que sí. La física dice que no. Y los datos van a decidir.
Lo que predice la física
La distancia total de frenado tiene dos partes. Mientras el conductor reacciona, el carro sigue a velocidad constante y recorre \(t_r\,v\). Una vez que frena con desaceleración constante \(a\), recorre \(v^{2}/(2a)\). Sumando:
Ese detalle —que la curva pase por el origen— no es un capricho matemático. Va a decidir el ejemplo.
Tres modelos, tres decisiones
-
La recta, para tener con qué comparar
lm(dist ~ speed)da \(R^2 = 0{,}651\). No está mal, pero el gráfico muestra que los puntos se curvan hacia arriba. -
La parábola completa
lm(dist ~ speed + I(speed^2)). ElI()es obligatorio: dentro de una fórmula de R, el símbolo^tiene otro significado —indica interacciones— y sinI()el modelo no sería el que se cree. -
La parábola que obliga la física
lm(dist ~ 0 + speed + I(speed^2)). El cero quita el intercepto y fuerza a la curva a pasar por el origen. -
Comparar y decidir
Con
AIC()entre los tres y conanova()entre los dos anidados. - Traducir los coeficientes a física Convirtiendo millas por hora a pies por segundo, los dos coeficientes se vuelven un tiempo de reacción y una desaceleración.
Lectura de los resultados
- Modelo lineal: R² = 0,6511
- El punto de partida.
- Parábola completa: el término cuadrático NO es significativo
- \(c = 0{,}0999\) con un valor p de 0,136. El \(R^2\) sube apenas de 0,651 a 0,667 y ninguno de los tres coeficientes resulta significativo. Parece que la parábola no sirve.
- Por qué ocurre eso
- Porque \(v\) y \(v^2\) están fuertísimamente correlacionadas en el rango observado. Los tres términos compiten por explicar lo mismo y ninguno se lleva el mérito con claridad. Es multicolinealidad, y es el primer sospechoso cuando un modelo tiene buen \(R^2\) y todos los coeficientes no significativos.
- Parábola por el origen: ahora sí
- \(b = 1{,}2390\) con \(p = 0{,}0317\) y \(c = 0{,}0901\) con \(p = 0{,}0036\). Los dos significativos. Al quitar un parámetro que el fenómeno no necesitaba, los otros dos se estiman con mucha más precisión.
- AIC: 419,16 · 418,77 · 416,80
- Gana el menor, que es el modelo físico. Y lo logra con tres parámetros, los mismos que la recta.
- anova: F = 9,41 con p = 0,0035
- Contra el modelo de sólo \(v\) por el origen, añadir el término \(v^2\) mejora el ajuste de manera significativa. La curvatura es real.
- reacción = 0,845 s
- El primer coeficiente, convertido a segundos, da un tiempo de reacción de 0,84 segundos. Los estudios de tránsito sitúan la reacción humana entre 0,7 y 1,5 segundos. El modelo acertó sin que nadie le dijera nada de física.
- frenado = 3,64 m/s² = 0,37 g
- Poco más de un tercio de la gravedad. Para un automóvil de 1920, con frenos de tambor en las cuatro ruedas y llantas estrechas sobre carretera destapada, es exactamente lo que cabe esperar. Un carro moderno sobre asfalto seco pasa de 0,9 g.
- pronósticos: 10 → 21,4 · 20 → 60,8 pies
- La respuesta a la pregunta del caso. Al doblar la velocidad de 10 a 20 mph la distancia no se dobla: se multiplica por 2,84. Ésa es toda la razón de ser de los límites de velocidad en zonas escolares.
La lección que vale para cualquier modelo
Imponer lo que se sabe del fenómeno vale más que añadir parámetros libres. El modelo con menos libertad —obligado a pasar por el origen— ajustó mejor, resultó significativo y además entregó dos constantes físicas interpretables. Un modelo bueno no es el que más se dobla para pasar cerca de los puntos: es el que dice algo sobre el mundo.
Cuándo NO se quita el intercepto
Forzar el paso por el origen sólo se justifica cuando el fenómeno lo exige, como aquí. Hacerlo «porque sube el \(R^2\)» es una trampa: en modelos sin intercepto R calcula el \(R^2\) con otra fórmula, y por eso el 0,9133 de este ejemplo no es comparable con el 0,6673 del anterior. Para comparar hay que usar el AIC o la suma de cuadrados residual, que es lo que se hizo.
Para practicar
- Calcule la distancia a 60 mph con el modelo físico. ¿Cuántas veces la de 20 mph? ¿Es el triple?
- Pase el resultado a unidades métricas: 1 mph = 1,609 km/h y 1 pie = 0,3048 m. ¿Cuántos metros necesita a 100 km/h un carro con esa desaceleración?
- Ajuste un modelo cúbico con
I(speed^3). ¿Mejora el AIC? ¿Se justifica un término que la física no pide? - Compare
poly(speed, 2)conspeed + I(speed^2): los coeficientes salen distintos pero los ajustados son idénticos. ¿Por qué?
Cuánta madera tiene un árbol sin tumbarlo
El contexto
Datos reales · RUn ingeniero forestal tiene que estimar cuánta madera hay en un lote antes de cortar nada. El volumen real sólo se conoce después de tumbar el árbol, lo que convierte el problema en un círculo. La salida es medir lo que sí se puede medir en pie: el diámetro del tronco a la altura del pecho.
El conjunto trees, que viene con R, trae
31 cerezos negros con su diámetro en pulgadas, su altura y su
volumen en pies cúbicos. La pregunta del ingeniero es:
¿qué fórmula convierte un diámetro en un volumen, y qué tan bien
funciona?
Por qué una potencia, y no una recta
Un tronco se parece a un cilindro. Su volumen es \(V = \pi r^{2} h\), y como el radio es la mitad del diámetro,
Si todos los árboles tuvieran la misma altura, el volumen crecería exactamente como el cuadrado del diámetro. Como los árboles más gruesos también suelen ser más altos, el exponente real debería salir algo mayor que 2. El modelo que se ajusta es
La linealización
El modelo potencial no es lineal, pero tomando logaritmo natural a ambos lados se endereza:
lm(log(Volume) ~ log(Girth))
y después se deshace con \(a = e^{\,\text{intercepto}}\).El diagnóstico visual
Hay una forma de saber si el modelo potencial es el adecuado sin hacer cuentas: dibujar los datos en papel log-log, con los dos ejes en escala logarítmica. Si la nube se endereza en una recta, la relación es una potencia, y la pendiente de esa recta es el exponente. El guion dibuja los dos gráficos, uno al lado del otro, para que se vea.
Lectura de los resultados
- pendiente = 2,19997
- El exponente \(b\). El volumen crece aproximadamente como el diámetro elevado a 2,2. Su error estándar es 0,0898 y el valor p está por debajo de \(2\times10^{-16}\).
- intercepto = −2,35332
- Está en logaritmos. Deshaciéndolo: \(a = e^{-2{,}35332} = 0{,}09505\).
- La fórmula del ingeniero
- \(\widehat{V} = 0{,}09505 \cdot d^{\,2{,}2}\), con \(d\) en pulgadas y \(V\) en pies cúbicos. Cabe en una libreta de campo.
- IC 95 % del exponente = [2,016 ; 2,384]
- El resultado más interesante de todo el ejemplo. El intervalo contiene al 2, el valor que predice la geometría del cilindro. Los datos son compatibles con la teoría. Y como el valor estimado está algo por encima de 2, también recogen el hecho de que los árboles más gruesos tienden a ser más altos.
- R² = 0,9539
- En la escala logarítmica, el diámetro explica el 95 % de la variación del volumen. Un solo dato, medido con una cinta métrica, reemplaza casi por completo al aserradero.
- pronósticos: 10 → 15,06 · 15 → 36,76 · 20 → 69,21 pies³
- Las dos formas de calcularlos —
exp(predict(...))y la fórmulaa * d^b— dan exactamente lo mismo, que es la comprobación de que la linealización se deshizo bien. - 2^b = 4,59
- Al doblar el diámetro, el volumen se multiplica por 4,6. Un árbol de 20 pulgadas tiene casi cinco veces la madera de uno de 10, no el doble.
El exponente es una elasticidad
En un modelo potencial, \(b\) tiene una lectura que viene de la economía: si \(x\) aumenta un 1 %, \(y\) aumenta aproximadamente \(b\) %. Aquí, un 1 % más de diámetro significa un 2,2 % más de volumen. Esa interpretación no depende de las unidades, y es la razón por la que los modelos log-log son tan comunes en economía, biología y ecología.
Las leyes de potencia están por todas partes
La misma forma \(y = a x^{b}\) describe la ley de Kleiber —la tasa metabólica de un animal crece como su masa elevada a 3/4—, la relación entre longitud y peso de los peces, el área de las hojas frente al diámetro del tallo, y la frecuencia de las palabras en un idioma. Que el papel log-log enderece una nube de puntos es una de las señales más frecuentes en la ciencia aplicada.
Dos precauciones con los logaritmos
No hay \(\ln 0\). Si alguna observación vale cero, la linealización falla. Conviene revisar los datos antes, no después del error.
El \(R^2\) es el de la escala logarítmica. Ese 0,9539 mide cuánto se explica de \(\ln V\), no de \(V\). Comparar ese número con el \(R^2\) de un modelo ajustado en escala original es comparar peras con manzanas.
Para practicar
- Añada la altura al modelo:
lm(log(Volume) ~ log(Girth) + log(Height)). ¿A cuánto baja el exponente del diámetro? ¿Se acerca más a 2? - Pruebe el ajuste directo sin linealizar:
nls(Volume ~ a * Girth^b, data = trees, start = list(a = 0.1, b = 2)). ¿Dan lo mismo los dos métodos? ¿Por qué no exactamente? - Compare con un modelo lineal simple
lm(Volume ~ Girth)y dibuje los dos sobre los mismos puntos. ¿Dónde falla la recta? - Estime el volumen de un árbol de 25 pulgadas. ¿Por qué hay que advertir que esa cifra es una extrapolación?
La ley de Moore: medio siglo de duplicaciones
El contexto
Datos históricosEn 1965, Gordon Moore, cofundador de Intel, escribió un artículo de tres páginas en el que observaba que el número de componentes por circuito integrado se venía duplicando cada año, y aventuraba que seguiría haciéndolo durante al menos una década. Nadie, él incluido, esperaba que la observación se sostuviera cincuenta años.
Tomemos quince microprocesadores emblemáticos, del Intel 4004 de 1971 al Core i7 de 2014, con su número de transistores. La pregunta: ¿fue realmente exponencial el crecimiento, y cada cuánto se duplicaba?
El modelo exponencial
La diferencia con el crecimiento lineal es de naturaleza, no de grado: en el lineal cada período suma una cantidad fija; en el exponencial, cada período multiplica por un factor fijo.
lm(log(y) ~ t).Y de la condición \(2 = e^{bT}\) sale la cifra que todo el mundo cita:
Cómo reconocerlo antes de ajustar
El guion divide cada valor entre el anterior. Si esos cocientes son parecidos entre sí —aunque los datos crezcan de forma brutal—, el crecimiento es multiplicativo, y eso es exponencial. Si en cambio son las diferencias las que se parecen, el crecimiento es lineal. Es un diagnóstico de una línea de código.
Contar el tiempo desde el origen
El guion crea t = anio - 1971 en vez de usar
el año directamente. No es cosmética: con el año tal cual, el intercepto
sería el número de transistores en el año cero de nuestra era, una
cifra absurda con un error estándar gigantesco. Contando desde 1971, el
intercepto es el valor estimado para el 4004, que sí significa algo.
Centrar la variable explicativa es una buena costumbre en cualquier
regresión.
Lectura de los resultados
- cocientes sucesivos
- 1,52 · 1,71 · 4,83 · 4,62 · 2,05 · 4,29 · 2,63 … Irregulares, pero todos del mismo orden de magnitud y siempre mayores que uno. No son diferencias constantes: son factores. Señal de crecimiento exponencial.
- b = 0,32049
- La tasa instantánea de crecimiento, por año. Su error estándar es 0,00764 y el valor p está en el orden de \(10^{-15}\).
- a = 2748,3
- El valor que el modelo estima para 1971. El 4004 real tenía 2300 transistores: el ajuste se queda a un 19 % de distancia, que sobre seis órdenes de magnitud es una puntería notable.
- e^b = 1,3778
- Cada año el número de transistores se multiplica por 1,38, es decir, crece un 37,8 % anual, sostenido durante cuarenta y tres años.
- tiempo de duplicación = 2,16 años
- La respuesta al caso. Los transistores se duplicaron cada dos años y dos meses. Moore había dicho un año en 1965 y lo corrigió a dos en 1975. Los datos le dan la razón a la versión corregida con una precisión que asusta.
- R² = 0,9927
- En escala logarítmica, el año explica el 99,3 % de la variación. Es un ajuste extraordinario para cuatro décadas de historia industrial.
- pronóstico para 2020 ≈ 18,2 mil millones
- La extrapolación a seis años vista. Los chips de servidor más grandes de 2020 andaban en esa cifra, aunque los procesadores de escritorio se quedaron bastante por debajo.
Los dos gráficos, y por qué hay dos
El primero está en escala normal: los primeros cuarenta años aparecen
aplastados contra el eje y no se ve absolutamente nada. El segundo usa
log = "y", y ahí los quince puntos se alinean en
una recta casi perfecta.
Ésa es la prueba visual de que el crecimiento es exponencial, y la razón por la que toda gráfica de crecimiento exponencial se publica en escala logarítmica. Quien la publica en escala normal, o no entendió los datos, o quiere impresionar en vez de informar.
Toda exponencial termina
El modelo no sabe que existen el átomo de silicio, el calor ni el dinero. Extrapolado a 2050 daría cifras físicamente imposibles. Todo crecimiento exponencial real es, en el fondo, el tramo inicial de una curva logística que todavía no ha llegado a su techo: lo mismo pasa con una epidemia, con la adopción de una tecnología o con un cultivo de bacterias. El ejemplo siguiente ajusta justamente esa curva completa.
Para practicar
- Ajuste el modelo sólo con los datos hasta 1993 y pronostique 2014. ¿Se queda corto o se pasa? ¿Qué dice eso sobre si el ritmo se mantuvo?
- Calcule el tiempo de duplicación en meses:
12 * log(2) / b. - Un capital de un millón al 8 % anual compuesto crece exponencialmente. Use \(T = \ln 2 / \ln(1{,}08)\) para hallar en cuántos años se duplica, y compárelo con la regla del 72 que usan los banqueros: \(72/8 = 9\) años.
- Pruebe un ajuste no lineal directo con
nls(transistores ~ a * exp(b * t), start = list(a = 2300, b = 0.3)). ¿Por qué el resultado se parece tan poco al de la linealización?
Lo que crece despacio, acelera y se frena
El contexto
Datos reales · RUn cultivador de cítricos quiere saber cuándo deja de valer la pena esperar. Un naranjo no engorda para siempre: arranca lento, pega un estirón y después se estabiliza. Si supiera dónde está el techo y en qué momento el crecimiento empieza a frenarse, podría planear la renovación del lote.
El conjunto Orange, que trae R, sigue a
cinco naranjos medidos siete veces entre 1968 y 1973: su
edad en días y la circunferencia del tronco en milímetros. Las
preguntas: ¿cuál es el techo?, ¿cuándo crece más rápido? y
¿cuánto medirá a los dos mil días?
La curva logística
SSlogis,
con tres parámetros que se leen directamente sobre el gráfico.| Parámetro | En R | Qué significa |
|---|---|---|
| \(A\) | Asym | La asíntota: el techo al que tiende la curva. |
| \(x_m\) | xmid | La edad del punto de inflexión, donde más rápido crece. |
| \(s\) | scal | La escala de tiempo: qué tan estirada o empinada es la S. |
Dos propiedades que se deducen de la fórmula y que conviene saber de memoria:
Ésta NO se linealiza
Las curvas de los ejemplos 7 y 8 se enderezaban con un logaritmo, y por
eso bastaba lm(). La logística no: ningún cambio
de variable la vuelve lineal en sus tres parámetros. Hay que ajustarla con
mínimos cuadrados no lineales, nls(), que
no resuelve una fórmula sino que busca por aproximaciones sucesivas.
Los modelos autoiniciables
Todo método iterativo necesita un punto de partida, y
nls() es famoso por fallar con el mensaje
singular gradient cuando los valores iniciales
son malos. La solución elegante son los modelos autoiniciables:
SSlogis calcula solos sus propios valores de
partida a partir de los datos. Por eso en el guion no hay ningún
argumento start, y por eso el ajuste converge a
la primera.
R trae varios: SSlogis,
SSasymp, SSmicmen para
Michaelis-Menten, SSgompertz. Cuando exista uno
para su modelo, úselo.
Lectura de los resultados
- Asym = 192,69 mm
- El techo. La circunferencia tiende a estabilizarse alrededor de 193 mm. Su error estándar es 20,24, de modo que el techo está estimado con cierta holgura: entre unos 152 y 233 mm.
- xmid = 728,76 días
- La inflexión. Hacia los dos años, el árbol pasa de acelerar a frenar. Antes de esa fecha cada día rinde más que el anterior; después, menos.
- scal = 353,53
- La escala temporal. Entre más grande, más tendida es la S.
- los tres son significativos
- Valores p de \(7{,}5\times10^{-11}\), \(1{,}1\times10^{-7}\) y 0,00013. Los tres parámetros están bien determinados por los datos.
- Asym / 2 = 96,34 mm
- La comprobación de la propiedad teórica: en la inflexión, la circunferencia es justo la mitad del techo.
- velocidad máxima = 0,136 mm/día
- \(A/(4s)\). En su mejor momento el tronco engorda poco más de una décima de milímetro al día, es decir, unos 4 mm al mes.
- pseudo-R² = 0,8444
- La curva explica el 84 % de la variación. El 16 % restante es sobre todo la diferencia entre los cinco árboles: unos crecen más que otros, y aquí se ajustó una sola curva común a todos.
- pronósticos
- A los 500 días, 66,2 mm; a los 1000, 131,6; a los 1500, 173,1; a los 2000, 187,5; a los 3000, 192,4. La respuesta al cultivador. Mire cómo se aplastan: de 1500 a 2000 días el árbol gana 14 mm; de 2000 a 3000, apenas 5. Esperar mil días más para ganar medio centímetro no tiene sentido económico. Eso es lo que significa una asíntota.
Por qué nls no reporta \(R^2\)
Porque fuera del modelo lineal el \(R^2\) pierde sus propiedades: la descomposición «variación total igual a explicada más residual» sólo vale cuando hay intercepto y el ajuste es lineal en los parámetros. El pseudo-\(R^2\) que calcula el guion es útil como orientación, pero no admite las mismas lecturas. Para comparar modelos no lineales se usan el AIC y el error estándar residual.
La misma curva, en todas partes
La ecuación logística la propuso Pierre-François Verhulst en 1838 para corregir el modelo exponencial de población de Malthus: añadió un techo, la capacidad de carga del medio. Desde entonces la misma curva describe el crecimiento de un cultivo de bacterias, la adopción de los teléfonos celulares, la cuota de mercado de un producto, los casos acumulados de una epidemia y el aprendizaje de una destreza. Cuando algo crece en un medio con límites, casi siempre dibuja una S.
Para practicar
- Ajuste la curva a un solo árbol:
subset(Orange, Tree == 1). ¿Sube el pseudo-\(R^2\)? ¿Por qué? - Compare con un modelo lineal
lm(circumference ~ age, data = Orange). ¿Qué predice la recta a los 5000 días? ¿Y la logística? - Pruebe el modelo de Gompertz, que es otra S pero asimétrica:
nls(circumference ~ SSgompertz(age, Asym, b2, b3), data = Orange). Compare los AIC. - Ajuste un exponencial a los primeros cuatro puntos del árbol 1. ¿Qué predice a los 1500 días? Ahí se ve por qué una exponencial ajustada en el arranque de una epidemia exagera siempre.
El gráfico que no se hizo la noche del Challenger
El contexto
Datos reales · caso históricoLa noche del 27 de enero de 1986, los ingenieros de Morton Thiokol pidieron aplazar el lanzamiento del transbordador Challenger. Hacía un frío inusual en Cabo Cañaveral y temían que las juntas tóricas —los anillos de caucho que sellan los cohetes aceleradores— perdieran elasticidad.
En la teleconferencia se revisaron los vuelos que habían tenido daño en los anillos. Entre ellos no se veía ningún patrón claro con la temperatura, y la objeción se desestimó. Faltaban los vuelos sin daño, que eran la mitad de la información.
A la mañana siguiente se lanzó a 31 °F (−0,6 °C), la temperatura más baja de la historia del programa. El transbordador se desintegró a los 73 segundos. Murieron sus siete tripulantes.
Vamos a hacer, con los 23 vuelos anteriores, el análisis que no se hizo esa noche. Son tres líneas de R.
La fuente
Los datos provienen de Dalal, Fowlkes y Hoadley (1989), «Risk analysis of the space shuttle: pre-Challenger prediction of failure», Journal of the American Statistical Association, 84, 945–957. Es uno de los artículos más citados de la estadística aplicada, y el ejemplo clásico de cómo un análisis incompleto cuesta vidas.
Por qué no sirve una recta
La variable respuesta sólo vale 0 o 1. Una recta \(p = \beta_0 + \beta_1 x\) daría, fuera de cierto rango, probabilidades negativas o mayores que uno: cosas que no existen. La solución es modelar el logit:
El cociente \(p/(1-p)\) son los momios: si \(p = 0{,}8\), los momios valen 4, o sea «cuatro a uno». Su logaritmo recorre toda la recta real, así que la parte derecha puede ser lineal sin problema. Al despejar,
glm(y ~ x, family = binomial).El recorrido del guion
- Los 23 vuelos completos Con daño y sin daño. Ésta es la corrección decisiva respecto de lo que se miró aquella noche.
-
La primera señal:
tapply()Compara la temperatura media de los vuelos con daño y sin daño. Es un indicio, no una prueba. -
El modelo con
glm()family = binomiales lo único que cambia respecto de unlm(). -
Traducir el coeficiente a razón de momios
exp(coef(modelo)). El coeficiente crudo está en logaritmos y no se informa nunca tal cual. -
Pasar a probabilidades
predict(..., type = "response"). Sin ese argumento, R devuelve el logit, y más de un informe ha confundido las dos cosas. - La curva, con la línea de los 31 °F El gráfico que resume todo el caso.
Lectura de los resultados
- 16 vuelos sin daño, 7 con daño
- Los 23 lanzamientos previos. Los siete con daño son los que se miraron aquella noche; los dieciséis restantes son los que faltaban.
- temperatura media: 72,4 °F sin daño · 63,0 °F con daño
- Nueve grados de diferencia. Es un indicio fuerte, pero por sí solo no mide cuánto ni dice si podría ser azar.
- β₁ = −0,3090 (p = 0,0316)
- Negativo: a más temperatura, menos riesgo. Y con \(p \lt 0{,}05\), la relación es estadísticamente significativa. Con 23 datos.
- OR = 0,7342
- La cifra que había que llevar a la reunión. Por cada grado Fahrenheit adicional, los momios de daño se multiplican por 0,73: una caída del 26,6 %. Al revés, por cada grado que baja la temperatura, el riesgo sube en esa proporción.
- IC 95 % del OR = [0,554 ; 0,973]
- No contiene al 1, que es el valor de «no hay efecto». Otra forma de ver la significancia.
- p(31 °F) = 1,0000
- El resultado del caso. A la temperatura de aquella mañana, la probabilidad estimada de daño en los anillos era prácticamente la certeza.
- p(70 °F) = 0,2039 · p(81 °F) = 0,0085
- A 70 °F, uno de cada cinco vuelos; a 81 °F, menos de uno de cada cien. La diferencia entre un día templado y un día frío es de dos órdenes de magnitud.
- punto de equilibrio = 65,6 °F
- Por debajo de esa temperatura, el daño es más probable que su ausencia. El Challenger despegó treinta y cinco grados por debajo.
- desvianza: 28,27 → 17,65 · pseudo-R² = 0,376
- Incluir la temperatura reduce la desvianza en más de diez puntos con un solo parámetro. El pseudo-\(R^2\) de McFadden de 0,38 es, para este índice, un ajuste muy bueno: por encima de 0,2 ya se considera fuerte.
La extrapolación que aquí sí hay que hacer, y confesar
El vuelo más frío de la muestra fue a 53 °F. Estimar la probabilidad a 31 °F es extrapolar veintidós grados fuera del rango observado, y en cualquier otro contexto este cuaderno diría que no se haga.
Pero fíjese en lo que la extrapolación cambia y lo que no. La cifra exacta —1,0000— no es de fiar. La dirección y la magnitud del efecto sí lo son, y están dentro del rango observado: ya a 53 °F el modelo da 0,98. La conclusión operativa —no lanzar con ese frío— no dependía de extrapolar nada.
Por qué el gráfico lo decide todo
Si aquella noche alguien hubiera dibujado los 23 puntos —con los dieciséis ceros incluidos— y pasado la curva por encima, la discusión habría durado treinta segundos. Mirar sólo los vuelos con daño es seleccionar los casos por la variable respuesta, y es uno de los sesgos más traicioneros que existen: los datos parecen no decir nada justamente porque se quitó la parte que hablaba.
La lección no es sobre cohetes. Es sobre qué datos se llevan a la mesa.
El informe Rogers
La comisión que investigó el accidente concluyó que la causa técnica fue precisamente la pérdida de elasticidad de las juntas por el frío. Richard Feynman lo demostró en la audiencia pública metiendo un trozo de la junta en un vaso de agua con hielo. El informe dedicó un capítulo entero a la cadena de decisiones, y desde entonces este conjunto de datos se enseña en los cursos de estadística de medio mundo.
Para practicar
- Ajuste el modelo sólo con los siete vuelos que tuvieron daño, que es lo que se miró aquella noche. ¿Qué valor p sale? ¿Qué habría concluido usted con esa tabla?
- Dibuje la curva junto con los puntos y marque el 0,5. Guarde el gráfico con el botón de descarga del laboratorio.
- ¿A qué temperatura la probabilidad estimada baja del 10 %? Despeje del logit: \(x = (\ln(0{,}1/0{,}9) - \beta_0)/\beta_1\).
- Calcule la razón de momios para una caída de diez grados:
exp(-10 * coef(modelo)[2]). ¿Cuántas veces sube el riesgo?
Glosario: el vocabulario del cuaderno
Los términos que aparecen en estas hojas, con su definición, la orden de R que les corresponde y un ejemplo. Busque por palabra o filtre por familia.
Puesto de control: compruebe lo aprendido
Quince preguntas sobre todo el cuaderno. Escoja una opción y verá al instante si acertó, con la explicación. No se guarda nada ni se califica: es para usted.
¡Muy bien!
Colofón: por dónde seguir
Hasta aquí el recorrido: desde abrir la cuenta en Posit Cloud hasta ajustar una curva logística y leer una razón de momios. Lo que sigue depende de para qué necesite R, pero hay un consejo que vale para todos: trabaje con sus propios datos cuanto antes. Un conjunto que a uno le importa enseña más en una tarde que diez ejercicios de libro.
Qué hacer esta semana
- Abrir el proyecto y no cerrarlo Cree un único proyecto en Posit Cloud para todo el curso y trabaje siempre ahí. Los paquetes se instalan por proyecto, y cambiar de proyecto obliga a reinstalar.
- Repetir los diez ejemplos en RStudio Cada celda trae el botón Copiar para RStudio. Péguelos, ejecútelos y compruebe que las cifras coinciden con las de aquí. Ese ejercicio cierra el círculo entre el cuaderno y el entorno real.
-
Cargar un archivo propio
Suba un
.csvsuyo al panel Files, léalo conread.csv2()y hágalestr(),summary()y un histograma. Ahí empieza el trabajo de verdad. -
Aprender el tidyverse
Cuando los verbos de R base se queden cortos,
dplyryggplot2son el paso siguiente. El libro R for Data Science está en línea y es gratuito.
Para seguir leyendo
Libros abiertos
- R for Data Science, de Wickham, Çetinkaya-Rundel y Grolemund. El estándar para el tidyverse.
- An Introduction to Statistical Learning, con todos sus laboratorios en R.
- An Introduction to R, el manual oficial del propio proyecto.
Herramientas y referencia
- Posit Cloud · RStudio para escritorio
- CRAN, el repositorio oficial de paquetes.
- Hojas de referencia de Posit: una página por paquete, para tener al lado del teclado.
- webR, el motor que ejecuta R dentro de este cuaderno.
Plataformas hermanas
Matemáticas interactivas
Cuadernos, laboratorios y calculadoras de álgebra, cálculo, probabilidad y estadística.
Programación interactiva
Python con NumPy, SciPy y pandas, lenguaje R, LaTeX y desarrollo web, con editores ejecutables.
Metodología cuantitativa
La serie de cuadernos de regresión, análisis factorial y ecuaciones estructurales, con sus laboratorios de R.
Sobre los datos de los ejemplos
| Ejemplo | Datos | Procedencia |
|---|---|---|
| 1 y 2 | Consumo de energía · medio de transporte | Datos construidos para el caso, con valores verosímiles. |
| 3 y 4 | Lote de bombillos · estaturas | Parámetros de ejemplo; los cálculos son exactos. |
| 5 | faithful | Incluido en R. Härdle (1991), Smoothing Techniques. |
| 6 | cars | Incluido en R. Ezekiel (1930), Methods of Correlation Analysis. |
| 7 | trees | Incluido en R. Ryan, Joiner y Ryan (1976), Minitab Student Handbook. |
| 8 | Ley de Moore | Número de transistores de microprocesadores Intel, cifras publicadas por el fabricante. |
| 9 | Orange | Incluido en R. Draper y Smith (1998), Applied Regression Analysis. |
| 10 | Anillos del Challenger | Dalal, Fowlkes y Hoadley (1989), JASA, 84, 945–957. |
Las cifras de este cuaderno están verificadas
Todas las salidas que aparecen como vista previa se obtuvieron ejecutando los guiones con R 4.6.0 y comparándolas una por una. Si ejecuta las celdas, obtendrá exactamente lo mismo; y si copia el código a RStudio, también, porque está escrito sólo con R base y sin dependencias.
Cómo está hecho
Un único archivo HTML autocontenido, ensamblado desde piezas separadas con un guion de Python. Las fórmulas las compone MathJax; el editor es Monaco, el mismo de Visual Studio Code, con un autocompletado escrito para R y los colores exactos de los temas Textmate y Cobalt que trae RStudio; y R se ejecuta con webR. Los iconos son de Font Awesome y las tipografías, Fraunces, Source Sans 3, JetBrains Mono y Caveat.
Néstor Fabio Montoya Palacios
Cuaderno interactivo · RStudio y Posit Cloud
Construido el 2026-11-05 · R 4.6.0 · webR 0.6.0 · Monaco 0.52