1. Programowanie Jak pobierać próbki z danych w R

Autorstwa Andrie de Vries, Joris Meys

Statystycy często muszą pobierać próbki danych, a następnie obliczać statystyki. Pobieranie próbki jest łatwe dzięki R, ponieważ próbka jest tak naprawdę niczym więcej niż podzbiorem danych. Aby to zrobić, skorzystaj z sample (), który pobiera wektor jako dane wejściowe; następnie podajesz, ile próbek ma pobrać z tej listy.

Załóżmy, że chcesz symulować rzuty kostką i chcesz uzyskać dziesięć wyników. Ponieważ wynik pojedynczego rzutu kostką jest liczbą od jednego do sześciu, twój kod wygląda następująco:

> próbka (1: 6, 10, zamień = PRAWDA)
 [1] 2 2 5 3 5 3 5 6 3 5

Polecenie sample () zwraca dziesięć wartości, każda w zakresie 1: 6. Ponieważ każdy rzut kości jest niezależny od każdego innego rzutu, próbujesz z wymianą. Oznacza to, że pobierasz jedną próbkę z listy i resetujesz listę do pierwotnego stanu (innymi słowy, umieszczasz element, który właśnie narysowałeś z powrotem na liście).

Aby to zrobić, dodaj argument replace = TRUE, jak w przykładzie.

Ponieważ wartość zwracana przez funkcję sample () jest liczbą losowo ustaloną, jeśli spróbujesz tej funkcji wielokrotnie, za każdym razem otrzymasz inne wyniki. Jest to prawidłowe zachowanie w większości przypadków, ale czasami możesz chcieć uzyskać powtarzalne wyniki przy każdym uruchomieniu funkcji.

Zwykle dzieje się tak tylko podczas opracowywania i testowania kodu lub jeśli chcesz mieć pewność, że ktoś inny może przetestować kod i uzyskać te same wartości, które zrobiłeś. W takim przypadku zwykle określa się tak zwaną wartość początkową.

Jeśli podasz wartość początkową, sekwencja liczb losowych zostanie zresetowana do znanego stanu. Wynika to z faktu, że R nie tworzy liczb naprawdę losowych, a jedynie liczby pseudolosowe. Sekwencja pseudolosowa jest zbiorem liczb, które ze względów praktycznych wydają się losowe, ale zostały wygenerowane przez algorytm. Po ustawieniu początkowego zarodka dla procesu pseudolosowego R zawsze zwraca tę samą pseudolosową sekwencję.

Ale jeśli nie ustawisz zarodka, R pobiera z bieżącego stanu generatora liczb losowych (RNG). Przy uruchamianiu R może ustawić losowe ziarno, aby zainicjować RNG, ale za każdym razem, gdy go wywołasz, R zaczyna od następnej wartości w strumieniu RNG. Możesz przeczytać Pomoc dla? RNG, aby uzyskać więcej szczegółów.

W R używasz funkcji set.seed () do określenia początkowej wartości początkowej. Argumentem set.seed () jest dowolna liczba całkowita.

> set.seed (1)
> próbka (1: 6, 10, zamień = PRAWDA)
 [1] 2 3 4 6 2 6 6 4 4 1

Jeśli narysujesz kolejną próbkę, bez ustawiania zarodka, otrzymasz inny zestaw wyników, zgodnie z oczekiwaniami:

> próbka (1: 6, 10, zamień = PRAWDA)
 [1] 2 2 5 3 5 3 5 6 3 5

Teraz, aby wykazać, że set.seed () faktycznie resetuje RNG, spróbuj ponownie. Ale tym razem ustaw ziarno jeszcze raz:

> set.seed (1)
> próbka (1: 6, 10, zamień = PRAWDA)
 [1] 2 3 4 6 2 6 6 4 4 1

Otrzymujesz dokładnie takie same wyniki jak przy pierwszym użyciu set.seed (1).

Możesz użyć sample (), aby pobrać próbki z tęczówki ramki danych. W takim przypadku możesz użyć argumentu replace = FALSE. Ponieważ jest to domyślna wartość argumentu replace, nie musisz pisać tego wprost:

> set.seed (123)
> indeks <- próbka (1: nrow (tęczówka), 5)
> indeks
[1] 44 119 62 133 142
> tęczówka [indeks,]
  Sepal.Length Sepal.Width Petal.Length Petal.Width Gatunek
44 5,0 3,5 1,6 0,6 setosa
119 7,7 2,6 6,9 2,3 virginica
62 5,9 3,0 4,2 1,5 versicolor
133 6,4 2,8 5,6 2,2 virginica
142 6,9 3,1 5,1 2,3 virginica