Metody ponownego próbkowania / symulacji: monte carlo, bootstrapping, jackknifing, cross-validation, testy randomizacji i testy permutacji

73

Próbuję zrozumieć różnicę między różnymi metodami ponownego próbkowania (symulacja Monte Carlo, ładowanie parametryczne, ładowanie nieparametryczne, podnoszenie, walidacja krzyżowa, testy randomizacji i testy permutacji) i ich implementacja w moim kontekście przy użyciu R.

Powiedzmy, że mam następującą sytuację - chcę wykonać ANOVA ze zmienną Y ( Yvar) i zmienną X ( Xvar). Xvarjest kategoryczny. Interesują mnie następujące rzeczy:

(1) Znaczenie wartości p - współczynnik fałszywych odkryć

(2) wielkość efektu Xvarpoziomów

Yvar <- c(8,9,10,13,12, 14,18,12,8,9,   1,3,2,3,4)
Xvar <- c(rep("A", 5),  rep("B", 5),    rep("C", 5))
mydf <- data.frame (Yvar, Xvar)

Czy możesz podać mi żel, aby wyjaśnić różnice w próbkowaniu za pomocą jednoznacznie wykonanych przykładów, w jaki sposób działają te metody próbkowania?

Edycje: Oto moje próby:

Bootstrap 10 próbek bootstrap, liczba próbek z wymianą oznacza, że ​​próbki można powtórzyć

boot.samples <- list()
for(i in 1:10) {
   t.xvar <- Xvar[ sample(length(Xvar), length(Xvar), replace=TRUE) ]
   t.yvar <- Yvar[ sample(length(Yvar), length(Yvar), replace=TRUE) ]
   b.df <- data.frame (t.xvar, t.yvar) 
   boot.samples[[i]] <- b.df 
}
str(boot.samples)
 boot.samples[1]

Permutacja: 10 próbek permutacji, liczba próbek próbek bez zamiany

 permt.samples <- list()
    for(i in 1:10) {
       t.xvar <- Xvar[ sample(length(Xvar), length(Xvar), replace=FALSE) ]
       t.yvar <- Yvar[ sample(length(Yvar), length(Yvar), replace=FALSE) ]
       b.df <- data.frame (t.xvar, t.yvar) 
       permt.samples[[i]] <- b.df 
    }
    str(permt.samples)
    permt.samples[1]

Symulacja Monte Caro

Chociaż termin „ponowne próbkowanie” jest często używany w odniesieniu do dowolnej powtarzanej losowej lub pseudolosowej symulacji próbkowania, gdy „ponowne próbkowanie” odbywa się ze znanego rozkładu teoretycznego, poprawnym terminem jest symulacja „Monte Carlo”.

Nie jestem pewien co do wszystkich powyższych warunków i czy moje powyższe zmiany są prawidłowe. Znalazłem trochę informacji na temat noża, ale nie mogłem go oswoić z moją sytuacją.

Ram Sharma
źródło
3
Jackknife to prostszy poprzednik bootstrapu. en.wikipedia.org/wiki/Jackknife_(statistics)
EngrStudent
4
Mówiąc dokładniej:
jackknife to próba pomijania

Odpowiedzi:

121

Możemy znaleźć różne metody ponownego próbkowania lub luźno zwane metodami „ symulacyjnymi ”, które zależą od ponownego próbkowania lub tasowania próbek. Mogą występować różnice w opiniach w odniesieniu do właściwej terminologii, ale następująca dyskusja próbuje uogólnić i uprościć to, co jest dostępne w odpowiedniej literaturze:

Metody ponownego próbkowania są stosowane w (1) szacowaniu precyzji / dokładności statystyk próbki poprzez użycie podzbioru danych (np. Jackknifing) lub losowe zastępowanie z zestawu punktów danych (np. Bootstrapping) (2) Wymiana etykiet na punktach danych podczas wykonywania istotności testy ( testy permutacyjne, zwane również testami dokładnymi, testy randomizacji lub testy ponownej randomizacji) (3) Sprawdzanie poprawności modeli przy użyciu losowych podzbiorów (ładowanie, walidacja krzyżowa) (patrz wikipedia: metody ponownego próbkowania )

BOOTSTRAPING

Bootstrapping jest statystyczną metodą szacowania rozkładu próbkowania estymatora poprzez próbkowanie z zastąpieniem z oryginalnej próbki”. Metoda przypisuje miary dokładności (zdefiniowane w kategoriach odchylenia , wariancji , przedziałów ufności , błędu prognozowania lub innej takiej miary) do oszacowań próbek.

Podstawowa idea ładowania początkowego polega na tym, że wnioskowanie o populacji na podstawie danych przykładowych ( próbka → populacja ) można modelować poprzez ponowne próbkowanie danych przykładowych i przeprowadzanie wnioskowania na (ponowne próbkowanie → próbka). Ponieważ populacja nie jest znana, prawdziwy błąd w przykładowej statystyce w stosunku do jej wartości populacji jest nieznany. W próbkach ładowania początkowego „populacja” jest w rzeczywistości próbką i jest to znane; stąd jakość wnioskowania na podstawie ponownego próbkowania danych → „prawdziwa” próbka jest mierzalna. ”patrz wikipedia

Yvar <- c(8,9,10,13,12, 14,18,12,8,9,   1,3,2,3,4)

#To generate a single bootstrap sample
sample(Yvar, replace = TRUE) 

 #generate 1000 bootstrap samples
boot <-list()
for (i in 1:1000) 
   boot[[i]] <- sample(Yvar,replace=TRUE)

W problemach jednowymiarowych zwykle dopuszczalne jest ponowne próbkowanie poszczególnych obserwacji z zastąpieniem („resampling sprawy”). Tutaj ponownie próbkujemy dane z zamiennikiem, a rozmiar ponownego próbkowania musi być równy rozmiarowi oryginalnego zestawu danych.

W problemach z regresją ponowne próbkowanie przypadków odnosi się do prostego schematu ponownego próbkowania poszczególnych przypadków - często wierszy zestawu danych w problemach z regresją, zmienne wyjaśniające są często ustalone lub przynajmniej obserwowane z większą kontrolą niż zmienna odpowiedzi. Ponadto zakres zmiennych objaśniających określa dostępne z nich informacje. Dlatego ponowne próbkowanie przypadków oznacza, że ​​każda próbka bootstrapu straci niektóre informacje (patrz Wikipedia ). Logiczne będzie więc próbkowanie wierszy danych raczej po prostu Yvar.

Yvar <- c(8,9,10,13,12, 14,18,12,8,9,   1,3,2,3,4)
Xvar <- c(rep("A", 5),  rep("B", 5),    rep("C", 5))
mydf <- data.frame (Yvar, Xvar)    

boot.samples <- list()
for(i in 1:10) {
   b.samples.cases <- sample(length(Xvar), length(Xvar), replace=TRUE) 
   b.mydf <- mydf[b.samples.cases,] 
   boot.samples[[i]] <- b.mydf
}
str(boot.samples)
 boot.samples[1]

Niektóre przypadki są powtarzane, ponieważ próbujemy z zamiennikiem.

Bootstrap parametryczny - model parametryczny jest dopasowywany do danych, często na podstawie maksymalnego prawdopodobieństwa, i próbki losowych liczb są pobierane z tego dopasowanego modelu . Zwykle próbka losowana ma taki sam rozmiar próbki jak oryginalne dane. Następnie ilość lub oszacowanie , interesujące są obliczane na podstawie tych danych. Ten proces próbkowania jest powtarzany wiele razy, jak w przypadku innych metod ładowania początkowego. Zastosowanie modelu parametrycznego na etapie próbkowania metody ładowania początkowego prowadzi do procedur, które różnią się od procedur uzyskiwanych przez zastosowanie podstawowej teorii statystycznej wnioskować dla tego samego modelu. ”(patrz Wikipedia ). Poniżej przedstawiono parametryczny bootstrap z założeniem rozkładu normalnego z parametrami średniej i odchylenia standardowego.

Yvar <- c(8,9,10,13,12, 14,18,12,8,9,   1,3,2,3,4)

# parameters for Yvar 
mean.y <- mean(Yvar)
sd.y <- sd(Yvar)

#To generate a single bootstrap sample with assumed normal distribution (mean, sd)
rnorm(length(Yvar), mean.y, sd.y)

 #generate 1000 bootstrap samples
boot <-list()
for (i in 1:1000) 
   boot[[i]] <- rnorm(length(Yvar), mean.y, sd.y)

Istnieją inne warianty bootstrap, zajrzyj na stronę wikipedii lub jakąkolwiek dobrą książkę statystyczną na temat ponownego próbkowania.

JACKNIFE

„Estymator parametru dla scyzoryka jest znajdowany przez systematyczne pomijanie każdej obserwacji z zestawu danych i obliczanie oszacowania, a następnie znajdowanie średniej z tych obliczeń. Biorąc pod uwagę próbkę o rozmiarze N, oszacowanie dla scyzoryka jest uzyskiwane poprzez agregację oszacowań dla każdego N − 1oszacowania w próbce. ” patrz: wikipedia Poniżej pokazano, jak poderwać nóż Yvar.

jackdf <- list()
jack <- numeric(length(Yvar)-1)

for (i in 1:length (Yvar)){

for (j in 1:length(Yvar)){
     if(j < i){ 
            jack[j] <- Yvar[j]
}  else if(j > i) { 
             jack[j-1] <- Yvar[j]
}
}
jackdf[[i]] <- jack
}
jackdf

„zwykły bootstrap i scyzoryk, oszacuj zmienność statystyki na podstawie zmienności tej statystyki między podpróbkami, a nie na podstawie założeń parametrycznych . Dla bardziej ogólnego scyzoryka, scyzoryka obserwacyjnego delete-m, bootstrap może być postrzegany jako przypadkowy przybliżenie. Oba dają podobne wyniki liczbowe, dlatego każdy z nich może być postrzegany jako przybliżenie do drugiego ”. Zobacz to pytanie na temat Bootstrap vs Jacknife.

BADANIA LANDOMIZACYJNE

„W testach parametrycznych losowo pobieramy próbki z jednej lub więcej populacji. Przyjmujemy pewne założenia dotyczące tych populacji, najczęściej że zwykle są one rozmieszczone z równymi wariancjami. Ustalamy hipotezę zerową, która jest sformułowana w kategoriach parametrów, często w postaci m1 -m2 = 0. Używamy naszych statystyk przykładowych jako szacunków odpowiednich parametrów populacji i obliczamy statystyki testowe (takie jak w teście) Na przykład: w t Studenta - test na różnice w średnich, gdy wariancje są nieznane, ale są brane pod uwagę być równym. Hipoteza zainteresowania jest taka H0: m1 = m2. Jedna z alternatywnych hipotez mogłaby być sformułowana jako:HA: m1 < m2. Biorąc pod uwagę dwie próbki pobrane z populacji 1 i 2, przy założeniu, że są to zwykle populacje rozmieszczone z jednakowymi wariancjami i że próbki zostały pobrane niezależnie i losowo z każdej populacji, wówczas można opracować statystyki, których rozkład jest znany, do przetestowania H0.

Jednym ze sposobów uniknięcia tych założeń dystrybucyjnych jest podejście zwane teraz statystykami nieparametrycznymi, porządkami rangowymi, podobnymi do rang i statystykami bez dystrybucji. Te statystyki bez dystrybucji są zwykle krytykowane za mniej „wydajną” niż analogiczny test oparty na założeniu, że populacje są normalnie rozmieszczone.

Innym alternatywnym podejściem jest podejście losowe - „proces losowego przypisywania stopni do obserwacji niezależnych od własnej wiedzy o tym, której próbki należy do obserwacji. Test randomizacji wykorzystuje taką procedurę, ale działa to na podstawie obserwacji, a nie połączenia ranking obserwacji. Z tego powodu rozkład analogicznej statystyki (suma obserwacji w jednej próbce) nie może być łatwo tabelaryczny, chociaż teoretycznie możliwe jest wyliczenie takiego rozkładu ”( patrz )

Testy randomizacji różnią się od testów parametrycznych prawie pod każdym względem. (1) Nie ma wymogu, abyśmy mieli losowe próbki z jednej lub więcej populacji - w rzeczywistości zwykle nie pobrano losowych próbek. (2) Rzadko myślimy w kategoriach populacji, z których pochodzą dane, i nie ma potrzeby zakładania niczego o normalności lub homoscedastyczności (3) Nasza hipoteza zerowa nie ma nic wspólnego z parametrami, ale jest sformułowana raczej niejasno, ponieważ: na przykład hipoteza, że ​​leczenie nie ma wpływu na wyniki uczestników. (4) Ponieważ nie jesteśmy zainteresowani populacjami, nie zajmujemy się szacowaniem (a nawet testowaniem) cech tych populacji (5) Obliczamy niektóre rodzaj statystyki testowej, jednak nie porównujemy tej statystyki do rozkładów tabelarycznych. Zamiast, porównujemy to z wynikami, które otrzymujemy, gdy wielokrotnie randomizujemy dane w grupach i obliczamy odpowiednią statystykę dla każdej randomizacji. (6) Jeszcze bardziej niż testy parametryczne, testy randomizacji podkreślają znaczenie losowego przydzielania uczestników do zabiegów. ”zob .

Typem testu randomizacji, który jest bardzo popularny, jest test permutacji. Jeśli nasza próbka ma wielkość 12 i 5, całkowita możliwa permutacja wynosi C(12,5) = 792. Gdyby nasza próbka wynosiła 10 i 15, wówczas byłoby ponad 3,2 miliona rozwiązań. To jest wyzwanie komputerowe: co wtedy? Próbka . Kiedy wszechświat możliwych układów jest zbyt duży, by wyliczyć, dlaczego nie próbować układów z tego wszechświata niezależnie i losowo? Rozkład statystyki testowej w tej serii próbek można następnie zestawić w tabeli, obliczyć jej średnią i wariancję oraz oszacować poziom błędu związany z testem hipotez.

BADANIE UPRAWNIENIA

Według Wikipedia „sprawdzian permutacji (zwany również testy randomizacji , testujących randomizacji , lub dokładny test ) jest rodzajem testu istotności statystycznej w którym rozkład statystyk testowych w hipotezie zerowej otrzymuje się przez wszystkie możliwe wartości statystyki testowej przy przegrupowaniu etykiet na obserwowanych punktach danych. Istnieją testy permutacji dla dowolnej statystyki testowej, niezależnie od tego, czy znany jest jej rozkład. W ten sposób zawsze można wybrać statystykę, która najlepiej rozróżnia hipotezę od alternatywy i co minimalizuje straty. ”

Różnica między permutacją a bootstrapem polega na tym, że próbka bootstrapsa z zamianą, a próbka permutacji bez zamiany . W obu przypadkach porządek czasowy obserwacji jest tracony, a zatem utrata grupowania zmienności - zapewniając w ten sposób, że próbki znajdują się pod hipotezą zerową braku grupowania zmienności.

Permutacje zawsze mają te same obserwacje, więc bardziej przypominają oryginalne dane niż próbki bootstrap. Oczekuje się, że test permutacji powinien być bardziej czuły niż test ładowania początkowego. Permutacje niszczą grupowanie zmienności, ale nie dodają żadnej innej zmienności .

Zobacz pytanie o permutację a ładowanie - „Test permutacji jest najlepszy do testowania hipotez, a ładowanie jest najlepsze do szacowania przedziałów ufności ”.

Aby wykonać permutację w tym przypadku, możemy po prostu zmienić replace = FALSEpowyższy przykład bootstrapu.

Yvar <- c(8,9,10,13,12, 14,18,12,8,9,   1,3,2,3,4)
     #generate 1000 bootstrap samples
       permutes <-list()
    for (i in 1:1000) 
       permutes[[i]] <- sample(Yvar,replace=FALSE)

W przypadku więcej niż jednej zmiennej samo wybranie wierszy i przetasowanie kolejności nie zrobi żadnej różnicy, ponieważ dane pozostaną takie same. Więc przetasowujemy zmienną y. Coś, co zrobiłeś, ale nie sądzę, abyśmy potrzebowali podwójnego przetasowania obu xi y variables(tak jak zrobiłeś).

Yvar <- c(8,9,10,13,12, 14,18,12,8,9,   1,3,2,3,4)
Xvar <- c(rep("A", 5),  rep("B", 5),    rep("C", 5))
mydf <- data.frame (Yvar, Xvar)

 permt.samples <- list()
    for(i in 1:10) {
       t.yvar <- Yvar[ sample(length(Yvar), length(Yvar), replace=FALSE) ]
       b.df <- data.frame (Xvar, t.yvar) 
       permt.samples[[i]] <- b.df 
    }
    str(permt.samples)
    permt.samples[1]

METODY MONTE CARLO

„Metody Monte Carlo (lub eksperymenty Monte Carlo) są szeroką klasą algorytmów obliczeniowych, które polegają na wielokrotnym losowym próbkowaniu w celu uzyskania wyników numerycznych; zazwyczaj przeprowadza się wiele symulacji w celu uzyskania rozkładu nieznanego podmiotu probabilistycznego. Nazwa pochodzi od podobieństwa techniki do gry i nagrywania wyników w prawdziwym kasynie hazardowym. ”patrz Wikipedia

„W statystyce stosowanej metody Monte Carlo są zasadniczo stosowane do dwóch celów:

(1) Aby porównać konkurencyjne statystyki dla małych próbek w realistycznych warunkach danych. Chociaż błąd typu I i właściwości mocy statystyki można obliczyć dla danych uzyskanych z klasycznych rozkładów teoretycznych (np. Krzywa normalna, rozkład Cauchy'ego) dla warunków asymptotycznych (tj. Nieskończona wielkość próby i nieskończenie mały efekt leczenia), prawdziwe dane często nie mają takich dystrybucji.

(2) Zapewnienie implementacji testów hipotez, które są bardziej wydajne niż testy dokładne, takie jak testy permutacyjne (których często nie da się obliczyć), a jednocześnie są bardziej dokładne niż wartości krytyczne dla rozkładów asymptotycznych.

Metody Monte Carlo stanowią także kompromis między przybliżonymi randomizacjami a testami permutacji . Przybliżeniu Test randomizacji jest oparty na określonym podzbiór wszystkich permutacji (co pociąga za sobą ogromne sprzątania potencjalnie których kombinacje zostały uwzględnione). Podejście Monte Carlo opiera się na określonej liczbie losowo narysowanych permutacji ( zamieniając niewielką utratę precyzji, jeśli permutacja jest rysowana dwukrotnie - lub częściej - ze względu na skuteczność nie konieczności śledzenia, które permutacje zostały już wybrane ). ”

Zarówno test MC, jak i test permutacji są czasami łącznie nazywane testami randomizacji . Różnica polega na tym, że w MC próbkujemy próbki permutacji, raczej używając wszystkich możliwych kombinacji patrz .

WALIDACJA KRZYŻOWA

Pomysł poza weryfikacją krzyżową polega na tym, że modele powinny być testowane z danymi, które nie zostały użyte do dopasowania modelu. Walidacja krzyżowa jest prawdopodobnie najczęściej stosowana w kontekście prognozowania .

„Walidacja krzyżowa jest statystyczną metodą sprawdzania poprawności modelu predykcyjnego. Podzbiory danych są trzymane do użytku jako zestawy walidacyjne ; model jest dopasowany do pozostałych danych (zestawu szkoleniowego) i służy do przewidywania zestawu walidacyjnego. Uśrednianie jakość prognoz w zestawach walidacyjnych daje ogólną miarę dokładności prognoz.

Jedna forma walidacji krzyżowej wyklucza pojedynczą obserwację na raz; to jest podobne do scyzoryka. Kolejna, krotna weryfikacja krzyżowa K dzieli dane na K podzbiorów; każdy z nich odbywa się po kolei jako zestaw walidacyjny. ”patrz Wikipedia . Walidacja krzyżowa odbywa się zwykle przy użyciu danych ilościowych. Możesz w jakiś sposób przekonwertować swoje dane jakościowe (dane czynnikowe) na ilościowe, aby dopasować model liniowy i przetestować ten model. Poniższe czynności są proste strategia wstrzymywania, w której 50% danych jest wykorzystywane do przewidywania modelu, podczas gdy reszta służy do testowania. Załóżmy, że Xvarjest również zmienną ilościową.

    Yvar <- c(8,9,10,13,12, 14,18,12,8,9,   1,3,2,3,4)
    Xvar <- c(rep(1, 5),  rep(2, 5),    rep(3, 5))
    mydf <- data.frame (Yvar, Xvar)
    training.id <- sample(1:nrow(mydf), round(nrow(mydf)/2,0), replace = FALSE)
    test.id <- setdiff(1:nrow(mydf), training.id)
   # training dataset 
    mydf.train <- mydf[training.id]

    #testing dataset 
    mydf.test <- mydf[test.id]

W przeciwieństwie do testów ładowania początkowego i permutacji zestaw danych do weryfikacji krzyżowej do celów szkolenia i testowania jest inny. Poniższy rysunek pokazuje podsumowanie ponownego próbkowania różnymi metodami.

wprowadź opis zdjęcia tutaj

Mam nadzieję, że to trochę pomoże.

rdorlearn
źródło
23
Jest to imponujące - zwłaszcza, że ​​jest to Twoja pierwsza odpowiedź! Mam nadzieję, że nadal tu będziesz uczestniczyć i czekam na Twój przyszły wkład w naszą stronę.
whuber
Ta odpowiedź jest TAK WIELKA, że jest odpowiedzią na duży obraz. Jednak niektóre łącza wydają się być porzucone. Czy ktoś ma pojęcie, gdzie są linki?
tintinthong
6

Oto mój wkład.

Dane

Yvar <- c(8,9,10,13,12,
          14,18,12,8,9,
          1,3,2,3,4)
Xvar <- rep(LETTERS[1:3], each=5)
mydf <- data.frame(Yvar, Xvar)

Monte Carlo

Widzę Monte Carlo jako metodę uzyskania rozkładu zmiennej losowej (wynikowej), która jest wynikiem nietrywialnej funkcji innych (wejściowych) zmiennych losowych. Nie widzę od razu nakładania się z bieżącą analizą ANOVA, prawdopodobnie inni członkowie forum mogą tutaj wnieść swój wkład.

Bootstrapping

Celem jest wyobrażenie o niepewności statystyki obliczonej na podstawie zaobserwowanej próby. Na przykład: możemy obliczyć, że średnia próby Yvar wynosi 8,4, ale jak jesteśmy pewni średniej populacji Yvar? Sztuczka polega na tym, aby próbka była populacją i próbowała wiele razy z tej fałszywej populacji.

n <- 1000
bootstrap_means <- numeric(length=n)
for(i in 1:n){
   bootstrap_sample <- sample(x=Yvar, size=length(Yvar), replace=TRUE)
   bootstrap_means[i] <- mean(bootstrap_sample)
}
hist(bootstrap_means)

Właśnie pobraliśmy próbki i nie przyjęliśmy żadnego rozkładu parametrycznego. To jest nieparametryczny pasek startowy . Jeśli czujesz się komfortowo, zakładając na przykład, że Xvar jest normalnie dystrybuowany, możesz również próbkować z rozkładu normalnego ( rnorm(...)) przy użyciu oszacowanej średniej i odchylenia standardowego, byłby to parametryczny bootstrap .

Być może inni użytkownicy mogą podawać aplikacje bootstrap w odniesieniu do wielkości efektów Xvarpoziomów?

Jackknifing

Scyzoryk wydaje się nieco przestarzały. Dla kompletności możesz porównać to mniej więcej do bootstrapu, ale strategia jest tutaj, aby zobaczyć, co się stanie, jeśli pominiemy jedną obserwację (i powtórzymy to dla każdej obserwacji).

Walidacja krzyżowa

W ramach walidacji krzyżowej dzielisz (zwykle duży) zestaw danych na zestaw szkoleniowy i zestaw walidacyjny, aby zobaczyć, jak dobrze Twój model szacunkowy jest w stanie przewidzieć wartości w zestawie walidacyjnym. Osobiście nie widziałem jeszcze zastosowania krzyżowej walidacji w ANOVA, więc wolę pozostawić tę część innym.

Testy randomizacji / permutacji

Ostrzegamy, terminologia nie jest uzgodniona. Zobacz Różnica między testem randomizacji a testem permutacji .

Hipoteza zerowa byłaby taka, że ​​nie ma różnicy między populacjami grup A, B i C, więc nie powinno mieć znaczenia, czy losowo wymienimy etykiety 15 wartości Xvara. Jeśli pierwotnie zaobserwowana wartość F (lub inna statystyka) nie zgadza się z wartościami uzyskanymi po losowej wymianie etykiet, prawdopodobnie miało to znaczenie i hipotezę zerową można odrzucić.

observed_F_value <- anova(lm(Yvar ~ Xvar))$"F value"[1]

n <- 10000
permutation_F_values <- numeric(length=n)

for(i in 1:n){
   # note: the sample function without extra parameters defaults to a permutation
   temp_fit <- anova(lm(Yvar ~ sample(Xvar)))
   permutation_F_values[i] <- temp_fit$"F value"[1]
}

hist(permutation_F_values, xlim=range(c(observed_F_value, permutation_F_values)))
abline(v=observed_F_value, lwd=3, col="red")
cat("P value: ", sum(permutation_F_values >= observed_F_value), "/", n, "\n", sep="")

histogram

Uważaj jednak na sposób zmiany przypisania etykiet w przypadku skomplikowanych projektów. Zauważ również, że w przypadku nierównych wariancji zerowa hipoteza wymienialności nie jest prawdziwa, więc ten test permutacji nie byłby poprawny.

Tutaj nie przejrzeliśmy wyraźnie wszystkich możliwych permutacji etykiet, jest to szacunkowa wartość P dla Monte Carlo . Przy małych zestawach danych można przejść przez wszystkie możliwe kombinacje, ale powyższy kod R jest nieco łatwiejszy do zrozumienia.

lgbi
źródło