İşlenmemiş veri yerine örnek istatistiklerini girerek R'de iki örnek t testi nasıl yapılır?


32

Diyelim ki aşağıda istatistikleri var.

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

İki örnekli bir t-testini (gerçek değişkenlerden ziyade bu gibi istatistikleri kullanarak (bazı değişkenlerdeki kadın ve erkeklerin araçları arasında anlamlı bir fark olup olmadığını görmek için) nasıl uygularsınız?

İnternette herhangi bir yerde bunun nasıl yapılacağını bulamadım. Öğreticilerin çoğu ve hatta kılavuz bile testle gerçek veri setiyle ilgileniyor.


2
Bu Wikipedia makalesi ve R'nin t-dağıtım fonksiyonları için yardım sayfası (ele geçirildi ?pt) - özellikle bakın pt()- bunu yapmanız için gereken tüm bilgilere sahip olun. Ve eğer bunu yaparsanız, istatistikler ve R hakkında çok şey öğreneceksiniz .
Josh O'Brien,

2
Burada zaten iyi cevaplar var ve aslında bunun için bir işlev yazmak hem de çok kolay (ve iyi bir uygulama); Bununla birlikte, sağladığınız özet verilerden bir t-testi (iki örnek; Welch veya eşit varyans ve bir örnek) uygulayan BSDAtsum.test paketindeki fonksiyona bir göz atabileceğinizi de ekleyeceğim . Temel olarak vanilya R'deki t-testi gibi çalışır ancak özet bilgiler üzerinde çalışır.
Glen_b -Reinstate Monica

1
Dürüst olmak gerekirse, programlamayı öğrenirken öğretmenim daima “tekerleği yeniden icat etme” derdi. Bu nedenle, en mantıklı fonksiyonu olacaktır tsum.test()dan BSDA library@ Nick Cox belirtildiği gibi. Tam olarak, macro'nun kod satırlarında yazdığı ile aynı şeyi yapar. Eğer soru sorulursa, R'deki t-testi istatistiğini hesaplamak için arkaplan hesaplamasının ne anlama geldiği o zaman Marco daha uygun olurdu. Lütfen dikkat, kimseyi kırmaya çalışmıyorum, sadece profesyonel geçmişimle ilgili kişisel fikrimi belirttim. Ve @ marco bazı düzgün kodlama :)
tcratius

Yanıtlar:


37

İki-örnek - testinin mekaniğit hakkında bildiklerimize dayanarak kendi fonksiyonunuzu yazabilirsiniz . Örneğin, bu işi yapacak:

# 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 

1
Benim düzenleme karşılaştırarak t.testreddedildim, işte onaylayın bazı kod:(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"]]
Maksimum Ghenis

20

t=(anlamına gelmekf-anlamına gelmekm)-beklenen farkSE  SE=sdf2nf+sdm2nm  nerede,    df=nm+nf-2

Beklenen fark muhtemelen sıfırdır.

Eğer p-değerini istiyorsanız sadece pt()işlevi kullanın :

pt(t, df)

Böylece, kodu bir araya getirmek:

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

Bu, aynı standart sapmaya sahip oldukları için açık olan eşit varyansları varsayar.


Rp

Bu durumda verilen derece özgürlük yanlıştır! Eşit olmayan varyansları varsayan temelsiz varyansı kullanırsınız. Dolayısıyla, Scatterwaite Yaklaşımı kullanılarak serbestlik derecesi daha kesindir.
lzstat

7

Kitaptaki formüle dayanarak (web sayfasındaki) hesaplamaları yapabilir veya belirtilen özelliklere sahip ( paketteki mvrnormfonksiyona bakınız) rasgele veri üretebilir MASSve normal t.testfonksiyonu simüle veri üzerinde kullanabilirsiniz .


"Belirtilen özelliklere sahip rastgele veriler üretebilirsiniz" deyince, popülasyon ortalaması ve standart sapma ile verileri örnek değerlerine eşit olarak simule etmek mi yoksa kısıtlama altında örnek ortalama ve standart sapmanın bir ön değere eşit olduğunu simüle etmek mi istiyorsunuz? belirlenmiş değer?
Makro

2
Simüle edilen verinin, problemde belirtildiği gibi tamamen aynı ortalamalara ve değişkenlere sahip olmasını istiyorsunuz. Bunu yapmanın bir yolu (diğerleri var) paketteki mvrnormişlevi kullanmaktır MASS(ampirik argümanı TRUE olarak ayarlamanız gerekir).
Greg Snow

2

Soru R hakkında soru sorar, ancak konu başka herhangi bir istatistiksel yazılımla da ortaya çıkabilir. Örneğin Stata, yalnızca özet istatistiklerden hesaplamaya izin veren çeşitli anlık komutlara sahiptir. Burada geçerli olan komutun özel durumu için http://www.stata.com/manuals13/rttest.pdf adresine bakın ttesti.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.