Saltar al contenido
RStudio y Posit Cloud Cuaderno interactivo
R
Cuaderno interactivo · Laboratorio de R

RStudio y Posit Cloud

Aprender a usar el entorno de trabajo del lenguaje R, desde abrir la cuenta hasta ajustar una curva: teoría, un videotutorial y diez ejemplos resueltos paso a paso que se ejecutan aquí mismo.

10ejemplos resueltos
R 4.6corriendo en el navegador
Monacocon autocompletado
12capítulos de video

Prof. Néstor Fabio Montoya Palacios

Estadística descriptiva · Probabilidad · Regresión lineal, cuadrática, potencial, exponencial y logística

Se lee como un libro

Cada hoja es una estación. Avance con →, retroceda con ← o abra el índice con I. Las fórmulas están compuestas con MathJax y se pueden ampliar.

Se ejecuta de verdad

Las celdas corren con webR, que es R compilado para el navegador. No hay que instalar nada: pulse Ejecutar o Ctrl+Enter.

Se lleva a RStudio

Todo el código está escrito para que funcione igual aquí y en RStudio. Cada celda trae el botón Copiar para RStudio y Guardar .R.

Cómo sacarle el máximo

Abra este cuaderno en media pantalla y Posit Cloud en la otra. Lea aquí, ejecute aquí para ver el resultado al instante, y copie el mismo código allá para practicar en el entorno real. Es la forma más rápida de que el teclado se le haga costumbre.

Parte I · El taller

R, RStudio y Posit Cloud: tres cosas distintas

lectura · 8 min

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:

  1. 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.
  2. 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.
  3. 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.

Parte I · El taller

Entrar a Posit Cloud y abrir el primer proyecto

práctica · 10 min

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.

  1. Abrir el sitio

    En la barra de direcciones escriba posit.cloud y 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.

    posit.cloud
    Log In Sign Up
    Do, share, teach and learn data science
    Analiza 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.

  2. 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.

    posit.cloud/register
    Crear una cuenta
    — o con su correo —
    nombre@institucion.edu.co
    ••••••••
    Sign Up

    Si el correo de confirmación no aparece, revise la carpeta de correo no deseado: es lo que ocurre casi siempre.

  3. 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.

    posit.cloud/content
    NM Néstor M.
    Spaces
    Your Workspace
    Estadística 2026
    New Space
    Learn
    Guide
    Recipes
    Your Workspace
    New Project
    Aún no hay proyectos aquí.

    El botón New Project, arriba a la derecha, es el que abre el menú del paso siguiente.

  4. 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.

    NM Néstor M.
    New Project
    New RStudio Project Un proyecto vacío con R y RStudio
    New Jupyter ProjectPara trabajar en Python
    New Project from GitCopia un repositorio

    La primera vez tarda entre veinte y cuarenta segundos: Posit está levantando una máquina con R sólo para usted.

  5. Ponerle nombre al proyecto

    Arriba, donde dice Untitled Project, haga clic y escriba un nombre con sentido: Estadistica_2026 o Taller_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.

  6. 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

  1. Cree la cuenta y abra un proyecto llamado Cuaderno_R.
  2. En la consola escriba R.version.string y pulse Enter: le dirá qué versión de R le tocó.
  3. Escriba 2026 - 1993 y confirme que RStudio responde [1] 33, los años que tiene R.

Abrir Posit Cloud en otra pestaña

Parte I · El taller

Anatomía de RStudio: los cuatro paneles

lectura · 9 min

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.

Cuaderno_R — RStudio posit.cloud
R FileEditCodeView PlotsSessionBuildDebug ProfileToolsHelp
Run Source
# Análisis del consumo de energíalibrary(ggplot2) datos <- read.csv("hogares.csv")modelo <- lm(consumo ~ area, data = datos) summary(modelo)
7:1 R Script
Data
datos30 obs. of 3 variables
modeloList of 12
Values
n30
media238.1667
consumonum [1:30] 182 215 240 198 …
R version 4.6.0 (2026-04-24) -- "Happy Hop" Platform: x86_64-pc-linux-gnu> mean(consumo) [1] 238.1667 > sd(consumo) [1] 49.23209 > summary(modelo)…
>
área de la vivienda consumo

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

  1. En su proyecto, abra un guion nuevo con Ctrl+Shift+N y vea cómo la ventana se parte en cuatro.
  2. Escriba x <- 1:10 y ejecútelo con Ctrl+Enter. Compruebe que x aparece en Environment.
  3. Escriba plot(x, x^2) y vea el resultado en Plots.
  4. Escriba ?plot y vea cómo se abre la pestaña Help.
Parte I · El taller

Videotutorial: RStudio de principio a fin

video · 12 capítulos

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.

Cómo usar RStudio Capítulo 1 · Bienvenida
Cuaderno_R — RStudio posit.cloud
R FileEdit CodeView PlotsSession ToolsHelp
Run Source

                
1:1 R Script
El entorno está vacío
>
Todavía no hay gráficos
analisis.Rguion de R2 KB
project.Rprojarchivo del proyecto205 B
ggplot2Gramática de gráficos3.5.1
dplyrManejo de tablas1.1.4
statsModelos y distribuciones4.6.0
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

Pulse reproducir para empezar.
0:00 / 0:00

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.

Parte I · El taller

El flujo de trabajo y los atajos que lo sostienen

lectura · 7 min

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.

  1. 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?».
  2. 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.
  3. 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.
  4. 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.

Ctrl+Enter Ejecuta la línea o la selección. El más importante.
Alt+- Escribe <- con sus espacios.
Ctrl+Shift+M Escribe el operador de tubería |>.
Ctrl+Shift+N Guion nuevo.
Ctrl+S Guardar el archivo.
Ctrl+Shift+C Comenta o descomenta las líneas seleccionadas.
Tab Autocompleta nombres, argumentos y rutas de archivo.
↑ en la consola Recupera la última orden escrita.
Esc Cancela una orden a medias. Sirve cuando aparece el +.
Ctrl+L Limpia la consola, sin borrar los objetos.
Ctrl+Shift+F10 Reinicia R con la memoria vacía.
Ctrl+Shift+Enter Ejecuta el guion entero (Source).

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.

MensajeQué pasó de verdadCó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.

Parte I · El taller

Los paquetes: la biblioteca de R

lectura · 8 min

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.

PaquetePara qué sirveFunciones que verá
tidyverseUn paquete que instala a la vez los ocho siguientes. Es el estándar moderno para manejar datos.library(tidyverse)
dplyrFiltrar, ordenar, crear columnas y resumir por grupos.filter, mutate, group_by, summarise
ggplot2Gráficos por capas, los de calidad de publicación.ggplot, aes, geom_point, labs
tidyrPasar tablas de formato ancho a largo y al revés.pivot_longer, pivot_wider, drop_na
readr · readxlLeer archivos .csv y de Excel.read_csv, read_excel
stringr · lubridateTextos y fechas sin sufrir.str_detect, ymd
car · lmtestDiagnóstico de la regresión: colinealidad, heterocedasticidad, autocorrelación.vif, bptest, dwtest
psychDescriptivos completos, alfa de Cronbach y análisis factorial exploratorio.describe, alpha, fa
MASSModelos clásicos, entre ellos la logística ordinal.polr, stepAIC
broomConvierte la salida de un modelo en una tabla ordenada, lista para informar.tidy, glance, augment
lavaan · lme4Ecuaciones estructurales y modelos multinivel.cfa, sem, lmer
knitr · rmarkdownInformes 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.

Parte I · El taller

Los datos en R: vectores, factores y tablas

lectura · 10 min

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

TipoEn REjemploPara qué se usa
Numériconumeric / num3.14, 240Mediciones, conteos, cualquier cosa que se promedie.
Textocharacter / chr"Cartago"Nombres, códigos, identificadores. Siempre entre comillas.
Lógicological / logiTRUE, FALSECondiciones y filtros. Sin comillas y en mayúscula sostenida.
Categóricofactor / Factorfactor("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.

  1. 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.
  2. Leerlo con la función correcta Ahí está la trampa colombiana: Excel en español guarda los .csv con punto y coma como separador y coma decimal. Para esos archivos la función es read.csv2(), con el dos al final. Si usa read.csv() le saldrá una sola columna con todo adentro.
  3. Comprobar antes de confiar Siempre, sin excepción: str(datos), head(datos) y summary(datos). Si una columna numérica salió como chr, el problema es el archivo, no R.

Para practicar

  1. Cambie trees por iris en la celda anterior y vuelva a ejecutar. ¿Qué columna no es numérica?
  2. Con iris, calcule la media de Sepal.Length y la tabla de frecuencias de Species.
  3. Quédese sólo con las flores de pétalo largo: iris[iris$Petal.Length > 5, ]. ¿Cuántas son?
Parte I · El taller

El laboratorio: RStudio aquí mismo

práctica · sin límite

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.

Laboratorio_R — RStudio cuaderno interactivo
R File Edit Code View Session Tools Help
R sin iniciar 1:1 R Script
El entorno está vacío
>
Los gráficos aparecerán aquí
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.

Parte II · Estadística descriptiva

Describir unos datos: centro, dispersión y forma

teoría · 9 min

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.

\[ \bar{x} \;=\; \frac{1}{n}\sum_{i=1}^{n} x_i \]
\(x_i\) es cada observación, \(n\) el número de datos. En R: 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.

\[ \mathrm{Me} = \begin{cases} x_{\left(\frac{n+1}{2}\right)} & \text{si } n \text{ es impar}\\[4pt] \dfrac{x_{\left(\frac{n}{2}\right)} + x_{\left(\frac{n}{2}+1\right)}}{2} & \text{si } n \text{ es par} \end{cases} \]
En R: 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

\[ s^{2} = \frac{1}{n-1}\sum_{i=1}^{n}\left(x_i-\bar{x}\right)^{2} \qquad\qquad s = \sqrt{s^{2}} \]
En R: 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

\[ \mathrm{CV} = \frac{s}{\bar{x}}\times 100\,\% \]
Dispersión relativa, sin unidades: permite comparar variables medidas en escalas distintas.

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.

\[ \mathrm{RIC} = Q_3 - Q_1 \qquad\qquad \text{atípico si } x \lt Q_1 - 1{,}5\,\mathrm{RIC} \;\text{ o }\; x \gt Q_3 + 1{,}5\,\mathrm{RIC} \]
Regla de Tukey. En R: 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 quiereOrden en RObservación
Tamaño de muestralength(x)En una tabla, nrow().
Mediamean(x)na.rm = TRUE si hay faltantes.
Medianamedian(x)Resiste los atípicos.
Varianza · desviaciónvar(x) · sd(x)Muestrales, dividen entre \(n-1\).
Recorridodiff(range(x))range() da el par mínimo-máximo.
Cuartilesquantile(x)Con probs= se piden otros.
Rango intercuartílicoIQR(x)\(Q_3-Q_1\).
Todo juntosummary(x)Los cinco números y la media.
Frecuenciastable(x)Para variables categóricas.
Por grupostapply(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))).

Ejemplo 1 · Estadística descriptiva

El recibo de la luz de treinta hogares

ejemplo · 12 min

El contexto

Datos del caso

La 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?

30 observaciones variable: consumo en kWh cuantitativa continua

Qué vamos a calcular y por qué

  1. 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.
  2. 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.
  3. 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.
  4. Cuartiles y la regla de Tukey Para responder la tercera pregunta con un criterio objetivo, y no «a ojo».
  5. 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

  1. 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?
  2. Añada quantile(consumo, probs = c(0.10, 0.90)): ¿entre qué valores está el 80 % central de los hogares?
  3. Calcule cuántos hogares superan los 300 kWh con sum(consumo > 300) y qué porcentaje representan con mean(consumo > 300).
  4. 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.
Ejemplo 2 · Estadística descriptiva

Cómo llegan 120 estudiantes al campus

ejemplo · 12 min

El contexto

Datos del caso

La 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.

n = 120 estudiantes 5 categorías cualitativa nominal

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ímboloNombreQué esEn R
\(n_i\)Frecuencia absolutaCuántos casos hay en la categoría \(i\).table(x)
\(N_i\)Absoluta acumuladaSuma 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))
\[ \sum_{i=1}^{k} n_i = n \qquad\qquad \sum_{i=1}^{k} f_i = 1 \]
Las dos comprobaciones que hay que hacer siempre: si no cuadran, la tabla está mal armada. En el guion se verifican con una línea.

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

  1. 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.
  2. Declararla como factor Con levels se 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.
  3. Contar y convertir table() cuenta, prop.table() divide entre el total y cumsum() acumula. Tres funciones, tres columnas.
  4. Armar la tabla y comprobarla Se juntan las columnas en un data.frame y se verifica que sumen \(n\) y 1.
  5. 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.
  6. 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

  1. Ordene las barras de mayor a menor con barplot(sort(ni, decreasing = TRUE)). ¿Se lee mejor?
  2. Añada una segunda variable, el semestre, y construya una tabla cruzada: table(transporte, semestre).
  3. Calcule qué porcentaje llega en un vehículo propio (moto o carro) con sum(ni[c("Carro","Moto")]) / sum(ni).
  4. Cambie el orden de levels y 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.
Parte III · Probabilidad

Las distribuciones y las cuatro letras de R

teoría · 10 min

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:

d

densidad

En las discretas, \(P(X=k)\). En las continuas, la altura de la curva, que no es una probabilidad.

dbinom, dnorm

p

acumulada

\(P(X \le q)\): el área o la suma a la izquierda. Con lower.tail = FALSE, la cola derecha.

pbinom, pnorm

q

cuantil

La inversa de la anterior: dada una probabilidad, ¿qué valor la deja por debajo?

qbinom, qnorm

r

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.

\[ P(X=k) = \binom{n}{k}\, p^{k}\,(1-p)^{\,n-k}, \qquad k = 0,1,\dots ,n \]
\(\displaystyle\binom{n}{k}=\frac{n!}{k!\,(n-k)!}\) cuenta de cuántas formas distintas pueden repartirse los \(k\) éxitos.
\[ E(X) = n\,p \qquad\qquad \mathrm{Var}(X) = n\,p\,(1-p) \]

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

\[ f(x) = \frac{1}{\sigma\sqrt{2\pi}}\; e^{-\frac{1}{2}\left(\frac{x-\mu}{\sigma}\right)^{2}}, \qquad -\infty \lt x \lt \infty \]
\(\mu\) sitúa el centro y \(\sigma\) controla el ancho. La curva es simétrica alrededor de \(\mu\).

El puntaje z traslada cualquier normal a la normal estándar, de media 0 y desviación 1:

\[ z = \frac{x-\mu}{\sigma} \]
Dice a cuántas desviaciones estándar está \(x\) del centro. Es lo que permite comparar una estatura con una nota.

La regla 68 – 95 – 99,7

En toda distribución normal, sin importar \(\mu\) ni \(\sigma\):

\[ P(\mu-\sigma \lt X \lt \mu+\sigma)=0{,}6827 \qquad P(\mu-2\sigma \lt X \lt \mu+2\sigma)=0{,}9545 \] \[ P(\mu-3\sigma \lt X \lt \mu+3\sigma)=0{,}9973 \]

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.

Ejemplo 3 · Probabilidad

El lote de bombillos y el riesgo del comprador

ejemplo · 13 min

El contexto

Control de calidad

Una 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?

n = 20 ensayos p = 0,05 modelo binomial

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

\[ X \sim \mathrm{Bin}(n=20,\; p=0{,}05) \] \[ P(X=k)=\binom{20}{k}(0{,}05)^{k}(0{,}95)^{\,20-k} \]

El criterio de rechazo es el suceso \(X \ge 3\), cuya probabilidad es \(1-P(X\le 2)\).

Qué calcula cada bloque del guion

  1. Probabilidades puntuales con dbinom dbinom(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.
  2. Probabilidades acumuladas con pbinom Devuelve \(P(X\le q)\). Para la cola derecha hay dos caminos: 1 - pbinom(2, ...) y pbinom(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.
  3. 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.
  4. 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.
  5. 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

  1. ¿Y si el proveedor empeora y p = 0.10? Cambie el valor y vuelva a ejecutar: ¿a cuánto sube la probabilidad de rechazo?
  2. Con lotes de 50 y p = 0.05, ¿cuál es el número esperado de defectuosos? ¿Sigue sirviendo el umbral de tres?
  3. 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?
  4. Suba la simulación a 100000 lotes. ¿Se acerca más al valor exacto? ¿Cuánto más?
Ejemplo 4 · Probabilidad

Estaturas, percentiles y el diseño de un uniforme

ejemplo · 13 min

El contexto

Antropometría aplicada

Una 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?

μ = 158,7 cm σ = 6,2 cm modelo normal

El modelo

\[ X \sim N(\mu = 158{,}7\,;\; \sigma = 6{,}2) \]

Cada pregunta del caso se traduce a un área bajo la curva, y cada área a una orden de R:

PreguntaEn símbolosEn 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,5qnorm(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

  1. En hombres colombianos la media ronda los 170,6 cm con \(\sigma = 6{,}8\). Cambie los dos valores y repita todo el guion.
  2. ¿Qué estatura deja por debajo al 99 %? Use qnorm(0.99, mu, sigma).
  3. Compruebe la simetría: verifique que pnorm(mu - 5, mu, sigma) y pnorm(mu + 5, mu, sigma, lower.tail = FALSE) dan el mismo número.
  4. Simule mil estaturas con set.seed(1); x <- rnorm(1000, mu, sigma) y compare mean(x < 150) con el 0,0803 teórico.
Parte IV · Regresión

Ajustar una curva: seis modelos y una sola idea

teoría · 14 min

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:

\[ e_i = y_i - \hat{y}_i \]

El método de mínimos cuadrados escoge los parámetros que hacen mínima la suma de los residuos al cuadrado:

\[ \mathrm{SCE} = \sum_{i=1}^{n} e_i^{2} = \sum_{i=1}^{n}\left(y_i-\hat{y}_i\right)^{2} \]
Se elevan al cuadrado para que los errores de signo contrario no se cancelen, y para castigar más los desvíos grandes.

La recta de regresión

Para el modelo \(y = \beta_0 + \beta_1 x + \varepsilon\), el mínimo se alcanza en

\[ \hat\beta_1 = \frac{\sum (x_i-\bar{x})(y_i-\bar{y})}{\sum (x_i-\bar{x})^{2}} = \frac{S_{xy}}{S_{xx}} \qquad\qquad \hat\beta_0 = \bar{y} - \hat\beta_1\,\bar{x} \]

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

\[ R^{2} = 1 - \frac{\mathrm{SCE}}{\mathrm{STC}} = 1 - \frac{\sum (y_i-\hat{y}_i)^2}{\sum (y_i-\bar{y})^2} \]
Proporción de la variación de \(y\) que el modelo explica. Va de 0 a 1. En regresión simple, \(R^2 = r^2\).

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.

ModeloEcuaciónCómo se linealizaOrden 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:

\[ \operatorname{logit}(p) = \ln\!\left(\frac{p}{1-p}\right) = \beta_0 + \beta_1 x \] \[ \Longrightarrow\qquad p = \frac{1}{1+e^{-(\beta_0+\beta_1 x)}} \]
El cociente \(p/(1-p)\) son los momios (odds): cuántas veces es más probable que ocurra a que no ocurra.

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:

\[ \mathrm{OR} = e^{\beta_1} \]
La razón de momios: por cada unidad más de \(x\), los momios se multiplican por ese factor.

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

HerramientaQué haceCó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.

Ejemplo 5 · Regresión lineal

El letrero del géiser Old Faithful

ejemplo · 16 min

El contexto

Datos reales · R

En 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?

n = 272 erupciones x = duración (min) y = espera (min)

El modelo

\[ \text{espera} = \beta_0 + \beta_1 \cdot \text{duración} + \varepsilon \]
\(\beta_0\) es la espera prevista para una erupción de duración cero —que no existe, y por eso es sólo el anclaje de la recta—; \(\beta_1\) dice cuántos minutos más hay que esperar por cada minuto adicional de erupción.

El orden de las cosas

  1. Conocer los datos antes de modelarlos str(), head() y summary(). Saber cuántas filas hay y en qué unidades están las variables evita disparates después.
  2. 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.
  3. 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.
  4. Ajustar con lm() y leer summary() La fórmula waiting ~ eruptions se lee «espera explicada por duración».
  5. 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.
  6. 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

  1. Invierta el modelo: lm(eruptions ~ waiting). ¿Cambia el \(R^2\)? ¿Cambian los coeficientes? ¿Por qué ocurre lo uno y no lo otro?
  2. 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.
  3. Pida el pronóstico para 8 minutos. R lo calcula sin protestar: ¿por qué esa cifra no sirve para nada?
  4. 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é?
Ejemplo 6 · Regresión cuadrática

Por qué doblar la velocidad no dobla la distancia de frenado

ejemplo · 17 min

El contexto

Datos reales · R

El 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.

n = 50 ensayos x = velocidad (mph) y = distancia (pies)

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:

\[ d \;=\; t_r\,v \;+\; \frac{v^{2}}{2a} \]
Un polinomio de grado dos sin término independiente: un carro detenido no necesita distancia para detenerse.

Ese detalle —que la curva pase por el origen— no es un capricho matemático. Va a decidir el ejemplo.

Tres modelos, tres decisiones

  1. 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.
  2. La parábola completa lm(dist ~ speed + I(speed^2)). El I() es obligatorio: dentro de una fórmula de R, el símbolo ^ tiene otro significado —indica interacciones— y sin I() el modelo no sería el que se cree.
  3. 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.
  4. Comparar y decidir Con AIC() entre los tres y con anova() entre los dos anidados.
  5. 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

  1. Calcule la distancia a 60 mph con el modelo físico. ¿Cuántas veces la de 20 mph? ¿Es el triple?
  2. 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?
  3. Ajuste un modelo cúbico con I(speed^3). ¿Mejora el AIC? ¿Se justifica un término que la física no pide?
  4. Compare poly(speed, 2) con speed + I(speed^2): los coeficientes salen distintos pero los ajustados son idénticos. ¿Por qué?
Ejemplo 7 · Regresión potencial

Cuánta madera tiene un árbol sin tumbarlo

ejemplo · 15 min

El contexto

Datos reales · R

Un 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?

n = 31 árboles x = diámetro (pulgadas) y = volumen (pies³)

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,

\[ V \;\propto\; d^{2}\,h \]

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

\[ V = a\,d^{\,b} \]
Dos parámetros: \(a\) es un factor de escala y \(b\) es el exponente, que es lo que de verdad queremos conocer.

La linealización

El modelo potencial no es lineal, pero tomando logaritmo natural a ambos lados se endereza:

\[ \ln V = \underbrace{\ln a}_{\text{intercepto}} \;+\; \underbrace{b}_{\text{pendiente}}\,\ln d \]
Es una recta en las variables \(\ln d\) y \(\ln V\). Se ajusta con 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órmula a * 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

  1. 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?
  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?
  3. Compare con un modelo lineal simple lm(Volume ~ Girth) y dibuje los dos sobre los mismos puntos. ¿Dónde falla la recta?
  4. Estime el volumen de un árbol de 25 pulgadas. ¿Por qué hay que advertir que esa cifra es una extrapolación?
Ejemplo 8 · Regresión exponencial

La ley de Moore: medio siglo de duplicaciones

ejemplo · 16 min

El contexto

Datos históricos

En 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?

n = 15 procesadores x = año (1971–2014) y = transistores

El modelo exponencial

\[ y = a\,e^{\,b\,t} \]
\(a\) es el valor en el instante inicial y \(b\) la tasa instantánea de crecimiento.

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.

\[ \ln y = \ln a + b\,t \]
Tomando logaritmo queda una recta. Se ajusta con lm(log(y) ~ t).

Y de la condición \(2 = e^{bT}\) sale la cifra que todo el mundo cita:

\[ T_{\text{duplicación}} = \frac{\ln 2}{b} \]

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

  1. 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?
  2. Calcule el tiempo de duplicación en meses: 12 * log(2) / b.
  3. 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.
  4. 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?
Ejemplo 9 · Curva logística

Lo que crece despacio, acelera y se frena

ejemplo · 17 min

El contexto

Datos reales · R

Un 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?

n = 35 mediciones x = edad (días) y = circunferencia (mm)

La curva logística

\[ y = \frac{A}{1 + e^{\,(x_m - x)/s}} \]
Es la forma que R llama SSlogis, con tres parámetros que se leen directamente sobre el gráfico.
ParámetroEn RQué significa
\(A\)AsymLa asíntota: el techo al que tiende la curva.
\(x_m\)xmidLa edad del punto de inflexión, donde más rápido crece.
\(s\)scalLa 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:

\[ y(x_m) = \frac{A}{2} \qquad\qquad \left.\frac{dy}{dx}\right|_{x=x_m} = \frac{A}{4s} \]
En la inflexión la curva va justo por la mitad del techo, y ahí alcanza su velocidad máxima de crecimiento.

É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

  1. Ajuste la curva a un solo árbol: subset(Orange, Tree == 1). ¿Sube el pseudo-\(R^2\)? ¿Por qué?
  2. Compare con un modelo lineal lm(circumference ~ age, data = Orange). ¿Qué predice la recta a los 5000 días? ¿Y la logística?
  3. Pruebe el modelo de Gompertz, que es otra S pero asimétrica: nls(circumference ~ SSgompertz(age, Asym, b2, b3), data = Orange). Compare los AIC.
  4. 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.
Ejemplo 10 · Regresión logística binaria

El gráfico que no se hizo la noche del Challenger

ejemplo · 18 min

El contexto

Datos reales · caso histórico

La 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.

n = 23 lanzamientos x = temperatura (°F) y = daño (1 / 0)

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:

\[ \operatorname{logit}(p)=\ln\!\left(\frac{p}{1-p}\right) =\beta_0+\beta_1\,\text{temperatura} \]

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,

\[ p=\frac{1}{1+e^{-(\beta_0+\beta_1 x)}} \]
Una curva en forma de S que nunca sale del intervalo \((0,1)\). En R: glm(y ~ x, family = binomial).

El recorrido del guion

  1. 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.
  2. 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.
  3. El modelo con glm() family = binomial es lo único que cambia respecto de un lm().
  4. Traducir el coeficiente a razón de momios exp(coef(modelo)). El coeficiente crudo está en logaritmos y no se informa nunca tal cual.
  5. Pasar a probabilidades predict(..., type = "response"). Sin ese argumento, R devuelve el logit, y más de un informe ha confundido las dos cosas.
  6. 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

  1. 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?
  2. Dibuje la curva junto con los puntos y marque el 0,5. Guarde el gráfico con el botón de descarga del laboratorio.
  3. ¿A qué temperatura la probabilidad estimada baja del 10 %? Despeje del logit: \(x = (\ln(0{,}1/0{,}9) - \beta_0)/\beta_1\).
  4. Calcule la razón de momios para una caída de diez grados: exp(-10 * coef(modelo)[2]). ¿Cuántas veces sube el riesgo?
Parte V · Cierre

Glosario: el vocabulario del cuaderno

consulta

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.

Parte V · Cierre

Puesto de control: compruebe lo aprendido

autoevaluación

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.

Aciertos 0 / 0

¡Muy bien!

Parte V · Cierre

Colofón: por dónde seguir

créditos

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

  1. 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.
  2. 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.
  3. Cargar un archivo propio Suba un .csv suyo al panel Files, léalo con read.csv2() y hágale str(), summary() y un histograma. Ahí empieza el trabajo de verdad.
  4. Aprender el tidyverse Cuando los verbos de R base se queden cortos, dplyr y ggplot2 son el paso siguiente. El libro R for Data Science está en línea y es gratuito.

Para seguir leyendo

Libros abiertos

Herramientas y referencia

Plataformas hermanas

Matemáticas interactivas

Cuadernos, laboratorios y calculadoras de álgebra, cálculo, probabilidad y estadística.

profenestor.com/Matematicas

Programación interactiva

Python con NumPy, SciPy y pandas, lenguaje R, LaTeX y desarrollo web, con editores ejecutables.

profenestor.com/Programacion

Metodología cuantitativa

La serie de cuadernos de regresión, análisis factorial y ecuaciones estructurales, con sus laboratorios de R.

profenestor.com/Estadistica_R

Sobre los datos de los ejemplos

EjemploDatosProcedencia
1 y 2Consumo de energía · medio de transporteDatos construidos para el caso, con valores verosímiles.
3 y 4Lote de bombillos · estaturasParámetros de ejemplo; los cálculos son exactos.
5faithfulIncluido en R. Härdle (1991), Smoothing Techniques.
6carsIncluido en R. Ezekiel (1930), Methods of Correlation Analysis.
7treesIncluido en R. Ryan, Joiner y Ryan (1976), Minitab Student Handbook.
8Ley de MooreNúmero de transistores de microprocesadores Intel, cifras publicadas por el fabricante.
9OrangeIncluido en R. Draper y Smith (1998), Applied Regression Analysis.
10Anillos del ChallengerDalal, 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