不标量预测器系数lmer模型适合非标定响应

时间:2016-02-04 19:12:25

标签: r lme4

我已经安装了一个lmer模型,现在我试图用实系数而不是缩放系数来解释系数。

我的顶级模特是:

 lmer(logcptplus1~scale.t6+scale.logdepth+(1|location) + (1|Fyear),data=cpt, REML=TRUE)

因此两个预测变量都被缩放,其中一个是缩放的日志值。我的响应变量没有缩放,只是记录下来。

为了扩展我的预测变量,我在r中使用了scale(data $ column,center = TRUE,scale = TRUE)函数。

我的模型的输出是: 固定效果:

                Estimate Std. Error t value
  (int)         3.31363    0.15163  21.853
scale.t6       -0.34400    0.10540  -3.264
scale.logdepth -0.58199    0.06486  -8.973

那么如何从这些系数中获得我的响应变量的实际估计值,这些系数是根据我的缩放预测变量进行缩放的?

注意:我理解如何对预测变量进行非标量,而不是如何对系数进行非标量/变换

由于

1 个答案:

答案 0 :(得分:3)

scale函数对数据进行z变换,这意味着它采用原始值,减去均值,然后除以标准差。

to_scale <- 1:10
using_scale <- scale(to_scale, center = TRUE, scale = TRUE)
by_hand <- (to_scale - mean(to_scale))/sd(to_scale)
identical(as.numeric(using_scale), by_hand)
[1] TRUE

因此,要反转模型系数,您需要做的就是将系数乘以协变量的标准偏差并加上平均值。 scale函数保存在mean和sd上。因此,如果我们假设您的协变量值是using_scale回归系数的scale.t6向量,我们可以编写一个函数来为我们完成工作。

get_real <- function(coef, scaled_covariate){

            # collect mean and standard deviation from scaled covariate
            mean_sd <- unlist(attributes(scaled_covariate)[-1])

            # reverse the z-transformation
             answer <- (coef * mean_sd[2]) + mean_sd[1]

            # this value will have a name, remove it
             names(answer) <- NULL

            # return unscaled coef
              return(answer)
}

get_real(-0.3440, using_scale)
[1] 4.458488

换句话说,它与取消预测变量变量是一回事,因为它是一种单调变换。