У меня есть набор данных, и я хочу выполнить линейную регрессию на них и отобразить полученную линию. Из-за точности вычислений значения достигают плато после определенной точки, и я не хочу включать эти данные в вычисление регрессии.
В настоящее время я работаю над двумя файлами данных: один со всеми данными, а другой с данными, используемыми для единственной линейной регрессии (возможно, не самой лучшей, но я ничего другого не нашел). Вот 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}
В результате получаем рисунок со всеми данными (синим цветом) и линейную регрессию по выбранным точкам, но только по ним (красным цветом):
Мне бы хотелось продлить эту линию на весь участок, как показано зеленым цветом на рисунке выше (зеленый цвет был добавлен вручную на скриншоте).
решение1
Из pgfplots
руководства (раздел 4.24)Подгонка линий – Регрессия), параметры регрессии хранятся в \pgfplotstableregressiona
и \pgfplotstableregressionb
. Так что нарисуйте соответствующую функцию с соответствующим доменом и ключом, update limits=false
чтобы ваши оси оставались неизменными:
\addplot[update limits=false, no markers, green, thick, domain={1e-3:1e-1}]
{x^\pgfplotstableregressiona*exp(\pgfplotstableregressionb)};
Пример:
\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}