Hồi quy tuyến tính với các số đo lặp lại trong R


12

Tôi không thể tìm ra cách thực hiện hồi quy tuyến tính trong R trong một thiết kế đo lặp lại. Trong một câu hỏi trước đây (vẫn chưa được trả lời) tôi đã đề nghị không sử dụng lmmà chỉ sử dụng các mô hình hỗn hợp. Tôi đã sử dụng lmtheo cách sau:

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

(chi tiết hơn về bộ dữ liệu có thể được tìm thấy tại liên kết ở trên)

Tuy nhiên tôi không thể tìm thấy trên internet bất kỳ ví dụ nào với mã R chỉ ra cách thực hiện phân tích hồi quy tuyến tính.

Điều tôi muốn là một mặt là một biểu đồ của dữ liệu với dòng khớp dữ liệu và mặt khác giá trị cùng với giá trị p để kiểm tra mức độ quan trọng của mô hình.R2

Có ai có thể cung cấp một số gợi ý? Bất kỳ ví dụ mã R có thể giúp đỡ rất nhiều.


Chỉnh sửa
Theo đề xuất tôi nhận được cho đến nay, giải pháp phân tích dữ liệu của tôi để tìm hiểu liệu có mối quan hệ tuyến tính giữa hai biến Velocity_response (xuất phát từ bảng câu hỏi) và Velocity (xuất phát từ hiệu suất) nên là:

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

Kết quả của bản tóm tắt đưa ra điều này:

    > 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
> 

Bây giờ, tôi không hiểu nơi tôi có thể nhận R ^ 2 và các giá trị p tương ứng chỉ ra cho tôi biết có mối quan hệ tuyến tính giữa hai biến hay không, tôi cũng không hiểu làm thế nào dữ liệu của tôi có thể được vẽ với dòng phù hợp với hồi quy.

Có ai có thể tử tế để soi sáng cho tôi không? Tôi thực sự cần sự giúp đỡ của bạn ...


"Các mô hình hiệu ứng hỗn hợp và mở rộng trong sinh thái học với R" của Zuur et al. là một giới thiệu tốt đẹp về các mô hình hiệu ứng hỗn hợp tuyến tính, tập trung ít hơn vào lý thuyết và nhiều hơn về ứng dụng phương pháp luận.
Roland

Roland thân mến, tôi tin rằng cuốn sách đó rất hữu ích, nhưng tôi muốn tìm kiếm một cái gì đó trên mạng ... bạn có trang web nào để đề xuất không?
L_T

1
Như tôi đã nói trong bài viết trước của bạn, lm () có một cốt truyện liên quan đến nó. Vì vậy, nếu mô hình của bạn là M1, bạn có thể sử dụng lô (M1).
Peter Flom - Tái lập Monica

thân yêu @PeterFlom có, nhưng bạn cũng nói với tôi để tránh sử dụng lm cho thiết kế các biện pháp lặp đi lặp lại. Vì vậy, câu hỏi của tôi là nếu tôi phải sử dụng lm để phân tích dữ liệu của tôi hoặc chức năng khác. Bất kì lời đề nghị nào?
L_T

1
Như tôi đã nói, nhìn vào các mô hình đa cấp. Trong R, bạn có thể nhìn vào nlmegói. Ngoài ra, tìm kiếm trang web này cho chủ đề, có rất nhiều viết về nó ở đây.
Peter Flom - Tái lập Monica

Câu trả lời:


17

Những gì bạn làm thực sự phụ thuộc vào mục tiêu của phân tích. Tôi không chắc chắn chính xác mục tiêu phân tích của bạn là gì, nhưng tôi sẽ xem qua một số ví dụ và hy vọng một trong số chúng sẽ được áp dụng cho tình huống của bạn.

Trường hợp 1 : Một biến số lượng tử đo được hai lần

Giả sử bạn đã thực hiện một nghiên cứu về chủ đề con người trong đó bạn có người tham gia thực hiện bài kiểm tra thống kê hai lần và bạn muốn tìm hiểu xem điểm trung bình của phép đo thứ hai có khác với phép đo đầu tiên hay không (để xác định xem việc học có xảy ra không). Nếu điểm test1 và test2 được lưu trữ trong khung dữ liệu d, Bạn có thể thực hiện việc này hoàn toàn bằng cách sử dụng hàm lm (), như trong:

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

Thử nghiệm đánh chặn là thử nghiệm về sự khác biệt giữa test1 và test2. Lưu ý rằng bạn sẽ không có delta-R ^ 2 cho sự khác biệt giữa test1 và test2 - thay vào đó, thước đo kích thước hiệu ứng của bạn phải giống như cohen d.

Trường hợp 2a : Một biến định lượng được đo hai lần, một biến nhị phân, được đo hoàn toàn giữa các đối tượng

Chúng ta hãy nói rằng chúng ta có cùng một thiết kế nghiên cứu, nhưng chúng ta muốn biết liệu tỷ lệ học tập khác nhau xảy ra đối với nam và nữ. Vì vậy, chúng ta có một biến định lượng (hiệu suất thử nghiệm) được đo hai lần và một biến nhị phân, được đo một lần. Giả sử test1, test2 và giới tính đều được chứa trong khung dữ liệu d, Chúng tôi cũng có thể kiểm tra mô hình này chỉ bằng cách sử dụng lm (), như trong:

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

Giả sử giới tính là trung tâm (ví dụ, được mã hóa, ví dụ: nam = -.5 và nữ = +.5), đánh chặn trong mô hình này là thử nghiệm về sự khác biệt giữa thử nghiệm 1 và thử nghiệm 2, tính trung bình giữa nam và nữ. Hệ số cho giới là sự tương tác giữa thời gian và giới tính. Để có được hiệu ứng của giới tính, tính trung bình theo thời gian, bạn sẽ phải làm:

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

Trường hợp 2b : Một biến định lượng được đo hai lần, một biến định lượng, chỉ đo một lần

Giả sử rằng một lần nữa chúng ta có một biến định lượng được đo hai lần và một biến định lượng được đo một lần. Vì vậy, ví dụ: giả sử chúng tôi có thước đo về mức độ quan tâm cơ bản trong thống kê và chúng tôi muốn xác định xem những người có mức độ quan tâm cơ bản cao hơn có học được nhiều hơn từ lần 1 đến lần 2. Trước tiên, chúng tôi phải tập trung vào sự quan tâm, như trong :

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

Giả sử test1, test2 và Interestc đều nằm trong khung dữ liệu d, câu hỏi này sau đó có thể được kiểm tra rất giống với Trường hợp 1a:

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

Một lần nữa, phần chặn trong mô hình này kiểm tra xem, tính trung bình theo sở thích, điểm kiểm tra thay đổi từ lần 1 sang lần 2. Tuy nhiên, cách giải thích này chỉ giữ khi quan tâm được tập trung. Hệ số lãi suất là liệu ảnh hưởng của thời gian phụ thuộc vào lãi suất cơ bản. Chúng ta có thể nhận được hiệu quả của sự quan tâm, tính trung bình theo thời gian, bằng cách tính trung bình cùng test1 và test 2, như trên và kiểm tra hiệu quả của sự quan tâm đối với biến tổng hợp này.

Trường hợp 2c : Một biến định lượng được đo hai lần, một biến phân loại, chỉ được đo một lần

Giả sử rằng biến giữa các chủ đề của bạn là một danh mục, chỉ được đo một lần. Vì vậy, ví dụ, giả sử rằng bạn quan tâm đến việc những người thuộc các chủng tộc khác nhau (Trắng so với Châu Á so với Tây Ban Nha) có lượng học tập khác nhau từ lần 1 đến lần 2. Giả sử test1, test2 và chủng tộc nằm trong khung dữ liệu d , trước tiên bạn sẽ cần phải tương phản cuộc đua mã. Điều này có thể được thực hiện bằng cách sử dụng độ tương phản trực giao theo kế hoạch, mã giả hoặc sử dụng mã hiệu ứng, tùy thuộc vào các giả thuyết / câu hỏi cụ thể mà bạn muốn kiểm tra (tôi khuyên bạn nên xem lm.setContrasts () nếu bạn đang tìm kiếm một hàm trợ giúp để thực hiện điều này) . Giả sử biến chủng tộc đã được mã hóa tương phản, bạn sẽ sử dụng lm () rất giống với hai trường hợp trên, như trong:

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

Giả sử sự tương phản của chủng tộc là trung tâm, việc đánh chặn trong mô hình này, một lần nữa, là "tác động chính" của thời gian. Các hệ số cho độ tương phản của cuộc đua là sự tương tác giữa những tương phản và thời gian. Để có được hiệu ứng omnibus của chủng tộc, hãy sử dụng mã sau:

Anova(mod, type = 3)

Trường hợp 3 : Một biến định lượng được đo 3 lần (nghĩa là thao tác bên trong ba cấp độ)

Giả sử rằng bạn đã thêm một điểm đo thứ ba vào thiết kế từ trường hợp thứ nhất. Vì vậy, những người tham gia của bạn đã kiểm tra số liệu thống kê ba lần thay vì hai lần. Ở đây bạn có một vài lựa chọn, tùy thuộc vào việc bạn có muốn kiểm tra omnibus về sự khác biệt giữa các điểm thời gian hay không (đôi khi bạn không).

Ví dụ: giả sử rằng giả thuyết chính của bạn là điểm kiểm tra sẽ tăng tuyến tính từ lần 1 đến lần 3. Giả sử test1, test2 và test3 nằm trong khung dữ liệu d, giả thuyết này có thể được kiểm tra bằng cách trước tiên tạo hỗn hợp sau:

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

Sau đó, bạn sẽ kiểm tra xem một mô hình chỉ chặn bằng cách sử dụng lin làm biến phụ thuộc có chặn khác 0 hay không, như trong:

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

Điều này sẽ cung cấp cho bạn bài kiểm tra xem điểm số thống kê có tăng theo thời gian hay không. Tất nhiên, bạn có thể tạo các loại điểm khác biệt tùy chỉnh, tùy thuộc vào các giả thuyết cụ thể của bạn.

Nếu bạn quan tâm đến các thử nghiệm omnibus có ý nghĩa, bạn cần sử dụng chức năng Anova () từ gói xe hơi. Việc thực hiện cụ thể là một chút phức tạp. Về cơ bản, bạn chỉ định biến nào nằm trong chủ thể và đối tượng nào là giữa các chủ thể bằng lm (). Sau đó, bạn tạo phần bên trong của mô hình (nghĩa là chỉ định phần nào của test1, test2 và test3 được đo trước, thứ hai và thứ ba) và sau đó chuyển mô hình đó cho Anova () bằng cách tạo khung dữ liệu gọi là idata. Sử dụng ví dụ giả thuyết của tôi:

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)

Câu lệnh idesign cho Anova bao gồm biến thời gian (bao gồm test1, test2 và test3) trong mô hình. Mã này sẽ cung cấp cho bạn các bài kiểm tra omnibus của bạn về tác động của thời gian đối với điểm kiểm tra.

Trường hợp 4 : Một biến định lượng được đo 3 lần, một biến định lượng giữa các chủ thể

Trường hợp này là một phần mở rộng đơn giản của Trường hợp 3. Như trên, nếu bạn chỉ quan tâm đến 1 độ kiểm tra tự do, bạn có thể chỉ cần tạo một điểm khác biệt tùy chỉnh với biến trong đối tượng của mình. Vì vậy, giả sử rằng test1, test2, test3 và sở thích đều nằm trong khung dữ liệu d và giả sử rằng chúng ta quan tâm đến tác động tuyến tính của thời gian lên điểm kiểm tra (và cách các hiệu ứng thời gian đó thay đổi theo sở thích cơ bản), bạn sẽ làm như sau

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

Sau đó, làm như sau (với lợi ích trung tâm):

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

Nếu bạn muốn kiểm tra omnibus, hãy làm như sau:

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)

Các trường hợp khác: Tôi sẽ bỏ qua những điều này cho ngắn gọn, nhưng chúng là những phần mở rộng đơn giản của những gì tôi đã mô tả.

Xin lưu ý rằng các bài kiểm tra omnibus (đơn biến) về thời gian trong đó thời gian có hơn 2 cấp độ đều giả định tính toàn cầu. Giả định này trở nên khá khó kiểm soát khi bạn tăng số lượng cấp độ. Nếu bạn có khá nhiều điểm đo trong thiết kế của mình (giả sử, 4+), tôi thực sự khuyên bạn nên sử dụng một cái gì đó như mô hình đa cấp và chuyển sang gói chuyên dùng cho kỹ thuật này (chẳng hạn như nlme hoặc lme4 .

Hi vọng điêu nay co ich!


Kính gửi Patrick @ user1188407, cảm ơn rất nhiều bạn đã rất tử tế khi cung cấp câu trả lời như vậy. Thật không may, trường hợp của tôi có thể phù hợp với những gì bạn đã viết trong các câu cuối ... vì vậy tôi sẽ cần một ví dụ mã R để hiểu cách xử lý dữ liệu của tôi. Thật vậy, nếu bạn nhìn vào thiết kế thử nghiệm của tôi được mô tả trong bài đăng stackoverflow.com/questions/12182373/, bạn có thể thấy rằng tôi có một biến đo được 4 lần (tức là vận tốc được đo trong 4 điều kiện)
L_T

và tôi muốn tìm nếu có một mối quan hệ tuyến tính với một biến (velocity_response) biểu thị vận tốc nhận thức trong bốn điều kiện. Vì vậy, mỗi người tham gia trải qua 4 điều kiện và sau đó đánh giá nhận thức về các điều kiện đó. Tôi muốn biết hiệu suất có liên quan đến nhận thức không ...
L_T

Chà, nếu bạn muốn sử dụng một giải pháp mô hình đa cấp, bạn có thể rút ra rất nhiều tài nguyên trực tuyến khác nhau. Để bắt đầu, bạn nên xem qua gói nlmehọa tiết này . Các họa tiết hơi lỗi thời (2002), tôi thấy nó hữu ích khi tôi đang học về mô hình đa cấp. Cuối cùng, bạn có thể kiểm tra cuốn sách được xuất bản bởi các nhà sản xuất gói nlme.
Patrick S. Forscher

Kính gửi Patrick @ user1188407 cảm ơn. Tôi đã nghiên cứu các mô hình đa cấp và tôi đã đến công thức này để phân tích dữ liệu của mình: lme (Velocity_response ~ Velocity * Chủ đề, dữ liệu = scrd, ngẫu nhiên = ~ 1 | Chủ đề) Bạn có thể vui lòng xác nhận với tôi rằng công thức này là chính xác cho phân tích muốn thực hiện trên dữ liệu của tôi? Tuy nhiên, tôi không hiểu làm thế nào tôi có thể nhận được R ^ 2 và giá trị p, cũng như làm thế nào để vẽ đồ thị với các điểm và đường thẳng phù hợp với hồi quy. Liệu bạn có thể giúp mình không? Tôi không phải là người tĩnh ...
L_T

Công thức có vẻ đúng với tôi dựa trên sự hiểu biết của tôi về nghiên cứu của bạn (và giả sử bạn đã định dạng dữ liệu của mình ở định dạng thời gian cá nhân). Bạn sẽ nhận được giá trị p của mình bằng cách lưu kết quả phân tích của bạn vào một đối tượng (như tôi làm trong các ví dụ của mình) và nhận tóm tắt về đối tượng đó. Tuy nhiên, do sự khác biệt giữa các mô hình đa cấp và hồi quy truyền thống (ví dụ: về số liệu kích thước hiệu ứng - không có số liệu chuẩn trong các mô hình đa cấp) Tôi khuyên bạn nên đọc thêm về kỹ thuật này trước khi sử dụng nó. Có vẻ như những người dùng khác đã đề xuất một số tùy chọn tốt.
Patrick S. Forscher
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.