Regresi linier dengan tindakan berulang di R

12

Saya tidak dapat menemukan cara melakukan regresi linier dalam R dalam untuk desain ukuran berulang. Dalam pertanyaan sebelumnya (masih belum dijawab) disarankan kepada saya untuk tidak menggunakan lmmelainkan menggunakan model campuran. Saya menggunakan lmcara berikut:

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

(detail lebih lanjut tentang dataset dapat ditemukan di tautan di atas)

Namun saya tidak dapat menemukan contoh di internet dengan kode R yang menunjukkan bagaimana melakukan analisis regresi linier.

Yang saya inginkan adalah di satu sisi sebidang data dengan garis yang cocok dengan data, dan di sisi lain nilai bersama dengan nilai-p untuk uji signifikansi untuk model.R2

Adakah yang bisa memberikan saran? Contoh kode R dapat sangat membantu.


Sunting
Menurut saran yang saya terima sejauh ini, solusi untuk menganalisis data saya untuk memahami apakah ada hubungan linier antara dua variabel Velocity_response (berasal dari kuesioner) dan Velocity (berasal dari kinerja) adalah sebagai berikut:

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

Hasil ringkasan memberikan ini:

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

Sekarang, saya tidak mengerti di mana saya bisa mendapatkan R ^ 2 dan nilai-p yang sesuai menunjukkan saya apakah ada hubungan linier antara dua variabel atau tidak, saya juga tidak mengerti bagaimana data saya dapat diplot dengan garis yang pas dengan regresi.

Adakah yang bisa begitu baik untuk menerangi saya? Saya benar-benar membutuhkan bantuan kalian ...

L_T
sumber
"Model Efek Campuran dan Ekstensi dalam Ekologi dengan R" oleh Zuur et al. adalah pengantar yang bagus untuk model efek campuran linier, yang kurang fokus pada teori dan lebih pada penerapan metodologi.
Roland
Yang terhormat Roland, saya percaya bahwa buku itu berguna, tetapi saya lebih suka mencari sesuatu secara online ... apakah Anda punya halaman web yang disarankan?
L_T
1
Seperti yang saya katakan di posting sebelumnya, lm () memiliki plot yang terkait dengannya. Jadi, jika model Anda adalah M1 Anda dapat menggunakan plot (M1).
Peter Flom - Reinstate Monica
Sayang @PeterFlom ya, tetapi Anda juga mengatakan kepada saya untuk menghindari penggunaan lm untuk desain tindakan berulang. Jadi, pertanyaan saya adalah apakah saya harus menggunakan lm untuk menganalisis data saya atau fungsi lain. Ada saran?
L_T
1
Seperti yang saya katakan, lihat model multi-level. Di R, Anda bisa melihat nlmepaketnya. Juga, cari situs ini untuk topik ini, ada banyak hal yang ditulis di sini.
Peter Flom - Reinstate Monica

Jawaban:

17

Apa yang Anda lakukan sangat tergantung pada tujuan analisis. Saya tidak yakin persis apa tujuan analisis Anda, tetapi saya akan membahas beberapa contoh, dan mudah-mudahan salah satunya sesuai dengan situasi Anda.

Kasus 1 : Satu variabel kuantitatif yang diukur dua kali

Katakanlah Anda menjalankan studi subjek manusia di mana Anda memiliki peserta mengambil tes statistik dua kali dan Anda ingin mengetahui apakah skor rata-rata pada pengukuran kedua berbeda dari pengukuran pertama (untuk menentukan apakah pembelajaran terjadi). Jika skor test1 dan test2 disimpan dalam bingkai data d, Anda bisa melakukan ini sepenuhnya menggunakan fungsi lm (), seperti pada:

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

Tes intersep adalah tes perbedaan antara test1 dan test2. Perhatikan bahwa Anda tidak akan memiliki delta-R ^ 2 untuk perbedaan antara test1 dan test2 - sebagai gantinya, ukuran ukuran efek Anda harus sesuatu seperti cohen d.

Kasus 2a : Satu variabel kuantitatif diukur dua kali, satu variabel dikotomis, diukur secara total antara subjek

Katakanlah kita memiliki desain studi yang sama, tetapi kita ingin tahu apakah perbedaan tingkat pembelajaran terjadi untuk pria dan wanita. Jadi, kami memiliki satu variabel kuantitatif (kinerja tes) yang diukur dua kali, dan satu variabel dikotomis, diukur satu kali. Dengan asumsi test1, test2, dan gender semuanya terkandung dalam bingkai data d, Kita juga bisa menguji model ini hanya menggunakan lm (), seperti pada:

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

Dengan asumsi gender terpusat (yaitu, berkode, misalnya, pria = -5 dan wanita = +5), intersep dalam model ini adalah tes perbedaan antara tes 1 dan tes 2, rata-rata di antara pria dan wanita. Koefisien untuk gender adalah interaksi antara waktu dan gender. Untuk mendapatkan efek gender, rata-rata sepanjang waktu, Anda harus melakukan:

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

Kasus 2b : Satu variabel kuantitatif diukur dua kali, satu variabel kuantitatif, hanya diukur sekali

Mari kita asumsikan lagi bahwa kita memiliki satu variabel kuantitatif yang diukur dua kali dan satu variabel kuantitatif diukur satu kali. Jadi, misalnya, katakanlah kita memiliki ukuran minat dasar dalam statistik dan kami ingin menentukan apakah orang-orang yang memiliki tingkat minat awal yang lebih tinggi belajar lebih banyak dari waktu 1 ke waktu 2. Kami pertama-tama harus memusatkan minat, seperti pada :

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

Dengan asumsi bahwa test1, test2, dan interestc semuanya ada dalam kerangka data d, pertanyaan ini kemudian dapat diuji dengan sangat mirip dengan Kasus 1a:

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

Sekali lagi, intersep dalam model ini menguji apakah, rata-rata lintas minat, skor tes berubah dari waktu 1 ke waktu 2. Namun, interpretasi ini hanya berlaku ketika minat terpusat. Koefisien bunga adalah apakah pengaruh waktu tergantung pada minat dasar. Kita bisa mendapatkan efek minat, rata-rata sepanjang waktu, dengan rata-rata bersama-sama test1 dan tes 2, seperti di atas, dan menguji efek bunga pada variabel komposit ini.

Kasus 2c : Satu variabel kuantitatif diukur dua kali, satu variabel kategori, hanya diukur sekali

Mari kita asumsikan bahwa variabel antar-subjek Anda adalah kategori, hanya diukur sekali. Jadi, misalnya, mari kita asumsikan bahwa Anda tertarik pada apakah orang-orang dari ras yang berbeda (Putih vs Asia vs Hitam vs Hispanik) memiliki jumlah pembelajaran yang berbeda dari waktu 1 ke waktu 2. Dengan asumsi test1, test2, dan ras ada dalam bingkai data d , Anda harus terlebih dahulu membandingkan kode ras. Ini dapat dilakukan dengan menggunakan kontras ortogonal yang direncanakan, kode dummy, atau menggunakan kode efek, tergantung pada hipotesis / pertanyaan spesifik yang ingin Anda uji (saya sarankan melihat lm.setContrasts () jika Anda mencari fungsi pembantu untuk melakukan ini) . Dengan asumsi variabel ras sudah dikodekan kontras, Anda akan menggunakan lm () sangat mirip dengan dua kasus di atas, seperti pada:

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

Dengan asumsi kontras ras terpusat, intersep dalam model ini, sekali lagi, "efek utama" waktu. Koefisien untuk perbedaan ras adalah interaksi antara perbedaan dan waktu tersebut. Untuk mendapatkan efek omnibus ras, gunakan kode berikut:

Anova(mod, type = 3)

Kasus 3 : Satu variabel kuantitatif diukur 3 kali (yaitu, manipulasi subjek dalam tiga level)

Mari kita asumsikan bahwa Anda menambahkan titik pengukuran ketiga ke desain dari kasus satu. Jadi, peserta Anda mengikuti tes statistik tiga kali, bukan dua kali. Di sini Anda memiliki beberapa pilihan, tergantung pada apakah Anda menginginkan tes omnibus tentang perbedaan antara titik waktu (kadang-kadang tidak).

Sebagai contoh, katakanlah hipotesis utama Anda adalah bahwa skor tes akan meningkat secara linear dari waktu 1 ke waktu 3. Dengan asumsi bahwa test1, test2, dan test3 ada dalam kerangka data d, hipotesis ini dapat diuji dengan terlebih dahulu membuat komposit berikut:

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

Kemudian Anda akan menguji apakah model intersep hanya menggunakan lin sebagai variabel dependen memiliki intersep yang berbeda dari 0, seperti pada:

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

Ini akan memberi Anda tes apakah skor statistik meningkat seiring waktu. Anda dapat, tentu saja, membuat jenis skor perbedaan khusus lainnya, tergantung pada hipotesis khusus Anda.

Jika Anda peduli tentang tes signifikansi omnibus, Anda perlu menggunakan fungsi Anova () dari paket mobil. Implementasi spesifik sedikit berbelit-belit. Pada dasarnya, Anda menentukan variabel mana yang berada di dalam subjek dan yang mana di antara subyek yang menggunakan lm (). Anda kemudian membuat bagian dalam-subyek dari model (yaitu, tentukan test1, test2, dan test3 mana yang diukur pertama, kedua, dan ketiga) dan kemudian meneruskan model itu ke Anova () dengan membuat kerangka data yang disebut idata. Menggunakan contoh hipotesis saya:

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)

Pernyataan idesign memberitahu Anova untuk memasukkan variabel waktu (terdiri dari test1, test2, dan test3) dalam model. Kode ini akan memberi Anda tes omnibus Anda tentang efek waktu pada nilai tes.

Kasus 4 : Satu variabel kuantitatif diukur 3 kali, satu variabel kuantitatif antar subyek

Kasing ini merupakan perpanjangan sederhana Kasing 3. Seperti di atas, jika Anda hanya peduli dengan 1 derajat tes kebebasan, Anda cukup membuat skor perbedaan khusus dengan variabel dalam-subyek Anda. Jadi, dengan asumsi bahwa test1, test2, test3, dan minat semuanya ada dalam kerangka data d, dan dengan asumsi bahwa kami tertarik pada efek linear waktu pada nilai tes (dan bagaimana efek waktu itu berbeda dengan minat dasar), Anda akan melakukan pengikut:

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

Kemudian, lakukan hal berikut (dengan minat yang berpusat pada mean):

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

Jika Anda ingin tes omnibus, lakukan hal berikut:

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)

Kasus lain: Saya akan menghilangkan ini untuk singkatnya, tetapi mereka adalah ekstensi sederhana dari apa yang telah saya jelaskan.

Harap perhatikan bahwa tes omnibus (univariat) waktu di mana waktu memiliki lebih dari 2 level, semuanya mengasumsikan kebulatan. Asumsi ini menjadi sangat tidak bisa dipertahankan saat Anda meningkatkan jumlah level. Jika Anda memiliki beberapa poin pengukuran dalam desain Anda (katakanlah, 4+) Saya sangat menyarankan Anda menggunakan sesuatu seperti pemodelan multilevel dan pindah ke paket yang khusus untuk teknik ini (seperti nlme atau lme4 .

Semoga ini membantu!

Patrick S. Forscher
sumber
Dear Patrick @ user1188407, terima kasih banyak Anda telah sangat baik hati dalam memberikan jawaban seperti itu. Sayangnya kasus saya mungkin cocok dengan apa yang Anda tulis dalam kalimat terakhir ... jadi saya akan membutuhkan contoh kode R untuk memahami cara memperlakukan data saya. Memang jika Anda melihat desain percobaan saya yang dijelaskan dalam posting sebelumnya stackoverflow.com/questions/12182373/... Anda dapat melihat bahwa saya memiliki variabel yang diukur 4 kali (yaitu kecepatan diukur dalam 4 kondisi)
L_T
dan saya ingin mencari apakah ada hubungan linier dengan variabel (velocity_response) yang mengekspresikan kecepatan yang dirasakan dalam empat kondisi. Jadi setiap peserta menjalani 4 kondisi dan kemudian mengevaluasi persepsi kondisi tersebut. Saya ingin tahu apakah kinerjanya terkait dengan persepsi ...
L_T
Nah jika Anda ingin menggunakan solusi pemodelan bertingkat, Anda dapat memanfaatkan banyak sumber daya online yang berbeda. Untuk memulainya, Anda harus melihat pada paket nlme dan sketsa ini . Sketsa sedikit ketinggalan zaman (2002), saya merasa berguna ketika saya belajar tentang pemodelan multi-level. Akhirnya, Anda dapat memeriksa buku yang diterbitkan oleh pembuat paket nlme.
Patrick S. Forscher
Patrick yang terhormat @ user1188407 terima kasih. Saya mempelajari model bertingkat, dan saya sampai pada rumus ini untuk menganalisis data saya: lme (Velocity_response ~ Velocity * Subject, data = scrd, random = ~ 1 | Subject) Bisakah Anda mengonfirmasi bahwa rumus ini benar untuk analisis saya? ingin tampil di data saya? Namun, saya tidak mengerti bagaimana saya bisa mendapatkan R ^ 2 dan nilai-p, atau bagaimana merencanakan grafik dengan poin dan garis yang sesuai dengan regresi. Bisakah bantu saya? Saya bukan ahli statis ...
L_T
Rumus itu tampaknya benar bagi saya berdasarkan pemahaman saya tentang studi Anda (dan dengan asumsi Anda telah memformat data Anda dalam format periode orang). Anda akan mendapatkan nilai-p Anda dengan menyimpan hasil analisis Anda ke objek (seperti yang saya lakukan dalam contoh saya) dan mendapatkan ringkasan objek itu. Namun, karena perbedaan antara model multilevel dan regresi tradisional (misalnya, dalam metrik ukuran efek - tidak ada metrik standar dalam model multilevel) Saya sangat menyarankan Anda membaca lebih lanjut tentang teknik ini sebelum menggunakannya. Sepertinya pengguna lain telah merekomendasikan beberapa opsi bagus.
Patrick S. Forscher