1 Sikkə ataq

R-də obyekt yönümlü proqramlaşdırmanın arxasındakı anlayışları göstərmək üçün bir sikkə çevirmək üçün klassik bir şans prosesini (və ya təsadüfi təcrübəni) nəzərdən keçirəcəyik.

Bu fəsildə, sikkəni bir və ya bir neçə dəfə atmağı simulyasiya edən R kodunu necə tətbiq edəcəyinizi öyrənəcəksiniz.

1.1 Sikkə obyekti

İki tərəfi olan standart bir sikkə düşünün: başlar və quyruqlar .

Şəkil 1.1: sikkənin iki üzü

R istifadə edərək bir sikkə atmaq üçün əvvəlcə sikkə rolunu oynayan bir obyektə ehtiyacımız var. Belə bir sikkə necə yaradırsınız? Bəlkə də iki tərəfli "başlar" və "quyruqlar" olan bir sikkə yaratmağın ən sadə yolu, c () kombinə funksiyası vasitəsilə bir xarakter vektorudur :

"Baş" və "quyruq" əvəzinə 1 və 0 göstərən rəqəmsal sikkə də yarada bilərsiniz :

Eynilə, "başlar" və "quyruqlar" yerinə TRUE və FALSE göstərən məntiqi bir sikkə də yarada bilərsiniz :

1.2 Bir sikkə atmaq

Bir sikkəni təmsil edən bir R obyekti əldə etdikdən sonra , növbəti addım, sikkənin atılmasını təqlid etməyi öyrənməyi əhatə edir.

Unutmamalı olduğunuz əsas şey, bir sikkə atmağın təsadüfi bir təcrübədir: ya başlarınız, ya da quyruqlarınız olur. R -də sikkə atma hərəkətini simulyasiya etməyin bir yolu, giriş vektorundakı elementlərdən təsadüfi nümunələr çəkmək imkanı verən () funksiyasıdır.

Sikkədəki elementlərdən 1 ölçülü təsadüfi bir nümunə götürmək üçün sample () istifadə edərək sikkə atma işini necə simulyasiya etmək olar:

Giriş vektor sikkəsindən 1 ölçülü nümunə götürmək istədiyinizi bildirmək üçün size = 1 arqumentindən istifadə edirsiniz.

1.2.1 Təsadüfi Nümunələr

Varsayılan olaraq, sample () dəyişdirilmədəngöstərilən ölçüdə bir nümunə götürür . Ölçü = 1 olarsa, nümunənin dəyişdirilməsi ilə və ya dəyişdirilməməsinin əslində əhəmiyyəti yoxdur.

Əvəz edilmədəniki element çəkmək üçün nümunə () istifadə edin:

Bu, əvəz = FALSE arqumenti ilə sample () çağırmağa bərabərdir:

Sikkəni üç -dörd dəfə atmağa cəhd etsəniz nə olar?

R -nin bir səhv mesajı hazırladığına diqqət yetirin:

Bunun səbəbi, nümunənin () standart davranışı giriş vektorunun uzunluğundan daha çox element çəkə bilməməsidir.

Daha elementləri cəlb etmək üçün, nümunə lazımdır dəyişdirilməsi iləoxşar əvəz = TRUE dəlil edildiyini ifadə edərək,

1.3 Təsadüfi Toxum

Nümunənin () işləmə üsulu giriş vektorundan təsadüfi bir nümunə götürməkdir. Bu o deməkdir ki, hər dəfə sample () çağıranda fərqli bir çıxış əldə edəcəksiniz. Məsələn, aşağıdakı əmri iki dəfə işlədərkən, ilk çağırışın çıxışı ikinci zəngdəki çıxışdan fərqlidir, baxmayaraq ki, hər iki halda da əmr tamamilə eynidir:

Nümunələrin təkrarlanmasını təmin etmək üçün (mənimki ilə eyni çıxışı əldə edə bilərsiniz), təsadüfi toxumadlanan şeyi təyin etməlisiniz. Bu set.seed () funksiyası ilə edilir. Bir toxum təyin edərək , nümunə () kimi təsadüfi generator funksiyalarından birini hər dəfə istifadə etdiyiniz zaman eyni dəyərləri alacaqsınız.

1.4 Fərqli ehtimallarla nümunə götürmə

Nəhayət, nümunə (), giriş vektorundakı hər bir element üçün xüsusi ehtimallar təmin etməyə imkan verən prob arqumenti ilə gəlir.

Varsayılan olaraq, prob = NULL, yəni hər bir elementin eyni çəkilmə ehtimalına malikdir. Bir sikkə atma nümunəsində, əmr nümunəsi (sikkə) nümunəyə bərabərdir (sikkə, prob = c (0.5, 0.5)). İkinci vəziyyətdə, başın 50% və quyruqların 50% olma ehtimalını açıq şəkildə ifadə edirik:

Bununla birlikdə, giriş vektorundakı elementlərin hər biri üçün fərqli ehtimallar verə bilərsiniz. Məsələn, başı 20%, quyruğu 80% olan yüklü birsikkəni simulyasiya etmək üçün prob = c (0.2, 0.8) kimi təyin edin:

1.4.1 Bir sikkə atmağın simulyasiyası

İndi R ilə bir sikkə atmaq üçün bütün elementlərə sahib olduğumuza görə, bir sikkəni 100 dəfə çevirməyi simulyasiya edək və sonra ortaya çıxan "baş" və "quyruq" sayını saymaq üçün funksiya cədvəlini () istifadə edək:

Mənim vəziyyətimdə 50 baş və 50 quyruq var. Nəticələriniz yəqin ki, mənimkindən fərqli olacaq. Bəzən daha çox "baş" alacaqsan, bəzən daha çox "quyruq" alacaqsan, bəzən isə düz 50 "baş" və 50 "quyruq" alacaqsan.

Gəlin 100 flipslik bir sıra işləyək və table () funksiyasından istifadə edərək "başlar" və "quyruqlar" tezliyini tapaq:

Hər şeyi daha maraqlı etmək üçün, hesab edək necə bir sıra üzərində rəhbərləri inkişaf etdikcə tezliyi n (bu halda tosses n = num_flips).

Heads_freq vektoru ilə (məcmu) nisbi tezlikləri xətti bir qrafiklə qrafikləşdirə bilərik: