1. ProgrammeringRHvordan ta prøver fra data i R

Av Andrie de Vries, Joris Meys

Statistikere må ofte ta prøver av data og deretter beregne statistikk. Det er enkelt å ta en prøve med R fordi en prøve egentlig ikke er noe annet enn en undergruppe av data. For å gjøre det, bruker du prøve (), som tar en vektor som input; så forteller du det hvor mange prøver du skal trekke fra den listen.

Si at du ønsket å simulere ruller av en die, og at du vil få ti resultater. Fordi utfallet av en enkelt rulle med en dyse er et tall mellom en og seks, ser koden din slik ut:

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

Du ber eksempel () om å returnere ti verdier, hver i området 1: 6. Fordi hver rulle av matrisen er uavhengig av hver annen rulle av matrisen, prøver du å erstatte den. Dette betyr at du tar en prøve fra listen og tilbakestiller listen til sin opprinnelige tilstand (med andre ord, du legger elementet du nettopp har trukket tilbake til listen).

For å gjøre dette legger du til argumentet erstatte = SANN, som i eksemplet.

Fordi returverdien for prøven () -funksjonen er et tilfeldig bestemt antall, vil du få forskjellige resultater hver gang du prøver denne funksjonen gjentatte ganger. Dette er riktig oppførsel i de fleste tilfeller, men noen ganger kan det være lurt å få repeterbare resultater hver gang du kjører funksjonen.

Vanligvis vil dette bare skje når du utvikler og tester koden din, eller hvis du vil være sikker på at noen andre kan teste koden din og få de samme verdiene du gjorde. I dette tilfellet er det vanlig å spesifisere en såkalt frøverdi.

Hvis du oppgir en frøverdi, tilbakestilles tilfeldig tallsekvensen til en kjent tilstand. Dette er fordi R ikke oppretter virkelig tilfeldige tall, men bare pseudo-tilfeldige tall. En pseudo-tilfeldig sekvens er et sett med tall som for alle praktiske formål ser ut til å være tilfeldige, men ble generert av en algoritme. Når du setter et startfrø for en pseudo-tilfeldig prosess, returnerer R alltid den samme pseudo-tilfeldige sekvensen.

Men hvis du ikke angir frøet, trekker R seg fra gjeldende tilstand til RNG (random number generator). Ved oppstart kan R sette et tilfeldig frø for å initialisere RNG, men hver gang du kaller det, starter R fra neste verdi i RNG-strømmen. Du kan lese hjelpen for? RNG for å få mer detalj.

I R bruker du set.seed () -funksjonen for å spesifisere frøens startverdi. Argumentet til set.seed () er en hvilken som helst heltallverdi.

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

Hvis du tegner en ny prøve, uten å sette et frø, får du et annet sett med resultater, som du kan forvente:

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

For å demonstrere at set.seed () tilbakestiller RNG nå, prøv det igjen. Men denne gangen, sett frøet en gang til:

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

Du får nøyaktig de samme resultatene som første gang du brukte set.seed (1).

Du kan bruke prøve () til å ta prøver fra datarammen iris. I dette tilfellet kan det være lurt å bruke argumentet erstatte = FALSE. Fordi dette er standardverdien for erstatningsargumentet, trenger du ikke skrive det eksplisitt:

> 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 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