2010-09-01 9 views
4

Dans le code suivant, j'utilise le bootstrapping pour calculer le C.I. et la valeur p sous l'hypothèse nulle que deux engrais différents appliqués aux plants de tomates n'ont aucun effet sur les rendements des plantes (et l'alternative étant que l'engrais "amélioré" est meilleur). Le premier échantillon aléatoire (x) provient de plantes où un engrais standard a été utilisé, tandis qu'un échantillon «amélioré» a été utilisé dans les usines où provient le second échantillon (y).Bootstrapping pour comparer deux groupes

x <- c(11.4,25.3,29.9,16.5,21.1) 
y <- c(23.7,26.6,28.5,14.2,17.9,24.3) 
total <- c(x,y) 
library(boot) 
diff <- function(x,i) mean(x[i[6:11]]) - mean(x[i[1:5]]) 
b <- boot(total, diff, R = 10000) 

ci <- boot.ci(b) 
p.value <- sum(b$t>=b$t0)/b$R 

Ce que je n'aime pas le code ci-dessus est que ré-échantillonnage se fait comme s'il n'y avait qu'un seul échantillon de 11 valeurs (séparant le premier 5 comme appartenant à l'échantillon x laissant le reste à l'échantillon y). Pourriez-vous me montrer comment ce code devrait être modifié pour effectuer des rééchantillonnages de taille 5 avec remplacement du premier échantillon et des rééchantillonnages séparés de taille 6 du deuxième échantillon, de sorte que le rééchantillonnage bootstrap imiterait le plan «échantillons séparés» les données d'origine?

Répondre

5

EDIT2: Hack supprimé car c'était une mauvaise solution. Au lieu de cela on doit utiliser les strates argument de la fonction de démarrage:

total <- c(x,y) 
id <- as.factor(c(rep("x",length(x)),rep("y",length(y)))) 
b <- boot(total, diff, strata=id, R = 10000) 
... 

Sachez que vous n'êtes pas allez obtenir même près d'une estimation correcte de votre Val.par:

x <- c(1.4,2.3,2.9,1.5,1.1) 
y <- c(23.7,26.6,28.5,14.2,17.9,24.3) 

total <- c(x,y) 

b <- boot(total, diff, strata=id, R = 10000) 
ci <- boot.ci(b) 
p.value <- sum(b$t>=b$t0)/b$R 
> p.value 
[1] 0.5162 

Comment se vous expliquez une valeur p de 0,51 pour deux échantillons où toutes les valeurs de la seconde sont supérieures à la valeur la plus élevée de la première? Le code ci-dessus est correct pour obtenir une estimation de l'intervalle de confiance, mais le test de signification de la différence doit être effectué par permutation sur l'ensemble de données complet.

+0

Merci! En ce qui concerne votre question "Pourquoi voudrais-je faire cela", consultez la boîte intitulée "BOOTSTRAP POUR COMPARER DEUX POPULATIONS" (et si vous voulez commenter) au bas de la page 18 ici http://bcs.whfreeman.com /ips5e/content/cat_080/pdf/moore14.pdf –

+0

Mon principal problème était de savoir comment définir diff.calc. Et encore je suis surpris de ne pas voir le deuxième argument à l'intérieur! –

+0

@ gd047: J'ai déjà deviné quelque chose comme ça à partir de votre question sur statexchange. Notez qu'ils parlent uniquement d'un intervalle de confiance, et ne disent rien d'une valeur p là-bas. Mon exemple vous montre pourquoi. –

1

Bien que les lits de sol réels pourraient être considérés comme une variable stratifiée dans certains cas, cela n'en fait pas partie. Vous n'avez que la seule manipulation, entre les groupes de plantes. Par conséquent, votre hypothèse nulle est qu'ils proviennent vraiment de la même population exacte. Traiter les éléments comme s'ils provenaient d'un seul ensemble de 11 échantillons est la façon correcte d'amorcer dans ce cas.

Si vous avez deux parcelles, et dans chaque parcelle a essayé les différents engrais sur différentes saisons d'une manière contrebalancée alors les parcelles seraient des échantillons statified et vous voudriez les traiter comme tels. Mais ce n'est pas le cas ici.

1

Après John, je pense que la façon d'utiliser bootstrap pour tester si les sommes appropriées de ces deux populations différentes sont significativement différentes est comme suit:

x <- c(1.4,2.3,2.9,1.5,1.1) 
y <- c(23.7,26.6,28.5,14.2,17.9,24.3) 


b_x <- boot(x, sum, R = 10000) 
b_y <- boot(y, sum, R = 10000) 

z<-(b_x$t0-b_y$t0)/sqrt(var(b_x$t[,1])+var(b_y$t[,1])) 
pnorm(z) 

On peut donc rejeter clairement l'hypothèse nulle que ce sont les même population. J'ai peut-être manqué un certain degré d'ajustement de liberté, je ne suis pas sûr comment le bootstrapping fonctionne à cet égard, mais un tel ajustement ne changera pas radicalement vos résultats.