4 votos

Montaje de funciones condicionales en nls

Estoy tratando de encajar dos ecuaciones con nls() en función de R. Las dos funciones son:

$f(x) = c_{1} \exp\left(-\left(\frac{x-\mu}{\sigma_{(x)}}\right)^2\right)$

donde $\sigma_{(x)} = \sigma_{11}$ si $x \le \mu$ $\sigma_{(x)} = \sigma_{12}$ si $x > \mu$

y

$f(x) = a K \exp\left(- \frac{a}{b} \exp\left(-b x\right) - bx\right)$

A continuación es mi intento con facticios datos:

x <- seq(from = 17, to = 47, by = 5)
y <- c(26.2, 173.6, 233.9, 185.9, 115.4, 62.0, 21.7)
Data <- data.frame(y, x)
Fit1 <- nls(formula =  y ~ if (x <= Mu) Mean <- c1*exp(-((x-Mu)/Sigma11)^2) else Mean     <- c1*exp(-((x-Mu)/Sigma12)^2),
                 data = Data, start = list(c1 = 240, Mu = 25, Sigma11 = 5, Sigma12 = 14), trace = TRUE)



Fit2 <- nls(formula =  y~K*a*exp(-(a/b)*exp(-b*x)-b*x), data = Data,
                start = list(K=4250, a=10, b=0.1), trace = TRUE)

Tanto los códigos de producir mensajes de Error y Advertencia. Cualquier ayuda para averiguar estos problemas será muy apreciada. Gracias

4voto

ESRogs Puntos 1381

En el primer caso, nls no será digerir cualquier ifs o superior expresiones... usted puede usar ifelse, sin embargo esto puede hacer que esta función demasiado complejo para que efectivamente ajuste -- nls no es una varita mágica.

En el segundo caso, el algoritmo estándar muere en error numérico -- el enfoque habitual en este caso es la de alterar el punto de partida o cambiar el método que se utiliza; por ejemplo

Fit2<-nls(y~K*a*exp(-(a/b)*exp(-b*x)-b*x),Data,
 start=list(K=4250,a=10,b=0.1),trace=T,algorithm="port")

hacer converger (consulte ?nls para una lista de métodos).

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X