Есть ли функция R, которая находит параметры для произвольных моделей? - PullRequest
1 голос
/ 02 ноября 2019

Я пытаюсь подобрать модель y = c0 * log (c1 * x + 1), где y и x - мои данные, а c0 и c1 - параметры для модели. Я знаю, что команда «fit» в Matlab может сделать это, но я пытаюсь сделать это в R. Мне было интересно, кто-нибудь может предложить предложения по функции, которая может выполнить это.

model <- y ~ c0*log(c1*x + 1)

IЯ ожидаю логарифмическую кривую.

Ответы [ 2 ]

1 голос
/ 02 ноября 2019

Это проблема нелинейной регрессии, где y равно правой части плюс ошибка.

Чтобы соответствовать такой модели, используйте nls в базе R (см. ?nls для получения дополнительной информации) или любую из ряда других функций нелинейной регрессии. См. https://cran.r -project.org / web / views / Optimization.html . С учетом определенных предостережений nls найдет параметры, которые минимизируют сумму квадратов ошибок с учетом модели и начальных значений.

# create test data
set.seed(123)
c0 <- c1 <- 1
x <- 1:10
y <- c0 * log(c1 * x + 1) + rnorm(10)/10

# fit model to the data
fm <- nls(y ~ c0 * log(c1 * x + 1), start = list(c0 = mean(y), c1 = 1))
fm

, что дает:

Nonlinear regression model
  model: y ~ c0 * log(c1 * x + 1)
   data: parent.frame()
    c0     c1 
0.9207 1.2210 
 residual sum-of-squares: 0.07622

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

Для графического отображенияоценить подгонку:

plot(y ~ x, pch = 20)
lines(fitted(fm) ~ x, col = "red")

screenshot

0 голосов
/ 02 ноября 2019

Попробуйте fit.models (проверить: https://cran.r -project.org / web / packages / fit.models / fit.models.pdf ). Желаем удачи!

...