如何从配有比例响应的lmer()模型中取消比例系数

如何从配有比例响应的lmer()模型中取消比例系数,r,mean,lme4,lmer,R,Mean,Lme4,Lmer,我用lme4软件包中的lmer()-功能在R中安装了一个模型。我缩放了因变量: mod <- lmer(scale(Y) ~ X + (X | Z), data = df, REML = FALSE) 从固定效应系数手动计算平均值是相当容易的。然而,我希望他们是无标度的,我不知道如何做到这一点。我知道缩放意味着从每个Y中减去平均值,然后用标准偏差进行偏差

我用
lme4
软件包中的
lmer()
-功能在
R
中安装了一个模型。我缩放了因变量:

    mod <- lmer(scale(Y)
                ~ X
                + (X | Z),
                data = df,
                REML = FALSE)
从固定效应系数手动计算平均值是相当容易的。然而,我希望他们是无标度的,我不知道如何做到这一点。我知道缩放意味着从每个
Y
中减去平均值,然后用标准偏差进行偏差。但均值和标准差都是根据原始数据计算的。在使用原始数据的平均值和标准偏差拟合
lmer()
-模型后,我是否可以简单地反转此过程

谢谢你的帮助



更新:我提出上述模型的方式似乎暗示,因变量是通过取所有响应的平均值除以所有响应的标准偏差来缩放的。通常,这是不同的做法。通过使用受试者回答的平均值和标准偏差,而不是采用总体平均值和标准偏差,对每个受试者的回答进行标准化。(这在
lmer()中很奇怪,
我认为随机截距应该考虑到这一点…更不用说我们讨论的是按顺序计算平均值的事实…)但问题仍然是一样的:一旦我安装了这样一个模型,是否有一种干净的方法来重新缩放拟合模型的系数?

更新了:通用化,以允许缩放响应和预测值

这是一个相当粗糙的实现

如果我们的原始(无标度)回归是

Y = b0 + b1*x1 + b2*x2 ... 
那么我们的比例回归是

(Y0-mu0)/s0 = b0' + (b1'*(1/s1*(x1-mu1))) + b2'*(1/s2*(x2-mu2))+ ...
这相当于

Y0 = mu0 + s0((b0'-b1'/s1*mu1-b2'/s2*mu2 + ...) + b1'/s1*x1 + b2'/s2*x2 + ...)
因此
bi=s0*bi'/si
对于
i>0

b0 = s0*b0'+mu0-sum(bi*mui)
实施这一点:

 rescale.coefs <- function(beta,mu,sigma) {
    beta2 <- beta ## inherit names etc.
    beta2[-1] <- sigma[1]*beta[-1]/sigma[-1]
    beta2[1]  <- sigma[1]*beta[1]+mu[1]-sum(beta2[-1]*mu[-1])
    beta2
 }

rescale.coefs您似乎已经缩放了自变量
icol,如果某些背景有帮助的话:在某些学科中,似乎有很强的趋势来缩放顺序响应并在其上匹配
lmer()
。不仅仅是我怀疑这是合理的(顺序变量),而且我发现自己在问他们是如何恢复原始比例的,例如在绘制平均值(评级)和误差条时。密切相关:哦,回答了错误的问题——我会回到这里。非常感谢!我真的很感激。我刚刚意识到我的目的有一个不精确之处:当然,我的意思是用VP来缩放响应变量。所以,假设我有一个从1到5的评分量表,我希望一些副总裁有一个强烈的倾向,只使用极值,我想对此进行纠正。然后,我可以取每个受试者的平均回答(我知道,对于有序量表来说很可怕…!)和标准偏差,并对每个受试者的回答进行标准化。在lmer()中,考虑到随机截取,这似乎是毫无意义的。(?)我应该更新我的问题以反映这一点。我不确定有没有简单的方法来“取消缩放”后一个过程(即分别缩放每个主题)——这对我来说真的像是一个不同的模型。。。我也不完全确定你为什么想…我怀疑这一点。无论我如何写下模型,我都没有找到一个合理的方法来重新缩放。我完全同意这个程序很奇怪。但在一些报纸上可以找到。我不明白你为什么要将每个主题的响应标准化和允许随机截取相结合。这似乎是解决同一个问题的两件事;甚至可能低估了适当的个体差异。但是非常感谢你试着想出一个答案!
 rescale.coefs <- function(beta,mu,sigma) {
    beta2 <- beta ## inherit names etc.
    beta2[-1] <- sigma[1]*beta[-1]/sigma[-1]
    beta2[1]  <- sigma[1]*beta[1]+mu[1]-sum(beta2[-1]*mu[-1])
    beta2
 }
m1 <- lm(Illiteracy~.,as.data.frame(state.x77))
b1 <- coef(m1)
ss <- scale(state.x77)
m1S <- update(m1,data=as.data.frame(ss))
b1S <- coef(m1S)
icol <- which(colnames(state.x77)=="Illiteracy")
p.order <- c(icol,(1:ncol(state.x77))[-icol])
m <- colMeans(state.x77)[p.order]
s <- apply(state.x77,2,sd)[p.order]
all.equal(b1,rescale.coefs(b1S,m,s))  ## TRUE