knitr::opts_chunk$set(echo = TRUE)
#CARGA DE LIBRERIAS
knitr::opts_chunk$set(echo = TRUE)
library(readr)
library(data.table)
## Warning: package 'data.table' was built under R version 4.4.3
library(tidyverse)
## Warning: package 'ggplot2' was built under R version 4.4.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ purrr 1.0.2
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 4.0.0 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::between() masks data.table::between()
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::first() masks data.table::first()
## ✖ lubridate::hour() masks data.table::hour()
## ✖ lubridate::isoweek() masks data.table::isoweek()
## ✖ dplyr::lag() masks stats::lag()
## ✖ dplyr::last() masks data.table::last()
## ✖ lubridate::mday() masks data.table::mday()
## ✖ lubridate::minute() masks data.table::minute()
## ✖ lubridate::month() masks data.table::month()
## ✖ lubridate::quarter() masks data.table::quarter()
## ✖ lubridate::second() masks data.table::second()
## ✖ purrr::transpose() masks data.table::transpose()
## ✖ lubridate::wday() masks data.table::wday()
## ✖ lubridate::week() masks data.table::week()
## ✖ lubridate::yday() masks data.table::yday()
## ✖ lubridate::year() masks data.table::year()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(broom)
library(vcd)
## Warning: package 'vcd' was built under R version 4.4.3
## Cargando paquete requerido: grid
library(sjPlot)
## Learn more about sjPlot with 'browseVignettes("sjPlot")'.
##
## Adjuntando el paquete: 'sjPlot'
##
## The following object is masked from 'package:ggplot2':
##
## set_theme
library(epiR)
## Cargando paquete requerido: survival
## Package epiR 2.0.77 is loaded
## Type help(epi.about) for summary information
## Type browseVignettes(package = 'epiR') to learn how to use epiR for applied epidemiological analyses
library(gtsummary)
## Warning: package 'gtsummary' was built under R version 4.4.3
library(tableone)
library(ggpubr)
library(vcd)
library(vcdExtra)
## Warning: package 'vcdExtra' was built under R version 4.4.3
## Cargando paquete requerido: gnm
## Warning: package 'gnm' was built under R version 4.4.3
##
## Adjuntando el paquete: 'vcdExtra'
##
## The following object is masked from 'package:dplyr':
##
## summarise
library(CalibrationCurves)
## Warning: package 'CalibrationCurves' was built under R version 4.4.3
## Cargando paquete requerido: rms
## Warning: package 'rms' was built under R version 4.4.3
## Cargando paquete requerido: Hmisc
## Warning: package 'Hmisc' was built under R version 4.4.3
##
## Adjuntando el paquete: 'Hmisc'
##
## The following objects are masked from 'package:dplyr':
##
## src, summarize
##
## The following objects are masked from 'package:base':
##
## format.pval, units
library(pROC)
## Warning: package 'pROC' was built under R version 4.4.3
## Type 'citation("pROC")' for a citation.
##
## Adjuntando el paquete: 'pROC'
##
## The following objects are masked from 'package:stats':
##
## cov, smooth, var
library(glmnet)
## Warning: package 'glmnet' was built under R version 4.4.3
## Cargando paquete requerido: Matrix
##
## Adjuntando el paquete: 'Matrix'
##
## The following objects are masked from 'package:tidyr':
##
## expand, pack, unpack
##
## Loaded glmnet 4.1-10
library(caret)
## Warning: package 'caret' was built under R version 4.4.3
## Cargando paquete requerido: lattice
##
## Adjuntando el paquete: 'lattice'
##
## The following object is masked from 'package:gnm':
##
## barley
##
##
## Adjuntando el paquete: 'caret'
##
## The following object is masked from 'package:survival':
##
## cluster
##
## The following object is masked from 'package:purrr':
##
## lift
library(broom.helpers)
## Warning: package 'broom.helpers' was built under R version 4.4.3
##
## Adjuntando el paquete: 'broom.helpers'
##
## The following objects are masked from 'package:gtsummary':
##
## all_categorical, all_continuous, all_contrasts, all_dichotomous,
## all_interaction, all_intercepts
options(scipen = 999, digits = 3, encoding = 'UTF-8')
library(naniar)
## Warning: package 'naniar' was built under R version 4.4.3
library(dplyr)
library(survival)
library(survminer)
##
## Adjuntando el paquete: 'survminer'
##
## The following object is masked from 'package:survival':
##
## myeloma
library(MASS)
##
## Adjuntando el paquete: 'MASS'
##
## The following object is masked from 'package:gtsummary':
##
## select
##
## The following object is masked from 'package:dplyr':
##
## select
library(rms)
library(sjPlot)
pkgbuild::has_build_tools(debug = TRUE)
## Trying to compile a simple C file
## Running "C:/PROGRA~1/R/R-44~1.2/bin/x64/Rcmd.exe" SHLIB foo.c
## using C compiler: 'gcc.exe (GCC) 13.3.0'
## gcc -I"C:/PROGRA~1/R/R-44~1.2/include" -DNDEBUG -I"C:/rtools44/x86_64-w64-mingw32.static.posix/include" -O2 -Wall -mfpmath=sse -msse2 -mstackrealign -c foo.c -o foo.o
## gcc -shared -s -static-libgcc -o foo.dll tmp.def foo.o -LC:/rtools44/x86_64-w64-mingw32.static.posix/lib/x64 -LC:/rtools44/x86_64-w64-mingw32.static.posix/lib -LC:/PROGRA~1/R/R-44~1.2/bin/x64 -lR
##
## [1] TRUE
library(ggsurvfit)
## Warning: package 'ggsurvfit' was built under R version 4.4.3
library(riskRegression)
## Warning: package 'riskRegression' was built under R version 4.4.3
## Registered S3 method overwritten by 'riskRegression':
## method from
## nobs.multinom broom
## riskRegression version 2025.05.20
library(rms)
library(cmprsk)
## Warning: package 'cmprsk' was built under R version 4.4.3
library(prodlim)
## Warning: package 'prodlim' was built under R version 4.4.3
library(naniar)
library(ggplot2)
library(scales)
## Warning: package 'scales' was built under R version 4.4.3
##
## Adjuntando el paquete: 'scales'
##
## The following object is masked from 'package:purrr':
##
## discard
##
## The following object is masked from 'package:readr':
##
## col_factor
library(tidycmprsk)
## Warning: package 'tidycmprsk' was built under R version 4.4.3
##
## Adjuntando el paquete: 'tidycmprsk'
##
## The following objects are masked from 'package:cmprsk':
##
## crr, cuminc
##
## The following object is masked from 'package:gtsummary':
##
## trial
library(dplyr)
library(psych)
## Warning: package 'psych' was built under R version 4.4.3
##
## Adjuntando el paquete: 'psych'
##
## The following objects are masked from 'package:scales':
##
## alpha, rescale
##
## The following object is masked from 'package:ggsurvfit':
##
## %+%
##
## The following object is masked from 'package:Hmisc':
##
## describe
##
## The following objects are masked from 'package:ggplot2':
##
## %+%, alpha
library(lmtest)
## Warning: package 'lmtest' was built under R version 4.4.3
## Cargando paquete requerido: zoo
##
## Adjuntando el paquete: 'zoo'
##
## The following objects are masked from 'package:data.table':
##
## yearmon, yearqtr
##
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
##
##
## Adjuntando el paquete: 'lmtest'
##
## The following object is masked from 'package:rms':
##
## lrtest
Generación de una base de datos. Se genera una base de datos de 200 personas Variables: * Colesterol (continua) * Edad (continua) * Sexo (F,M)
La regresión lineal es un método estadístico que permite determinar el valor promedio de una variable continua de resultado (y) conociendo el valor de la variable predictora (x). En la regresión lineal múltiple, hay más de una variable predictora. La relación entre las variables continuas debe ser lineal. En caso de otro tipo de relación, se debe aplicar otro tipo de modelo.
En la regresión lineal simple, el cálculo para conocer el valor promedio de una variable Y según el valor de X es Y=B0 + B1 * X
Sirve para predecir valores (cuánto es el valor promedio esperado del peso según la edad para un bebé) o explicar relaciones (cuánto aumenta la temperatura del pie por cada grado de temperatura que aumenta la temperatura ambiente) OJO! No prueba causalidad No elimina confusión no medida Asume relación lineal (a veces no es real)
set.seed(123)
n <- 200
COL <- data.frame(
sexo = sample(c("F", "M"), size = n, replace = TRUE),
edad = sample(20:70, size = n, replace = TRUE)
)
COL$colesterol <- 150 +
1.5 * COL$edad +
ifelse(COL$sexo == "M", 22, 0) +
rnorm(n, mean = 0, sd = 12)
COL$colesterol <- round(COL$colesterol, 1)
range(COL$colesterol)
## [1] 158 288
head(COL)
## sexo edad colesterol
## 1 F 49 219
## 2 F 49 205
## 3 F 44 231
## 4 M 35 232
## 5 F 43 201
## 6 M 30 215
Evaluación de la relación entre la variable colesterol y edad Evaluación de la relación entre la variable colesterol y sexo
#Evaluación gráfica
summary(COL)
## sexo edad colesterol
## Length:200 Min. :20.0 Min. :158
## Class :character 1st Qu.:35.0 1st Qu.:208
## Mode :character Median :45.0 Median :230
## Mean :45.4 Mean :228
## 3rd Qu.:57.2 3rd Qu.:246
## Max. :70.0 Max. :288
boxplot(colesterol ~ sexo, data = COL,
ylab = "Colesterol",
xlab = "Sexo")
plot(COL$edad, COL$colesterol,
xlab = "Edad",
ylab = "Colesterol")
abline(lm(colesterol ~ edad, data = COL), col = "red", lwd = 2)
Descripción de las variables
describe(COL$colesterol)
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 200 228 28.7 230 228 31.6 158 288 130 -0.11 -0.62 2.03
describe(COL$edad)
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 200 45.4 14 45 45.6 17.8 20 70 50 -0.09 -1.1 0.99
table(COL$sexo)
##
## F M
## 103 97
REGRESION LINEAL SIMPLE. Evaluar cómo se modifica el colesterol en función de la edad
modelo1 <- lm(colesterol ~ edad , data = COL)
summary(modelo1)
##
## Call:
## lm(formula = colesterol ~ edad, data = COL)
##
## Residuals:
## Min 1Q Median 3Q Max
## -48.87 -13.00 0.02 14.20 41.81
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 154.9054 4.3464 35.6 <0.0000000000000002 ***
## edad 1.6041 0.0915 17.5 <0.0000000000000002 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 18 on 198 degrees of freedom
## Multiple R-squared: 0.608, Adjusted R-squared: 0.606
## F-statistic: 307 on 1 and 198 DF, p-value: <0.0000000000000002
tab_model(modelo1)
| colesterol | |||
|---|---|---|---|
| Predictors | Estimates | CI | p |
| (Intercept) | 154.91 | 146.33 – 163.48 | <0.001 |
| edad | 1.60 | 1.42 – 1.78 | <0.001 |
| Observations | 200 | ||
| R2 / R2 adjusted | 0.608 / 0.606 | ||
confint(modelo1)
## 2.5 % 97.5 %
## (Intercept) 146.33 163.48
## edad 1.42 1.78
En este modelo B0 es el intercept. Es el valor de Y en donde la recta de regresión cruza dicho eje y coincide con que X vale 0. Por lo tanto, B0=154.9, es el valor promedio de colesterol para una persona de 0 años. Esto no tiene interpretación clínica ni tampoco se puede inferir el valor de colesterol que corresponda a valores de X por fuera del rango de valores que se utilizaron para realizar la recta de regresión. (en este ejemplo, 30 a 70 años). Es decir, no puedo utilizar el cálculo de este modelo para predecir el colesterol de una persona de 80 ni de 20 años. B1= 1.60. El coeficiente B1 corresponde a cuánto se modifica en promedio el valor de Y por cada aumento de una unidad de la variable X. En nuestro caso, por cada año que aumenta la edad de la persona, el colesterol aumentará en promedio 1.98 mgdL. Este valor puede variar entre 1.42 mgdL y 1.78 mgdL en el 95% de los casos si el experimento se repitiera. Esta relación es estadísticamente significativa (la p del coeficiente es menor a 0.05). El R2 ajustado indica que la variabilidad de la edad explica el 61% de la variabilidad del colesterol y que el otro 39% de la misma se explica por factores que no fueron incluidos en el modelo. Teniendo en cuenta la fórmula de la regresión lineal, el valor promedio de colesterol de una persona de 50 años sería Valor de colesterol= 138.72 + 1.98 * 50 Valor de colesterol= 237.7 mgdl
QUE SON LOS RESIDUOS?
modelo1 <- lm(colesterol ~ edad, data = COL)
plot(COL$edad, COL$colesterol,
xlab = "Edad",
ylab = "Colesterol")
abline(lm(colesterol ~ edad, data = COL), col = "red", lwd = 2)
# Valores
i1 <- 43
i2 <- 50
x1 <- COL$edad[i1]
x2 <- COL$edad[i2]
# Observados
y_obs1 <- COL$colesterol[i1]
y_obs2 <- COL$colesterol[i2]
# Predichos (en la recta)
y_pred1 <- predict(modelo1)[i1]
y_pred2 <- predict(modelo1)[i2]
# X
# Crear la tabla
tabla_residuos <- data.frame(
paciente = c(i1, i2),
edad = c(x1, x2),
colesterol_observado = c(y_obs1, y_obs2),
colesterol_predicho = c(y_pred1, y_pred2)
)
# Calcular residuo
tabla_residuos$residuo <- tabla_residuos$colesterol_observado - tabla_residuos$colesterol_predicho
tabla_residuos
## paciente edad colesterol_observado colesterol_predicho residuo
## 43 43 28 222 200 21.9
## 50 50 62 240 254 -14.9
segments(x0 = x1, y0 = y_pred1,
x1 = x1, y1 = y_obs1,
col = "blue", lwd = 2)
segments(x0 = x2, y0 = y_pred2,
x1 = x2, y1 = y_obs2,
col = "blue", lwd = 2)
La recta de regresión es la línea que mejor representa la relación entre una variable independiente (por ejemplo, la edad) y una variable dependiente (por ejemplo, el colesterol). Su objetivo es resumir la tendencia promedio de los datos y permitir estimar el valor esperado de la variable de interés para cada valor de la variable explicativa. Esta recta se calcula mediante el método de los mínimos cuadrados, que consiste en elegir la línea que minimiza la suma de los cuadrados de las diferencias entre los valores observados y los valores predichos por el modelo. Es decir, busca que los errores sean lo más pequeños posibles en conjunto.
Los residuos son esas diferencias individuales: representan la distancia vertical entre el valor observado de cada paciente y el valor que predice la recta de regresión.
Evaluación de supuestos de la regresión lineal.
#Normalidad
#Linealidad
#Homocedasticidad
#Independencia
#Generacion de valores predichos
predichos <- fitted.values(modelo1)
#generación de residuos crudos y estandarizados
res <- residuals(modelo1)
#generación de residuos estandarizados:
standres <-rstandard(modelo1)
Los supuestos de la regresión lineal son normalidad, linealidad, homocedasticidad e independecia. Se miden sonbre los residuos
#Normalidad de los residuos
densityplot(modelo1$residuals)
hist(modelo1$residuals)
boxplot(modelo1$residuals)
qqnorm(standres)
qqline(standres, col = "red", lwd = 2)
shapiro.test(modelo1$residuals)
##
## Shapiro-Wilk normality test
##
## data: modelo1$residuals
## W = 1, p-value = 0.06
describe(standres)
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 200 0 1 0 0.02 1.17 -2.72 2.32 5.04 -0.1 -0.69 0.07
Histograma: se evalúa su forma en campana de Gauss. Si bien puede no ser perfecta, se evalúa también el n (mayor de 100) y los demás parámetros Descripcion: Verificar asimetría y kurtosis. Coeficientes entre -1 y +1 la distribución es normal. Cuando es mayor a 3 o menor a -3 es no normal. Para valores intermedios, evaluar las demás características. Comparar media con mediana, en distribuciones normales es similar. En distribucion normal, la media no es menor a 2 DS. Al aplicar la prueba Shapiro Wilks, un valor p>0.05 nos indica que la distribución es normal. Un valor menor p<0.05, nos indica que la distribución es no normal. Observacion del qqplot: La mayoría de los valores centrales deben apoyar en la línea del medio. Otra vez la coincidencia no es perfecta, pero se acercan. Los valores que se alejan son las colas del histograma.
#gráfico de linealidad y homocedasticidad
plot(y=COL$colesterol, x= COL$edad)
abline(modelo1)
plot(y=modelo1$residuals,x=modelo1$fitted.values)
abline(h=0)
bptest(modelo1)
##
## studentized Breusch-Pagan test
##
## data: modelo1
## BP = 0.02, df = 1, p-value = 0.9
#Independencia
dwtest(modelo1)
##
## Durbin-Watson test
##
## data: modelo1
## DW = 2, p-value = 0.7
## alternative hypothesis: true autocorrelation is greater than 0
Linealidad: En el gráfico de residuos, se evalua la distribución de los residuos en forma similar arriba y abajo de la recta del valor 0 a lo largo de todas las variables x, es decir, que la nube de puntos sea similar a ambos lados del 0 a lo largo de todo el eje x. Homocedasticidad: Este supuesto implica que la varianza de los errores debe ser constante en todos los niveles de las variables predictoras. Cuando se viola este supuesto, se produce heterocedasticidad, lo que significa que la dispersión de los errores varía en diferentes rangos de las variables predictoras. El supuesto de homocedasticidad se cumple si los residuos tienen la misma dispersión a lo largo de los diferentes valores predichos. Test de heterocedasticidad de Breusch–Pagan debe ser mayor a 0.05 El test de Breusch-Pagan evalúa heterocedasticidad:
H0: varianza constante (bien ) H1: varianza no constante (problema️) p > 0.05 → no evidencia de heterocedasticidad p < 0.05 → hay heterocedasticidad Independencia se evalua por el modelo y por el test de Dubin Watson
#modelo multivariado
modelo <- lm(colesterol ~ edad + sexo, data = COL)
summary(modelo)
##
## Call:
## lm(formula = colesterol ~ edad + sexo, data = COL)
##
## Residuals:
## Min 1Q Median 3Q Max
## -36.99 -9.06 0.79 9.25 33.59
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 144.9302 3.0970 46.8 <0.0000000000000002 ***
## edad 1.5469 0.0637 24.3 <0.0000000000000002 ***
## sexoM 25.9249 1.7766 14.6 <0.0000000000000002 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 12.5 on 197 degrees of freedom
## Multiple R-squared: 0.812, Adjusted R-squared: 0.81
## F-statistic: 425 on 2 and 197 DF, p-value: <0.0000000000000002
tab_model(modelo)
| colesterol | |||
|---|---|---|---|
| Predictors | Estimates | CI | p |
| (Intercept) | 144.93 | 138.82 – 151.04 | <0.001 |
| edad | 1.55 | 1.42 – 1.67 | <0.001 |
| sexo [M] | 25.92 | 22.42 – 29.43 | <0.001 |
| Observations | 200 | ||
| R2 / R2 adjusted | 0.812 / 0.810 | ||
confint(modelo)
## 2.5 % 97.5 %
## (Intercept) 138.82 151.04
## edad 1.42 1.67
## sexoM 22.42 29.43
Interpretación: Intercept 144.9: es el valor del colesterol cuando la edad es 0 y el sexo es femenino edad: por cada año que aumenta la edad, el colesterol aumenta en promedio 1.54 puntos (1.42 a 1.67) independientemente del sexo El sexo masculino tiene en promedio 25.9 mgdl (22.4-29.4) de colesterol más que el femenino independientemente de la edad
Evaluación de supuestos
#Normalidad
#Linealidad
#Homocedasticidad
#independencia
#Generacion de valores predichos
predichos <- fitted.values(modelo)
#generación de residuos crudos y estandarizados
res <- residuals(modelo)
#generación de residuos estandarizados Se estandarizan para poder ser comparables
standres <-rstandard(modelo)
#gráfico de linealidad
plot(y=COL$colesterol, x= COL$edad)
abline(modelo)
## Warning in abline(modelo): only using the first two of 3 regression
## coefficients
plot(y=modelo$residuals,x=modelo$fitted.values)
abline(h=0)
#evaluacion de normalidad
densityplot(modelo$residuals)
hist(modelo$residuals)
boxplot(modelo$residuals)
qqnorm(standres)
qqline(standres, col = "red", lwd = 2)
library(car)
## Cargando paquete requerido: carData
##
## Adjuntando el paquete: 'carData'
## The following object is masked from 'package:vcdExtra':
##
## Burt
##
## Adjuntando el paquete: 'car'
## The following object is masked from 'package:psych':
##
## logit
## The following objects are masked from 'package:rms':
##
## Predict, vif
## The following object is masked from 'package:dplyr':
##
## recode
## The following object is masked from 'package:purrr':
##
## some
avPlots(modelo)
shapiro.test(modelo$residuals)
##
## Shapiro-Wilk normality test
##
## data: modelo$residuals
## W = 1, p-value = 0.2
describe(standres)
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 200 0 1 0.06 0.02 1.06 -2.97 2.71 5.68 -0.22 -0.03 0.07
avPlots: Eje X: Residuo de la variable explicativa (ajustada por las otras). Eje Y Residuo del outcome (colesterol) (ajustado por las mismas variables). Relaccion entre x e y ajustando por la otra variable
#homocedasticidad
plot(y=modelo$residuals, x=modelo$fitted.values)
abline(h=0)
bptest(modelo$residuals ~ modelo$fitted.values, data=COL)
##
## studentized Breusch-Pagan test
##
## data: modelo$residuals ~ modelo$fitted.values
## BP = 2, df = 1, p-value = 0.1
#identificación de outliers
standres <-rstandard(modelo)
predichos <- modelo$fitted.values
plot(y=standres, x=predichos)
abline(h = c(-2, 2), col = "red", lwd = 2, lty = 2)
abline(h=0)
standres[standres > 2 | standres < -2]
## 14 23 82 134 144 145 169 187 199
## -2.93 2.71 2.29 -2.63 2.38 -2.97 -2.14 2.20 -2.06
Outlier: es una observación cuyo valor real de la variable dependiente (Y) se desvía considerablemente del valor que predice el modelo. Un outlier en regresión lineal es una observación que presenta un residuo (error) grande, es decir, la diferencia entre el valor observado y el valor ajustado por el modelo es inusualmente alta, comparado con las demás observaciones. Son un problema menor. Son observaciones que se comportan distinto. Tienen un residuo grande. Cuán grande? mayor a 3SD En nuestro ejemplo vamos a usar 2 DS para ver en el gráfico. Se identifica la observación en la base de datos y se caracteriza el outlier según todas las características. Evaluar si es un error de carga por ejemplo o si no cumple los criterios de inclusión.
#identificacion de valores influyentes
leverage <- as.data.frame(hatvalues(modelo))
cooksd <- cooks.distance(modelo)
cooksd[cooksd>(4/150)]#n es el tamaño muestral
## 14 23 134 144 145
## 0.0290 0.0605 0.0293 0.0437 0.0406
#dubin watson independeencia
dwtest(modelo)
##
## Durbin-Watson test
##
## data: modelo
## DW = 2, p-value = 0.9
## alternative hypothesis: true autocorrelation is greater than 0
Observaciones influyentes: son aquellas que dependiendo de que estén o no, modifican de manera importante el B1 correspondiente a la variable.(más del 10 o del 20%). Lo convierte en un modelo inestable. Es un problema grave. Las Observaciones influyentes modifican sustancialmente el ajuste del modelo (por ejemplo, si tienen alto leverage y alta distancia de Cook). Depende del residuo (outlier) pero principalmente del leverage. (la distancia a la cual se encuentra la observación de la media de la variable X). Distancia a la media del eje horizontal. Distancia de cook. considera residuo y leverage. A más distancia, más influencia. Punto de corte 4/n. Para N grande es muy sensible Si se modifica el B1 de la variable en más del 10 al 20%, es una observación influyente. Calculo distancia de cook para todas las observaciones y luego tomo las potencialmente influyentes y las pruebo con el modelo. Distancia de cook: punto de corte es mayor a 4/n siendo n el número de observaciones. Pero si son muchas (n grande) , se utiliza como punto de corte mayor a 0.5 o mayor a 1.