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