威尼斯娱乐娱城官网但我们也可以使用 选项weight()

当前位置:威尼斯娱城38358 > 威尼斯娱乐娱城官网 > 威尼斯娱乐娱城官网但我们也可以使用 选项weight()
作者: 威尼斯娱城38358|来源: http://www.bolowmom.com|栏目:威尼斯娱乐娱城官网

文章关键词:威尼斯娱城38358,自助法

  chap15 蒙特卡罗模拟和自助法.._幼儿读物_幼儿教育_教育专区。chap15

  主要内容 ? 随机数的生成 ? 蒙特卡罗模拟 ? 重复抽样 ? 自助法 实验15-1: 随机数的生成 ? 实验基本原理 ? 服从在(0,1)区间上均匀分布的随机变量的样本值,被称为“均 匀分布随机数”,简称“随机数”(random number)。有了 均匀分布的随机数后,就几乎可以产生任何分布的随机数了。 ? 然而,由电脑产生的所谓“随机数”只是“伪随机数” (pseudo random number),因为它仍然由递推公式产生。尽 管如此,这些“伪随机数”都能通过独立性与均匀分布的统计 检验,故可以作为“随机数”来使用。 ? “随机数”初始值被称为“种子”(seed)。为了使随机样本 具有可重复性,保证以后抽样或别人抽样也能得到完全一样的 样本,在生成随机数时通常需要设定“种子”。如果不给定 “种子”,则Stata按照“电脑内置钟表”(computer clock)来 自动选择“种子”,这样每次抽样的样本就会不同,模拟的结 果也就不能完全复制。 ? 实验内容及数据来源 ? 本实验中,我们会介绍如何生成均匀分布和正态分布 的随机数,以及如何设定随机数的种子。 ? 讲解这些内容不需要使用具体的数据文件,一些简单 的命令就可以实现。 ? 实验操作指导 ? 1 随机数的生成 ? 最基本而常用的随机数序列是均匀分布随机数序列。生成均匀分布随 ? ? ? ? ? ? ? ? ? ? ? 机数序列的基本命令为: generate newvar=runiform() 其中,generate为生成新变量的基本命令,newvar为新变量的名称, runiform()是生成均匀分布于区间[0, 1)随机数的函数。需要注意的是, runiform()中没有参数,但括号却必不可少。 如果要生成位于其他区间的均匀分布,我们可以进行简单的变形。例 如,要生成均匀分布于区间[a, b)的随机数,相应的函数为: a+(b-a)* runiform() 要生成均匀分布于区间[a, b]的随机数,相应的函数为: a+int((b-a+1)* runiform()) 其中,函数int()表示取整。 生成标准正态分布的随机数的函数为: invnorm(uniform()) 生成均值为m、标准差为s的正态分布的随机数的函数则是: m+s*invnorm(runiform()) ? 例如,我们要生成一个均值为3、方差为5且服从正态分布的序 ? ? ? ? ? 列,可输入命令: set obs 80 gen norm=3+5*invnorm(uniform()) 这里,第一步为设定观测值的个数为80;第二步我们生成一个 均值为3、方差为5且服从正态分布的序列,并将新生成的变量 命名为norm。需要说明的一点是,如果不设定观测值个数,则 新变量的观测值个数会与原序列的观测值个数相同;而未打开 任何数据文件时,原观测值个数显然为0。 下面,我们看一下变量norm的描述统计量。输入命令: sum norm ? 如果我们要作图看一下norm的分布,可输入命令: ? hist norm, normal ? 这里,hist表示做直方图,选项normal表示画出相应的正态分布。 2 种子的设定 设定种子的基本命令为: set seed {#code} 其中,set seed是设定种子的基本命令。#是正整数,代表runiform() 迭代的初始值, Stata的初始设置是123456789。code是字符串,代表 随机数生成器runiform()的状态,我们可以用“c(seed)”来查看其当 前值。例如,我们输入命令: ? disp c(seed) ? 这里,disp表示“显示”,c(seed)表示种子的当前值。 ? ? ? ? ? ? ? ? ? 例如,我们先设定种子,然后生成随机数序列,可输入如下命令: set seed 1001 set obs 60 gen r=runiform() 这里,第一步设定种子为1001,第二步设定观测值个数为60,第三步 生成位于[0, 1)随机数序列,并将其命名为r。 实验15-2: 蒙特卡罗模拟 ? 实验基本原理 ? 通过计算机模拟从已知分布的总体中抽取大量随机样本的 计算方法被统称为“蒙特卡罗方法”(Monte Carlo Methods)。 ? 在计量经济学中,常使用蒙特卡罗法来确定统计量的小样 本性质。我们知道,许多统计量的精确分布没有解析解。 一种解决方法是使用大样本理论,用渐近分布来近似真实 分布。然而,现实中的样本容量常常较小。 ? 实验内容及数据来源 ? 本实验中,我们会介绍蒙特卡洛模拟的基本操作,以及如 何编写程序并通过模拟获得真实的显著性水平。 ? 这里,我们不需要使用具体的数据文件,通过命令就可以 实现相应的模拟。 ? 实验操作指导 ? 1 蒙特卡罗模拟的基本操作 ? 2 用蒙特卡罗模拟获得真实显著性水平 ? 为此,先使用命令program定义一个叫“reschi2”程序进行一次抽样 ? ? ? ? ? ? ? ? ? ? 与检验,然后用命令simulate来重复此程序1,000 次。程序的命令为: program reschi2, rclass (定义一个叫reschi2的程序。rclass表示结 果以 r()形式储存) version 10 (设定所用程序版本为Stata 10) drop _all (删去内存中已有数据) set obs 50 (确定随机抽样的样本容量为50) gen double x = rchi2(1) (生成服从分布的解释变量x) gen y = 3+ 2*x + rchi2(1)-3 (生成被解释变量) reg y x (线性回归) return scalar t2 = (_b[x]-2)/_se[x] (计算t统计量的值,并将其命名为 t2。这里,_b[x]代表x的系数,_se[x]代表系数的标准差,scalar表明t2 是一个标量(数值)) return scalar r2 = abs(return(t2))invttail(48,0.025) (是否拒绝原假 设) end (程序结束) ? 其中,命令的倒数第二行的invttail(48, 0.025)表示自由度为48(样本 容量50-参数个数2)、显著性水平为5%的双边检验的t统计量的临界值。 return(t2)代表我们前面模拟计算并保存的样本t统计量的值t2。如果t2 的绝对值大于invttail(48, 0.025),则应拒绝原假设;这时,r2的返回值 为1。此外,由于程序的首行定义结果的形式为rclass,所以,如果我 们要引用计算的r2的值,其形式应该是“r(r2)”。 ? 对于上面的程序语句,我们可以将其写入一个“Do-File Editor”,将 程序保存为扩展名为“ado”的文件,并存放在Stata安装目录的ado文 件夹下。这样,我们后面就可以直接使用该程序了。 ? 下面,我们进行1000次模拟,输入命令: ? simulate reject=r(r2), reps(1000) nodots seed(101): reschi2 ? 这里,每次模拟的命令来自于程序“reschi2”,选项reps(1000)表明 模拟次数为1000次,选项seed(101)表明设定种子为101,选项nodots表 示不显示模拟过程的点。表达式“reject=r(r2)”表明我们将每次模拟 的返回值r(r2)保存在reject中。 ? 因为我们在程序“reschi2”中,每次拒绝原假设时r2的返回值为1;这 样,返回值为1的比例即为拒绝原假设的比例。也就是说,序列reject 的均值反映了真实的显著性水平。为了获得reject的均值,威尼斯娱乐娱城官网我们输入命 令: ? mean reject ? 事实上,我们在模拟之前,可以先运行一次我们所编的程序,检查一 下程序是否有问题。对于我们这个程序,可输入如下命令: ? set seed 2010 ? reschi2 ? 其中,第一步设定种子为2010,第二步为运行程序。 ? 要知道这一次模拟是否拒绝原假设,我们可以输入命令: ? disp r(r2) ? 另一种返回程序结果的命令语句为: ? return list 实验15-3: 重复抽样 ? 实验基本原理 ? 实验内容及数据来源 ? 本书附带光盘data文件夹下的“gender.dta”工作文件,是我们 为了讲解重复抽样而编制的文件。该文件包括5810个观测值, 只有一个变量gender,表示性别。其取值为1时表示女性 (female),取值为0时表示男性(male)。该文件中,女性观 测值个数为3418,男性观测值个数为2392。 ? 此外,本实验中,我们还会利用本书附带光盘data文件夹下的 数据文件“resample.dta”来介绍重复抽样部分选项的应用。该 文件也是人为构造的,主要变量包括:group=分组变量(取值 为A、B、C、D、E),strid=分层变量(取值为1或2,表明被调 查者属于哪种类型),x=观测值。 ? 利用这些数据,我们来讲解重复抽样的基本命令和相关选项的 应用。 ? 实验操作指导 ? 1 重复抽样的基本命令 ? 此外,默认情况下,命令bsample会将内存中的数据替换 为抽样的观测值,但设定选项weight()会将抽取的样本频 数存放在变量varname中,也就是说,这时只有varname 的值改变,原数据不会改变。但选项weight()和选项 idcluster()不能同时设定。 ? 另外,在bsample命令之后,选项weight(varname)中的 varname可以用在Stata的其他命令中作为fweight(如果该 命令允许设定fweight)。 ? 下面,我们结合“gender.dta”和“resample.dta”数据, 对各选项做进一步的说明。 ? 2 简单随机抽样 ? 对于“gender.dta”的数据,假设我们要采用简单随机抽样法抽取300 个样本,可输入命令: ? bsample 300 ? 下面,我们来看一下数据文件现在的样本容量。输入命令: ? count ? 如果要只对男性进行简单随机抽样,我们可以利用条件语句。输入命 ? ? ? ? ? 令: bsample 200 if gender==0 这里,我们对gender取值为0(表示male)的观测值抽取了200个随机 样本。需要注意的是,条件语句中,gender后为两个等号。另外,需 要说明的一点是,读者若要复制这个操作,则需要在前面简单随机抽 样后重新打开一次数据;否则,这里的分层抽样就会在原来抽样结果 的基础上进行。后面的操作也同理。 下面,我们看一下抽取的样本的情况。输入命令: tab gender 这里,命令tab表示显示变量gender的频数分布表。 ? 3 分层抽样 ? 如果我们要令样本中包括100个女性和100个男性,可以采 取分层抽样。输入命令: ? bsample 100, strata(gender) ? 这里,100表示每一层的样本容量都是100,选项 strata(gender)表示按变量gender的不同取值来分层。下面, 我们看一下分层抽样的样本情况。输入命令: ? tab gender ? 此外,注意到原来的数据中约3000个为女性,2000个为男性。这样,我们考 ? ? ? ? ? ? ? 虑按照原数据的男女比例进行抽样;也就是说,抽取300个女性,200个男性。 要做到这一点,要先生成一个新变量,令gender为female时新变量的值为300, gender为male时新变量的值为200。输入命令: gen st = cond(gender,300,200) 这里,我们将新变量命名为st。对于条件函数cond(x, a, b),其含义为:如果x 为线),则返回a的值;如果x为假(或取值为0),则返回b的 值。对于本例,如果变量“gender”的值为female(1),则令变量st的值为 300;如果变量“gender”的值为male(0),则令变量st的值为200。 下面,我们就可以利用变量st作为“exp”来进行分层抽样。输入命令: bsample st, strata(gender) 这句命令的含义为,按变量gender的值进行分层抽样,且变量gender各个取 值对应的样本容量为st的值。也就是说,对于gender取值为female的观测值, 对应的抽样样本容量为300;对于gender取值为male的观测值,对应的抽样样 本容量为200。 下面,我们看一下样本的情况。输入命令: tab gender ? 4 扩展样本容量 ? 首先要说明的一点是,如果不设定要抽取的样本容量,则样本容量会 与原数据相同。而如果同时又设定了选项strata(),则各层中抽取的样 本个数会与原数据相同。 ? 此外,如果要抽取的样本容量超过现有的观测值个数,我们可以先对 ? ? ? ? ? ? 样本容量进行扩展。输入命令: expand 2 则我们将样本容量扩展为原来的2倍(当然,我们这里也可以选择将样 本容量扩为原来的3倍等;但对于本实验,2倍就足够了)。这里,需 要说明的是,该命令后也可以加条件语句,选择对分层变量的某个取 值扩展样本容量。 接着,我们重新进行分层抽样,且不设定样本容量“exp”。输入命令: bsample, strata(gender) 这里,选项strata(gender)表示按变量gender进行分层。下面,我们来 看一下抽取的样本的频数情况。输入命令: tab gender ? 5 生成频率权重 ? 在前面的几个例子中,原样本都被新抽取的样本所替代。但我们也可以使用 选项weight(),将抽取的样本频数放到一个新变量中去,并保留原来的样本。 例如,我们还是要抽取200个男性样本,并将频数放到一个新变量中。为此, 我们先生成一个变量,好用于存放频数。输入命令: ? gen fweight=. ? 这里,我们生成一个新变量,将其命名为fweight,并令其初始值缺失(即为 “.”)。 ? 下面,我们进行抽样。输入命令: ? set seed 1111 ? bsample 200 if gender==0, weight(fweight) ? 这里,第一步命令为设定种子,这是为了复制结果的方便。第二步,我们对 gender取值为0的观测值抽取了200个随机样本;选项weight(fweight)表明, 我们将抽取的样本的频数存放在变量fweight中。 ? 下面,我们看一下样本的频数分布情况。输入命令: ? tab fweight gender ? 这里,我们生成变量fweight和gender的二维交互表。 ? 6 分组抽样 ? 对于分组数据,如果设定选项cluster(),则Stata会按组来进行抽样。 ? 下面,我们利用“resample.dta”的数据,重点来讲一下要抽取的组 多于原来的组时该如何处理。 ? “resample.dta”的数据只有5组,而我们想要抽取7组的样本。显然, 我们应该先对样本进行扩容。但需要注意的是,命令expand在这里是 不恰当的。这是因为,expand命令不能为新生成的组设置其自身的标 记;这样,Stata会认为数据还是只有5组,从而,抽取7组样本仍不可 能。要解决这个问题,我们可以使用分组数据的复制命令。该命令的 基本格式为: ? expandcl [=] [exp] [if] [in], cluster(varlist) generate(newvar) ? 其中,expandcl为复制分组数据的基本命令(注意最后一个字母是小 写字母el,而非数字1),表达式exp用于指定复制为原来的几份,if代 表条件语句,in代表范围语句。选项cluster()用于指定分组变量,选项 generate()用于生成新的变量来保存各个组的识别标志。 ? 在对样本进行扩容之前,我们先看一下原来的数据情况,方便与后面进行对 比。输入命令: ? tabstat x, stat(n mean) by(group) ? 这里,tabstat表示用表格显示数据的描述统计量,x表示我们要得到变量x的 统计量。选项stat(n mean)表示我们要获得x的观测值个数和均值,by(group) 表示我们按组来获得相应的统计量。 ? 下面,我们对“resample.dta”的数据进行扩容。输入命令: ? expandcl 2, generate(newg) cluster(group) ? 这里,我们将数据复制为原来的两份。选项cluster(group)指定原来的分组变 量为group,选项generate(newg)表示生成新变量newg用来保存复制后的各个 组的识别标志。 下面,我们生成一个新变量用于保存抽样频数,并进行分组抽样。输入命令: gen fweight= . set seed 1111 bsample 7, cluster(newg) weight(fweight) 这里,第一步生成用于保存频数的变量fweight,并将其值设定为缺失值。第 二步设定种子为1111,以方便结果的复制。第三步进行抽样,以newg为分组变 量,抽取了7组,并将抽取的频数保存在变量fweight中。 ? 下面,我们看一下抽取的各组的频数情况。输入命令: ? tab fweight group ? ? ? ? ? ? 7 分层分组抽样 ? 对于“resample.dta”的数据,我们知道变量strid分为2层,且每层中有5组。 但两层之间的分组变量不能被唯一地识别。要在每一层中获得7组样本,我们 可以先使用expandcl命令进行扩展,并生成新变量唯一地识别每层的各个组。 ? 为了与后面的结果进行比较,我们先看一下各组各层的频数分布情况。输入 命令: ? tab group strid ? 下面,我们对数据进行扩展。输入命令: ? expandcl 2, generate(newg) cluster(group strid) ? 注意,我们这里使用了选项cluster(group strid),表明为每一个group和strid 的组合设置一个组别的标识。 ? 下面,我们来进行分层分组抽样。输入命令: ? gen fweight= . ? set seed 1111 ? bsample 7, cluster(newg) strata(strid) weight(fweight) ? 其中,第三步的选项设定分组变量为newg,分层变量为strid。这样,我们会 在每一层中抽取7个组。下面,我们看一个各层分别抽到了哪些组。输入命令: ? by strid: tabulate fweight group ? 其中,“tabulate fweight group”表示绘制fweight和group的二维表,前缀 “by strid”表示为各层分别绘制表格。 实验15-4: 自助法 ? 实验基本原理 ? 实验内容及数据来源 ? 本书附带光盘data文件夹下的“usaauto.dta”工作文 件给出了美国的汽车业相关数据。 ? 利用该数据,我们来分析各因素对每加仑油所行驶的 里程数的影响,并讲解自助估计的基本操作以及多种 置信区间的获得等内容。 ? 实验操作指导 ? 1 自助估计的基本操作 ? 进行自助法估计的基本命令为: ? bootstrap exp_list [, options]: command ? 其中,bootstrap是自助法估计的基本命令,exp_list表示 要保存的结果的表达式,command指定一次抽样中执行的 命令,options代表其他选项。 ? 需要说明的一点是,表达式exp_list的格式与蒙特卡洛模拟 处相同;如果命令command每次改变的是估计的模型的系 数,则exp_list为可选项且默认值为_b。 ? 此外,表15.3列出了主要的options选项。 ? 下面,我们利用“usaauto.dta”的数据来讲解自助法 估计的相关操作。 ? 首先,我们进行OLS回归,获取回归系数和标准差, 以方便和后面的对比。输入命令: ? regress mpg weight gear foreign ? 下面,我们采取自助法进行回归。输入命令: ? bootstrap, reps(100) seed(123): regress mpg weight gear foreign ? 这里,reps(100)表示进行100次重复抽样, seed(123)表 示设置种子为123,冒号后为回归的命令。 ? 如果假定“usaauto.dta”的数据按照变量rep78(汽车在78年的修理次 数)来聚类,我们可以使用cluster()选项来进行适当的修正。另外, 我们这里想获得变量weight和gear_ratio的系数之差。这样,输入命令: ? keep if rep78 . ? bootstrap diff=(_b[weight] - _b[gear]), seed(123) cluster(rep78): regress mpg weight gear foreign ? 这里,第一步是删掉变量rep78的缺失值;这是因为命令bootstrap不 允许选项cluster()中的变量存在缺失值。第二步进行自助法回归,我 们将变量weight和gear_ratio的系数之差命名为diff,并设置种子为123, 聚类变量为rep78。 ? 对于我们这个回归,下面的命令也可以得到相同的结果: ? bootstrap diff=(_b[weight] - _b[gear]), seed(123): regress mpg weight gear foreign, vce(cluster rep78) ? 这里,我们在回归中设置了选项vce(cluster rep78),表明按变量rep78 聚类;这样,bootstrap命令就会按照变量rep78的类别进行抽样。 ? ? 2 多种置信区间的获得 ? 对于前面的自助回归,我们要获得多种置信区间。这样,先输入如下命令: ? qui bootstrap, reps(1000) saving(bs) bca seed(123): regress mpg weight gear foreign ? 这里,选项reps()表明抽样次数为1000;如我们前面所讲,要比较可靠地获得 置信区间的估计值,抽样次数要大一些。saving(bs)表示将自助估计的结果保 存到文件“bs.dta”中。qui表明不显示回归结果。 ? 下面,我们来获取多种置信区间。输入命令: ? estat bootstrap, all ? 这里,选项all表示显示所有可行的置信区间。 ? 前面,我们将自助估计的结果保存到文件“bs.dta”中。下面,我们可以利用 该文件检验各系数的自助分布是否为渐进正态。输入命令: ? use bs, clear ? 我们将打开数据文件“bs.dta”。下面,我们来看一下该文件的变量情况。输 入命令: ? describe * ? 这里,*表示各个变量。 ? 下面,我们可以对系数自助分布的正态性进行检验。例如,可输入命令: ? pnorm _b_weight ? 这里,pnorm是通过绘制标准整体概率图来检验变量的正态性。 习题 ? 1.模拟中心极限定理。提示:用命令program定义一个程序,从均匀分 布抽取一个容量为n(例如,60)的随机样本,并计算样本均值;然 后命令simulate来重复此程序若干次(例如,10000次),得到若干个 样本均值的取值;最后用命令histogram来画样本均值的直方图,并与 正态分布比较。 ? 2.本书附带光盘data文件夹下的“lowbirth2.dta”工作文件给出了按母 亲年龄进行匹配的56对婴儿体重的配对数据。主要变量包括:pairid= 每组的编号,low=婴儿是否体重偏低(1表示体重偏低),age=母亲的 年龄,lwt=母亲怀孕前体重,smoke=母亲怀孕期间是否抽烟(1表示抽 烟),ptd=母亲之前是否有早产婴儿(1表示有),ht=母亲是否高血 压(1表示是),ui=母亲是否有子宫炎(1表示有),race=母亲的种族 (1表示白人,2表示黑人,3表示其他)。 ? 以pairid为分组变量,进行重复抽样。首先抽取30组样本;然后对数据 进行扩容,抽取80组样本。要求设置频率权重。 ? 3.仍然利用习题2的数据,利用自助法,分析lwt、smoke、 ptd、ht、ui、race等各因素对婴儿体重是否偏低的影响, 以pairid为分组变量。因为被解释变量二值变量,数据又 是配对数据,考虑条件logit模型。这里需要注意的是,因 为每组数据可能被多次抽样抽到,所以需要通过选项 idcluster()为每组抽取的样本重新进行标识。 ? (提示:可以采用命令 bootstrap, seed(1) cluster(pairid) idcluster(newpairid): clogit low lwt smoke ptd ht ui race, group(newpairid)) ? 4.获取习题3中自助回归系数的多种置信区间。

网友评论

我的2016年度评论盘点
还没有评论,快来抢沙发吧!