为什么当我对结果变量进行日志转换时,我的空模型的截距不等于平均值​​?我如何解释它?

机器算法验证 r 回归 物流 对数 截距
2022-03-14 18:44:15

我有一个右偏的结果变量,所以我对它进行了日志转换。我制作了一个只有对数转换结果变量的空模型,但是当我对估计值求幂时,它不等于平均值​​。

考虑到我的数据有问题,我制作了一个样本数据集,发现了同样的差异。为什么是这样?在这个模型中截距代表什么?

这是示例数据和 R 代码:

library(tidyverse)
test <- tibble(salary = c(10000, 23244, 2222222, 2353, 2353463, 5464564),
               perf = c(4, 2, 4, 2, 5, 7))

这是我的空模型:

summary(lm(log(salary) ~ 1 , data = test))

截距等于 11.971,当我使用 exp(11.971) 时,我得到 158102.7:

exp(11.971)

但平均值为 1679308:

mean(test$salary)

而且,作为健全性检查,当我不记录转换结果时,截距确实会产生平均值:

summary(lm(salary ~ 1 , data = test))

我很感激 1)如何解释截距,2)为什么它不等于平均值​​,以及 3)我如何从这个模型中获得非对数预测。

1个回答

这是Jensen 不等式的结果。您想要,但是从对数模型中对预测值求幂不会提供的无偏估计,因为并且在您的计算中省略了第二项。E[y|x]E[y|x]

E[yi|xi]=exp(xβ)E[exp(ui)]

如果误差项,则可以通过用回归模型的一致估计替换uN[0,σ2]E[exp(u)]=exp(12σ2)σ2s2

或者,Duan (1983) 表明,对于iid错误(不必是正常的),

E[exp(u)]=1Niexp(ei),
在哪里ei是残差。

我在下面实现了段的涂抹变换本质上,您需要将取幂平均值乘以取幂残差的平均值:

library(tidyverse)
test <- tibble(salary = c(10000, 23244, 2222222, 2353, 2353463, 5464564),
             perf = c(4, 2, 4, 2, 5, 7))
m<-lm(log(salary) ~ 1 , data = test)
mean(exp(m$fitted.values))*mean(exp(m$residuals))
mean(test$salary)

即使您在模型中有协变量,这也将起作用,尽管您必须稍微调整计算,因为预测现在会因观察结果而异:

mean(exp(m$fitted.values)*exp(m$residuals))

第二个版本也应该在您的仅拦截示例中工作。