如何使用连续变量进行反向转换

How to back-transform with a continuous variable

我想知道如何正确地反向转换单变量线性混合效应模型的输出以便对其进行解释。我没有发布数据来配合我的问题,因为我的问题应该可以在没有数据的情况下回答。

我的模型(为了这个问题的目的而简化):

library(lme4)
m1<-lmer(activity ~ sex + BirthDate+ (1|id), data=merge.data)

> m1
Linear mixed model fit by REML ['lmerMod']
Formula: activity ~ sex + BirthDate + (1 | id)
   Data: merge.data
REML criterion at convergence: 572.0483
Random effects:
 Groups   Name        Std.Dev.
 id    (Intercept) 0.7194  
 Residual             1.4651  
    Number of obs: 150, groups:  id, 89
    Fixed Effects:
   (Intercept)            sexM       BirthDate  
      -0.08661         0.20718         0.43022  

其中:

之前BirthDate均值居中并标准化为一个标准差:

> summary(merge.data$BirthDate)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  94.96  115.96  121.96  122.67  127.96  138.96 

经过BirthDate均值居中并标准化为一个标准差:

merge.data<-merge.data %>%
    mutate(BirthDate = ((BirthDate-mean(BirthDate))/(1*(sd(BirthDate)))))

> summary(merge.data$BirthDate)
    Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
-3.09082 -0.74816 -0.07883  0.00000  0.59050  1.81761 

我想知道 sexBirthDate 的平均值是多少。基于阅读 The R Book by Crawley,我可以使用以下代码从我的模型 m1 中获取平均值:

tapply(predict(m1,type="response"), merge.data$sex,mean) #gives you the back-transformed mean for sex from the model "m1"

 F           M 
-0.08334649  0.11199685

也就是说女性的平均 activity 分数是 -0.083,男性是 0.11。

当我尝试 BirthDate 时,像这样:

 tapply(predict(m1,type="response"), merge.data$BirthDate,mean)

  -3.09082367412411    -1.6406056364576   -1.52905040279094 #mean centered birth date
        -0.79030344         -0.87012920         -0.44792213 #activity score

and so on...

我最终得到的是每个出生日期的 1 个平均值(BirthDate 以平均值为中心并标准化为一个标准差)。与 sex 不同,我无法对这些信息做任何事情......我试图展示增加出生日期对 activity.

的影响(影响大小)

我最终想做的是,出生日期每增加 1 天,activity 分数就会增加 [number from model]。

当您通过键入 m1 打印出模型时,这部分:

    Fixed Effects:
   (Intercept)            sexM       BirthDate  
      -0.08661         0.20718         0.43022  

告诉你斜率,即结果会根据输入的变化而变化多少。特别是,如果您将 Bi​​rthDate 增加一个(并保持其他一切不变),预测的 activity 分数将增加 0.43022.

您没有提供任何数据,因此我无法直接使用您的数据和模型。相反,我将使用 R 中内置的一些数据来说明,即虹膜数据。

## Build a linear model
Mod1 = lm(Petal.Length ~ ., data=iris[,1:4])

现在我们可以只输入 Mod1,但这比我想看到的要多。我们可以使用

将注意力限制在有趣的部分
Mod1$coefficients
 (Intercept) Sepal.Length  Sepal.Width  Petal.Width 
  -0.2627112    0.7291384   -0.6460124    1.4467934

这给出了每个预测变量(和截距)的斜率。 我想说明响应 Petal.Length 如何随输入变化。 我将只采取一些观点并更改一个预测变量并查看结果。

NewPoint = iris[30,1:4]
NewPoint[,1] = NewPoint[,1]+1
iris[30, 1:4]
   Sepal.Length Sepal.Width Petal.Length Petal.Width
30          4.7         3.2          1.6         0.2
NewPoint
   Sepal.Length Sepal.Width Petal.Length Petal.Width
30          5.7         3.2          1.6         0.2

可以看到NewPoint和原点一样iris[30,1:4] 除了 Sepal.Length 增加了 1。这对预测有何影响?

predict(Mod1, newdata=iris[30,1:4])
      30 
1.386358 
predict(Mod1, newdata=NewPoint)
      30 
2.115497 
predict(Mod1, newdata=NewPoint) - predict(Mod1, newdata=iris[30,1:4])
       30 
0.7291384

预测值的差异为 0.7291384,这是上面显示的 Sepal.Length 的系数。