有没有办法使用价格弹性度量绘制R中的总收入曲线?

时间:2018-12-19 21:37:14

标签: r ggplot2 economics

我整天都在忙。 就R而言,我的水平还远远低于平均水平,因此我还没有达到编写自己的脚本/函数的水平(但是尝试...失败)

我有年销售额,收入,商品价格,中位数收入和人口的数据。

使用glm,我消除了一些变量(自相关,无关紧要等)。

以下是我正在使用的数据框的内容:

dput(df)
structure(list(Year = 2008:2018, Sales = c(50681L, 53016L, 53981L, 
56204L, 55564L, 56916L, 61328L, 59686L, 59412L, 57298L, 57569L
), Population = c(9250000L, 9380000L, 9570000L, 9660000L, 9760000L, 
9850000L, 9940000L, 10040000L, 10160000L, 10270000L, 10454860L
), Income = c(52941L, 53127L, 50020L, 48816L, 47969L, 48294L, 
48385L, 48253L, 49489L, 51672L, 51752L), Price_up = c(15, 15.57, 
15.50772, 15.75584352, 16.26003051, 16.60149115, 20, 20.32, 20.34032, 
20.60474416, 21.03744379), Price = c(16.60149115, 16.26003051, 
15.75584352, 15.50772, 15.57, 15, 21.03744379, 20.60474416, 20.34032, 
20.32, 20), ad_revenue = c(1293145, 1270159.59, 1297991.2, 1362019.86, 
1330311.32, 1423933.04, 1499699.64, 1983487.176, 2034322.84, 
2010148.6, 2008107.84)), class = "data.frame", row.names = c(NA, 
11L))

#Run Models#
m1 <- glm(formula = Sales ~ Price, data = df)
m2 <- update(m1, . ~ . + Income)
m3 <- update(m2, . ~ . + ad_revenue)
m4 <- update(m3, . ~ . + Population)
library(memisc)
library(car)

#m3 is best# 
mtable(m1, m2, m3, m4) 

#No autocorrelation# 
durbinWatsonTest(m3) 

#Calculate Price Elasticity# 
PEm3 <- as.numeric(m3$coefficients['Price'] * mean(df$Price)/mean(df$Sales))

那么,如何确定最佳价格?可以使用ggplot绘制曲线以指示在销售下降之前可以向最高价收取的价格吗?

价格弹性的值为1> x> -1,表示其相对缺乏弹性。

请帮助我显示一条呈钟形的曲线,指示在销售直线下降之前的最高价格。看起来像这里的照片:

enter image description here

区别在于,不是y轴上的收入而是总销售额。

谢谢

1 个答案:

答案 0 :(得分:2)

This StackOverflow answer显示了如何找到回归曲线的局部最大值。但是,您的回归模型没有局部最大值,因为这些模型在所有变量中都是一阶的。例如,该模型要求Sales总是随着Price的增加而总是增加或总是减少,这分别取决于Price的回归系数是正还是负。该模型必须至少是Price的二阶,才能有一个(模型化的)销售价格最高的(模型化的)价格。

要注意的另一件事是,数据未显示出销售和价格之间的简单关系。例如:

library(ggplot2)
theme_set(theme_classic())

ggplot(df, aes(Price, Sales)) + 
  geom_line(colour="grey80", size=1) +
  geom_point()

enter image description here

如果按年顺序绘制点,则看起来宏观经济因素混淆了销售与价格的关系:

ggplot(df, aes(Price, Sales)) + 
  geom_path(colour="grey80", size=1) +
  geom_text(aes(label=Year), colour='red') + 
  theme_classic()

enter image description here

更新:要回答评论中的问题:示例中的模型在Price中是线性的,这意味着SalesPrice是一条线,而不是一条曲线。如果您想要一个模型,其中允许SalesPrice的增加而下降然后上升(或上升然后下降),那么Sales必须至少是二次(二阶) )Price的函数(或比Price的线性函数更具灵活性的某种其他类型的模型)。

为说明起见,让我们创建SalesPrice的线性和二次模型:

价格中的线性(一阶)。以下模型适合此方程:Sales = a + b * Price,其中ab是回归系数。< / p>

m5a = glm(Sales ~ Price, data=df)

价格为二次(二阶)。以下模型适合此方程:Sales = a + b * Price + c * Price^2,其中ab和{{1} }是回归系数。

c

现在,让我们绘制这两个模型的预测以及数据。请注意,在下图中,线性价格模型只能沿一个方向运行。 m5b = glm(Sales ~ Price + I(Price^2), data=df) # m5b = glm(Sales ~ poly(Price, 2, raw=TRUE), data=df) # Another way to specify the quadratic model 随着Sales的增加而以恒定的速率增加。另一方面,二次价格模型是一个抛物线,其中Price最初随着Sales的增加而下降,然后随着Price的增加而上升。

二次模型可以更好地拟合数据,但是这两个模型在经济上似乎都没有多大意义。

Price

enter image description here