Рассчитайте значения A и B из расчетного уравнения y = A * exp (x * B) - PullRequest
0 голосов
/ 14 декабря 2018

Итак, я запустил этот код, чтобы сгенерировать значения 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).

делает это относительно легко со следующими уравнениями:

A=EXP(INDEX(LINEST(LN(B1:B10),A1:A10),1,2)) 
B=INDEX(LINEST(LN(B1:B10),$A$1:$A$10),1)

Есть ли метод или пакет, который может повторить это в R?Я слышал, что easynls - это один из вариантов, но у него был небольшой успех, так как он постоянно выдает ошибку, в которой говорится:

My code: fit = dataframe(fit1,fit2)
nlsplot(fit, model=6, start=c(a=1, b=0))    

Ошибка в nls (y ~ a * exp (b *)x), start = list (a = s [1], b = s [2]), data = data,: число итераций превысило максимум 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)

Цельэто получить коэффициенты для уравнения и затем применить его как функцию к другим примерам.

1 Ответ

0 голосов
/ 14 декабря 2018

Соглашаясь с комментарием @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")

Exponential curve

...