从估计方程 y = A * exp(x * B) 计算 A 和 B 的值
Calculate the values of A and B from the estimated equation y = A * exp(x * B)
所以我 运行 此代码生成我从给定数据集估计的指数曲线的 x 和 y 值:
qplot(x,y,data=dat) + stat_smooth(aes(outfit=fit1<<-..x..),
method = 'nls', method.args = list(start = c(a=1, b=0)),
formula = y~a*exp(b*x), se = FALSE)
qplot(x,y,data=dat) + stat_smooth(aes(outfit=fit2<<-..y..),
method = 'nls', method.args = list(start = c(a=1, b=0)),
formula = y~a*exp(b*x), se = FALSE)
这给了我 fit1
和 fit2
的值或曲线的 x 轴和 y 轴的值列表。现在我想使用 x 轴和 y 轴的这两个向量来估计用于预测它们的指数方程中 A 和 B 的值 y=A*exp(B*x)
。
excel 使用以下等式相对容易地做到这一点:
A=EXP(INDEX(LINEST(LN(B1:B10),A1:A10),1,2))
B=INDEX(LINEST(LN(B1:B10),$A:$A),1)
是否有可以在 R
中复制它的方法或包?我听说 easynls
是一种选择,但收效甚微,因为它不断返回错误信息:
My code: fit = dataframe(fit1,fit2)
nlsplot(fit, model=6, start=c(a=1, b=0))
Error in nls(y ~ a * exp(b * x), start = list(a = s[1], b = s[2]),
data = data, : number of iterations exceeded maximum of 6000
我需要一种方法来读取我已有的 x 和 y 的估计值,然后在方程是指数格式的情况下生成 A 和 B 的值。
示例数据:
fit1 = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
fit2 = c(.5, .45, .4, .35, .3, .25, .2, .15, .1, .05)
这样做的目的是获取方程的系数,然后将其作为函数应用于其他示例。
虽然同意@JuliusVainora的评论,但问题陈述似乎对残差没有任何限制。这是一个小例子。由于您不提供 x,y 数据,我做了一些。
## Example data
set.seed(123)
x = runif(25,0,2)
y = 3.2 * exp(1.5*x) + rnorm(25, 0.1)
## Estimate A & B
z = log(y)
Model = lm(z ~ x)
A = exp(Model$coefficients[1])
B = Model$coefficients[2]
## Visual check of answer
plot(x,y, pch=20)
X2 = seq(0,2,0.1)
Y2 = A*exp(B*X2)
lines(X2, Y2, col="red")
所以我 运行 此代码生成我从给定数据集估计的指数曲线的 x 和 y 值:
qplot(x,y,data=dat) + stat_smooth(aes(outfit=fit1<<-..x..),
method = 'nls', method.args = list(start = c(a=1, b=0)),
formula = y~a*exp(b*x), se = FALSE)
qplot(x,y,data=dat) + stat_smooth(aes(outfit=fit2<<-..y..),
method = 'nls', method.args = list(start = c(a=1, b=0)),
formula = y~a*exp(b*x), se = FALSE)
这给了我 fit1
和 fit2
的值或曲线的 x 轴和 y 轴的值列表。现在我想使用 x 轴和 y 轴的这两个向量来估计用于预测它们的指数方程中 A 和 B 的值 y=A*exp(B*x)
。
excel 使用以下等式相对容易地做到这一点:
A=EXP(INDEX(LINEST(LN(B1:B10),A1:A10),1,2))
B=INDEX(LINEST(LN(B1:B10),$A:$A),1)
是否有可以在 R
中复制它的方法或包?我听说 easynls
是一种选择,但收效甚微,因为它不断返回错误信息:
My code: fit = dataframe(fit1,fit2)
nlsplot(fit, model=6, start=c(a=1, b=0))
Error in nls(y ~ a * exp(b * x), start = list(a = s[1], b = s[2]), data = data, : number of iterations exceeded maximum of 6000
我需要一种方法来读取我已有的 x 和 y 的估计值,然后在方程是指数格式的情况下生成 A 和 B 的值。
示例数据:
fit1 = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
fit2 = c(.5, .45, .4, .35, .3, .25, .2, .15, .1, .05)
这样做的目的是获取方程的系数,然后将其作为函数应用于其他示例。
虽然同意@JuliusVainora的评论,但问题陈述似乎对残差没有任何限制。这是一个小例子。由于您不提供 x,y 数据,我做了一些。
## Example data
set.seed(123)
x = runif(25,0,2)
y = 3.2 * exp(1.5*x) + rnorm(25, 0.1)
## Estimate A & B
z = log(y)
Model = lm(z ~ x)
A = exp(Model$coefficients[1])
B = Model$coefficients[2]
## Visual check of answer
plot(x,y, pch=20)
X2 = seq(0,2,0.1)
Y2 = A*exp(B*X2)
lines(X2, Y2, col="red")