2016-02-03 5 views
0

Je voudrais adapter les courbes exponentielles aux ensembles de données de profils de température verticale. Parfois, la forme exponentielle est positive et d'autres fois négative selon les conditions de température de l'air. En fin de compte je voudrais ajuster chaque courbe puis extraire le gradient et intercepter pour une série de profils de température individuels (faire une boucle de l'ajustement et l'extraction des paramètres)Ajustement de la courbe exponentielle et extraction du gradient et de l'ordonnée à l'origine

J'ai essayé plusieurs suggestions sur stackoverflow et Google et ne peut pas passer l'étape «estimation initiale» ... Toute aide serait appréciée.

Ma dernière et tentative la plus prometteuse est ci-dessous (tiré d'un exemple sur stackoverflow - (whuber):

Mes données:

Temps1<-c(284.1875, 285.6550, 286.2342, 286.9142, 287.7900,   
290.3492,295.2517, 298.1608) 
Temps2<-c(275.6958, 275.0583, 274.7858, 274.4458, 273.9900, 273.1675, 
272.3225, 271.5875) 
Depths<-c(-100,-70,-56,-42,-28,-14,0,7) 

d <- data.frame(x = Temps1, y = Depths) 
c.0 <- min(d[,1]) * 0.5 
model.0 <- lm(log(Temps1) - c.0 ~ Depths, data=d) 
start <- list(a=exp(coef(model.0)[1]), b=coef(model.0)[2], c=c.0) 
model <- nls(d[,1]~ a * exp(b * Depths) + c, data = d, start = start) 

Je suis coincé avec l'erreur: « Erreur dans nlsModel (formule, mf, start, wts): matrice de gradient singulier aux estimations initiales des paramètres En outre: Messages d'avertissement: 1: En min (x): pas d'arguments non manquants à min; retourn Inf 2: In max (x): pas d'arguments non manquants à max; r eturning -Inf "

+0

cette estimation initiale semble fonctionner liste '(a = 1, b = 1, c = 1)' - aussi vous devez passer le nom de la variable plutôt que celui de la matrice à partir de o: 'nls (x ~ a * exp (b * y) + c, données = d, start = liste (a = 1, b = 1, c = 1)) ' – user20650

Répondre

0

Nous vous suggérons d'utiliser l'algorithme "plinear". Notez que dans la sortie .lin1 est a et .lin2 est c. Vous n'avez pas besoin à partir des valeurs pour les paramètres linéaires:

> nls(x ~ cbind(exp(b * y), 1), d, alg = "plinear", start = list(b = coef(model.0)[2])) 
Nonlinear regression model 
    model: x ~ cbind(exp(b * y), 1) 
    data: d 
     b  .lin1  .lin2 
    0.03831 10.42913 284.57042 
residual sum-of-squares: 1.061 

Number of iterations to convergence: 7 
Achieved convergence tolerance: 3.572e-06