1. ProgrammeringRHvordan tage prøver fra data i R

Af Andrie de Vries, Joris Meys

Statistikere skal ofte tage prøver af data og derefter beregne statistikker. Det er nemt at tage en prøve med R, fordi en prøve egentlig ikke er andet end en undergruppe af data. For at gøre dette bruger du en prøve (), der tager en vektor som input; så fortæller du det, hvor mange prøver der skal trækkes fra listen.

Sig, at du ville simulere ruller af en matrice, og du vil have ti resultater. Fordi resultatet af en enkelt rulle af et matrice er et tal mellem en og seks, ser din kode sådan ud:

> prøve (1: 6, 10, udskift = SAND)
 [1] 2 2 5 3 5 3 5 6 3 5

Du beder prøve () om at returnere ti værdier, hver i området 1: 6. Fordi hver rulle af matrisen er uafhængig af enhver anden rulle af matrisen, prøver du med udskiftning. Det betyder, at du tager en prøve fra listen og nulstiller listen til dens oprindelige tilstand (med andre ord, du sætter det element, du lige har trukket tilbage på listen).

For at gøre dette tilføjer du argumentet erstatte = SAND, som i eksemplet.

Da returneringsværdien for prøven () -funktionen er et tilfældigt bestemt antal, hvis du prøver denne funktion gentagne gange, får du forskellige resultater hver gang. Dette er den rigtige opførsel i de fleste tilfælde, men nogle gange kan det være en god ide at få gentagne resultater, hver gang du kører funktionen.

Normalt vil dette kun ske, når du udvikler og tester din kode, eller hvis du vil være sikker på, at en anden kan teste din kode og få de samme værdier, som du gjorde. I dette tilfælde er det sædvanligt at specificere en såkaldt frøværdi.

Hvis du angiver en frøværdi, nulstilles sekvensnummernummeret til en kendt tilstand. Dette skyldes, at R ikke opretter virkelig tilfældige tal, men kun pseudo-tilfældige tal. En pseudo-tilfældig sekvens er et sæt tal, der til alle praktiske formål ser ud til at være tilfældige, men blev genereret af en algoritme. Når du indstiller et startfrø til en pseudo-tilfældig proces, returnerer R altid den samme pseudo-tilfældige rækkefølge.

Men hvis du ikke indstiller frøet, trækker R ud fra den aktuelle tilstand af tilfældigt talgenerator (RNG). Ved opstart kan R muligvis indstille et tilfældigt frø til at initialisere RNG, men hver gang du kalder det, starter R fra den næste værdi i RNG-strømmen. Du kan læse Hjælp til? RNG for at få flere detaljer.

I R bruger du funktionen set.seed () til at specificere din startværdi for frø. Argumentet til set.seed () er enhver heltalværdi.

> set.seed (1)
> prøve (1: 6, 10, udskift = SAND)
 [1] 2 3 4 6 2 6 6 4 4 1

Hvis du tegner en anden prøve, uden at sætte et frø, får du et andet sæt resultater, som du ville forvente:

> prøve (1: 6, 10, udskift = SAND)
 [1] 2 2 5 3 5 3 5 6 3 5

For at demonstrere, at set.seed () nulstiller RNG, skal du prøve det igen. Men denne gang skal du sætte frøet endnu en gang:

> set.seed (1)
> prøve (1: 6, 10, udskift = SAND)
 [1] 2 3 4 6 2 6 6 4 4 1

Du får nøjagtigt de samme resultater som første gang du brugte set.seed (1).

Du kan bruge prøve () til at tage prøver fra iris i datarammen. I dette tilfælde ønsker du måske at bruge argumentet erstatte = FALSE. Da dette er standardværdien for erstatningsargumentet, behøver du ikke at skrive det eksplicit:

> set.seed (123)
> indeks <- prøve (1: nrow (iris), 5)
> indeks
[1] 44 119 62 133 142
> iris [indeks,]
  Sepal.Length Sepal.Width Petal.Length Petal.Width Arter
44 5,0 3,5 1,6 0,6 sæt
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