Regresión lineal simple y correlación
1. Covarianza y correlación.
La covarianza es una medida que indica la dirección de la relación lineal entre dos variables y cómo sus valores cambian juntos. Si los valores de ambas variables tienden a aumentar o disminuir al mismo tiempo, la covarianza será positiva. Si un valor aumenta mientras el otro disminuye, la covarianza será negativa. Si no hay una relación lineal aparente entre las variables, la covarianza será cercana a cero.
La correlación es una medida estandarizada de la relación lineal entre dos variables. Mide la intensidad y la dirección de la relación entre las variables, independientemente de su escala. El coeficiente de correlación varía entre -1 y 1. Un coeficiente de correlación de 1 indica una correlación positiva perfecta, -1 indica una correlación negativa perfecta y 0 indica una falta de correlación.
1.1 Coeficientes de correlación
Coeficiente de Pearson: Mide la correlación lineal entre dos variables.
Coeficiente de de Kendall: Mide la concordancia lineal entre dos variables ordenadas.
Coeficiente de Spearman: Mide la correlación no paramétrica entre dos variables.
Actividad
Generar datos de ejemplo x y y que tienen una relación lineal con un coeficiente de correlación conocido. Luego, calcular la matriz de correlación de Pearson
## Loading required package: xts
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
##
## Attaching package: 'PerformanceAnalytics'
## The following object is masked from 'package:graphics':
##
## legend
# Generar datos de ejemplo
set.seed(123)
x <- rnorm(100)
y <- 2 * x + rnorm(100)
# Crear un dataframe con los datos
datos <- data.frame(x, y)
# Calcular la matriz de correlación de Pearson
cor_matrix <- cor(datos, method = "pearson")
# Imprimir la matriz de correlación
print(cor_matrix)## x y
## x 1.0000000 0.8786993
## y 0.8786993 1.0000000
# Gráfico de la matriz de correlación
chart.Correlation(datos, histogram = TRUE, method = "pearson")## Warning in par(usr): argument 1 does not name a graphical parameter
2. Regresión
Es una técnica estadística utilizada para modelar y analizar la relación entre una variable dependiente y una o más variables independientes. El objetivo principal de la regresión es comprender cómo los cambios en las variables independientes se asocian con cambios en la variable dependiente, lo que permite predecir o estimar valores de la variable dependiente en función de las variables independientes.
Existen distintos tipos de regresión, como por ejemplo:
2.1 Regresión Lineal Simple
Se utiliza cuando hay una sola variable independiente. El modelo trata de ajustar una línea recta a los datos para minimizar la suma de los errores cuadrados entre los valores observados y los valores predichos por la línea.
Actividad 1
Supongamos que trabajas en una empresa que vende productos electrónicos y estás interesado en analizar si el gasto en publicidad en televisión está relacionado con las ventas de tus productos. Tienes datos reales sobre el gasto en publicidad en televisión y las ventas mensuales de varios productos. Quieres determinar si existe una relación lineal entre el gasto en publicidad y las ventas de tus productos.
library("ggplot2")
# Crear un dataframe con datos reales ficticios
set.seed(123)
productos <- c("Producto A", "Producto B", "Producto C", "Producto D", "Producto E")
gasto_tv <- c(500, 700, 450, 800, 600)
ventas <- c(1200, 1500, 1000, 1600, 1300)
datos <- data.frame(producto = productos, gasto_tv = gasto_tv, ventas = ventas)
# Crear modelo de regresión lineal
regresion <- lm(ventas ~ gasto_tv, data = datos)
# Crear gráfico
g11 <- ggplot(datos, aes(x = gasto_tv, y = ventas, label = producto)) +
geom_point(color = "blue") +
geom_smooth(method = "lm", color = "red", fill = "lightgray") +
labs(title = "Relación entre Gasto en Publicidad en TV y Ventas",
x = "Gasto en Publicidad en TV (US$)",
y = "Ventas") +
theme_minimal()
# Mostrar el gráfico
g11## `geom_smooth()` using formula = 'y ~ x'
## Warning: The following aesthetics were dropped during statistical transformation: label
## ℹ This can happen when ggplot fails to infer the correct grouping structure in
## the data.
## ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
## variable into a factor?
##
## Call:
## lm(formula = ventas ~ gasto_tv, data = datos)
##
## Residuals:
## 1 2 3 4 5
## 59.756 32.927 -58.537 -30.488 -3.659
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 323.1707 119.3815 2.707 0.07335 .
## gasto_tv 1.6341 0.1915 8.532 0.00338 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 54.85 on 3 degrees of freedom
## Multiple R-squared: 0.9604, Adjusted R-squared: 0.9472
## F-statistic: 72.79 on 1 and 3 DF, p-value: 0.003383
2.2 Regresión Lineal Múltiple
Se utiliza cuando hay más de una variable independiente. El objetivo es ajustar un plano (o hiperplano en dimensiones superiores) a los datos para explicar la variabilidad de la variable dependiente.
Actividad 2
Supongamos que trabajas en una empresa de medios y estás interesado en analizar cómo el gasto en publicidad en Facebook y en periódico se relaciona con las ventas de productos. Tienes datos reales sobre el gasto en publicidad en Facebook y periódico, así como las ventas generadas. Quieres determinar si estas dos variables de gasto publicitario están relacionadas con las ventas.
library("ggplot2")
# Crear un dataframe con datos reales ficticios
productos <- c("Producto A", "Producto B", "Producto C", "Producto D", "Producto E")
facebook_gasto <- c(500, 700, 450, 800, 600)
newspaper_gasto <- c(300, 400, 250, 350, 400)
ventas <- c(1200, 1500, 1000, 1600, 1300)
datos <- data.frame(producto = productos, facebook = facebook_gasto, newspaper = newspaper_gasto, ventas = ventas)
# Crear modelo de regresión lineal múltiple
regresion <- lm(ventas ~ facebook + newspaper, data = datos)
summary(regresion)##
## Call:
## lm(formula = ventas ~ facebook + newspaper, data = datos)
##
## Residuals:
## 1 2 3 4 5
## 62.521 17.647 -39.328 -7.059 -33.782
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 251.4286 158.5816 1.585 0.2537
## facebook 1.4857 0.2820 5.269 0.0342 *
## newspaper 0.4773 0.6193 0.771 0.5215
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 58.98 on 2 degrees of freedom
## Multiple R-squared: 0.9695, Adjusted R-squared: 0.939
## F-statistic: 31.77 on 2 and 2 DF, p-value: 0.03052
2.3 Como evaluar
Pendiente (ANOVA F): \(H_0\) – La pendiente de la recta es 0
Intercepto (ANOVA F): \(H_0\) – La pendiente de la recta es 0
Bandas de confianza: Bandas de confianza para predecir el valor medio de Y en cualquier X
Coeficiente de determinación R2: Cuadrado del coeficiente de Pearson.
Residuos: Revisando la distribución de los residuos.
Actividad 3
Evaluar la regresión lineal de la actividad 1
library("ggplot2")
# Crear un dataframe con datos reales ficticios
set.seed(123)
productos <- c("Producto A", "Producto B", "Producto C", "Producto D", "Producto E")
gasto_tv <- c(500, 700, 450, 800, 600)
ventas <- c(1200, 1500, 1000, 1600, 1300)
datos <- data.frame(producto = productos, gasto_tv = gasto_tv, ventas = ventas)
# Crear modelo de regresión lineal
regresion <- lm(ventas ~ gasto_tv, data = datos)
# Crear gráfico
g11 <- ggplot(datos, aes(x = gasto_tv, y = ventas, label = producto)) +
geom_point(color = "blue") +
geom_smooth(method = "lm", color = "red", fill = "lightgray") +
labs(title = "Relación entre Gasto en Publicidad en TV y Ventas",
x = "Gasto en Publicidad en TV (US$)",
y = "Ventas") +
theme_minimal()
# Mostrar el gráfico
g11## `geom_smooth()` using formula = 'y ~ x'
## Warning: The following aesthetics were dropped during statistical transformation: label
## ℹ This can happen when ggplot fails to infer the correct grouping structure in
## the data.
## ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
## variable into a factor?
##
## Call:
## lm(formula = ventas ~ gasto_tv, data = datos)
##
## Residuals:
## 1 2 3 4 5
## 59.756 32.927 -58.537 -30.488 -3.659
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 323.1707 119.3815 2.707 0.07335 .
## gasto_tv 1.6341 0.1915 8.532 0.00338 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 54.85 on 3 degrees of freedom
## Multiple R-squared: 0.9604, Adjusted R-squared: 0.9472
## F-statistic: 72.79 on 1 and 3 DF, p-value: 0.003383
## 2.5 % 97.5 %
## (Intercept) -56.754360 703.095823
## gasto_tv 1.024606 2.243687