前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[SAS]Proc iml怎么计算GCV GSD GEOMEAN

[SAS]Proc iml怎么计算GCV GSD GEOMEAN

作者头像
归海刀刀
发布2023-09-27 10:48:26
6020
发布2023-09-27 10:48:26
举报
文章被收录于专栏:归海刀刀
IML

—恰似人间惊鸿客,墨染星辰云水间。

01

proc iml是SAS中的一个矩阵语言,它可以简化矩阵运算和自定义统计算法。proc iml的语法和DATA步骤有很多相似之处,但是proc iml的基本单位是矩阵,而不是观测值。proc iml可以在内存中高效地执行向量化的计算。

那么,什么是向量化的计算呢?简单来说,就是用一条语句来操作一个矩阵或者向量,而不是用循环来操作每一个元素。这样做的好处是,可以减少语句的数量,提高代码的可读性,以及利用底层的C语言来加速计算。

proc iml的函数有很多种类,包括数学函数、统计函数、矩阵函数、数据处理函数、随机数函数等。函数的参数根据不同的函数而有所不同,一般都是矩阵或标量。例如,sum函数可以计算一个矩阵或向量的和,它的参数是一个矩阵或向量;mean函数可以计算一个矩阵或向量的均值,它的参数也是一个矩阵或向量;inv函数可以计算一个方阵的逆,它的参数是一个方阵。

下面是一些proc iml的例子:

计算一个3x3矩阵A的逆,并将结果赋值给B:

代码语言:javascript
复制
proc iml;
A = {1 2 3,
     4 5 6,
     7 8 9};
B = inv(A); /* B is the inverse of A */
quit;

计算一个10x10随机矩阵X的特征值和特征向量,并将结果赋值给L和V:

代码语言:javascript
复制
proc iml;
call randseed(123); /* set random seed */
X = j(10,10); /* create a 10x10 matrix */
call randgen(X,"Normal"); /* fill X with normal random numbers */
L = eigval(X); /* L is a vector of eigenvalues */
V = eigvec(X); /* V is a matrix of eigenvectors */
quit;

计算一个向量y的平均值和标准差,并将结果赋值给m和s:

代码语言:javascript
复制
proc iml;
y = {1, 2, 3, 4, 5}; /* create a vector */
m = mean(y); /* m is the mean of y */
s = std(y); /* s is the standard deviation of y */
quit;

计算一个正数向量x的几何平均数、几何标准差和几何变异系数(https://blogs.sas.com/content/iml/2019/10/02/geometric-mean-deviation-cv-sas.html):

代码语言:javascript
复制
proc iml;
use Have; read all var "x"; close; /* read in positive data */
GM = geomean(x); /* built-in GEOMEAN function */
print GM; 

/* To estimate the geometric mean and geometric StdDev, compute arithmetic estimates of log(X), then EXP transform the results. */
n = nrow(x);
z = log(x); /* log-transformed data */
m = mean(z); /* arithmetic mean of log(X) */
s = std(z); /* arithmetic std dev of log(X) */
GM2 = exp(m); /* same answer as GEOMEAN function */
GSD = exp(s); /* geometric std dev */
GCV = sqrt(exp(s**2) - 1); /* geometric CV */
print GM2 GSD GCV;
quit;

Output: GM 5.476

GM2 GSD GCV 5.476 1.648 0.301

你可以看到,用两种方法计算的几何平均数是一样的,而且我们还得到了几何标准差和几何变异系数。这个例子展示了proc iml的灵活性和强大性,你可以用它来实现一些其他SAS过程没有提供的统计方法。你可以用proc iml做很多事情,比如:

实现自定义的统计方法,如回归分析、聚类分析、主成分分析等。调用其他SAS过程,如PROC REG、PROC CLUSTER、PROC PRINCOMP等,并将它们的结果传递给proc iml。

编写用户自定义的函数,并将它们保存在模块中。

使用SAS/IML Studio进行交互式数据分析和可视化。

proc iml和matlab都是矩阵语言,它们都可以用来进行矩阵运算和自定义统计算法。它们的语法也有一些相似之处,比如都用方括号来创建矩阵,都用分号来结束语句,都用星号来表示矩阵乘法等¹。不过,proc iml和matlab也有一些不同点,比如:

proc iml是SAS中的一个过程,它可以和其他SAS过程、DATA步骤和宏语言相互调用,而matlab是一个独立的软件平台,它需要通过接口或者文件传输来和SAS交互¹。

proc iml的基本数据类型是矩阵,而matlab的基本数据类型是数组。矩阵只能有两个维度,而数组可以有多个维度。因此,matlab可以处理更高维的数据结构,比如张量²。

proc iml的索引从1开始,而matlab的索引从0开始。这意味着在proc iml中,第一个元素的位置是1,而在matlab中,第一个元素的位置是0³。

proc iml支持SAS日期、时间和日期时间值,而matlab不支持这些值。在proc iml中,你可以用SAS函数来处理日期和时间相关的计算,比如intck、intnx、datepart等。

proc iml提供了一些特殊的函数和语句来实现统计模拟,比如call randgen、call randseed、do-over等。matlab也可以进行统计模拟,但是需要用循环或者其他函数来实现。

总之,proc iml和matlab都是强大的矩阵语言,它们各有优势和局限。你可以根据你的需求和喜好来选择使用哪一个。

参考链接:

¹: https://support.sas.com/resources/papers/proceedings13/144-2013.pdf

²: https://www.mathworks.com/help/matlab/math/multidimensional-arrays.html

³: https://www.mathworks.com/help/matlab/math/array-indexing.html : https://blogs.sas.com/content/iml/2018/01/15/sas-date-values-sas-iml.html : https://blogs.sas.com/content/iml/2019/10/28/simulate-data-in-sas.html : https://www.mathworks.com/help/stats/simulation-and-monte-carlo-methods.html

尊敬的读者,首先感谢您对本篇文章的关注和阅读。在此,本小编想要说明的是,以上所述内容都是经过笔者认真整理和撰写的,但限于个人能力和知识水平等因素,难免存在疏漏或错误之处。如有不当之处,敬请包涵并指正,本小编将虚心接受您的批评与建议,并严谨修正文章。再次感谢您对本篇文章的支持与厚爱。

以上就是今天的内容了,喜欢的话麻烦点个关注,非常感谢!!!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-07-10 23:23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 归海刀刀 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档