在S中的Sigmoidal曲线拟合

时间:2013-10-24 19:54:32

标签: r ggplot2 curve-fitting

我是R的初学者,我试图将曲线拟合到一个数据集上(例如)可能如下所示:

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

x值表示刺激量,y值表示运动反应(以uV表示)。这些是超过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

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

在此先感谢,任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

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

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

这非常适合您上面的玩具数据。 对于拐点处的斜率。我会将二阶导数设置为零并求解x。然后计算该x处的第一个dirivative。

但我认为你更喜欢后勤增长模式。