R 找到局部最小值/最大值并仅使用此范围进行绘图

R 找到局部最小值/最大值并仅使用此范围进行绘图,r,model-fitting,R,Model Fitting,下面我有一些数据。请以CSV形式粘贴到文本文件中,因为我不知道如何将其导出为向量:) 不管怎么说,当你绘制散点图时,你会注意到有一个最大值。如何仅从x=0到x=max(y)的范围进行拟合(在本例中仅为线性拟合,尽管不完全精确),然后从最大值到终点进行另一次拟合(可能是指数衰减)?见下面的草图 做到这一点最简单的方法是在最大值出现的点将数据分成两部分,并独立地进行拟合 这可以通过以下代码实现 data <- read.csv('./in.csv') max <- which.ma

下面我有一些数据。请以CSV形式粘贴到文本文件中,因为我不知道如何将其导出为向量:)

不管怎么说,当你绘制散点图时,你会注意到有一个最大值。如何仅从
x=0
x=max(y)
的范围进行拟合(在本例中仅为线性拟合,尽管不完全精确),然后从最大值到终点进行另一次拟合(可能是指数衰减)?见下面的草图


做到这一点最简单的方法是在最大值出现的点将数据分成两部分,并独立地进行拟合

这可以通过以下代码实现

 data <- read.csv('./in.csv')
 max <- which.max(data$intensity)

 start <- data[1:max,]     
 end <- data[max:dim(data)[1],]

data使用
stat\u smooth
geom\u smooth
ggplot2
计算并绘制数据拟合,并使用
subset
函数告诉他们要拟合的数据部分:

library( ggplot2 )

X <- read.delim( "data.csv", sep=";" )
pt <- X$time[ which.max( X$intensity ) ]     # Identify the inflection point

g <- ggplot( X, aes( x=time, y=intensity ) ) +
  geom_point() +
  stat_smooth( data=subset( X, time<=pt ), method="lm", col="blue", se=FALSE ) +
  geom_smooth( data=subset( X, time>=pt ), method="glm", col="red", se=FALSE,
              method.args=list(family=gaussian(link="log")) )
库(ggplot2)

是的,只是一个可怜的客人。这更像是一条拉长的s形曲线,因为我还没有完全弄清楚一些非稳态酶动力学。但是谢谢你的可爱的例子!这是一个非常好的例子,有没有一种方法可以从拟合中获取拟合参数?是的,您可以自己使用相同的参数运行
lm
glm
(例如,
lm(数据=子集(X,timeErr…
lm(强度~时间,数据=子集(X,times一般的共识似乎是,分别从ggplot中进行拟合,然后绘制,例如
geom_smooth(method=“nls”,method.args=list(公式=y~a*b,开始=list(a=1,b=2))
如果您告诉ggplot以适合您的方式进行调整,它会变得非常复杂。
library( ggplot2 )

X <- read.delim( "data.csv", sep=";" )
pt <- X$time[ which.max( X$intensity ) ]     # Identify the inflection point

g <- ggplot( X, aes( x=time, y=intensity ) ) +
  geom_point() +
  stat_smooth( data=subset( X, time<=pt ), method="lm", col="blue", se=FALSE ) +
  geom_smooth( data=subset( X, time>=pt ), method="glm", col="red", se=FALSE,
              method.args=list(family=gaussian(link="log")) )