PGFPlots:计算线性回归,忽略一些数据

PGFPlots:计算线性回归,忽略一些数据

我知道我可以使用 PGFPlots 通过命令计算线性回归create col/linear regression

我有一组数据,前几个点呈曲线,但其余部分呈线性。我想找到一个线性回归,但是忽略前 n 个点从我的回归数据文件中。使用 PGFPlots 可以做到这一点吗?

此类数据的一个虚构示例为:

x     y
0     0
1     15
2     25
3     28
4     30
5     31
6     32
7     33
8     34
9     35
10    36

曲线从 x = 4 开始呈线性。其图如下所示:

样地

我能想到的一个(不太好的)解决方案是创建一个没有数据点的新数据集,然后对这个新数据集运行回归。

答案1

可以通过选项 忽略表格的前几行skip first n。以下示例的第一个图显示了计算点 5 和最后一个点之间的面积的计算回归线。第二个图使用计算出的回归线参数绘制了整个范围内的线。

\begin{filecontents*}{\jobname-plot.dat}
x     y
0     0
1     15
2     25
3     28
4     30
5     31
6     32
7     33
8     34
9     35
10    36
\end{filecontents*}

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

\begin{document}
  \begin{tikzpicture}
    \begin{axis}
      \addplot[only marks, mark=*, blue]
        table {\jobname-plot.dat};
      \addplot[]
        table[header=false,skip first n=5,
          y={create col/linear regression},
        ] {\jobname-plot.dat};
    \end{axis}
  \end{tikzpicture}

  \begin{tikzpicture}
    \begin{axis}
      \addplot[only marks, mark=*, blue]
        table {\jobname-plot.dat};
      \addplot[draw=none]
        table[
          header=false,
          skip first n=5,
          y={create col/linear regression},
        ] {\jobname-plot.dat};  
      \addplot[domain=0:10, red]
        {\pgfplotstableregressiona*x + \pgfplotstableregressionb};
    \end{axis}
  \end{tikzpicture}
\end{document}

结果

答案2

这是一个使用 R 和嵌入在 LaTeX 文件中的 knitr 的解决方案。这假设您已安装 R 并了解如何运行 knitr 包。http://yihui.name/knitr/

\begin{filecontents}{data.txt}
x    y
0     0
1    15
2    25
3    28
4    30
5    31
6    32
7    33
8    34
9    35
10   36
\end{filecontents}
\documentclass[10pt,letterpaper]{article}

\begin{document}
<<echo=FALSE,out.width="3in">>=
dd<-read.table("data.txt",skip=4,header=TRUE)
with(dd,plot(x,y,pch=16,main="Regression line with all the data points"))
model<-with(dd,lm(y~x))
abline(model)
x1<-with(dd,x[3:length(x)])
y1<-with(dd,y[3:length(x)])
newdd<-data.frame(x1,y1)
with(newdd,plot(x1,y1,pch=16,main="Regression line with first two points removed"))
model1<-with(newdd,lm(y1~x1))
abline(model1)
@
\end{document}

在此处输入图片描述

相关内容