Bagaimana melakukan uji-t dua sampel dalam R dengan memasukkan statistik sampel daripada data mentah?

32

Katakanlah kita memiliki statistik yang diberikan di bawah ini

gender mean sd n
f 1.666667 0.5773503 3
m 4.500000 0.5773503 4

Bagaimana Anda melakukan uji-t dua sampel (untuk melihat apakah ada perbedaan yang signifikan antara rata-rata pria dan wanita dalam beberapa variabel) menggunakan statistik seperti ini daripada data aktual?

Saya tidak dapat menemukan di mana pun di internet cara melakukan ini. Sebagian besar tutorial dan bahkan menangani manual dengan tes dengan set data aktual saja.

Alby
sumber
2
Artikel Wikipedia ini ditambah halaman bantuan untuk fungsi distribusi-t R (didapat langsung ?pt) - lihat khususnya pt()- miliki semua info yang Anda perlukan untuk melakukannya sendiri. Dan Anda akan belajar banyak tentang statistik dan R jika Anda melakukannya.
Josh O'Brien
2
Sudah ada jawaban yang bagus di sini, dan memang sangat mudah (dan praktik yang baik) untuk menulis fungsi untuk ini sendiri; Namun, saya hanya akan menambahkan bahwa Anda dapat melihat tsum.testfungsi dalam paket BSDA , yang mengimplementasikan uji-t (dua sampel; Welch atau sama-varians dan juga satu sampel) dari data ringkasan yang Anda berikan. Ini pada dasarnya bekerja seperti uji-t di vanilla R tetapi pada info ringkasan.
Glen_b -Reinstate Monica
1
Sejujurnya, ketika saya sedang belajar memprogram guru saya selalu berkata, "jangan menemukan kembali roda". Oleh karena itu, fungsi yang paling logis adalah tsum.test()dari yang BSDA librarydinyatakan oleh @Nick Cox. Itu melakukan hal yang persis sama dengan apa yang @macro tulis dalam baris kode. Jika pertanyaan itu diajukan, apa pemahaman perhitungan latar belakang untuk menghitung statistik uji-t dalam R maka Marco akan lebih cocok menjawabnya. Harap dicatat, saya tidak berusaha menyinggung siapa pun, hanya menyatakan pendapat pribadi saya terkait dengan latar belakang profesional saya. Dan @marco itu adalah beberapa pengkodean yang rapi :)
tcratius

Jawaban:

37

Anda dapat menulis fungsi sendiri berdasarkan apa yang kita ketahui tentang mekanisme dua-sample -testt . Sebagai contoh, ini akan melakukan pekerjaan:

# m1, m2: the sample means
# s1, s2: the sample standard deviations
# n1, n2: the same sizes
# m0: the null value for the difference in means to be tested for. Default is 0. 
# equal.variance: whether or not to assume equal variance. Default is FALSE. 
t.test2 <- function(m1,m2,s1,s2,n1,n2,m0=0,equal.variance=FALSE)
{
    if( equal.variance==FALSE ) 
    {
        se <- sqrt( (s1^2/n1) + (s2^2/n2) )
        # welch-satterthwaite df
        df <- ( (s1^2/n1 + s2^2/n2)^2 )/( (s1^2/n1)^2/(n1-1) + (s2^2/n2)^2/(n2-1) )
    } else
    {
        # pooled standard deviation, scaled by the sample sizes
        se <- sqrt( (1/n1 + 1/n2) * ((n1-1)*s1^2 + (n2-1)*s2^2)/(n1+n2-2) ) 
        df <- n1+n2-2
    }      
    t <- (m1-m2-m0)/se 
    dat <- c(m1-m2, se, t, 2*pt(-abs(t),df))    
    names(dat) <- c("Difference of means", "Std Error", "t", "p-value")
    return(dat) 
}
x1 = rnorm(100)
x2 = rnorm(200) 
# you'll find this output agrees with that of t.test when you input x1,x2
t.test2( mean(x1), mean(x2), sd(x1), sd(x2), 100, 200)
Difference of means       Std Error               t         p-value 
        -0.05692268      0.12192273     -0.46687500      0.64113442 
Makro
sumber
1
t.test(tt2 <- t.test2(mean(x1), mean(x2), sd(x1), sd(x2), length(x1), length(x2))); (tt <- t.test(x1, x2)); tt$statistic == tt2[["t"]]; tt$p.value == tt2[["p-value"]]
Hasil
20

Anda cukup menghitungnya dengan tangan:

t=(meanfmeanm)expected differenceSE  SE=sdf2nf+sdm2nm  where,    df=nm+nf2

Perbedaan yang diharapkan mungkin nol.

Jika Anda ingin nilai-p cukup gunakan pt()fungsi:

pt(t, df)

Jadi, kumpulkan kode:

> p = pt((((1.666667 - 4.500000) - 0)/sqrt(0.5773503/3 + 0.5773503/4)), (3 + 4 - 2))
> p
[1] 0.002272053

Ini mengasumsikan varians yang sama yang jelas karena mereka memiliki standar deviasi yang sama.

gung - Reinstate Monica
sumber
Beberapa hal: Bagaimana ini "dalam R"? Apa distribusi statistik uji (yaitu, bagaimana Anda beralih dari ini ke nilai )? p
Makro
Tingkat kebebasan yang diberikan dalam kasus ini tidak benar! Anda menggunakan varians unpooled yang mengasumsikan varians yang tidak sama. Dengan demikian, tingkat kebebasan lebih akurat dengan menggunakan Pendekatan Scatterwaite.
lzstat
7

Anda dapat melakukan perhitungan berdasarkan rumus dalam buku (pada halaman web), atau Anda dapat menghasilkan data acak yang memiliki properti yang dinyatakan (lihat mvrnormfungsi dalam MASSpaket) dan menggunakan t.testfungsi biasa pada data yang disimulasikan.

Greg Snow
sumber
Ketika Anda mengatakan "Anda dapat menghasilkan data acak yang memiliki properti yang dinyatakan", maksud Anda mensimulasikan data dengan mean populasi dan deviasi standar sama dengan nilai sampel atau mensimulasikan di bawah batasan bahwa mean sampel dan deviasi standar sama dengan pra- nilai yang ditentukan?
Makro
2
Anda ingin data yang disimulasikan memiliki rata-rata dan var yang sama persis seperti yang dinyatakan dalam masalah. Salah satu cara untuk melakukan ini (ada banyak lainnya) adalah dengan menggunakan mvrnormfungsi dalam MASSpaket (Anda perlu mengatur argumen empiris menjadi BENAR).
Greg Snow
2

Pertanyaannya bertanya tentang R, tetapi masalah ini dapat muncul dengan perangkat lunak statistik lainnya. Stata misalnya memiliki berbagai perintah langsung yang disebut, yang memungkinkan perhitungan dari statistik ringkasan saja. Lihat http://www.stata.com/manuals13/rttest.pdf untuk kasus khusus dari ttestiperintah, yang berlaku di sini.

Nick Cox
sumber