批量求解基于电导率的植物半致死温度

2023-12-29 22:10

本文主要是介绍批量求解基于电导率的植物半致死温度,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 问题的提出

问题:一批植物材料,设定了不同梯度的温度,每个处理重复3次,并测定了相对电导率,想计算各种基因型的半致死温度。
方法:采用文献《应用Logistic方程确定植物组织低温半致死温度的研究》的方法进行计算。

前言:很遗憾,R语言自带的nls函数(nls(ddl ~ SSlogis(temp, a, b, c))无法运行,主要缘故是数据问题。因此,根据查询的文献,从手动开始计算,到编程一次性完成。

2 文献所述求解方法

文献涉及的Logistic方程如下:
y = k / ( 1 + a ∗ e ( − b ∗ x ) ) y=k/(1+a*e^{(-b*x)}) y=k/(1+ae(bx))
问题改为涉及对参数 k , a 和 b k,a和b kab的求解,半致死温度的求解公式如下:
L t 50 = l n a / b Lt_{50}=ln{a}/b Lt50=lna/b

关键步:参考文献需要对原始的电导率作如下转换:
y ′ = ( k − y ) / y = a ∗ e ( − b ∗ x ) y'=(k-y)/y=a*e^{(-b*x)} y=(ky)/y=ae(bx)
上述方程进行对数转换:
l n y ′ = l n a − b ∗ x ln{y'}=ln{a}-b*x lny=lnabx
进一步
l n y ′ = l n ( k − y ) / y ln{y'}=ln{(k-y)/y} lny=ln(ky)/y
式中, y y y是原始的相对电导率(去掉%的值), k = 100 k=100 k=100
通过 l n y ′ ln{y'} lny即可对 x x x做普通的线性回归,获得 l n a 和 b ln{a}和b lnab的值。
最后要求解 k k k,采用等距离的3个 y y y值求解,方法如下:
k = ( y 2 2 ∗ ( y 1 + y 3 ) − 2 ∗ y 1 ∗ y 2 ∗ y 3 ) / ( y 2 2 − y 1 ∗ y 3 ) k=(y_{2}^2*(y_{1}+y_{3})-2*y_{1}*y_{2}*y_{3})/(y_{2}^2-y_{1}*y_{3}) k=(y22(y1+y3)2y1y2y3)/(y22y1y3)

通过上述的步骤,即可获得Logistic方程的各项参数值。之后就是利用R语言编程的事了,以及如何实现批量分析的目的。

3 R语言编程求解

3.1 数据读取和变换

对原始的电导率数据做所需的对数转换和均值计算:

df2<-readxl::read_excel('抗逆性.xls',sheet=1,skip=1)
df2$y<-log((100-df2$ddl)/df2$ddl)
df2a<-df2 %>% select(Clone,y,ddl,temp) %>% group_by(Clone,temp) %>% summarise(dm=mean(ddl),ym=mean(y))

3.2 批量求解的函数

lgssf <- function(dat,mod=ym~temp,x=temp,y0=dm,tn=3:5,ts=3) {# mod: line regression# x: temperature, for plot# y0: orginal leakage, for plot# tn: used orginal leakage data, 3 points position# ts: orginal leakage variablex=deparse(substitute(x))y0=deparse(substitute(y0))m2<-lm(mod,data=dat)tt<-summary(m2)r2<-tt$r.squaredFv<-tt$fstatisticpv<-1-pf(Fv[1],df1=Fv[2],df2=Fv[3])fit<-list()fit$r2<-r2;fit$Fv<-Fv;fit$pv<-pvln.a<-coef(m2)[1];a<-exp(ln.a)b<--coef(m2)[2]Lt50<-ln.a/b y1=dat[tn[1],ts];y2=dat[tn[2],ts];y3=dat[tn[3],ts]k=(y2^2*(y1+y3)-2*y1*y2*y3)/(y2^2-y1*y3)lgss.cof<-c(k,a,b,Lt50)lgss.cof<-unlist(lgss.cof)names(lgss.cof)<-c('k','a','b','Lt50')lc<-lgss.cof<-round(lgss.cof,3) equat<-paste0('y=',lc[1],'/','(1+',lc[2],'*exp^','(',lc[3],'*x))')fig<-ggplot(dat, aes_string(x=x,y=y0))+geom_point()+geom_smooth(method='auto',se=F)res<-list(equat,lc[4],lgss.cof,fit)names(res)<-c('equat','Lt50','coef','fit')res$fig<-figreturn(res)
}

3.3 运行程序和查看结果

res2a <- plyr::dlply(df2a,"Clone",lgssf)
> names(res2a) # 各植物材料的基因型代码
[1] "1" "2" "3" "4" "5" "6" "7" "8" "9"# 第一个基因型的结果
> res2a$`1`[c('equat','Lt50','fit')]
$`equat`
[1] "y=21.713/(1+1.148*exp^(-0.127*x))"$Lt50Lt50 
-1.089 $fit
$fit$`r2`
[1] 0.8356973
$fit$Fvvalue    numdf    dendf 
20.34531  1.00000  4.00000
$fit$pvvalue 
0.01073532

图形查看res2a$`1`$fig
在这里插入图片描述
到此,所有求解和批量运算都结束了。

这篇关于批量求解基于电导率的植物半致死温度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/550877

相关文章

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Python实现批量CSV转Excel的高性能处理方案

《Python实现批量CSV转Excel的高性能处理方案》在日常办公中,我们经常需要将CSV格式的数据转换为Excel文件,本文将介绍一个基于Python的高性能解决方案,感兴趣的小伙伴可以跟随小编一... 目录一、场景需求二、技术方案三、核心代码四、批量处理方案五、性能优化六、使用示例完整代码七、小结一、

C#实现一键批量合并PDF文档

《C#实现一键批量合并PDF文档》这篇文章主要为大家详细介绍了如何使用C#实现一键批量合并PDF文档功能,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言效果展示功能实现1、添加文件2、文件分组(书签)3、定义页码范围4、自定义显示5、定义页面尺寸6、PDF批量合并7、其他方法

Python批量替换多个Word文档的多个关键字的方法

《Python批量替换多个Word文档的多个关键字的方法》有时,我们手头上有多个Excel或者Word文件,但是领导突然要求对某几个术语进行批量的修改,你是不是有要崩溃的感觉,所以本文给大家介绍了Py... 目录工具准备先梳理一下思路神奇代码来啦!代码详解激动人心的测试结语嘿,各位小伙伴们,大家好!有没有想

shell脚本批量导出redis key-value方式

《shell脚本批量导出rediskey-value方式》为避免keys全量扫描导致Redis卡顿,可先通过dump.rdb备份文件在本地恢复,再使用scan命令渐进导出key-value,通过CN... 目录1 背景2 详细步骤2.1 本地docker启动Redis2.2 shell批量导出脚本3 附录总

批量导入txt数据到的redis过程

《批量导入txt数据到的redis过程》用户通过将Redis命令逐行写入txt文件,利用管道模式运行客户端,成功执行批量删除以Product*匹配的Key操作,提高了数据清理效率... 目录批量导入txt数据到Redisjs把redis命令按一条 一行写到txt中管道命令运行redis客户端成功了批量删除k

Python实现批量提取BLF文件时间戳

《Python实现批量提取BLF文件时间戳》BLF(BinaryLoggingFormat)作为Vector公司推出的CAN总线数据记录格式,被广泛用于存储车辆通信数据,本文将使用Python轻松提取... 目录一、为什么需要批量处理 BLF 文件二、核心代码解析:从文件遍历到数据导出1. 环境准备与依赖库

linux批量替换文件内容的实现方式

《linux批量替换文件内容的实现方式》本文总结了Linux中批量替换文件内容的几种方法,包括使用sed替换文件夹内所有文件、单个文件内容及逐行字符串,强调使用反引号和绝对路径,并分享个人经验供参考... 目录一、linux批量替换文件内容 二、替换文件内所有匹配的字符串 三、替换每一行中全部str1为st