Los métodos que usaríamos para ajustar esto manualmente (es decir, de Análisis de datos exploratorios) pueden funcionar notablemente bien con dichos datos.
Deseo volver a parametrizar ligeramente el modelo para que sus parámetros sean positivos:
y=ax−b/x−−√.
Para una dada , supongamos que hay una x real única que satisface esta ecuación; llame a esto f ( y ; a , b ) o, por brevedad, f ( y ) cuando ( a , b ) se entiendan.yxf(y;a,b)f(y)(a,b)
Observamos una colección de pares ordenados donde la x i se desvía de f ( y i ; a , b ) por variables aleatorias independientes con medias cero. En esta discusión supondré que todos tienen una variación común, pero una extensión de estos resultados (usando mínimos cuadrados ponderados) es posible, obvia y fácil de implementar. Aquí hay un ejemplo simulado de tal colección de 100 valores, con a = 0.0001 , b = 0.1 y una varianza común de σ(xi,yi)xif(yi;a,b)100a=0.0001b=0.1 .σ2=4
Este es un ejemplo difícil (deliberadamente), como se puede apreciar por los valores no físicos (negativos) y su distribución extraordinaria (que es típicamente ± 2 unidades horizontales , pero puede variar hasta 5 o 6 en el eje x ). Si podemos obtener un ajuste razonable a estos datos que se acerque a la estimación de a , b y σ 2 utilizados, lo haremos bien.x±2 56xabσ2
Un ajuste exploratorio es iterativo. Cada etapa consta de dos pasos: estimar (basado en los datos y anteriores estimaciones un y b de un y b , a partir del cual los valores predichos anteriores x i se pueden obtener para la x i ) y luego estimar b . Debido a que los errores están en x , los ajustes estiman el x i desde ( y i ) , en lugar de al revés. Al primer orden en los errores en x , cuando xaa^b^abx^ixibxi(yi)xx es suficientemente grande
xi≈1a(yi+b^x^i−−√).
Por lo tanto, es posible actualizar un encajando con este modelo de mínimos cuadrados (aviso de que tiene sólo un parámetro - una pendiente, un --y sin intercepción) y tomando el recíproco del coeficiente como la estimación actualizada de una .a^aa
Luego, cuando es suficientemente pequeño, el término cuadrático inverso domina y encontramos (nuevamente al primer orden en los errores) quex
xi≈b21−2a^b^x^3/2y2i.
Una vez más el uso de los mínimos cuadrados (con sólo un término de pendiente ) obtenemos una estimación actualizada b a través de la raíz cuadrada de la pendiente equipada.bb^
Para ver por qué esto funciona, se puede obtener una aproximación exploratoria cruda a este ajuste trazandoxi1/y2ixixiyixi1/y2iyi en rojo, la mitad más pequeña en azul, y una línea a través del origen se ajusta a los puntos rojos.
xyxb0.0964
En este punto, los valores pronosticados se pueden actualizar a través de
x^i=f(yi;a^,b^).
Itere hasta que las estimaciones se estabilicen (lo cual no está garantizado) o pasen por pequeños rangos de valores (que aún no se pueden garantizar).
axba^=0.0001960.0001b^=0.10730.1) Este gráfico muestra los datos una vez más, sobre los cuales se superponen (a) la curva verdadera en gris (discontinua) y (b) la curva estimada en rojo (sólido):
3.734
Hay algunos problemas con este enfoque:
Código
Lo siguiente está escrito en Mathematica .
estimate[{a_, b_, xHat_}, {x_, y_}] :=
Module[{n = Length[x], k0, k1, yLarge, xLarge, xHatLarge, ySmall,
xSmall, xHatSmall, a1, b1, xHat1, u, fr},
fr[y_, {a_, b_}] := Root[-b^2 + y^2 #1 - 2 a y #1^2 + a^2 #1^3 &, 1];
k0 = Floor[1 n/3]; k1 = Ceiling[2 n/3];(* The tuning constants *)
yLarge = y[[k1 + 1 ;;]]; xLarge = x[[k1 + 1 ;;]]; xHatLarge = xHat[[k1 + 1 ;;]];
ySmall = y[[;; k0]]; xSmall = x[[;; k0]]; xHatSmall = xHat[[;; k0]];
a1 = 1/
Last[LinearModelFit[{yLarge + b/Sqrt[xHatLarge],
xLarge}\[Transpose], u, u]["BestFitParameters"]];
b1 = Sqrt[
Last[LinearModelFit[{(1 - 2 a1 b xHatSmall^(3/2)) / ySmall^2,
xSmall}\[Transpose], u, u]["BestFitParameters"]]];
xHat1 = fr[#, {a1, b1}] & /@ y;
{a1, b1, xHat1}
];
x
y
data = {x,y}
a=b=0
{a, b, xHat} = NestWhile[estimate[##, data] &, {0, 0, data[[1]]},
Norm[Most[#1] - Most[#2]] >= 0.001 &, 2, 100]