与R

时间:2017-01-22 12:32:43

标签: r shiny regression curve-fitting

我是一名化学工程师,也是R的新手。我正在尝试在R(最终是一个闪亮的应用程序)中构建一个工具来分析相位边界。使用模拟我得到的输出显示了两条曲线,可以用四阶多项式很好地表示。数据如下:

https://i.stack.imgur.com/8Oa0C.jpg

我必须遵循的程序使用两条曲线之间的差异来产生第二条曲线。为了比较曲线,数据必须作为压力的函数以设定的增量增加,例如0.2。可以看出,来自模拟的数据不是增量的,并且没有办法比较基于输出

要解决此问题,我在excel中对每条曲线执行了以下步骤:

  • 我用x轴上的压力和y轴上的温度绘制数据
  • 使用四阶多项式找到最佳拟合线
  • 使用曲线方程计算设定压力增量下的温度

由此,我能够以数学方式比较曲线并产生所需的输出。

有没有人有任何建议如何在R中执行此操作,或者是否有更多统计或简化方法我错过了(提取贝塞尔曲线点等)?

作为一个进一步的细节,我已经获取数据并使用tidyr合并它,以便图表(总共4个)显示在三列中,图表标题,温度和压力。我在关注Datacamp上的ggplot2课程后做了这个,但是在进行回归等时不确定这种格式是否合适?我的数据集的负责人可以在这里看到:

https://i.stack.imgur.com/WeaPz.jpg

我是R的新手,如果这是一个愚蠢的问题并且我使用了错误的条款,那么道歉。

1 个答案:

答案 0 :(得分:1)

虽然我同意@Jaap的评论,但在R中多项式回归非常容易。我会给你第一行:

x <- c(0.26,3.33,5.25,6.54,7.38,8.1,8.73,9.3,9.81,10.28,10.69,11.08,11.43,11.75,12.05,12.33)
y <- c(16.33,24.6,31.98,38.38,43.3,48.18,53.08,57.99,62.92,67.86,72.81,77.77,82.75,87.75,92.77,97.81)
lm <- lm(y ~ x + I(x^2) + I(x^3) + I(x^4))

现在你的多项式系数在lm$coef,你可以提取它们并轻松绘制拟合线,例如:

coefs <- lm$coef
plot(x, y)
lines(x, coefs[1] + coefs[2] * x + coefs[3] * x^2 + coefs[4] * x^3 + coefs[5] * x^4)

也可以使用lm$fit简单地给出拟合值。为第二条曲线构建相同的多项式并比较系数,而不仅仅是“线”。