J'utilise le package "boot" pour calculer une valeur p approximative de démarrage à 2 côtés mais le résultat est trop éloigné de la valeur p de l'utilisation de t.test. Je ne peux pas comprendre ce que j'ai fait de mal dans mon code R. Quelqu'un peut-il me donner un indice pour cela
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
La valeur de p amorcée sur 2 côtés (pvalue) = 0,4804 mais la valeur de p sur 2 côtés de t.test est de 0,04342. Les deux valeurs de p sont d'environ 11 fois la différence. Comment cela peut-il arriver?
mean(abs(b3$t0) < abs(b3$t-mean(b3$t)))
Réponses:
Vous utilisez le bootstrap pour générer des données sous la distribution empirique des données observées. Cela peut être utile pour donner un intervalle de confiance sur la différence entre les deux moyennes:
Pour obtenir une valeur , vous devez générer des permutations sous l'hypothèse nulle. Cela peut être fait par exemple comme ceci:p
Dans cette solution, la taille des groupes n'est pas fixe, vous réaffectez au hasard un groupe à chaque individu en démarrant à partir de l'ensemble de groupes initial. Il me semble légitime, mais une solution plus classique consiste à fixer le nombre d'individus de chaque groupe, donc vous permutez simplement les groupes au lieu de bootstraping (cela est généralement motivé par la conception de l'expérience, où les tailles de groupe sont fixées à l'avance ):
la source
La réponse d'Elvis repose sur des permutations, mais à mon avis, elle ne précise pas ce qui ne va pas avec l'approche bootstrap d'origine. Permettez-moi de discuter d'une solution basée uniquement sur le bootstrap.
Le problème crucial de votre simulation d'origine est que le bootstrap vous fournit toujours la VRAIE distribution de la statistique de test. Cependant, lors du calcul de la valeur p, vous devez comparer la valeur obtenue de la statistique de test à sa distribution SOUS H0, c'est-à-dire pas avec la vraie distribution!
[Disons-le clairement. Par exemple, on sait que la statistique de test T du test t classique a la distribution t "centrale" classique sous H0 et une distribution non centrale en général. Cependant, tout le monde sait que la valeur observée de T est comparée à la distribution t "centrale" classique, c'est-à-dire que l'on n'essaie pas d'obtenir la vraie distribution t [non centrale] pour faire la comparaison avec T.]
Votre valeur de p 0,4804 est si grande, car la valeur observée "t0" de la statistique de test Mean [1] -Mean [2] est très proche du centre de l'échantillon "t" bootstrapé. C'est naturel et typiquement c'est toujours le cas [c'est-à-dire indépendamment de la validité de H0], car l'échantillon bootstrap "t" émule la distribution RÉELLE de Mean [1] -Mean [2]. Mais, comme indiqué ci-dessus [et également par Elvis], ce dont vous avez vraiment besoin est la distribution de Mean [1] -Mean [2] SOUS H0. Il va de soi que
1) sous H0 la distribution de Mean [1] -Mean [2] sera centrée autour de 0,
2) sa forme ne dépend pas de la validité de H0.
Ces deux points impliquent que la distribution de Mean [1] -Mean [2] sous H0 peut être émulée par l'échantillon bootstrap "t" SHIFTED de sorte qu'elle soit centrée autour de 0. Dans R:
et la valeur de p correspondante sera:
ce qui vous donne une valeur "très agréable" de 0,0232. :-)
Permettez-moi de noter que le point "2)" mentionné ci-dessus est appelé "équivariance de traduction" de la statistique de test et qu'il n'a PAS à tenir en général! C'est-à-dire pour certaines statistiques de test, le décalage du "t" amorcé ne vous fournit pas une estimation valide de la distribution de la statistique de test sous HO! Jetez un œil à cette discussion et surtout à la réponse de P. Dalgaard: http://tolstoy.newcastle.edu.au/R/e6/help/09/04/11096.html
Votre problème de test produit une distribution parfaitement symétrique de la statistique de test, mais gardez à l'esprit qu'il y a des problèmes avec l'obtention de valeurs de p à DEUX CÔTÉS en cas de distribution bootstrapée biaisée de la statistique de test. Encore une fois, lisez le lien ci-dessus.
[Et enfin, j'utiliserais le test de permutation "pur" dans votre situation; c'est-à-dire la seconde moitié de la réponse d'Elvis. :-)]
la source
Il existe de nombreuses façons de calculer les CI d'amorçage et les valeurs de p. Le problème principal est qu'il est impossible pour le bootstrap de générer des données sous une hypothèse nulle. Le test de permutation est une alternative viable basée sur le rééchantillonnage. Pour utiliser un bootstrap approprié, vous devez faire quelques hypothèses sur la distribution d'échantillonnage de la statistique de test.
bootstrap normal
Une approche est un bootstrap normal où vous prenez la moyenne et l'écart-type de la distribution de bootstrap, calculez la distribution d'échantillonnage sous la valeur nulle en déplaçant la distribution et en utilisant les centiles normaux de la distribution nulle au point de l'estimation dans l'échantillon de bootstrap d'origine . C'est une approche raisonnable lorsque la distribution bootstrap est normale, une inspection visuelle suffit généralement ici. Les résultats utilisant cette approche sont généralement très proches d'une estimation d'erreur robuste ou en sandwich qui est robuste contre les hypothèses d'hétéroscédasticité et / ou de variance d'échantillon fini. L'hypothèse d'une statistique de test normale est une condition plus forte des hypothèses du prochain test de bootstrap dont je vais discuter.
bootstrap percentile
Bootstrap étudiant
Exemple de programmation
À titre d'exemple, je vais utiliser les
city
données du package de démarrage. Les intervalles de confiance du bootstrap sont calculés avec ce code:et produire cette sortie:
L'IC à 95% pour le bootstrap normal est obtenu en calculant:
La valeur de p est ainsi obtenue:
Ce qui convient que l'IC normal à 95% n'inclut pas la valeur de rapport nul de 1.
Le CI centile est obtenu (avec quelques différences dues aux méthodes de liens):
Et la valeur de p pour le bootstrap centile est:
Donne un p de 0,035 qui correspond également à l'intervalle de confiance en termes d'exclusion de 1 de la valeur. Nous ne pouvons pas en général observer que, alors que la largeur du CI centile est presque aussi large que le CI normal et que le CI centile est plus éloigné du zéro que le CI centile devrait fournir des valeurs de p plus faibles. En effet, la forme de la distribution d'échantillonnage sous-jacente à l'IC pour la méthode centile n'est pas normale.
la source
boot.ci
et utiliser l'argument "type" pour choisir un CI élève (vous pouvez également choisir un CI BCA). Cependant, comment pouvez-vous calculer les valeurs de p? Utilisez-vous l'estimation ou la statistique de test? J'avais une question similaire dont la réponse serait grandement appréciée.