【发布时间】:2018-08-13 22:10:36
【问题描述】:
我想拟合一个回归,结果是销售单位,预测变量是对数价格。我想计算弹性。
但是我有 2 个变量,一个是正常价格,另一个是促销价格。我想有两种不同的弹性。然而,在我的数据集中,两个价格总是存在的,我的意思是,当产品不促销时,正常价格等于促销价格。促销时促销价格较低。
我尝试了几种计算方法,使用指标变量。
1.我创建了一个索引,产品不打折时为 1,打折时为 0。
lm(logSales ~ 1 + logRP:I(INDEX==1) + logPP:I(INDEX!=1) ...)
logRP:I(INDEX == 1)FALSE -1.45618 0.06189 -23.53 <2e-16 ***
logRP:I(INDEX == 1)TRUE -2.24568 0.08454 -26.56 <2e-16 ***
logPP:I(INDEX != 1)FALSE -2.18178 0.01997 -109.27 <2e-16 ***
logPP:I(INDEX != 1)TRUE -1.85235 0.01646 -112.50 <2e-16 ***
然而,这似乎不是一个正确的解决方案,因为我不想估计它何时为假。
2。我为常规价格和促销价格创建了虚拟变量,并使用了指标 I。
lm(logSales ~ 1 + I(logRP*RP_Multiplier) + I(logPP*PP_Multiplier)
但是这里的结果对我来说根本没有意义,我的符号错误。
3。我试着简单地互动
lm(logSales ~ 1 + logRP*RP_Multiplier + logPP*PP_Multiplier
但是我不想单独估计乘数或价格的系数。无论如何,这根本不是我的目标。
如何设置我的模型以仅在观察满足我设置的条件时估计系数?在这种情况下,只有当该变量的乘数为 1 时才会计算弹性。
【问题讨论】:
-
如果你想在
lm中放X1乘X2,你应该写X1:X2。请注意,X1*X2是X1 + X2 + X1:X2的简写。 -
另外,如果您喜欢更短的代码:
lm(y ~ 1 + x)与lm(y ~ x)相同。 R 会将常数放在那里,因此“1+”不是必需的(但它也不会伤害任何东西)。
标签: r regression