konto usunięte

Temat: podział obserwacji zachowujący stratyfikację

Witam wszystkich,

chciałbym się dowiedzieć jak podzielić zbiór danych na zbiór uczący (zawierający 75% wszystkich obserwacji) oraz zbiór testowy (zawierający pozostałych 25% obserwacji) tak aby nowo powstałe zbiory zachowały początkową stratyfikację utrzymującą proporcję 70% obserwacji należących do klasy A i 30% obserwacji należących do klasy B.

Z pierwszą częścią zadania potrafię sobie poradzić

n.obs<-nrow(data)
test<-sample(1:n.obs, round(n.obs/4), replace=F)
learn.set<-data[-test,]
test.set<-data[test,]


nie wiem jednak jak zachować stratyfikację.

Temat: podział obserwacji zachowujący stratyfikację

Pewnie można bardziej finezyjnie, ale tak na szybko:

> A <- rnorm(100, 5, 2)
> B <- rnorm(50, 30, 3)
> zbior <- c( sample(A, 0.7*length(A), replace=F), sample(B, 0.3*length(B), replace=F) )
> length(zbior)
[1] 85


i teraz z tego zbioru trzeba losować zbiór uczący i testowy.


Obrazek
Adrian Olszewski edytował(a) ten post dnia 16.02.12 o godzinie 19:43
Kamil Bęczyński

Kamil Bęczyński R, SAS, analizy

Temat: podział obserwacji zachowujący stratyfikację

Stwórz dwa zbiory - w jednym same A, a w drugim B, następnie wylosuj 70%, otrzymane 4 zbiory sklej tworząc zbiór testowy i uczący. Tak na piechotę.

Jeżeli masz więcej zmiennych niż jedną(każda o dowolnej liczbie poziomów), to daj znać bo to trochę inny problem, ale również do dosyć szybkiego zrobienia.

konto usunięte

Temat: podział obserwacji zachowujący stratyfikację

OK, krok do przody wykonany. Zmiennych jest więcej niż jedna, w sumie 21 (1 objaśniana - ze względu na nią chce zachować proporcje 70:30 oraz 20 niezależnych).
Przeprowadziłem próbkowanie, ale utknąłem na łączeniu zbiorów. Pewnie błąd początkującego w R. Skorzystałem z polecenia

zbiortestowy<-as.data.frame(c(zbiortestowy1,zbiortestowy2))

ale łącznie nie przebiegło po mojej myśli.

konto usunięte

Temat: podział obserwacji zachowujący stratyfikację

OK znam już odpowiedż i na to pytanie. Chwila zastanowienia i wszystko stało się jasne. Polecenie rbind() załatwia sprawę. Dziękuję Wam!
Kamil Bęczyński

Kamil Bęczyński R, SAS, analizy

Temat: podział obserwacji zachowujący stratyfikację

Jeżeli będziesz kiedyś wykonywał więcej operacji wybierania wierszy to czasami warto użyć polecenia subset(), gdyż bywa, że pozwala na bardziej czytelny zapis poleceń.

x=1:11
subset(x,x<6)
#[1] 1 2 3 4 5
subset(x^2,x<6)
#[1] 1 4 9 16 25



Wyślij zaproszenie do