DMUG-Archiv 2004

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

Re: Statistisches

Hallo Udo,

ich glaube, wir haben die Lösung. Man kann das Problem 
herunterkochen auf das Fitten einer Konstanten, und 
erhält den selben Effekt. Die Konstante wird immer zu 
klein gefittet (s.u.). Kleine Datenpunkte haben eben ein 
grösseres relatives Gewicht, wenn man die Gewichte
 
 > auf der Basis der gemessenen Werte <

verteilt. Würde man sie auf der Basis der wahren Werte 
berechnen, wäre alles in Butter, diese kennt man aber
nicht, sonst bräuchte man gar nicht zu fitten. Unsere 
Vermutung vom 02.08. trifft also zu und im Falle der 
Lorentzfits äussert sich dies in einer kleineren Amplitude 
und geringeren Breite, weil die Punkte, die weit von der 
Linienmitte entfernt sind, die Linie sozusagen einschnüren.

Die Lösung ist ein ungewichteter Fit, denn da wird kein 
Punkt aufgrund seiner Lage (wahr oder real) ausgezeichnet.
Entfernt man im Code unten die Gewichtung, erhält man 
Fitergebnisse, die symmetrisch ("richtig") um den Startwert 
verteilt sind und dies amplitudenunabgängig.

Viele Grüße,

Martin

--------------

<< Statistics`ContinuousDistributions`;
<< Statistics`NonlinearFit`;

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

Fitdiffs = {};
amp = 50;
For[k = 1, k <= 100, k++,
 {
   thedata = 
     Table[amp + Random[NormalDistribution[0, sigma[amp]]], {i, 1, 50}];
   theweights = Table[1/sigma[thedata[[i]]]^2, {i, 1, 50}];
   constfit = NonlinearRegress[thedata, c, x, c, Weights -> theweights, 
          RegressionReport -> BestFitParameters];
   AppendTo[Fitdiffs, amp - c /. (BestFitParameters /. constfit)];
 }
];

ListPlot[Fitdiffs];

(* fast alle positiv *)

FitDifferences = {};

For[amp = 50, amp <= 1000, amp *= Exp[Log[1000/50]/10],
 {
   Fitdiffs = {};
   For[k = 1, k <= 100, k++,
    {
      thedata = Table[amp + Random[NormalDistribution[0, sigma[amp]]],
                      {i, 1, 50}];
      theweights = Table[1/sigma[thedata[[i]]]^2, {i, 1, 50}];
      constfit = NonlinearRegress[thedata, c, x, c, Weights ->
                    theweights, RegressionReport -> BestFitParameters];
      AppendTo[Fitdiffs, amp - c /. (BestFitParameters /. constfit)];
      (* Abweichung des einzelnen Punkts *)
   }
  ];
      
  afit = NonlinearRegress[Fitdiffs, a, x, a, 
         RegressionReport -> BestFitParameters];
  AppendTo[FitDifferences, (a /. (BestFitParameters /. afit))/amp];
  (* relativer Fehler des Fits *)
 }
];

ListPlot[FitDifferences, Frame -> True, Axes -> False];

(* immer positiv, relativer Fehler wird kleiner bei wachsender Amplitude *)

--------------


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

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