在R中进行S型曲线拟合

5

我是一个R语言的初学者,我正在尝试将曲线拟合到一个数据集上,该数据集(例如)可能看起来像下面这样:

(x- value)  (y-value)
105 423
115 471
125 567
135 808
145 921.5
155 1040

x值代表刺激量,y值代表运动反应(以微伏表示)。这些是对10个受试者的平均值,其中每个受试者的x值相同。

我被告知这个数据集通常遵循一个S形曲线拟合。我尝试使用以下方法进行拟合:

fit <- lm( y ~ poly(x, 3) )

但我不确定这是否是适当的方法 :(
到目前为止,我的代码如下:
p <- ggplot (data, aes(x, y)) +
  geom_point(shape= 21, fill= "blue", colour= "black", size=2) +
  xlab("X value") + ylab("Y value") +
  geom_smooth(method= "lm", se= FALSE,  colour= "red", formula=y ~ poly(x, 3, raw=TRUE)) +
  geom_errorbar(aes(ymin=y-SE, ymax=y+SE), width=.9)+ 
  ggtitle ("Title")
p

另外:一旦我拟合了曲线,我还想获得斜率(计算为曲线最陡峭点处的切线值)

提前感谢,任何帮助都将不胜感激!


也许,这个链接也可以帮到你:https://dev59.com/IGUp5IYBdhLWcg3wtZPt - alexis_laz
3
我不认为这是重复的问题,因为我使用了ggplot而他们没有,而且这绝对不是一道作业题。我正在尝试开发一个自动化系统来处理大量病人数据。我只想将曲线拟合到数据上,并获得拟合曲线最陡峭点处的斜率。 - Purrina
ggplot2是用于绘图的开发工具。试图从方便的曲线拟合功能中提取特征是不明智的。(这是某位对Excel非常热爱的人建议的策略吗?)你应该在常规的R中进行曲线拟合。 - IRTFM
如果您能详细说明一下,我会非常感激。对我来说,R是非常新的东西,到目前为止,我所知道的一切都是从在线资源中拼凑起来的。 - Purrina
2
一个 Sigmod 函数和一个三次多项式函数是非常不同的,您确定要使用多项式函数吗?直接使用“optim”拟合 Sigmod 应该很容易。我假设您也有每个平均值的方差?这可能会给出更可靠的拟合结果。使用拟合的海森矩阵将使您获得拟合误差的估计。 - Sam Mason
显示剩余2条评论
1个回答

2

我不知道poly()函数应该如何工作,但如果您想要一个三次多项式拟合,只需使用:

   lm1=lm(y~I(x^3)+I(x^2)+x)

对于您提供的玩具数据,这是一个相当好的拟合结果。对于拐点处的斜率,我会将二阶导数设为零并解出x。然后计算该x处的一阶导数。

但我认为您更喜欢逻辑增长模型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接