Erweitern Sie die lineare Regression über das gesamte Diagramm

Erweitern Sie die lineare Regression über das gesamte Diagramm

Ich habe einen Datensatz und möchte eine lineare Regression darauf durchführen und die resultierende Linie anzeigen. Aufgrund der Rechengenauigkeit erreichen die Werte nach einem bestimmten Punkt ein Plateau und ich möchte diese Daten nicht in die Berechnung der Regression einbeziehen.

Was ich derzeit mache, ist, zwei Datendateien zu haben: eine mit allen Daten und eine andere mit den Daten, die für die einzige lineare Regression verwendet werden (vielleicht nicht die beste, aber ich habe nichts anderes gefunden). Hier ist ein MWE:

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepackage{pgfplotstable}
\begin{filecontents}[overwrite,noheader]{data.dat}
h err
0.05 3.11604689111e-09
0.025 1.89857594659e-11
0.0125 3.14299545014e-13
0.00625 2.38864314351e-14
0.003125 4.93001614302e-14
\end{filecontents}
\begin{filecontents}[overwrite,noheader]{data_for_reg.dat}
h err
0.05 3.11604689111e-09
0.025 1.89857594659e-11
0.0125 3.14299545014e-13
\end{filecontents}

\begin{document}
\begin{tikzpicture}
\begin{axis}[xmode=log, ymode=log]
\addplot[only marks,blue] table[x=h,y=err]{data.dat};
\addplot[no markers,red,thick] table [x=h,y={create col/linear regression={y=err}}] {data_for_reg.dat};
\end{axis}
\end{tikzpicture}
\end{document}

Das Ergebnis ist eine Abbildung mit allen Daten (in Blau) und der linearen Regression auf die ausgewählten Punkte, aber nur auf diese (in Rot): Bildbeschreibung hier eingeben

Ich möchte diese Linie auf das gesamte Grundstück ausdehnen, wie in der Abbildung oben in Grün dargestellt (das Grün wurde im Screenshot manuell hinzugefügt).

Antwort1

Aus dem pgfplotsHandbuch (Abschnitt 4.24Anpassungslinien – Regression), werden die Parameter der Regression in \pgfplotstableregressionaund gespeichert \pgfplotstableregressionb. Zeichnen Sie also die entsprechende Funktion mit einer geeigneten Domäne und dem Schlüssel, update limits=falseum Ihre Achsen unverändert zu lassen:

\addplot[update limits=false, no markers, green, thick, domain={1e-3:1e-1}]
{x^\pgfplotstableregressiona*exp(\pgfplotstableregressionb)};

Beispiel:

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepackage{pgfplotstable}
\begin{filecontents}[overwrite,noheader]{data.dat}
h err
0.05 3.11604689111e-09
0.025 1.89857594659e-11
0.0125 3.14299545014e-13
0.00625 2.38864314351e-14
0.003125 4.93001614302e-14
\end{filecontents}
\begin{filecontents}[overwrite,noheader]{data_for_reg.dat}
h err
0.05 3.11604689111e-09
0.025 1.89857594659e-11
0.0125 3.14299545014e-13
\end{filecontents}

\begin{document}
\begin{tikzpicture}
\begin{axis}[xmode=log, ymode=log]
\addplot[only marks,blue] table[x=h,y=err]{data.dat};
\addplot+[no markers, white] table [x=h,y={create col/linear regression={y=err}}] {data_for_reg.dat};
\addplot[update limits=false, no markers, green, thick, domain={1e-3:1e-1}]
{x^\pgfplotstableregressiona*exp(\pgfplotstableregressionb)};
\end{axis}
\end{tikzpicture}
\end{document}

angepasste Daten

verwandte Informationen