Гладкая кривая полинома с четырьмя параметрами

Я работаю с моделью nls, используя эту формулу (b1 * ((b2 * x)^b4)) / (1 + ((b2 * x)^b4))^(b3 / b4)

Я использую пакет nls2 со случайным алгоритмом для поиска начальных значений. Это мой код для функции формулы и кривой:

eqn <- function(x){(b1 * ((b2 * x)^b4)) / (1 + ((b2 * x)^b4))^(b3 / b4)}


curve(eqn, data$x, data$y, col = "green", n = 6)

Я не знаю, правильно ли я использую n = "". Но я использую n = 6 в качестве длины уравнения, потому что мои данные имеют 6 значений переменных x и y.

Однако, когда я пытаюсь сделать кривую для модели, это заканчивается ошибкой: object 'b1' not found.

Как избежать этой ошибки? Я избежал этой ошибки, настроив оценочные значения переменных, которые я получаю, используя nls2 вне структуры nls2.

Например:

b1 = 1
b2 = 5
b3 = 0.7
b4 = 9.5

**С другой стороны, как настроить значения переменных внутри curve() для уравнения, не получая ошибки: object 'b1' not found., должен ли я использовать start = list()?

curve(eqn, data$x, data$y, col = "green", n = 6, start = list (b1 = 1, b2 = 5, b3 = 0.7, b = 9.5))

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


person HYDR0GEN    schedule 02.01.2020    source источник
comment
Ну, вам нужен способ передать параметры функции, то есть eqn <- function (x, b1, b2, b3, b4){...}. Правильный способ определения вашей функции зависит от того, как nls предназначен для работы.   -  person mikeck    schedule 02.01.2020
comment
Просто используйте прогноз. Вот так: подходит ‹- nls(..., данные = данные); кривая (прогноз (подгонка, новые данные = data.frame (x = x)), от = 0 до = 2)   -  person Roland    schedule 02.01.2020


Ответы (1)


Вам нужно будет определить свое уравнение, чтобы принять коэффициенты от b1 до b4 в качестве входных данных, например:

eqn <- function(x, b1, b2, b3, b4){
         (b1 * ((b2 * x)^b4)) / (1 + ((b2 * x)^b4))^(b3 / b4)
       }

Передайте коэффициенты вызывающей функции следующим образом:

curve(eqn(x, b1 = 1, b2 = 5, b3 = 0.7, b4 = 9.5), from=0, to=2, col = "green", n = 60)

Вам нужно определить начальное и конечное значения для x. Также выберите значение для "n" достаточно большое значение для плавной кривой, n на 6 не будет гладкой.

person Dave2e    schedule 02.01.2020
comment
Он работает правильно. Благодарю вас. В любом случае, можно ли установить значения переменных из оценочных значений, рассчитанных с использованием nls, а не используя определенные значения, например, b1 = 1, b2 = 5, b3 = 0.7, b4 = 9? Потому что, если бы я использовал определенные значения, то оценка nls была бы ерундой? Я пытаюсь удалить nls, тогда все работает правильно. Следовательно, я могу удалить nls? - person HYDR0GEN; 02.01.2020
comment
@ HYDR0GEN, я предлагаю вам выполнить этот процесс в несколько этапов. Сначала запустите nls и получите результаты, как только вы подтвердите успешное решение и получите коэффициенты, затем передайте коэффициенты функции кривой. Вместо индивидуального определения коэффициентов, как я сделал выше, вы должны иметь возможность передавать их как вектор. - person Dave2e; 02.01.2020
comment
Я попробую это немедленно. Спасибо за предложение. - person HYDR0GEN; 02.01.2020