14 votos

método fácil de aplicar para ajustar una función de potencia (regresión)

Quiero ajustar a un conjunto de datos una función de potencia ( y=AxBy=AxB ). ¿Cuál es el mejor y más fácil método para hacerlo? Necesito el AA y BB También los parámetros. Estoy utilizando en general los datos financieros en mi proyecto, que se parece a esto:

8553600 458.2
17193600    373.6
25833600    694.16
34646400    738.33
44064000    817.89
54259200    1040.67
67910400    1032.69
76291200    1222.1
84844800    1245.65
94089600    1217.44
102211200   1579.38
110592000   1859.24
118886400   1711.67
127612800   2303.62
136684800   2658.26
219196800   3669.23
225676800   3525.02
225763200   3749.27

Necesito implementar el algoritmo en un lenguaje similar a Java llamado ActionScript.

18voto

Andrew Puntos 140

Existe el enfoque obvio de proceder sobre la base de tomar el logaritmo de ambos lados de su fórmula de regresión:

lny=ln(axb)lny=ln(axb)

lny=lna+blnxlny=lna+blnx

que puede verse como una expresión de la forma

v=k+buv=k+bu

donde v=lnyv=lny , u=lnxu=lnx y k=lnak=lna .

Ahora una regresión lineal en las variables vv y uu se aplica.

En particular, las fórmulas 16, 20, 27 y 28 de esta página ahora se aplica.

Una vez que tenga la pendiente bb y la intercepción kk de la transformación lineal, aa es sólo la exponencial del intercepto ( expkexpk ), y bb es la pendiente de la línea transformada.

Aquí observo la posible advertencia de que los parámetros de ajuste están sesgados hacia los datos con ordenadas de pequeña magnitud. El riguroso La forma de hacerlo sería tratar los parámetros de la regresión lineal como provisionales y luego aplicar un algoritmo de mínimos cuadrados no lineales como el de Levenberg-Marquardt a los datos, utilizando los parámetros de la regresión lineal como punto de partida. Sin embargo, esto puede ser necesario o no; realmente depende de los datos que tenga.


Voy a pulir los comentarios que hice antes: de nuevo, el problema de usar el logaritmo para linealizar tu función no lineal es que tiende a enfatizar demasiado los errores en los valores pequeños de y. Recuerda que la suposición de los mínimos cuadrados lineales es que las abscisas son exactas, pero las ordenadas están contaminadas por el error.

En otras palabras, el yiyi son en realidad de la forma ˆyi±σi^yi±σi donde el ˆyi^yi son los "valores verdaderos" (presumiblemente desconocidos), y los σiσi son incertidumbres inherentes. Si se toman los logaritmos de los yiyi las incertidumbres también se transforman, y tenemos que tenerlo en cuenta.

La fórmula clave es que si el yiyi se transforman mediante una función f(y)f(y) El σiσi se transforman según f(yi)σi .

Para el caso que nos ocupa, la función objetivo que tenemos que minimizar ahora es de la forma

f(a,b)=iy2i(lnyilnablnxi)2

y tenemos que modificar las fórmulas de la regresión lineal en consecuencia:

m=iy2i

ˉx=iy2ilnxim

t=iy2i(lnxiˉx)2

por lo que

b=iy2ilnyi(lnxiˉx)t

y

a=exp(iy2ilnyimbˉx)

Estos deberían ser mejores valores provisionales para su posterior pulido.


Resulta que para un ajuste no lineal separable (lineal en uno de los parámetros), el problema NLLS se simplifica enormemente.

Recuerde que el actual La cantidad que tenemos que minimizar es

F(a,b)=i(yiaxbi)2

Si tomamos el gradiente F(a,b) :

F(a,b)=(2aix2bi2ixbiyi2ailn(xi)x2bi2iln(xi)xbiyi)T

igualar ambos componentes a 0, y luego eliminar el parámetro lineal a obtenemos la ecuación no lineal univariante en b :

(ixbiyi)(iln(xi)x2bi)(ix2bi)(iln(xi)xbiyi)=0

que se puede atacar con técnicas estándar, por ejemplo, el método de la secante o el método de Newton. Pero, ¿cómo empezamos la iteración? Pues con el método provisional b que obtuvimos antes con la regresión lineal (ponderada).

Habiendo conseguido b Ahora es muy sencillo conseguir a :

a=(ixbiyi)/(ix2bi)

y ya tienes tus parámetros.

0 votos

Estoy trabajando con datos financieros. He probado su solución que también se describe aquí: mathworld.wolfram.com/LeastSquaresFittingPowerLaw.html pero creo que tengo el problema que mencionas. Lo he descrito aquí: stackoverflow.com/questions/3599109/power-function-fit . Sólo para estar seguros Usted sugiere: ¿primero la regresión lineal y luego Levenberg-Marquardt?

0 votos

Esto debería funcionar; de hecho, incluso se pueden simplificar las fórmulas de Levenberg-Marquardt en este caso, ya que es fácil expresar las derivadas parciales de axb con respecto a a y b .

0 votos

Pero, ¿cómo se puede gestionar la operación de inversión? Invertir una matriz NxN nunca fue una tarea fácil... ¿No hay forma de evitarlo?

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