【问题标题】:How to plot a log curve in R?如何在R中绘制对数曲线?
【发布时间】:2015-09-25 11:13:22
【问题描述】:

我有以下一组数据:

x = c(8,16,64,128,256)
y = c(7030.8, 3624.0, 1045.8,  646.2,  369.0)

在绘制时,它看起来像指数衰减或负 ln 函数。

我正在尝试为这些数据拟合一条平滑曲线,但我不知道如何。我已经尝试过 nls 和 lm 函数,但我似乎无法做到正确。网上的例子对于我所拥有的简单数据来说步骤太多了,我理解的不够深入,无法根据自己的需要修改例子。任何帮助或建议将不胜感激。谢谢。

编辑:当我说我尝试了 nls 和 lm 函数时,我的意思是无论我尝试什么参数,产生的线都是线性的。 当我说的步骤太多时,我的意思是我发现的示例是用于使用 2 个自变量进行预测,或者用于创建多条拟合线。 我要问的是,将 简单 平滑线拟合到数据的最佳方法是什么,当绘制成图形时,这些数据看起来像指数衰减或负 ln。线的方程是什么并不重要,它的目的是作为数据形状的参考。

【问题讨论】:

  • 日志是一个函数,curve(log(x))
  • 显示您尝试过的代码并描述它是如何失败的。您需要选择一种适合数据的方法。如果您需要统计方面的建议,您应该向Cross Validated 询问。怎么可能步骤是“太多”?确保你是在寻求帮助,而不是仅仅让别人为你做这件事。

标签: r plot curve-fitting curve logarithm


【解决方案1】:

将曲线拟合到函数的一个好方法是内置的nls 函数,它执行非线性最小二乘优化。例如,如果你想拟合模型y = b * x^e,你可以这样做:

n <- nls(y ~ b * x ^ e, data = data.frame(x, y), start = c(b = 1000, e = -1))

?nlsthis walkthrough,可以告诉您有关这些选项的更多信息)。然后你可以在你的点上绘制曲线:

plot(x, y)
curve(predict(n, newdata = data.frame(x = x)), add = TRUE)

您可以尝试一些可能适合您的数据的其他模型(由 nls 中的公式指定)。

【讨论】:

    【解决方案2】:

    也许“lowess”是您正在寻找的?试试:

    plot(y ~ x)
    lines(lowess(y ~ x))
    

    该功能只是连接点。听起来您更喜欢可以抚平肘部的东西。原则上,“黄土”对此很有用,但您这里没有足够的数据点来实现它。

    【讨论】:

      猜你喜欢
      • 2021-07-05
      • 2012-04-20
      • 1970-01-01
      • 2016-11-29
      • 2015-11-20
      • 1970-01-01
      • 1970-01-01
      • 2012-02-21
      相关资源
      最近更新 更多