x <- cigarrillos$age
y <- cigarrillos$income
df2 = data.frame(x, y)
vars <- length(cigarrillos)-1
vars
n <- length(cigarrillos$age) / vars
n
dfree <- n - vars - 1
dfree
Sxy <- sum(x*y) - n * mean(x) * mean(y)
Sxx <- sum(x^2) - n* (mean(x))^2
Syy <- sum(y^2) - n* (mean(y))^2
cat( " Sxy = ", Sxy,"\n Sxx = ", Sxx, "\n Syy =",Syy)
r <- Sxy / sqrt(Sxx * Syy)
cat( "Coeficiente r = ", r)
t.value <- (r * sqrt(n-2)) / sqrt(1-r^2)
Valor-p para r
p.value <- pt(q = t.value, df = n-2, lower.tail = FALSE)
cat("Estadístico T=", round(t.value,3),
"\nValor P = ", round(p.value, 5))
Regresión lineal
Parámetros de regresión
b1 <- Sxy / Sxx
b0 <- mean(y) - b1 * mean(x)
cat(" b0 = ", b0, "\n b1 = ", b1)
ANOVA Y SUMA DE CUADRADOS
SCM <- b1*Sxy
SCE <- Syy - b1*Sxy
CMM <- SCM / vars
CME <- SCE / (n-2)
fstat <- CMM / CME
fpvalue <- pf(fstat , 1, n-2, lower.tail = FALSE)
cat(
"Fuente de |", "\t Grados de ", "\t Sumas de", "\t Cuadrados",
"\nVariación |", "\t Libertad ", "\t Cuadrados", "\t Medios",
"\nModelo | \t", vars, "\t \t" , SCM,"\t " , CMM,
"\nResidual | \t",dfree, "\t \t" , SCE,"\t " ,CME,
"\nTotal | \t", (vars + dfree), "\t \t", Syy)
cat(" F = ", fstat, ", Valor P = ", fpvalue)
b1.err <- sqrt(CME / Sxx)
b0.err <- sqrt(CME * sum(x^2) / (n*Sxx))
b0.t <- (b0 - 0) / b0.err
b1.t <- (b1 - 0) / b1.err
b0.p <- 2 * pt(b0.t, df = n-2, lower.tail = FALSE)
b1.p <- 2 * pt(b1.t, df = n-2, lower.tail = FALSE)
cat(" T_b0= ",b0.t, "Valor P = ", b0.p,
"\n T_b1= ", b1.t, "Valor P = ", b1.p)
r2 <- (Syy- SCE)/Syy
Análisis de residuales
fitted <- x * b1 + b0
resd <- y - fitted
min.res <- round(min(resd), 3)
max.res <- round(max(resd), 3)
q1.q3 <- quantile(resd, probs = c(.25, .75))
med <- round(median(resd), 3)
coeffs <- data.frame(
cbind(c(b0, b1), c(b0.err, b1.err), c(b0.t, b1.t),c(b0.p, b1.p))
)
colnames(coeffs) <- c('Estimate', 'Std. Error', 't value', 'Pr(>|t|)')
rownames(coeffs) <- c('Intercept', 'x1')
rsquare <- paste('Multiple R-squared: ', round(r2, 4))
f.stat <- paste(
'Estadistico F: ', round(fstat, 2), ' con 1 y ', n - 2,
' G.L., Valor P: ', format(fpvalue, digits = 3, scientific = TRUE)
)
residual <- data.frame(
cbind(min.res, round(q1.q3[1], 3), med, round(q1.q3[2], 3), max.res)
)
colnames(residual) <- c('Min', 'Q1', 'Median', 'Q3', 'Max')
resdi <- paste('Error residual estándar: ', round(CME, 2),
' con ', n-2, ' grados de libertad')
### Lista con los resúmenes
regresion <- list('Residuales'=residual,
'Coeficientes'=coeffs,
'ErrorResidual'= resdi,
'Determinacion'=rsquare,
'EstadisticoF'=f.stat)
regresion
regresion$Residuales
Predecir valores y bandas de confianza y predicción
predicciones_conf <- predict(modelo, interval = "confidence", level = 0.95)
predicciones_pred <- predict(modelo, interval = "prediction", level = 0.95)
Agregar las predicciones al dataframe
df$prediccion <- predicciones_conf[, 1]
df$lim_inf_conf <- predicciones_conf[, 2]
df$lim_sup_conf <- predicciones_conf[, 3]
df$lim_inf_pred <- predicciones_pred[, 2]
df$lim_sup_pred <- predicciones_pred[, 3]
# Crear el gráfico de dispersión y la línea de regresión con bandas de confianza y predicción
grafico <- ggplot(df, aes(x = x, y = y)) +
geom_vline(xintercept = 0, linetype = "solid", size = 1.1, color = "grey70") + # línea del eje x
geom_hline(yintercept = 0, linetype = "solid", size = 1.1, color = "grey70") + # línea del eje y
geom_point(color = "blue") + # puntos de dispersión
geom_ribbon(aes(ymin = lim_inf_conf, ymax = lim_sup_conf), fill = "steelblue", alpha = 0.4) + # banda de confianza
geom_ribbon(aes(ymin = lim_inf_pred, ymax = lim_sup_pred), fill = "lightgreen", alpha = 0.2) + # banda de predicción
geom_line(aes(y = prediccion), color = "green4", size=1.1, linetype = "solid", alpha = 0.7) + # línea de regresión
labs(title = "Regresión lineal con bandas de confianza y de predicciones",
subtitle = "Velocidad vs Distancia de frenado",# con Bandas de Confianza ",
x = "Variable Independiente",
y = "Variable Dependiente")+
xlab("Speed") + # etiqueta eje x
ylab("Distance") + # etiqueta eje y
theme_bw()
print(grafico) # Mostrar el gráfico
predicciones_conf
predicciones_pred
head(df)