DMUG-Archiv 2004

Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

Re: Statistisches

Hallo Martin,

Das Ganze ist eine Definitionssache. Geschrieben steht (Mma 4.2):
The Weights option allows you to implement weighted least squares by specifying a list of weights, one for each data point; the default Weights -> Automatic implies a weight of unity for each data point. When Weights -> {w_1, w_2, ..., w_N} the parameter estimates are chosen to minimize the weighted sum of squared residuals Sum[w_i (e_i)^2, {i, 1, N].

Also nicht die Gewichte werden quadriert, sondern die Abweichungen von den Messpunkten. Die Gewichte stehen linear drin (soetwas wie eine Massendichte, deswegen heissen die auch Gewichte). Tippt man etwa

In[67]:=
With[{a = 20., c = 0., g = 1., xL = -2., xR = 2., anZ = 100},
data = ({#, Lorentz[#, a, c, g] + Random[NormalDistribution[0., sigma[Lorentz[#, a, c, g]]]]} & ) /@ Sort[Table[Random[Real, {xL, xR}, 8], {anZ}]];
 ListPlot[data];
Table[{j, NonlinearRegress[data, Lorentz[x1, a1, c1, g1], {x1}, {a1, c1, g1},
   Weights -> (sigma[#]^j &), RegressionReport -> BestFitParameters]},
   {j, -2, 2, 1/2}
 ]
]

dann bekommt man neben dem überzeugend Verrauschung zeigenden (hier unterdrückten) Bildchen das Resultat:

Out[67]=
{{-2, {BestFitParameters -> {a1 -> 18.4578, c1 -> 0.00484121, g1 -> 0.962976}}}, {-3/2, {BestFitParameters -> {a1 -> 18.882, c1 -> -0.000956114, g1 -> 0.971776}}}, {-1, {BestFitParameters -> {a1 -> 19.2635, c1 -> -0.00574937, g1 -> 0.97938}}}, {-1/2, {BestFitParameters -> {a1 -> 19.6093, c1 -> -0.00975918, g1 -> 0.98604}}}, {0, {BestFitParameters -> {a1 -> 19.9292, c1 -> -0.0131599, g1 -> 0.992069}}}, {1/2, {BestFitParameters -> {a1 -> 20.2349, c1 -> -0.0160729, g1 -> 0.997817}}}, {1, {BestFitParameters -> {a1 -> 20.5375, c1 -> -0.0185851, g1 -> 1.00359}}}, {1/2, {BestFitParameters -> {a1 -> 20.845, c1 -> -0.0207461, g1 -> 1.00958}}}, {2, {BestFitParameters -> {a1 -> 21.1619, c1 -> -0.0225848, g1 -> 1.01589}}}}

Also für Gewichte konstant 1 (Weights -> Automatic, j = 0) ist das Ergebnis normalerweise am besten.Wenn die Gewichte 1/sigma[#]^2 (j = -2) sind, dann werden gerade bei den grossen Abweichungen die Gewichte klein, d.h. die Abweichungen um x = 0 werden unwichtiger, der Fit wird am Rand besser. Werden die Gewichte bei den grossen Abweichungen um x = 0 sehr gross genommen (j = 2), dann bemüht er sich übermässig, bei x = c = 0 richtig zu liegen. Man sieht ganz klar die Tendenz. Eure Überlegung wäre korrekt gewesen, wenn NonlinearRegress[] den Ausdruck Sum[(e_i/w_i)^2, {i, 1, N}] minimieren würde. Das macht es aber lt. Beschreibung und lt. numerischem Experiment nicht.

Mit den besten Grüssen
Udo.

Martin Haas wrote:

<snip>

Unser Problem taucht auch erst auf, wenn man Weights->{Gewichte} bei Nonlinear Regress einschaltet. Etwa wie folgt: Wir generieren einen Lorentz, wie in Deinem Beispiel, nur fitten wir diesmal mit NonlinearRegress[ .. , Weights->{Table[1/sigma(n)^2]}]. Damit wollen wir der Tatsache Rechnung tragen, dass die Punkte verschiedenes statistisches Gewicht haben, denn die Unsicherheit
(Fehlerbalken) sigma sei bei Punkten mit höherem Funktionswert n
grösser:

sigma[n_]:=Sqrt[n+1] + 0.025 n;

Lorentz[x_,a_,c_,g_]:=a/((x-c)^2 + (g/2)^2);

With[{a=20, c=0, g=1},
data=Table[{x,Lorentz[x,a,c,g] + Random[NormalDistribution[0,sigma[Lorentz[x,a,c,g]]]]
            },{x,-2,2,0.05}];
];
myweights=Table[1/sigma[data[[i,2]]]^2, {i,1,Length[data]}]; NonlinearRegress[data, Lorentz[x1, a1, c1, g1], x1, {a1, c1, g1}, Weights->myweights, RegressionReport -> BestFitParameters]

Out=BestFitParameters -> {a1 -> 14.7161, c1 -> 0.0309276, g1 -> 0.860453}
(vgl Werte bei Generierung:
{a -> 20, c -> 0, g -> 1}) Bei jedem Run bekommen wir systematisch zu kleine Amplitude, und zu kleine Breite. Dahingehend nun unsere Frage nach dem grundlegenden Denkfehler (oder ist es NonlinearRegress?). Jeder Punkt folgt einer Gaussverteilung mit Breite sigma[n], dies soll mit der Gewichtung 1/sigma(n)^2 (pro Punkt individuell) beim Fit berücksichtigt werden. Das klappt aber nicht.

Unser Verdacht ist nun, dass das Problem darin besteht: Wir weisen jedem Punkt sein Gewicht auf der Basis seines tatsächlichen Wertes zu (wie bei gemessenen Daten nunmal nicht anders möglich), dieser ist mal grösser, mal kleiner als die Modellfunktion. Dabei bekommen jedoch bei gegebenem x die kleineren Realisierungen n systematisch grössere Gewichte. Das könnte die Amplitude sowie die Breite verringern. Wenn das so wäre, wie bezieht man die verschiedenen Gewichte korrekt ein?

Viele Grüße,

Martin Haas

On Sunday 01 August 2004 16:53, you wrote:
Hallo Uli,

was genau mit den Gewichten passiert ist in Mathematica bei Dir, kann
man mangels Beispiel nicht nachvollziehen.
<snip>


Also ganz gut getroffen diesmal. Andere Runs geben auch schon wesentlich
schlechtere Ergebnisse. Die Ansicht
ListPlot[gauss] ist instruktiv in solchen Fällen.

Schönen Sonntag
Udo.




Antworten:
Verweise:
Frühere   Chronologischer Index   Spätere
Vorherige   Thematischer Index   Nächste

DMUG DMUG-Archiv, http://www.mathematica.ch/archiv.html