Guía de Estudio Completa y Progresiva para Principiantes e Intermedios
¿Qué es la regresión lineal?
La regresión lineal es una técnica estadística fundamental que busca
modelar y analizar la relación entre dos o más variables. Su objetivo
principal es trazar una línea recta (en el caso de una sola variable
predictora) que mejor represente la tendencia general de los datos. Es
como intentar encontrar el “camino principal” a través de un bosque de
puntos dispersos.
¿Para qué sirve?
Sirve para dos propósitos principales: 1) Explicar cómo cambia
una variable cuando otra se modifica (por ejemplo, entender cómo el
aumento de precios afecta las ventas). 2) Predecir valores
futuros o desconocidos basándose en datos históricos.
Variables Dependientes e Independientes:
En un modelo de regresión simple, trabajamos con dos tipos de
variables:
Ejemplo Práctico: Horas de estudio y
calificación
Imagina que queremos saber si estudiar más horas mejora la calificación
en un examen. Aquí, las Horas de estudio son nuestra
variable independiente (X), porque es la acción que controlamos o
medimos inicialmente. La Calificación es la variable
dependiente (Y), porque asumimos que el resultado del examen depende de
cuánto se estudió.
¿Qué significa ajustar una recta a los datos?
Si graficamos las horas de estudio en el eje horizontal y las
calificaciones en el vertical, obtendremos una nube de puntos. Ajustar
una recta significa dibujar una línea matemática a través de esa nube de
puntos de manera que pase lo más cerca posible de todos ellos al mismo
tiempo. Esta recta resume la relación: nos dice, en promedio, cuánto
sube la calificación por cada hora extra de estudio.
¿Qué es un residuo y qué papel juegan los mínimos
cuadrados?
Ninguna línea recta pasará perfectamente por todos los puntos (a menos
que la relación sea matemáticamente perfecta, lo cual no ocurre en la
vida real). La distancia vertical entre un punto real (la calificación
que un alumno realmente sacó) y la línea recta (la calificación que la
línea predice que sacaría) se llama residuo o error
observado.
El método de Mínimos Cuadrados Ordinarios (MCO) es la técnica matemática que usamos para encontrar la “mejor” recta. ¿Cómo decide cuál es la mejor? Calcula los residuos de todos los puntos, los eleva al cuadrado y los suma. La recta ganadora es aquella que hace que esta suma sea lo más pequeña (mínima) posible.
¿Por qué se elevan los residuos al cuadrado?
Por dos razones fundamentales: 1) Los puntos por encima de la recta
tienen residuos positivos y los que están por debajo tienen residuos
negativos. Si solo los sumáramos, se cancelarían entre sí, dando cero,
incluso si la recta es pésima. Al elevarlos al cuadrado, todos los
valores se vuelven positivos. 2) Elevar al cuadrado penaliza mucho más a
los errores grandes que a los pequeños. Esto obliga a la recta a
acomodarse de manera que evite dejar puntos demasiado lejos de ella.
Antes de calcular cualquier modelo, necesitamos datos. En R, la
estructura fundamental para almacenar datos tabulares es el
data.frame. Vamos a simular el ejemplo de las horas de
estudio y las calificaciones. Crearemos dos vectores numéricos y los
uniremos. Luego, la mejor práctica estadística es siempre visualizar los
datos antes de modelarlos usando un gráfico de dispersión (scatter
plot).
# Crear el vector de la variable independiente (X): Horas de estudio
x <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
# Crear el vector de la variable dependiente (Y): Calificaciones obtenidas
y <- c(50, 55, 60, 65, 70, 68, 75, 80, 85, 90)
# Unir ambos vectores en un data.frame (tabla de datos)
datos <- data.frame(Horas = x, Calificacion = y)
# Mostrar los datos en la consola para verificar
print(datos)
# Graficar los datos para observar la relación visualmente
plot(datos$Horas, datos$Calificacion,
main = "Relación entre Horas de Estudio y Calificación",
xlab = "Horas de Estudio (X)",
ylab = "Calificación (Y)",
pch = 19, # Tipo de punto (círculo relleno)
col = "blue") # Color del punto
x <- c(1, 2, ...): Usamos la función
c() (combinar) para crear un vector numérico del 1 al 10
que representa las horas estudiadas. La flecha <- es el
operador de asignación en R.y <- c(50, 55, ...): Creamos el vector de
calificaciones correspondientes. El primer alumno estudió 1 hora y sacó
50; el sexto estudió 6 horas y sacó 68.datos <- data.frame(Horas = x, Calificacion = y):
Creamos una tabla donde la primera columna se llama “Horas” (conteniendo
x) y la segunda “Calificacion” (conteniendo y).print(datos): Imprime la tabla en la pantalla.plot(...): Llama a la función base de gráficos de R.
datos$Horas extrae la columna X,
datos$Calificacion extrae la Y. main pone el
título, xlab y ylab nombran los ejes,
pch=19 hace que los puntos sean sólidos y
col="blue" los pinta de azul. Horas Calificacion
1 1 50
2 2 55
3 3 60
4 4 65
5 5 70
6 6 68
7 7 75
8 8 80
9 9 85
10 10 90
\[Se genera una ventana gráfica con puntos azules ascendentes de izquierda a derecha\]
Al imprimir los datos, confirmamos que tenemos 10 observaciones (filas) y 2 variables (columnas). Cada fila representa a un estudiante distinto.
Explicación de la gráfica y el patrón observado: Al observar el gráfico de dispersión generado, notamos un patrón claro: a medida que nos movemos hacia la derecha en el eje X (más horas de estudio), los puntos tienden a subir en el eje Y (mayor calificación). Esto indica una relación lineal positiva. No es una línea perfectamente recta (por ejemplo, el estudiante de 6 horas sacó 68, un poco menos que el de 5 horas que sacó 70), lo cual es normal en datos reales debido a la variabilidad natural. Sin embargo, la tendencia general es innegablemente ascendente, lo que justifica el uso de un modelo de regresión lineal.
La ecuación de una línea recta es: Y = b0 + b1*X
Donde:
Vamos a calcular esto paso a paso en R para desmitificar el proceso.
# 1. Calcular la media de X e Y
media_x <- mean(datos$Horas)
media_y <- mean(datos$Calificacion)
# 2. Calcular la varianza de X y la covarianza entre X e Y
varianza_x <- var(datos$Horas)
covarianza_xy <- cov(datos$Horas, datos$Calificacion)
# 3. Calcular la pendiente (b1)
b1 <- covarianza_xy / varianza_x
# 4. Calcular el intercepto (b0)
b0 <- media_y - (b1 * media_x)
# Mostrar los resultados
cat("Media de X:", media_x, "\n")
cat("Media de Y:", media_y, "\n")
cat("Varianza de X:", varianza_x, "\n")
cat("Covarianza XY:", covarianza_xy, "\n")
cat("Pendiente (b1):", b1, "\n")
cat("Intercepto (b0):", b0, "\n")
mean(datos$Horas) y
mean(datos$Calificacion): Calculan el promedio aritmético
sumando todos los valores y dividiendo por el total de datos (10).var(datos$Horas): Calcula la varianza muestral de X,
que mide qué tan dispersas están las horas de estudio respecto a su
propia media.cov(datos$Horas, datos$Calificacion): Calcula la
covarianza muestral. Si es positiva, indica que cuando X sube, Y tiende
a subir.b1 <- covarianza_xy / varianza_x: Aplica la fórmula
matemática de mínimos cuadrados para la pendiente.b0 <- media_y - (b1 * media_x): Aplica la fórmula
del intercepto, despejada de la ecuación de la recta evaluada en las
medias.cat(...): Es una función para concatenar e imprimir
texto y variables en la misma línea. "\n" significa salto
de línea.Media de X: 5.5
Media de Y: 69.8
Varianza de X: 9.166667
Covarianza XY: 38.66667
Pendiente (b1): 4.218182
Intercepto (b0): 46.6
Valores intermedios: El estudiante promedio estudia 5.5 horas y obtiene una calificación de 69.8. La covarianza es positiva (38.66), confirmando matemáticamente lo que vimos en la gráfica: la relación es directa.
Interpretación de la Pendiente (b1 = 4.218): ¿Qué significa que la pendiente sea positiva, negativa o cero? Una pendiente positiva significa que al aumentar X, Y aumenta. Una negativa significaría que al aumentar X, Y disminuye. Una pendiente cercana a cero indicaría que X no tiene efecto sobre Y. En nuestro caso, b1 es 4.218. En lenguaje natural: “Por cada hora adicional de estudio, se estima que la calificación del estudiante aumenta en promedio 4.218 puntos.”
Interpretación del Intercepto (b0 = 46.6): El intercepto es el valor esperado de Y cuando X es 0. En el contexto de nuestro ejemplo: “Si un estudiante estudia exactamente 0 horas, el modelo predice que su calificación base será de 46.6 puntos.” (Quizás por conocimientos previos o suerte en un examen de opción múltiple). Es el punto de partida de nuestra recta.
Aunque es vital entender el cálculo manual, en la práctica
profesional nadie calcula regresiones a mano. R proporciona la función
lm() (Linear Model) que hace todos estos cálculos (y muchos
más relacionados con la estadística inferencial) en una fracción de
segundo. Además, la función summary() nos proporciona un
reporte estadístico completo que nos permite evaluar no solo la ecuación
de la recta, sino la calidad y
confiabilidad de nuestro modelo.
# Ajustar el modelo lineal usando la función lm()
# La sintaxis es: lm(Variable_Dependiente ~ Variable_Independiente, data = datos)
modelo <- lm(Calificacion ~ Horas, data = datos)
# Mostrar el resumen estadístico completo del modelo
summary(modelo)
lm(Calificacion ~ Horas, data = datos): La tilde
~ se lee como “explicado por” o “en función de”. Le estamos
diciendo a R: “Crea un modelo lineal donde la Calificación es explicada
por las Horas, usando el data.frame llamado ‘datos’”. El resultado se
guarda en el objeto modelo.summary(modelo): Toma el objeto modelo
(que internamente tiene listas de cálculos complejos) y extrae un
resumen formateado y fácil de leer con las métricas estadísticas más
importantes.Call:
lm(formula = Calificacion ~ Horas, data = datos)
Residuals:
Min 1Q Median 3Q Max
-3.9091 -1.1364 0.0909 1.6364 3.8727
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 46.6000 1.8761 24.84 4.54e-09 \*\*\*
Horas 4.2182 0.2995 14.08 6.46e-07 \*\*\*
---
Signif. codes: 0 ‘\*\*\*’ 0.001 ‘\*\*’ 0.01 ‘\*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 2.721 on 8 degrees of freedom
Multiple R-squared: 0.9612, Adjusted R-squared: 0.9564
F-statistic: 198.3 on 1 and 8 DF, p-value: 6.463e-07
Esta salida es el corazón de la regresión en R. Vamos a desglosarla rigurosamente:
Coefficients (Coeficientes):
Métricas de calidad del modelo:
Es fundamental entender que la “magia” que hace la función
lm() no es más que la aplicación eficiente de las fórmulas
matemáticas que usamos en la Parte 3. El cálculo manual y el cálculo
automático deben coincidir exactamente porque ambos
buscan resolver el mismo problema de optimización: minimizar la suma de
los errores al cuadrado.
¿Qué representa matemáticamente cada
coeficiente?
La pendiente (b1) es matemáticamente la proporción de la variabilidad
conjunta (covarianza) respecto a la variabilidad de la variable
predictora (varianza de X). Si X e Y se mueven juntas fuertemente, la
covarianza es alta, y la pendiente será pronunciada. El intercepto (b0)
es simplemente un factor de ajuste de nivel; asegura que la recta esté a
la altura correcta en el plano cartesiano, anclándola en el punto medio
de los datos (media de X, media de Y).
# Extraer los coeficientes del modelo automático
coeficientes_lm <- coef(modelo)
# Comparar visualmente en consola
cat("Cálculo Manual - Intercepto:", b0, " Pendiente:", b1, "\n")
cat("Cálculo lm() - Intercepto:", coeficientes_lm[1], " Pendiente:", coeficientes_lm[2], "\n")
# Verificar si son matemáticamente idénticos (redondeando por precisión de máquina)
son_iguales_b1 <- round(b1, 5) == round(coeficientes_lm[2], 5)
cat("¿Las pendientes son iguales?:", son_iguales_b1, "\n")
coef(modelo): Es una función extractora en R que saca
únicamente los números de los coeficientes (Estimate) del objeto modelo
complejo.coeficientes_lm[1] y [2]: Accedemos al
primer elemento (Intercepto) y al segundo (Pendiente) del vector
extraído.round(..., 5) == round(..., 5): Comparamos ambos
valores redondeados a 5 decimales. Esto se hace porque las computadoras
manejan los decimales flotantes con ligerísimas variaciones
microscópicas, y una comparación directa a veces falla por el decimal
número 16.Cálculo Manual - Intercepto: 46.6 Pendiente: 4.218182
Cálculo lm() - Intercepto: 46.6 Pendiente: 4.218182
¿Las pendientes son iguales?: TRUE
Como era de esperar, el resultado es TRUE. Esto
demuestra que la función lm() utiliza internamente las
propiedades de la media, varianza y covarianza de las muestras para
encontrar la recta óptima. Comprender esto te da poder: sabes que la
regresión lineal no es una “caja negra” de inteligencia artificial, sino
una relación algebraica directa y transparente basada en cómo varían los
datos.
Una vez que tenemos la ecuación de la recta (Y = 46.6 + 4.218*X), podemos usarla para calcular qué calificación debería haber sacado cada alumno según el modelo. A estos valores teóricos se les llama Valores Ajustados (Fitted values).
Sin embargo, la realidad rara vez coincide perfectamente con la
teoría. La diferencia entre la calificación real que sacó el alumno y la
calificación ajustada que predijo el modelo se llama
Residuo.
Fórmula: Residuo = Valor Real - Valor Ajustado
La teoría de Mínimos Cuadrados dice que la recta elegida es aquella que hace que la Suma de los Residuos al Cuadrado (SCE) sea la menor posible. Además, una propiedad matemática fascinante de este método es que la suma simple de todos los residuos siempre será exactamente cero (o un número microscópicamente cercano a cero por el redondeo de la computadora).
# 1. Calcular los valores ajustados (predicciones del modelo para los datos originales)
y_ajustados <- fitted(modelo)
# 2. Calcular los residuos (diferencia entre lo real y lo predicho)
residuos <- residuals(modelo)
# 3. Calcular la suma simple de los residuos
suma_residuos <- sum(residuos)
# 4. Calcular la suma de los residuos al cuadrado (SCE)
suma_residuos_cuadrado <- sum(residuos^2)
# Mostrar un resumen de los primeros 3 alumnos
head(data.frame(Real = datos$Calificacion, Ajustado = y_ajustados, Residuo = residuos), 3)
# Mostrar las sumas
cat("\nSuma de residuos:", suma_residuos, "\n")
cat("Suma de residuos al cuadrado (SCE):", suma_residuos_cuadrado, "\n")
fitted(modelo): Extrae las predicciones (Y calculadas)
que el modelo hace para cada valor de X original.residuals(modelo): Extrae los errores de predicción
para cada punto.sum(residuos): Suma todos los valores del vector de
residuos.sum(residuos^2): Primero eleva cada residuo al cuadrado
(para quitar signos negativos) y luego los suma todos.head(..., 3): Crea una pequeña tabla temporal para ver
lado a lado el valor real, el ajustado y el residuo, mostrando solo las
primeras 3 filas. Real Ajustado Residuo
1 50 50.81818 -0.8181818
2 55 55.03636 -0.0363636
3 60 59.25455 0.7454545
Suma de residuos: -1.421085e-14
Suma de residuos al cuadrado (SCE): 59.23636
Análisis de los alumnos: Para el alumno 1 (1 hora de estudio), el modelo predijo una calificación de 50.81. En la realidad sacó 50. Su residuo es -0.81 (sacó un poco menos de lo esperado). Para el alumno 3 (3 horas), el modelo predijo 59.25, pero sacó 60. Su residuo es positivo (0.74), superó las expectativas del modelo.
Significado estadístico de las sumas: La suma de los
residuos es -1.42e-14. Esto es notación científica para
-0.0000000000000142. A efectos prácticos, es
CERO. Esto confirma la propiedad matemática de que la
recta de mínimos cuadrados equilibra perfectamente los errores por
encima y por debajo de ella.
La Suma de residuos al cuadrado (59.23) es el valor que el algoritmo de R minimizó. Cualquier otra línea recta que intentes dibujar a través de estos datos (cambiando un poco la pendiente o el intercepto) dará como resultado una suma de cuadrados mayor a 59.23. Esta es la prueba de que tenemos el mejor ajuste posible.
La estadística se comprende mucho mejor de forma visual. Vamos a graficar tres elementos fundamentales: 1) Los puntos reales (nuestros datos observados). 2) La línea de regresión (nuestro modelo teórico). 3) Los residuos (la distancia vertical entre los puntos y la línea). Una buena recta de ajuste pasará por el medio de la nube de puntos. Los puntos que estén muy alejados de la recta representan observaciones donde el modelo falla en su predicción (valores atípicos o varianza no explicada).
# 1. Graficar los puntos observados originales
plot(datos$Horas, datos$Calificacion,
main = "Modelo de Regresión y Residuos",
xlab = "Horas de Estudio", ylab = "Calificación",
pch = 16, col = "black", cex = 1.2)
# 2. Dibujar la línea de regresión ajustada
# abline() entiende automáticamente objetos de tipo 'lm'
abline(modelo, col = "red", lwd = 2)
# 3. Identificar visualmente los residuos dibujando líneas verticales
# segments(x0, y0, x1, y1) dibuja líneas desde el punto real hasta el punto ajustado
segments(x0 = datos$Horas,
y0 = datos$Calificacion,
x1 = datos$Horas,
y1 = y_ajustados,
col = "blue", lty = 2) # lty=2 hace la línea punteada
plot(...): Crea el gráfico base con puntos negros
(col="black") un poco más grandes de lo normal
(cex=1.2).abline(modelo, ...): Es una función mágica en R. Al
pasarle el objeto modelo, extrae automáticamente el
intercepto y la pendiente y dibuja la recta. La hacemos roja
(col="red") y gruesa (lwd=2).segments(...): Dibuja segmentos de línea. Empiezan en
las coordenadas reales (x0, y0) y terminan en la misma
posición X pero en la altura predicha por la recta
(x1, y1). Las pintamos azules y punteadas.\[Se genera un gráfico que muestra:
- Puntos negros (datos reales).
- Una línea roja diagonal ascendente (la recta de regresión).
- Pequeñas líneas verticales azules punteadas que conectan cada punto negro con la línea roja.\]
Interpretación visual: La línea roja representa
nuestra ecuación Y = 46.6 + 4.218*X. Es la “tendencia
pura”. Las líneas azules punteadas son la representación visual de los
residuos. La longitud de cada línea azul es exactamente
el valor del residuo que calculamos en la Parte 6.
¿Qué significa que algunos puntos estén más alejados? Si observas el gráfico, verás que algunos puntos casi tocan la línea roja (las líneas azules son cortas). Esto significa que para esos alumnos, las horas de estudio explican casi perfectamente su calificación. Sin embargo, si hay un punto muy alejado (una línea azul larga), significa que ese alumno sacó una calificación muy diferente a la esperada. ¿Por qué? Porque en la vida real, la calificación no depende solo de las horas de estudio. Quizás ese alumno durmió mal, estaba enfermo, o ya conocía el tema. Esa distancia azul representa todo lo que nuestro modelo no sabe.
En la teoría estadística, el modelo de regresión poblacional verdadero se escribe como: Y = β0 + β1*X + ε
Ese símbolo ε (épsilon) es el Término de Error Teórico. Representa la diferencia entre el valor real de Y y el valor que predeciría una recta perfecta si tuviéramos los datos de toda la población del universo. Como solo tenemos una muestra (10 alumnos), calculamos una recta estimada, y a la diferencia observable le llamamos residuo (e).
¿Qué factores reales contiene el error?
El término de error es el “cajón de sastre” del modelo. Contiene:
Por esto, no todo se explica con X. El error es vital en la inferencia estadística porque nos permite calcular intervalos de confianza y p-valores. Asumimos que estos errores se comportan de manera aleatoria y normal.
# Inspeccionar la distribución de los residuos
# Un buen modelo debe tener residuos que parezcan aleatorios y centrados en cero
# Resumen estadístico de los residuos
summary(residuos)
# Histograma de los residuos para ver su forma
hist(residuos,
main = "Distribución de los Residuos",
xlab = "Valor del Residuo",
col = "lightgreen",
border = "black",
breaks = 5)
summary(residuos): Nos da el mínimo, máximo, mediana y
cuartiles de los errores de nuestro modelo.hist(...): Crea un histograma. Agrupa los residuos en
“cubetas” (breaks) para ver si la mayoría de los errores son pequeños
(cerca de cero) y si hay simetría. Min. 1st Qu. Median Mean 3rd Qu. Max.
-3.90909 -1.13636 0.09091 0.00000 1.63636 3.87273
\[Se genera un histograma de barras verdes. La barra más alta debería estar cerca del 0 en el eje X\]
Al observar el summary, vemos que la Media (Mean) es
exactamente 0.00000, lo cual confirma la teoría de mínimos cuadrados. La
Mediana está muy cerca de cero (0.09), lo que sugiere que los errores
están distribuidos simétricamente.
El histograma nos dice visualmente cómo se equivocó el modelo. Si la mayoría de las barras están agrupadas alrededor del cero, significa que la mayoría de las veces el modelo se equivoca por muy poco. Si viéramos una barra gigante muy lejos a la derecha, indicaría que hay un caso donde el modelo predijo una calificación bajísima pero el alumno sacó una nota altísima (un valor atípico extremo). En nuestro caso, los errores van desde -3.9 hasta +3.8, lo cual es un rango de error muy aceptable para calificaciones sobre 100.
Para que los p-valores y las conclusiones de nuestro modelo sean válidos científicamente, los datos deben cumplir 4 supuestos fundamentales sobre los errores (residuos). Se conocen por el acrónimo LINE (en inglés):
Si se violan estos supuestos, la recta calculada podría seguir siendo la “mejor línea”, pero nuestras predicciones y niveles de confianza serán engañosos.
# R tiene una función integrada para revisar estos supuestos visualmente
# par(mfrow=c(2,2)) divide la ventana gráfica en una cuadrícula de 2x2
par(mfrow = c(2, 2))
# Al hacer plot() directamente sobre el objeto modelo, R genera 4 gráficos diagnósticos
plot(modelo)
# Restaurar la ventana gráfica a 1x1 para futuros gráficos
par(mfrow = c(1, 1))
par(mfrow = c(2, 2)): Modifica los parámetros gráficos
(par) para que los siguientes gráficos se dibujen en una matriz de 2
filas y 2 columnas.plot(modelo): Es una función genérica. Cuando detecta
que le pasas un modelo lineal, no dibuja los datos, sino que genera
automáticamente 4 gráficos estadísticos para evaluar los supuestos.par(mfrow = c(1, 1)): Es una buena práctica devolver la
configuración a la normalidad.\[Se genera una ventana con 4 gráficos:
1. Residuals vs Fitted (Residuos vs Valores Ajustados)
2. Normal Q-Q (Gráfico de Cuantiles Normales)
3. Scale-Location (Escala-Ubicación)
4. Residuals vs Leverage (Residuos vs Apalancamiento)\]
1. Residuals vs Fitted (Evalúa Linealidad): Muestra los residuos en el eje Y y las predicciones en el eje X. La línea roja debe ser aproximadamente horizontal y recta. Si ves una forma de “U” o curva, significa que la relación real no es lineal y deberías usar otro modelo (ej. regresión cuadrática).
2. Normal Q-Q (Evalúa Normalidad): Los puntos representan los residuos ordenados. Deben caer lo más cerca posible de la línea diagonal punteada. Si se desvían mucho en los extremos, los errores no son normales, lo que afecta la validez de los p-valores.
3. Scale-Location (Evalúa Homocedasticidad): Similar al primero, pero usa la raíz cuadrada de los residuos estandarizados. Buscamos que los puntos estén dispersos aleatoriamente formando una banda horizontal de ancho constante. Si forman un “embudo” (se abren o se cierran), hay heterocedasticidad (la varianza del error cambia).
4. Residuals vs Leverage (Evalúa Valores Atípicos Influyentes): Identifica si hay algún punto extremo que esté “jalando” la recta de regresión hacia él de manera desproporcionada. Si un punto cruza las líneas punteadas rojas (Distancia de Cook), significa que eliminar ese único punto cambiaría drásticamente toda la ecuación de la recta.
Para consolidar todo lo aprendido, vamos a ejecutar un flujo de trabajo completo y realista. Imagina que te entregan un nuevo conjunto de datos sobre la edad de pacientes y su presión arterial sistólica. Tu objetivo es determinar si la edad predice la presión arterial, ajustar el modelo, evaluarlo y finalmente usarlo para predecir la presión de un paciente nuevo que no está en los datos.
### PASO 1: Creación y Exploración de Datos ###
edad <- c(35, 45, 50, 55, 60, 65, 70, 75, 80, 85)
presion <- c(114, 120, 125, 130, 138, 145, 150, 155, 160, 165)
datos_medicos <- data.frame(Edad = edad, Presion = presion)
### PASO 2: Ajuste del Modelo ###
modelo_medico <- lm(Presion ~ Edad, data = datos_medicos)
### PASO 3: Resumen y Evaluación ###
resumen <- summary(modelo_medico)
print(resumen$coefficients) # Imprimir solo los coeficientes para simplificar
cat("R-cuadrado del modelo:", resumen$r.squared, "\n")
### PASO 4: Gráfica del Modelo ###
plot(datos_medicos$Edad, datos_medicos$Presion,
main = "Regresión: Edad vs Presión Arterial",
xlab = "Edad (Años)", ylab = "Presión Sistólica",
pch = 16, col = "darkred")
abline(modelo_medico, col = "blue", lwd = 2)
### PASO 5: Predicción para un nuevo paciente ###
# Creamos un data.frame con el nuevo valor de X
paciente_nuevo <- data.frame(Edad = 62)
# Usamos la función predict()
prediccion <- predict(modelo_medico, newdata = paciente_nuevo)
cat("\nPredicción:\nUn paciente de 62 años tendrá una presión estimada de:", round(prediccion, 2), "\n")
datos_medicos.lm()
indicando que Presion depende de Edad.summary() en una
variable. Extraemos específicamente la tabla de coeficientes y el valor
de R-cuadrado usando el operador $.data.frame con el mismo nombre de columna
(Edad). La función predict() toma el modelo ajustado y
calcula el valor de Y para esa nueva X. Estimate Std. Error t value Pr(>|t|)
(Intercept) 76.818182 2.45866184 31.243900 1.155858e-09
Edad 1.024242 0.03956381 25.888365 3.864003e-09
R-cuadrado del modelo: 0.988201
\[Se genera el gráfico con puntos rojos y línea azul\]
Predicción:
Un paciente de 62 años tendrá una presión estimada de: 140.32
Conclusión del Modelo: El modelo nos indica que la
ecuación es Presión = 76.81 + 1.024 * Edad. La pendiente
(1.024) significa que, en promedio, por cada año que envejece una
persona, su presión arterial sistólica aumenta en aproximadamente 1
unidad. El p-valor de la edad (3.86e-09) es minúsculo, lo que confirma
que la edad es un predictor estadísticamente muy significativo de la
presión arterial.
Calidad del Modelo: El R-cuadrado es 0.988 (98.8%). Esto es un ajuste extraordinariamente alto (típico de ejemplos de libros de texto, en medicina real suele ser más bajo). Significa que casi toda la variación en la presión arterial de esta muestra se explica simplemente conociendo la edad del paciente.
Aplicación Práctica (Predicción): La verdadera utilidad de la regresión en ciencia de datos es la predicción. Al ingresar a un paciente de 62 años (una edad que no existía en nuestros datos originales), el modelo interpola la información y predice una presión de 140.32. El médico ahora tiene una línea base matemática para evaluar si la presión real de ese paciente de 62 años está dentro de lo esperado o si presenta una anomalía que requiera tratamiento.