样本量估计及其在nQuery和SAS软件上的实现*
——相关分析(二)
2021-07-07南方医科大学公共卫生学院生物统计学系510515钱晨坚吴研鹏段重阳陈平雁
南方医科大学公共卫生学院生物统计学系(510515) 钱晨坚 吴研鹏 段重阳 陈平雁
本刊之前已介绍了单样本的kappa系数检验(二分类变量)、相关系数检验(连续变量)和Lin和谐系数检验(连续变量)等有关相关分析的样本量估计方法[1-2],本文将进一步介绍相关分析中单样本Cronbachα系数检验、单样本组内相关系数检验和两独立样本Pearson相关系数检验的样本量估计方法,前两种方法主要用于量表的评价。
相关分析
1.单样本相关性分析
(1)差异性检验
①Cronbachα系数检验
方法:Feldt等[3]提出的单样本Cronbachα系数检验样本量的估计方法,是建立在自由度为v1和v2的F分布上的,检验效能的计算公式如下:
(1)
式中,v1=n-1,v2=(n-1)(k-1),n为样本量,k为量表的条目数;α为检验水准,s取1表示单侧检验,取2表示双侧检验,1-β为检验效能;F1-α(v1,v2)表示
自由度为v1和v2的F分布上侧α分位数,ProbF表示F分布的累积分布函数;ρα0和ρα1分别表示已知总体的Cronbachα系数和预期总体的Cronbachα系数。
计算样本量时,设定样本量n的初始值为2,通过不断增加样本量直至检验效能满足设定条件为止,最终得到的所需样本量。
【例1】欲评价某生活质量量表(SF-36)的信度,已知该量表共36个条目,即k=36。预期该量表的Cronbachα系数为0.89,以Cronbachα系数等于0.8为目标值(即原假设ρα0=0.8)。试估计单侧检验水准α=0.025,检验效能为90%,该量表的Cronbachα系数不低于0.8所需样本量。
nQuery Advanced 8.6.0.0实现:设置单侧检验水准α=0.025,检验效能1-β=90%,其他数据相应代入,在nQuery Advanced 8.6.0.0主菜单选择:
方法框中选择:Test for One Coefficient(Cronbach)Alpha
在弹出的样本量计算窗口将各参数值键入,如图1所示,结果n=60。即本研究所需样本量为60例。
图1 nQueryAdvanced8.6.0.0关于例1样本量估计的参数设置与计算结果
SAS 9.4软件实现:
/*Cronbach alpha系数检验*/
%macro cronbach(
alpha=/*检验水准*/
,side=/*单双侧检验,1表示单侧检验,2表示双侧检验*/
,r0=/*已知总体的Cronbachα系数*/
,r1=/*预期总体的Cronbachα系数*/
,k=/*量表条目数*/
,power=/*检验效能(%)*/
);
data a;
r0=&r0;r1=&r1;alpha=αk=&k;side=&side;power=&power/100;
/*输出错误信息*/
if(alpha>0.2 | alpha<0)then do;
error=1;
put “error:Test significance level′s range:0-0.2”;
end;
if(side^=1 & side^=2)then do;
error=1;
put “error:Side′s range:1 OR 2”;
end;
if(r0<=0 | r0>=1)then do;
error=1;
put “error:r0′s range:0 end; if(r1<=0 | r1>=1)then do; error=1; put “error:r1′s range:0 end; if(k<2)then do; error=1; put “error:k must be greater than 1”; end; if(&power>100 | &power<0)then do; error=1; put “error:Power′s range:0-100”; end; /*如有错误,跳出循环*/ if(error=1)then stop; power=0;n=2; do while(power<&power); f1=FINV(1-alpha/side,n-1,(k-1)*(n-1)); f2=FINV(alpha/side,n-1,(k-1)*(n-1)); c=(1-r1)/(1-r0); /*r0 if(r0 < r1)then power=100*(1-PROBF(c*f1,n-1,(k-1)*(n-1))); /*r0>r1*/ if(r0 > r1)then power=100*(PROBF(c*f2,n-1,(k-1)*(n-1))); if(power>=&power)then leave; else n=n+1; end; power=round(power,0.01); run; /*结果输出*/ proc print data=a label; var alpha side r0 r1 k power n; label alpha=“Test Significance Level” side=“1 or 2 sided” r0=“Null Coefficient Alpha” r1=“Alternative Coefficient Alpha” k=“Number of Raters” power=“Power(%)” n=“Sample Size”; quit; %mend cronbach; %cronbach(alpha=0.025,side=1,r0=0.8,r1=0.89,k=36,power=90) SAS运行结果: 图2 SAS 9.4 关于例1样本量估计的参数设置与计算结果 ②组内相关系数检验 方法:Donner和Eliasziw[4]提出的单样本组内相关系数(interclass correlation coefficient,ICC)单侧检验的样本量估计方法,是建立在自由度为v1和v2的F分布上的,检验效能的计算公式如下: (2) 式中,v1=n-1,v2=n(m-1),n为样本量,m为处理组数或重复因素的水平数;α为检验水准,1-β为检验效能;F1-α(v1,v2)表示自由度为v1和v2的F分布上侧α分位数,ProbF为F分布的累积分布函数;ρI0和ρI1为已知总体的组内相关系数和预期总体的组内相关系数。 计算样本量时,设定样本量n的初始值为2,通过不断增加样本量直至检验效能满足设定条件为止,最终得到的n表示所需样本量。 【例2】某研究使用葡萄糖氧化酶法对一批血液样本进行血糖浓度测定,欲评价不同实验者使用该法的测定结果一致性,即组内相关系数的大小。该研究下,参与一致性测定的实验者人数为3,即m=3。预期该研究的组内相关系数为0.85,以组内相关系数大于0.75(信度良好)为目标值(即原假设ρI0=0.75)。试估计单侧检验水准α=0.025,检验效能为90%,欲验证该研究的组内相关系数不低于0.75所需血液样本的样本量。 nQuery Advanced 8.6.0.0实现:设置单侧检验水准α=0.025,检验效能1-β=90%,其他数据相应代入,在nQuery Advanced 8.6.0.0主菜单选择: 方法框中选择:Test for Intraclass(Intracluster)Correlation 在弹出的样本量计算窗口将各参数值键入,如图3所示,结果n=92。即本研究所需样本量为92例。 图3 nQueryAdvanced8.6.0.0关于例2样本量估计的参数设置与计算结果 SAS 9.4软件实现: /*组内相关系数检验*/ %macro ICC( alpha=/*检验水准*/ ,r0=/*已知总体的组内相关系数*/ ,r1=/*预期总体的组内相关系数*/ ,m=/*处理组数或重复因素的水平数*/ ,power=/*检验效能(%)*/ ); data a; r0=&r0;r1=&r1;alpha=&alpha;m=&m;power=&power/100; /*输出错误信息*/ if(alpha>0.2 | alpha<0)then do; error=1; put “error:Test significance level′s range:0-0.2”; end; if(r0<0 | r0>=1)then do; error=1; put “error:r0′s range:0<=r0<1”; end; if(r1<0 | r1>=1)then do; error=1; put “error:r1′s range:0<=r1<1”; end; if(r0>=r1)then do; error=1; put “error:r1 must be greater than r0”; end; if(m<2)then do; error=1; put “error:m must be greater than 1”; end; if(&power>100 | &power<0)then do; error=1; put “error:Power′s range:0-100”; end; /*如有错误,跳出循环*/ if(error=1)then stop; power=0;n=2; do while(power<&power); f=FINV(1-alpha,n-1,n*(m-1)); c=(1+m*r0/(1-r0))/(1+m*r1/(1-r1)); power=100*(1-PROBF(c*f,n-1,n*(m-1))); if(power>=&power)then leave; else n=n+1; end; power=round(power,0.01); run;/*结果输出*/ proc print data=a label; var alpha r0 r1 m power n; label alpha=“Test Significance Level” r0=“Null Intracluster Correlation” r1=“Alternative Intracluster Correlation” m=“Number of Measurements/Raters” power=“Power(%)” n=“Sample Size”; quit; %mend ICC; %ICC(alpha=0.025,r0=0.75,r1=0.85,m=3,power=90) SAS运行结果: 图4 SAS 9.4 关于例2样本量估计的参数设置与计算结果 (1)差异性检验 ①两独立样本Pearson相关系数检验 方法:Zar[5]给出了两独立样本Pearson相关系数检验的样本量估计方法。基于大样本近似正态分布理论,检验效能的计算公式如下: (3) 计算样本量时,设定样本量n1的初始值为4,n2=n1/R,R为两组样本量比值,通过不断增加样本量直至检验效能满足设定条件为止,最终得到的n1和n2分别表示两组所需样本量。 【例3】某研究欲比较不同组织细胞的端粒DNA长度与年龄的相关性。据既往研究,外周血白细胞中端粒DNA长度与年龄的相关性系数为0.79,心肌细胞中端粒DNA长度与年龄的相关性系数为0.87。两相关系数分别从两组人群获得,试估计双侧检验水准α=0.05,检验效能为80%,两组样本量比例R=1的情况下,能够发现这两种不同细胞的端粒DNA长度与年龄的相关系数存在差异所需的样本量。 nQuery Advanced 8.6.0.0实现:设置检验水准α=0.05,双侧检验,检验效能1-β=80%,其他数据相应代入。在nQueryAdvanced 8.6.0.0主菜单选择: 方法框中选择:Two Correlations 在弹出的样本量计算窗口将各参数值键入,如图5所示,结果n1=233,n2=233。即本研究两组所需样本量各为233例,共需466例。 图5 nQueryAdvanced8.6.0.0关于例3样本量估计的参数设置与计算结果 SAS 9.4软件实现: /*两独立样本相关系数的检验*/ %macro twocor( alpha=/*检验水准*/ ,side=/*单双侧检验,1表示单侧检验,2表示双侧检验*/ ,p1=/*样本1的相关系数*/ ,p2=/*样本2的相关系数*/ ,R=/*两组样本量比例*/ ,power=/*检验效能(%)*/ ); data a; p1=&p1;p2=&p2;alpha=&alpha;R=&R;side=&side; /*输出错误信息*/ if(alpha>0.2 | alpha<0)then do; error=1; put “error:Test significance level′s range:0-0.2”; end; if(side^=1 & side^=2)then do; error=1; put “error:Side′s range:1 OR 2”; end; if(p1<=-1 | p1>=1)then do; error=1; put “error:P′s range:-1 end; if(p2<=-1 | p2>=1)then do; error=1; put “error:P′s range:-1 end; if(&power>100 | &power<0)then do; error=1; put “error:Power′s range:0-100”; end; /*如有错误,跳出循环*/ if(error=1)then stop; z1=0.5*log((1+p1)/(1-p1)); z2=0.5*log((1+p2)/(1-p2)); power=0; n1=4; /*直到效能达到要求,跳出循环*/ do while(power<&power); sigma=sqrt(1/(n1-3)+1/(n1/R-3)); /*双侧*/ if side=2 then power=100*(probnorm((z1-z2)/sigma-probit(1-alpha/2))+ probnorm(-((z1-z2)/sigma)-probit(1-alpha/2))); /*p1 if side=1 and p1 power=100*(probnorm((z1-z2)/sigma-probit(1-alpha))); /*p1>p2,单侧*/ if side=1 and p1>p2 then power=100*(probnorm(-((z1-z2)/sigma)- probit(1-alpha))); if(power >=&power)then leave; else n1=n1+1; n2=n1/R; end; n2=ceil(n1/R);R=n1/n2; power=round(power,0.01); run; /*结果输出*/ proc print data=a label; var alpha side p1 p2 R n1 n2 power; label alpha=“Test significance level” side=“1 or 2 sided test” p1=“Control Correlation” p2=“Treatment Correlation” R=“Sample Size Ratio” n1=“Control Sample Size” n2=“Treatment Sample Size” power=“Power(%)”; quit; %mend twocor; %twocor(alpha=0.05,side=2,p1=0.79,p2=0.87,R=1,power=80) SAS运行结果: 图6 SAS 9.4关于例3样本量估计的参数设置和计算结果2.两独立样本相关性分析