R中重复测量的线性回归

机器算法验证 r 回归 混合模式 重复测量
2022-02-26 18:41:54

我无法弄清楚如何在 R in 中执行线性回归以进行重复测量设计。上一个问题(仍未得到解答)中,有人建议我不要使用lm而是使用混合模型。lm以以下方式使用:

lm.velocity_vs_Velocity_response <- lm(Velocity_response~Velocity*Subject, data=mydata)

(有关数据集的更多详细信息可以在上面的链接中找到)

但是,我无法在互联网上找到任何显示如何执行线性回归分析的 R 代码示例。

我想要的是一方面数据图与拟合数据的线,另一方面R2值以及模型显着性检验的 p 值。

有没有人可以提供一些建议?任何 R 代码示例都会有很大帮助。


编辑
根据我到目前为止收到的建议,我分析我的数据以了解两个变量 Velocity_response (来自调查问卷)和 Velocity (来自性能)之间是否存在线性关系的解决方案应该是这样的:

library(nlme)
summary(lme(Velocity_response ~ Velocity*Subject, data=scrd, random= ~1|Subject))

总结的结果是这样的:

    > summary(lme(Velocity_response ~ Velocity*Subject, data=scrd, random= ~1|Subject))
    Linear mixed-effects model fit by REML
     Data: scrd 
           AIC      BIC   logLik
      104.2542 126.1603 -30.1271

    Random effects:
     Formula: ~1 | Subject
            (Intercept) Residual
    StdDev:    2.833804 2.125353

Fixed effects: Velocity_response ~ Velocity * Subject 
                              Value Std.Error DF    t-value p-value
(Intercept)               -26.99558  25.82249 20 -1.0454288  0.3083
Velocity                   24.52675  19.28159 20  1.2720292  0.2180
SubjectSubject10           21.69377  27.18904  0  0.7978865     NaN
SubjectSubject11           11.31468  33.51749  0  0.3375754     NaN
SubjectSubject13           52.45966  53.96342  0  0.9721337     NaN
SubjectSubject2           -14.90571  34.16940  0 -0.4362299     NaN
SubjectSubject3            26.65853  29.41574  0  0.9062674     NaN
SubjectSubject6            37.28252  50.06033  0  0.7447517     NaN
SubjectSubject7            12.66581  26.58159  0  0.4764880     NaN
SubjectSubject8            14.28029  31.88142  0  0.4479188     NaN
SubjectSubject9             5.65504  34.54357  0  0.1637076     NaN
Velocity:SubjectSubject10 -11.89464  21.07070 20 -0.5645111  0.5787
Velocity:SubjectSubject11  -5.22544  27.68192 20 -0.1887672  0.8522
Velocity:SubjectSubject13 -41.06777  44.43318 20 -0.9242591  0.3664
Velocity:SubjectSubject2   11.53397  25.41780 20  0.4537754  0.6549
Velocity:SubjectSubject3  -19.47392  23.26966 20 -0.8368804  0.4125
Velocity:SubjectSubject6  -29.60138  41.47500 20 -0.7137162  0.4836
Velocity:SubjectSubject7   -6.85539  19.92271 20 -0.3440992  0.7344
Velocity:SubjectSubject8  -12.51390  22.54724 20 -0.5550080  0.5850
Velocity:SubjectSubject9   -2.22888  27.49938 20 -0.0810519  0.9362
 Correlation: 
                          (Intr) Velcty SbjS10 SbjS11 SbjS13 SbjcS2 SbjcS3 SbjcS6 SbjcS7 SbjcS8 SbjcS9 V:SS10 V:SS11 V:SS13 Vl:SS2 Vl:SS3
Velocity                  -0.993                                                                                                         
SubjectSubject10          -0.950  0.943                                                                                                  
SubjectSubject11          -0.770  0.765  0.732                                                                                           
SubjectSubject13          -0.479  0.475  0.454  0.369                                                                                    
SubjectSubject2           -0.756  0.751  0.718  0.582  0.362                                                                             
SubjectSubject3           -0.878  0.872  0.834  0.676  0.420  0.663                                                                      
SubjectSubject6           -0.516  0.512  0.490  0.397  0.247  0.390  0.453                                                               
SubjectSubject7           -0.971  0.965  0.923  0.748  0.465  0.734  0.853  0.501                                                        
SubjectSubject8           -0.810  0.804  0.769  0.624  0.388  0.612  0.711  0.418  0.787                                                 
SubjectSubject9           -0.748  0.742  0.710  0.576  0.358  0.565  0.656  0.386  0.726  0.605                                          
Velocity:SubjectSubject10  0.909 -0.915 -0.981 -0.700 -0.435 -0.687 -0.798 -0.469 -0.883 -0.736 -0.679                                   
Velocity:SubjectSubject11  0.692 -0.697 -0.657 -0.986 -0.331 -0.523 -0.607 -0.357 -0.672 -0.560 -0.517  0.637                            
Velocity:SubjectSubject13  0.431 -0.434 -0.409 -0.332 -0.996 -0.326 -0.378 -0.222 -0.419 -0.349 -0.322  0.397  0.302                     
Velocity:SubjectSubject2   0.753 -0.759 -0.715 -0.580 -0.360 -0.992 -0.661 -0.389 -0.732 -0.610 -0.563  0.694  0.528  0.329              
Velocity:SubjectSubject3   0.823 -0.829 -0.782 -0.634 -0.394 -0.622 -0.984 -0.424 -0.799 -0.667 -0.615  0.758  0.577  0.360  0.629       
Velocity:SubjectSubject6   0.462 -0.465 -0.438 -0.356 -0.221 -0.349 -0.405 -0.995 -0.449 -0.374 -0.345  0.425  0.324  0.202  0.353  0.385
Velocity:SubjectSubject7   0.961 -0.968 -0.913 -0.740 -0.460 -0.726 -0.844 -0.496 -0.986 -0.778 -0.718  0.886  0.674  0.420  0.734  0.802
Velocity:SubjectSubject8   0.849 -0.855 -0.807 -0.654 -0.406 -0.642 -0.746 -0.438 -0.825 -0.988 -0.635  0.783  0.596  0.371  0.649  0.709
Velocity:SubjectSubject9   0.696 -0.701 -0.661 -0.536 -0.333 -0.526 -0.611 -0.359 -0.676 -0.564 -0.990  0.642  0.488  0.304  0.532  0.581
                          Vl:SS6 Vl:SS7 Vl:SS8
Velocity                                      
SubjectSubject10                              
SubjectSubject11                              
SubjectSubject13                              
SubjectSubject2                               
SubjectSubject3                               
SubjectSubject6                               
SubjectSubject7                               
SubjectSubject8                               
SubjectSubject9                               
Velocity:SubjectSubject10                     
Velocity:SubjectSubject11                     
Velocity:SubjectSubject13                     
Velocity:SubjectSubject2                      
Velocity:SubjectSubject3                      
Velocity:SubjectSubject6                      
Velocity:SubjectSubject7   0.450              
Velocity:SubjectSubject8   0.398  0.828       
Velocity:SubjectSubject9   0.326  0.679  0.600

Standardized Within-Group Residuals:
        Min          Q1         Med          Q3         Max 
-1.47194581 -0.46509026 -0.05537193  0.39069634  1.89436646 

Number of Observations: 40
Number of Groups: 10 
Warning message:
In pt(q, df, lower.tail, log.p) : NaNs produced
> 

现在,我不明白我在哪里可以获得 R^2 和相应的 p 值,指示我两个变量之间是否存在线性关系,我也不明白如何用拟合线绘制我的数据回归。

谁能这么好心开导我?我真的需要你们的帮助...

1个回答

您所做的实际上取决于分析的目标。我不确定您分析的确切目标是什么,但我将通过几个示例,希望其中一个适用于您的情况。

案例 1:一个量化变量测量两次

假设您进行了一项人体主题研究,其中让参与者进行了两次统计测试,并且您想了解第二次测量的平均分数是否与第一次测量不同(以确定是否发生了学习)。如果分数 test1 和 test2 存储在数据框 d 中,您可以完全使用 lm() 函数执行此操作,如下所示:

mod <- lm(test2 - test1 ~ 1, data = d)
summary(mod)

截距的检验就是检验test1和test2的差值。请注意,对于 test1 和 test2 之间的差异,您将没有 delta-R^2 ——相反,您对效应大小的测量应该类似于 cohen 的 d。

案例 2a:一个定量变量测量两次,一个二分变量,在受试者之间完全测量

假设我们有相同的研究设计,但我们想知道男性和女性的学习率是否不同。因此,我们有一个定量变量(测试性能)被测量两次,一个二分变量被测量一次。假设 test1、test2 和 gender 都包含在数据框 d 中,我们也可以只使用 lm() 来测试这个模型,如下所示:

mod <- lm(test2 - test1 ~ gender, data = d)
summary(mod)
lm.sumSquares(mod) # lm.sumSquares() is located in the lmSupport package, and gives the change in R^2 due to the between-subjects part of the model

假设性别居中(即,编码,例如,男性 = -.5 和女性 = +.5),此模型中的截距是测试 1 和测试 2 之间差异的测试,男性和女性的平均值。性别系数是时间和性别之间的交互作用。要获得跨时间平均的性别影响,您必须执行以下操作:

mod <- lm(rowMeans(cbind(test2, test1)) ~ gender, data = d)
summary(mod)

案例 2b:一个定量变量测量了两次,一个定量变量只测量了一次

让我们再次假设我们有一个定量变量测量了两次,一个定量变量测量了一次。因此,例如,假设我们对统计数据的基线兴趣进行了衡量,我们想确定基线兴趣水平较高的人是否从时间 1 到时间 2 学得更多。我们首先必须以兴趣为中心,如:

d$interestc <- d$interest - mean(d$interest)

假设 test1、test2 和 interestc 都在数据框 d 中,那么可以非常类似于案例 1a 来测试这个问题:

mod <- lm(test2 - test1 ~ interestc, data = d)
summary(mod)
lm.sumSquares(mod)

再一次,这个模型中的截距测试了兴趣的平均值,测试分数是否从时间 1 到时间 2 变化。但是,这种解释仅在兴趣居中时才成立。兴趣系数是时间的影响是否取决于基线兴趣。如上所述,我们可以通过对 test1 和 test 2 进行平均,并测试感兴趣的效果对这个复合变量的影响,从而获得跨时间平均的感兴趣的效果。

案例 2c:一个定量变量测量了两次,一个分类变量只测量了一次

假设您的主体间变量是一个类别,仅测量一次。因此,例如,假设您对不同种族(白人、亚洲人、黑人和西班牙裔)的人在时间 1 到时间 2 的学习量是否不同感兴趣。假设 test1、test2 和 race 在数据框 d 中,您首先需要对比代码竞赛。这可以使用计划的正交对比、虚拟代码或使用效果代码来完成,具体取决于您要测试的特定假设/问题(如果您正在寻找一个辅助函数来执行此操作,我建议查看 lm.setContrasts()) . 假设竞态变量已经进行了对比编码,您将使用与上述两种情况非常相似的 lm(),如下所示:

mod <- lm(test2 - test1 ~ race, data = d)
summary(mod)
lm.sumSquares(mod)

假设种族对比居中,则此模型中的截距再次成为时间的“主要影响”。种族对比的系数是这些对比和时间之间的相互作用。要获得种族的综合效果,请使用以下代码:

Anova(mod, type = 3)

案例 3:一个定量变量测量了 3 次(即三级受试者内操作)

假设您从案例一开始在设计中添加了第三个测量点。因此,您的参与者进行了三次而不是两次的统计测试。在这里,您有几个选择,具体取决于您是否想要对时间点之间的差异进行综合测试(有时您不需要)。

例如,假设您的主要假设是测试分数将从时间 1 到时间 3 线性增加。假设 test1、test2 和 test3 在数据框 d 中,可以通过首先创建以下组合来测试该假设:

d$lin <- d[, paste("test", sep = "", 1:3)] %*% c(-1, 0, 1)

然后,您将测试使用 lin 作为因变量的仅截距模型是否具有不同于 0 的截距,如:

mod <- lm(lin ~ 1, data = d)
summary(mod)

这将使您测试统计分数是否随着时间的推移而增加。当然,您可以根据您的特定假设创建其他类型的自定义差异分数。

如果您关心重要性综合测试,则需要使用 car 包中的 Anova() 函数。具体实现有点复杂。基本上,您可以使用 lm() 指定哪些变量在主题内,哪些在主题间。然后创建模型的主体内部分(即,指定 test1、test2 和 test3 中的哪一个首先被测量、第二个和第三个测量),然后通过创建一个名为 idata 的数据框将该模型传递给 Anova()。使用我的假设示例:

mod <- lm(cbind(test1, test2, test3) ~ 1, data = d) # No between-subjects portion of the model
idata <- data.frame(time = c("time1", "time2", "time3")) # Specify the within-subjects portion of the model
mod.A <- Anova(mod, idata = idata, idesign = ~time, type = 3) # Gives multivariate tests.  For univariate tests, add multivariate = FALSE
summary(mod.A)

idesign 语句告诉 Anova 在模型中包含时间变量(由 test1、test2 和 test3 组成)。此代码将为您提供时间对考试成绩影响的综合测试。

案例 4:一个定量变量测量了 3 次,一个受试者间定量变量

这个案例是案例 3 的简单扩展。如上所述,如果您只关心 1 个自由度测试,您可以简单地使用您的受试者内变量创建自定义差异分数。因此,假设 test1、test2、test3 和兴趣都在数据框 d 中,并假设我们对时间对测试分数的线性影响(以及时间的这些影响如何随基线兴趣而变化)感兴趣,你会做以下:

d$lin <- d[, paste("test", sep = "", 1:3)] %*% c(-1, 0, 1)

然后,执行以下操作(以平均为中心的兴趣):

mod <- lm(lin ~ interestc, data = d)
summary(mod)
lm.sumSquares(mod)

如果您想要综合测试,请执行以下操作:

mod <- lm(cbind(test1, test2, test3) ~ interest, data = d) # We now have a between-subjects portion of the model
idata <- data.frame(time = c("time1", "time2", "time3"))
mod.A <- Anova(mod, idata = idata, idesign = ~time * interest, type = 3) # The idesign statement assumes that we're interested in the interaction between time and interest
summary(mod.A)

其他情况: 为简洁起见,我将省略这些,但它们是我已经描述的内容的简单扩展。

请注意,时间超过 2 个级别的(单变量)综合测试都假设为球形。随着关卡数量的增加,这种假设变得非常站不住脚。如果您的设计中有很多测量点(例如,4+),我强烈建议您使用多级建模之类的东西,并转移到专门用于该技术的包(例如nlmelme4

希望这可以帮助!