Вычисление значения 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-критерия R. Однако значение р составляет 3,025803e-12.

Есть идеи, что я делаю не так?

Спасибо!

РЕДАКТИРОВАТЬ

Вот полный код 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. lower = F указывает R вычислить вероятность того, что значение будет больше, чем первый параметр. В противном случае это дает вам вероятность того, что значение будет меньше, чем первый параметр. Таким образом, вы также можете сделать 2 * pt (-11.244, 30). Лично я обычно делаю 2 * pt (-abs (q), df = n-1), так как R по умолчанию меньше = T.
Ашик

9

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

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

Вполне возможно, что вы ничего не делаете неправильно и все же получаете разницу, но если вы разместите воспроизводимый пример, возможно, можно будет продолжить расследование, есть ли у вас какая-либо ошибка (скажем, в df).

Эти вещи рассчитаны из приближений, которые могут быть не совсем точными в очень крайнем хвосте.

Если эти две вещи не используют идентичные приближения, они могут не совпадать близко, но это отсутствие согласия не должно иметь значения (для точной области хвоста, которая настолько значительна, требуемые предположения должны были бы придерживаться поразительных степеней точность). Вы действительно имеете точную нормальность, точную независимость, точно постоянную дисперсию?

2×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 дает наше значение р. Я использовал 1000000, поскольку, когда N огромно, распределение t почти такое же, как нормальное распределение. Запуск этого дал мне утешение в решении @ Аарона.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.