Ручне обчислення значення P від ​​t-значення в t-тесті


49

У мене є вибірковий набір даних із 31 значенням. Я провів двосхилий t-тест, використовуючи R, щоб перевірити, чи справжня середня величина дорівнює 10:

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

Вихід:

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 

Зараз я намагаюся зробити те ж саме вручну:

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

Значення t, обчислене за допомогою цього методу, те саме, що виводиться функцією t-test R. Однак р-значення виявляється рівним 3,025803e-12.

Будь-які ідеї, що я роблю неправильно?

Дякую!

EDIT

Ось повний код R, включаючи мій набір даних:

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

Відповіді:


43

Використовуйте ptі зробіть це двохвостим.

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

1
Я думаю, бракує деталей: Коли використовувати нижчий = F? - Будь ласка, дивіться моє запитання тут: stats.stackexchange.com/questions/133091/…
vonjd

3
Значення повинно бути позитивним, тому, використовуючи це зі змінною, яка могла бути негативною, перевірте abs.
Аарон - Відновіть Моніку

3
Для тесту з двома хвостами ви шукаєте ймовірність того, що значення менше -11,244 або більше +11,244. нижчий = F вказує на R, щоб обчислити ймовірність того, що значення більше першого параметра. В іншому випадку це дає вам ймовірність того, що значення менше першого параметра. Таким чином, ви також можете зробити 2 * pt (-11,244, 30). Особисто я зазвичай роблю 2 * pt (-abs (q), df = n-1), як R за замовчуванням нижчий = T.
ashic

9

Я розмістив це як коментар, але коли я хотів додати трохи більше в редагуванні, він став занадто довгим, тому я перемістив його сюди.

Редагувати : Ваша тестова статистика та df правильні. Інша відповідь відзначає проблему з обчисленням площі хвоста у виклику до pt()та подвоєння на два хвости, що вирішує вашу різницю. Тим не менш, я залишу своє попереднє обговорення / коментар, оскільки це робить більш релевантними моменти щодо p-значень у крайніх хвостах:

Можливо, ви не можете зробити нічого поганого і все одно отримаєте різницю, але якщо ви розмістите відтворюваний приклад, можливо, можна буде дослідити далі, чи є у вас помилка (скажімо в df).

Ці речі обчислюються з наближень, які можуть бути не особливо точними в дуже крайньому хвості.

Якщо обидві речі не використовують однакові наближення, вони можуть не погоджуватися близько, але ця відсутність згоди не має значення (для точної площі хвоста, яка є далеко не значущою кількістю, необхідні припущення повинні дотримуватися вражаючих ступенів точність). Чи справді ви маєте точну нормальність, точну незалежність, точно постійну дисперсію?

Не слід очікувати великої точності там, де цифри все одно нічого не означатимуть. Наскільки це має значення, якщо обчислене приблизне значення р дорівнює або ? Жодне число не вимірює фактичну p-величину вашої справжньої ситуації. Навіть якщо одне з чисел справді реальне значення вашої справжньої ситуації, коли воно нижче , чому б вам було байдуже, що це значення насправді було? 3 × 10 - 12 0,00012×10-123×10-120,0001


7

Найкращий спосіб обчислити це вручну:

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

1


0

Мені дуже подобається відповідь, яку надав @Aaron, а також absкоментарі. Я знаходжу зручне підтвердження - це запустити

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

яка врожайність 0.04999607.

Тут ми використовуємо відоме властивість, що 95% площі при нормальному розподілі відбувається при ~ 1,96 стандартних відхилень, таким чином, вихід ~ 0,05 дає наше p-значення. Я використовував 1000000, оскільки коли N величезна, розподіл t майже такий же, як і звичайний. Запуск цього дав мені комфорт у рішенні @ Аарона.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.