回帰分析のテーブル行をフィルタリングする

回帰分析のテーブル行をフィルタリングする

フラグと x 値および y 値を含むテーブルがあります。最初の列が 1 であるすべての行に対して回帰を行いたいのですが、どうすればよいですか?

\documentclass{article}
\usepackage{array}
\usepackage{pgfplots}
\pgfplotsset{compat=1.5.1}
\usepackage{pgfplotstable}
\begin{document}
  \pgfplotstableread{
    Exmpl  a   v
    1      0   0
    1      1   1
    1      2   1
    1      3   4
    2      0   -0
    2      1   -1
    2      2   -1
    2      3   -4
  } \data
  \begin{tikzpicture}
    \begin{axis} % [legend pos=outer north east]
      \addplot table [x=a, y=v] {\data};
      \addplot table [x=a, y={create col/linear regression={y=v}}] {\data};
    \end{axis}
  \end{tikzpicture}
\end{document}

pgfplots フィルターはここでは適用されないと思います。pgfplots は x 値と y 値のみを取得するからです。フィルターされたテーブルを作成し、そこから回帰分析やプロットを行うことができれば素晴らしいと思います。

答え1

次の 2 つの質問のおかげで、ほぼ解決策が見つかったと思います。 pgfplotstable を使用して分割表を作成するそして pgfplots を使用して個々のテーブル要素にアクセスしますか? 考え方としては、行列を転置するには、新しい行列を作成し、すべての列をループして、Exmpl 値が 1 の場合に列をコピーします。

\documentclass{article}
\usepackage{array}
\usepackage{pgfplots}
\pgfplotsset{compat=1.5.1}
\usepackage{pgfplotstable}
\usepackage{ifthen}

\newcommand{\pgfplotstablefilterrows}[3]
{
  \pgfplotstablegetrowsof{#1}
  \pgfmathsetmacro{\NumOfRows}{\pgfplotsretval}
  \pgfmathsetmacro{\MaxRow}{\NumOfRows-1}
  \pgfplotstablegetcolsof{#1}
  \pgfmathsetmacro{\NumOfCols}{\pgfplotsretval}

  \pgfplotstabletranspose{\TransposedData}{#1}
  \pgfplotstableset{create on use/TransposedHead/.style={copy column from table={\TransposedData}{[index]0}}}
  \pgfplotstablenew[columns={TransposedHead}]{\NumOfCols}{\TransposedFilteredData}
  \pgfplotsforeachungrouped \pgfplotstablerowindex in {0,1,...,\MaxRow}{ % Row loop
    #3
  }
  \pgfplotstabletranspose[colnames from=TransposedHead,input colnames to=]{#2}{\TransposedFilteredData}
  \pgfplotstableclear{\TransposedData}
  \pgfplotstableclear{\TransposedFilteredData}
}

\begin{document}
  \pgfplotstableread{
    Exmpl  a   v
    1      0   0
    1      1   1
    1      2   1
    1      3   4
    2      0   -0
    2      1   -1
    2      2   -1
    2      3   -4
  } \data

  \pgfplotstablefilterrows{\data}{\FilteredData}
  {
    \pgfplotstablegetelem{\pgfplotstablerowindex}{[index]0}\of\data
    \ifthenelse{\equal{\pgfplotsretval}{1}}
    {
      \pgfplotstablecreatecol[copy column from table={\TransposedData}{\pgfplotstablerowindex}]{\pgfplotstablerowindex}{\TransposedFilteredData}
    }
    {}
  }

  \begin{tikzpicture}
    \begin{axis} % [legend pos=outer north east]
      \addplot table [x=a, y=v] {\data};
      \addplot table [x=a, y={create col/linear regression={y=v}}] {\FilteredData}; % compute a linear regression from the input table
    \end{axis}
  \end{tikzpicture}
\end{document} 

コードからわかるように、私は LaTeX プログラミングの経験はあまりありません。とにかく、うまく動作します。よろしくお願いします、Juhui

関連情報