R 如何获得调整后的因变量

R 如何获得调整后的因变量,r,linear-regression,adjustment,covariant,R,Linear Regression,Adjustment,Covariant,给定以下数据集: csf age sex tiv group 0,30 7,92 1 1,66 1 0,26 33,75 0 1,27 3 0,18 7,83 0 1,43 2 0,20 9,42 0 1,70 1 0,29 22,33 1 1,68 2 0,40 20,75 1 1,56 1 0,26 13,25 0 1,68 1

给定以下数据集:

csf     age    sex  tiv   group
0,30    7,92    1   1,66    1
0,26    33,75   0   1,27    3
0,18    7,83    0   1,43    2
0,20    9,42    0   1,70    1
0,29    22,33   1   1,68    2
0,40    20,75   1   1,56    1
0,26    13,25   0   1,68    1
0,28    6,67    0   1,66    1
0,22    10,58   0   1,38    1
0,22    13,08   0   1,41    2
0,33    36,42   1   1,68    3
0,29    35,00   1   1,34    3
0,11    7,25    1   1,20    2
0,13    10,00   0   1,12    3
0,32    34,58   1   1,33    3
0,68    8,25    1   1,90    1
0,25    11,08   1   1,92    2
0,33    10,92   0   1,24    1
0,20    9,33    1   1,58    1
0,25    51,67   0   1,15    3
0,16    27,67   0   1,19    3
0,19    33,25   0   1,29    3
0,16    7,92    1   1,67    1
0,17    13,42   0   1,34    3
0,45    48      1   1,85    1
0,34    14,67   1   1,80    1
0,23    35,33   0   1,31    3
0,18    15,50   1   1,59    1
0,11    12,08   0   1,34    2
0,21    9,92    0   1,43    1
0,19    8,83    0   1,59    1
0,21    6,83    1   1,78    1
0,13    10      0   1,28    1
0,38    38,42   1   1,63    3
0,27    13,83   0   1,63    1
0,28    15,33   0   1,43    2
0,31    38      1   1,70    1
0,19    13,08   0   1,56    1
0,13    26,25   0   1,07    3
0,14    63,08   1   1,34    3
0,19    10,25   1   1,27    3
0,38    37,25   1   1,63    3
0,28    37,33   0   1,47    3
0,34    20,25   1   1,41    2
0,36    40,33   1   1,44    3
0,26    42,83   0   1,43    2
0,29    46,08   1   1,74    2
0,19    10,25   0   1,56    1
0,20    12,08   1   1,76    1
0,29    30,58   1   1,39    3
0,23    44,67   1   1,45    3
我想知道各组脑脊液是否不同。但我知道CSF受年龄、性别和tiv的高度影响。因此,我想画出年龄、性别和tiv影响之外的群体差异。为此,我需要针对这三个协变量调整CSF。我的问题是:我如何获得每个人的调整CSF值

我做了以下线性模型:

model1 <- lm(csf ~ age + sex + tiv,data=mri22))

model1您可以像这样运行一个回归,它会告诉您组是否显著。在这里,它表明它不是:

df$group <- as.factor(df$group)
fit <- lm(csf ~ age + sex + tiv + group, data = df)
summary(fit)

Call:
lm(formula = csf ~ age + sex + tiv + group, data = df)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.12429 -0.04760 -0.00306  0.01967  0.34004 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)  
(Intercept) -0.155845   0.147860  -1.054   0.3000  
age          0.002895   0.001539   1.881   0.0694 .
sex          0.019926   0.036502   0.546   0.5891  
tiv          0.237891   0.097655   2.436   0.0208 *
group2      -0.037555   0.040104  -0.936   0.3563  
group3      -0.013844   0.051717  -0.268   0.7907  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.0874 on 31 degrees of freedom
Multiple R-squared:  0.4342,    Adjusted R-squared:  0.3429 
F-statistic: 4.757 on 5 and 31 DF,  p-value: 0.00243

df$group您可以像这样运行一个回归,它会告诉您组是否重要。在这里,它表明它不是:

df$group <- as.factor(df$group)
fit <- lm(csf ~ age + sex + tiv + group, data = df)
summary(fit)

Call:
lm(formula = csf ~ age + sex + tiv + group, data = df)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.12429 -0.04760 -0.00306  0.01967  0.34004 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)  
(Intercept) -0.155845   0.147860  -1.054   0.3000  
age          0.002895   0.001539   1.881   0.0694 .
sex          0.019926   0.036502   0.546   0.5891  
tiv          0.237891   0.097655   2.436   0.0208 *
group2      -0.037555   0.040104  -0.936   0.3563  
group3      -0.013844   0.051717  -0.268   0.7907  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.0874 on 31 degrees of freedom
Multiple R-squared:  0.4342,    Adjusted R-squared:  0.3429 
F-statistic: 4.757 on 5 and 31 DF,  p-value: 0.00243

df$group正如@Gopala所说,显然在截获过程中,group没有任何作用。
此外,对响应(系数)也没有影响。您可以在绘图和统计测试中看到这一点

mri22$group <- as.factor(mri22$group)
plot(mri22)
plot(csf~group,data=mri22,col=mri22$group)

plot(csf~age,data=mri22,col=mri22$group)
plot(csf~sex,data=mri22,col=mri22$group)
plot(csf~tiv,data=mri22,col=mri22$group)

model1 <- lm(csf ~ age + sex + tiv,data=mri22)
summary(model1)

model2 <- lm(csf ~ 0+age + sex + tiv+group,data=mri22)
summary(model2)
model3 <- lm(csf ~ 0+age*I(group) + sex + tiv,data=mri22)
summary(model3)
model4 <- lm(csf ~ 0+age*I(group) + sex*I(group) + tiv*I(group),data=mri22)
summary(model4)


Coefficients:
                Estimate Std. Error t value Pr(>|t|)  
age            0.0025507  0.0020500   1.244   0.2208  
I(group)1     -0.1902470  0.2174566  -0.875   0.3870  
I(group)2     -0.0076027  0.2224419  -0.034   0.9729  
I(group)3     -0.2303957  0.1993927  -1.155   0.2549  
sex            0.0208069  0.0480609   0.433   0.6675  
tiv            0.2552315  0.1428288   1.787   0.0817 .
age:I(group)2 -0.0002252  0.0030392  -0.074   0.9413  
age:I(group)3 -0.0021075  0.0026656  -0.791   0.4339  
I(group)2:sex -0.0048219  0.0790885  -0.061   0.9517  
I(group)3:sex -0.0014738  0.0711362  -0.021   0.9836  
I(group)2:tiv -0.1307945  0.2153850  -0.607   0.5472  
I(group)3:tiv  0.0796898  0.2143078   0.372   0.7120  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

mri22$group正如@Gopala所说,显然group在拦截中没有作用。
此外,对响应(系数)也没有影响。您可以在绘图和统计测试中看到这一点

mri22$group <- as.factor(mri22$group)
plot(mri22)
plot(csf~group,data=mri22,col=mri22$group)

plot(csf~age,data=mri22,col=mri22$group)
plot(csf~sex,data=mri22,col=mri22$group)
plot(csf~tiv,data=mri22,col=mri22$group)

model1 <- lm(csf ~ age + sex + tiv,data=mri22)
summary(model1)

model2 <- lm(csf ~ 0+age + sex + tiv+group,data=mri22)
summary(model2)
model3 <- lm(csf ~ 0+age*I(group) + sex + tiv,data=mri22)
summary(model3)
model4 <- lm(csf ~ 0+age*I(group) + sex*I(group) + tiv*I(group),data=mri22)
summary(model4)


Coefficients:
                Estimate Std. Error t value Pr(>|t|)  
age            0.0025507  0.0020500   1.244   0.2208  
I(group)1     -0.1902470  0.2174566  -0.875   0.3870  
I(group)2     -0.0076027  0.2224419  -0.034   0.9729  
I(group)3     -0.2303957  0.1993927  -1.155   0.2549  
sex            0.0208069  0.0480609   0.433   0.6675  
tiv            0.2552315  0.1428288   1.787   0.0817 .
age:I(group)2 -0.0002252  0.0030392  -0.074   0.9413  
age:I(group)3 -0.0021075  0.0026656  -0.791   0.4339  
I(group)2:sex -0.0048219  0.0790885  -0.061   0.9517  
I(group)3:sex -0.0014738  0.0711362  -0.021   0.9836  
I(group)2:tiv -0.1307945  0.2153850  -0.607   0.5472  
I(group)3:tiv  0.0796898  0.2143078   0.372   0.7120  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

mri22$group虽然为时已晚

您的模型是csf,它与年龄、性别和tiv呈线性关系。这应该可以解释数据差异的某些百分比。剩余的差异百分比将以残差表示

Csf=a.age+b.sex+c.tiv+d为模型。 如果r是残差,那么, 基于该模型的预测脑脊液为a.年龄+b.性别+c.tiv+d, 而观察到的脑脊液(你拥有的数据)是a.age+b.sex+c.tiv+d+r

现在,如果你想控制年龄、性别和tiv,用相应的方法替换个体。例如 调整后的icv=a(年龄平均值)+b(性别平均值)+c(tiv平均值)+d+r


现在,由于年龄、性别或tiv以外的原因,调整后的csf将发生变化。

尽管为时已晚

您的模型是csf,它与年龄、性别和tiv呈线性关系。这应该可以解释数据差异的某些百分比。剩余的差异百分比将以残差表示

Csf=a.age+b.sex+c.tiv+d为模型。 如果r是残差,那么, 基于该模型的预测脑脊液为a.年龄+b.性别+c.tiv+d, 而观察到的脑脊液(你拥有的数据)是a.age+b.sex+c.tiv+d+r

现在,如果你想控制年龄、性别和tiv,用相应的方法替换个体。例如 调整后的icv=a(年龄平均值)+b(性别平均值)+c(tiv平均值)+d+r



现在,由于年龄、性别或tiv以外的任何因素,调整后的csf都会发生变化。

根据定义,线性模型的残差加起来等于0。除非每个观测值都落在回归线上,否则一些残差将为负值。请看一下
?predict
。谢谢@lmo。但是,一旦我们对截距求和,这些负残差将变为正值。对不起。我错过了截距的添加。因为您有一个线性模型,并且由于依赖值非常接近于0,所以预测值/调整值可能为负值。一个简单的解决方案是将这个“调整后的CSF”称为负值。否则,你可能会考虑一些非线性模型。测试几个拟合,线性的是一个解释更多的方差。但你是对的,因变量非常接近于0,这可能是个问题。不过,我不确定这些是正确的调整CSF值。根据定义,线性模型的残差加起来等于0。除非每个观测值都落在回归线上,否则一些残差将为负值。请看一下
?predict
。谢谢@lmo。但是,一旦我们对截距求和,这些负残差将变为正值。对不起。我错过了截距的添加。因为您有一个线性模型,并且由于依赖值非常接近于0,所以预测值/调整值可能为负值。一个简单的解决方案是将这个“调整后的CSF”称为负值。否则,你可能会考虑一些非线性模型。测试几个拟合,线性的是一个解释更多的方差。但你是对的,因变量非常接近于0,这可能是个问题。不过,我不确定这些是正确的调整CSF值。谢谢@Gopala。事实上,我只是发布了部分数据集(这是一个巨大的数据集),因为我更感兴趣的是如何获得调整后的CSF值,而不是检查它们的统计意义。完整的数据集实际上提供了一个组效果。但是,即使它不重要,我如何提取调整后的CSF值呢?对于任何模型来说,都只是
model4$fitted。值
实际上答案是“相反的”,你需要的不是拟合值而是残差:model1$residualstanks@Gopala。事实上,我只是发布了部分数据集(这是一个巨大的数据集),因为我更感兴趣的是如何获得调整后的CSF值,而不是检查它们的统计意义。完整的数据集实际上提供了一个组效果。但是,即使它不重要,我如何提取调整后的CSF值呢?对于任何模型来说,都只是
model4$fitted。值
实际上答案是“相反的”,你需要的不是拟合值而是残差:model1$residualstanks@Gopala。完整的数据集实际上提供了一个组效果。但是,即使它不重要,我如何提取单个调整后的CSF值呢?您可以使用
fit$fitted.values[df$group==1]
从上面提取不同组的
CSF
拟合值。感谢您的回复。然而,这些(拟合)值受到年龄、性别和tiv的影响。它们与协变量高度相关。我想要得到的调整后的CSF值应该没有协变量的影响,所以它们不能与它们相关。在这种情况下,我不知道你想要什么。抱歉。@Borja您想要的是残差:fit$residuals。不确定为什么每个人都建议使用包含所有影响的拟合值