使用 pgfplots 绘制生存曲线

使用 pgfplots 绘制生存曲线

我想用 Mathematica 生成的输出中的 pgfplots 绘制 Kaplan-Meier(生存)曲线。

典型的输出表看起来如下所示:

211 1

253 1

307 1

344 0

365 0

365 1

383 0

383 1

391 0...

第一列包含事件日期;第二列是审查数据。

是否有一个软件包或内置的方法来绘制最终的生存曲线,包括审查标记?

答案1

这可以在 PGFPlots 中使用几个列定义来实现。

假设您有以下数据表(取自德语维基百科上的示例) 位于名为的文件中data.txt

Days Event
10 0
12 1
22 0
29 1
31 1
36 0
38 0
50 0
60 0
61 1
70 1
88 0
99 0
110 0
140 0

您可以使用以下方式读取数据

\pgfplotstableread{data.txt}\rawdata

然后,您可以添加虚拟数据行以确保绘图从以下位置开始t=0

\pgfplotstableread{
Days Event
0 1
}\datatable

\pgfplotstablevertcat{\datatable}{\rawdata}

利用这个,你可以计算出幸存者的数量减去被审查的案例,然后使用以下公式计算出生存率:

\def\initialn{15} % Initial number of cases
\pgfplotstablecreatecol[expr accum={\pgfmathaccuma-1}{\initialn+2}]{n}{\datatable}
\pgfplotstablecreatecol[expr accum={\pgfmathaccuma*(\thisrow{n}-\thisrow{Event})/(\thisrow{n})}{(\initialn+1)/\initialn}]{s}{\datatable}

然后可以将其绘制成如下图所示:

\begin{tikzpicture}
\begin{axis}[xmin=0, ymin=0]
\addplot [no markers, const plot, red] table [y=s] {\datatable};
\addplot [only marks, mark=+] table [y expr={(\thisrow{Event}==0 ? \thisrow{s} : inf )}] {\datatable};
\end{axis}
\end{tikzpicture}


完整示例:

\documentclass[11pt,a4paper]{article}
\usepackage{pgfplots, pgfplotstable, filecontents}

\begin{filecontents*}{data.txt}
Days Event
10 0
12 1
22 0
29 1
31 1
36 0
38 0
50 0
60 0
61 1
70 1
88 0
99 0
110 0
140 0
\end{filecontents*}

\begin{document}
\pgfplotstableread{data.txt}\rawdata

\pgfplotstableread{
Days Event
0 1
}\datatable

\pgfplotstablevertcat{\datatable}{\rawdata}

\def\initialn{15}
\pgfplotstablecreatecol[expr accum={\pgfmathaccuma-1}{\initialn+2}]{n}{\datatable}
\pgfplotstablecreatecol[expr accum={\pgfmathaccuma*(\thisrow{n}-\thisrow{Event})/(\thisrow{n})}{(\initialn+1)/\initialn}]{s}{\datatable}

\pgfplotstabletypeset{\datatable}

\begin{tikzpicture}
\begin{axis}[xmin=0, ymin=0]
\addplot [no markers, const plot, red] table [y=s] {\datatable};
\addplot [only marks, mark=+] table [y expr={(\thisrow{Event}==0 ? \thisrow{s} : inf )}] {\datatable};
\end{axis}
\end{tikzpicture}
\end{document}

相关内容