Bagaimana saya bisa menguji variabel kategori yang sama di dua populasi?


8

Saya punya data yang terlihat sedikit seperti ini:

ID         Status
01         A
02         G
03         E
...        ...
100        G

Anda mendapatkan idenya, saya pikir. Saya memiliki data ini dari dua populasi yang terpisah (kohort) dan saya ingin membandingkan distribusi variabel status dalam satu populasi dengan distribusi di populasi lain. Pertanyaan yang saya jawab adalah sesuatu seperti ini: Jika Anda tidak tahu yang lebih baik, apakah ini berasal dari populasi yang sama? Saya pikir ini berarti saya harus melakukan chi Seseorang kuadrat, meskipun saya tidak yakin. Saya juga tidak yakin tentang metodologi untuk mengubah variabel dengan cara yang memungkinkan Anda untuk menjalankan tes. (Saya terutama ingin tahu bagaimana melakukan ini di R.)

Jawaban:


10

Biarkan saya (a) pertama menjelaskan ide yang mendasarinya daripada mekanika - mereka menjadi lebih jelas dalam retrospeksi. Kemudian (b) Saya akan berbicara tentang chi-square (dan apakah itu sesuai - mungkin tidak!), Dan kemudian (c) Saya akan berbicara tentang bagaimana melakukannya di R.

(a) Di bawah nol, populasinya sama. Bayangkan Anda menempatkan dua kohort Anda ke dalam satu set data besar tetapi tambahkan kolom yang menyimpan label kohort. Kemudian di bawah nol, label kohort secara efektif hanya label acak yang memberi tahu Anda lebih banyak tentang distribusi yang berasal dari pengamatan.

Di bawah alternatif, tentu saja, label kohort penting - mengetahui label kohort memberi tahu Anda lebih daripada tidak mengetahuinya karena distribusi di bawah dua label berbeda.

(Ini segera menyarankan beberapa jenis tes permutasi / uji pengacakan di mana statistik - yang sensitif terhadap alternatif - dihitung pada sampel dibandingkan dengan distribusi statistik yang sama dengan label kohort dipindahkan ke baris secara acak. Jika Anda melakukan semua kemungkinan penugasan ulang adalah tes permutasi, jika Anda hanya mengambil sampelnya, ini adalah tes pengacakan.)

(b) Jadi sekarang, bagaimana melakukan chi-square?

Anda menghitung nilai yang diharapkan di bawah nol. Karena label kohort tidak menjadi masalah di bawah nol, Anda menghitung angka yang diharapkan di setiap sel berdasarkan distribusi keseluruhan:

                       Status
                 A   B   ...  E   ...  G ...      Total
  Cohort 1:     10  15       18                    84
  Cohort 2:      9   7       25                    78

  Total:        19  22   ... 43 ...               162

Jadi jika distribusinya sama, tidak akan ada hubungan antara kohort dan status, dan (tergantung pada total baris dan total kolom) jumlah yang diharapkan dalam sel adalah baris-total-i kolom-total-j / keseluruhan-total(saya,j)×

Jadi, Anda hanya mendapatkan tes independensi chi-square biasa .

NAMUN!

Jika label status membentuk kategori yang dipesan , uji chi-square ini membuang banyak informasi - itu akan memiliki daya yang rendah terhadap alternatif yang menarik (seperti sedikit pergeseran menuju kategori yang lebih tinggi atau lebih rendah). Anda harus dalam situasi itu melakukan sesuatu yang lebih cocok - yaitu, yang memperhitungkan pemesanan itu. Ada banyak pilihan.

-

(c) Sekarang tentang bagaimana melakukannya di R - itu tergantung pada bagaimana data Anda saat ini diatur dalam R - itu akan sangat membantu untuk memiliki contoh yang dapat direproduksi seperti subset dari data Anda!

Saya akan menganggap Anda memilikinya dalam bingkai data dengan dua kolom, satu dengan status (faktor) dan satu dengan kohort (faktor kedua).

Seperti itu:

  status  cohort
1      B Cohort1
2      B Cohort1
3      D Cohort1
4      B Cohort1
5      C Cohort1
6      D Cohort1
. 
.
. 
25      G Cohort2
26      E Cohort2
27      E Cohort2
28      D Cohort2
29      C Cohort2
30      G Cohort2

Kemudian jika itu adalah kerangka data yang disebut statusresultsAnda akan mendapatkan tabel seperti yang saya lakukan sebelumnya dengan:

> with(statusresults,table(cohort,status))
         status
cohort    A B C D E F G
  Cohort1 2 6 7 3 0 0 0
  Cohort2 0 0 2 2 4 1 3

Dan untuk tes chisquare, Anda hanya perlu:

> with(statusresults, chisq.test(status, cohort))

    Pearson's Chi-squared test

data:  status and cohort 
X-squared = 18.5185, df = 6, p-value = 0.005059

Warning message:
In chisq.test(status, cohort) : Chi-squared approximation may be incorrect

(peringatan itu karena jumlah yang diharapkan rendah di beberapa sel, mengingat saya menggunakan sampel yang sangat kecil)

Jika Anda telah memesan kategori untuk status Anda harus mengatakannya, sehingga kami dapat mendiskusikan kemungkinan lain untuk analisis selain chisquare polos.


Terima kasih untuk contoh chi-2! Apa yang akan Anda rekomendasikan jika jumlah sel sebenarnya serendah dalam contoh Anda? Apakah prasyarat untuk uji chi-square dilanggar?
Mark Heckmann

@ MarkHeckmann Sebenarnya tidak ada 'prasyarat' seperti itu. Distribusi chi-square selalu merupakan perkiraan terhadap nol-distribusi sebenarnya dari chi-square, dan itu adalah masalah seberapa kasar perkiraan yang Anda bisa toleransi (misalnya berapa banyak ketidakakuratan dalam nilai-p yang dapat Anda toleransi di bagian mana dari distribusi). Aturan praktis yang paling umum terlalu ketat, seperti yang dibahas banyak makalah. Tetapi jika angka yang diharapkan terlalu kecil, saya akan menggunakan simulasi dari distribusi nol dari uji chi-square, atau memilih statistik yang sesuai dan menggunakan pendekatan permutasi yang dijelaskan dalam (a).
Glen_b -Reinstate Monica

1

Anda benar tentang gagasan melakukan tes Chi-squared. Jadi begini:

#Create two data sets (id, outcome and group label)
Dat1 <- as.data.frame(cbind(1:999,sample(c("A","G","E"),999,replace=T,prob=c(.2,.4,.4)),"group1"))
Dat2 <- as.data.frame(cbind(1:500,sample(c("A","G","E"),500,replace=T,prob=c(.4,.2,.4)),"group2"))

#Combine data sets
Dat  <- rbind(Dat1,Dat2)

#Receive descriptive statistics and compute Chi-Square
attach(Dat)
table(V3,V2)
chisq.test(table(V3,V2))
detach(Dat)

Jika benar Anda Chi-Square akan signifikan, maka ada perbedaan yang signifikan antara distribusi kedua kelompok. Untuk referensi mulai dengan lihat: http://en.wikipedia.org/wiki/Pearson%27s_chi-squared_test http://www.statmethods.net/stats/frequencies.html


0

Anda mungkin tertarik dengan makalah ini [1]. Kutipan dari abstrak:
Tujuan dari uji dua sampel (alias uji homogenitas) adalah, diberikan dua set sampel, untuk menilai apakah distribusi probabilitas di balik sampel sama atau tidak. Dalam makalah ini, kami mengusulkan metode non-parametrik baru dari uji dua sampel berdasarkan penduga rasio densitas kuadrat-terkecil. Melalui berbagai percobaan, kami menunjukkan bahwa metode yang diusulkan secara keseluruhan menghasilkan kesalahan tipe-II yang lebih kecil (yaitu, probabilitas menilai dua distribusi menjadi sama ketika mereka sebenarnya berbeda) daripada metode canggih, dengan sedikit kesalahan tipe-I yang lebih besar (yaitu, kemungkinan menilai kedua distribusi menjadi berbeda ketika mereka sebenarnya sama).

Para penulis juga menyediakan kode matlab untuk hal yang sama [2].

[1] http://www.ms.ku-tokyo.ac.jp/2011/LSTT.pdf
[2] http://www.ms.ku-tokyo.ac.jp/software.html#uLSIF

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.