未缩放预测系数 lmer 模型适合未缩放的响应
unscale predictor coefficients lmer model fit with an unscaled response
我已经拟合了 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
那么我如何从这些基于我的缩放预测变量缩放的系数中获得我的响应变量的真实估计值?
注意:我了解如何取消缩放我的预测变量,只是不知道如何 unscale/transform 系数
谢谢
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 函数为您保留均值和标准差。因此,如果我们假设您的协变量值是 scale.t6
回归系数的 using_scale
向量,我们可以编写一个函数来为我们完成这项工作。
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
换句话说,它与缩放预测变量是一回事,因为它是单调变换。
我已经拟合了 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
那么我如何从这些基于我的缩放预测变量缩放的系数中获得我的响应变量的真实估计值?
注意:我了解如何取消缩放我的预测变量,只是不知道如何 unscale/transform 系数
谢谢
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 函数为您保留均值和标准差。因此,如果我们假设您的协变量值是 scale.t6
回归系数的 using_scale
向量,我们可以编写一个函数来为我们完成这项工作。
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
换句话说,它与缩放预测变量是一回事,因为它是单调变换。