Как изменить степень свободы в тесте хи-квадрат - PullRequest
2 голосов
/ 20 ноября 2019

Я пытаюсь рассчитать P-значение с помощью критерия достоверности соответствия для распределения Пуассона

Наблюдаемые точки данных: 118 64 18 и ожидаемые значения: 120 61,25 18,8

Я рассчитал вероятность с помощью распределения Пуассона, чтобы значение df было 3-1-1 = 1

Я получил от R, что df = 4

Это то, что я положил в R:

Chi.Observed <- c(118,64,18)
Chi.Expected <- c(120,61.2,18.8)
chisq.test(Chi.Observed, Chi.Expected)

и ответ был:

        Pearson's Chi-squared test
Chi.Observed and Chi.Expected
X-squared = 6, df = 4, p-value = 0.1991

Ответы [ 2 ]

4 голосов
/ 20 ноября 2019

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

  • это помогло бы иметьнемного больше информации о том, как вы получили ожидаемые значения. Реконструкция:

    • dpois(0:1,lambda=0.51)*200 дает (120.09912,61.25055), а ppois(1,lambda=0.51,lower.tail=FALSE) дает 18,6, поэтому я предполагаю, что у вас есть вероятности 0, 1 и> = 2 отсчетов от 200рассчитывает
    • sum(Chi.Observed) равно 200, а sum((0:2)*Chi.Observed/sum(Chi.Observed)) равно 0,5, что очень хорошо согласуется.

    Итак, вы получили 2 фрагмента информации из 3 числовых значений, чтобы сгенерировать ожидаемое значение. значения, и кажется разумным, что ваш df должен быть 1.

  • , указав x и y не делает то, что вы думаете (или я думал), что делает: как указывает @ Dave2e, вам действительно нужно указать p.

    , если 'x' - вектор, а 'y' не задано, то выполняется проверка на пригодность ... проверяется гипотеза о том, равны ли вероятности совокупности с вероятностью в 'p', или все они равны, если не задано 'p'.

    Вот как взломать ваш тест:

Chi.Observed <- c(118,64,18)
Chi.Expected <- c(120,61.2,18.8)
cc <- chisq.test(Chi.Observed, 
         p = Chi.Expected/sum(Chi.Expected))
cc$parameter <- c(df=1)
cc$p.value <- pchisq(cc$statistic,df=cc$parameter,
      lower.tail=FALSE)
cc 
## Pearson's Chi-squared test    
## data:  Chi.Observed and Chi.Expected
## X-squared = 0.19548, df = 1, p-value = 0.6584

Глядя на код, что на самом деле происходиткогда x и y оба заданы как векторы: R строит эту таблицу

table(factor(Chi.Expected), factor(Chi.Observed))

       18 64 118
  18.8  1  0   0
  61.2  0  1   0
  120   0  0   1

, а затем выполняет анализ таблицы сопряженности (т. е. проверяет нулевую гипотезу независимости строки / столбца)! Это одна из лучших ловушек R, которую я видел за долгое время ...

3 голосов
/ 21 ноября 2019

Подумав об этой проблеме и прочитав ответ Бена выше, я думаю, что у меня есть объяснение и / или ответ. Эта проблема двоякая, с использованием правильной формы теста Chisq и получением правильной степени свободы.

Первая проблема при использовании правильной формы chisq.test. Если вы используете форму: chisq.test(x, y), это приводит к созданию таблицы непредвиденных обстоятельств 3x3 и приводит к слишком низкому p-значению.
См. Тест1 ниже. test1$observed и test1$expected не возвращают правильный ввод.

Правильный формат для chisq.test(x, p) #where p is the expected probability of x.
Это показано как test2 ниже. Теперь значение р изменилось с 19% до 90%. (Это был бы мой ответ, но я перейду к лучшему статистику.)

Чтобы настроить степени свободы на 1, см. Ответ Бена Болкера. Теперь результаты отображаются в виде test3 с p-значением 66%

Надеюсь, что это приемлемое объяснение.

Chi.Observed <- c(118,64,18)
Chi.Expected <- c(120,61.2,18.8)

test1<-chisq.test(Chi.Observed, Chi.Expected) # this is 3x3 contgency table.
test1
# Pearson's Chi-squared test
# 
# data:  Chi.Observed and Chi.Expected
# X-squared = 6, df = 4, p-value = 0.1991
# 
#This result is incorrect as it...
# forms a 3x3 contingency table as shown by: 
test1$observed   # observed counts 
test1$expected   # expected counts under the null


#chisq using the expected probabilities:
test2<-chisq.test(Chi.Observed, p= Chi.Expected/sum(Chi.Expected))
test2
# Chi-squared test for given probabilities
# 
# data:  Chi.Observed
# X-squared = 0.19548, df = 2, p-value = 0.9069


#adjust degrees of freedon as per Ben's answer
test3 <- chisq.test(Chi.Observed,  p = Chi.Expected/sum(Chi.Expected))
test3$parameter <- c(df=1)
test3$p.value <- pchisq(test3$statistic, df=test3$parameter, lower.tail=FALSE)
test3 
# Chi-squared test for given probabilities
# 
# data:  Chi.Observed
# X-squared = 0.19548, df = 1, p-value = 0.6584
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...