【问题标题】:Linear regression with independent variable plus 1 Standard Deviation自变量加 1 个标准差的线性回归
【发布时间】:2020-01-03 13:27:38
【问题描述】:

这一定是一个非常简单的问题,虽然我不确定我是否正确:

我想执行多重线性回归,我想在 1 个标准差 (SD) 中包含自变量 (Indv3) 变化的影响

换句话说:如果 'Indv3' 改变 1SD,依赖 (Depv) 变量是如何与之关联的?

我所做的是:计算 'Indv3' 的 SD 值并使用 'Indv3' + 1SD-value = 1 创建一个虚拟变量 (Indv3_plusSD),其余的值为 0。

然后为了进行线性回归,我添加了“Indv3_plusSD”假人并执行回归。但是,当我这样做时,与已在论文中发表的相同数据的分析相比,我得到了另一个 'Depv' 的 beta 系数......(所以我可能在 SD 分析中做错了 :)

       Depv      Indv1 Indv2   Indv3    Indv3_plusSD
1   1.1555864       48    1  77.07593       0
2   1.0596864       61    2  69.51333       0
3   0.8380413       51    1  87.38040       0
4   1.5305489       53    2  67.43750       0
5   1.0619884       55    1 165.99977       1
6   0.8474507       56    2 229.14570       1
7   0.9579580       64    2 121.89550       0
8   0.7432210       58    1 211.17690       1
9   0.8374197       60    1 139.69577       0
10  0.7378349       65    1 277.03920       1
11  0.6971632       61    1 195.72100       1
12  0.5227076       64    2 194.63220       1
13  0.9900380       52    1 138.25417       0
14  0.8954233       52    2 237.39020       1
15  0.9058147       56    1 123.42930       0
16  0.9436135       55    2 152.75953       1
17  0.7123374       55    1 190.34547       1
18  1.1928167       58    1 166.50990       1
19  1.3342048       47    2  76.35120       0
20  1.0881865       49    1 135.71740       0
21  2.9028876       48    2  61.83147       0
22  0.6661121       61    1 139.68627       0

linregr <- lm(Depv ~ Indv1 + Indv2 + Indv3_plusSD, data = df)   

【问题讨论】:

  • 将此问题移至(交叉验证)stats.stackexchange.com
  • 我不明白你的方法的原因。我怀疑您应该只在模型中包含 scale(Indv3) 。

标签: r regression standard-deviation dummy-variable


【解决方案1】:

在没有 SD 术语的情况下对 Indv1Indv2Indv3 进行回归:
linregr &lt;- lm(Depv ~ Indv1 + Indv2 + Indv3, data = df)

Indv3 的回归系数是预测 Depv 的数量会随着 Indv3 的单位变化而变化,因此 Depv 的数量将随着 Indv3 中 1 个 SD 的变化而变化是 SD * (Indv3 的系数)。

library(tidyverse)
df = read_table2('Depv      Indv1 Indv2   Indv3
1.1555864       48    1  77.07593
1.0596864       61    2  69.51333
0.8380413       51    1  87.38040
1.5305489       53    2  67.43750
1.0619884       55    1 165.99977
0.8474507       56    2 229.14570
0.9579580       64    2 121.89550
0.7432210       58    1 211.17690
0.8374197       60    1 139.69577
0.7378349       65    1 277.03920
0.6971632       61    1 195.72100
0.5227076       64    2 194.63220
0.9900380       52    1 138.25417
0.8954233       52    2 237.39020
0.9058147       56    1 123.42930
0.9436135       55    2 152.75953
0.7123374       55    1 190.34547
1.1928167       58    1 166.50990
1.3342048       47    2  76.35120
1.0881865       49    1 135.71740
2.9028876       48    2  61.83147
0.6661121       61    1 139.68627') %>% 
  mutate(Indv3_scale = scale(Indv3))

(sd3 = sd(df$Indv3))
#> [1] 60.84117

model1 =  lm(Depv ~ Indv1 + Indv2 + Indv3, data = df)   
model2 =  lm(Depv ~ Indv1 + Indv2 + Indv3_scale, data = df)   

coef(model1)['Indv3'] * sd3
#>      Indv3 
#> -0.1609104
coef(model2)['Indv3_scale']
#> Indv3_scale 
#>  -0.1609104

reprex package (v0.3.0) 于 2020 年 1 月 14 日创建

【讨论】:

  • 非常感谢@KentJohnson。那么当 Indv3 显着相关时,SD *(Indv3 的系数)也仍然是符号是否正确。关联?
  • 我不确定您所说的“显着相关”是什么意思。 SD *(Indv3 的系数)将具有与系数相同的 p 值。
  • 这种方法有效,但我觉得将Indv3标准化(通过scale或手动)并将标准化变量包含在模型中会更容易。一旦预测变量以标准差为单位,那么您的单位变化就是Indv3中的 1SD 变化@
  • 如果您使用@Simon 的方法,则系数的置信区间将由lm 报告。否则将置信区间乘以 SD。
  • Indv3 缩放的模型已经以 SD 为单位,因此您无需将 beta 乘以 SD。请参阅我编辑的答案。
猜你喜欢
  • 2016-08-20
  • 2013-08-20
  • 2017-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-06
相关资源
最近更新 更多