Лінійна регресія з повторними заходами в R


12

Я не зміг зрозуміти, як виконати лінійну регресію в R для повторного проекту вимірювання. У попередньому запитанні (все ще без відповіді) мені було запропоновано не використовувати, lmа скоріше використовувати змішані моделі. Я використовував lmнаступним чином:

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

(більш детальну інформацію про набір даних можна знайти за посиланням вище)

Однак мені не вдалося знайти в Інтернеті жодного прикладу з кодом R, який показує, як провести аналіз лінійної регресії.

Що я хочу, це з одного боку графік даних з рядком, що відповідає даним, а з іншого боку - значення разом із значенням p для тесту значущості для моделі.R2

Хтось може надати якісь пропозиції? Будь-який приклад коду R може бути корисним.


Редагувати
За пропозицією, яку я отримав до цього часу, рішення моїх аналізів моїх даних для того, щоб зрозуміти, чи існує лінійна залежність між двома змінними Velocity_response (що випливає з анкети) та швидкістю (випливає з результатів):

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, що вказує на те, що між двома змінними існує лінійна залежність чи ні, і я не зрозумів, як мої дані можна побудувати за допомогою лінії, що відповідає регресія.

Чи може хтось бути таким добрим, щоб мене просвітити? Мені дуже потрібна ваша допомога, хлопці ...


"Моделі та розширення змішаних ефектів в екології з R" Zuur et al. це приємне вступ до лінійних моделей змішаних ефектів, що менше зосереджується на теорії та більше на застосуванні методології.
Роланд

Шановний Ролан, я вважаю, що ця книга є корисною, але я швидше шукаю щось в Інтернеті ... чи є у вас веб-сторінка?
L_T

1
Як я вже говорив у вашій попередній публікації, у lm () пов'язаний сюжет. Отже, якщо ваша модель M1, ви можете використовувати сюжет (M1).
Пітер Флом - Відновити Моніку

дорогий @PeterFlom так, але ви також сказали мені уникати використання lm для повторних проектів заходів. Отже, у мене питання, чи потрібно використовувати lm для аналізу своїх даних або іншої функції. Будь-яка пропозиція?
L_T

1
Як я вже казав, подивіться на багаторівневі моделі. У R ви можете подивитися на nlmeпакет. Також пошукайте на цьому сайті тему, тут багато написано про неї.
Пітер Флом - Відновити Моніку

Відповіді:


17

Що ви дійсно робите, залежить від цілей аналізу. Я точно не впевнений, які цілі вашого аналізу, але я перегляну кілька прикладів, і, сподіваюся, один із них буде застосовний до вашої ситуації.

Випадок 1 : Одна кількісна величина, виміряна двічі

Скажімо, ви провели дослідження з предмету людини, в якому учасники мали двічі пройти статистичний тест, і ви хотіли з’ясувати, чи відрізняються середні бали за другим вимірюванням від першого вимірювання (щоб визначити, чи відбулося навчання). Якщо оцінки test1 та test2 зберігаються у кадрі даних d, ви можете це зробити цілком за допомогою функції lm (), як у:

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

Тест перехоплення - це тест різниці між тестом1 та тестом2. Зауважте, що для різниці між test1 та test2 у вас не буде delta-R ^ 2 - натомість міра розміру ефекту повинна бути чимось на зразок d Коена.

Випадок 2а : Одна кількісна змінна, виміряна двічі, одна дихотомна змінна, виміряна повністю між суб'єктами

Скажімо, у нас однаковий дизайн дослідження, але ми хочемо знати, чи виникали різні темпи навчання у чоловіків і жінок. Отже, у нас є одна кількісна величина (тестова ефективність), яка вимірюється двічі, і одна дихотомна змінна, виміряна один раз. Якщо припустити тести1, test2 та стать містяться у кадрі даних 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, то це питання може бути перевірено дуже аналогічно випадку Case 1a:

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

Ще раз перехоплення в цій моделі перевіряє, чи змінюються середні по інтересах показники тестів час від часу до часу 2. Однак таке трактування має місце лише тоді, коли інтерес зосереджений. Коефіцієнт відсотків - чи залежить вплив часу від базових відсотків. Ми могли б отримати ефект інтересу, усереднений за часом, шляхом усереднення разом тесту1 та тесту 2, як було зазначено вище, і тестуючи вплив інтересу на цю складову змінну.

Випадок 2в : Одна кількісна змінна, виміряна двічі, одна категоріальна змінна, виміряна лише один раз

Припустимо, що ваша змінна між суб'єктами була категорією, виміряною лише один раз. Отже, для припущення, припустимо, що вас цікавило, чи люди різних рас (Білий та Азіатський проти Чорних проти іспаномовних) отримували різні обсяги навчання від часу до часу 2. Припустимо, що test1, test2 та раса перебувають у кадрі даних d , вам спочатку потрібно буде порівняти гонку коду. Це можна зробити за допомогою запланованих ортогональних контрастів, фіктивних кодів або використання кодів ефектів, залежно від конкретних гіпотез / питань, які ви хочете перевірити (я рекомендую переглянути lm.setContrasts (), якщо ви шукаєте функцію помічника для цього) . Якщо припустити, що змінна гонки вже кодується контрастно, ви б використовували lm () дуже аналогічно вищезгаданим двом випадкам, як у:

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

Якщо припустити, що гоночні контрасти зосереджені, то перехоплення в цій моделі є, знову ж таки, "головним ефектом" часу. Коефіцієнти для расових контрастів - це взаємодія між цими контрастами та часом. Для отримання всебічних ефектів раси використовуйте наступний код:

Anova(mod, type = 3)

Випадок 3 : Одна кількісна величина, виміряна 3 рази (тобто трирівнева маніпуляція всередині суб'єктів)

Припустимо, що ви додали третю точку вимірювання до дизайну з першого випадку. Отже, ваші учасники тричі тестували статистику замість двічі. Тут у вас є кілька варіантів, залежно від того, чи хочете ви багатозначну перевірку відмінностей між часовими точками (іноді цього не робите).

Наприклад, скажімо, що ваша основна гіпотеза полягає в тому, що результати тесту лінійно збільшуватимуться з 1-го по часі 3. Якщо припустити, що тести1, тест2 та тест3 знаходяться у кадрі даних d, цю гіпотезу можна перевірити, спершу створивши наступний склад:

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

Тоді ви перевірите, чи має лише модель перехоплення, що використовує lin як залежну змінну, перехоплення, яке відрізняється від 0, як у:

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

Це дозволить вам перевірити, чи збільшувались показники статистики з часом. Звичайно, ви можете створювати інші типи індивідуальних різницьких балів, залежно від конкретних гіпотез.

Якщо ви переймаєтесь значущими тестами всебічного використання, вам потрібно скористатися функцією Anova () з автомобільного пакета. Конкретна реалізація дещо суперечить. В основному ви вказуєте, які змінні знаходяться в межах суб'єктів, а які між суб'єктами, використовуючи lm (). Потім ви створюєте частину моделі піддослідної моделі (тобто вказуєте, які з test1, test2 та test3 були виміряні першою, другою та третьою), а потім передаєте цю модель Anova (), створюючи кадр даних під назвою idata. Використовуючи мій гіпотетичний приклад:

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)

Інші випадки: я пропущу це для стислості, але вони є простими розширеннями того, що я вже описав.

Зверніть увагу, що (одновимірні) тести всебічного часу, коли час має більше двох рівнів, припускають сферичність. Це припущення стає досить бездоганним у міру збільшення кількості рівнів. Якщо у вашому дизайні досить багато точок вимірювання (скажімо, 4+), я настійно рекомендую вам використовувати щось на зразок багаторівневого моделювання та перейти до пакету, який спеціалізується на цій техніці (наприклад, nlme або lme4) .

Сподіваюся, це допомагає!


Шановний Патріку @ user1188407, велике спасибі, що ти дуже добре поставився до надання такої відповіді. На жаль, мій випадок, ймовірно, вписується в те, що ви написали в останніх реченнях ... тому мені знадобиться приклад коду R, щоб зрозуміти, як поводитися з моїми даними. Дійсно, якщо ви подивитесь на дизайн мого експерименту, описаний у попередньому дописі stackoverflow.com/questions/12182373/…, ви можете побачити, що у мене є змінна, виміряна 4 рази (тобто швидкість, виміряна в 4 умовах)
L_T

і я хочу знайти, чи існує лінійне відношення зі змінною (velocity_response), що виражає сприйняту швидкість у чотирьох умовах. Таким чином, кожен учасник пройшов 4 умови, а потім оцінив сприйняття цих умов. Хочеться знати, чи вистава пов’язана із сприйняттям ...
L_T

Добре, якщо ви хочете використовувати багаторівневе рішення для моделювання, ви можете використовувати безліч різних інтернет-ресурсів. Для початку варто поглянути на пакет nlme та цю віньєтку . Віньєтка трохи застаріла (2002 р.), Я вважав її корисною, коли я дізнавався про багаторівневе моделювання. Нарешті, ви можете перевірити книгу, видану виробниками пакету nlme.
Патрік С. Форшер

Шановний Патріку @ user1188407 дякую. Я вивчав багаторівневі моделі, і прийшов до цієї формули, щоб проаналізувати свої дані: lme (Velocity_response ~ Velocity * Subject, data = scrd, random = ~ 1 | Subject) Чи можете ви, будь ласка, підтвердити, що ця формула є правильною для аналізу? Ви хочете виконати мої дані? Однак я не розумію, як я можу отримати значення R ^ 2 та p-значення, а також як побудувати графік з точками та лінією, що відповідає регресії. Чи можете ви мені допомогти? Я не є статистиком ...
L_T

Формула здається мені правильною, грунтуючись на моєму розумінні вашого дослідження (і якщо припустити, що ви відформатували свої дані у форматі особи). Ви отримаєте свої p-значення, зберігаючи результати свого аналізу в об’єкт (як я це роблю в своїх прикладах) та отримуючи підсумок цього об'єкта. Однак через відмінності між багаторівневими моделями та традиційною регресією (наприклад, в показниках розміру ефекту - стандартної метрики у багаторівневих моделях немає) я настійно пропоную прочитати більше про цю методику перед її використанням. Схоже, інші користувачі рекомендували кілька хороших варіантів.
Патрік С. Форшер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.