組員:唐思琪、林書霆、柯炯名、簡佑臻、王婷、胡祐銓
Q3
set.seed(9487)
simulation_runs = 10000
gamble=function(){
fair_dice = sample(1:6,2,replace = TRUE)
unfair_dice = sample(1:6,size = 1,replace = TRUE, prob = c(0.15,0.25,0.15,0.15,0.15,0.15))
result = min(fair_dice,unfair_dice)
}
print(paste0('The expected value of the smallest number of rolling the three dies is: ', mean(replicate(simulation_runs,gamble()))))
[1] "The expected value of the smallest number of rolling the three dies is: 2.0195"
Q4
(a)
set.seed(1287)
t = 1000 # repeat times
make_sales = function(n=20){ # 20 visits
results = rep(NA, n) # initialize table
# sample the skill of one salesperson
skill = sample(c('high','low'), 1, prob=c(0.5, 0.5), replace=T)
if(skill=='high'){
# given high skill, sample succeed or fail
results= sample(c('high_succeed','high_fail'), n, prob=c(2/3, 1/3), replace=T)
}
else{
# given low skill, sample succeed or fail
results= sample(c('low_succeed','low_fail'), n, prob=c(1/3, 2/3), replace=T)
}
results
}
salesSim = replicate(t, make_sales())
prob_promoted = sum(colSums(salesSim=='high_succeed'|salesSim=='low_succeed')>=9) / t
print(paste0("The probability of being promoted: ", prob_promoted))
[1] "The probability of being promoted: 0.587"
(b)
- P(promoted | high) = P(promoted & high) / P(high)
prob_high = sum(colSums(salesSim=='high_succeed'|salesSim=='high_fail')!=0) / t
prob_prom_high = sum(colSums(salesSim=='high_succeed')>=9) / t
prom_given_high = prob_prom_high / prob_high
print(paste0("The conditional probability that this person will be promoted if there is high skill: ", round(prom_given_high, 4)))
[1] "The conditional probability that this person will be promoted if there is high skill: 0.9796"
(c)
- P(high | promoted) = P(promoted & high) / P(promoted)
prom_given_high = prob_prom_high / prob_promoted
print(paste0("The conditional probability that this person will be promoted if there is high skill: ", round(prom_given_high, 4)))
[1] "The conditional probability that this person will be promoted if there is high skill: 0.816"
(d)
df = data.frame(matrix(ncol=3, nrow=20)) # initialize dataframe
rownames(df) = paste0("n=", 1:20) # change row names
colnames(df) = c("P(promoted)", "P(promoted|high)", "P(high|promoted)") # change column names
for (i in 1:nrow(df)) {
# calculate number of conditions
no_prob_promoted = sum(colSums(salesSim=='high_succeed'|salesSim=='low_succeed')>=i)
no_prob_high = sum(colSums(salesSim=='high_succeed'|salesSim=='high_fail'))
no_prob_prom_high = sum(colSums(salesSim=='high_succeed')>=i)
# calculate probilities & append data to df
df[i,1] = no_prob_promoted / t
df[i,2] = round(no_prob_prom_high / no_prob_high, 4)
df[i,3] = round(no_prob_prom_high / no_prob_promoted, 4)
}
df
Q5
set.seed(6781)
simulation_runs = 10000
weds_return = function(runs){
# simulate the library where the borrower returned the book
return_library = sample(c(0,1),1,prob = c(0.5,0.5),replace=T) # 1: commerce library, 0: foreign library
if(any(return_library==1)){ # delay days if return books to a foreign library
delay = 0 # delay days if return books to a commerce library
}
if(any(return_library==0)){ # delay days if return books to a foreign library
delay = 2
}
# simulate the time when the borrower return the book
return_book = sample(c(4,5,6,7),1,prob = c(0.1,0.2,0.3,0.4),replace=T)
hello = sum(delay, return_book) # calculate the day that the person will get the book
hello = hello %% 7
}
result = replicate(simulation_runs,weds_return()) # return the book in how many days
df = data.frame('days'=c('Thu', 'Fri', 'Sat', 'Mon', 'Tue', 'Wed'), table(result)/simulation_runs )
df[,c(1,3)] # show the return probabilities in each day
print(paste0('The probability that the book is returned on Wednesday is: ', df[6,3])) # answer
[1] "The probability that the book is returned on Wednesday is: 0.1938"
LS0tCnRpdGxlOiAiSFcxX0dyb3VwMiIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoK57WE5ZOh77ya5ZSQ5oCd55Cq44CB5p6X5pu46ZyG44CB5p+v54Kv5ZCN44CB57Ch5L2R6Ie744CB546L5am344CB6IOh56WQ6YqTCgojIyBRMwpgYGB7cn0Kc2V0LnNlZWQoOTQ4NykKc2ltdWxhdGlvbl9ydW5zID0gMTAwMDAKZ2FtYmxlPWZ1bmN0aW9uKCl7CiAgZmFpcl9kaWNlID0gc2FtcGxlKDE6NiwyLHJlcGxhY2UgPSBUUlVFKQogIHVuZmFpcl9kaWNlID0gc2FtcGxlKDE6NixzaXplID0gMSxyZXBsYWNlID0gVFJVRSwgcHJvYiA9IGMoMC4xNSwwLjI1LDAuMTUsMC4xNSwwLjE1LDAuMTUpKQogIHJlc3VsdCA9IG1pbihmYWlyX2RpY2UsdW5mYWlyX2RpY2UpCn0KCnByaW50KHBhc3RlMCgnVGhlIGV4cGVjdGVkIHZhbHVlIG9mIHRoZSBzbWFsbGVzdCBudW1iZXIgb2Ygcm9sbGluZyB0aGUgdGhyZWUgZGllcyBpczogJywgbWVhbihyZXBsaWNhdGUoc2ltdWxhdGlvbl9ydW5zLGdhbWJsZSgpKSkpKQpgYGAKCiMjIFE0CiMjIyAoYSkKYGBge3J9CnNldC5zZWVkKDEyODcpCnQgPSAxMDAwICAgICAgICAgICAgICAgICAgICAgIyByZXBlYXQgdGltZXMKbWFrZV9zYWxlcyA9IGZ1bmN0aW9uKG49MjApeyAjIDIwIHZpc2l0cwogIHJlc3VsdHMgPSByZXAoTkEsIG4pICAgICAgICMgaW5pdGlhbGl6ZSB0YWJsZQogICMgc2FtcGxlIHRoZSBza2lsbCBvZiBvbmUgc2FsZXNwZXJzb24KICBza2lsbCA9IHNhbXBsZShjKCdoaWdoJywnbG93JyksIDEsIHByb2I9YygwLjUsIDAuNSksIHJlcGxhY2U9VCkKICBpZihza2lsbD09J2hpZ2gnKXsKICAgICMgZ2l2ZW4gaGlnaCBza2lsbCwgc2FtcGxlIHN1Y2NlZWQgb3IgZmFpbAogICAgcmVzdWx0cz0gc2FtcGxlKGMoJ2hpZ2hfc3VjY2VlZCcsJ2hpZ2hfZmFpbCcpLCBuLCBwcm9iPWMoMi8zLCAxLzMpLCByZXBsYWNlPVQpCiAgfQogIGVsc2V7CiAgICAjIGdpdmVuIGxvdyBza2lsbCwgc2FtcGxlIHN1Y2NlZWQgb3IgZmFpbAogICAgcmVzdWx0cz0gc2FtcGxlKGMoJ2xvd19zdWNjZWVkJywnbG93X2ZhaWwnKSwgbiwgcHJvYj1jKDEvMywgMi8zKSwgcmVwbGFjZT1UKQogIH0KICByZXN1bHRzCn0KCnNhbGVzU2ltID0gcmVwbGljYXRlKHQsIG1ha2Vfc2FsZXMoKSkKcHJvYl9wcm9tb3RlZCA9IHN1bShjb2xTdW1zKHNhbGVzU2ltPT0naGlnaF9zdWNjZWVkJ3xzYWxlc1NpbT09J2xvd19zdWNjZWVkJyk+PTkpIC8gdApwcmludChwYXN0ZTAoIlRoZSBwcm9iYWJpbGl0eSBvZiBiZWluZyBwcm9tb3RlZDogIiwgcHJvYl9wcm9tb3RlZCkpCmBgYAoKIyMjIChiKQoKKyBQKHByb21vdGVkIHwgaGlnaCkgPSBQKHByb21vdGVkICYgaGlnaCkgLyBQKGhpZ2gpCmBgYHtyfQpwcm9iX2hpZ2ggPSBzdW0oY29sU3VtcyhzYWxlc1NpbT09J2hpZ2hfc3VjY2VlZCd8c2FsZXNTaW09PSdoaWdoX2ZhaWwnKSE9MCkgLyB0CnByb2JfcHJvbV9oaWdoID0gc3VtKGNvbFN1bXMoc2FsZXNTaW09PSdoaWdoX3N1Y2NlZWQnKT49OSkgLyB0CnByb21fZ2l2ZW5faGlnaCA9IHByb2JfcHJvbV9oaWdoIC8gcHJvYl9oaWdoCnByaW50KHBhc3RlMCgiVGhlIGNvbmRpdGlvbmFsIHByb2JhYmlsaXR5IHRoYXQgdGhpcyBwZXJzb24gd2lsbCBiZSBwcm9tb3RlZCBpZiB0aGVyZSBpcyBoaWdoIHNraWxsOiAiLCByb3VuZChwcm9tX2dpdmVuX2hpZ2gsIDQpKSkKYGBgCgoKIyMjIChjKQoKKyBQKGhpZ2ggfCBwcm9tb3RlZCkgPSBQKHByb21vdGVkICYgaGlnaCkgLyBQKHByb21vdGVkKQpgYGB7cn0KcHJvbV9naXZlbl9oaWdoID0gcHJvYl9wcm9tX2hpZ2ggLyBwcm9iX3Byb21vdGVkCnByaW50KHBhc3RlMCgiVGhlIGNvbmRpdGlvbmFsIHByb2JhYmlsaXR5IHRoYXQgdGhpcyBwZXJzb24gd2lsbCBiZSBwcm9tb3RlZCBpZiB0aGVyZSBpcyBoaWdoIHNraWxsOiAiLCByb3VuZChwcm9tX2dpdmVuX2hpZ2gsIDQpKSkKYGBgCgojIyMgKGQpCgpgYGB7cn0KZGYgPSBkYXRhLmZyYW1lKG1hdHJpeChuY29sPTMsIG5yb3c9MjApKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbml0aWFsaXplIGRhdGFmcmFtZQpyb3duYW1lcyhkZikgPSBwYXN0ZTAoIm49IiwgMToyMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNoYW5nZSByb3cgbmFtZXMKY29sbmFtZXMoZGYpID0gYygiUChwcm9tb3RlZCkiLCAiUChwcm9tb3RlZHxoaWdoKSIsICJQKGhpZ2h8cHJvbW90ZWQpIikgIyBjaGFuZ2UgY29sdW1uIG5hbWVzCgpmb3IgKGkgaW4gMTpucm93KGRmKSkgewogICMgY2FsY3VsYXRlIG51bWJlciBvZiBjb25kaXRpb25zCiAgbm9fcHJvYl9wcm9tb3RlZCA9IHN1bShjb2xTdW1zKHNhbGVzU2ltPT0naGlnaF9zdWNjZWVkJ3xzYWxlc1NpbT09J2xvd19zdWNjZWVkJyk+PWkpIAogIG5vX3Byb2JfaGlnaCA9IHN1bShjb2xTdW1zKHNhbGVzU2ltPT0naGlnaF9zdWNjZWVkJ3xzYWxlc1NpbT09J2hpZ2hfZmFpbCcpKQogIG5vX3Byb2JfcHJvbV9oaWdoID0gc3VtKGNvbFN1bXMoc2FsZXNTaW09PSdoaWdoX3N1Y2NlZWQnKT49aSkKICAjIGNhbGN1bGF0ZSBwcm9iaWxpdGllcyAmIGFwcGVuZCBkYXRhIHRvIGRmCiAgZGZbaSwxXSA9IG5vX3Byb2JfcHJvbW90ZWQgLyB0CiAgZGZbaSwyXSA9IHJvdW5kKG5vX3Byb2JfcHJvbV9oaWdoIC8gbm9fcHJvYl9oaWdoLCA0KQogIGRmW2ksM10gPSByb3VuZChub19wcm9iX3Byb21faGlnaCAvIG5vX3Byb2JfcHJvbW90ZWQsIDQpCn0KZGYKYGBgCiMjIFE1CmBgYHtyfQpzZXQuc2VlZCg2NzgxKQpzaW11bGF0aW9uX3J1bnMgPSAxMDAwMAp3ZWRzX3JldHVybiA9IGZ1bmN0aW9uKHJ1bnMpewogICMgc2ltdWxhdGUgdGhlIGxpYnJhcnkgd2hlcmUgdGhlIGJvcnJvd2VyIHJldHVybmVkIHRoZSBib29rCiAgcmV0dXJuX2xpYnJhcnkgPSBzYW1wbGUoYygwLDEpLDEscHJvYiA9IGMoMC41LDAuNSkscmVwbGFjZT1UKSAjIDE6IGNvbW1lcmNlIGxpYnJhcnksIDA6IGZvcmVpZ24gbGlicmFyeQogIGlmKGFueShyZXR1cm5fbGlicmFyeT09MSkpeyAjIGRlbGF5IGRheXMgaWYgcmV0dXJuIGJvb2tzIHRvIGEgZm9yZWlnbiBsaWJyYXJ5CiAgICBkZWxheSA9IDAgIyBkZWxheSBkYXlzIGlmIHJldHVybiBib29rcyB0byBhIGNvbW1lcmNlIGxpYnJhcnkKICB9CiAgaWYoYW55KHJldHVybl9saWJyYXJ5PT0wKSl7ICMgZGVsYXkgZGF5cyBpZiByZXR1cm4gYm9va3MgdG8gYSBmb3JlaWduIGxpYnJhcnkKICAgIGRlbGF5ID0gMgogIH0KICAjIHNpbXVsYXRlIHRoZSB0aW1lIHdoZW4gdGhlIGJvcnJvd2VyIHJldHVybiB0aGUgYm9vawogIHJldHVybl9ib29rID0gc2FtcGxlKGMoNCw1LDYsNyksMSxwcm9iID0gYygwLjEsMC4yLDAuMywwLjQpLHJlcGxhY2U9VCkKICBoZWxsbyA9IHN1bShkZWxheSwgcmV0dXJuX2Jvb2spICMgY2FsY3VsYXRlIHRoZSBkYXkgdGhhdCB0aGUgcGVyc29uIHdpbGwgZ2V0IHRoZSBib29rCiAgaGVsbG8gPSBoZWxsbyAlJSA3Cn0KcmVzdWx0ID0gcmVwbGljYXRlKHNpbXVsYXRpb25fcnVucyx3ZWRzX3JldHVybigpKSAjIHJldHVybiB0aGUgYm9vayBpbiBob3cgbWFueSBkYXlzIApkZiA9IGRhdGEuZnJhbWUoJ2RheXMnPWMoJ1RodScsICdGcmknLCAnU2F0JywgJ01vbicsICdUdWUnLCAnV2VkJyksIHRhYmxlKHJlc3VsdCkvc2ltdWxhdGlvbl9ydW5zICkKZGZbLGMoMSwzKV0gIyBzaG93IHRoZSByZXR1cm4gcHJvYmFiaWxpdGllcyBpbiBlYWNoIGRheQpwcmludChwYXN0ZTAoJ1RoZSBwcm9iYWJpbGl0eSB0aGF0IHRoZSBib29rIGlzIHJldHVybmVkIG9uIFdlZG5lc2RheSBpczogJywgZGZbNiwzXSkpICMgYW5zd2VyCmBgYAoK