Могу ли я подогнать параметры произвольной функции одной переменной к данным?

Я работаю в R. У меня есть функция (F), связывающая одну переменную (X) с другой переменной (Y). (F) имеет 3 изменяемых параметра (A, B, C), таких что Y == F(X) == G(X, A, B, C). Я хотел бы подогнать эту функцию к набору данных, который дает пары N (X, Y), находя лучшие (A, B, C).

Связь между (X) и (Y) не является ни полиномиальной, ни каким-либо распределением вероятностей. Мне любопытно, есть ли способ сделать это для произвольного (F), как определено выше.


person user1873348    schedule 03.12.2012    source источник
comment
Вы должны придумать некоторую целевую функцию для оптимизации. Как квадрат остатков. Или добавьте к нему член ошибки, который нормально распределяется или что-то в этом роде, и вы получите функцию вероятности для оптимизации. Много инструментов для этого. optim является основным. Если вы добавите термин ошибки, вы также можете использовать байесовский подход, используя BUGS, JAGS или Stan и соответствующие им пакеты R. Но я думаю, что этот вопрос не очень подходит для stackoverlow. Это слишком расплывчато и не связано с техническими вопросами программирования. Возможно, вы захотите попробовать crossvalidated.com с примером вашей функции.   -  person Sacha Epskamp    schedule 03.12.2012
comment
Хммм, перечитав ваш вопрос: если вы хотите, чтобы программное обеспечение само выдавало функцию (а не только A, B, C), взгляните на eureqa на Cornell.edu.   -  person Carl Witthoft    schedule 03.12.2012
comment
Карл, чтобы уточнить, у меня есть функция, мне просто нужны параметры. И у меня есть хорошие начальные предположения. Я думаю, что nls() в конечном итоге будет работать, но все примеры, которые я могу найти, слишком сложны для анализа без тонны контекста. Я был бы очень признателен, если бы вы могли указать мне на несколько чрезвычайно простых примеров nls().   -  person user1873348    schedule 03.12.2012
comment
Вот одна из моих старых записей. DF<-data.frame(x=1:10, y=3*(1:10)^.5+rnorm(10)) > nls(y~a*x^b, data=list(x=DF[,1], y=DF[,2]), start=list(a=3, b=.7))   -  person Carl Witthoft    schedule 03.12.2012
comment
Другой пример в вопросе. Кажется достаточно простым, но другой просит другие решения. Так что может и не помочь   -  person cfi    schedule 15.09.2015


Ответы (1)


Да, ?nls . Существует ряд пакетов нелинейной регрессии для R; nls это своего рода основная функция. Если вы никогда не использовали formulas в R, вам следует немного почитать о них в файлах справки. Но, как и в любом другом компьютерном языке, вам нужно указать некоторые начальные «предположительные» значения для ваших коэффициентов A,B,C .

например, nls(Y ~ I(A*sin(x) + B*exp(x/C)),data=x, start=list(A=1,B=.5,C=3))

person Carl Witthoft    schedule 03.12.2012