具有对数变换的残差的R绝对值

时间:2017-10-24 05:24:40

标签: r regression transformation

我有一个R形式的线性模型

lm(log(num_encounters) ~ log(distance)*sampling_effort, data=df)

我想要解释残差但是让它们恢复到num_encounters的范围。我看过residuals.lm(x, type="working")residuals.lm(x, type="response"),但我不确定它们返回的值。我是否仍然需要使用exp()来获取num_encounters规模上的残值?或者他们已经达到了这个规模?我想在后面的直方图和光栅图中绘制这些绝对值。

编辑: 基本上我的困惑是以下代码导致3个不同的直方图,而我期望前2个相同。

df$predicted <- exp(predict(x, newdata=df))
histogram(df$num_encounters-df$predicted)
histogram(exp(residuals(x, type="response")))
histogram(residuals(x, type="response"))

2 个答案:

答案 0 :(得分:1)

  

我想解释残差,但要把它们恢复到规模   num_encounters。

您可以轻松计算出来:

mod <- lm(log(num_encounters) ~ log(distance)*sampling_effort, data=df)
res <- df$num_encounters - exp(predict(mod))

答案 1 :(得分:0)

另外@Roland建议,这确实是正确和有效的,我的困惑问题只是基本的高中对数代数。

确实,绝对响应残差(在原始因变量的范围内)可以按照@Roland所说的计算

mod <- lm(log(num_encounters) ~ log(distance)*sampling_effort, data=df)
res <- df$num_encounters - exp(predict(mod))

如果要根据模型残差计算它们,则需要将对数减法规则考虑在内。

log(a)-log(b)=log(a/b)

残差是从​​原始模型计算的。所以在我的例子中,模型预测log(num_encounters)。所以残差是log(observed)-log(predicted)

我想做的是

exp(resid) = exp(log(obs)-log(pred)) = exp(log(obs/pred)) = obs/pred

这显然不是我想要的数字。为了从模型响应残差中获得绝对响应残差,这就是我所需要的。

obs-obs/exp(resid)

所以在R代码中,你也可以这样做:

mod <- lm(log(num_encounters) ~ log(distance)*sampling_effort, data=df)
abs_resid <- df$num_encounters - df$num_encounters/exp(residuals(mod, type="response"))

这导致与@Roland描述的方法相同的数字当然要容易得多。但至少我让我的大脑再次排成一行。