Construir un modelo de regresón lineal simple con datos de dos variables y predecir un valor con el modelo.
library(readr)
library(dplyr)
library(knitr)
library(ggplot2)
datos <- read.csv("https://raw.githubusercontent.com/rpizarrog/Analisis-Inteligente-de-datos/main/datos/datos%20para%20regresion%20diez%20datos.csv")
Los datos
kable(datos, caption = "Los datos")
| x | y |
|---|---|
| 10 | 15 |
| 11 | 16 |
| 13 | 18 |
| 15 | 19 |
| 13 | 17 |
| 12 | 16 |
| 10 | 16 |
| 11 | 17 |
| 15 | 20 |
| 10 | 16 |
Media de x y media de y
summary(datos)
## x y
## Min. :10.00 Min. :15.00
## 1st Qu.:10.25 1st Qu.:16.00
## Median :11.50 Median :16.50
## Mean :12.00 Mean :17.00
## 3rd Qu.:13.00 3rd Qu.:17.75
## Max. :15.00 Max. :20.00
round(cor(datos),2)
## x y
## x 1.00 0.91
## y 0.91 1.00
ggplot(data = datos) +
geom_point(aes(x = x, y = y), col='blue')
\[ Y = a + b \cdot x \]
Construye una tabla para determinar a y b, se manda llamar función previamente codificada para este fin.
source("https://raw.githubusercontent.com/rpizarrog/Analisis-Inteligente-de-datos/main/funciones/misfunciones.R")
Llamar la función que genera tabla para totales y determinar a y b manualmente
tabla <- f_tabla.rls(datos)
kable(tabla, caption = "Tabla para coeficiene a y b en Correlación Lineal Simple")
| x | y | media.x | media.y | x.menos.media.x | y.menos.media.y | x.menos.media.x.por.y.menos.media.y | x.menos.media.x.cuad |
|---|---|---|---|---|---|---|---|
| 10 | 15 | 12 | 17 | -2 | -2 | 4 | 4 |
| 11 | 16 | 12 | 17 | -1 | -1 | 1 | 1 |
| 13 | 18 | 12 | 17 | 1 | 1 | 1 | 1 |
| 15 | 19 | 12 | 17 | 3 | 2 | 6 | 9 |
| 13 | 17 | 12 | 17 | 1 | 0 | 0 | 1 |
| 12 | 16 | 12 | 17 | 0 | -1 | 0 | 0 |
| 10 | 16 | 12 | 17 | -2 | -1 | 2 | 4 |
| 11 | 17 | 12 | 17 | -1 | 0 | 0 | 1 |
| 15 | 20 | 12 | 17 | 3 | 3 | 9 | 9 |
| 10 | 16 | 12 | 17 | -2 | -1 | 2 | 4 |
| 120 | 170 | 120 | 170 | 0 | 0 | 25 | 34 |
Manda llamar función para obtener coeficientes a partir de la tabla
coeficientes <- f.coef.a.b(tabla)
coeficientes
## [1] 8.1764706 0.7352941
modelo <- lm(formula = y ~ x, data = datos)
modelo
##
## Call:
## lm(formula = y ~ x, data = datos)
##
## Coefficients:
## (Intercept) x
## 8.1765 0.7353
ggplot(data = datos) +
geom_point(aes(x = x, y = y), col='blue') +
geom_line(aes(x = x, y = modelo$fitted.values), col='red')
Significa que para un nuevo valor de x el valor de la predicción será \(Y = a + b \cdot x\).
x <- 15
a <- modelo$coefficients[1]
b <- modelo$coefficients[2]
Y_pred1 <- a + b * x
paste("La predicción para un valor de x = ", x, " es: ", round(Y_pred1, 4))
## [1] "La predicción para un valor de x = 15 es: 19.2059"
Con varios valores
x <- c(15, 16, 17)
Y.pred2 <- predict(object = modelo, newdata = data.frame(x = x))
paste("Las predicciones para 15, 16 y 17 respectivamente son: ")
## [1] "Las predicciones para 15, 16 y 17 respectivamente son: "
paste(round(Y.pred2, 4), sep = ", ")
## [1] "19.2059" "19.9412" "20.6765"
Pendiente …