You can also embed plots, for example:
## sexo edad colesterol
## 1 F 49 216
## 2 F 49 195
## 3 F 44 234
## 4 M 35 230
## 5 F 43 190
## 6 M 30 205
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. :180
## Class :character 1st Qu.:35.0 1st Qu.:200
## Mode :character Median :45.0 Median :229
## Mean :45.4 Mean :228
## 3rd Qu.:57.2 3rd Qu.:253
## Max. :70.0 Max. :300
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)
modelo <- lm(colesterol ~ edad + sexo, data = COL)
summary(modelo)
##
## Call:
## lm(formula = colesterol ~ edad + sexo, data = COL)
##
## Residuals:
## Min 1Q Median 3Q Max
## -46.32 -11.07 1.91 11.87 43.50
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 128.2387 4.1686 30.8 <0.0000000000000002 ***
## edad 1.9144 0.0858 22.3 <0.0000000000000002 ***
## sexoM 27.2534 2.3913 11.4 <0.0000000000000002 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 16.9 on 197 degrees of freedom
## Multiple R-squared: 0.771, Adjusted R-squared: 0.768
## F-statistic: 331 on 2 and 197 DF, p-value: <0.0000000000000002
tab_model(modelo)
| colesterol | |||
|---|---|---|---|
| Predictors | Estimates | CI | p |
| (Intercept) | 128.24 | 120.02 – 136.46 | <0.001 |
| edad | 1.91 | 1.75 – 2.08 | <0.001 |
| sexo [M] | 27.25 | 22.54 – 31.97 | <0.001 |
| Observations | 200 | ||
| R2 / R2 adjusted | 0.771 / 0.768 | ||
Interpretación: Intercept 128.2: 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.91 puntos (1.75 a 2.08) independientemente del sexo El sexo masculino tiene en promedio 27 mgdl (22.25-31.97) de colesterol más que el femenino independientemente de la edad
Evaluación de supuestos
#Normalidad
#Linealidad
#Homocedasticidad
#Generacion de valores predichos
predichos <- fitted.values(modelo)
#generación de residuos crudos y estandarizados
res <- residuals(modelo)
#generación de residuos estandarizados:
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)
shapiro.test(modelo$residuals)
##
## Shapiro-Wilk normality test
##
## data: modelo$residuals
## W = 1, p-value = 0.1
describe(standres)
## vars n mean sd median trimmed mad min max range skew kurtosis se
## X1 1 200 0 1 0.11 0.02 0.98 -2.76 2.61 5.37 -0.19 -0.12 0.07
#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 = 1, df = 1, p-value = 0.3
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
#identificación de outliers
standres <-rstandard(modelo)
predichos <- modelo$fitted.values
plot(y=standres, x=predichos)
abline(h = c(-3, 3), col = "red", lwd = 2, lty = 2)
abline(h=0)
standres[standres > 3 | standres < -3]
## named numeric(0)
#identificacion de valores influyentes
leverage <- as.data.frame(hatvalues(modelo))
cooksd <- cooks.distance(modelo)
cooksd[cooksd>(4/150)]#n es el tamaño muestral
## 23 134 144 145
## 0.0470 0.0323 0.0527 0.0296
#dubin watson independeencia
dwtest(modelo)
##
## Durbin-Watson test
##
## data: modelo
## DW = 2, p-value = 0.8
## alternative hypothesis: true autocorrelation is greater than 0