Generación de datos
# Generación de la curva de demanda (linealmente dependiente del precio)
demanda = function(p, alpha = -40, beta = 500, sd = 10) {
error = rnorm(length(p), sd = sd)
q = p*alpha + beta + error
}
Generación de los datos a analizar
set.seed(100)
hist.precio = rnorm(252, mean = 6, sd = .5)
hist.demanda = demanda(hist.precio)
hist.ingresos = hist.precio*hist.demanda
costes_unitarios = 4
hist.costes = costes_unitarios*hist.demanda
hist.beneficios = (hist.precio - costes_unitarios)*hist.demanda
df = data.frame('periodo' = seq(1,252),'diario.precio' = hist.precio,
'demanda_diaria' = hist.demanda, 'ingresos_diarios' = hist.ingresos,
'costes_diarios' = hist.costes, 'beneficios_diarios' = hist.beneficios)library(ggplot2)
ggplot(df, aes(periodo, ingresos_diarios, colour = 'ingresos')) + theme_minimal() + geom_line() + geom_line(aes(periodo, beneficios_diarios, colour = 'beneficios')) + geom_line(aes(periodo, costes_diarios, colour = 'costes')) + labs(title = 'Historico de costes, beneficios e ingresos', colour = '')

Generación del modelo
modelo_lineal = lm(hist.demanda ~ hist.precio)
summary(modelo_lineal)
##
## Call:
## lm(formula = hist.demanda ~ hist.precio)
##
## Residuals:
## Min 1Q Median 3Q Max
## -32.990 -6.100 0.503 7.472 33.837
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 489.177 8.287 59.03 <2e-16 ***
## hist.precio -38.314 1.379 -27.79 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 10.5 on 250 degrees of freedom
## Multiple R-squared: 0.7555, Adjusted R-squared: 0.7545
## F-statistic: 772.4 on 1 and 250 DF, p-value: < 2.2e-16
beta = modelo_lineal$coefficients[1]
alpha = modelo_lineal$coefficients[2]
p.ingresos = -beta/(2*alpha)
p.beneficios = (alpha*costes_unitarios - beta)/(2*alpha)
modelado_ingresos = function(p) p*(modelo_lineal$coefficients[2]*p + modelo_lineal$coefficients[1])
modelado_beneficios = function(p) (p - costes_unitarios)*(modelo_lineal$coefficients[2]*p + modelo_lineal$coefficients[1])
max_ingresos = modelado_ingresos(p.ingresos)
max_beneficios = modelado_beneficios(p.beneficios)
Visualizar el modelo
# Generar la recta donde se optimizan los ingresos
df_ingresos = data.frame(p.ingresos, max_ingresos)
# Generar la recta donde se optimizan los beneficios
df_beneficios = data.frame(p.beneficios, max_beneficios)
# Visualizar el modelo
ggplot(data = data.frame(precio = 0)) +
stat_function(fun = modelado_ingresos, mapping = aes(x = precio, color = 'Modelado de ingresos')) +
stat_function(fun = modelado_beneficios, mapping = aes(x = precio, color = 'Modelado de beneficios')) +
geom_segment(aes(x = p.ingresos, y = max_ingresos, xend = p.ingresos, yend = 0), data = df_ingresos) +
geom_segment(aes(x = p.beneficios, y = max_beneficios, xend = p.beneficios, yend = 0), data = df_beneficios) +
scale_x_continuous(limits = c(4, 12)) +
labs(title = 'Optimizacion de beneficios e ingresos', colour = '') +
ylab('resultados')
0 comentarios