Я пытаюсь сравнить два процента / пропорции для статистической значимости в R, используя критерий хи-квадрат. Я знаком с методом SAS для Chi Square, в котором я предоставляю столбец набора данных для числителя, еще один столбец для знаменателя и категориальную переменную для различения guish распределений (A / B).
Однако я получаю неожиданные значения в R, используя некоторые примеры наборов. Когда я тестирую две одинаковые популяции с малыми размерами выборки, я получаю значения p (приблизительно) ноль, где я ожидаю, что значения p будут очень высокими (~ 1).
Ниже приведен мой тестовый набор, в котором я указывал содержание сахара в партии воды: например, «использует ли группа A такое же соотношение сахара, как и в группе B?». Моя настоящая проблема аналогична, когда это не тест типа «проходной сбой», а значения числителя и знаменателя могут сильно различаться между образцами (разные веса сахара и / или воды на образец). Моя первая цель - убедиться, что я могу получить высокое значение p из двух одинаковых наборов. Следующий вопрос заключается в том, при каком размере выборки значение p становится достаточно низким, чтобы указывать на значимость?
# CREATE 2 NEARLY-EQUAL DISTRIBUTIONS (EXPECTING HIGH P-VALUE FROM PROP.TEST)
set.seed(108)
group_A = tibble(group = "A", sugar_lbs = rnorm(mean = 10, sd = 3, n = 50), batch_lbs = rnorm(mean = 30, sd = 6, n = 50))
group_B = tibble(group = "B", sugar_lbs = rnorm(mean = 10, sd = 3, n = 50), batch_lbs = rnorm(mean = 30, sd = 6, n = 50))
batches <- rbind(group_A, group_B)
Затем я делаю обобщение для расчета общей тенденции процентного содержания сахара между группами:
# SUMMARY TOTALS
totals <- batches %>%
group_by(group) %>%
summarize(batch_count = n(),
batch_lbs_sum = sum(batch_lbs),
sugar_lbs_sum = sum(sugar_lbs),
sugar_percent_overall = sugar_lbs_sum / batch_lbs_sum) %>%
glimpse()
Затем я поставляю процентное содержание сахара между группами в prop.test, ожидая высокого значения p
# ADD P-VALUE & CONFIDENCE INTERVAL
stats <- totals %>%
rowwise() %>%
summarize(p_val = prop.test(x = sugar_percent_overall, n = batch_count, conf.level = 0.95, alternative = "two.sided")$p.value) %>%
mutate(p_val = round(p_val, digits = 3)) %>%
mutate(conf_level = 1 - p_val) %>%
select(p_val, conf_level) %>%
glimpse()
# FINAL SUMMARY TABLE
cbind(totals, stats) %>%
glimpse()
К сожалению, в финальной таблице мне дается значение p, равное 0, предлагая два почти -идентичные множества независимы / различны. Разве я не должен получить значение p ~ 1?
Observations: 2
Variables: 7
$ group <chr> "A", "B"
$ batch_count <int> 50, 50
$ batch_lbs_sum <dbl> 1475.579, 1475.547
$ sugar_lbs_sum <dbl> 495.4983, 484.6928
$ sugar_percent_overall <dbl> 0.3357992, 0.3284833
$ p_val <dbl> 0, 0
$ conf_level <dbl> 1, 1
С другой стороны, я также попытался сравнить рекомендуемый размер выборки из power.prop.test с фактическим prop.test, используя этот рекомендованный размер образца. Это дало мне обратную проблему - я ожидал низкого значения p, так как я использую рекомендуемый размер выборки, но вместо этого получаю значение p ~ 1.
# COMPARE PROP.TEST NEEDED COUNTS WITH AN ACTUAL PROP.TEXT
power.prop.test(p1 = 0.33, p2 = 0.34, sig.level = 0.10, power = 0.80, alternative = "two.sided") ## n = 38154
prop.test(x = c(0.33, 0.34), n = c(38154, 38154), conf.level = 0.90, alternative = "two.sided") ## p = 1 -- shouldn't p be < 0.10?
Использую ли я проп .test неправильно или я что-то неправильно понимаю? В идеале, я бы предпочел пропустить этап суммирования и просто указать фрейм данных, столбец числителя 'sugar_lbs' и знаменатель 'batch_lbs', как я это делаю в SAS - возможно ли это в R?
(Извинения для любых вопросов форматирования, как я новичок в публикации)
-------------------------------- -
РЕДАКТИРОВАТЬ - ПРИМЕР С ТОЛЬКО ПРОПОРЦИЯМИ И РАЗМЕРОМ ОБРАЗЦА
Я думаю, что мой выбор использования нормальных дистрибутивов мог отвлечь от первоначального вопроса. Я нашел пример, который доходит до сути того, что я пытался задать, а именно, как использовать тест пропеллера, учитывая только пропорцию / процент и размер выборки. Вместо city_percent
и city_total
ниже, я мог бы просто переименовать их в sugar_percent
и batch_lbs
. Я думаю, что эта ссылка отвечает на мой вопрос, где prop.test кажется правильным тестом для использования.
Моя настоящая проблема имеет крайне ненормальное распространение, но ее нелегко воспроизвести с помощью кода.
ПРИМЕР СТЭНФОРДА (стр. 37-50)
df <- tibble(city = c("Atlanta", "Chicago", "NY", "SF"), washed = c(1175, 1329, 1169, 1521), not_washed = c(413, 180, 334, 215)) %>%
mutate(city_total = washed + not_washed,
city_percent = washed / city_total) %>%
select(-washed, -not_washed) %>%
glimpse()
# STANFORD CALCULATION (p = 7.712265e-35)
pchisq(161.74, df = 3, lower.tail = FALSE)
# PROP TEST VERSION (SAME RESULT, p = 7.712265e-35)
prop.test(x = df$city_percent * df$city_total, n = df$city_total, alternative = "two.sided", conf.level = 0.95)$p.value