我已经安装了一个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
那么如何从这些系数中获得我的响应变量的实际估计值,这些系数是根据我的缩放预测变量进行缩放的?
注意:我理解如何对预测变量进行非标量,而不是如何对系数进行非标量/变换
由于
答案 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
换句话说,它与取消预测变量变量是一回事,因为它是一种单调变换。