drEEM 0.6版本v1.0

这个排版,请关注持续更新网址!!!!

持续更新网址
语雀:语雀drEEM0.6版本
知乎专栏:有机物一些分析

基于最近的这篇文章A simple method to isolate fluorescence spectra from small dissolved organic matter datasets中的数据,用drEEM工具箱进行分析,有不正确的地方恳请各位老师同学批评指正。

数据:A simple method to isolate fluorescence spectra from small dissolved organic matter datasets文中的\b_processeddata的数据
软件:MATLAB R2018a
工具箱:drEEM0.6

一、数据导入与矫正

%欢迎加入我们的讨论 群:1146318990,PARAFAC & X
%导入数据,不得不说,csv的导入速度确实很快
cd 'D:\Nutstore\实验设计\b_processeddata\processeddata'
filetype=1;ext = 'csv';RangeIn='A1..BQ69';headers=[1 1];display_opt=0;outdat=2;
[X,Emmat,Exmat,filelist_eem,outdata]=readineems(filetype,ext,RangeIn,headers,display_opt,outdat)
Ex=Exmat(1,:);
Em=Emmat(:,1); %由于这个导入的数据已经是作者剪切好了的数据,那么我们就直接拿这个来建模,中间就省略了散射剪切的操作
%如果,有需要的话,我再单独拿出来讲,应该和原文的作者有很多不一样的地方,我是希望能和作者保持尽可能的吻合
mydata= assembledataset(X,Ex,Em,'RU','longID',filelist_eem,[]);
eemview(mydata,'X',[3 3],1,[],'longID',[],'wavenum','colorbar',20)
%欢迎加入我们的讨论 群:1146318990,PARAFAC & X

这其实作者应该是把数据进行了矫正,作者原文中是说用紫外进行矫正,那我在这里,试着把这个矫正重新还原一下,对了,空白扣除,还是参考之前,用data = data原始数据-data空白数据,参考之前在知乎的帖子,这个扣除,我再FL Solution软件上也看到了相类似的操作,应该问题不大。

我们要在工作区中构建一个关于紫外光谱的数据集,右键新建就可以
![image.png](https://img-blog.csdnimg.cn/img_convert/8a562a74de564719d4a308113e6f1231.png#align=left&display=inline&height=333&margin=[object Object]&name=image.png&originHeight=665&originWidth=1245&size=623710&status=done&style=none&width=622.5)

命名为Abs并双击打开
![image.png](https://img-blog.csdnimg.cn/img_convert/9f6b4409ad75bce3931ca2b0a14fd751.png#align=left&display=inline&height=338&margin=[object Object]&name=image.png&originHeight=676&originWidth=1286&size=451640&status=done&style=none&width=643)
然后,在其中加入你的紫外的数据,注意,第一行为波长,第二行往下为数据,这个排列方式应该与荧光光谱的排列方式保持一致,还记得我之前很蠢的编号没,应该从001,到099这么对样本进行编号
![image.png](https://img-blog.csdnimg.cn/img_convert/7cc08aa3c23dfe44f33bcb08078833e6.png#align=left&display=inline&height=340&margin=[object Object]&name=image.png&originHeight=680&originWidth=1277&size=774002&status=done&style=none&width=638.5)
以上工作都完成后在命令行窗口输入

[IFC,K]=ABAife(Ex,Em,Abs,X)
mydata2= assembledataset(K,Ex,Em,'RU','longID',filelist_eem,[]);
%画图,这里面的参数我就不详细说了,也是需要的话另外开专题,help大法好
eemview(mydata,'X',[3 3],1,[],'longID',[],'wavenum','colorbar',20)

还有同学需要把数据导出来,用origin或者r画,那这里是导出这些数据代码

outdata1= assembledataset(mydata2.X,mydata2.Ex,mydata2.Em,'RU','filelist',filelist_eem,[]);
Xout=outdata1;
foldername='D:\matlab\ck';%导出路径设置,这个路径一定要存在啊
for i=1:Xout.nSamplefilename=deblank(char(Xout.filelist(i)));filename=filename(1:end-3); %注意调整你末尾的位数这里-3是为了去掉csveem_i=squeeze(Xout.X(i,:,:)); eem_i=[[NaN; Xout.Em] [Xout.Ex'; eem_i]];
csvwrite([foldername '\' filename '_corr.csv'],eem_i)
end

![image.png](https://img-blog.csdnimg.cn/img_convert/0700f7b91a9d20b105d308f94647dea8.png#align=left&display=inline&height=309&margin=[object Object]&name=image.png&originHeight=618&originWidth=1574&size=112156&status=done&style=none&width=787)

二、指数计算

以上就是一些基本的数据整理,接下来对数据进行分析,最近在文章,里面提到一句话,讲我们几乎把80%的时间放在数据整理上,我觉这个比例还要高一些…
首先是指数的运算

%欢迎加入我们的讨论 群:1146318990,PARAFAC & X
peaklist=pickpeaks(mydata2);
peaklist.ID=mydata2.longID;
writetable(peaklist,'peaklist1.xlsx','WriteVariableNames',true)

![image.png](https://img-blog.csdnimg.cn/img_convert/4cbbfb971b022b7840ab769a4887fd33.png#align=left&display=inline&height=365&margin=[object Object]&name=image.png&originHeight=729&originWidth=1890&size=218806&status=done&style=none&width=945)

接下来开始建模,建立模型也很麻烦,我先跳过对异常值的筛选,因为这个确实不好确定

三、模型构建

数据标准化,这个不难理解,我们讲PCA分析的时候,是不是也要标准化处理,这个地方不好理解的,可以去看一下赖老师的《数量生态学》

Xpre=normeem(mydata2)

然后开始建模,这个模型的基础是最小二乘法建模,最近刚好再看PLS-PM的模型,我是感觉这个地方应该是的模型的自举( Bootstrapping),简而言之,我们重复随机提取模型的组分,并设定一个范围,这个范围例如为1e-8,如果在这个范围,我们认为这个模型符合所有的数据,啊,个人理解啊,看样子我还是需要好好理解一下这模型。
依照原作者参数,设置为一下参数,随着模型组分和迭代次数的增加,计算时间越长,当然和计算机也有关系。
40意思是开始的2个组分时重复迭代计算的次数,如果后面又有3,4,5,6,7等,会自动增加迭代运算次数,并储存在bestmodel中。如果实在是找不到模型,作者的意思,是增加迭代次数,比如默认最大迭代次数是2500。

这里只是从均一化 的数据上进行分析,并不是说我们要那这个数据作为最后导出的对象,需要注意,最后还是要用不均一话的数据进行分析。

[model,allmodel,moddetail]=randinitanal(Xpre,2:7,100,'nonnegativity',1e-8)%这是个例子不用运行

uby觉得,如果找不到,应该首先看一下原始数据,并把原始数据图画出来看有没有误差很大的存在

ps.我电脑的运算力还是不太行,能完整跑完了5个组分情况,6、7实在是做不到了。

[bestmodel,allmodel,moddetail]=randinitanal(Xpre,2:5,40,'nonnegativity',1e-8)

![image.png](https://img-blog.csdnimg.cn/img_convert/16e8b353242d45ac02ef1ea3c2f16b9e.png#align=left&display=inline&height=371&margin=[object Object]&name=image.png&originHeight=741&originWidth=1786&size=201244&status=done&style=none&width=893)
![image.png](https://img-blog.csdnimg.cn/img_convert/599d8fe2d3335e23ca8d6ca96ac401ea.png#align=left&display=inline&height=370&margin=[object Object]&name=image.png&originHeight=739&originWidth=1850&size=187223&status=done&style=none&width=925)
这个过程中你可以随时终止其中一个建模,你主要是看,这些谱图能不能满足你解决问题
核心一致性检验,我一直在说,核心一致性检验不要用,可还是逃不过真香定律,这个表达的意思,也很明确,最左边是核心一致性,及为不同组分之间的差别,中间是对数据方差的解释,图上看,5个组分对方差的解释能达到99.9%,最后一个图,是每个模型每一个组分对数据的解释度。
uby觉得,这只是一个数学统计方法,,,组分的选择还是要看你研究的对象决定

coreandvar(bestmodel)

![image.png](https://img-blog.csdnimg.cn/img_convert/37f2c9b1687b284ebd3c19121439c877.png#align=left&display=inline&height=389&margin=[object Object]&name=image.png&originHeight=778&originWidth=1820&size=215245&status=done&style=none&width=910)

spectralloadings(bestmodel,5)%绘制组分图
comparespectra(bestmodel,5)
fingerprint(bestmodel,5)
specsse(bestmodel,2:5)

这个图就是最后一个代码跑的,也有人用这个图来作为模型判别标准,我看的话,残差平方和也就是SSE,那么这个值是说由于其他因素导致数据变异的因素,也就是无法用模型解释的部分,那么这么看的话,不是越小越好吗,这个图的意义很可能是告诉你,模型之间的误差,你应该综合去判断选择模型,很有可能不是一个衡量标准。感兴趣的可以去看《生物统计学》第138页
![image.png](https://img-blog.csdnimg.cn/img_convert/6311f1cf1bc5cbb43aaf9e116ab47427.png#align=left&display=inline&height=445&margin=[object Object]&name=image.png&originHeight=890&originWidth=1828&size=113734&status=done&style=none&width=914)

查看异常值,从此往后,我假设是筛选了5个组分并以5个组分作为这批数据的模型

loadingsandleverages(bestmodel,5)

异常值怎么看呢,觉以0.3作为度量标准,大于0.3的可以认为有偏差过大之嫌,要去把这个图画一画看看到底是咋回事
![image.png](https://img-blog.csdnimg.cn/img_convert/9e0281bd58a88325222acaa46e3fbdcb.png#align=left&display=inline&height=377&margin=[object Object]&name=image.png&originHeight=923&originWidth=1827&size=166559&status=done&style=none&width=746)
接着我们看一下这些组分之间的关系,由于使用 PARAFAC 分解荧光是假定其光谱或荧光强度中没有两种荧光现象完美结合,因此严重的自相关可能使模型失效. 如果两个变量严重自相关,需要提高警惕了!

compcorrplot(bestmodel,5)

![image.png](https://img-blog.csdnimg.cn/img_convert/8014c113a1f061666e13b4b610e2ba63.png#align=left&display=inline&height=492&margin=[object Object]&name=image.png&originHeight=983&originWidth=1789&size=170787&status=done&style=none&width=894.5)
接下来,我们对5个组分的情况,增强模型的拟合度,重复抽样100次,注意,这里我们就可以使用原始数据mydata2了,而不是均一化之后的数据Xpre. 均一化的数据,我觉,很可能只是为了方便我们寻找到组分,减少部分样本强度太大的干扰,确定完组分后就没啥用了(我仔细的对比了工具箱的源码)。

LSmodel=randinitanal(mydata2,5,100,'nonnegativity');

![image.png](https://img-blog.csdnimg.cn/img_convert/c42f715bbc96b8e217debadb9a4d881b.png#align=left&display=inline&height=367&margin=[object Object]&name=image.png&originHeight=733&originWidth=1823&size=156955&status=done&style=none&width=911.5)
![image.png](https://img-blog.csdnimg.cn/img_convert/4f916783f352f3c696b7d6490a323e91.png#align=left&display=inline&height=362&margin=[object Object]&name=image.png&originHeight=724&originWidth=1837&size=185759&status=done&style=none&width=918.5)

接下来拆半检验,拆半检验这个确实很好,这一步是所有数据的重新整合,采用随机拆分两个部分,去验证在这个两个部分的差别,这里可以直接看到模型对数据偏差
![image.png](https://img-blog.csdnimg.cn/img_convert/5faddac7705c46c4a40150ef781c4f17.png#align=left&display=inline&height=220&margin=[object Object]&name=image.png&originHeight=439&originWidth=805&size=374686&status=done&style=none&width=402.5)

DSsplit=splitds(mydata2,[],4,'random',{[1 2],[3 4]})%检验的范围小一些确实比较好过检验
MyRunOptions=4
MyCC=1e-2%这个阈值真要设的大一点,不然真过不去检验,,,,
SaveResultsAs='A2_10-8_5comp'
splitmodels=splitanalysis(DSsplit,5,'nonnegativity',MyRunOptions,MyCC,SaveResultsAs);

四、数据导出与openfluor使用

%欢迎加入我们的讨论 群:1146318990,PARAFAC & X
val_results=splitvalidation(splitmodels,5,[],[],LSmodel);

![image.png](https://img-blog.csdnimg.cn/img_convert/c933d2ba64d3097aac8f55cec123c17d.png#align=left&display=inline&height=503&margin=[object Object]&name=image.png&originHeight=1005&originWidth=1830&size=309211&status=done&style=none&width=915)
导出excel数据,导出的这个数据,是在你当前的工作目录下

[FMax,B,C] = modelout(val_results,5,'pure_5_validated.xlsx');

![image.png](https://img-blog.csdnimg.cn/img_convert/c6e135bcc7ad98bd5e27005af38df020.png#align=left&display=inline&height=427&margin=[object Object]&name=image.png&originHeight=853&originWidth=1746&size=195985&status=done&style=none&width=873)

导出openfluor数据格式,到数据库里比对

openfluor(val_results,5,'pure_5_validated_of.txt')

再到数据库里对组分
![image.png](https://img-blog.csdnimg.cn/img_convert/8c742e13d08091ba60cdbb93a95fc077.png#align=left&display=inline&height=341&margin=[object Object]&name=image.png&originHeight=682&originWidth=1882&size=105814&status=done&style=none&width=941)
注意设置阈值
![image.png](https://img-blog.csdnimg.cn/img_convert/d7a1c28ab39a857880d84277cf482d15.png#align=left&display=inline&height=448&margin=[object Object]&name=image.png&originHeight=896&originWidth=1831&size=143627&status=done&style=none&width=915.5)

以上都是基于自己的理解对PARAFAC进行归纳和总结,还有很多不对的地方,恳请各位老师同学批评指正,我的联系方式:
QQ:3414218120;邮箱:lijw092@nenu.edu.cn;微信/手机号:13844623601

持续更新网址
语雀:语雀drEEM0.6版本
知乎专栏:有机物一些分析


最后给我自己打个广告吧,小硕,现在正在东北221读研二,专业是生态学,硕士主要工作在土壤有机质固存,湿地碳循环方向,一篇在投sci,一篇在写。会一点微生物组学分析,会一点统计。打算读博,嘿嘿,有愿意招我的请与我联系呀,科科~
邮箱:lijw092@nenu.edu.cn
微信/手机号:13844623601
2021-2-9

平行因子-三维荧光-PARAFAC-drEEM 0.6相关推荐

  1. 平行因子-三维荧光-PARAFAC数据前处理

    PARAFAC - drEEM数据前处理 这个排版,真过分,请看持续更新网址!!! 持续更新网址 语雀:语雀drEEM0.6版本 知乎专栏:有机物一些分析 数据前处理可能是耗时最长的是个一个过程,上一 ...

  2. 三维荧光平行因子学习记录--(三)使用DOMfluor工具箱进行平行因子分析--(二)

    三维荧光平行因子学习记录–(三)使用DOMfluor工具箱进行平行因子分析–(二) 注 本文仅作为自己的学习记录以备以后复习查阅 本文的参考文献: 本文的参考博客链接: https://zhuanla ...

  3. 三维荧光平行因子学习记录--(二)荧光区域积分(FRI)

    三维荧光平行因子学习记录–(二)荧光区域积分(FRI) 注:本文仅作为自己的学习记录以备以后复习查阅 所有步骤和代码参考知乎上两位大佬在这里po一下他们的主页: https://www.zhihu.c ...

  4. 三维荧光平行因子学习记录--(四)平行因子组件导出--(一)

    三维荧光平行因子学习记录–(四)平行因子组件导出–(一) 注:本文仅作为自己的学习记录以备以后复习查阅 本文参考博客链接: https://zhuanlan.zhihu.com/p/377996430 ...

  5. 三维荧光平行因子学习记录--(一)DOMfluor工具箱的数据导入

    三维荧光平行因子学习记录–(一)DOMfluor工具箱的数据导入 注:本文仅作为自己的学习记录以备以后复习查阅 所有步骤和代码参考知乎上一位大佬在这里po一下他的主页: https://www.zhi ...

  6. matlab建立荧光矩阵,基于Matlab的溶解有机物的三维荧光矩阵构建

    基于Matlab 的溶解有机物的三维荧光矩阵构建 钱伟1,2,3,杨柳明1,2,3,王宁3,张莉3 [摘要]摘要:三维荧光光谱(EEM)结合平行因子分析(PARAFAC)能够根据水体中有机物的荧光性质 ...

  7. 三维荧光学习记录--在Origin中绘制三维荧光光谱图

    三维荧光学习记录–在Origin中绘制三维荧光光谱图 注:本文仅作为自己的学习记录以备以后复习查阅 记录一下如何在Origin中绘制三维荧光光谱图(数据分析的学习之路任重而道远啊~~) 一.数据准备 ...

  8. 三维荧光学习记录--在Origin中绘制三维荧光光谱图(补充)及荧光区域积分(FRI)

    三维荧光学习记录–在Origin中绘制三维荧光光谱图(补充)及荧光区域积分(FRI) 注:本文仅作为自己的学习记录以备以后复习查阅 关于区域积分的简介,大家可以去看我之前的文章,这里就不赘述了,主要想 ...

  9. matlab扣除三维荧光,三维荧光中瑞利散射扣除方法与流程

    本发明涉及一种消除荧光瑞利散射方法,特别是一种三维荧光中瑞利散射扣除方法. 背景技术: 三维荧光光谱作为指纹图谱和定性定量方法,近年来得到了广泛应用.为了改善谱图质量和更准确定性定量,需要消除掉谱图中 ...

最新文章

  1. 长文综述:从大数据中寻找复杂系统的核心变量
  2. 【python基础】list操作相关:扩充、条件查找【IndexError: list assignment index out of range】...
  3. R语言的一个加法函数
  4. JavaScript计算两个文本框内数据的乘积(四舍五入保留两位小数)
  5. 字符串的方法、注释及示例1.
  6. 深度学习(四十)caffe使用点滴记录
  7. Oracle常用数据库操作SQL
  8. Ubuntu的版本号命名规则
  9. 散户真的能战胜大庄家么?股市庄家的赚钱手法!
  10. pandas5 数据分组与聚合
  11. wps 组合图(柱状图 + 折线图)不同数据类型(比如数量、百分比)
  12. 2021年中国消费金融行业贷款情况及发展趋势分析:互联网消费金融放款规模达到20.2万亿[图]
  13. CSS基础五(盒模型)
  14. web接口测试之GET与POST请求
  15. 2021年CVPR论文Deep Two-View Structure-from-Motion Revisited阅读笔记
  16. speedoffice使用方法——Word如何设置段落背景颜色
  17. IT技术人员的六大方向
  18. jquery 将下拉框重置_select下拉框之默认选项清空
  19. python idle快捷键
  20. 钉钉邮箱登录入口_阿里企业邮箱发信失败 报错:554reject by content_「阿里云企业邮箱_阿里企业邮箱」指定经销商热线:400-855...

热门文章

  1. 【Oracle 12c Flex Cluster专题】—节点角色转换
  2. 微软免费杀毒软件Morro即将发布
  3. linux下 firefox安装flash插件
  4. 使用阿里云来搭建视频直播服务
  5. 如何透过上层div点击下层的元素
  6. 狄利克雷卷积与积性函数
  7. Proxmox VE(PVE)连接WiFi及一些配置
  8. 上线BI系统的方方面面
  9. 了解一下chirp,扫频信号的生成
  10. 车辆视频检测器检测参数配置