So erweitern Sie die lineare Regressionsanpassung auf den gesamten X-Achsenbereich unter Verwendung der Semilogieachse

So erweitern Sie die lineare Regressionsanpassung auf den gesamten X-Achsenbereich unter Verwendung der Semilogieachse

Da ich in einem anderen Beitrag gefragt wurde:

Trendlinie oder Regressionsgerade in pgfplots

um diese Frage explizit zu stellen, tue ich dies jetzt:

Wie kann ich die lineare Regressionsanpassung erweitern, die beispielsweise mit folgendem Ergebnis generiert wurde (beachten Sie die Semiologieachse!!):

\documentclass[fontsize=12pt,openright,oneside,DIV11,a4paper,numbers=noenddot,headsepline,parskip=half]{scrbook}
\usepackage[latin1]{inputenc}
\usepackage[cmex10]{amsmath}
\usepackage{dsfont}

% SIUnitx package
\usepackage{siunitx}
\DeclareSIUnit{\dBm}{dBm}

\usepackage{tikz}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.3}

\begin{document}
    \begin{tikzpicture}
        \begin{semilogyaxis}[
                legend style={font=\footnotesize},
                legend pos=north east,
                legend cell align=left,
                /pgf/number format/.cd,
                use comma,
            xlabel=x,
            ylabel=y,
            ymin=,
            ymax=,
            xmin=0,
            xmax=10,
            ]             
            \addplot+[only marks,color=black, mark=square*,mark options={fill=black}] table[x=x,y=y] {measurement1.txt};
            \addlegendentry{measurement1};

% Here I would like to plot the linear regression for the whole x-axis range, not only for the x-values in measurement1.txt

            \addplot+[solid,thick,color=black, no marks] table[y={create col/linear regression={y}}] {measurement1.txt};
            \addlegendentry{linearregression1};   

        \end{semilogyaxis}
        \end{tikzpicture}
\end{document} 

auf den gesamten Bereich der X-Achse (z. B. 0 bis 10 und ich habe nur Messpunkte im Bereich von 2 bis 8)? Es werden nur die X-Werte für die Datenpunkte in measurement1.txt dargestellt. Ja, ich könnte die Steigung und den Achsenabschnitt extrahieren mit

\xdef\slope{\pgfplotstableregressiona}
\xdef\yintercept{\pgfplotstableregressionb}
\addplot+[solid,thick,color=black, no marks,domain=0:-10] (x,\slope*x+\yintercept); 

aber wenn ich Semilogyaxis verwende, ist die Linie keine Gerade mehr (natürlich nicht!). Obwohl die in der Achsenumgebung generierte lineare Regression perfekt linear ist (aber nicht über den gesamten Bereich der x-Achse gespannt ist ...).

Antwort1

Die Gleichung für die Regressionsgerade für logarithmisch transformierte Daten lautet

Y=exp(b+m*X)

wobei mund bIhre Steigung bzw. Ihr Achsenabschnitt sind. Um die Linie zu zeichnen, sollten Sie also verwenden

\addplot {exp(\intercept+\slope*x)};

Anstatt einen addplotBefehl zum Bestimmen der Steigung und des Achsenabschnitts zu verwenden, können Sie die Regression außerhalb Ihrer axisUmgebung mit durchführen \pgfplotstablecreatecol[linear regression={ymode=log}]{<col name>}{<data table>}. Beachten Sie, dass Sie in diesem Fall explizit festlegen müssen ymode=log. Innerhalb eines semilogyaxisgeschieht dies automatisch.

Hier ist ein vollständiges Beispiel:

\documentclass{article}
\usepackage{pgfplots, pgfplotstable}
\begin{document}

\pgfplotstableread{
1   2.3
2   3.4
3   9
4   17
5   30
6   70
7   120
8   250
9   650
}\datatable

\pgfplotstablecreatecol[linear regression={ymode=log}]{regression}{\datatable}
\xdef\slope{\pgfplotstableregressiona} % save the slope parameter
\xdef\intercept{\pgfplotstableregressionb} % save the intercept parameter

\begin{tikzpicture}
\begin{axis}[
    ymode=log,
    xmin=0,xmax=10
]
\addplot [only marks, red] table {\datatable}; % plot the data
\addplot [no markers, domain=0:10] {exp(\intercept+\slope*x)}; 
\end{axis}
\end{tikzpicture}
\end{document}

verwandte Informationen