회귀를 위해 테이블 ​​행 필터링

회귀를 위해 테이블 ​​행 필터링

플래그와 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

나는 두 가지 질문을 통해 거의 해결책을 찾았다고 생각합니다. 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} 

코드에서 볼 수 있듯이 저는 라텍스 프로그래밍에 대한 경험이 없습니다. 어쨌든 작동합니다. 최고야, 주희

관련 정보