Как отменить масштабирование коэффициентов из lmer () - модели с масштабированным откликом

Я приспособил модель в R с lmer()-функцией из пакета lme4. Я масштабировал зависимую переменную:

    mod <- lmer(scale(Y)
                ~ X
                + (X | Z),
                data = df,
                REML = FALSE)

Я смотрю на коэффициенты фиксированного эффекта с помощью fixef(mod):

    > fixef(mod)
    (Intercept)      X1          X2         X3           X4 
     0.08577525 -0.16450047 -0.15040043 -0.25380073  0.02350007

Средние значения довольно легко вычислить вручную из коэффициентов фиксированных эффектов. Однако я хочу, чтобы они были немасштабируемыми, и я не знаю, как именно это сделать. Я знаю, что масштабирование означает вычитание среднего из каждого Y и деление на стандартное отклонение. Но и среднее, и стандартное отклонение были рассчитаны на основе исходных данных. Могу ли я просто отменить этот процесс после того, как я установил lmer()-модель, используя среднее значение и стандартное отклонение исходных данных?

Спасибо за любую помощь!


Обновление: способ, которым я представил модель выше, похоже, подразумевает, что зависимая переменная масштабируется путем взятия среднего значения по всем ответам и деления на стандартное отклонение всех ответов. Обычно это делается иначе. Вместо того, чтобы брать общее среднее значение и стандартное отклонение, ответы стандартизируются для каждого субъекта с использованием среднего и стандартного отклонения ответов этого субъекта. (Это странно для lmer(), я думаю, что случайный перехват должен позаботиться об этом ... Не говоря уже о том, что мы говорим о вычислении средних значений по порядковой шкале ...) Проблема, однако, остается той же: как только я подогнал такую ​​модель, есть ли чистый способ перемасштабировать коэффициенты подобранной модели?


person lord.garbage    schedule 13.05.2014    source источник
comment
Я не уверен, что есть простой способ масштабировать последнюю процедуру (то есть масштабировать каждый объект отдельно) - мне действительно кажется, что это другая модель ... Я также не совсем уверен, почему вы захотите ...   -  person Ben Bolker    schedule 15.05.2014
comment
Я подозревал это. Независимо от того, как я записывал модель, я не придумал разумного способа масштабирования. Я полностью согласен с тем, что эта процедура необычна. Но это можно найти в некоторых газетах. Я не понимаю, почему вы комбинируете стандартизацию ответа по каждому предмету и возможность случайного перехвата. Похоже, две вещи решают одну и ту же проблему; возможно, даже недооценка индивидуальных различий. Но большое спасибо за попытку найти ответ!   -  person lord.garbage    schedule 15.05.2014


Ответы (1)


Обновлено: обобщено, чтобы можно было масштабировать ответ, а также предикторы.

Вот довольно грубая реализация.

Если наша исходная (немасштабированная) регрессия

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
 }

Попробуйте это для линейной модели:

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

Это предполагает, что и отклик, и предикторы масштабируются.

  • Если вы масштабируете только ответ, а не предикторы, вы должны отправить (c(mean(response),rep(0,...)) для m и c(sd(response),rep(1,...)) для s (т.е. m и s - это значения, на которые были смещены и масштабированы переменные).
  • Если вы масштабируете только предикторы, а не ответ, отправьте c(0,mean(predictors)) для m и c(1,sd(predictors)) для s.
person Ben Bolker    schedule 14.05.2014
comment
Кажется, вы масштабировали независимые переменные icol <- which(colnames(state.x77)=="Illiteracy"), ss <- state.x77, ss[,-icol] <- scale(ss[,-icol]). Но я масштабировал зависимую переменную в дизайне. Итак, что я сделал, используя state.x77 данные: m1Sy <- lm(scale(Illiteracy)~.,as.data.frame(state.x77)). Теперь я получаю z-преобразованные коэффициенты в выходных данных модели, и я хочу отменить это, чтобы отобразить средние значения в исходном масштабе. Но, возможно, я неверно истолковываю ваше решение. - person lord.garbage; 14.05.2014
comment
И в случае, если некоторая предыстория полезна: кажется, существует сильная тенденция масштабировать порядковые ответы и помещать на них lmer() в определенных дисциплинах. Мало того, что я сомневаюсь, что это оправдано (порядковая переменная), но я задаюсь вопросом, как они возвращают исходный масштаб, например при построении среднего (рейтинга) и планок погрешностей. Сильно связано: lmer() vs clmm() с порядковым ответом - person lord.garbage; 14.05.2014
comment
ой, ответили не на тот вопрос - вернемся к этому. - person Ben Bolker; 14.05.2014
comment
Большое спасибо! Я действительно ценю это. Я только что обнаружил неточность на своей стороне: конечно, я имею в виду масштабирование переменной ответа на VP. Итак, представьте, что у меня есть шкала оценок от 1 до 5, и я ожидаю, что некоторые вице-президенты имеют сильную тенденцию просто использовать экстремальные значения, и я хочу исправить это. Затем я мог бы взять средний ответ (я знаю, ужасный для порядковой шкалы ...!) И стандартное отклонение для каждого предмета и стандартизировать ответы для каждого предмета. Что кажется бессмысленным в lmer () с учетом случайных перехватов. (?) Я должен обновить свой вопрос, чтобы отразить это. - person lord.garbage; 14.05.2014