如何使用连续变量进行反向转换
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
其中:
activity
是连续响应变量
sex
是一个具有 2 个水平(女性和男性)的分类变量
BirthDate
为连续变量; BirthDate
是自 1 月 1 日以来的天数,然后以均值为中心并标准化为一个标准差
id
是个体身份的随机效应
merge.data
是我的数据集的名称
之前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
我想知道 sex
和 BirthDate
的平均值是多少。基于阅读 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
告诉你斜率,即结果会根据输入的变化而变化多少。特别是,如果您将 BirthDate 增加一个(并保持其他一切不变),预测的 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 的系数。
我想知道如何正确地反向转换单变量线性混合效应模型的输出以便对其进行解释。我没有发布数据来配合我的问题,因为我的问题应该可以在没有数据的情况下回答。
我的模型(为了这个问题的目的而简化):
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
其中:
activity
是连续响应变量sex
是一个具有 2 个水平(女性和男性)的分类变量BirthDate
为连续变量;BirthDate
是自 1 月 1 日以来的天数,然后以均值为中心并标准化为一个标准差id
是个体身份的随机效应merge.data
是我的数据集的名称
之前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
我想知道 sex
和 BirthDate
的平均值是多少。基于阅读 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
告诉你斜率,即结果会根据输入的变化而变化多少。特别是,如果您将 BirthDate 增加一个(并保持其他一切不变),预测的 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 的系数。