三维坐标算法变换与肾功能指标间的相对变化及疾病特征分析

作者:张明珠 张蕾 刘树业
作者单位:天津市天一津呈生物技术咨询有限公司(张明珠); 天津市,国控尚恩科技(天津)有限公司(张蕾); 天津第三中心医院检验科(刘树业 ) 2022-04-26

刘树业,主任技师,天津市第三中心医院检验科学术带头人。社会兼职:天津市医师协会检验医师分会会长;天津市生化与分子生物学会临床研究分会主任委员;天津市临床检验重点学科带头人;中国医疗保健国际交流促进会基层检验技术分会副主委;中国老年医学会检验分会常委;中国国家合格评定认可委员会实验室主任评审员;国家卫生健康委能力建设和继续教育检验医学专家委员会委员。专业研究方向及成果:基于液质联用代谢组学方法的疾病的实验室检验诊断;曾荣获天津市科技进步二等奖、三等奖,国际先进科技成果十余项,主持完成各类重点科研课题十余项。


张明珠,天津医科大学医学检验系本科,2018年开创了天一津呈生物技术咨询有限公司,从事医疗信息化软件开发、医学大数据、人工智能领域的创新,擅长对多元数据分析,智能诊断算法的研究。



【摘要】本文通过大数据分析手段,把肾功能三项指标:肌酐cr、尿酸ua、尿素urea锚在三维坐标系上,然后把坐标系做特定角度的变换,得到变换后三个指标的新坐标值,发现在新坐标系下,尿酸和尿素这两个指标有极强的相关性,从而考虑其临床上的应用。

【关键字】大数据分析;多维建模;向量空间;欧拉变换;四元组转换;奇异矩阵

众所周知,肾功能三项中,肌酐和尿素的相关性算是最强的,也是在肾损伤后相关性才会增强,这可从临床机制上解释;而尿酸和尿素相关是很弱的,无论肾损伤的哪个阶段,而在变换坐标获得其新坐标上的投影后,这两个指标间的关系却发生了变化,那么这样的关系在新坐标下,就像是从另一个视角去看待事物一样,其强相关是否能在临床实际应用上产生价值呢?


一、坐标的基本概念与数据处理


我们看待一项事物,对整个体系的作用,是站在这个特定观测体系下看待的,就像我们衡量检测指标一样,是站在对这项疾病是否有诊断意义的观测体系下进行的,而且指标的检测值(我们用数学概念叫它向量的模),跟它在这个体系(这种疾病下)投影(即坐标值),不一定是完全的。例如,如果此患者合并有另外一种疾病,而这两种疾病都分别会带来此项指标的升高,那么此指标的实际检测值(是模长),是在这两种疾病上都有分量的,在这一疾病观测体系下投影分量是x1,在另一疾病观测体系下投影分量就是x2。所以我们要把指标值和它在这种疾病下的贡献分量,分开来看,可以通过变换坐标的方法来做。


首先,调整变换坐标,相应的各指标的值(以坐标表示)也就发生了变化,将坐标调整到是该种疾病角度其指标实际测量值的分量表达是最多最特异的角度下,当然,也许其中一个或几个达到最佳视角了,但其他指标有可能反而是减弱了,很可能是一定有增强的也有减弱的,这就要各种经验和反复尝试计算来寻找最多维度有特异性的最佳角度。确定视角后提取总体特征,有了特征模型就可以去判断该疾病了,当然往往这样做目的是提取疾病模型,确切知道这个指标中的多少贡献来自此疾病的意义并不大;但结果很可能是一致的。然后把在这个观测体系中,没有贡献分量变化的指标去除掉,这就是降维。


在下面我们就选取肾功能三项的指标,在三维空间下对这一方法做一举例:


首先选取肾功能三项指标值:肌酐cr、尿酸ua、尿素urea,把其锚在三维坐标系上,然后做坐标的旋转变换,得到新坐标下的三个分量值,研究其前后变化的意义。


1. 编译环境:Win10下Anaconda3;代码编辑器:jupyter notebook;浏览器:chrome;编程语言:python3;算法包:numpy、pandas、seaborn、matplotlib、sklearn、scipy、math。


2. 数据集介绍:来源于天津市第三中心医院(所有综合随机数据)。


3. 数据前处理:原始数据集1856584条,初始形态:



提取77115条,去掉有空字段的数据,处理后形态:



这7万多条数据如果都用于生成3D图的话,旋转会很卡,我们抽取200条来用,同时在血糖glu维度上给它加个sort列标记一下,用glu6.1限来划分(glu<6.1是0,glu)6.1是1),可以顺便看到血糖值对肾功能指标的关系。于是得到右边利用的200条数据集:



4. 分析计算:


(1)样例讲解:正式开始之前,需插播一个样例以方便理解。随机从这里抽取6条数据,形成6个点的空间图像,如下:



以上是原数据集,和其三维图。为了方便观测,把这6个点的顺序值标记在了上面,并且按顺序给他们连了线。下图,六个点仅变换了坐标:



以上转换坐标的计算方法见参考文献[1]。可以看出,坐标变换后相应指标的坐标值变了,但是其空间位置关系貌似没变,旋转调整到适当的视角,可以看出其位置关系还是一样的。(这里只举了6个点的例子)。


(2)更多数据演示:下面,我们就把这200个数据点也做这样的变换比较,看前后能发现什么。首先是原数据和图像:



下面,还是经过以上的坐标角度变换后,变换后的数据和图像(其中橙色点是glu>6.1的):



同样,相应的坐标值变了,但因为散点太多就不太容易看出整体形状,我在程序里将其旋转如下:



经过一些旋转过程,最后一张视角图上,我们发现了强相关,是在ua和urea的平面上,下面用变换后的数据计算这两组值的相关性:



相关系数几乎为1,继续观察原始测量数据两者的相关性:



原始测量数据的相关比较弱。


二、讨论与分析


这样强的相关,在随意转角的一坐标下就发现了,好像哪里不对,我们再回到原坐标散点来旋转(3.2中的原始数据集,绿橙点的),无论如何也转不成个平面,这是怎么回事,(按说是只把坐标变了,但这些点的相对空间位置应该不变,原始数据那个“绿橙点图”和变换后数据的“蓝橙点图”应该是一样的,但从空间旋转来看明显不一样;而最初的那个6个点的举例,怀疑它实际上是变换了相对位置关系,只是因为点太少变化比较小而还能形成前后同样的视角形状。)

回到转换方法的那篇参考文中,里面提到了欧拉转换方法的局限:Gimbal Lock(关于此概念见维基百科参考文献[2],于是又变换了些远离Gimbal Lock的角度,尝试了一些后,还是有很多角度能转换后成平面的,比如:phim.pi/3;thet=m.pi/4;psi=m.pi/5,这个依次XYZ的旋转角度得到的还是一平面。这就奇怪了,下面我们单独验证一下每个坐标点的转换值是否正确,于是找了个网上工具(参考文献[7]):在里面输入转换角度和顺序以及原始坐标值后就可以直接计算出转换后的坐标值,试了几个点之后计算结果是一样的!这个工具的算法内核应该是跟那个一样。


这是一纯数学上的演化,坐标变换的算法是在每组坐标数据上乘了一个转换矩阵,而这个转换矩阵又是奇异矩阵不可逆的,(一旦乘进去了就不能再除出来了),也就是说“明明知道它是怎来的,却不能原路转回去”,这就是“时空的不可逆性”,数学上称“降维”。降维是对原始数据维度有损失的,(机器学习技术里的主成分分析PAC用的就是这种算法)。网上找了篇通俗讲谈的文章(参考文献[3]),本文作者更透彻领悟,供读者参考学习下“降维”概念的深刻理解。

但无论如何,我们空间点的相对位置是不变的,这堆点就在那,本来堆成个球形,不能因为变换坐标后就成了个扁片,如果问题真是出在了算法上,那究竟应该怎么算新坐标点值,在一篇网络发文(参考文献[4])里,发现了这样一段描述:



这里说:“欧拉变换不能保证变换后两点间的距离”,这很可能是造成图形压缩的原因,里面建议处理3d图像数据用四元组算法,关于四元组算法的介绍,也找了篇网络文章(参考文献[5]),里面介绍了一个叫“GLM(OpenGL Math Library)”的数学库用于四元组计算,其python算法包的实现,网上也有提供(参考文献[6])这里先不做实施。


三、小结


回到此文的探讨中,这种发现究竟有没有应用的现实意义,我们毕竟是找到了有特定变换的矩阵,才能观测到这一强相关的,如果再换做其他变换矩阵的话,得到的结论就不一定相关了,那么这种特定的转换矩阵是否代表了什么呢?因为它毕竟是跟我们原始数据特征直接关联的;即使是被‘降维’,压到同一平面上,那这个平面方程也是特定的,也是由原始数据特征和变换矩阵共同决定的,而原始数据特征就是由我们检测指标的意义和相互关系而来,那变换矩阵可能就是疾病视角吗?

再回到引言所述:如果我们把观测体系和操作体系分开来用,即在现有空间下得到测量指标的实际模长(即检测值),然后切换到特定疾病的观测体系下观察其变化,这样,随着经验的积累,我们会对一些常见的比较重要的指标,和一些特定疾病,摸索出其最佳的观测体系(也就是那个变换矩阵),这需要大量数据和行业内的共享协作精神,期待有着进一步的研究。

(作者微信:zmz198266 验证信息请标注“数据分析”)


参考文献


https://www.meccanismocomplesso.org/en/3d-rotations-and-euler-angles-in-python/

https://en.wikipedia.org/wiki/Gimbal_lock#:~:text=Gimbal%20lock%20is%20the%20loss,misleading%3A%20no%20gimbal%20is%20restrained.

https://zhuanlan.zhihu.com/p/37820069

https://wenku.baidu.com/view/c029b6f7b24e852458fb770bf78a6529657d354f.html

https://www.qiujiawei.com/understanding-quaternions/#9

https://stackabuse.com/brief-introduction-to-opengl-in-python-with-pyopengl/

https://keisan.casio.com/exec/system/15362817755710



2022年4月:糖尿病与肾病实验室诊断