T-testinde t değerini t değerinden manuel olarak hesaplama


49

31 değerli örnek veri setim var. Gerçek ortalamanın 10'a eşit olup olmadığını test etmek için R kullanarak iki kuyruklu t testi yaptım:

t.test(x=data, mu=10, conf.level=0.95)

Çıktı:

t = 11.244, df = 30, p-value = 2.786e-12
alternative hypothesis: true mean is not equal to 10 
95 percent confidence interval:
 19.18980 23.26907 
sample estimates:
mean of x 
 21.22944 

Şimdi aynı şeyi manuel olarak yapmaya çalışıyorum:

t.value = (mean(data) - 10) / (sd(data) / sqrt(length(data))) 
p.value = dt(t.value, df=length(lengths-1))

Bu yöntem kullanılarak hesaplanan t değeri, T testi R işlevi tarafından verilen çıktı ile aynıdır. Bununla birlikte, p değeri 3.025803e-12 olarak ortaya çıkmaktadır.

Yanlış yaptığım bir fikrin var mı?

Teşekkürler!

DÜZENLE

Veri setim de dahil olmak üzere tam R kodu:

# Raw dataset -- 32 observations
data = c(21.75, 18.0875, 18.75, 23.5, 14.125, 16.75, 11.125, 11.125, 14.875, 15.5, 20.875,
            17.125, 19.075, 25.125, 27.75, 29.825, 17.825, 28.375, 22.625, 28.75, 27, 12.825, 
            26, 32.825, 25.375, 24.825, 25.825, 15.625, 26.825, 24.625, 26.625, 19.625)

# Student t-Test
t.test(x=data, mu=10, conf.level=0.95)

# Manually calculate p-value
t.value = (mean(data) - 10) / (sd(data) / sqrt(length(data)))
p.value = dt(t.value, df=length(data) - 1)

Yanıtlar:


43

Kullanın ptve iki kuyruklu yapın.

> 2*pt(11.244, 30, lower=FALSE)
[1] 2.785806e-12

1
Eksik bir detay olduğunu düşünüyorum: Ne zaman? - Lütfen sorumu burada görün: stats.stackexchange.com/questions/133091/…
vonjd

3
Değerin pozitif olması gerekir, bu yüzden bunu negatif olabilecek bir değişkenle kullanıyorsanız, girin abs.
Aaron - Monica

3
İki kuyruklu bir test için, değerin -11.244'ten düşük veya +11.244'ten yüksek olması olasılığını arıyorsunuz. lower = F, R'ye, değerin ilk parametreden daha fazla olma olasılığını hesaplamasını söyler. Aksi takdirde, değerin ilk parametreden daha düşük olma olasılığını verir. Bu nedenle, 2 * pt de (-11.244, 30) yapabilirsiniz. Şahsen, genellikle 2 * pt (-abs (q), df = n-1), R varsayılan olarak düşük = T olur.
ashic

9

Bunu bir yorum olarak yayınladım, ancak düzenlemeye biraz daha eklemek istediğimde, çok uzadı, bu yüzden buraya taşındım.

Düzenleme : Test istatistikleriniz ve df doğru. Diğer cevap, çağrıdaki kuyruk bölgesinin hesaplanması pt()ve iki kuyruk için iki katına çıkmasıyla farkınızı giderir. Yine de, daha önceki yazıma / yorumuma bırakacağım, çünkü uç kuyruklarda p-değerleri ile ilgili daha genel bir noktaya değiniyor:

Yanlış bir şey yapmıyor olabilirsiniz ve hala bir fark olabilir, ancak tekrarlanabilir bir örnek gönderirseniz, bir hata olup olmadığını araştırmanız mümkün olabilir (df'de söylenebilir).

Bunlar, çok aşırı kuyrukta özellikle doğru olmayabilecek yaklaşımlardan hesaplanır.

Eğer iki şey aynı yaklaşımları kullanmazlarsa, yakın bir şekilde aynı fikirde olmayabilirler, ancak bu anlaşma eksikliğinin önemi olmamalıdır (bu kadar anlamlı bir sayı olmak üzere tam bir kuyruk alanı için, gerekli varsayımların şaşırtıcı derecelerde kalması gerekirdi. doğruluk, kesinlik). Gerçekten tam bir normallik, tam bir bağımsızlık, tam bir değişmezlik var mı?

2x10-123x10-120.0001


7

Manuel olarak hesaplamanın en iyi yolu şudur:

t.value = (mean(data) - 10) / (sd(data) / sqrt(length(data))) 
p.value = 2*pt(-abs(t.value), df=length(data)-1)

1


0

absYorumlarla birlikte verilen @Aaron yanıtını gerçekten seviyorum . Çalıştırmak için kullanışlı bir onay buluyorum

pt(1.96, 1000000, lower.tail = F) * 2

hangi verim 0.04999607.

Burada, normal dağılım altındaki alanın% 95'inin ~ 1.96 standart sapmalarda gerçekleştiği bilinen bir özellik kullanıyoruz, bu nedenle ~ 0.05 çıktısı p-değerimizi veriyor. 1000000 kullandım çünkü N büyük olduğunda t dağılımı neredeyse normal dağılımla aynıydı. Bunu çalıştırmak bana Aaron'un çözümünde rahatlık verdi.

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.