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。不确定为什么每个人都建议使用包含所有影响的拟合值