【问题标题】:R Regression: Estimate coefficient only when indicator is trueR回归:仅当指标为真时才估计系数
【发布时间】: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*X2X1 + X2 + X1:X2 的简写。
  • 另外,如果您喜欢更短的代码:lm(y ~ 1 + x)lm(y ~ x) 相同。 R 会将常数放在那里,因此“1+”不是必需的(但它也不会伤害任何东西)。

标签: r regression


【解决方案1】:

您可以使用 ifelse 函数创建一个新变量:

price <- ifelse(INDEX == 1, logRP, logPP)

我正在使用您的索引,因为我没有参加促销活动。如果为1,则新变量取logRP的值,如果为0,则取logPP的值。这样,新变量将包含您只感兴趣的价格,您可以将其用作解释变量。

【讨论】:

  • 我这样做了,结果也没有任何意义:/
  • “没有任何意义”是什么意思。
  • 我得到一个弹性的正数,而另一个变得太小了。
猜你喜欢
  • 1970-01-01
  • 2016-09-17
  • 2020-10-06
  • 2020-03-05
  • 2011-11-12
  • 1970-01-01
  • 2014-07-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多