En el presente informe se analiza la relación entre el precio y la cantidad demandada del energizante Vive100, consumido por estudiantes universitarios en Colombia.
El objetivo principal es estimar un modelo de regresión lineal simple que permita entender cómo varÃa el consumo de este producto frente a cambios en el precio.
El análisis se basa en las respuestas de 52 encuestas realizadas a estudiantes mediante un formulario en lÃnea. .
De esta manera, el informe busca comprobar la validez de la ley de la demanda y aportar una interpretación cuantitativa de la sensibilidad del consumo de Vive100 frente a variaciones en su precio.
El estudio se basa en un experimento hipotético donde estudiantes universitarios, al tener que trasnochar para entregar un proyecto, deciden cuántas botellas de Vive100 comprar en función del precio. Las condiciones establecen que cada botella (380 ml) debe consumirse de inmediato, no puede guardarse ni compartirse y no genera efectos negativos en la salud. Las respuestas de la encuesta conforman la base de datos empleada para estimar el modelo de regresión lineal, la correlación y la elasticidad-precio de la demanda.
Para recolectar la información se diseñó una encuesta en
Google Forms dirigida a estudiantes universitarios en
Colombia.
El cuestionario presentó el escenario descrito en la sección anterior y
preguntó cuántas botellas de Vive100 comprarÃan los encuestados
dependiendo del precio. El formulario se puede visualizar en el
siguiente link https://docs.google.com/forms/d/e/1FAIpQLSfzKBJmiFBEh3mNu_6MkJpo9BDHr8A1EWgSOUH6fbdQb6phUw/viewform?usp=sharing&ouid=107461820380601533419
A continuación, se procede a cargar la base de datos exportada de manera predeterminada por Google Forms https://docs.google.com/spreadsheets/d/1GPfz4a2lZ7bkZxr8kZBvcfP4bvRPPjqbdkJx0jJ1-UY/edit?usp=sharing
El objetivo principal del estudio es analizar la relación entre el
precio y la cantidad demandada de
Vive100 por parte de los estudiantes universitarios.
Para ello, se plantea un modelo de regresión lineal
simple de la forma: \(Cantidades=
\beta_0+\beta_1 Precio+\beta_2 sexoMasculino+\beta_3 Edad+\beta_4
Estrato\). El siguiente código presenta los estimadores por MCO
en R.
vive100=read.csv2("https://docs.google.com/spreadsheets/d/e/2PACX-1vQur2NYb71Xew5IsklykwMG-l7HrFYLS0srZjYMMrYmmq_WsKJxsYkuBFXTYN9RrKrnGG8uCS_rrviS/pub?output=csv",sep=",")
colnames(vive100)=c("fecha","edad","sexo","estrato","1000","1500","2000","2500","3000","3500","4000","4500","5000")
library(tidyr)
## Warning: package 'tidyr' was built under R version 4.0.5
long_vive100<-gather(vive100,key="Precio",value="Cantidades","1000","1500","2000","2500","3000","3500","4000","4500","5000")
class(long_vive100$Precio)
## [1] "character"
class(long_vive100$Cantidades)
## [1] "integer"
### convertir a numérica las variables categóricas
attach(long_vive100)
long_vive100$Precio=as.numeric(long_vive100$Precio)
long_vive100$Cantidades=as.numeric(long_vive100$Cantidades)
### Prueba
class(long_vive100$Precio)
## [1] "numeric"
### Estimar la regresión
reg1=lm(Cantidades~Precio+sexo+edad+estrato, data=long_vive100)
reg1
##
## Call:
## lm(formula = Cantidades ~ Precio + sexo + edad + estrato, data = long_vive100)
##
## Coefficients:
## (Intercept) Precio sexoMasculino edad estrato
## 10.184809 -0.001813 1.103721 -0.170540 0.724135
summary(reg1)
##
## Call:
## lm(formula = Cantidades ~ Precio + sexo + edad + estrato, data = long_vive100)
##
## Residuals:
## Min 1Q Median 3Q Max
## -7.244 -1.413 0.064 1.428 11.039
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 10.184809 1.322136 7.703 8.13e-14 ***
## Precio -0.001813 0.000094 -19.285 < 2e-16 ***
## sexoMasculino 1.103721 0.256864 4.297 2.11e-05 ***
## edad -0.170540 0.051284 -3.325 0.000953 ***
## estrato 0.724135 0.126028 5.746 1.66e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.625 on 463 degrees of freedom
## (9 observations deleted due to missingness)
## Multiple R-squared: 0.4817, Adjusted R-squared: 0.4772
## F-statistic: 107.6 on 4 and 463 DF, p-value: < 2.2e-16
###
cor(long_vive100$Precio,long_vive100$Cantidades)
## [1] -0.647459
###
# Instalar y cargar paquetes
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(corrplot)
## corrplot 0.95 loaded
library(dplyr)
cor_mat_long <- long_vive100 %>%
select(where(is.numeric)) %>%
cor(use = "pairwise.complete.obs", method = "pearson")
# Heatmap de correlaciones
corrplot(
cor_mat_long,
method = "color", # colores en lugar de números
type = "lower", # solo triángulo inferior
addCoef.col = "black", # mostrar valores numéricos en negro
tl.col = "black", # color de etiquetas
tl.srt = 45, # rotación de etiquetas
diag = FALSE # no mostrar la diagonal
)
###Elasticidad
elasticidad=-1.846e-03*(mean(long_vive100$Cantidades)/mean(long_vive100$Precio))
elasticidad
## [1] -2.400703e-06
plot(long_vive100$Precio, long_vive100$Cantidades,
main = "Dispersión Precio vs Cantidad",
xlab = "Precio", ylab = "Cantidad demandada",
pch = 19, col = "darkblue")
abline(lm(Cantidades ~ Precio, data = long_vive100),
col = "red", lwd = 2)
Intercepto (10.18, p < 0.001) Cuando el precio es 0, la persona es mujer, edad = 0 y estrato = 0, la cantidad base estimada de consumo de Vive100 serÃa de 10.18 unidades.
Precio (-0.001813, p < 0.001) Por cada 1000 COP que aumenta el precio, las personas compran en promedio 1.813 unidades menos de Vive100, manteniendo constantes las demás variables.
Sexo Masculino (1.10, p < 0.001) Los hombres compran en promedio 1.10 unidades más de Vive100 que las mujeres.
Edad (-0.171, p < 0.001) Cada año adicional de edad reduce la cantidad comprada en 0.171 unidades, lo que indica que Vive100 es más consumida por personas jóvenes.
Estrato (0.724, p < 0.001) Cada nivel adicional de estrato socioeconómico incrementa la compra en 0.724 unidades, lo que sugiere que los consumidores de estratos más altos tienden a comprar más Vive100.
La correlación de -0.65 entre precio y cantidad de Vive100 muestra una relación negativa y moderada: a mayor precio, menor consumo. Esto confirma la ley de la demanda, evidenciando que los estudiantes ajustan su compra de la bebida según el precio.
La elasticidad-precio de la demanda de Vive100 es de -1.39, lo que indica que la bebida se comporta como un bien normal y con demanda elástica. En este caso, un aumento del 1% en el precio provoca una reducción aproximada del 1.39% en la cantidad demandada, lo que refleja que los estudiantes son sensibles a las variaciones en el costo del producto.
Con el fin de analizar cómo varÃa la demanda en función del precio y si existen diferencias según el sexo de los consumidores, se plantea un modelo de regresión lineal múltiple con interacción entre las variables Precio y sexo, controlando por edad y estrato socioeconómico. El modelo estimado es:
reg_inter <- lm(Cantidades ~ Precio * sexo + edad + estrato, data = long_vive100)
summary(reg_inter)
##
## Call:
## lm(formula = Cantidades ~ Precio * sexo + edad + estrato, data = long_vive100)
##
## Residuals:
## Min 1Q Median 3Q Max
## -7.673 -1.386 0.241 1.431 10.516
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 8.9313477 1.3524866 6.604 1.10e-10 ***
## Precio -0.0013950 0.0001497 -9.319 < 2e-16 ***
## sexoMasculino 3.1405963 0.6261766 5.016 7.56e-07 ***
## edad -0.1705400 0.0506501 -3.367 0.000823 ***
## estrato 0.7241347 0.1244710 5.818 1.12e-08 ***
## Precio:sexoMasculino -0.0006790 0.0001908 -3.558 0.000412 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.593 on 462 degrees of freedom
## (9 observations deleted due to missingness)
## Multiple R-squared: 0.4955, Adjusted R-squared: 0.4901
## F-statistic: 90.76 on 5 and 462 DF, p-value: < 2.2e-16
El coeficiente de la interacción Precio:sexoMasculino = -0.000679 es negativo y significativo. Esto significa que los hombres son más sensibles a los cambios en el precio que las mujeres, ya que la pendiente de la demanda respecto al precio es más negativa en su caso.
Al aplicar pruebas de hipótesis con un nivel de significancia del 5% (α = 0.05), se observa que todos los coeficientes del modelo son estadÃsticamente significativos, ya que sus valores p son menores a 0.05:
Precio (β = -0.0013950, p < 2e-16): confirma la ley de la demanda, ya que un aumento en el precio reduce de forma significativa el consumo de Vive100 entre los estudiantes.
Sexo masculino (β = 3.1406, p = 7.56e-07): los hombres consumen, en promedio, 3 unidades más que las mujeres, lo que refleja una mayor preferencia masculina por la bebida energética.
Edad (β = -0.1705, p = 0.000823): por cada año adicional de edad, el consumo disminuye en 0.17 unidades, mostrando que Vive100 es principalmente un producto de jóvenes universitarios.
Estrato (β = 0.7241, p = 1.12e-08): los estudiantes de estratos más altos compran mayores cantidades, lo cual puede estar relacionado con mayor capacidad de gasto.
Interacción Precio × Sexo masculino (β = -0.0006790, p = 0.000412): los hombres son más sensibles al precio que las mujeres, es decir, su consumo cae de manera más marcada cuando sube el precio.
En conclusión, los resultados permiten rechazar la hipótesis nula H0:β=0 para todos los coeficientes, y se confirma que cada predictor incluido en el modelo aporta información relevante para explicar la variación en la demanda.
Se calculan los intervalos de confianza para verificar la precisión de los estimadores. Esto permite identificar si los coeficientes son significativamente distintos de cero con un nivel de confianza del 90%.
confint(reg_inter, level = 0.90)
## 5 % 95 %
## (Intercept) 6.7022354338 11.1604599909
## Precio -0.0016417259 -0.0011482741
## sexoMasculino 2.1085580381 4.1726345309
## edad -0.2540192948 -0.0870606406
## estrato 0.5189867388 0.9292826010
## Precio:sexoMasculino -0.0009934734 -0.0003644432
Los intervalos muestran el rango dentro del cual se espera que se encuentre el valor real de cada coeficiente con un 90% de confianza. Como ninguno de estos intervalos incluye el valor cero, confirmamos que todos los efectos estimados son estadÃsticamente significativos:
Precio: [-0.00164 ; -0.00115] no incluye 0, efecto significativo.
SexoMasculino: [2.11 ; 4.17] no incluye 0, efecto significativo.
Edad: [-0.254 ; -0.087] no incluye 0, efecto significativo.
Estrato: [0.52 ; 0.93] no incluye 0, efecto significativo.
Interacción Precio:SexoMasculino: [-0.00099 ; -0.00036] no incluye 0, efecto significativo.
glance_reg_inter <- broom::glance(reg_inter)
glance_reg_inter[c("r.squared","adj.r.squared","statistic","p.value","df")]
## # A tibble: 1 × 5
## r.squared adj.r.squared statistic p.value df
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 0.496 0.490 90.8 2.13e-66 5
El estadÃstico F = 90.76 con un valor-p < 0.001 indica que, en conjunto, las variables explicativas del modelo (precio, sexo, edad, estrato e interacción) aportan información significativa para explicar la cantidad demandada. Es decir, se rechaza la hipótesis nula de que todos los coeficientes son iguales a cero y se concluye que el modelo tiene un poder explicativo relevante.
El valor de R² = 0.4955 indica que el modelo explica el 49.6% de la variación en la cantidad demandada de Vive100. Es decir, casi la mitad de las diferencias observadas en el consumo entre los individuos pueden atribuirse a las variables incluidas en el modelo (precio, sexo, edad, estrato e interacción precio×sexo).
read.csv2("https://docs.google.com/spreadsheets/d/e/2PACX-1vQur2NYb71Xew5IsklykwMG-l7HrFYLS0srZjYMMrYmmq_WsKJxsYkuBFXTYN9RrKrnGG8uCS_rrviS/pub?output=csv",sep=",")
vive100=read.csv2("https://docs.google.com/spreadsheets/d/e/2PACX-1vQur2NYb71Xew5IsklykwMG-l7HrFYLS0srZjYMMrYmmq_WsKJxsYkuBFXTYN9RrKrnGG8uCS_rrviS/pub?output=csv",sep=",")
colnames(vive100)=c("fecha","edad","sexo","estrato","1000","1500","2000","2500","3000","3500","4000","4500","5000")
install.packages("tidyr")
library(tidyr)
long_vive100<-gather(vive100,key="Precio",value="Cantidades","1000","1500","2000","2500","3000","3500","4000","4500","5000")
class(long_vive100$Precio)
class(long_vive100$Cantidades)
### convertir a numérica las variables categóricas
attach(long_vive100)
long_vive100$Precio=as.numeric(long_vive100$Precio)
long_vive100$Cantidades=as.numeric(long_vive100$Cantidades)
### Prueba
class(long_vive100$Precio)
### Estimar la regresión
reg1=lm(Cantidades~Precio+sexo+edad+estrato, data=long_vive100)
reg1
summary(reg1)
###
cor(long_vive100$Precio,long_vive100$Cantidades)
###
# Instalar y cargar paquetes
library(dplyr)
install.packages("corrplot")
library(corrplot)
library(dplyr)
cor_mat_long <- long_vive100 %>%
select(where(is.numeric)) %>%
cor(use = "pairwise.complete.obs", method = "pearson")
# Heatmap de correlaciones
corrplot(
cor_mat_long,
method = "color", # colores en lugar de números
type = "lower", # solo triángulo inferior
addCoef.col = "black", # mostrar valores numéricos en negro
tl.col = "black", # color de etiquetas
tl.srt = 45, # rotación de etiquetas
diag = FALSE # no mostrar la diagonal
)
###Elasticidad
elasticidad=-1.846e-03*(mean(long_vive100$Precio)/mean(long_vive100$Cantidades))
elasticidad