Estenda a regressão linear ao longo de todo o gráfico

Estenda a regressão linear ao longo de todo o gráfico

Tenho um conjunto de dados e quero realizar uma regressão linear neles e exibir a linha resultante. Devido à precisão computacional, os valores atingem um patamar após um certo ponto, e não quero incluir esses dados no cálculo da regressão.

O que estou fazendo atualmente é ter dois arquivos de dados: um com todos os dados e outro com os dados usados ​​para a única regressão linear (talvez não seja o melhor, mas não encontrei mais nada). Aqui está um 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}

Resultando em uma figura com todos os dados (em azul) e a regressão linear nos pontos selecionados, mas apenas neles (em vermelho): insira a descrição da imagem aqui

O que eu gostaria de fazer é estender esta linha para todo o gráfico, conforme exibido em verde na Figura acima (o verde foi adicionado manualmente na captura de tela)

Responder1

Do pgfplotsmanual (seção 4.24Linhas de Ajuste – Regressão), os parâmetros da regressão são armazenados em \pgfplotstableregressionae \pgfplotstableregressionb. Então desenhe a função correspondente, com um domínio apropriado e a chave update limits=falsepara manter seus eixos inalterados:

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

Exemplo:

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

dados ajustados

informação relacionada