Pgfplots:计算线性回归,但忽略某些 Y 值的轮廓线

Pgfplots:计算线性回归,但忽略某些 Y 值的轮廓线

所以我有一个散点图并生成了一条回归线。有一些异常值对该线影响很大。我希望在计算线性回归时忽略它们。这应该基于它们的 Y 值来完成。

已经有一个类似问题。但答案是跳过前几个 X 值。不幸的是,这不是我需要的。

这就是我当前的代码:

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\usepackage{pgfplotstable}

\begin{document}
    \begin{tikzpicture}
        \begin{axis}[scatter/classes={a={mark=*,draw=black}}]
            \pgfplotstableread{
                a     b
                0   0.5
                1   48
                2   1.4
                3   37
                4   3.4
                5   6.8
                6   4.5
                7   3.9
                8   10
                9   13
            }\datatable
        
            \addplot[scatter, only marks, scatter src=explicit symbolic]
            table[
                x=a,
                y=b,
            ] {\datatable};
            
            \addplot[
                thick,
                %% y filter/.expression={y<35 ? y : nan},
            ]
            table [
                x = a,
                %% y expr = {(\thisrow{b} > 35 ? nan : \thisrow{b} )},
                y = {create col/linear regression={y=b}},
            ] {\datatable};
        \end{axis}
    \end{tikzpicture}
\end{document}

该代码生成如下内容:

在此处输入图片描述

我已经尝试过y filtery expr,但是那并没有真正起作用。

我也考虑过将大纲拆分成几个文件。但由于我的真实图表有 4 条回归线,最终我会有大约 8 个文件。这对我来说似乎不切实际。

所以我的问题是:在计算线性回归时,如何忽略超过 30 的 Y 值?

答案1

您不希望过滤线的输出坐标。我确实知道是否有更好的方法,但一种方法是将不需要的点的方差设置为高(默认值为,1意味着1000它们几乎不使用),如下所示:

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\usepackage{pgfplotstable}

\begin{document}
    \begin{tikzpicture}
        \begin{axis}[scatter/classes={a={mark=*,draw=black}}]
            \pgfplotstableread{
                a     b
                0   0.5
                1   48
                2   1.4
                3   37
                4   3.4
                5   6.8
                6   4.5
                7   3.9
                8   10
                9   13
            }\datatable
        
            \addplot[scatter, only marks, scatter src=explicit symbolic]
            table[
                x=a,
                y=b,
            ] {\datatable};
            
            \addplot[
                thick,
            ]
            table [
                x = a,
                y = {create col/linear regression={y=b, variance={create col/expr={\thisrow{b}<30?1:1000}}}},
            ] {\datatable};
        \end{axis}
    \end{tikzpicture}
\end{document}

包含异常值和线性拟合的图形

相关内容