STATA入门10 随机模拟
STATA入门
10随机模拟
只要你自己试试模拟随机现象几次,就会加强对概率的了解,比读很多页的数理统计和概率论的文章还有用。学习模拟,不仅是为了解模拟本身,也是为更了解概率而了解模拟。 10.1伪随机数
生成(0,1)之间均匀分布的伪随机数的函数为uniform()
di uniform()
di uniform()
di uniform()
每次都得到一个大于零小于1的随机数。
如果要生成一位数的随机数(即0,1,2,3,4,5,6,7,8,9),可以取小数点后第一位数,通常用下面的命令
di int(10*uniform())
两位随机数(0-99)则取小数点后两位小数,即
也可以同时生成多个随机数,然后将该随机数赋给某个变量。要注意的是,电脑中给出的随机数不是真正的随机数,而是伪随机数,因为它是按照一定的规律生成的。如果给定基于生成伪随机数的初始数值(即set seed #),则对相同的初始数值,生成的伪随机数序列完全一样。
*============================begin==================================== clear
set obs 10
gen x1=uniform()
gen x2=uniform() //注意到x1与x2不一样
set seed 1234
gen y1=uniform()
set seed 1234
gen y2=uniform()
gen y3=uniform() //注意到y1与y2一样,但均与y3不同
set seed 5634
gen z1=uniform()
set seed 1234
gen z2=uniform() //注意到z2与y1,y2一样,但z1与z2不同
list
*============================end====================================
STATA入门
10.2简单模拟
一旦有了可靠的概率模型,模拟是找出复杂事件发生概率的有效工具。一个事件在重复结果中发生的比例,迟早会接近它的概率,所以模拟可以对概率做适当的估计。 例1:如何执行模拟
掷一枚硬币10次,结果中会出现至少3个连续正面或者至少3个连续反面的概率是多少? 思考:
(1) 猜想这个概率大约是多少?
(2) 如何从理论上计算出这个概率?
(3) 如何模拟计算这个概率?
第一步:提出概率模型。
每一次掷,正面和反面的概率各为0.5
投掷之间,彼此是独立的。也就是说,知道某一次掷出的结果,不会改变任何其他次所掷结果的概率。
第二步:分配随机数字以代表不同的结果。
随机数字表中的0-9每个数字出现的概率都是0.1
每个数字模拟掷一次硬币的结果。
奇数代表正面,偶数代表反面。
第三步:模拟多次重复。
生成10个随机数字
记录开心的事件(至少连续三个正面或反面)是否发生,如果发生,记为1,否则为0 重复10次(或者100,1000,1000000次),计算概率=开心事件发生/总重复次数。
真正的概率是0.826。
大部分的人认为连续正面或反面不太容易发生。但模拟结果足以修正我们直觉错误。 *============================begin==================================== capt program drop seq3
program seq3,rclass //rclass选项表示计算结果将由return返回到r() version 9
drop _all //清空所有数据,不能用clear
set obs 10 //将生成10个观察值
tempvar x y z //设定x,y,z为临时变量
gen `x’=int(10*uniform()) //产生10个随机变量,可能为0,1,…,9 gen `y’=(mod(`x’,2)==0) //如果生成的随机变量为奇数,则y=0;为偶数,y=1 gen `z’=0 //生成Z=0
forvalues i=3/10 {
replace `z’=1 if `y’==`y’[_n-1] & `y’==`y’[_n-2] in `i' //连续三个变量相等时z=1 }
sum `z’
return scalar max=r(max) //z取1表示高兴的事发生(三连续),否则失败 end
simulate max=r(max),reps(10000) nodots:seq3 //重复1万次,取平均结果 sum
*============================end====================================
由于上述命令要不停生成变量,进行变量代换,所以计算速度较慢,如果使用矩阵,则
STATA入门
计算速度会大大加快,命令也更简捷。
*MATA
*============================begin==================================== mata
A=uniform(10000,10):>0.5 //每行为一次试验, 每列为某次试验中硬币的正反面结果 B=J(10000,1,0) //记录每次试验的结果,先记为0. 若高兴结果出现再改为1 for (j=1;j<=rows(A);j++) { //第j次试验
for (i=3;i<=cols(A);i++) { //第j次试验中第i次硬币出现结果
if ( A[j,(i-2,i-1,i)]==(0,0,0) | A[j,(i-2,i-1,i)]==(1,1,1) ) {
B[j,1]=1 //若连续为正面或者连续为反面,则记为1
break
}
}
}
mean(B) //求开心事件的次数
end
*============================end====================================
10.3复杂模拟
例2:我们要女儿
任务:一对夫妇计划生孩子生到有女儿才停,或者生了三个就停,他们拥有女儿的概率是多大?
思考:理论上,概率是多少?
第一步:概率模型
每一个孩子是女孩的概率是0.49,且各个孩子的性别是互相独立的。
第二步:分配数字
00,01,02,。。。,49=女孩
49,50,51,。。。,99=男孩
第三步:模拟
从随机数表中生成一对一对的数字,直到有了女儿,或已有3个孩子。
重复100次。
6905 16 48 17 8717 648987
男女 女 女 女 男女 男男男
用数学可以计算出来,有女孩的真正概率是0.867
*============================begin==================================== capt program drop girl
program girl, rclass
drop _all
set obs 3
gen x=int(100*uniform())
gen y=(x<49) //生女孩y=1,生男孩,y=0
sum y
STATA入门
return scalar max=r(max) //若有一个女孩,则max取1,若三个全为男孩,取0 end
simulate max=r(max),reps(10000) nodots:girl
sum
*============================end====================================
更快的模拟方式.
*============================begin==================================== capt program drop girl
program girl
mat A=matuniform(1,3)
scalar girl=1
if A[1,1]>0.49 & A[1,2]>0.49 & A[1,3]>0.49 {
scalar girl=0 //若三个全为男孩,生女孩数为0
}
end
simulate girl,reps(10000) nodots:girl
tab _sim
*============================end====================================
*============================begin==================================== mata
A=uniform(10000,3):<0.49
B=J(10000,1,1)
for (i=1;i<=rows(A);i++) {
if (A[i,.]==(0,0,0)) {
B[i,1]=0 //若三个全为男孩,生女孩数为0
}
}
mean(B)
…… 此处隐藏:3426字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [教学研究]2012西拉科学校团少队工作总结
- [教学研究]建筑工程公司档案管理制度
- [教学研究]小学数学人教版六年级上册圆的周长和面
- [教学研究]ERP电子行业解决方案
- [教学研究]钢支撑租赁合同范本
- [教学研究]预应力自动张拉系统用户手册Rev1.0
- [教学研究]MOOC课程:金瓶梅人物写真(每章节课后
- [教学研究]追加被执行人申请书(适用追加夫妻关系)
- [教学研究]2014年驾考科目一考试最新题库766
- [教学研究]2013-2014学年度九年级物理第15章《电
- [教学研究]新版中日交流标准日本语初级下26课-客
- [教学研究]小导管注浆施工作业指导书
- [教学研究]一般财务人员能力及人岗匹配评估表
- [教学研究]打1.2.页 小学一年级暑假口算100以内加
- [教学研究]学习贯彻《中国共产党党和国家机关基层
- [教学研究]2012年呼和浩特市中考试卷_35412
- [教学研究]最简易的电线电缆购销合同范本
- [教学研究]如何开展安全标准化建设
- [教学研究]工作分析与人岗匹配
- [教学研究]2016-2017学年高中历史第七单元现代中
- 山东省义务教育必修地方课程小学三年级
- 台湾宜兰大学互联网交换技术课程 01_In
- 思想品德:第一课《我知我家》课件(人
- SAR合成孔径雷达图像点目标仿真报告(附
- 利辛县“十三五”规划研究报告
- 2015-2020年中国手机APP行业市场发展趋
- 广告策略、创意表现、媒体方案
- 企业如何申请专利的的几点思考
- 《中国教育简史》网上作业
- 高中历史第二单元西方人文精神的起源及
- 年终晚会必备_精彩的主持稿_精心整理_
- 信息工程专业自荐书
- 2019高考历史人教版一轮练习:第十二单
- JAVA俱乐部管理系统软件需求规格说明书
- 2016-2021年中国小型板料折弯机行业市
- (人教新课标)六上_比的基本性质课件PPT
- 辽宁省公务员考试网申论备考技巧:名言
- 神经阻滞麻醉知情同意书
- 施工企业信息填报、审核和发布的相关事
- 初一(七年级)英语完形填空100篇




