Нелинейная регрессия в R / S - PullRequest
0 голосов
/ 27 июля 2011

У меня проблема, связанная с R / S / нелинейной регрессией, и я не программист на R, поэтому мне нужна помощь.

У меня есть два массива - tt и td.

Мне нужно найти параметры a, b и c, чтобы сумма наименьших квадратов была минимальной для нелинейной функции:

td / tt - a * exp( b * tt ) + c 

Понятия не имею, как это сделать. Я попробовал nls() функцию, nls2() Над не повезло ...

Заранее спасибо.

EDIT:

Мои данные:

td <-as.array(0.2, 0.4, 0.8, 1.5, 3);

tt <-as.array(0.016, 0.036, 0.0777, 0.171, 0.294);

Используя метод из ответа ниже, я получаю нормальные значения для случайных данных, но используемые мной данные возвращают значение Missing или бесконечность, полученные при оценке сообщения модели.

Извините, что не предоставил данные раньше.

1 Ответ

4 голосов
/ 27 июля 2011

Ваши данные:

n <- 100
td <- runif(n)
tt <- runif(n)
data <- data.frame(td = td, tt = tt)

Составленный результат функции

a <- 0.5
b <- 2
c <- 5
y <- jitter(td / tt - a * exp( b * tt ) + c)

(На практике вы не будете знать, что такое a, b и c, до тех пор, пока потом. Здесь мы используем их для сравнения с ответом.)

Фитинг:

nls(
  y ~ td / tt - a * exp( b * tt ) + c, 
  data = data, 
  start = list(a = 1, b = 1, c = 1)
)

Ответ:

Nonlinear regression model
  model:  y ~ td/tt - a * exp(b * tt) + c 
   data:  data 
     a      b      c 
0.4996 2.0008 4.9994 
 residual sum-of-squares: 0.0001375

Number of iterations to convergence: 7 
Achieved convergence tolerance: 1.604e-06
...