Extender la regresión lineal a toda la gráfica.

Extender la regresión lineal a toda la gráfica.

Tengo un conjunto de datos y quiero realizar una regresión lineal sobre ellos y mostrar la línea resultante. Debido a la precisión computacional, los valores alcanzan una meseta después de cierto punto y no quiero incluir estos datos en el cálculo de la regresión.

Lo que estoy haciendo actualmente es tener dos archivos de datos: uno con todos los datos y otro con los datos utilizados para la única regresión lineal (tal vez no sea el mejor, pero no encontré nada más). Aquí hay un 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}

Dando como resultado una figura con todos los datos (en azul) y la regresión lineal sobre los puntos seleccionados, pero sólo sobre ellos (en rojo): ingrese la descripción de la imagen aquí

Lo que me gustaría hacer es extender esta línea a todo el gráfico, como se muestra en verde en la figura anterior (el verde se agregó manualmente en la captura de pantalla).

Respuesta1

Del pgfplotsmanual (sección 4.24Líneas de ajuste – Regresión), los parámetros de la regresión se almacenan en \pgfplotstableregressionay \pgfplotstableregressionb. Así que dibuja la función correspondiente, con un dominio apropiado y la clave update limits=falsepara mantener tus ejes sin modificar:

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

Ejemplo:

\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}

datos ajustados

información relacionada