【问题标题】:Function analysis, fitting功能分析、拟合
【发布时间】:2017-03-02 03:48:31
【问题描述】:

我有两个数据集,我想找到最合适的函数类型:

x <- c(10, 40, 70, 100, 130, 160, 190, 220)
y1 <- c(41.8, 45.2, 50.8, 62.5, 73.2, 86.9, 95.4, 107.9)
y2 <- c(1.9, 34.3, 269.2, 1119.4, 2627.1, 5801.2, 11794.8, 24139.9)

par(mfrow = c(1,2))
plot(x, y1); plot(x, y2)

我想说一下 y1 和 y2 的趋势,比如 y1 似乎遵循线性趋势,而 y2 看起来是指数趋势。 首先,我尝试了符号回归,尤其是 'rgp' 包,但文档非常差,而且它也有一些问题(在存档模式下不起作用,等等)。 不幸的是,没有任何其他符号回归包。

你有什么建议,我该怎么办? 我如何说出/证明这样的结论:“y1 在 x 的函数中遵循线性趋势”?

【问题讨论】:

  • 你有什么编程问题?考虑其他网站,例如 stats.stackexchange.com
  • @Zheyuan Li 是的,但是您可以根据拟合度和复杂性来比较模型,例如在具有 Pareto 前沿的图中。
  • @Llopis rgp 使用基因编程,但也许还有其他有用的方法。
  • 换句话说,您对 Stack Overflow 社区有什么期望?建议使用哪个包?建议如何执行线性趋势?

标签: r function symbolic-math data-fitting model-fitting


【解决方案1】:

使用线性模型:

summary.lm(lm(y1~x))
...
     Multiple R-squared:  0.9802,   Adjusted R-squared:  0.9768  F-statistic:
     296.4 on 1 and 6 DF,  p-value: 2.46e-06

y1_r = 0.33044 * x + 32.46230

所以 97% 的 A-R-squered 和小的 p 值很遗憾你有线性趋势。 对于 y2,您可以以相同的方式使用非线性回归。

r <-  lm(y1 ~ x)
nr <- nls(y1 ~ exp(a + b * x), start = list(a = 0, b = 0))
plot( x,y1)
lines(x,predict(nr))
lines(x, predict(r), col = 'red')

您可以通过比较残差的简单 SD 来决定哪个模型更好

Residual standard error: 3.732 
Residual standard error: 2.515

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-05
    • 1970-01-01
    • 2015-02-06
    • 2010-12-18
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多