tceic.com
学霸学习网 这下你爽了
赞助商链接
当前位置:首页 >> 互联网 >>

stata


                                                           现代医学统计方法与Stata应用  ?    1 

第一章  Stata 概貌 
§1.1  Stata的功能、特点和背景 
Stata是一个用于分析和管理数据的功能强大又小巧玲珑的实用统计分析软件,由美国计 算机资源中心( Computer Resource Center )研制。从1985至1998的十四年时间里,已连续推出 1.1,1.2 ,1.3,1.4 ,1.5 ,……及2.0,2.1,3.0 ,3.1 ,4.0,5. 0,6.0 等多个版本,通过不断更 新和扩充,内容日趋完善。它同时具有数据管理软件、统计分析软件、绘图软件、矩阵计算软 件和程序语言的特点 ,又在许多方面 别具一格。Stata融汇了上述程序的优点,克服了各自的 缺点,使其功能更加强大,操作更加灵活、简单,易学易用,越来越受到人们的重视和欢迎。 Stata 的突出特点是只占用很少的磁盘空间,输出结果简洁,所选方法先进,内容较齐 全,制作的图形十分精美,可直接被图形处理软件或字处理软件如WORD等直接调用。 一、  Stata的数据管理能力  ⑴ Stata的数据管理空间受计算机的操作系统和计算机扩展内存的影响 。对 640k 内存的 微机, 3.1版本的Stata可以管理2400 个记录×99个变量,并随计算机扩展内存的增加而增加; 对 4.0 的 WINDOWS 版本, Stata 可以管理 4800 个记录× 99 个变量;对 WINDOWS 95 下的 5.0版 本,可根据计算机的配置情况设置变量数和记录数,如32M 扩展内存的计算机,可处理 2千万 个数据。变量数和记录数可以互相交易(trade ),即减少记录数可以增加变量数,减少变量 数可以增加记录数。 ⑵ 可以将分组变量转换成指示变量(哑变量),将字符串变量映射成数字代码。 ⑶ 可以对数据文件进行横向和纵向链接,可以将行数据转为列数据,或反之。 ⑷ 可以恢复、修改执行过的命令。 ⑸ 可以利用数值函数或字符串函数产生新变量。 ⑹ 可以从键盘或磁盘读入数据。 二、  Stata的统计功能  Stata 的统计功能很强,除了传统的统计分析方法外,还收集了近 20 年发展起来的新方 法,如Cox 比例风险回归,指数与 Weibull回归,多类结果与有序结果的 logistic 回归,Poisson回 归、负二项回归及广义负二项回归,随机效应模型等。具体说, Stata 具有如下统计分析能 力: ⑴ 数值变量资料的一般分析:参数估计,t检验,单因素和多因素的方差分析 ,协方 差分析,交互效应模型,平衡和非平衡设计,嵌套设计,随机效应,多个均数的两两比较,缺 项数据的处理,方差齐性检验,正态性检验,变量变换等。 ⑵ 分类资料的一般分析:参数估计,列联表分析(χ2 检验,列联系数,确切概率),流行
 

10  ?  第二章  Stata的函数和变量 

第二章  Stata的函数和变量 
§2.1  Stata的函数 
Stata具有丰富的函数功能 。它不仅提供了一般计算机语言和统计软件包所具有的数学函 数和字符串函数,而且还提供了很多有用的统计函数、特殊函数,以及许多独具特色的系统变 量。借助于这些函数和系统变量,用户可以得心应手地使用 Stata ,充分发挥自己的聪明才 智,提高工作效率。 为讲述方便,先引入指令display 。display 使我们的计算机行使简单的计算功能 ,例如, 要计算 3+22 :   .dislplay 3+2^2       7  结果是7。 有了这个命令后,下面的讲述和练习就容易了。 一、  数学函数  1. 2. 3. 4. 5. 6. 7. 8. 9. 10. abs(x) exp(x) log(x) log10(x) sqrt(x) sin(x) cos(x) atan(x) lngamma(x) mod(x,y) /*绝对值函数 /*指教函数 /*自然对数 /*常用对数 /*平方根函数 /*正弦函数 /*余弦函数 /*反正切函数 /*整数x的Γ 函数之对数 ln[(x-1)!] /*模数函数获得x 除以y的余数,如display mod(25,3),结果将是1 。

二、  统计函数  1. 2. 3. 4. normprob(df,x) invnorm(p) Binomial(n,k,p) invbinomial(n,k,p) /*正态分布的下侧概率函数  /*正态分布的分位数  /*二项分布函数,表示n次试验中成功次数≥k的概率,p为成功概率  /*二项分布的逆函数,p示n次试验中成功次数 ≥k的概率,本函数给出 的是每次成功的概率。  当p<0.5时,概率p满足Pr(x≥k)=p  当p>0.5时,概率p满足Pr(x≥k)=1-p  /*自由度为df的t分布双侧累积概率Pr(|t|>t)  /*自由度为df的t分位数:invt(df,1-tprob(df,t))=t 

5. 6.
 

tprob(df,t) invt(df,P)

      现代医学统计方法与Stata应用

? 11

7. 8.

fprob(df1,df2,f) /*自由度为df1,df2的F分布的上侧累积概率  invfprob(df1,df2,p) /*F分布的分位数。    如果fprob(df1,df2,F)=p,则invfprob(df1,df2,p)=F  9. chiprob(df,x) /*自由度为df的χ2 分布的上侧累积概率  10. nchi(df,L,x) /*非中心χ2 分布的上侧概率。1<=df<=200,0<=L<=1000  11. invnchi(df,L,p) /*非中心χ2 分布的分位数。    如果nchi(df,L,x)=p,则invnchi(df,L,p)=x  12. gammap(a,x) /*不完全gamma函数P(a,x)  13. invgammap(a,p) /*不完全gamma函数P(a,x)的逆函数:    如果gammap(a,x)=p,则invgammap(df,p)=x  14. ibeta(a,b,x) /*不完全beta函数I_x(a,b)  15. uniform( ) /*产生(0,1)内的均匀分布的伪随机机数。每次使用时最好用命令   “set seed“设置随机数种子,以打乱伪随机数的固有顺序。  16. invnorm(uniform( )) /*产生均数为0, 标准差为1的标准正态分布随机数。  17. ?+σ×invnorm(uniform()) /*产生均数为 ?, 标准差为 σ的正态分布随机数。  三、  字符串函数        以下用s表示一个字符串,  n表示一个数值。  1. length(s) /*长度函数,计算s的长度, 如,disp length("ab")的结果是2  2. substr(s,n1,n2) /*子串函数,获得从s的n1个字符开始的n2个字符组成的字符串,    如,disp substr("abcdef",2,3)的结果是"bcd"  3. string(n) /*将数值n转换成字符串函数,如,disp string(41)+"f"的结果是    "41f"  4. real(s) /*将字符串s转换成数值函数,如,disp real("5.2")+1的结果是   6.2  5. upper(s) /*转换成大写字母函数,如,disp upper("this")的结果是    "THIS"  6. lower(s) /*转换成小写字母函数,如disp lower("THIS")的结果是"this"  7. index(s1,s2) /*子串位置函数,计算s2在s1中第一次出现的起始位置, 如果s2不 在s1中, 则结果为0。如,disp index("this","is")的结果是3, 而index("this","it")的结果是0  8. trim(s) /*去除字符串前面和后面的空格  9. ltrim(s) /*去除字符串前面的空格  10. rtrim(s) /*去除字符串后面的空格  四、  特殊函数    1. 符号函数sign(x) x>0时取1, x<0时取-1, x=0时取0。   2. 取 整 函 数 int(x) 去 掉 x 的 小 数 部 分 , 得 到 整 数 。 int(x+0.5) 是 对 x 四 舍 五 入 取 整 , int(x+sign(x)/2)产生与x最近的一个整数。   3. 求和函数 sum(x)   很常用,获得包括当前记录及以前的所有记录的 x 的和。缺失值 (missing value) 当 0处理。   4. 最大值函数max(x1,x2,...,Xn) 忽略缺失值。
 

12  ?  第二章  Stata的函数和变量 

  5. 最小值函数min(x1,x2,...,Xn) 忽略缺失值。   6. 分组函数 group(x) 将数据分成大小近 似相等的x 个子样本 , 分别给予组编号 1, 2,..., x。   7. 浮点转换函数float(x) 将x转换成浮点表示法。Stata 是用浮点形式存储数据的,   因此,   在将变量与具体数值进行比较时,最好先将具体数值转换成浮点形式。例如,   当 x 为 1.1时,  表达式 x==1.1 的结果可能不真,   因为表达式左边的 x是浮点形式,   右边的 1.1 是双精度形式,  二者相差0.00000002384, 而改写为 x==float(1.1)后, 结果就正确了。当某个数值没有有限的二 进制表达时,   常常会出现这种情况。   8. 条件函数cond(x,a,b) x可以是一个条件, x非0(条件成立)时取 a, x为0(条件不成立)时取 b。   9. 归组函数recode(x,x1 ,x2,...,xn) 其结果可表达如下: x1 如果x<=x1 x2 如果x1 <x<=x2 x3 如果x2 <x<=x3 recode(x,x1 ,x2, …,xn ) = …… xn-1 如果xn-2 <x<=xn-1 xn 如果x>xn-1 缺失值 如果x为缺失值。 10.自动归组函数autocode(x,ng,xmin,xmax) 自动将区间(xmin,xmax)分成ng个等长的小 区间,其结果是包含x值那个小区间的上界值。其作用与归组函数相同。

§ 2.2  Stata的格式文件、变量和系统变量 
一、  文件名和文件类型  Stata的格式文件命名规则与 Dos 中文件的命名规则相同 ,文件名以字母开头 ,不超过8个 字符,不能用标点符号,及Dos 中的通配符。Stata 共有六种格式文件,其默认的后缀(文件扩展 名)见表2.1。
                         表2.1             Stata的文件类型  文件扩展名 dct raw do dta log gph xp 文件特性 ASC Ⅱ数据字典文件 ASC Ⅱ数据文件 命令文件 Stata数据文件 Stata结果文件 Stata图形文件 Stata的 xp 数据文件

二、  变量名和变量类型  与文件名一样,Stata 的变量名可以是英文字母(A-Z 和a-z) ,数字(0- 9),下划线( _ ),可
 

      现代医学统计方法与Stata应用

? 13

区分的有效长度<=8 。Stata 中英文字母的大小写是有区别的。此外,以下是Stata 的关键字或系 统变量,不得用作用户变量名: _all _n _N _skip _b _coef _c ons _pi _pred _rc _weight double float long int in if using with Stata的用户变量有数值变量和字符串变量两种。字符串长度可以多达254,但只有前面80 个才有效。 三、  系统变量  1._coef[变量名]或_b[变量名]系统函数 拟合方差分析、回归分析、Cox 、 logit 或probit 等 模型后,利用系统函数可得到指定变量在当前拟合模型中的系数。在方差分析后,中括号[ ]内 的 变 量 可 以 是 某 种 处 理 的 某 一 水 平。 例如 , _coef[drug[2]] 表 示 药 物 的 第 二 水 平 的 系 数 , coef[drug[2]*disease[1]]表示药物的第二水平与第一种疾病的交互作用项的系数;在多类结果的 logistic 回归后,中括号[ ]内的变量可以是变量在某一类中的回归系数(见第十五章)。 2._cons 常数函数 直接使用时总是1,而_b[_cons]]的结果是当前拟合模型的常数项。 3._N 数据库中观察值的总个数。 4._n 当前观察值的位置。 5._pi 圆周率π的数值。 6._rc 最近一次capture命令返回代码的数值 四、  结果变量  除此以外,Stata还提供了一个独具特色的结果变量_result(#),该变量实际上是一个系统变 量,但由于其特殊性和重要性,专门把它列为一节讲述。 第一章已讲到,Stata有许多其它软件所没有的优点,其中一个优点是它的显示结果非常简 明、清晰,并将用户可能用于构造新变量的分析结果存于系统变量_result(#)下,这就为用户编 制批处理命令文件进行连续分析处理数据创造了条件。 _result(#)括号内的#可以是一个具体数值,也可以是一个算术表达式,变化范围根据使用 时的环境而变化,如在回归分析之后,n可以是1,2,3,4或5,每一个数值对应一个统计指标,详 见表格2.2。
表2.2     correlate 1.观察值个数 2. 3.1或第一个变量的方差 count 1.计数结果 inspect 1.观察值个数 2.为负数的观察值个数 3.变量个数 4.为正数的观察值个数 _result(n)的使用环境及相应的统计指标 4. 第一和第二个变量的相关性或协方差 5. 1或第二个变量的方差

5.为负整数的观察值个数 6. 为正整数的观察值个数 7.唯一数值或缺失值的个数 8.不能辨别是数值还是缺失值的个数

 
 

14  ?  第二章  Stata的函数和变量  表2.2(续)                 _result(n)的使用环境及相应的统计指标  describe or describe using 1.观察值个数 4.观察值的最大个数 2.变量个数 5.变量的最大个数 3.当前宽度 6.最大宽度 cox,logit,or probite 1.观察值个数 3.模型的自由度 2.似然对数 4.χ2值 anova,regress,or stepwise 1.观察值个数 6.F统计量 7.R2 2.模型的平方和 3.模型的自由度 8.调整R2 4.残差平方和 9.误差均方根 5.残差的自由度, Factor 1.观察值个数 7.第1个特征根 2.保留因素的个数 8.第2个特征根 3.相对于无因子时的 χ2检验 … 4.相对于无因子时的 χ2检验的自由度 … 5.相对于更多因子时的χ2 检验 19.第13个特征根 6.相对于更多因子时的χ2 检验的自由度 Oneway 1.观察值个数 5.组内自由度 2.组间平方和 6.F统计量 3.组间自由度 7.Bartlettχ2检验 4.组内平方和 8.Bartlettχ2检验的自由度 Summarize 1.观察值个数 9.第25百分位点(选detail时才有效) 2.权重之和 10.第50百分位点(选detail时才有效) 3.均值 11.第75百分位点(选detail时才有效) 4.方差 12.第90百分位点(选detail时才有效) 5.最小值 13.第95百分位点(选detail时才有效) 6.最大值 14.偏度系数(选detail时才有效) 7.第5百分位点(选detail 时才有效) 15.峰度系数(选detail时才有效) 8.第10百分位点(选detail时才有效), Tabulate 1.观察值个数 8.Fisher确切概率 2.行数 9.Cramer V 统计量 3.列数 10.gamma 统计量 4.Pearson χ2检验 11.gamma 统计量的ASSE 5.Pearson χ2检验的显著性 12.tau-b 统计量 6.l.r. χ2 检验 13.tau-b 统计量的ASSE 7.l.r. χ2 检验的显著性, Test 2.模型的平方和 5.残差的自由度 3.模型的自由度 6.F统计量 4.残差平方和(只在 anova 后才有效),

 
 

      现代医学统计方法与Stata应用

? 15

§2.3  Stata的算术运算和关系运算 
一、  算术运算  stata的加、减、乘、除及乘方运算符依次是+、-、* 、/ 和^ 。如:     

x / y (x?y)   应表达为(x/y^ (x-y))/(x?y) xy

二、  字符串运算  字符串只有“加”运算,如“this ”+“ is”,结果是“thisis ”。 三、  关系运算  Stata的关系运算符有: >(大于)、>=(大于等于)、<(小于)、<= (小于等于)、 ̄= (不等于)、= =(等于),在Stata的条件语句中“等于”要用两个等于号表示。关系运算的 取值是真(取值 1)或假(取值0)。关系运算不仅对数值有效,也可用于字符串。字符串的关 系运算是比较字符串在ASCII码中的先后顺序而不是数值的大小。此外,Stata规定所有的大写 字母的位置都在小写字母的前面,而缺失值在所有非缺失值的后面。 四、  逻辑运算  &(“与” )、 |(“或”)、 ̄( “非”) 是Stata的三个逻辑运算符 。逻辑运算的结果也是真 (取值1)和假(取值0)。 五、  运算优先顺序  -(负), ̄(非), ^,/,×,-(减),+, ̄=, >,<,<=, >=,==, &, |。  六、  实例  表2.3给了一些运算实例。在Stata 状态键入 disp再空一格键入表中第一列的表达式并按回车 键,便可得到表中第二列的结果。 
     表2.3                          运算实例  表达式  2+” this” substr(string(20+2),1,1)+upper(substr(“rf” ,1+1,1) “ Zebra” >” cat” (2==2)+1 (3>2)+1 3>2+1 3>2&5>4 (3>2)&(5>4)   结果  错误  “ 2F”   0  2  2  0  1  1 

16  ?  第二章  Stata的函数和变量 

最 后 , 值 得 一 提 的 是 :本 章 所 述 变 量 和 函 数 均 不 能 单 独 使 用 , 而 必 须 与 generate 、 replace、display 指令结合起来使用。generate和replace的使用详见第三章。  

 

2  ?  第一章  Stata概貌 

病学表格分析等。 ⑶ 等级资料的一般分析:秩变换,秩和检验,秩相关等。 ⑷ 相关与回归分析:简单相关,偏相关,典型相关,以及多达数十种的回归分析方 法,如多元线性回归,逐步回归 ,加权回归,稳键回归 ,二阶段回归,百分位数( 中位数)回 归,残差分析、强影响点分析,曲线拟合,随机效应的线性回归模型,等。 ⑸ 危险度分析:条件和非条件的 logistic 回归,多类结果与有序结果的 logistic 回归, Probit 回归,及其他广义线性模型,随机效应的logistic 回归,随机效应的Poisson回归,等。 ⑹ 生存分析:基线生存曲线的估计、相对危险度的估计, Kaplan-Meier 生存曲线、寿命 表分析,对数秩检验, Mantel-Haenszel检验, Wilcoxon-Gehan 检验,Cox比例风险模型 ,正态 截尾及Tobit 回归,指数回归和Weibull回归,等。 ⑺ 其它方法:质量控制,整群抽样的设计效率,诊断试验评价,kappa,等。 三、  Stata的作图功能      Stata的作图模 块,主要提供如下八种基本图形的制作: 直 方 图(histogram),条形图 (bar), 百分条图(oneway),百分圆图(pie),散点图(twoway),散点图矩阵(matrix),星形图 (star),分位数图。这些图形的巧妙应用,可以满足绝大多数用户的统计作图要求。在有些非 绘图命令中,也提供了专门绘制某种图形的功能,如在生存分析中,提供了绘制生存曲线图, 回归分析中提供了残差图等。详见第五章。 四、  Stata的矩阵运算功能  矩阵代数是多元统计分析的重要工具,Stata提供了多元统计分析中所需的矩阵基本运算, 如矩阵的加、积、逆、 Cholesky 分解、 Kronecker 内积等;还提供了一些高级运算,如特征 根、特征向量、奇异值分解等;在执行完某些统计分析命令后,还提供了一些系统矩阵,如估 计系数向量、估计系数的协方差矩阵等。 尽管Stata 的容量最大只容许400×400 的矩阵(默认为40×40),用它来完成日常工作中的统计 分析显然不现实,但用它来做一些练习,提高多元统计分析的教学效率,无疑是很有帮助。详 见第十八章。 五、  Stata的程序设计功能  Stata是一个统计分析软件 ,但它也具有很强的程序语言功能,这给用户提供了一个广阔 的开发应用的天地,用户可以充分发挥自己的聪明才智,熟练应用各种技巧,真正做到随心所 欲。事实上,Stata的ado 文件 (高级统计部分)都是用Stata 自己的语言编写的。下面这段程序是 笔者自行编写的,用于产生 n个参数为λ的Poisson分布的随机数。
prog define rp set obs `2’ set seed `3’ gen rp=. local lamda0=exp(`1’ ) local j=1 while `j’ <`2’ +1 {   /* /* /* /* /* /* /* 定义程序名 定义数据库的最大记录数 设置随机数种子, 定义变量rp ,用于存放Poisson分布随机数 计算 lamda0=exp(λ) j=1 对 j<n 循环,j 表示产生的第j个Poisson分布随机数

                                                           现代医学统计方法与Stata应用  ?    3  local i=1 local r0=1 while `i’ >0 { local r1=uniform() local r0=`r1’ *`r0’ if `r0’ < `lamda0’ { local n0= `i’ -1 local i=-1 } local i= `i’ +1 } quiet replace rp=`n0’ if _n==`j’ local j= `j’ +1 } end /* /* /* /* /* /* /* /* i=1 r0=1 i循 环 r1=均匀分布的随机数 r0=r1*t0 如果 r0<lamda0 n0= i-1 i=-1

/* i循环 /* 第j 个rp =n0 /* j循 环

§1.2  Stata的界面 
    Windows版本的Stata的界面上有一级菜单行,二级菜单窗口,命令窗口,结果窗口,图形 窗口,变量名窗口,已执行过的命令窗口,帮助窗口等。窗口的大小、位置可根据用户需要进 行调整。 

已执行  过的命  令窗口  结果 窗口

变量  窗口 

                                               命令窗口                                           
 

4  ?  第一章  Stata概貌 

§1.3  进入和退出Stata 
一、  DOS版本的Stata的进入和退出      前已述及,要将Stata程序所在的路径放入autoexec.bat中,我们可在DOS下任何目录位置 进入Stata,但我们假定d:\盘上进行。    D:\>Stata   进入Stata后,屏幕显示Stata的版本号,公司所在地等信息,Dos版本下的Stata即出现圆 点提示符。这时即可键入Stata的各种命令。      若已在Stata状态读入了数据,并且已将数据按Stata指令存盘,或读入的数据虽经分析, 但对数据及数据结构等未作任何修改,则只须键入:  . exit 即可退出Stata。      如未将数据按Stata指令存盘,或读入的数据或数据结构已被修改(Stata的有些命令会自 动修改数据结构,如按某变量排序等),这时,Stata将拒绝退出Stata状态。若确实不需要存 盘而退出Stata,可键入:  . e,clear (e为exit 的简写)即可强行退出Stata。或分两步,即先放弃所有数据, .drop _all 再退出Stata, . exit 二、  WINDOWS版本的Stata的进入和退出  在桌面上双击 Wstata的图标:

即可进入 Stata,并出现命令窗口。 在Stata的菜单中选 File , 再选 exit , 如数据已经存盘,则可退出Stata。如数据未存盘,则 Stata给出如下提示:“Data has changed without being saved. Do you really want to exit?”(数据 已改变,但未存盘,是否真的要退出?)如要退出,则按 确定 ,否则按 取消 。将数据存盘 后再退出。 在WINDOWS下,亦可用DOS的命令退出Stata。

§1.4  Stata的数据输入与储存 
Stata可以从键盘输入数据,也可以从文件读入数据。WINDOWS下的Stata还可以用Stata的 数据编辑器输入、修改和管理数据。这里简单介绍如何从键盘输入数据,有关更详细的数据读
 

                                                           现代医学统计方法与Stata应用  ?    5 

入方式将在第三章中讲述。 一、  从键盘输入数据  例1.1  某实验得到如下数据                  x 1 2 3 4 5 y 4 5.5 6.2 7.7 8.5 进入Stata后,操作过程如下,其中划线部分为操作者输入部分。 . input x y               x        y 
   1. 1  4       2. 2  5.5     3. 3  6.2     4. 4  7.7     5. 5  8.5     6. end 

    用list命令可以看到输入的数据。 
. list                                       x          y         1.         1          4         2.         2        5.5         3.         3        6.2         4.         4        7.7         5.         5        8.5      

二、  保存数据  为了方便以后应用,输入Stata的数据应存盘。如欲将上述数据存入d:\mydata\ 子目录中, 文件名为ex1.dta ,命令为: . save d:\mydata\ex1    file d:\temp\ex1replace.dta saved  该指令在d:盘的mydata子目录中建立了一个名为“ex1.dta”的Stata格式的数据文件。后缀dta是 Stata内定的数据格式文件。该格式文件只能在Stata中用use命令打开: . use d:\mydata\ex1  如目标盘及子目录中已有相同文件名的文件存在,则该命令将给出如下信息: file d:\ mydata\ex1.dta already exists,告诉用户在该目标盘及子目录中已有相同的文件名存在。如欲覆 盖已有文件,则加选择项replace。命令及结果如下: . save d:\mydata\ex1 , replace     file d:\temp\ex1.dta saved  这样,Stata在 d:盘的mydata子目录中建立了一个名为“ex1.dta ”的Stata 格式数据文件, 并替换了 原有文件。

 

6  ?  第一章  Stata概貌 

§1.5  Stata的结果文件 
  Stata在屏幕上显示的运行结果有两种,一种是纯字符型的(如方差分析结果,回归分析结 果等),一种是图形。   若要将操作过程和纯字符型结果记录下来,需事先打开一个 log文件: .log using 文件名  设结果文件名为result1 ,则Stata自动加上后缀“.log ”, 亦可由用户自己加上其他后缀。执 行该指令后的所有操作指令和文字结果(除help下显示的结果)将记录在结果文件“result1.log” 中。若执行某一指令后的结果没有必要记录下来,则可事先用指令“ log off”暂停记录,需要 记录时再用“ log on”继续记录,最后用“ log close”关闭文件。 如果结果文件“result1.log”已经存在,用“ log using result1”不能打开已有文件result1. log。如要覆盖文件result1.log,则加选择项replace。即键入: . log using result1, replace  如要在其后进行添加,则键入:  . log using result1, append  文件“result1.log ”可在EDIT、PE2、 WPS或 WORD等字处理软件下编辑、打印,也可在 DOS下用type或 print 命令通过显示器浏览或打印机输出硬拷贝。   若要将图形结果打印下来,需要在绘图指令中加上“saving ”选择项。例如,画例1.1中x 与y的散点图并存入文件“ ex1.gph”,可用下述指令:  .graph y x ,c(l) saving(d:\mydata\ex1)   

  这时屏幕上显示 y 与 x 的散点图,并将被存入 d:\mydata\ 子目录中,文件名为“ ex1.gph ” (gph是Stata内定的图形文件后缀,用户亦可自己定义后缀名)。该图形可在Stata状态用“ graph
 

                                                           现代医学统计方法与Stata应用  ?    7 

using d:\mydata\ex1 ”重新显示在屏幕上,可在 File 的 Print Graph 打印,也可用打印命令 “gphdot”打印。 DOS版本的Stata 可在DOS提示符下用“gphdot” 命令打印: D:\MYDATA>gphdot ex1.gph  更详细的内容见第五章。

§1.6  Stata的操作方式 
  Stata的操作有交互式操作和非交互式操作两种形式。 一、  交互式操作    在 Stata 状态直接键入指令,每输入一个指令, Stata 执行一个,这种方式称为交互式操 作。 例1.2  用例1.1数据建立回归方程。  .use ex1  .reg y x   二、  非交互式操作  若分析内容很多,有时甚至涉及到多个数据库,有几十个甚至成百个分析内容,若仍采 取交互式操作,不仅要将许多时间花在等待运算结果上,而且容易漏掉一些主要的分析内容或 做一些无益的重复劳动。这时最好在EDIT,PE2,WORD等文字处理下将这些指令写入一个以 “do”为扩展名的命令文件(文本格式,即ASCII码),并仔细核对分析内容、命令格式,直至 组织数据文件的合理性等,修改好后再在Stata状态执行该命令文件。  例1.3  用非交互式操作对例1.1数据进行相关和回归分析。  第一步,在字处理软件下写入如下指令,并以文件名“ex1.do”存入磁盘d:\mydata\子 目录中。 
set more 1                         /* 指定结果窗口中,当输出结果满一屏后,不再显示--more- -,直接显示下一屏   log using d:\mydata\ex1.log        /* 打开结果文件ex1.log   use d:\mydata\ex1.dta              /* 调用数据文件d:\mydata\ex1.dta   gra y x,saving(d:\mydtata\ex1)     /* 作y与x的散点图,并存入d:\mydtata\ex1.gph   cor y x                             /* 作y与x的相关  reg y x                             /* 作y与x的回归   log close                           /* 关闭结果文件ex1.log   set more 0                          /* 指定结果窗口中,当输出结果满一屏后,显示-- more--, 直到按任意键后,再显示下一屏  

第二步,在Stata状态键入: .do d:\mydtata\ex1.do  Stata将首先打开一个名为“ex1.log ”的结果文件,然后打开数据文件“ex1.dta ”,画散 点图并将图形存入文件 “ex1.gph ”,进行相关分析、回归分析 ,最后关闭结果文件。此时, Stata执行这些命令是自动的,不间断的。
 

8  ?  第一章  Stata概貌 

§1.7  Stata的帮助功能 
Stata具有很强的帮助功能。帮助功能的使用有两种方式。 一是在Stata状态,需要了解某个指令的格式和功能,这时只需键入help(或按功能键F1), 然后空一格键入该指令即可。例如,若需了解回归分析的指令格式,则: .  help regress  则可得到帮助。      二是利用菜单,在Stata的菜单上按 Help ,出现帮助窗口。 

  此时输入需要帮助的命令关键词,如regress,按  OK  即可得到帮助。  如需了解Stata的全部命令,可键入help contents,可得到Stata的全部命令及其简单解 释;或在帮助窗口按 Contents ,则出现如下的帮助内容窗口。 

 

                                                           现代医学统计方法与Stata应用  ?    9 

在知道所要帮助的命令时,在命令窗口键入help加命令,即可获得帮助;在不知道所要帮 助的命令时,用菜单操作更好。Stata的常用命令见附录。  下面以多元线性回归命令为例,介绍Stata的命令的格式。多元线性回归命令为regress, 欲得到命令格式,键入help regress即可得到:      [by varlist:]  regress [depvar [varlist1 [(varlist2)]]]                                            [weight] [if exp] [in range] [, level(#)                                     beta hascons noconstant noheader eform(string)                              depname(varname) mse1 ]                         命令中,[ ]内为选择项,括号外为必选项。      这里介绍命令的公共选择部分,该命令的专用选择项将在相应章节作介绍。  (1)  by varlist,是指定按变量varlist 的取值逐一作多元线性回归。如变量名为group,且 取值为1,2,3 ,4,则“by group:”是指定Stata 分别按group=1, group=2, group=3和 group=4的观察值分别作4 个回归方程。在选用该选择项前,要对变量排序,即先执 行sort,如: . sort group (2)  weight ,是指本命令允许使用加权或频数,有[fw=频数变量]和[aw= 加权变量 ]两种 形式。 (3)  if exp, 用条件语句指定条件。如,下列条件是合法的:
             if group==1               /*  对满足group=1条件的观察值进行分析               if group>2                /*  对满足group>2条件的观察值进行分析               if group==1 | group==2    /*  对满足group=1或group=2条件的观察值进行分析               if group ̄=3               /*  对满足group不等于3条件的观察值进行分析               if group==1 & sex==0      /*  对满足group=1,同时sex=0条件的观察值进行分析 

(4)  in range,指定观察值的范围,对在范围内的观察值作分析。下列语句是合法的: 
             in 1/25                   /*  对观察值范围为1~ 25号的观察值作分析               in 26/44                  /*  对观察值范围为26 ~44号的观察值作分析               in 26/l                   /*  对观察值范围为26 ~最后(last)的观察值作分析               in  – 5/l                   /*  对最后5个观察值进行分析 

这些公共选择项在很多命令中都可选用,本书在介绍各命令时将省去这些公共选择项。  另外一个选择项,也可用于很多命令,它就是 for 。例如,在作回归分析时,自变量为 x1,x2 , … ,x22 共 22 变量,而因变量有 y1,y2 , … ,y10,z1 , … ,z5 共 15 个变量。欲分别建立每个因变 量 yi 和 zi 与 x1,x2 , … ,x22 的回归,则需要写 15 个命令。而用 for 选择项只需一个命令即可: for y1-y10 z1-z5 : regress @ x1-x22 命令中,for 后面的变量是选定的,regress 是作回归分析,@ 是替换符,Stata 自动用 for 语句 指定的变量逐一替换作为因变量,而自变量为 x1-x22。 又如, for y* : summ @,detail 表示,对以y字母开始的变量作详细的统计描述。  
 

现代医学统计方法与Stata 应用

? 17

第三章  Stata的数据库操作技巧 
数据库管理是统计分析软件的基础 ,熟练地掌握数据库的操作是进行统计分析的前提, 特别是对实际资料进行分析时 ,数据库操作技巧尤显重要 。本章是Stata的基础部分,对需要 深入了解Stata 或进行复杂的数据库操作的读者,是必不可少的。

§3.1  Stata数据库的建立 
Stata 数据库的建立有 4 种方法 ,即从命令 行键盘输入 、用 Stata 的数据编辑器输 入、从 ASCII数据文件读入,以及从dbase或Foxbase数据库,SAS ,SPSS等数据文件中转入。 一、  从键盘输入数据  从键盘输入数据适用于数据量比较少的情况。用 input命令。 例3.1  表3.1为一配对试验数据,试从键盘输入Stata,并保存为Stata格式文件。 
                         表3.1              配对试验数据  x0  3550         2000         3000         3950         3800         3750         3450         3050        x1 2450  2400  1800  3200  3250  2700  2500  1750 

进入Stata 后,键入 input及变量名x0 x1,Stata即进入数据输入状态。然后依次输入数据x0 和x1,所输数据的顺序与变量名一致,数据间用空格分开,每输完一组键入回车键 Enter , 数据输完后键入“end”,Stata将自动退到圆点提示符状态。
. input x0 x1        x0    x1  1.  3550  2450   2. 3. 4. 5. 6. 7. 8. 2000  2400  3000  1800  3950  3200  3800  3250  3750  2700  3450  2500  3050  1750 

18  ? 第三章 9. end 

Stata 的数据库操作技巧

至此,数据输入完毕。可用 list命令查看。要将数据存成Stata的格式文件,用命令“save”: . save d:\mydata\ex3-1  该指令在 d:\ 盘 的 mydata 子目录中建立了一个名为“ ex3-1.dta ”的 Stata 数 据 文 件。后缀 dta 是 Stata内定的数据格式文件。该文件只能在Stata中用“use”命令打开。 二、  用Stata的数据编辑工具  Windows版本的Stata提供了数据编辑工具editor,给数据的输入提供了方便。在Stata中键 入edit 或在Stata的菜单中单击 Editor , 即可进入Stata 的数据编辑器,按变量输入数据。Stata将 第1列自动命名为var1,第2 列命名为var2,依次类推。在数据输入完后,单击 Preserve 键确认 所输数据,按“关闭”即可退出编辑器。此时数据已输入内存。再用“rename”命令将变量更 名。

. ren var1 x0  . ren var2 x1  . list             x0        x1     1.     3550      2450     2.     2000      2400     3.     3000      1800     4.     3950      3200  

现代医学统计方法与Stata 应用   5.     3800      3250     6.     3750      2700     7.     3450      2500     8.     3050      1750   

? 19

    如发现数据有误,可在任何时候进入编辑器对数据进行修改。按前述方法可将数据存盘。  三、  从ASCII文件读入数据  Stata 可以直接将 ASCII 码数据文件读入内存 。用“ infile 变 量 名 using ASCII 数据文件 名”。具体操作如下。   第一步  用WPS,PE2,EDIT,WORD或WINDOWS中的写字板等字处理软件输入表3.1数据, 格式如表 3.2 ,每 个 变 量 一 列, 不 加 变 量 名, 纯 粹 是 数 据 。并 以 文 件 名 ex3-1.txt 存入磁盘 d:\mydata\子目录中(ASCII码文件);
                          表3.2   表3.1数据在PE2字处理软件下的排列格式  3550  2000  3000  3950  3800  3750  3450  3050  2450  2400  1800  3200  3250  2700  2500  1750 

第二步 在Stata状态输入以下命令: . infile x0 x1 using d:\mydata\ex3-1.txt  此时数据已被读入内存。用“save”命令存盘。注意, infile 后的变量顺序需与数据文件中的顺 序一致。 四、  从dbase、foxbase文件或其它数据格式读入数据  transfer 是DOS下的一个程序,该程序可将多种格式的数据文件,包括dbase及foxbase文件, 转换成 Stata 格 式 文 件 或 其 它 格 式 文 件。 现 以 将 foxbase 转换为 Stata 格 式 文 件 为 例, 来说明 transfer 的用法。 在dbase或foxbase下输入例3.1 数据,并以文件名为 ex3-1.dbf,存入d:\mydata\ 子目录下, 欲 将ex3-1.dbf转换成Stata的格式文件,按transfer 的菜单指示进行操作,十分方便。步骤如下: 第一步,在DOS 状态键入transfer ,出现transfer 的页面。

20  ? 第三章

Stata 的数据库操作技巧

S T A T  /  T R A N S F E R    (C) Copyright 1986-1991  All Rights Reserved  Circle Systems, Inc.  (206) 682-3783    Version 2.0    3220-9815-47  Licensed to: Nantong Medical College  User: Dr. Feng Chen      Press Any Key to Continue 

  按提示,压任意键,进入下一页。 
  What kind of file would you like to transfer FROM?                                                                                                                1-2-3 V1-2.x Worksheet                                                  1-2-3 V3.x or Windows Worksheet                                         Alpha Four File                                                         Clipper File                                                            dBASE II File                                                           dBASE III or IV File                                                    Excel Worksheet                                                         FoxBASE File                                                            Gauss System File                                                       Paradox Table                                                           Quattro Pro Worksheet                                                   SAS Transport File                                                      SPSS Export File                                                        Stata System File                                                       Symphony Worksheet                                                      SYSTAT System File                                                                                                                 Move the menu pointer to your selection and press [ENTER].                        Press [ESCAPE] to leave Stat/Transfer.                

  第二步,选择原文件的格式 。transfer 可以将很多格式的文件转为其它格式 。原文件的格 式有:1-2-3,dbaseII,dbaseIII,Foxbase,SAS ,SPSS,SYSTAT 和Stata 。本例选Foxbase。选 好原文件格式后,程序自动进入下一个页面。     

现代医学统计方法与Stata 应用     Transferring FROM: FoBASE File                                                                                                                            What kind of file would you like to transfer TO?                                                                                                                           Alpha Four File                                                              Clipper File                                                                 dBASE II File                                                                dBASE III or IV File                                                         FoxBASE File                                                                 Gauss System File                                                            Paradox Table                                                                SAS Transport File                                                           SPSS Export File                                                             Stata System File                                                            SYSTAT System File                                                                                                                                                                                                        Move the menu pointer to your selection and press [ENTER].                      Press [ESCAPE] choose a different source file type.            

? 21

第三步,选择目标文件格式。本例为Stata格式文件。 第四步,选择原文件名,则出现如下页面。 
S T A T  /  T R A N S F E R?  You may select individual variables or             press * to select all of the variables.                                                                 8X        byte  

 8Y       float  Use the up and down arrow keys to move the cursor.                     [SPACE] toggles the selection marker.                                 The period key [.] anchors a range of variables.                       [+] selects a range of output variables.                              [-] removes a range of output variables.                              Selected variables are marked with an arrow ' '.                                                                                              To change the target type of numeric variables,                        type:  'b' -> byte                                                             'i' -> integer                                                          'l' -> long                                                             'f' -> float                                                            'd' -> double                                                           'D' -> Date                                                                                                                             Press [ENTER] when you are finished.                                  Press [ESCAPE] to select a different file.                            

22  ? 第三章

Stata 的数据库操作技巧

  该页面是让用户选择要转换的变量,变量列于页面的右则。选择变量的方法有3种。  1) 如选择所有的变量,则按键盘上的 * 键。  2) 如选择部分变量,则在要选的变量上按[SPACE]键,选中的变量前会出现符号 8 , [SPACE]键是一个开关键,如变量选错,再按[SPACE]键,则可消除变量的符号8,即放弃该变 量。  3) 如果需选的变量较多 ,且这些变量是紧挨着的,则可用在第一个变量上按小数点 键 . , 再用加号键  + 选择要转换的变量,直到最后一个变量被选入。当然,用减号键 –  可 将选入的变量消除。  选好变量后,按回车[Enter]键,即完成转换。此时,在d:\mydata\中就有一个文件名为ex31.dta的Stata格式文件。注意,transfer 转换后的文件自动存放在与原文件相同的子目录中。该 文件可在Stata 中用“use 文件名”命令打开。 五、  直接读入Stata格式数据  如果数据已按Stata格式存盘,则在下次调用时,直接键入“use 文件名”即可。本例:  .use d:\mydata\ex3-1  后缀dta被自动省略。此时,数据被读入内存。 

§3.2  数据库、变量、数值的说明 
一、  描述数据库  用命令describe可描述数据库,查看数据库的基本情况。假定数据库ex3-1.dta 已调入内存, 键入describe或 F3 即可。
. drop _all  . use d:\mydata\ex3-1  . describe                          Contains data from d:\mydata\ex3-1.dta     Obs:       8 (max=  4720)                   Vars:      2 (max=    99)                     25 Dec 1998 10:20     Width:     4 (max=   200)           1. x0           int    %8.0g      2. x1           int    %8.0g    Sorted by:                       

结果显示,该数据文件在d:\mydata\ 子目录中,当前数据库 ex3-1.dta 可容许最多 4720 个记录和 最多99个变量(不同版本的Stata及计算机内存,最大记录数和最大变量数不同,见1.1),实际情 况是, 2个变量 x0,x1和 8个记录。变量x0和x1是宽度为8的 g格式数值变量。g 格式是变量的显 示格式之一,还有 e 格式, f 格式和字符串格式,详见§ 3.4。结果中还显示了变量创建的时 间。

现代医学统计方法与Stata 应用

? 23

二、  对变量作说明  实际分析资料时,为了方便,总将观察指标用变量名来代替,但当变量较多时,可能会搞 不清楚每个变量代表的是哪一个指标。此时,可用 label var 命令对变量加一些说明,以示区 别。
. label var x0 "before treat"    . label var x1 "after  treat"   

对变量作了说明后,在任何时候,当我们对变量的含义不太清楚时,就可用describe命令来回 忆。
. des   Contains data from d:\mydata\ex3-1.dta     Obs:     8 (max=  4712)                  Vars:     2 (max=    99)                     23 Dec 1998 09:20   Width:     4 (max=   200)     1. x0           int    %8.0g                before treat     2. x1           int    %8.0g                after  treat   Sorted by:                                                  

结果中给出了x0 与x1的说明。 三、  对数值作说明  处理分类资料常常要对其取值作说明。作为例子 ,在数据文件 ex3-1.dta中增加一个变量 group,1表示回答“yes ”( 是),0 表示回答“no ”(否),并规定,结论为奇数时取 1,偶数时取 0。要对取值作说明,用 label define命令。 为便于说明,我们先产生变量group,规定偶数记录取 1,奇数记录取0。
. gen group=1-mod(_n,2)              . list                                          x0        x1      group     1.     3550      2450          0     2.     2000      2400          1     3.     3000      1800          0     4.     3950      3200          1     5.     3800      3250          0     6.     3750      2700          1     7.     3450      2500          0     8.     3050      1750          1  

    现对group的数值作说明: 
. lab define group  1 "yes" 0 "no" 

要查看变量取值的说明,用 lab list命令:

24  ? 第三章

Stata 的数据库操作技巧

. lab list group  group:               1 yes               0 no 

四、  对数据库作说明  对数据库作说明,用 label data命令。
. lab data "paired design, 23 Dec 1998"    . describe                                 Contains data from d:\mydata\ex3-1.dta       Obs:     8 (max=  4712)                     paired design, 23 Dec 1998    Vars:     3 (max=    99)                     23 Dec 1998 09:20  Width:     8 (max=   200)           1. x0           int    %8.0g                before treat         2. x1           int    %8.0g                after  treat         3. group        float  %9.0g            Sorted by:                                Note:  Data has changed since last save  

    对变量、数值或文件作说明后,最后要将数据存盘,执行以下命令: 
. save ,replace                   file d:\mydata\ex3-1.dta saved   

§3.3  数据库的维护 
Stata提供了很强的数据库维护功能,可以对数据排序,可以增删数据记录或变量,可以 横向或纵向链接等。 一、  数据库的排序      排序的命令为: 
sort  变量清单

该指令将按变量数值的上升序列重排数据,变量清单表示可有若干变量。例: 
. use d:\mydata\ex3-1          . sort x0                      . list                                    x0        x1           1.     2000      2400          2.     3000      1800          3.     3050      1750       

现代医学统计方法与Stata 应用   4.     3450      2500          5.     3550      2450          6.     3750      2700     7.     3800      3250     8.     3950      3200  

? 25

二、  删除变量或记录  删除变量或记录的命令为drop。如: . drop x1 x2         删除变量x1和x2  . drop x1-x5         删除数据库中介于x1和x5间的所有变量(包括x1和x5)  . drop if x<0        删去x<0的所有记录   . drop in 10/20      删去第10~ 20个记录   . drop if x==.       删去x为缺失值的所有记录   . drop if x==.|y==.  删去x或y之一为缺失值的所有记录  . drop if x==.&y==.  删去x和y同时为缺失值的所有记录  . drop _all          删掉数据库中所有变量和数据  三、  保留变量或记录  保留变量或记录的命令是keep 。keep是drop 的逆操作,语法结构与drop 完全一样,只是其 结果刚好相反。如: . keep in 10/20      保留第10~20个记录  . keep x1-x5      保留数据库中介于x1和x5间的所有变量(包括x1和x5),其余变量删除  . keep if x>0        保留x>0的所有记录   四、  纵向链接数据库  将两个变量相同的数据库纵向联接起来。命令是“ append using 文件名”。 例3.2 将下列文件ex3-2.dta与ex3-1.dta上下联接。
. use d:\mydata\ex3-2  . list                                          x0        x1      g    1.     2450      1450      2    2.     2100      2400      2    3.     2300      3800      2     4.     1590      4200      2 

该文件有 4 条记录, 3 个变量,其中变量 x0,x1 与文件 ex3-1.dta 相同,而变量 g 只有 ex3-2.dta 中 有,ex3-1.dta中无该变量,将该文件与ex3-1.dta联接:
. append using d:\mydata\ex3-1                                                    . list                                

26  ? 第三章

Stata 的数据库操作技巧

           x0        x1           g       1.     2450      1450          2     2.     2100      2400          2     3.     2300      3800          2      4.     1590      4200          2     5.     3550      2450          .       6.     2000      2400          .       7.     3000      1800          .       8.     3950      3200          .       9.     3800      3250          .      10.     3750      2700          .      11.     3450      2500          .      12.     3050      1750          .   

结果,新产生的数据库,记录数为12( 两数据库记录数之和),变量数为3(两数据库变量的 并集)。相同的变量上下相接, ex3-1.dta中没有的变量,在新数据库中用缺失值代替。 五、  横向链接数据库  将两个文件按关键变量横向联接。命令是“merge 关键变量 using 文件名”。其中,两 个库中均必须要有相同变量名的“关键变量”,并按“关键变量”排序,才可将两个数据库横 向联接。 例3.3 设有如下两个文件:           ex3-3.dta                          ex3-4.dta             bh   x0  x1                      bh   y0  y1    x0              1   12  24                       1   35  79.2   2              2   15  26                       3   45  47.4   8              3   16  49                       4   52  34.6   6              4   18  57                       6   66  28.0   9              5   20  68  ex3-3.dta 中,bh为 1 ~5 ,而在 ex3-4.dta 中, bh 取1,3,4,6,这些记录号与ex3-3.dta 中不一样,比 ex3-3.dta中少了 2和 5,但多了bh=6 。不妨将ex3-3.dta称为被动库,将 ex3-4,dta 称为主动库,将 主动库中的数据加到被动库中。步骤如下:
. drop _all                                 /*  清空数据库  . use d:\mydata\ex3-4                       /*  调用ex3-4.dta文件  . sort bh                                   /*  按bh从小到大排序  . save ,replace                             /*  将排好序的ex3-4.dta存盘,并替换原有文件  file d:\mydata\ex3-4.dta saved                . use d:\mydata\ex3-3,replace               /*  调用ex3-3.dta文件  . sort bh                                   /*  按bh从小到大排序 

现代医学统计方法与Stata 应用 . merge bh using d:\mydata\ex3-4           /*  按bh将两个数据库左右相拼  . list                                                    bh         x0         x1         y0         y1    _merge    1.         1         12         24         35       79.2         3    2.         2         15         26          .          .         1    3.         3         16         49         45       47.4         3    4.         4         18         57         52       34.6         3    5.         5         20         68          .          .         1    6.         6          .          .         66         28         2 

? 27

结果,Stata自动产生了新变量_merge,该变量的取值为1 ,2,3 ,当该记录只在被动库中出现 而未在主动库中出现时,该记录的_merge=1 ;当该记录只在主动库中出现而未在被动库中出 现时,该记录的_merge =2 ;在两个库中均出现时 ,_merge=3。记录空缺的用缺失值( 小数点) 来代替。 六、  产生新变量和替换变量数值  产生新变量用:  generate  新变量=表达式      替换原变量的取值:                               replace  变量=表达式  如: 
. generate bh= _n                           /*  将数据库的内部编号赋给变量bh。  . generate group=int((_n-1)/5)+1           /*  按当前数据库的顺序,依次产生5个1,5个2,5个                                                 3… … 。直到数据库结束。  . generate block=mod(_n,6)                 /*  按当前数据库的顺序,依次产生1,2,3,4,5,0。                                                 Mod是模数运算函数。  . replace  bolck=6 if block==0             /*  将block=0的数全部替换为6。  . generate y=log(x) if x>0                 /*  产生新变量y,其值为所有x>0的对数值log(x),当x<=0                                                 时,用缺失值代替。  . replace  z=. if z==9                     /*  将所有z=9的值用缺失值代替。 

    要改变某个已存在变量的数值,只能用命令replace。  七、  变量更名  变量的更名用:  rename  原变量名  新变量名  如:  . rename x y                         /*  将变量名x改为y  八、  增加空白记录 

28  ? 第三章

Stata 的数据库操作技巧

当需要增加一个或多个记录时,可先用指令des 查看当前数据库的最大记录数,再在此基 础上增加若干空白记录。   例如,若当前最大记录数是40,需增加2个空白记录,这时的操作为: . set obs 42  九、  更新数据库      将修改后的数据用原文件名存盘,替代原文件:  . save 数据文件名,replace 

§3.4  规定显示格式 
  用指令des 后,已多次看到 "float %9.0g",它表示变量以Stata的g格式显示,这是Stata变量 的默认格式。Stata 的另外两种显示格式是 e格式和f格式。为显示这三种格式的差别,现更名x 为g_fmt,并产生存贮内容与g_fmt完全相同的新变量e_fmt和 f_fmt。   /*  清空数据库  . drop _all                           /*  调用ex3-1.dta文件  . use ex3-1                             . ren x g_fmt                             /*  将变量名x改为g_fmt  _ _ . gen e fmt=g fmt                       /*  产生新变量e_fmt=g_ fmt  . gen f_fmt=g_ fmt                         /*  产生新变量f_fmt=g_ fmt    /*  描述数据库  . des                                  Contains data from ex3-1.dta     Obs:     5 (max=  2333)       Vars:     3 (max=    99)       1. g_fmt        float  %9.0g      2. e_fmt        float  %9.0g      3. f_fmt        float  %9.0g  可以看到,g_fmt和e_fmt都是g格式,现用指令format改变变量 e_fmt和f_fmt的显示格式 :
. format e_fmt  %9.2e  . format f_fmt  %9.2f  . des  Contains data from ex3-2.dta    Obs:     5 (max=  2333)   Vars:     3 (max=    99)      1. g_fmt        float  %9.0g      2. e_fmt        float  %9.2e      3. f_fmt        float  %9.2f  Sorted by:  Note:  Data has changed since last save 

可以看到,显示格式已经发生改变。 用命令list可以看到三种显示格式的差别:

现代医学统计方法与Stata 应用

? 29

. list g_fmt e _fmt f_fmt           g_fmt      e_fmt      f_fmt    1.       2.8   2.80e+00       2.80    2.   3962323   3.96e+06  3962322.50    3.      4.85   4.85e+00       4.85    4.  5.60e-06   5.60e-06       0.00    5.      6.26   6.26e+00       6.26    e 格 式 是 用 科 学 记 数 法 , 如 在 “ %9.2e ” 格 式 下 32.5 显 示 为 3.25e+01 , 3.25 显 示 为 3.25e+00;f格式是通常表示法,严格按照规定的小数位数显示,如0.0000056 在“%9.2f”格式 显示为的0.00 ;g 格式根据可读性自动选择 e 或f格式显示,并不受规定的小数位数的限制,如 1.1在“%9.2g”格式下显示为“ 1.10”,在“%9.1g”格式下显示为1.1,而在 "%9.0g"格式下还 是显示为1.1。命令“format x %9s ”规定x是一个可以接收 9个字符的字符串变量。      

30

? 第四章

统计描述与区间估计

第四章  统计描述及区间估计 
    本章介绍资料的统计描述和统计量的区间估计。 

§4.1  统计资料的一般描述 
    统计描述在统计分析过程中占有相当重要的地位,必须给予充分重视。通过统计描述,我 们不仅可以对整个数据的概貌、分布状况有个大致的了解,对各因素或变量间的相互关系有个 初步的结论,而且还可发现数据中的异常现象,为进一步分析选择方法提供依据。而数据的可 靠性,正是保证统计分析正确揭示客观规律的前提条件。因此,在进行任何统计分析之前,必 须对分析数据进行全面的描述。  Stata 具有很强的统计描述功能,可用统计量(数值)描述,也可用图形描述。本章介绍统计 量描述,图形描述见第五章。部分专用统计描述指令穿插在有关章节讲述。如描述指标间的相 关性安排在第九章,生存率的描述安排在第十六章等。 注意:统计描述是对分析数据进行描述,而第三章中的指令 describe 是对数据库的结构进 行描述。 一、  数值变量资料的描述  对一组数值变量资料的描述,最常用的统计量有均数、标准差、百分位数、偏度系数与峰 度系数、变异系数等。主要命令有 summary 与 centile 。
summarize [变量名] [, detail ] centile [变量名] [, centile(# [# ...]) cci normal meansd level(#) ] 

这里的选择项分别表示:
detail meansd cci normal level(#) /* /* /* /* /* 详细描述,缺失时为简单描述 指定百分位数用近似正态法,缺失时为直接算法 指定百分位数的可信区间用保守算法 指定百分位数的可信区间用近似正态法 指定百分位数的可信区间的可信限

下面看一个例子。 例 4.1  某市 1982 年 110 名 7 岁男童的身高(cm)资料如下: 
112.4  118.3  119.8  121.5  130.5  129.1  125.8  117.2  120.3  122.5  126.1  120.0  118.4  121.0  122.7  116.2  119.7  117.7  121.5  113.2  115.4  123.0  114.7  120.7  124.1  114.3  116.0  121.2  113.0  119.7  114.3  129.3  124.1  120.4  117.9  110.8  114.8  122.0  121.8  117.2  112.3  120.1  118.2  119.6  117.0  112.7  124.4  114.9  118.4  108.2  113.2  122.5  120.2  116.4  124.4  122.8  118.9  120.0  119.8  120.8  119.0  112.2  120.1  118.1  119.7  122.9  126.6  117.1  125.2  112.4  123.5  116.8  128.0  120.0  114.9  116.3  118.5 

现代医学统计方法与 Stata 应用 113.0  120.8  114.8  123.8  118.0  120.7  116.3  125.1  111.5  116.8  125.6  123.2  119.1  122.8  120.5  114.3  119.5  120.5  120.7  117.4  126.2  123.1  122.4  110.3  127.1  120.6  132.5  122.1  125.2  119.3  125.0  116.3  130.8 

? 31

    首先对资料作简单描述。设数据已被存入 d:\mydata\ex4-1.dta。 
. drop _all  . use ex4-1  . summ         Variable |     Obs        Mean   Std. Dev.       Min        Max    ---------+-----------------------------------------------------           x |     110    119.7273   4.741325      108.2      132.5   

这里,只用了 summ 命令,没有加任何选择项。结果中给出了变量 x 的样本含量(Obs)、均数 (Mean)、标准差(Std.Dev.)、最小值(Min)、最大值(Max)。 要得到更多的信息,需要加选择项“detail”(或 d):
. summ  x , d                                  x                                 -------------------------------------------------------------         Percentiles      Smallest                                  1%        110.3          108.2                                  5%        112.3          110.3                                 10%        113.1          110.8       Obs                 110   25%        116.4          111.5       Sum of Wgt.         110                                                                   50%        119.9                      Mean           119.7273                           Largest       Std. Dev.      4.741325   75%        122.8          129.3                                 90%        125.7          130.5       Variance       22.48017   95%          128          130.8       Skewness       .1524946   99%        130.8          132.5       Kurtosis       2.921794  

除样本含量,均数,标准差外,结果中还给出了 9 个百分位数(Percentiles),即 1%,5%,10%, 25%,50%,75% ,90%,95%和 99% ,他们依次是:110.3,112.3,113.1,116.1,119.9,122.8, 125.7,128.0 和 130.8;给出了 4 个最小数和 4 个最大数;方差(Varance) ,偏度系数 (Skewness) 与峰度系数(Kurtosis)。对正态分布来说,偏度系数=0 ,峰度系数=3。偏度系数为 0 时称为对称 分布, 大于 0 为正偏态, 小于 0 为负偏态;峰度系数为 3 时称为正态峰,大于 3 为尖峭峰, 小于 3 为平阔峰。 如欲得到更多的百分位数,则用命令“centile ”。
. centile x , centile(2.5,50,97.5)                                                       -- Binom. Interp. --          

32

? 第四章

统计描述与区间估计

Variable |     Obs  Percentile      Centile        [95% Conf. Interval]           ---------+-------------------------------------------------------------                  x |     110        2.5      110.6875           108.2     112.389*                   |                 50         119.9        118.9211    120.5789                    |               97.5      130.5675        127.1988       132.5*          * Lower (upper) confidence limit held at minimum (maximum) of sample             

我们在选择项 centile 中指定了 3 个百分位数,即 2.5%,50%和 97.5%。结果中除给出了百 分位数,同时还给出了百分位数的 95%可信区间。如 2.5%分位数为 110.6875,其 95%的可信区 间为(108.2,112.389),这里的*号表示可信区间的下限已达到所给数据的最小值(108.2)。 这里,百分位数的可信区间是按二项分布用插值法求出的。也可用近似正态法,只需加上 选择项 norm。
. centile x , centile(2.5,50,97.5) norm                                  -- Normal, based on observed centiles --           Variable |     Obs  Percentile      Centile        [95% Conf. Interval]           ---------+-------------------------------------------------------------                  x |     110        2.5      110.6875        108.5527    112.8223                    |                 50         119.9        118.7888    121.0112                    |               97.5      130.5675        125.8348    135.3002          

加上选择项 norm 后,所得百分位数相同,但可信区间不同。Stata 还提供了另一种保守的 基于二项分布的百分位数可信区间算法 cci(conservative confidence interval) 。
. centile x , centile(2.5,50,97.5) cci                                                      -- Binomial Exact --           Variable |     Obs  Percentile      Centile        [95% Conf. Interval]           ---------+-------------------------------------------------------------                  x |     110        2.5      110.6875           108.2       112.4*                   |                 50         119.9           118.9       120.6                    |               97.5      130.5675           127.1       132.5*          * Lower (upper) confidence limit held at minimum (maximum) of sample             

该法所得可信区间一般比插值法要宽。 上述百分位数用直接法计算的,Stata 提供了正态分布算法,即按公式:

x + uα s
如本例, x =119.7273,s=4.741325,故 2.5%分位数为: 119.7273-1.96×4.741325=110.4343 这只需在 centile 命令中增加选择项 meansd。 
. centile x , centile(2.5) meansd                                                                                -- Normal, based on mean and std. dev.--           Variable |     Obs  Percentile      Centile        [95% Conf. Interval]           ---------+-------------------------------------------------------------          

(4.1)

现代医学统计方法与 Stata 应用        x |     110        2.5      110.4344        108.9156    111.9533          

? 33

此时,百分位数的可信区间的算法也是基于正态分布的。 二、  分类变量资料的描述  对分类资料一般用率、构成比、比来描述某事物的发生强度、频率或构成,相应的命令为:
tabulate tab1 tabulate tab2 变量名 [, generate(新变量) missing nofreq nolabel plot ] 变量 1 变量 1 变量 2 变量 2 变量 3… … … [, missing nolabel plot ] [, cell column row missing nofreq] 变量 3 … … … [, tabulate_options ] 变量 1 变量 2

其中,前两个命令用于单变量的分类描述,后两个命令用于两个变量的交叉分类描述。选择项 的意义:
generate(新变量) nofreq nolabel plot missing cell column row /* 按分组变量产生哑变量 /* 不显示频数 /* 不显示数值标记 /* 显示各组频数图示 /* 包含缺失值 /* 显示各小组的构成比(小组之和为 1) /* 按栏显示各组之构成(各栏总计为 1) /* 按行显示各组之构成(各行总计为 1)

例 4.2 有三组(group)患者,男女(sex)若干人,sex=1 表示男性,sex=0 表示女性。测得其 血红蛋白浓度(x1,%)和红细胞计数(x2,万/mm3 ), 资料存入 d:\mydata\ex4-2.dta 。 试对其进行描述。  
. use d:\mydata\ex4-2  . list                               x1        x2     group       sex       1.       3.9       210         1         0       2.       4.2       190         1         0       3.       3.7       240         1         0       4.         4       170         1         0       5.       4.4       220         1         0       6.       5.2       230         1         0       7.       2.7       160         1         0       8.       2.4       260         1         0       9.       3.6       240         1         1      10.       5.5       180         1         1      11.       2.9       220         1         1      12.       3.3       300         1         1      13.       4.8       270         2         0   14.       4.7       180         2         0 

34

? 第四章

统计描述与区间估计

 15.       5.4       230         2         0   16.       4.5       245         2         0   17.       4.6       270         2         1   18.       4.4       220         2         1   19.       5.9       290         2         1   20.       5.5       290         2         1   21.       4.3       220         2         1   22.       5.1       310         2         1   23.       4.4       250         2         1   24.       3.7       305         3         1   25.       2.9       330         3         1   26.       4.5       240         3         1   27.       3.3       195         3         1   28.       4.5       275         3         0   29.       3.8       310         3         0   30.       3.7       240         3         0 

    首先看看各组的频数。 
. tab group          group|      Freq.     Percent        Cum.                                  ------------+-----------------------------------                                            1 |         12       40.00       40.00                                            2 |         11       36.67       76.67                                            3 |          7       23.33      100.00                                  ------------+-----------------------------------                                        Total |         30      100.00                                             

结果显示,各组的样本含量分别为:12 ,11,7。产生组变量的哑变量,分别以 g1,g2,g3 表示:
. tab group , gen(g)           group|      Freq.     Percent        Cum.   ------------+-----------------------------------             1 |         12       40.00       40.00             2 |         11       36.67       76.67             3 |          7       23.33      100.00   ------------+-----------------------------------         Total |         30      100.00              

这样,Stata 自动产生 group 的 3 个哑变量(group 有 3 组),命令中用 g 表示哑变量,Stata 自动 以 g1,g2,g3 表示,结果如下: 
. list group g1-g3  

现代医学统计方法与 Stata 应用         group        g1        g2        g3     1.        1         1         0         0     2.        1         1         0         0     3.        1         1         0         0     4.        1         1         0         0     5.        1         1         0         0     6.        1         1         0         0     7.        1         1         0         0     8.        1         1         0         0     9.        1         1         0         0    10.        1         1         0         0    11.        1         1         0         0    12.        1         1         0         0    13.        2         0         1         0    14.        2         0         1         0    15.        2         0         1         0    16.        2         0         1         0    17.        2         0         1         0    18.        2         0         1         0    19.        2         0         1         0    20.        2         0         1         0    21.        2         0         1         0    22.        2         0         1         0    23.        2         0         1         0    24.        3         0         0         1    25.        3         0         0         1    26.        3         0         0         1    27.        3         0         0         1    28.        3         0         0         1    29.        3         0         0         1    30.        3         0         0         1  

? 35

这一命令在广义线性回归中是很有用的。 再看看各组性别分布情况。
. tab group sex                                           | sex                                     group|         0          1 |     Total  -----------+----------------------+----------            1 |         8          4 |        12            2 |         4          7 |        11  

36

? 第四章

统计描述与区间估计

         3 |         3          4 |         7   -----------+----------------------+----------         Total|        15         15 |        30  

欲了解各组男女构成,在命令中加 row 选择项:
. tab group sex, row                                       | sex                                      group|         0          1 |     Total   -----------+----------------------+----------            1 |         8          4 |        12              |     66.67      33.33 |    100.00   -----------+----------------------+----------            2 |         4          7 |        11              |     36.36      63.64 |    100.00   -----------+----------------------+----------            3 |         3          4 |         7              |     42.86      57.14 |    100.00   -----------+----------------------+----------         Total|        15         15 |        30              |     50.00      50.00 |    100.00  

欲了解各组构成,在命令中加 cell 选择项:
. tab group sex, cell                                      | sex                                      group|         0          1 |     Total   -----------+----------------------+----------            1 |         8          4 |        12              |     26.67      13.33 |     40.00   -----------+----------------------+----------            2 |         4          7 |        11              |     13.33      23.33 |     36.67   -----------+----------------------+----------            3 |         3          4 |         7              |     10.00      13.33 |     23.33   -----------+----------------------+----------         Total|        15         15 |        30              |     50.00      50.00 |    100.00  

三、  分类变量与连续变量资料的综合描述 

现代医学统计方法与 Stata 应用

? 37

欲了解某数值变量资料在各组的均数、标准差等,用综合描述命令:
tab 分组变量 , summ(数值变量) tab 分组变量 1 分组变量 2 , summ(数值变量)

前者用于按一个变量分类,后者用于按两个变量分类。summ 后每次只能指定一个数值变量。 例 4.3  对例 4.2 资料,计算血红蛋白浓度和红细胞计数在各组的均数、标准差。
. tab group, sum(x1)                                            |            Summary of x1                     group|        Mean   Std. Dev.       Freq.   ------------+------------------------------------             1 |   3.8166667   .93889033          12             2 |   4.8727273   .52932203          11             3 |   3.7714286   .58513326           7   ------------+------------------------------------         Total |   4.1933333   .88236879          30                                                       . tab group, sum(x2)                                            |            Summary of x2                     group|        Mean   Std. Dev.       Freq.   ------------+------------------------------------             1 |   218.33333   39.962103          12             2 |   252.27273   38.299062          11             3 |   270.71429   48.082271           7   ------------+------------------------------------         Total |         243   45.383424          30  

若按分组变量和性别变量交叉分组,则得各交叉分类时血红蛋白浓度的均数: 
. tab group sex , sum(x1) nofreq                       Means and Standard Deviations of x1                 | sex                                      group|         0          1      Total    -----------+----------------------+----------            1 |    3.8125      3.825 | 3.8166667              | .90307009  1.1528949 | .93889033   -----------+----------------------+----------            2 |      4.85  4.8857143 | 4.8727273              |  .3872984   .6256425 | .52932203   -----------+----------------------+----------            3 |         4        3.6 | 3.7714286              | .43588989  .68313003 | .58513326  

38

? 第四章

统计描述与区间估计

-----------+----------------------+----------        Total | 4.1266667       4.26 | 4.1933333              |  .8224238   .9627342 | .88236879  

§4.2  可信区间估计 
统计推断有两个重要内容,其一是假设检验,其二是参数的可信区间估计。Stata 提供了均 数(正态分布), 率(二项分布)和事件数(Poisson 分布)的可信区间的估计。用于可信区间估计的命 令是:
ci 变量 [, level(#) binomial poisson exposure(观察数变量) by( 分组变量) total ]

Stata 还提供了已知 n, x , s 时均数的可信区间估计,已知 n,x 时率的可信区间估计,以及已知 n,x(事件数)时的总体事件数的可信区间估计。相应的命令为:
cii cii cii 观察数 均数 标准差 [, level(#) ] 观察数 阳性数 观察数 事件数 [, level(#) ] , poisson [level(#) ] /* 正态分布 /* 二项分布 /* Poisson 分布

其中选择项: 
level(#) binomial/poisson exposure(观察数变量) by(分组变量) total /* 指定可信度,缺失时为 95(%) /* 指定总体分布。只能选其中之一,缺失时为正态分布 /* 指定观察数变量,仅用于 Poisson 分布时 /* 指定按分组变量分别估计均数的可信区间 /* 指定除按分组变量估计可信区间外,还对整个数据估计, 仅用于 by(分组变量)时

  例 4.4  对例 4.2 中资料分别估计各组血红蛋白浓度和红细胞计数均数的可信区间。 
.  use d:\mydata\ex4-2  .  sort group                                  /* 在用 by(分组变量)前,必须对分组变量排序  .  ci x1 x2, by(group)                                                             ->  group=1                                                                       Variable |     Obs         Mean    Std. Err.       [95% Conf. Interval]           ---------+-------------------------------------------------------------                 x1 |      12     3.816667    .2710343        3.220124    4.413209                 x2 |      12     218.3333    11.53607        192.9426     243.724           ->  group=2                                                                       Variable |     Obs         Mean    Std. Err.       [95% Conf. Interval]           ---------+-------------------------------------------------------------                 x1 |      11     4.872727    .1595966        4.517124    5.228331                 x2 |      11     252.2727     11.5476        226.5431    278.0024           ->  group=3                                                                       Variable |     Obs         Mean    Std. Err.       [95% Conf. Interval]          

现代医学统计方法与 Stata 应用 ---------+-------------------------------------------------------------                 x1 |       7     3.771429    .2211596        3.230271    4.312587                 x2 |       7     270.7143    18.17339        226.2456     315.183          

? 39

结果中给出了各组各变量的样本含量,均数,均数的标准误(Std. Err.),以及 95%的可信区 间(95% conf. Interval)。 如果已知各组均数,则可用 cii 命令直接估计,如第一组血红蛋白浓度均数的可信区间:
. cii 12 3.816667 0.2710343                                                       Variable |     Obs         Mean    Std. Err.       [95% Conf. Interval]           ---------+-------------------------------------------------------------                    |      12     3.816667    .0782409         3.64446    3.988874        

结果与从原始资料估计所得结果相同。估计 90%的可信区间的命令为: 
. cii  12 3.816667 0.2710343, level(90)       

(结果略)  例 4.5 某地抽查了 10 名献血员的乙肝表面抗原(HBsAg)携带情况,阳性人数为 2,试估 计该地 HBsAg 阳性率。 直接用 cii 命令:
  . cii 10  2                                                                                                                          -- Binomial Exact --           Variable |     Obs         Mean    Std. Err.       [95% Conf. Interval]           ---------+-------------------------------------------------------------                    |      10           .2    .1264911        .0251953      .55625          

结果,阳性率为 0.2,标准误为 0.1265,阳性率的 95%可信区间为:(0.0252, 0.5563)。 例 4.6 将一个面积为 100cm2 的培养皿置于某病房,1 小时后取出,培养 24 小时,查得 8 个菌落,求该病房平均每 100cm2 的面积细菌数的 95%可信区间。 
. cii 1 8 , poisson                                                                                                                  -- Poisson  Exact --           Variable | Exposure        Mean    Std. Err.       [95% Conf. Interval]           ---------+-------------------------------------------------------------                    |       1            8    2.828427           3.454    15.76225          

这里的 1 表示 1 个 100cm2 的面积。即病房平均每 100cm2 的面积细菌数的 95% 可信区间为 (3.5,15.8)。

40

? 第五章

Stata 的绘图功能

第五章  Stata 的绘图功能 
统计作图是 Stata 又一强大的功能。Stata 的作图命令简洁,图形精美,应用者可随心所欲,并 可充分发挥想象力。Stata 的作图命令 graph 主要提供如下八种基本图形的制作: 直方图(histogram), 条形图(bar), 百分条图(oneway), 百分圆图(pie) , 散点图(twoway), 散点图矩阵(matrix), 星形图(star), 分位数图。在有些非绘图命令中,也提供了专门绘制某种图形的功能,如在生存分析中,提供了绘 制生存曲线图等。

§5.1  几种常见的统计图 
    首先展示几种 Stata 绘制的常见的统计图。读者可以先有一个直观印象。                   
图 5.1  直方图 

                   
图 5.2  直条图   

现代医学统计方法与 Stata 应用

? 41

                   
图 5.3    散点图 

                   
图 5.4    单变量散点图与箱式图  

                   
图 5.5    百分圆图   

42

? 第五章

Stata 的绘图功能

                 
图 5.6  Box-Whisker 的箱式图 

                 
图 5.7  星状图 

                   
图 5.8  Kaplan-Meier 生存曲线图 

 
 

现代医学统计方法与 Stata 应用

? 43

§5.2  几种常见统计图的绘制 
这里重点讲述直方图 (histogram), 条图(bar) 和, 圆饼图(pie), 一维、 二维散点图和线图 (twoway)、 箱式图(box) 的制作。其它统计图安排在相应的章节结合实例讲述。需要时可用命令 help graph 了解 详细内容。 一、  直方图的制作  直方图主要用于表示数值变量资料的分布。常以横轴表示被观察对象,纵轴表示频数或频率。 绘制直方图的命令为: 
graph [ 变量名] [, 选择项]

这里的选择项有:
bin(#) freq normal[(#,#)] density(#) shading(s) axis/ noaxis border/noborder xlable/ylable/tlable/rlable[(#,…,#)] /* 将数据分为几组,#为数字,缺省值为 5。 /* 指定以频数为纵轴画图,缺省时为以频率为纵轴。 /* 在直方图上加上正态分布曲线, N(#,#), 前一个#为均数, 后一个为方差, 缺省值为原资料的均数与方差。 /* 与 normal 合用,表示在画正态曲线时的光滑程度。缺省值为 100。 /* 定义直方图的阴影。范围在 1~4,缺省值为 3。 /* 画/不画坐标轴,缺省值为画坐标轴。 /* 画/不画边框,缺省值为不画。 /* lable 是指在坐标轴上画上坐标点及相应的数据, xlable,ylable, tlable, rlable 分别表示 x 轴、y 轴、上边的轴、右边的轴。下同。 缺省时只画 x 和 y 轴的最小值和最大值。 /* tick 是指在相应的坐标轴上画上坐标点,但不画数据。 /* line 表示以相应的坐标画线。 /* 分别指定 x 轴和 y 轴的最小和最大坐标点。 /* 给图加上总标题。Stata 不接受中文字符。 /* 给各坐标轴加上标题, b 表示底轴(x 轴),l 表示左轴(y 轴), t 表示上边 轴,r 表示右边的轴。下同。 /* 给各坐标轴加上副标题。 /* 调整标题与坐标轴的间距。范围为 1~8,缺省值为 8。 /* 将图形存盘,replace 表示替换原有图形文件。 的

xtick/ytick/ttick/rtick[(#,…,#)] xline/yline/tline/rline[(#,…,#)] xscale/yscale[(#,,#)] title([“][字符串][“] ) b1/l1/t1/rl([“][字符串][“]) b2/l2/t2/r2([“][字符串][“]) gap(#) saving( 文件名[,replace])]

      例 5.1   对例 4.1 资料绘制直方图。       最简单的命令是: 
. use d:\mydata\ex4-1  . gra x 

    gra 是 graph 的简写形式。因为无选择项,所以 Stata 给出最简单的图形,即分 5 组,以频率 表示,给出了 x 轴的最小、最大值,y 轴标有 0(直方图必须从 0 开始),和 5 组中的最大频率;并 各标有另外 3 个等间隔的坐标点。 见图 5.9。 (为方便印刷, 图中阴影部分在用 WORD 处理时去掉了)。  
 

44

? 第五章

Stata 的绘图功能

                   
图 5.9   例 4.1 资料的直方图 

      适当选用选择项可以使图形更精细。如: 
. gra x, bin(9) freq xlab(108,111,114,117,120,123,126,129,132,135) ylab(0,5,10, 15,20,25,30,35)           norm gap(4) b2("height  (CM)")  

                     
图 5.10   例 4.1 资料的直方图及正态分布曲线 

  这里,Stata 按要求将资料分为 9 组(bin(9)) ;用频数作为纵坐标(freq) ;画上了正态曲线(norm), 其均数和标准差直接取 x 的均数和标准差,分别为 119.7273 和 22.4802;并在纵坐标和横坐标上分 别加上等间隔的刻度 (xlab,ylab);将坐标轴的标题与图形间的距离缩小(gap) ,并定义横坐标为: “height (CM) ”。这样画出的图形就较精确、美观。 Stata 允许在图形的每一边(上, 下, 左,右)最多各加两条说明或标题,相应的选择项分别是 t1, t2,b1,b2,l1,l2 及 r1 和 r2,然后紧跟括号,并在括号内写上相应的说明或标题名,若说明中本 身就有括号,则需用引号将说明语句引起来。
 

现代医学统计方法与 Stata 应用

? 45

二、 条图的制作 用等宽直条的长短来表示相互独立的各指标的取值大小。有单式条图和复式条图。绘制条图的 命令格式如下:
graph 变量 1 [变量 2[...]], bar [选择项]

这里的选择项有:
means stack accumulate totle shading(s) axis/ noaxis [no]alt border/noborder /* 用均数而不是用总数来表示该指标的值。缺省值为总数 /* 将各指标的堆积起来,而不是并排。缺省值为并排 /* 将各指标的值逐次累加 /* 增加各指标的总和直条 /* 定义直方图的阴影。范围在 1~4,缺省值为 3 /* 画/不画坐标轴,缺省值为画坐标轴 /* 将横坐标的刻度错开排放。缺省值为放在一排 /* 同直条图

其它一些选择项的意义与直方图是一样的,有:xlable/ylable/tlable/rlable[(#,...,#)], ytick[(#,...,#)], yline[(#,...,#)], yscale[(#,,#)] , title(["][ 字符串]["]), b1/l1/t1/rl(["][ 字符串]["]), b2/l2/t2/r2(["][字符串]["]), gap(#), saving(文件名[,replace])]。 这里要注意的是,tick,line,scale 只对 y 轴有效,其它轴无效。 例 5.2  某地二年三种疾病的死亡率如表 5.1,请绘制复式条图(每种疾病为一组,每组有两个 直条,分别代表两个年度,条图的纵轴必须从 0 开始)。 
                              表 5.1  某地二年三种疾病的死亡率(1/10 万)  死因  肺结核  心脏病  恶性肿瘤  1952 年  163.2  72.5  57.2  1972 年  27.4  83.6  178.2 

    我们面临的首要问题是将表 5.1 的数据转化为 Stata 制作条形图所要求的数据格式。 根据要求, 我们需引入死因变量 D 和年度死亡率变量 P52 和 P72,并定义如下:                       1    肺结核                  D=   2    心脏病                       3    恶性肿瘤                  P52=1952 年的死亡率                  P72=1972 年的死亡率      数据输入过程: 
. drop _all  . input d p52 p72 

             d        p52        p72   
  1. 1 163.2  27.4    2. 2  72.5  83.6    3. 3  57.2 178.2   

46

? 第五章

Stata 的绘图功能

  4. end 

. save d:\mydata\ex5-1 
file ex5-1.dta saved 

    数据已以文件名 ex5-1.dta 存入磁盘。现对数据库结构进行描述:  . des 
Contains data from ex5-1.dta    Obs:     3 (max=  4719)                     Vars:     3 (max=    99)  Width:    12 (max=   200)     1. d            float  %9.0g                 2. p52          float  %9.0g                 3. p72          float  %9.0g               Sorted by: 

    为使图形更具有可读性,还可对变量及其取值给予必要的说明: 
. lab var d "Reasons of die"  . lab var p52 "Rate of die in 1952"  . lab var p72 "Rate of die in 1972"  . lab define d 1 "tuberculosis" 2 "heart disease" 3 "tumour"  . des  Contains data from ex5-1.dta     Obs:     3 (max=  4719)                      Vars:     3 (max=    99)   Width:    12 (max=   200)    1. d            float  %9.0g             Reasons of die    2. p52          float  %9.0g             Rate of die in 1952    3. p72          float  %9.0g             Rate of die in 1972  Sorted by:    . save d:\mydata\ex5-1,replace  file ex5-1.dta saved 

    有了以上的准备,Stata 就可以为我们作出精美的条形图了: 
. gra p52 p72,bar by(d) sh(31) l1("Rate of die(1/100000)") b1(Comparison of rate of die) 

指令 sh(31)是 shading(31)的缩写,3 和 1 分别指示 1952 年和 1972 年的条形图的明暗度 ,3 与 1 之间无空格及其它符号。“gra”后跟了几个变量,sh 的括号内就应有几个数字与之对应。[注:为便 于排版,图 5.11 中的阴影在用 WORD 编辑时作了处理 ]。        
 

现代医学统计方法与 Stata 应用

? 47

                     
图 5.11      例 5.2 资料的直条图(直条并排) 

增加不同的选择项,会出现不同的效果。                    
图 5.12      例 5.2 资料的直条图(直条堆积) 

. gra p52 p72 , bar by(d) ylab  stack  total  alt  l1("Rate of Die (1/100000)")  gap(4)                      

这里,选择项 stack 要求 Stata 将各指标叠起排放;选择项 total 是要求 Stata 给出三者的总 和;选择项 alt 要求横坐标的 4 个标目错开排列;选择项 gap(4)要求缩小坐标的标题与图的间隔。   三、 圆饼图的制作 圆饼图(pie)主要用于表示全体中各部分的比重。绘制圆饼图命令同直条图,只是将 bar 换成 pie 就行了。 
graph 变量 1 变量 2 [...] ,pie [选择项]  

48

? 第五章

Stata 的绘图功能

选择项比直条图少, 有: shading(#,...#) , by(变量), accumulate, totle , 以及标题等: title(["][字符串]["]]), t|l|b|r1|2title(["][字符串]["]) ,saving( 文件名[,replace]) 。其意义同上。 例 5.3 将例 5.2 资料作圆饼图:  . gra p52 p72,pie by(d) sh(31) total                     
图 5.13  例 5.2 资料的圆饼图 

选择项 total 要求 Stata 给出合计的圆饼图。  四、 二维散点图与线图的制作 散点图(scatter graph)用于反映两个或多个变量间的关系,将各散点用连线连接起来,就是 线图(line graph),主要用于反映事物的变化趋势等。用于散点图和线图绘制的命令为: 
graph y 变量 [y 变量 2[...]] x 变量, [选择项]

绘制散点图和线条的两个主要的选择项为: connect(c...c) 或简写为 c(c...c)
/* 连接各散点的方式,c 表示: . 不连接 (缺省值) l 用直线连接 L 沿 x 方向只向前不向后直线连接 m 计算中位数并用直线连接 s 用三次平滑曲线连接 J 以阶梯式直线条连接 || 用直线连接在同一纵向上的两点 II 同 ||, 只是线的顶部和底部有一个短横 /* 表示各散点的图形,s 表示: 大圆圈 (缺省值)  O 大方块  S 大三角形  T 小圆圈  o 小菱形  d

Symbol(s...s) 或简写为 s(s...s)

 

现代医学统计方法与 Stata 应用 p . i [varname] [_n] 小加号 小点 无符号 用变量的取值代码表示 用点的记录号表示

? 49

其它选择项还有: 
axis/ noaxis ,border/noborder,twoway box,sort xlable/ylable/tlable/rlable[(#,...,#)],xtick/ytick/ttick/rtick[(#,...,#)] xline/yline/tline/rline[(#,...,#)],xscale/yscale[(#,,#)] title(["][字符串]["]),b1/l1/t1/rl(["][字符串]["]) ,b2/l2/t2/r2(["][字符串]["]) gap(#),saving( 文件名[,replace])]

意义同前。   例 5.4  某地三岁儿童 10 人的体重与体表面积测量值如下,试作散点图,描述两者间的关系。  
体    重 x,(kg)  11  12.3  12  11.8  13.1  14.4  13.7  14.9  15.2  16  体表面积 y,(10 3cm)  5.283  5.292  5.358  5.299  5.602  5.83  6.014  6.102  6.075  6.411 

.gra y x , s(o) xlab ylab                        
图 5.14  10 名三岁儿童的体重与体表面积散点图 

这里有两个变量,前者为纵轴,后者为横轴。s(o) 表示散点用圆圈表示。gra 是 graph 的缩写。 下面 4 个命令都是画线图的,但不同的选择,所作图形之效果就不同。
. gra y x, xlab ylab c(l) s(d) b2("(a)")        gap(4)  saving(d:\mydata\ex54a)   . gra y x, xlab ylab c(l) s(p) b2("(b)")  sort  gap(4)  saving(d:\mydata\ex54b)   . gra y x, xlab ylab c(J) s(.) b2("(c)")  sort  gap(4)  saving(d:\mydata\ex54c)   . gra y x, xlab ylab c(L) s(T) b2("(d)")        gap(4)  saving(d:\mydata\ex54d)    

50

? 第五章

Stata 的绘图功能

                     
图 5.15  例 5.4 资料的四种线图 

这里给出的 4 个图各有特点,分别说明了几个选项的作用:  symbol(s) :(a)、(b) 、 (c) 、 (d)4 个图中,分别用了 s(d) 、s(p)、s(.)、s(T),分别表示菱形、加 号、小点号和三角形。 connect(c) :(a)和(b) 、 (c) 、 (d)4 个图中,分别用了 c(l) 、c(J)、c(L),分别表示直线、阶梯式 直线、不向后直线三种连接方式。 sort :图(a) 和图(b) 中,都是用直线相连的,但连线的顺序不同,前者无 sort 选择项,而后者选 用了 sort。故前者是按数据的顺序连接的,而后者是按横轴从小到大的顺序连接的。这就是 sort 的 作用。 用 s() ,c()及 sort 的不同组合,可以得到不同的效果,读者不妨一试。 一个图中可画多条趋势线,作图命令不变,所有变量列在关键词 graph 后,最后一个变量是横 轴变量。变量的顺序须与 c(c…c) 及 s(s …s) 中的连线及符号相对应。 下面通过一个实例来看一看散点图和线图的巧妙应用。 例 5.5 两组病人某指标的动态变化(均数±标准差)结果如下,要求在同一个图中画两条趋势曲 线,并标上标准差。
时间(h) 实验组 对照组 0 11.8±1.4 10.6±1.5 2 18.5±2.3 16.3±2 4 25± 3.4 18.9±2.1 6 27.3±2.9 22.6±1.9 8 30.4±3.2 22.8±1.8 10 31.7±3.4 22.6±2.3 12 32.5±3.5 22.9±2.2

先输入资料:
. input time y1 sd1 y2 sd2  1.  0  11.8   1.4  10.6   1.5     2.  2  18.5   2.3  16.3   2     3.  4  25     3.4  18.9   2.1    4.  6  27.3   2.9  22.6   1.9     

现代医学统计方法与 Stata 应用 5.  8  30.4   3.2  22.8   1.8    6.  10 31.7   3.4  22.6   2.3    7.  12 32.5   3.5  22.9   2.2    8.  end 

? 51

先画一组,以说明如何在趋势线图上加上标准差,以实验组为例。资料要作一些整理。  首先要产生两个新变量,以表示标准差的上下两点的位置。  . gen z1=y1+sd1  . gen z2=y1-sd1  则 z1,z2 分别表示标准差的上下两点的位置。用下列命令可得到所要作的图。  . gra y1 z1 z2 t , s(T..) c(lII) xlab(0,2,4,6,8,10,12,14) ylab                       
图 5.16  例 5.5 资料实验组的趋势线图 

    这里, 有三组散点,即(y1,t),(z1,t),(z2,t),各 7 各点。s(T..)表示第一组散点用三角表示, 另两组用点表示。其中,第一组要用直线相连,以表示 y1 随时间的变化趋势,而另两组的点不要 连接。但要将对应的 y1+sd1 和 y1-sd1 连起来,以反映变异的大小。故这里选用了 c(lII)。  再将两组资料合在一个图中。当然可按上述步骤,增加几个变量即可。但因两组资料的横轴刻 度是一样的,当将两组资料合在一个图中时,就有很多重叠的部分,因而分不清两组资料。为了更 清楚地表示,可将两组的横轴错开。所谓错开,即是两组的横坐标错开,如第 2 组的横坐标向右移 0.4。但这样两组的横坐标就不一样了,而 graph 命令中横坐标只能有一个,因而原来的横坐标数 据个数就增加一倍,变成 14 个点。步骤如下: 
. set obs 14  . replace time=time[_n-7]+0.4 in 8/l  . replace y2=y2[_n-7] in 8/l  . replace  y2=. in 1/7   . replace sd2=sd2[ _n-7] in 8/l  . replace sd2=. in 1/7   . replace z1=y2+sd2 in 8/l      /* 将观察点扩展到 14。  /* 将第 2 组资料的时间加上 0.4,并放在 8~14 号。  /* 将第 2 组资料的观察值放在 8~14 号。(l 表示 last)  /* 将第 2 组资料的 1~7 号观察值置为缺省值  /* 将第 2 组资料的标准差放在 8~14 号  /* 将第 2 组资料 1~7 号的标准差置为缺省值  /* 计算第 2 组资料的标准差上面点的值,并放在 8~14 号 

52

? 第五章

Stata 的绘图功能 /* 计算第 2 组资料的标准差下面点的值,并放在 8~14 号 

. replace z2=y2-sd2 in 8/l   

看一下现在的数据库: 
  . list time y1 y2 z1 z2                                                                                                               time         y1         y2         z1         z2      1.         0       11.8          .       13.2       10.4      2.         2       18.5          .       20.8       16.2      3.         4         25          .       28.4       21.6      4.         6       27.3          .       30.2       24.4      5.         8       30.4          .       33.6       27.2      6.        10       31.7          .       35.1       28.3      7.        12       32.5          .         36         29      8.        .4          .       10.6       12.1        9.1      9.       2.4          .       16.3       18.3       14.3     10.       4.4          .       18.9         21       16.8     11.       6.4          .       22.6       24.5       20.7     12.       8.4          .       22.8       24.6         21     13.      10.4          .       22.6       24.9       20.3     14.      12.4          .       22.9       25.1       20.7  

    共有 14 个点,其中 y2 和 sd2 被放在 8~14 号上,z1 和 z2 表示标准差的上下两点的位置,前 面 7 个数据是实验组的,后面 7 个数据是对照组的。做好这样的准备后,即可画图。 
. gra y1 y2 z1 z2 time, c(llII) s(TO..) xlab(0,2,4,6,8,10,12)  ylab 

                     
图 5.17    例 5.5 两组资料的趋势线图 

两组资料一目了然。  注意,这里的两个 II 必须写在一起,z1,z2 也必须排在一起。用||代替 II 时,标准差的上下
 

现代医学统计方法与 Stata 应用

? 53

两点无小横线段。  五、 一维散点图与箱式图的制作 一维散点图用于反映一个变量各观察点的分布位置。箱式图绘制 box-whisker 图,用于描述一 组资料的中位数、四分位数及最大值、最小值的分布位置。  用于绘制一维散点图和箱式图的命令为: 
gra 变量名 , oneway gra 变量名 , oneway box

    所作图形如图 5.4。注意,这里的 oneway 不是选择项,如无该项,则 Stata 绘制的是直方图。 所指定的变量不超过 6 个。各变量的取值范围参差太大时,看不出效果。  六、 二维箱式图的制作 二维箱式图绘制两个变量(一个是纵轴变量, 一个是横轴变量)的箱式图, 分别平行于对应的轴。   用于绘制二维箱式图的命令是在为: 
gra y变量 x 变量, twoway box

注意,这里的 twoway 不是选择项,如无该项,则 Stata 给出的是两个单变量的箱式图。其余选择 项与二维散点图的选择项相同。  例 5.6   将例 5.2 的散点图上加上箱式图。命令为: 
. gra y x, two box s(T) ylab xlab(11,12,13,14,15,16) gap(4)  

                       
图 5.18    例 5.2 两组的二维散点图与箱式图 

  §5.3  怎样使图形更美观 
 

54

? 第五章

Stata 的绘图功能

Stata 画出的图比其它统计软件画出的图精美,且可直接被 WINDOWS 中的画笔及 WORD 等 软件直接调用。但要精益求精,使画出的图形更美观,还有几个技巧。现分述如下:  ⑴  调整散点的大小,使画出的散点大小适中。这可在 Stata 的菜单中选 Preferences ,  再选  Graph 中的 Magnifications 。见下图: 

这时,Stata 弹出 Magnifications 菜单: 

用户可在这个菜单中对各种散点的符号的大小进行调整。 各散点的大小 Stata 默认值为 100, 要 使散点变大,只需增加各散点的取值,一般取 150~200。要使散点变小,只需减少各散点的取值。 选定后,按 OK 即可。 ⑵ 调整图形中文字的大小。 4.0 以下版本中, Stata 图形中显示的数字和文字实际上是一种图形, 且不能被文字或图形处理软件所识别;5.0 以上版本中,Stata 图形中显示的数字及文字与操作系统 中的文字一致。要使图形中文字的大小适中,可通过命令 set text 来定义。 set text #  这里#表示取值。Stata 默认值为 100,要使文字变大,则需加大其取值,一般取 150 左右。如:
 

现代医学统计方法与 Stata 应用

? 55

set text 150。这一命令用在 graph 命令之前,输入该命令后的所有作图命令的文字都将变大。 直到再用该命令对文字的大小进行修改。 ⑶ 调整打印出来的图形大小。在 DOS 版本的 Stata 中,用命令 gphdot 可将图形打印出来; 在 WINDOWS 版本的 Stata 中可在菜单中选 Print Graph , 将图形印出来,也可在命令行输入 DOS 命令 gphdot。但直接打印的图形较大, 要使打印出的图形大小适中,须增加一些选择项。命令如下:
gphdot 文件名 [/r#] [/rx#] [/ry#] [/n]

其中: 
/r#      /*  定义打印图的大小,同时缩小或放大长度与宽度。默认为 100。#的取值越大,打印出的图               就越大,反之亦然。  /rx#     /*  定义打印图的宽度。默认为 100。  /ry#     /*  定义打印图的长度。默认为 100。  /n       /*  图的下方不打印 stata 标记。 

⑷ 用 WORD 等软件对图形进行编辑, 如定义线条的粗细、 线型, 改变填充色或填充图案等, 使图形更美观。  

 

56

? 第六章

数值变量资料的统计分析

第六章  数值变量资料的统计分析 
    数值变量资料又称计量资料,通常是指每个观察单位某项指标量的大小,一般具有计量单 位。这类资料按分析的内容一般可分为两种:一种是比较几种处理之间的效应,简单地讲就是 比较各处理组观察值均数、方差的大小;另一种是寻找指标间的关系,即某个(或某些)指标 的取值是否受其它指标的影响。本章主要介绍不同设计类型的数值变量资料的比较。 

§6.1  样本均数与总体均数比较的 t 检验 
t 检验亦称 student's t 检验,主要用于下列三种情况:(1)样本均数与总体均数比较;(2)配对 数值变量资料的比较;(3)两样本均数的比较。 Stata 用于样本均数与总体均数比较的 t 检验的命令是 ttest:
ttest 变量名= #val

这里,#val 表示总体均数。命令中可以选用 if 语句和 in 语句对要分析的内容加一些条件限 制。    对已知样本含量、均数和标准差的资料,欲将其与某总体均数进行比较,Stata 还提供了更 为简洁的命令 ttesti:
ttesti #obs #mean #sd #val

这里,#obs 表示样本含量, #mean 表示样本均数,#sd 表示样本标准差,#val 表示总体均数。   先看一个实例。 例 6.1  10 例男性矽肺患者的血红蛋白(g/dl) 如下:
病例号: 血红蛋白: (x,g/dl) 1 11.3 2 15.0 3 15.0 4 13.5 5 12.8 6 10.0 7 11.0 8 12.0 9 13.0 10 12.3

已知男性健康成人的血红蛋白正常值为 14.02(g/dl) ,问矽肺患者的血红蛋白是否不同于一 般? 算得该 10 例矽肺患者的血红蛋白均数为 12.59(g/dl) ,显然不等于 4.02 。造成这种差别的原 因可能有两种,其一:矽肺患者的血红蛋白确实不同于健康人(本质上的差异);其二:抽样 误差。由于每个人的血红蛋白不尽相同,即使从正常人中抽检 10 个人,所得的样本均数亦不会 恰好等于 14.02 ,这种差别称为抽样误差。只要个体之间存在差异,抽样误差就不可避免,但 抽样误差是有规律的,这种规律是可以被认识和掌握的!欲想知道矽肺患者的血红蛋白均数与 14.02 的差别到底是本质上的差异还是纯粹的抽样误差,需进行假设检验。 假设检验就是首先根据设计和研究目的提出某种假设,然后根据现有资料提供的信息,推 断此假设应当拒绝还是不拒绝。 结合本例,检验假设 H0 是:(所有)矽肺患者的血红蛋白均数=14.02。 然后根据样本的含量

现代医学统计方法与 Stata 应用

? 57

n=10、均数 x =12.59、标准差 s=1.63 构造一反映差别大小的检验统计量 t,如果 H0 成立, 即样本均数与总体均数的差别仅是抽样误差,则这种差别一般不会太大,即│t│值不会太大, 如│t│值很大,超过了事先规定的界值,则就有理由怀疑 H0 的成立。但│t│值与 n 有关,故 将对│t│值的判断改为对概率 P 判断, P 是根据样本均数与总体均数的抽样误差规律(t分布), 由t及 n-1(自由度)求得的,其涵义是:在 H0 成立的条件下,纯粹由抽样得到现有 t这么大的 误差或比t更大的误差, 有多大的可能性或称概率。 显然 P 越小, 越有理由怀疑 H0 的成立, 因 而拒绝 H0 ;而 P 大,就没有理由拒绝 H0 。一般以α =0.05 作为拒绝与不拒绝的界限,α 称为检 验水准。P <α 称差异有显著性,否则称差异无显著性。 这一过程可由 ttest 命令完成。 . input x                  x 
     1.  11.3       2.  15.0           ……      10.  12.3      11.  end 

将数据存入 d:\mydata\ex5-1.dta: . save ex5-1  进行 t 检验: . ttest x=14.02 
  Variable |   Obs        Mean   Std. Dev.       Min        Max  ---------+---------------------------------------------------         x |    10       12.59   1.632619         10         15               Test: mean of x = 14.02                 t-statistic = -2.77 with 9 d.f.                 Prob > |t|  =  0.0218 

运算结果给出了几个基本统计量,有观察数(Obs) ,均数(Mean),标准差(Std.Dev),最小值 (Min),最大值(Max);检验的内容(Test),即假设检验 H0 ;t 值(t-statistics);自由度(d.f.)及检验 概率(Prob > |t|)。本例 t=-2.77,P =0.0218<0.05。故按α=0.05 水准,拒绝 H0 ,可认为矽肺患 者的血红蛋白含量低于正常值 14.02(g/dl) 。 如已知该资料样本含量#obs=10,均数#mean=12.59,标准差#sd=1.632629,欲将其与总体均 数#val=14.02 比较,可用下列命令 ttesti: . ttesti 10 12.59 1.632619 14.02               
                                                   Variable |      Obs        Mean   Std. Dev.     ---------+---------------------------------            x |       10       12.59    1.632619                                                    

58

? 第六章

数值变量资料的统计分析

           Ho:  mean = 14.02                                        t = -2.77 with 9 d.f.                    Pr > |t| = 0.0218                   

结果与从原始资料计算是等价的。 注意,ttesti 命令中必需要 4 个数据,且 4 个数据在命令中的顺序不能变,各数据间用空格 分开。

§6.2 两样本均数比较的 t 检验
一、  配对设计t检验  医学研究中常将受试对象配成对子,对每对中的两个受试对象分别给予两种不同的处理, 观察两种处理的结果是否一致,称为配对(设计)研究。有时以同一个受试对象先后给予两种不 同的处理,观察两种处理的结果是否相同,这种配对称为自身配对。配对设计的优点是能消除 或部分消除个体间的差异,使比较的结果更能真实地反映处理的效应。 配对 t 检验首先计算每对结果之差值,再将差值均数与 0 作比较。如两种处理的效应相同, 则差值与 0 没有显著性差异。检验假设 H0 为:两种处理的效应是相同,或总体差值均数为 0。 Stata 用于配对样本 t 检验的命令是 ttest:
ttest 变量 1=变量 2

这里,这里“变量 1”和“变量 2”是成对输入的配对样本。ttest 命令容许使用[if 表达式]和[in 范围]条件限制。 例 6.2  续例 6.1,10 例矽肺患者经克矽平治疗,其血红蛋白(g/dl) 如下:
病 例 号 : 1 11.3 14.0 2 15.0 13.8 3 15.0 14.0 4 13.5 13.5 5 12.8 13.5 6 10.0 12.0 7 11.0 14.7 8 12.0 11.4 9 13.0 13.8 10 12.3 12.0 治疗 前( x 0 ) : 治 疗 后( x 1 ) :

欲了解治疗对血红蛋白含量有无作用,需作配对 t 检验。先清除内存,然后输入数据:
. input x 

                x0      x1  
            1.  11.3  14.0              2.  15.0  13.8                   ……             10.  12.3  12.0             11.  end 

将数据存入 d:\mydata\ex6-2.dta:
. save ex6-2  . ttest x0=x1                                                                                     Variable |      Obs        Mean   Std. Dev.     ---------+---------------------------------           x0 |       10       12.59    1.632619           x1 |       10       13.27    1.080175     ---------+---------------------------------  

现代医学统计方法与 Stata 应用      diff. |       10   -.6799999    1.645735  

? 59

                                         
           Ho:  diff = 0  (paired data)                                                              t = -1.31 with 9 d.f.                                                      Pr > |t| = 0.2237                                                    

本例差值均数为-.68,t=-1.31,自由度为 9,P=0.2237,按α=0.05 水准,尚不能认为治疗 对血红蛋白含量的增加有作用。 按配对设计的思路,上述问题亦可作如下处理:即先求出差值 d,然后对差值 d 进行 t 检 验。具体步骤如下:
    . gen d=x1-x0      . ttest d=0 

这样所得结果相同,请读者自己完成。 注意,这里的两个变量 x1 和 x0 必须成对输入。样本含量必须相等,如有缺省值,则用小 数点表示,但与之对应的记录在计算时被省略。 二、  成组设计t检验  有时无法将受试对象逐个配成对,可将受试对象随机分为两组,每组接受不同的处理,检 验两组的均数,以达到比较的目的。 t 检验要求两样本来自方差相同的正态总体,即各组资料达到或接近正态,两组的方差达 到齐性。如两组资料偏态或方差不齐,则需要对原始数据作变量变换,如变换后仍未达到正态, 可用秩和检验;如未达到方差齐性,则需用 t’检验,或用秩和检验。 Stata 提供了三种资料形式的两样本均数比较的 t 检验的命令,即:
ttest ttest 变量 1=变量 2, unpaired [ unequal welch ] 变量, by( 分组变量) [unequal welch]

ttesti #obs1 #mean1 #sd1 #obs2 #mean2 #sd2 [, unequal welch ]

这里:    第一个命令的数据格式是将两组数据用两个变量“变量 1”和“变量 2”分别输入,如两组 的样本含量不等,则先输入样本含量大的变量,再输入样本含量少的变量,不足部分,Stata 将 自动生成缺省值(用小数点表示)。也可同时输入,缺失部分用小数点表示。unpaired 是必选项, 如不选,则 Stata 将作配对 t 检验。 第二个命令的数据格式是将两组数据用一个“变量”输入,再用另一个分组变量,以区分 两组资料,如用 1 表示第 1 组资料,用 2 表示第 2 组资料。by(分组变量)是必选项。 第三个命令是针对已知两组资料的样本含量、均数和标准差的资料进行比较的简洁命令。 这里有 6 个数据,#obs 表示样本含量,#mean 表示样本均数, #sd 表示样本标准差, l 表示第 1 组,2 表示第 2 组。 第一个命令和第二个命令允许加[权数]及[in 范围] 和[if 表达式]条件。 选择项 unequal 表示假设两组方差不齐,如不选表示假设两组方差达到齐性。 选择项 welch 表示用 Welch 方法对自由度进行校正,如不选此项,则用 Satterthwaite 方法 对自由度进行校正。welch 选择项只有在选择了 unequal 才有效。 例 6.3 分别测得 14 例老年人慢性支气管炎病人及 11 例正常人的尿中 17 酮类固醇排出量

60

? 第六章

数值变量资料的统计分析

(mg/dl) 如下,试比较两组的均数有无差别。
病人: 2.90 健康人: 5.18 5.41 8.79 5.48 3.14 4.60 6.46 4.03 3.72 5.10 6.64 4.97 5.60 4.24 4.57 4.36 7.71 2.72 4.99 2.37 4.01 2.09 7.10 5.92

这里用三种不同的数据格式对资料进行分析,所得结果等价。 (1) 用两个变量表示两组资料:
.input x1 x2      1.  2.90   5.18      2.  5.41   8.79          ……      11. 2.37  4.01      12. 2.09  .      13. 7.10  .      14. 5.92  .      15  end 

将数据存入文件 d:\mydata\ex6-3.dta。t 检验的命令为:
. ttest x1=x2 , unpaired                           Variable |      Obs        Mean   Std. Dev.      ---------+---------------------------------            x1 |       14    4.377857    1.449892            x2 |       11    5.528182    1.735401      ---------+---------------------------------      combined |       25       4.884    1.653227               Ho:  mean(x) = mean(y)  (assuming equal variances)                         t = -1.81 with 23 d.f.                 Pr > |t| = 0.0839             

t=-1.81,自由度为 23 ,P=0.0839>0.05,故按α=0.05 水准,尚不能认为老年慢性支气管 炎病人与正常人的尿中 17 酮类固醇排出量(mg/dl) 有何不同。 命令中无 unequal 选择项,故 Stata 自动假设两组方差齐(assuming equal variances)。如果两 组方差不齐,则可用下列命令进行 t' 检验。
. ttest x1=x2,unp une w                       Variable |      Obs        Mean   Std. Dev.      ---------+---------------------------------           x1 |       14    4.377857    1.449892            x2 |       11    5.528182    1.735401      ---------+---------------------------------     combined |       25       4.884                                            Ho:  mean(x) = mean(y)  (assuming unequal variances)                        t = -1.77 with 21.19 d.f.                                  Pr > |t| = 0.0917                                 

这时,Stata 告知用户,是按方差不齐计算的(assuming unequal variances)。因选择了 welch 选择项(w 是缩写),Stata 按 Welch 方法对自由度进行校正。所得自由度是非整数。本例自由度 为 21.19。不选 w ,则 Stata 按 Satterthwaite 方法对自由度进行校正。 . ttest x1=x2,unp une                      

现代医学统计方法与 Stata 应用   Variable |      Obs        Mean   Std. Dev.     ---------+---------------------------------           x1 |       14    4.377857    1.449892           x2 |       11    5.528182    1.735401     ---------+---------------------------------     combined |       25       4.884                                                                           Ho:  mean(x) = mean(y)  (assuming unequal variances)                        t = -1.77 with 19.47 d.f.                                  Pr > |t| = 0.0929                                 

? 61

    按 Satterthwaite 方法所得自由度为 19.47,而按 Welch 方法所得自由度为 21.19。本例结论 相同。  (2) 用一组变量表示观察值,用另一个分组变量表示两个不同的组。数据输入格式如下: . input y group 
             y      group    1. 2.90 1     2. 5.41 1        ……   13. 7.10 1    14. 5.95 2        ……   25. 4.01 2 


推荐相关:

stata常见问题及解决办法

如何用 stata 对资料作一阶差分 tsset t(for time series) tsset id t (for panel data) gen dx = D.x /*一阶差分*/ gen d2x = D2.x /*二阶差...


STATA速成

stata 课件 课件\stata 课件 课件\merge1”, clear 桌面 list use “C:\Documents and Settings\Administrator\桌面 桌面\sas 和 stata 课件 课件\stata 课件 ...


Stata教程

循环 §1.2 Stata 的界面 2 Windows 版本的 Stata 的界面上有一级菜单行,二级菜单窗口,命令窗口,结果窗口,图形窗口,变量名 窗口,已执行过的命令窗口,帮助窗口...


stata12毕设速成手册

stata12毕设速成手册_计算机软件及应用_IT/计算机_专业资料。针对毕设,stata12 速成手册随便网上一搜就好多 Stata 使用说明,但大家估计都不想细细看,所以我按自己...


stata使用手册

STATA 基本入门前言 STATA 是一个十分好用而且简单的统计套装软体,透过轻松的资料输入方 式,而且简单的指令,即可执行一般在计量经济学上常用的计量模型.除了计量 ...


Stata 操作2

::第一部分:: Stata 操作 *-> 浏览资料 *------------------* =本节命令= * ===========================================...


stata 指令(1)

? use 与 save 是一对调用 STATA 系统数据文件和以 STATA 系统格 式 存盘的命令; infile 和 outfile 也是一对调用外部文本数据文件 和以文本文件格式存盘的...


Stata命令

我常用到的stata命令集 11页 免费S​t​a​t​a​命​令 暂无评价|0人阅读|0次下载|举报文档 很​好​的​入​门​资​料...


Stata软件参数

Stata软件参数_数学_自然科学_专业资料。Stata 统计分析软件 Stata 是一套完整的、集成的统计分析软件包,可以满足您用于数据分析、数据管理和 图形的所有需要,尤其是...


stata基本命令

stata基本命令_经济学_高等教育_教育专区。stata 软件应用 stata 基本命令+实例+数据+结果--必看,经典 2009-08-25 12:29 Stata 常用命令 save 命令 File&#...

网站首页 | 网站地图
All rights reserved Powered by 学霸学习网 www.tceic.com
copyright ©right 2010-2021。
文档资料库内容来自网络,如有侵犯请联系客服。zhit325@126.com