[R-es] errores al encontrar parámetros de ajuste iniciales en R

Olivier Nuñez onunez en iberstat.es
Dom Dic 5 16:10:18 CET 2010


Daniel,

para que te podamos ayudar,
creo que lo más sencillo sería que mandes una muestra (o al menos una  
submuestra) de tus datos.
Un saludo. Olivier

--  
____________________________________

Olivier G. Nuñez
Email: onunez en iberstat.es
Tel : +34 663 03 69 09
Web: http://www.iberstat.es

____________________________________




El 05/12/2010, a las 15:26, Daniel Arismendi escribió:

> Buenas Olivier.
>
> Gracias por tu rápida respuesta
>
> Todo lo que has dicho me parece excelente pero el detalle esta en  
> que mi data experimental esta tomada con respecto a la longitud de  
> onda y la densidad de energía.
>
> Lo que tu afirmas, tomando en cuenta la frecuencia, es una forma de  
> escribir la ecuación para la densidad de energía en función de  
> dicha frecuencia que básicamente proviene de decir que:
>
>
>
> donde: lamda es la longitud de onda
>            c es la velocidad de la luz
>            v es la frecuencia.
>
> que sucede si en este caso trabajo con la frecuencia podría estar  
> introduciendo errores sistemáticos al problema y pues eso me hace  
> pensar que el valor de h para la constante de Planck no sera el mas  
> óptimo.
>
>
> puedes corroborarlo viendo este enlace sobre el tema:
> http://en.wikipedia.org/wiki/Planck's_law
>
>
> Lo que estoy tratando entonces de hacer es encontrar los parámetros  
> iniciales para la función de ajuste pero por las dos maneras que e  
> planteado me encuentro con esos 2 errores que coloque en mi primer  
> mensaje y pues  e recurrido a ustedes por falta de bibliografía  
> acerca de estos en Internet.(que de seguro debe haber pero no  
> encuentro una solución clara al problema que se me presenta)
>
> El 5 de diciembre de 2010 15:08, Olivier Nuñez <onunez en iberstat.es>  
> escribió:
> Daniel
>
> al contestar rápidamente cometí un error.
> Es más bien la función
>
> (b1, b2) -> { (b1/x_i^3) / (exp(b2/x_i/T) - 1 ) }_{ i = 1..n }
>
> que ha de ser inyectiva para que todo vaya bien (donde los x_i son  
> los periodos de onda considerados en tu experimento).
> Asegurarse de que dicha función es inyectiva no es trivial pero con  
> un poco de algebra se hace.
> Un saludo. Olivier
>
>
> --  
> ____________________________________
>
> Olivier G. Nuñez
> Email: onunez en iberstat.es
> Tel : +34 663 03 69 09
> Web: http://www.iberstat.es
>
> ____________________________________
>
>
>
>
> El 05/12/2010, a las 13:39, Daniel Arismendi escribió:
>
>> Buenas dias comunidad antes que nada gracias a las ultimas respuestas
>> obtenidas por parte de ustedes.
>>
>> Mientras me leia las paginas que me dejaron para guiarme me  
>> dedique a buscar
>> el libro correspondiente a nlrwr
>>
>> Nonlinear Regression with R de Christian Ritz • Jens Carl Streibig  
>> el cual
>> les  puedo enviar por correo al que lo desee para que lo lean y lo  
>> tengan
>> dentro de su repertorio bibliografico pues es al que hacen  
>> referencia en
>> estos casos de regresiones no lineales la gente de R
>>
>> Estuve resolviendo lo del problema del parametro de ajuste para la  
>> constante
>> de Planck mediante minimos cuadrados y pues me tope con estos  
>> problemas.
>>
>> En primer lugar como no soy tan agil encontrando los parametros  
>> para mi
>> funcion de ajuste en este caso
>>
>> fun.ajust<-nls( y ~ (b1/x^5) * (1 / (exp(b2/x*T) - 1) ), data=datos,
>> trace=TRUE,
>>                      start=c(b1 = 0.01, b2 = 0.02) )
>>
>> me encuentro siempre con estos errores :
>>
>> 1*- Error in nls(... :
>>       step factor 0.000488281 reduced below 'minFactor' of  
>> 0.000976562
>> 2*- Error in nls(... :
>>       singular gradient
>> 3*- Error in nlsModel(formula, mf, start, wts) :
>>       singular gradient matrix at initial parameter estimates
>>
>> Estos solamente sin usar algun algoritmo para encontrar los minimos
>> cuadrados pues cuando use los algoritmos siguientes encontraba otros
>> errores:
>>
>> algorithm: specification of estimation algorithm:
>> – "default": the Gauss-Newton algorithm (the default)
>> – "plinear": for models with conditionally linear parameters
>> - "port": for models with constraints on the parameters
>> (can be used with the arguments lower/upper)
>>
>> Dado que tirar piedras no me funciona pues los errores siguen  
>> saliendo y la
>> experiencia es algo que te dice como podrian ser los parametros  
>> iniciales de
>> ajuste me dedique a usar 2 maneras a traves de las cuales pudiera  
>> encontrar
>> mis parametros de ajuste.
>>
>>
>> 1*-Hago uso de la libreria nlstools
>>> library(nlstools)
>>> modelo<-V2~(b1/V1^5) * (1 / (exp(b2/V1*T) - 1)
>>> preview(formula = modelo, data = datos, start = start =
>> list(b1=0.01,b2=0.02))
>>> Error: no se pudo encontrar la función "preview"
>>
>> Referencia a la funcion preview:
>>  Details
>>
>> The function preview helps defining the parameter starting values  
>> prior
>> fitting the model. It provides a superimposed plot of observed  
>> (circles) and
>> predicted (crosses) values of the dependent variable versus one of  
>> the
>> independent variables with the model evaluated at the starting  
>> values of the
>> parameters. The function overview returns the parameters  
>> estimates, their
>> standard errors as well as their asymptotic confidence intervals  
>> and the
>> correlation matrix (alternately, the function confint provides better
>> confidence interval estimates whenever it converges).  
>> plotfitdisplays a
>> superimposed plot of the dependent variable versus one the  
>> independent
>> variables together with the fitted model
>>
>>
>> 2*- parecida a preview pero haciendo uso de una funcion  
>> predefinida y la
>> funcion curve superpuesta sobre los puntos de los datos  
>> experimentales:
>>
>>> datos<-read.table("datos.txt")
>>
>>> attach(datos)
>>
>>> plot(V2~V1,data=datos,xlab="longitud de onda",ylab="densidad de
>> energia")
>>> T<-1595
>>> modelo1<- function(V1,b1,b2){(b1/V1^5) * (1 / (exp(b2/V1*T) - 1) )}
>>> plot(V2~V1,data=datos,ylim=c(0,1.85e3),xlab="longitud de
>> onda",ylab="densidad de energia")
>>> curve(modelo(V1,b1=0.01,b2=0.02),add=TRUE)
>>       Error en curve(modelo(V1, b1 = 0.01, b2 = 0.02), add = TRUE) :
>>       'expr' must be a function, call or an expression containing 'x'
>>
>>
>> Referencia a esta segunda forma la encontre en el libro de nlrwr.
>>
>> Agradeceria si alguien conoce de estos errores como podria  
>> solucionarlos
>> pues es poca la bibliografia respecto a estos en la web y no logro  
>> terminar
>> de hacer la funcion de ajuste.
>>
>> Saludos a toda la comunidad.
>>
>> [[alternative HTML version deleted]]
>>
>> _______________________________________________
>> R-help-es mailing list
>> R-help-es en r-project.org
>> https://stat.ethz.ch/mailman/listinfo/r-help-es
>
>



Más información sobre la lista de distribución R-help-es