欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

321:几何平均数和几何 CV 值的计算

最编程 2024-05-24 22:06:32
...

一:几何均值

几何均值的计算公式如下

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。