Konbinatoria eta probabilitateen kalkulua Rrekin

Wikibooks(e)tik
Hona jo: nabigazioa, bilatu

Sarrera[aldatu]

R estatistikarako programazio-lengoaia da, askea eta doakoa. Kalkulu estatistikoak modu azkar eta eroso batean egiteko aukera eskaintzen du. Erabiltzaileari begira, kalkuluak aginduak idatziz eta exekutatuz egiten dira. Hala eta guztiz ere, badira erabiltzaileari lana aiseago egiten dioten interfaze grafikoak (hala nola, R commander eta Rstudio esaterako).

Liburu honetako helburua konbinatoria eta probabilitateen kalkulua ikastea da, Rri esker, hastapenetatik maila ertain batera. Konbinatoria eta probabilitateen kalkulua lantzeko maiz kasuen zerrenda luzeak osatu behar dira. Horiek eskuz osatzea nekeza izaten da eta maiz konbinatoriari eta probabilitateen kalkuluari buruzko problemak formulak aplikatuz ikasten dira, horien oinarrian dauden elementuak kontuan hartu gabe; Rri esker, berriz, zerrenda horiek aise osatu eta emaitzak ikusi eta formulak hobeto ulertuko dira.

Beste alde batetik, sarri erabiltzen diren eragiketa eta kalkuluez gainera, Rk paketetan biltzen ditu bere aginduak. Konbinatoria eta probabilitateen kalkulurako prob package da osatuena, baina konbinatoria lantzeko combinat eta gtools paketeak ere aukeran daude, prob paketearen aldean ezer gutxi gaineratzen duten arren, konbinatoria eta probabilitateari buruz landuko ditugun gaietan behinik behin. Rren pakete basikoan ("base") ere, badaude konbinatoria eta probabilitateen kalkuluari buruzko agindu jakingarriak.

Azkenik, pakete berezi bat erabiltzeko, pakete hori jeitsi eta instalatu behar da. Saio bakoitzean, pakete horretako agindu bat erabiltzeko, deitu egin behar zaio. Adibidez, prob paketeko agindu bat erabiltzeko, hau exekutatu behar da saio bakoitzaren hasieran:

>library(prob)

Wikiliburu honetan ariketa edo adibide bakoitza saio berri batean egiten dela pentsatuko da. Beraz, horietako bakoitzaren hasieran deituko zaio beharrezkoa den paketeari.

R nola instalatu jakiteko informazioa eta oinarrizko tutorial bat wikiliburu honetan dituzu eskura: R estatistika softwarea.

Konbinatoria[aldatu]

Konbinatoriak zenbaketa-problemak aztertzen ditu. Hastapen moduan, zenbaketa-problemak bi motakoak izan daitezke:

1 Aukeraketa-problemak, non elementu-multzo batetik aukeratutako elementu batzuk, azpimultzo bat, alegia.
1.1 Aukeraketa bakoitzean ordena kontuan gabe (hau da "a"-"b" eta "b"-"a" aukeraketak berdinak izanik). Aukeraketa bakoitzari konbinazio edo konbinazio arrunt deritzo (eta elementuak errepikatu ahal badaitezke aukeraketan, multikonbinazio deritzo).
1.2 Aukeraketa bakoitzean ordena kontuan hartuz (hau da "a"-"b" eta "b"-"a" aukeraketak desberdintzat harturik). Aukeraketa bakoitzari aldakuntza deritzo (eta errepikapena onartzen bada, errepikatuzko aldakuntza).
2 Ordenatze-problemak, non elementu batzuk ordenatzeko era kopuruak zenbatu behar diren. Ordenatze bakoitzari permutazio deritzo (eta Rn ere bai).

Konbinazio arruntak[aldatu]


Ariketa 1. 3etik 7rako zenbakidun bolak dituen ontzi batetik bi aukeratu behar dira, aldi bakoitzean bola multzora itzuli gabe (hau da, errepikapenik onartu gabe) eta ordena kontuan hartu gabe. Zenbat eratara egin daiteke?


>library(prob)
>urnsamples(3:7,size=2,rep=F,order=T)
      [,1] [,2]
 [1,]    3    4
 [2,]    3    5
 [3,]    3    6
 [4,]    3    7
 [5,]    4    5
 [6,]    4    6
 [7,]    4    7
 [8,]    5    6
 [9,]    5    7
[10,]    6    7

urnsamples aginduko lehen parametroak aukeran dauden elementuen zerrenda ematen du. size aukera (kasu honetan size=2) aukerak beharreko elementuen kopurua ematen du. rep aukerak (T edo TRUE, egia; F edo FALSE, faltsua) elementuen errepikapena edo itzulera onartzen den adierazten du. order aukerak, azkenik, ordena kontuan hartzen den adierazten du.

Ordena kontuan gabe eta itzulerarik gabe, multzo batetik zenbait elementu erauzten direnean, aukeraketa bakoitza konbinazio arrunt bat dela esaten da.

Kasu honetan, aukeraketa edo azpimultzo posibleen kopurua 10 da. Formula batez ere kalkula daiteke:



  1. Lau pakete ireki behar dira zorizko ordenan. Zenbat da B A ondoren irekitzeko probabilitatea?


>denak=urnsamples(c("A","B","C","D"),size=4,order=TRUE,rep=FALSE)	
>denak	
>aukeratu=isin(s,c("A","B"),ordered=TRUE) #A eta B egotea aukera bakoitzean ORDEN HORRETAN	
>aukeratu	
>aldekoak=subset(denak,aukeratu) 	
>aldekoak	
>nrow(aldekoak)/nrow(denak)


  1. Kaxa batean 3 pieza akastun eta 6 akasgabe daude. 3 pieza zoriz aukeratzen dira, itzulerarik gabe. Zenbatekoa da horietan 2 akastun suertatzeko probabilitatea? R softwarearen bitartez ebatzi behar da.


Labur honela kalkulatzen da:

>dhyper(2,3,6,3)
[1] 0.2142857

Luze, berriz, honela egin liteke:

>kaxa=c("X1","X2","X3","01","02","03","04","05","06")
>erauzketak=urnsamples(kaxa,size=3,order=FALSE,rep=FALSE)
>erauzketak
>n(erauzketak)
>biakastun12=subset(erauzketak,isin(erauzketak,c("X1","X2"),ordered=FALSE))
>biakastun12

Azken zerrenda horretan hiru akastunak suertatzeko aukera ere barneratzen da, bi akastun soilik suertatzea noiz gertatzen den zehaztu behar denez, hiru akastunen aukera baztertu beharko da. Beraz, kontuan hartu beharreko aukerak 7-1=6 izango dira. Modu honetan, ordea, soilik lehen eta bigarren akastunak aukeratzeko kasuak zenbatzen dira. Lehen eta hirugarren akastunak, alde batetik, eta bigarrena eta hirugarrena, bestetik, ere aukera daitezke bi akastun izateko. Kopuru horiek berdinak direnez, bi akastun suertatzeko aukerak 6*3=18 dira eta eskatutako probabilitatea 18/84=0.214.

Horrela, argi geratzen da gertakizunak modu egokian konbinatzeko beharra, gertakizunen aljebra delakoaren bitartez.


  1. A, B, C, D eta E letrekin zorizko hirukoteak osatu behar dira, errepikapena pobile izanik eta ordena kontuan harturik. (a) Zenbat da A letra gutxienez bi aldiz agertzeko probabilitatea? (b) Eta A eta B letrak agertzeko probabilitatea?


(a)

	
>denak=urnsamples(c("A","B","C","D","E"),size=3,order=TRUE,rep=TRUE)	
>denak	
>aukeratu=isin(s,c("A","A"))) #A eta A egotea aukera bakoitzean	
>aukeratu	
>subset(denak,aukeratu)	
>aldekoak=subset(denak,aukeratu) #A eta A aukerak hartu	
>aldekoak	
>nrow(aldekoak)/nrow(denak) #"nrow" aginduak zerrendako kopurua zenbatzen du.

(b) Kasu posible guztien kopurua berdina litzateke. Beraz, aldekoak bakarrik zenbatu behar dira:

	
>aukeratu=isin(s,c("A","B")) #A eta B egotea aukera bakoitzean	
>aukeratu	
>aldekoak=subset(denak,aukeratu)	
>aldekoak	
>nrow(aldekoak)/nrow(denak)



Eguneko auto-salmentak enpresa batean 1, 2, 3 edo 4 izan daitezke, 0.1, 0.2, 0.3 eta 0.4 probabilitateaz, hurrenik hurren eta independentziaz. Zenbatekoa da 2 egunetan 6 edo gehiago saltzeko probabilitatea?


Rren bitartez:

>library(prob)
> salmentak=iidspace(c(1,2,3,4), ntrials = 2, probs = c(0.1,0.2,0.3,0.4))
> salmentak
> guztira = addrv(salmentak, S = X1+X2)
> guztira



  1. Egun bateko ekoizpena 1, 2, 3 izan daiteke erabat zoriz. 4 egunetan zehar ekoizten da. Kalkulatu R softwareko aginduen bitartez:
  1. hirugarren edo laugarren egunean 1 ekoizteko probabilitatea
  2. hirugarren eta laugarren egunetan 1 ekoizteko probabilitatea
  3. 4 egunetan gutxienez egun batean 1 ekoizteko probabilitatea
  4. 4 egunetan gutxienez bi egunetan 1 ekoizteko probabilitatea
  5. egun bakar batean 1 ekoizteko probabilitatea
  6. ondoz ondoko bi egunetan 4 baino gutxiago ekoizteko probabilitatea


(1)

>lauegun=urnsamples(1:3,size=4,order=TRUE,rep=TRUE)
>hiruanbat=subset(lauegun,X3==1,order=TRUE)
>lauanbat=subset(lauegun,X4==1,order=TRUE)
>edobat=union(hiruanbat,lauanbat)
>edobat
>nrow(edobat)/nrow(lauegun)

(2)

>etabat=intersect(hiruanbat,lauanbat)
>etabat
>nrow(etabat)/nrow(lauegun)

(3)Bi modu daude. Lehenengoa hau da:

>bategunbatean=subset(lauegun,isin(lauegun,c(1),order=TRUE))

Bigarrena hau da:

>bategunbat=subset(lauegun,X1==1) 
>bategunbi=subset(lauegun,X2==1)
>bategunhiru=subset(lauegun,X3==1)
>bategunlau=subset(lauegun,X4==1) 
>bategunbatean=union(bategunbat,bategunbi,bategunhiru,bategunlau)

Probabilitatea, azkenik, honela kalkulatzen da bi kasuetan:

>nrow(bategunbatean)/nrow(lauegun)

(4) Bi modu daude aurrekoan bezala kalkulatzeko, baina laburrena baliatuko da:

>bategunbitan=subset(lauegun,isin(lauegun,c(1,1),order=TRUE)) #order=FALSE ere jar daiteke, (1,1) alderantziz berdina baita.
>nrow(bategunbitan)/nrow(lauegun)

(5) Egun bakar batean 1 gertatzeko aukerak (1) atalekoak ken (2) atalekoak direnez,

>batbakarra=setdiff(bategunbatean,bategunbitan)
>batbakarra
>nrow(batbakarra)/nrow(lauegun)

(6)

>batbi_lau=subset(lauegun,X1+X2<4)
>bihiru_lau=subset(lauegun,X2+X3<4)
>hirulau_lau=subset(lauegun,X3+X4<4)
>laugutxiago=union(batbi_lau,bihiru_lau,hirulau_lau)
>laugutxiago
>nrow(laugutxiago)/nrow(lauegun)