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):
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 pgfplots
Handbuch (Abschnitt 4.24Anpassungslinien – Regression), werden die Parameter der Regression in \pgfplotstableregressiona
und gespeichert \pgfplotstableregressionb
. Zeichnen Sie also die entsprechende Funktion mit einer geeigneten Domäne und dem Schlüssel, update limits=false
um 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}