手动预测功率曲线的数据
Predicting data from a power curve manually
我有一系列数据,我已经拟合了幂曲线,我使用 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
除了使用您建模的幂方程外,您可以采用相同的方式进行计算。您可以使用 z$m$getPars()
访问模型计算的参数
这里举个简单的例子来说明:
predict(z, list(x = 1))
结果:1.026125
等于
的结果
z$m$getPars()["a"] * 1 ^ z$m$getPars()["b"]
等价于 y = a * x^b
这里有一些方法。
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
我有一系列数据,我已经拟合了幂曲线,我使用 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
除了使用您建模的幂方程外,您可以采用相同的方式进行计算。您可以使用 z$m$getPars()
这里举个简单的例子来说明:
predict(z, list(x = 1))
结果:1.026125
等于
的结果z$m$getPars()["a"] * 1 ^ z$m$getPars()["b"]
等价于 y = a * x^b
这里有一些方法。
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