【问题标题】:Predicting data from a power curve manually手动从功率曲线预测数据
【发布时间】:2017-06-22 21:29:04
【问题描述】:

我有一系列数据拟合幂曲线,我使用 R 中的预测函数允许我根据额外的 x 值预测 y 值。

set.seed(1485)
len <- 24
x <- runif(len)
y <- x^3 + rnorm(len, 0, 0.06)
ds <- data.frame(x = x, y = y)


mydata=data.frame(x,y)
z <- nls(y ~ a * x^b, data = mydata, start = list(a=1, b=1))
#z is same as M!

power <- round(summary(z)$coefficients[1], 3)
power.se <- round(summary(z)$coefficients[2], 3)
plot(y ~ x, main = "Fitted power model", sub = "Blue: fit; green: known")
s <- seq(0, 1, length = 100)
lines(s, s^3, lty = 2, col = "green")
lines(s, predict(z, list(x = s)), lty = 1, col = "blue")
text(0, 0.5, paste("y =x^ (", power, " +/- ", power.se,")", sep = ""), pos = 4)

我如何在此幂函数的基础上根据附加的 x 值手动计算估计的 y 值,而不是在此处使用预测函数。如果这只是一个简单的线性回归,我会计算斜率和 y 截距并通过

计算我的 y 值
y= mx + b

我可以从 z 的输出中使用类似的等式,让我可以从额外的 x 值估计 y 值吗?

> z
Nonlinear regression model
  model: y ~ a * x^b
   data: mydata
    a     b 
1.026 3.201 
 residual sum-of-squares: 0.07525

Number of iterations to convergence: 5 
Achieved convergence tolerance: 5.162e-06

【问题讨论】:

    标签: r curve-fitting prediction non-linear-regression


    【解决方案1】:

    除了使用您建模的幂方程之外,您可以按照相同的方式进行操作。您可以访问模型使用z$m$getPars()计算的参数

    下面是一个简单的例子来说明:

    predict(z, list(x = 1))
    

    结果:1​​.026125

    等于

    的结果
    z$m$getPars()["a"] * 1 ^ z$m$getPars()["b"]
    

    等于 y = a * x^b

    【讨论】:

      【解决方案2】:

      这里有一些方法。

      1) with 这会根据系数评估公式:

      x <- 1:2 # input
      
      with(as.list(coef(z)), a * x^b)
      ## [1] 1.026125 9.437504
      

      2) attach我们也可以使用attach,尽管它通常不被接受:

      attach(as.list(coef(z)))
      a * x^b
      ## [1] 1.026125 9.437504
      

      3) 显式 显式定义:

      a <- coef(z)[["a"]]; b <- coef(z)[["b"]]
      a * x^b
      ## [1] 1.026125 9.437504
      

      4) eval 这个从z 中提取公式,这样我们就不必再次指定它了。 formula(z)[[3]] 是用于生成 z 的公式的右侧。有时不赞成使用eval,但这确实避免了 公式的冗余说明。

      eval(formula(z)[[3]], as.list(coef(z)))
      ## [1] 1.026125 9.437504
      

      【讨论】:

        猜你喜欢
        • 2021-11-09
        • 2013-01-26
        • 1970-01-01
        • 2023-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-14
        • 2013-04-30
        相关资源
        最近更新 更多