R + пользовательская функция - PullRequest
1 голос
/ 07 декабря 2009

У меня есть ситуация, в которой я должен дать формулу в качестве ввода для функции nls(). У меня есть данные, которые находятся между временем и дисперсией. Например:

Time Variance
1     0.15
2     0.23
3     0.67
4     0.85

Теперь я использую формулу Vt = ((1-e ^ kt) / kt)) (q ^ 2) / 2k , где Vt - дисперсия во времени т . У меня есть две переменные (k, q) в приведенном выше уравнении. Я должен определить k (шляпа) и q (шляпа) . Могу ли я определить приведенную выше формулу как пользовательскую формулу и указать ее в качестве аргумента функции nls()?

1 Ответ

2 голосов
/ 08 декабря 2009

Вы пробовали это?

> d = data.frame(t=1:4,V=c(0.15,0.23,0.67,0.85))
> Vt = function(t,k,q) {((1-exp(k*t))/(k*t))*q^2/(2*k)}
> nls(V~Vt(t,k,q),data=d,start=list(k=0.1,q=0.1),trace=TRUE)
1.483693 :  0.1 0.1 
1.099885 :  -7.358501 -3.593847 
Error in numericDeriv(form[[3L]], names(ind), env) : 
  Missing value or an infinity produced when evaluating the model

На самом деле, конечно, не работает, но это потому, что я не сел и выяснил разумные начальные значения и т.д .. (Если вы действительно собираетесь чтобы попытаться подогнать двухпараметрическую нелинейную модель к 4 точкам данных, вы будет много неприятностей. Я надеюсь, что это просто подвыборка ваши данные ...)

В этом случае, конечно, вы также можете просто написать формулу в NLS ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...