一:几何均值
几何均值的计算公式如下
ln(xi) 表示数值 xi 的自然对数,exp 表示指数函数。
这个公式可以简单解释成先对每个值取自然对数,接着对这些对数值取算术平均数;最后再对这些取了均值的算术平均数进行反对数变换,就得到了几何均值。
在SAS中的实现
ln(xi)在SAS中可以直接通过log(x)实现,这已经是以e为底;如果需要以10为底,那就是log10(x)了。
至于指数函数,在SAS中是exp函数,至于什么是反对数变换,我已经记不清了。大家知道怎么用就可以了。
所以有了公式,我们就知道我们需要什么了,需要注意的是,需要先对数据进行log变换(看公式)。
data class;
set sashelp.class;
if height>0 then log_height=log(height); *实际工作中我们的数据可能存在等于0或者小于0的,需要排除;
proc sort;by sex;
run;
*几何均值--方法一;
proc means data=class noprint;
by sex;
var log_height;
output out=dat_mean mean=mean_log;
run;
data dat_mean2;
set dat_mean;
geomean=exp(mean_log);
run;
最后我们就得到了两组的几何均值。当然根据公式,我们可以直接在proc sql里面直接计算。可以看到计算的结果是一样的。
*几何均值--方法二;
proc sql;
create table geomean as
select sex,exp(mean(log(height))) as geomean from class(where=(height>0))
group by sex;
quit;
二:几何CV
几何CV(几何变异系数),描述数据变异程度的,计算的公式如下
剖析一下公式,这时候不需要先对数据进行log变化,直接用原始值,接着计算数据的均值和标准差,这时候再加1进行log变化。
proc means data=class noprint;
by sex;
var height;
output out=geocv mean=mean_log std=std_log;
run;
data geocv2;
set geocv;
geocv = (exp(sqrt(log(1 + (std_log**2)/(mean_log**2)))) - 1)*100;
run;
同样的,几何CV也可以直接用proc sql直接计算出来,你们可以把上面的公式一步一步转换成程序,但是这里还有一个公式,可能是经过一些特殊转换,这样也能计算出几何CV。
proc sql noprint;
create table GEOCV3 as
select sex,100*sqrt(exp(log(exp(std(log(height))))**2)-1) as GEOCV from class(where=(height>0))
group by sex;
quit;
也听过用proc ttest计算的,但是我看只算出了SD和mean,可能还是需要用公式计算
proc ttest data=class;
by sex;
var height;
run;
这里提一下,我们在计算CV和geocv的时候,可能会看到后面的单位跟着一个%(但是实际上他们是一个无单位的比率),CV的计算公式是标准差除以均值。
但是SAS在计算CV的时候,已经给我们乘以了100,所以你不要看到%又乘以了100,但是几何CV需要再乘以100。
网友评论