Обчислення p-значення за допомогою завантажувальної програми з R


28

Я використовую пакет "boot" для обчислення приблизного двостороннього завантаженого p-значення, але результат занадто далекий від p-значення використання t.test. Я не можу зрозуміти, що я зробив не так у своєму R-коді. Може хтось, будь ласка, підкаже мені про це

time = c(14,18,11,13,18,17,21,9,16,17,14,15,
         12,12,14,13,6,18,14,16,10,7,15,10)
group=c(rep(1:2, each=12))
sleep = data.frame(time, group)

require(boot)
diff = function(d1,i){
    d = d1[i,]
    Mean= tapply(X=d$time, INDEX=d$group, mean)
    Diff = Mean[1]-Mean[2]
    Diff
}

set.seed(1234)
b3 = boot(data = sleep, statistic = diff, R = 5000, strata=sleep$group)

pvalue = mean(abs(b3$t) > abs(b3$t0))
pvalue 

Двостороннє завантажене p-значення (pvalue) = 0,4804, але двостороннє p-значення t.test становить 0,04342. Обидва p-значення мають приблизно 11 разів різницю. Як це може статися?


як у b3 $ t0 є дві записи?
Сіань

1
це назви!
Елвіс

2
Ви неправильно обчислюєте -значення. Документація говорить, що - це спостережувана статистика, а не нульовий розподіл, як це підказує нотація. Вам потрібно придумати оцінку відбору вибірки під нулем. Дивіться мою відповідь для отримання додаткової інформації. Спробуйте зробити тест на упередження, що не виправлено. t 0pt0mean(abs(b3$t0) < abs(b3$t-mean(b3$t)))
AdamO

Відповіді:


31

Ви використовуєте завантажувальний інструмент для генерування даних під емпіричним розподілом спостережуваних даних. Це може бути корисно, щоб дати інтервал довіри щодо різниці двох засобів:

> quantile(b3$t,c(0.025,0.975))
     2.5%     97.5% 
0.4166667 5.5833333 

Щоб отримати -значення, потрібно створити перестановки під нульовою гіпотезою. Це можна зробити, наприклад, так:p

diff2 = function(d1,i){
    d = d1; 
    d$group <- d$group[i];  # randomly re-assign groups
    Mean= tapply(X=d$time, INDEX=d$group, mean)
    Diff = Mean[1]-Mean[2]
    Diff
}

> set.seed(1234)
> b4 = boot(data = sleep, statistic = diff2, R = 5000)
> mean(abs(b4$t) > abs(b4$t0))
[1] 0.046

У цьому рішенні розмір груп не фіксований, ви випадковим чином призначаєте групу кожному індивідууму, завантажуючи з початкового набору груп. Мені це здається легітимним, проте більш класичним рішенням є встановити кількість осіб кожної групи, тому ви просто перестановите групи замість завантажувального завантаження (це зазвичай мотивоване дизайном експерименту, де розміри груп заздалегідь фіксуються ):

> R <- 10000; d <- sleep
> b5 <- numeric(R); for(i in 1:R) { 
+    d$group <- sample(d$group, length(d$group)); 
+    b5[i] <- mean(d$time[d$group==1])-mean(d$time[d$group==2]); 
+ }
> mean(abs(b5) > 3)
[1] 0.0372

5
Технічно це тест на перестановку, а не p-значення завантажувальної програми.
AdamO

@AdamO Я погоджуюся, що те, що представлено у цій відповіді, - це тест на перестановку (і його трохи модифікований варіант); це тому, що під час перекомпонування групи групуються. На відміну від цього, у тесті на основі завантажувальних значень значення для кожної групи повинні бути відібрані, використовуючи лише дані для цієї ж групи. Ось одна відповідь, що пояснює, як це зробити: stats.stackexchange.com/a/187630/28666 .
амеба каже, що поверніть Моніку

@amoeba Я думаю, що відповідь, на яку ви посилаєтеся, - це також перестановка на перестановку, пов’язана з завантажувальним шаблоном лише в тій мірі, в якій вони передбачають перекомпонування. Звітність цілком чудово, але для звітування це два методи, які використовуються. Непараметричне завантажувальне обладнання технічно не в змозі генерувати дані під нульовою гіпотезою. Дивіться мою відповідь про те, як р-значення генеруються при розподілі завантажувальної програми.
AdamO

@AdamO Я думаю, що це питання термінології, але я не бачу, як процедуру, описану у зв'язаній відповіді, можна назвати тестом "перестановки", оскільки там нічого не перестановлено: значення перекомпонованих для кожної групи генеруються, використовуючи дані з цього лише групи.
амеба каже, що поверніть Моніку

1
Елвісе, я думаю, що перший фрагмент коду у вашій відповіді теж є перестановочним тестом. Після повторного впорядкування ви об'єднуєте групи разом! Саме це визначає тест на перестановку.
Амеба каже, що повернеться до Моніки

25

Відповідь Елвіса покладається на перестановки, але, на мій погляд, це не дає зрозуміти, що не так з оригінальним підходом до завантаження. Дозвольте мені обговорити рішення, що базується виключно на завантажувальній системі.

Найважливішою проблемою вашого оригінального моделювання є те, що завантажувальна програма завжди забезпечує правдиве розподілення тестової статистики. Однак, обчислюючи p-значення, ви повинні порівнювати отримане значення тестової статистики з його розподілом ПІД Н0, тобто не з істинним розподілом!

[Дамо зрозуміти. Наприклад, відомо, що тестова статистика T класичного t-випробування має класичний "центральний" t-розподіл під Н0 та нецентральне розподіл взагалі. Однак всім знайомий той факт, що спостережуване значення T порівнюється з класичним «центральним» t-розподілом, тобто не намагається отримати справжнє [нецентральне] t-розподіл для порівняння з Т.]

Ваше p-значення 0,4804 настільки велике, тому що спостережуване значення "t0" тестової статистичної середньої [1] -Mean [2] лежить дуже близько до центру завантаженого зразка "t". Це природно і зазвичай це завжди так (тобто незалежно від дійсності H0], тому що завантажений зразок "t" імітує АКТУАЛЬНИЙ розподіл середнього [1] -Mean [2]. Але, як зазначалося вище [, а також Елвісом], вам дійсно потрібно розподіл Середнього [1] -Мієна [2] ПІД Н0. Очевидно, що

1) під H0 розподіл середнього [1] -меану [2] буде зосереджено навколо 0,

2) його форма не залежить від дійсності H0.

З цих двох пунктів випливає, що розподіл середнього [1] -Mean [2] під H0 може бути емульований завантаженим зразком "t" SHIFTED так, щоб він був центрований навколо 0. У R:

b3.under.H0 <- b3$t - mean(b3$t)

і відповідне p-значення буде:

mean(abs(b3.under.H0) > abs(b3$t0))

що дає "дуже приємне" значення 0,0232. :-)

Дозвольте зазначити, що згаданий вище пункт "2)" називається "еквівалентністю перекладу" тестової статистики, і він НЕ повинен утримуватися взагалі! Тобто для деяких тестових статистичних даних, зміщення завантаженого "t" не дає вам вагомих оцінок розподілу статистики тесту за HO! Погляньте на цю дискусію та особливо на відповідь П. Далгаарда: http://tolstoy.newcastle.edu.au/R/e6/help/09/04/11096.html

Ваша проблема тестування дійсно дає ідеально симетричний розподіл тестової статистики, але майте на увазі, що є певні проблеми з отриманням ДВОХОРОТНИХ p-значень у разі перекошеного завантаженого розподілу тестової статистики. Знову читайте вищенаведене посилання.

[І нарешті, я би використав "чистий" тест на перестановку у вашій ситуації; тобто друга половина відповіді Елвіса. :-)]


17

Існує численні способи розрахунку ІС завантажувальної стрічки та p-значень. Основне питання полягає в тому, що завантажувальний засіб неможливо генерувати дані під нульовою гіпотезою. Перевірка на перестановку є альтернативою, що базується на життєздатному перекомпонування. Щоб використовувати належний завантажувальний засіб, ви повинні зробити деякі припущення щодо розподілу вибірки тестової статистики.

β0=β^β^β0=β^β^

нормальна завантажувальна

Один із підходів - це звичайний завантажувальний запуск, коли ви приймаєте середнє та стандартне відхилення розподілу завантажувальної програми, обчислюєте розподіл вибірки під нуль, зміщуючи розподіл і використовуючи нормальні відсотки від нульового розподілу в точці оцінки в початковому зразку завантажувальної програми . Це розумний підхід, коли розповсюдження завантажувальної стрічки є нормальним, візуального огляду зазвичай тут достатньо. Результати, використовуючи цей підхід, як правило, дуже близькі до надійної оцінки на основі сендвіч-помилок, яка є надійною щодо припущень щодо гетероседастичності та / або кінцевих припущень дисперсії. Припущення про нормальну статистику тесту є сильнішим умовою припущень у наступному тесті завантаження, про який я розповім.

відсотковий завантажувальний механізм

F02×min(F0(β^),1F0(β^))

Вивчений завантажувач

Найпростішим рішенням для завантаження для обчислення значень є використання студизованої завантажувальної програми. З кожною ітерацією завантажувальної програми обчисліть статистику та її стандартну помилку та поверніть студенту статистику. Це дає завантажений студентом розподіл гіпотези, яку можна легко обчислити значеннями cis та p. Це також лежить в основі інтуїції, що стоїть за прискореним завантаженням прискореного завантаження. Розподіл t зміщується набагато легше під нуль, оскільки вихідні результати зменшуються за рахунок відповідної великої дисперсії.p

Приклад програмування

Як приклад, я буду використовувати cityдані в пакеті завантаження. Довірчі інтервали завантажувальної програми обчислюються за допомогою цього коду:

ratio <- function(d, w) sum(d$x * w)/sum(d$u * w)
city.boot <- boot(city, ratio, R = 999, stype = "w", sim = "ordinary")
boot.ci(city.boot, conf = c(0.90, 0.95),
        type = c("norm", "basic", "perc", "bca"))

і виробляють цей вихід:

BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
Based on 999 bootstrap replicates

CALL : 
boot.ci(boot.out = city.boot, conf = c(0.9, 0.95), type = c("norm", 
    "basic", "perc", "bca"))

Intervals : 
Level      Normal              Basic         
90%   ( 1.111,  1.837 )   ( 1.030,  1.750 )   
95%   ( 1.042,  1.906 )   ( 0.895,  1.790 )  

Level     Percentile            BCa          
90%   ( 1.291,  2.011 )   ( 1.292,  2.023 )   
95%   ( 1.251,  2.146 )   ( 1.255,  2.155 )  
Calculations and Intervals on Original Scale

95% ДІ для звичайної завантажувальної стрічки отримують шляхом обчислення:

with(city.boot, 2*t0 - mean(t) + qnorm(c(0.025, 0.975)) %o% sqrt(var(t)[1,1]))

Отримано таким чином p-значення:

> with(city.boot, pnorm(abs((2*t0 - mean(t) - 1) / sqrt(var(t)[1,1])), lower.tail=F)*2)
[1] 0.0315

Що погоджується, що 95% нормальний ІС не включає значення нульового відношення 1.

Отримується відсотковий ДІ (з деякими відмінностями через методи зв’язків):

quantile(city.boot$t, c(0.025, 0.975))

А р-значення для процентної завантажувальної стрічки:

cvs <- quantile(city.boot$t0 - city.boot$t + 1, c(0.025, 0.975))
mean(city.boot$t > cvs[1] & city.boot$t < cvs[2])

Дає ap 0,0 0,035, що також узгоджується з довірчим інтервалом з точки зору виключення 1 зі значення. Загалом ми не можемо зауважити, що, хоча ширина перцентильного CI є приблизно такою ж ширкою, як і звичайна CI, і що процентний CI далі від нуля, той, що процентний CI повинен забезпечувати менші р-значення. Це пояснюється тим, що форма розподілу вибірки, що лежить в основі ДІ для методу перцентилу, є ненормальною.


Це дуже цікава відповідь @AdamO, але ви могли б надати кілька прикладів? На R ви можете використовувати функцію boot.ciта використовувати аргумент "type" для вибору студенізованого CI (ви також можете вибрати CI BCA). Однак як можна обчислити р-значення? Чи використовуєте ви оцінку чи тестову статистику? У мене було подібне запитання, відповідь якого буде дуже вдячний.
Кевін Зарка

1
+1 для чіткого пояснення переваг студійного завантажувача.
eric_kernfeld

@KevinOunet Я наводив два приклади реплікації p-значень із CI в завантажувальному пакеті. Чи допомагає це?
AdamO

1
Дякую @AdamO, це справді допомагає! Не могли б ви навести останній приклад для студизованого завантажувального пристрою?
Кевін Зарка
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.