第五章 定量资料的统计描述和t、u检验
从本章开始,我们将正式开始使用 SAS解决我们的统计问题。从前面的几章可知,SAS的主要功能是由不同的程序步来体现的。因此在以后的各章中,我们将对每种问题重点介绍一些常用的程序步,以及它们的输出结果的解释。
对于定量资料的统计描述和简单推断,SAS提供了三个强有力的程序步,它们是:
- UNIVARIATE
过程 提供单个变量的详细描述和对其分布类型的检验。
- MEANS
过程 提供单个或多个变量的简单描述,对于多个变量,它的输出格式紧凑,便于阅读。
- TTEST
过程 对变量进行t/u检验。
§ 5.1 引 例
例 5.1 文本文件“C:\USER\WTLI1_1.DAT”中已存入某市110名7岁男子童的身高资料(cm) ,请计算均数、标准差s、变异系数CV(卫统第三版p6例2.1)。
解:该题应首先用数据步建立一个数据集,然后调用 UNIVARIATE过程或MEANS过程来求出所需要的统计量。具体的程序如下:
① 设定数据库环境:
LIBNAME A 'C:\USER';
② 数据步,建立数据集:
DATA A.WTLI1_1; |
INFILE 'C:\USER\WTLI1_1.DAT'; |
INPUT X @@; |
RUN; |
③ UNIVARIATE或MEANS过程,求出所需要的统计量:
PROC UNIVARIATE DATA=A.WTLI1_1; |
PROC MEANS DATA=A.WTLI1_1
N MEAN STD CV ; |
VAR X; |
VAR X; |
RUN; |
RUN; |
例 5.2 某医生测得18例慢支炎患者与16例健康人的尿17酮类固醇排出量 (mg/dl)分别为X1和X2,问两者均数是否不同(医统第二版P19例2.17)?
解:这是成组设计的两样本均数比较的 t检验,程序应首先建立数据集,然后调用TTEST过程进行检验,在检验的同时也可以得到两个样本的简单描述。
① 设定数据库环境:
LIBNAME A 'C:\USER';
② 数据步,建立数据集,这里采用直接输入数据的方法:
DATA A.YTLI2_17; |
INPUT GROUP VALUE @@; |
CARDS; |
1 3.14 1 5.83 1 7.35 1 4.62 1 4.05 1 5.08 1 4.98 1 4.22 1 4.35 1 2.35 |
1 2.89 1 2.16 1 5.55 1 5.94 1 4.4 1 5.35 1 3.8 1 4.12 |
2 4.12 2 7.89 2 3.24 2 6.36 2 3.48 2 6.74 2 4.67 2 7.38 2 4.95 2 4.08 |
2 5.34 2 4.27 2 6.54 2 4.62 2 5.92 2 5.18 |
; |
RUN; |
③ TTEST过程,进行两样本的t检验。
PROC TTEST DATA=A.YTLI2_17; |
VAR VALUE; |
CLASS GROUP; |
RUN; |
§ 5.2 UNIVARIATE过程
Univariate 过程对数值变量给出比较详细的变量分布的描述,其中包括:
- 变量的极端值。
- 常用的百分位数,包括四分位数和中位数。
- 用几个散点图描绘变量的分布。
- 频数表。
- 确定数据为正态分布的检验。
5.2.1 语法格式
Univariate 过程的语法格式如下:
PROC UNIVARIATE [ DATA= <数据集名> [选项] ]; |
指定要分析的数据集名及选项 |
[ VAR <变量名列> ; |
指定要分析的变量名列 |
BY <变量名列> ; |
按变量名列分组统计,要求数据集已按该变量名列排序 |
FREQ <变量名> ; |
表明该变量为分析变量的频数 |
WEIGHT <变量名> ; |
表明分析变量在统计时要按该变量权重 |
ID <变量名> ; |
输出时加上该变量作为索引 |
OUTPUT OUT= <数据集名> |
指定统计量的输出数据集名 |
关键字= <新变量名列>... |
指定统计量对应的新变量名 |
pctlpts=<百分位数, ...> |
指定需要的百分位数 |
pctlpre=<新变量名列>] ; |
指定所需百分位数对应的输出变量名 |
如果省略所有非必需的语句和选项,则 UNIVARIATE过程按默认情况输出全部变量的全部常用统计量。
5.2.2 语法说明
【选项】
Univariate 过程常用的选项如下:
- NOPRINT
禁止统计报告在OUTPUT视窗中输出
- PLOT
绘出茎叶图、箱式图和正态概率图
- FREQ
给出频数表
- NORMAL
对变量进行正态性检验
【关键字】
SAS 中用关键字来指定所需要的统计量,事实上结果输出中用的就是各种关键字,常用的关键字有:
N MEAN STD(标准误) CV SUM VAR(方差) RANG
百分位数描述 MIN P1 P5 P10 Q1 MEDIAN Q3 P90 P95 P99 MAX
与假设检验有关的统计量 STDMEAN(标准误) T
5.2.3 结果解释
在默认的情况时, Univariate过程会输出绝大部分统计量,此时的输出结果如下:Variable=变量名 变量标签 Moments 和矩有关的统计量 Quantiles(Def=5) 分位间距统计量 N 样本量 Sum Wgts 权重总和 100% Max 最大值 99% 99%百分位数
Mean 均数 Sum 总和 75% Q3 75%百分位数 95% 95%百分位数
Std Dev 标准差 Variance 方差 50% Med 50%百分位数 90% 90%百分位数
Skewness 偏度系数 Kurtosis 峰度系数 25% Q1 25%百分位数 10% 10%百分位数
USS 未校正平方和 CSS 校正平方和 0% Min 最小值 5% 5%百分位数
CV 变异系数 Std Mean 标准化均数 1% 1%百分位数
T:Mean=0 变量总体均数为0的t检验 Pr>|T| t检验的p值 Range 全距
Num ^= 0 变量值非0的例数 Num > 0 变量值大于0的例数 Q3-Q1 四分位间距
M(Sign) 变量总体均数为0的符号检验 Pr>=|M| 符号检验的p值 Mode 众数
Sgn Rank 变量总体均数为0的秩和检验 Pr>=|S| 秩和检验的p值 Extremes 极端值统计 Lowest Obs Highest Obs
老 幺 (观察值序号) 五大值(观察值序号)
次小值 (观察值序号) 四大值(观察值序号)
三小值 (观察值序号) 三大值(观察值序号)
四小值 (观察值序号) 次大值(观察值序号)
五小值 (观察值序号) 大哥大(观察值序号)
5.2.4 应用实例
例 5.3 某地101例健康男子血清总胆固醇值测定结果已存入文本文件“c:\user\WT1_1.dat”中,请绘制直方图,计算均数、标准差s、变异系数CV、中位数M、p2.5和p97.5(卫统p233 1.1题)。
解: UNIVARIATE过程的默认输出中并不给出p2.5和p97.5,因此程序中要加以相应修改,最后在OUTPUT视窗中只会输出所需的几个统计量,具体程序如下:
libname a 'c:\user'; |
指定c:\user文件夹为数据库a |
data a.wt1_1; |
数据步开始,指定要建立的数据集为a库的wt1_1 |
infile 'c:\user\wt1_1.dat'; |
采用外部文件读入方式,文件名为c:\user\WT1_1.dat |
input x @@; |
输入的变量为x,采用连续输入的格式 |
proc gchart data=a.wt1_1; |
调用绘图程序步gchart,所用数据集为a.wt1_1 |
vbar x ; |
绘出竖直条图,用于绘图的变量为x |
proc univariate data=a.wt1_1 noprint; |
调用程序步univariate,并且禁止在OUTPUT视窗中输出 |
var x; |
要分析的变量为x |
output out=temp |
指定输出数据集为work.temp, |
n=n mean=xbar std=s cv=cv median=m |
将n、mean、std、cv、median按指定变量名存入 |
pctlpts=2.5,97.5 pctlpre=per; |
指定输出p2.5和p97.5,其输出变量名以per开头。 |
proc print data=temp; |
将数据集work.temp的内容打印输出 |
run; |
开始运行以上程序 |
例 5.4 50例链球菌咽峡炎患者的潜伏期如下,计算其均数、中位数和几何均数(卫统p233 1.3题)。
12~ |
24~ |
36~ |
48~ |
60~ |
72~ |
84~ |
96~ |
108~120 |
1 |
7 |
11 |
11 |
7 |
5 |
4 |
2 |
2 |
解:由于几何均数无法直接得到,因此将数据集加以对数变换,求出均数后再行反对数变换得到几何均数,程序如下:
libname a 'c:\user'; |
指定c:\user文件夹为数据库a |
data a.wt1_3; |
数据步开始,指定要建立的数据集为a库的wt1_3 |
input x f @@; |
输入的变量为x和f,采用连续输入的格式 |
x=x+6; |
将变量x的值更正到每个组段的组中值处 |
logx=log(x); |
定义新变量logx为变量x的自然对数,用于算出几何均数 |
cards; |
数据块开始 |
12 1 24 7 36 11 48 11 60 7 72 5 84 4 96 2 106 2 |
数据块 |
; |
数据块结束 |
proc print; |
将数据集a.wt1_3的内容打印输出 |
proc univariate data=a.wt1_3 noprint; |
调用程序步univariate,并且禁止在OUTPUT视窗中输出 |
var x logx; |
要分析的变量为x和logx |
freq f; |
指定变量f代表分析变量x的频数 |
output out=temp n=n mean=xbar logxmean median=m ; |
输出数据集和统计量的定义 |
data temp2; |
数据步开始,指定要建立的数据集为work.temp2 |
set temp; |
让work.temp2继承work.tmep的全部数据 |
g=exp(logxmean); |
产生新变量g,它等于elogxmean |
drop logxmean; |
在work.temp2中删除临时变量logxmean |
proc print data=temp2; |
输出数据集work.temp2中的数据 |
run; |
开始运行以上程序 |
请注意,这里UNIVARIATE过程有两个分析变量X和LOGX,因此在OUTPUT语句中MEAN=后跟了两个变量名,它们分别存储两个变量的均数,而其余的关键字后只有一个变量名,则它们只存储分析变量序列的第一个变量X的统计结果。
§ 5.3 MEANS过程
Means 过程提供单个或多个变量的简单描述。和Univariate过程相比,它更倾向于描述已经明确样本所在总体符合正态分布的变量,因此它不提供百分位数,但可以提供95%可信区间。同时在多个变量输出时,它的输出格式紧凑,便于阅读。
5.3.1 语法格式
PROC MEANS [ DATA= <数据集名> [选项] |
指定要分析的数据集名及一些选项 |
[统计量关键字列表] ] ; |
列出需要的统计量 |
[VAR <变量名列>; |
要分析的变量名列 |
BY <变量名列>; |
按变量名列分组统计,要求数据集已按变量名列排序 |
CLASS <变量名列>; |
按变量名列分组统计,不要求数据集排序 |
FREQ <变量名>; |
表明该变量为分析变量的频数 |
WEIGHT <变量名>; |
表明分析变量在统计时要按该变量权重 |
ID <变量名列>; |
输出时加上该变量作为索引 |
OUTPUT <OUT= 数据集名> |
指定统计量的输出数据集名 |
关键字= <新变量名列>... ] ; |
指定统计量对应的新变量名 |
5.3.2 语法说明
【选项】
Means 过程常用的选项如下:
- NOPRINT
禁止统计报告在OUTPUT视窗中输出
- MAXDEC=n
给出列表输出的最大小数位数,缺省值为2
【统计量关键字】
MEANS 过程中常用的统计量关键字有:
N MEAN STD CV SUM VAR RANG MIN MAX
与假设检验有关的统计量 STDERR(标准误) T PRT(与t对应的p值) LCLM(可信区间下限) UCLM(可信区间上限)
注意Means过程中标准误的关键字是STDERR,而Univariate过程中为STDMEAN,另外LCLM和UCLM这两个关键字也是Univariate过程所没有的。
5.3.3 结果解释
和 Univariate过程不同,MEANS过程在默认情况下只输出样本量、均数、标准差、最小值和最大值,如例5.1的数据,如果MEANS过程不加任何选项,则输出如下: Analysis Variable : X 分析变量名为X N Mean Std Dev Minimum Maximum
---------------------------------------------------------------
110 119.7272727 4.7413254 108.2000000 132.5000000
---------------------------------------------------------------
可见 Means过程的输出结构极为紧凑。
5.3.4 应用实例
例 5.5 给出例5.1的均数、标准差s、变异系数CV和95%可信区间,并检验其总体均数是否为0(卫统p233 1.1题)。
解:如果数据集 a.wt1_1已经建立,则程序如下:
proc means data=a.wt1_1 n mean std cv lclm uclm t prt ; |
var x; |
run; |
§ 5.4 TTEST过程
顾名思义, TTEST过程就是用于进行两样本均数的比较,它给出两总体方差齐和不齐时的检验结果,并同时做方差齐性检验。综合两者的结果,即可做出判断。
事实上,ttest过程的功能非常有限,只能做一般的两样本t检验,对于按频数表格式输入的资料,我们只能用以后要介绍的ANOVA等过程来分析。
5.4.1 语法格式
PROC TTEST [ DATA= <数据集名> |
指定要分析的数据集名 |
[COCHRAN] ] ; |
要求在方差不齐时做COCHRAN近似 |
CLASS <变量名>; |
必需,指定一个两分类的分组变量 |
[ VAR <变量名列>; |
指定要检验的变量名列 |
BY <变量名列> ] ; |
按变量名列分组统计 |
5.4.2 结果解释
以例 5.2的TTEST过程为例,它的输出结果如下: TTEST PROCEDURE Variable: VALUE 分析变量名为VALUE GROUP N Mean Std Dev Std Error Variances T DF Prob>|T|
样本量 均数 标准差 标准误 方差 统计量t值 自由度 p值
------------------------------------------------ ---------------------------------
1 18 4.45444444 1.32446314 0.31217896 Unequal -1.8132 31.2 0.0794
2 16 5.29875000 1.38200760 0.34550190 Equal -1.8179 32.0 0.0785
For H0: Variances are equal, F' = 1.09 DF = (15,17) Prob>F' = 0.8589
可见该结果分为三大部分:第一部分为两组各种描述统计量的值,第二部分分别给出两组所在总体方差齐和方差不齐时的 t检验结果,第三部分为方差齐性检验,因此该过程一共进行了三个假设检验。对于无效假设H0:两总体方差齐的检验结果为F' = 1.09,DF = (15,17),p = 0.8589,可见在本例中方差是齐的,从而应选用方差齐时的t检验结果,即t= -1.8179,ν=32,p=0.0785,按α=0.05水准,不拒绝H0,尚不能认为慢支炎患者与健康人的尿17酮类固醇排出量不同。
5.4.3 应用实例
例 5.6 某医院对9例慢性苯中毒患者用中草药一号抗苯一号治疗,得下列白细胞总数(109/L),问该药是否对白细胞总数有影响(卫统p225 2.3题)?
病人号 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
治疗前 |
6.0 |
4.5 |
5.0 |
3.4 |
7.0 |
3.8 |
6.0 |
3.5 |
4.3 |
治疗后 |
4.2 |
5.4 |
6.3 |
3.8 |
4.4 |
4.0 |
5.9 |
8.0 |
5.0 |
解:该题为样本差值均数和总体均数为 0比较的t检验,TTEST过程无法完成。这里用MEANS过程来处理,程序如下:
libname a 'c:\user'; |
data a.wt2_3; |
input x y @@; |
tempvar=x-y; |
用新变量tempvar来记录同一病人治疗前后白细胞的差值 |
cards; |
6.0 4.2 4.8 5.4 5.0 6.3 3.4 3.8 |
3.4 3.8 7.0 4.4 3.8 4.0 6.0 5.9 |
8.0 5.0 |
; |
proc means n mean std |
stderr t prt ; |
利用Means过程检验差值总体均数是否为0 |
var tempvar; |
要分析的变量为tempvar |
run; |
开始运行程序 |
例 5.7 将钩体病人的血清分别用标准株和水生株做凝溶实验,测得稀释倍数如下。问两组的平均效价有无区别(卫统p226 2.5题)。
标准株: 100 200 400 400 400 400 800 1600 1600 1600 3200
水生株: 100 100 100 200 200 200 200 400 400
解:程序如下:
libname a 'c:\user'; |
data a.wt2_5; |
input group x @@; |
logx=log(x); |
将数据做自然对数转换 |
cards; |
1 100 1 200 1 400 1 400 1 400 1 400 |
1 800 1 1600 1 1600 1 1600 1 3200 |
2 100 2 100 2 100 2 200 2 200 2 200 |
2 200 2 400 2 400 |
; |
proc print; |
proc ttest ; |
调用ttest过程进行t检验 |
class group; |
分组变量为group |
var logx; |
要统计的变量为logx |
run; |
第五章 多个率比较的SAS编程实现
两个率或多个率的比较,我们非常熟悉的就是采用卡方检验的方法。除此之外,在特定条件下还可根据正态近似的原则采用u检验的方法进行分析。在SAS中,卡方检验的功能包含在freq过程之中,下面我们先熟悉一下freq过程的基本内容和功能。
一、freq过程的语句和功能
freq过程包含在SAS的BASE模块中,它可以执行描述性统计以及假设检验的功能,能产生从1维到n维的表格,即频数表以及列联表。对于单因素的频数表,freq过程可以进行比率之间的比较;对于列联表资料(两个或更多因素),它可以对两因素间的关系进行统计学推断,必要时可以按照某些因素进行分层分析。对于两因素关系的统计学分析,freq过程不仅可以检验关系的存在与否,还可以给出这种关系的强度。
下表(表5.1)是freq过程对于列联表资料可以进行的分析以及计算的统计量。
表5.1
卡方检验; |
关联性的推断及其强度测量; |
2×2表资料危险度计算以及危险度差别的检验; |
2×2表资料OR值以及相对危险度的计算; |
趋势检验; |
一致性检验; |
Cochran-Mantel-Haenszel 统计量计算。 |
1. freq过程的一般格式
freq过程的一般格式如下所示。
PROC FREQ <选项列表>; |
BY <DESCENDING> 变量名-1 <...<DESCENDING> 变量名-n> <NOTSORTED>; |
EXACT 统计量关键字 </ 选项列表>; |
OUTPUT 统计量关键字 <OUT=SAS-data-set>; |
TABLES 因素表达式 </ 选项列表>; |
TEST 统计量关键字; |
WEIGHT 变量名; |
RUN; |
QUIT; |
表面上看起来freq过程的语句并不复杂,但它可实现很多复杂的功能。下面就freq过程中特有的语句和选项加以简要说明。
2. freq过程中各语句及选项的格式及功能
2.1 proc freq语句用以调用freq过程,标志freq过程的开始,其后的选项除和其它过程相同的一般性的控制功能外,没有什么特别之处,我们一般也不太用到。
2.2 by语句和以前的内容完全相同,这里不再说明。
2.3 Exact语句用以控制对精确概率的计算以及对指定统计量进行可信限估计。对于以下假设检验,freq过程可以计算其精确P值:拟合优度卡方检验(chi-square goodness-of-fit)、Pearson卡方检验(Pearson chi-square)、似然比卡方检验(likelihood-ratio chi-square)、 Mantel-Haenszel卡方检验(Mantel-Haenszel chi-square)、Fisher’s确切概率检验(Fisher's exact test)、Jonckheere-Terpstra检验(Jonckheere-Terpstra test)、Cochran-Armitage 趋势检验(Cochran-Armitage test for trend)以及McNemar's检验(McNemar's test for two-way tables)
2.4 Output语句大家已很熟悉,它用于将结果数据输出到指定的数据集。
2.5 Tables语句在freq过程中算是非常关键的语句,它用以指定所要分析的因素如何构成列联表,并在选项中指定所要计算的统计量。其中的因素表达式就是列联表的构成方式,如果只有一个因素,就将该因素的变量名作为表达式;如果因素有两个或以上,各因素之间以星号——“*”相连。这里大家要明确一点,SAS对于两个以上因素组成的表达式,将排在最后的两个变量作为列联表的行和列,而其它排在前面的因素则作为分层因素对待。比如对于表达式:A*B*C*D,SAS绘制出k(等于A、B两因素水平数的乘积)个交叉表,表格的行因素为C,列因素为D。
在同一个tables语句中,你可以指定多个因素表达式以完成多个交叉表的绘制。灵活运用圆括号的分组语法可达到此目的,具体方法如以下表格(表5.2)中显示的例子。
表5.2 多表格表达式示例
Tables语句的选项主要用以指定所要进行的具体统计分析方式,如:agree、 all、 chisq、 alpha、 fisher、 trend等等,分别指定SAS进行不同的统计计算。
2.6 test语句用以指定SAS对给定的统计量进行近似检验,此语句的有效性需要相应的tables语句选项来保证。
2.7 weight语句以前已经讨论过,这里的完全一样。
对于freq过程大家已经有了一个大概的了解,下面我们用实例来演示freq过程在各种情况下处理相应资料的操作方法。
二、freq过程对各种类型计数资料处理操作方法
1. 两个率比较的卡方检验
例5-1 一项治疗糖尿病的临床试验中,将268名患者随机分为两组,一组204人服用盐酸苯乙双胍,死于心血管病的有26人,另一组64人服用安慰剂,死于心血管病的有2人,请分析两种疗法的心血管病病死率有无差异?
此例为典型的四格表资料,是我们最乐意用卡方检验进行分析的数据形式,非常简单的几条语句就可完成对数据的分析。
编制程序如下:
libname a 'e:\data\'; |
data a.case5_1; |
input treat outcome number; |
datalines; |
1 1 178 |
1 2 26 |
2 1 62 |
2 2 2 |
; |
proc freq; |
weight number; |
tables treat*outcome/chisq; |
run;quit; |
此处treat代表不同的治疗药物,1表示服用盐酸苯乙双胍,2表示服用安慰剂;outcome代表患者的结局(死亡与否),1表示生存,2表示死于心血管病,number则表示患者的人数。Tables语句后的chisq选项指示SAS进行卡方统计量的计算。
运行上述程序,结果如下。
The SAS System 20:29 Wednesday, November 27, 2002 5
The FREQ Procedure
Table of treat by outcome
treat outcome
Frequency|
Percent |
Row Pct |
Col Pct | 1| 2| Total
---------+--------+--------+
1 | 178 | 26 | 204
| 66.42 | 9.70 | 76.12
| 87.25 | 12.75 |
| 74.17 | 92.86 |
---------+--------+--------+
2 | 62 | 2 | 64
| 23.13 | 0.75 | 23.88
| 96.88 | 3.13 |
| 25.83 | 7.14 |
---------+--------+--------+
Total 240 28 268
89.55 10.45 100.00
The SAS System 20:29 Wednesday, November 27, 2002 6
The FREQ Procedure
Statistics for Table of treat by outcome
Statistic DF Value Prob
------------------------------------------------------
Chi-Square 1 4.8188 0.0282
Likelihood Ratio Chi-Square 1 6.0021 0.0143
Continuity Adj. Chi-Square 1 3.8454 0.0499
Mantel-Haenszel Chi-Square 1 4.8008 0.0284
Phi Coefficient -0.1341
Contingency Coefficient 0.1329
Cramer's V -0.1341
Fisher's Exact Test
----------------------------------
Cell (1,1) Frequency (F) 178
Left-sided Pr <= F 0.0177
Right-sided Pr >= F 0.9967
Table Probability (P) 0.0144
Two-sided Pr <= P 0.0330
Sample Size = 268
结果给出的内容很是详细,第一部分是四格表的内容,每一个格子内给出四项内容,分别为频数、百分比、行百分比以及列百分比。第二部分为卡方检验的结果,SAS在默认状态下即给出此若干项统计量的结果以及相应的概率,具体的含义大家从字面上就可看出来,这里我不再多说。最后,SAS还给出fisher精确概率的计算结果,提供给我们更多的选择。
对于病例对照研究,可在tables语句后添加选项‘cmh’,SAS即会给出“Cochran-Mantel-haenszel”统计量的结果,以及相对危险度、比数比等重要指标。如果资料为1:1配对资料,即四格表中数据为不同组合的对子数,则需要采用McNemar检验,此时只需在tables语句后添加选项‘agree’,或添加语句——“exact mcnem;”即可。
2. R*C表资料的卡方检验
例5-2 对1135例绝经后出血的妇女进行病理分析,结果见表5.3,请分析病变类型是否与年龄有关。
表5.3 不同年龄妇女绝经后出血的病变类型
年龄组/岁 |
病变类型,例数(百分比) |
合计 |
功能性 |
恶性 |
良性 |
≤50 |
60(44.4) |
16(11.9) |
59(43.7) |
135 |
51~ |
208(33.3) |
111(17.8) |
306(49.0) |
625 |
61~ |
66(25.0) |
79(29.2) |
119(45.1) |
264 |
71~ |
21(18.9) |
47(42.3) |
43(38.7) |
111 |
合计 |
355(31.3) |
253(22.3) |
527(46.4) |
1135 |
此例为4*3表资料,对于年龄和病变类型两个属性间的独立性检验,完全可以使用和前述四格表资料分析方法相同的pearson卡方检验,程序的步骤和内容也是基本相同的。
对此例资料进行分析的程序如下:
libname a 'e:\data\'; |
data a.case5_2; |
do age=1 to 4; |
do pathtype=1 to 3; |
input count@@; |
output; |
end; |
end; |
datalines; |
60 16 59 208 111 306 |
66 79 119 21 47 43 |
; |
run; |
proc freq; |
tables age*pathtype/chisq; |
weight count; |
run; |
quit; |
大家可以看到,和上例的程序相比,此例并无多少差异,SAS对于交叉表形式的计数资料,进行卡方检验的程序是完全相同的。其不同的地方是根据我们对资料分析需要的不同而有所区别,比如我们对于线性趋势的检验一般只针对R*C表资料。
提交以上程序,结果如下。
The SAS System 20:54 Thursday, November 28, 2002 26
The FREQ Procedure
Table of age by pathtype
age pathtype
Frequency|
Percent |
Row Pct |
Col Pct | 1| 2| 3| Total
---------+--------+--------+--------+
1 | 60 | 16 | 59 | 135
| 5.29 | 1.41 | 5.20 | 11.89
| 44.44 | 11.85 | 43.70 |
| 16.90 | 6.32 | 11.20 |
---------+--------+--------+--------+
2 | 208 | 111 | 306 | 625
| 18.33 | 9.78 | 26.96 | 55.07
| 33.28 | 17.76 | 48.96 |
| 58.59 | 43.87 | 58.06 |
---------+--------+--------+--------+
3 | 66 | 79 | 119 | 264
| 5.81 | 6.96 | 10.48 | 23.26
| 25.00 | 29.92 | 45.08 |
| 18.59 | 31.23 | 22.58 |
---------+--------+--------+--------+
4 | 21 | 47 | 43 | 111
| 1.85 | 4.14 | 3.79 | 9.78
| 18.92 | 42.34 | 38.74 |
| 5.92 | 18.58 | 8.16 |
---------+--------+--------+--------+
Total 355 253 527 1135
31.28 22.29 46.43 100.00
The SAS System 20:54 Thursday, November 28, 2002 28
The FREQ Procedure
Statistics for Table of age by pathtype
Statistic DF Value Prob
------------------------------------------------------
Chi-Square 6 58.9049 <.0001
Likelihood Ratio Chi-Square 6 56.1468 <.0001
Mantel-Haenszel Chi-Square 1 3.6219 0.0570
Phi Coefficient 0.2278
Contingency Coefficient 0.2221
Cramer's V 0.1611
Sample Size = 1135
结果也和例5-1基本相同,有所不同的是此处没有经连续性校正的卡方值(这里不需要校正),也没有自动给出fisher精确概率值。
在得出两因素不相互独立的结论后,可进一步对因素的各水平进行两两之间的差异检验,这就涉及到R*C表的拆分问题,关于此内容统计学教科书上多数都有介绍,感兴趣的可以自己研究一下。
本章关于两个率和多个率的比较问题就先介绍这么些内容,下一章我们将讨论非参数统计方法的编程实现。
|