如何在 Tikz 中绘制正态分布的 CDF

如何在 Tikz 中绘制正态分布的 CDF

有谁知道如何绘制正态分布的累积分布函数(这里解释) 在 tikzpicture 环境中如何工作?非常感谢!

答案1

如果您想避免使用 gnuplot 进行计算,您可以使用正常 CDF 的近似值,例如由以下公式给出的非常简单的近似值Bowling 等人(哪个John D. Cook 在他的博客中):

\tikzset{
    declare function={
        normcdf(\x,\m,\s)=1/(1 + exp(-0.07056*((\x-\m)/\s)^3 - 1.5976*(\x-\m)/\s));
    }
}

最大误差为 0.014%,这对于可视化目的来说已经足够了。


以下是 gnuplot 版本与 Bowling 等人的近似值的比较:

\documentclass[border=5mm]{standalone}
\usepackage{amsmath}
\usepackage{pgfplots}
\DeclareMathOperator{\CDF}{cdf}

\def\cdf(#1)(#2)(#3){0.5*(1+(erf((#1-#2)/(#3*sqrt(2)))))}%

\tikzset{
    declare function={
        normcdf(\x,\m,\s)=1/(1 + exp(-0.07056*((\x-\m)/\s)^3 - 1.5976*(\x-\m)/\s));
    }
}

\begin{document}
\begin{tikzpicture}
\begin{axis}[%
  xlabel=$x$,
  ylabel=$\CDF(x)$,
  grid=major,
  legend entries={gnuplot, Bowling et al},
  legend pos=south east]
  \addplot[smooth, line width=3pt, orange!50] gnuplot{\cdf(x)(0)(2)};
  \addplot [smooth, black] {normcdf(x,0,2)};
\end{axis}
\end{tikzpicture}
\end{document}

答案2

一种方法是使用pgfplotsGnuplot 并与之交互。事实上,Gnuplot 之所以有用,是因为其erf功能。

这是一个需要编译的简单示例pdflatex -shell-escape

\documentclass{minimal}
\usepackage{amsmath}
\usepackage{pgfplots}

\def\cdf(#1)(#2)(#3){0.5*(1+(erf((#1-#2)/(#3*sqrt(2)))))}%
% to be used: \cdf(x)(mean)(variance)

\DeclareMathOperator{\CDF}{cdf}

\begin{document}
\begin{tikzpicture}
\begin{axis}[%
  xlabel=$x$,
  ylabel=$\CDF(x)$,
  grid=major]
  \addplot[smooth,red] gnuplot{\cdf(x)(0)(1)};
  \addplot[smooth,blue]gnuplot{\cdf(x)(0.5)(1)};
  \addplot[smooth,green]gnuplot{\cdf(x)(1)(1)};
  \addplot[smooth,orange]gnuplot{\cdf(x)(2)(1)};
\end{axis}
\end{tikzpicture}
\end{document}

结果:

在此处输入图片描述

请注意,该函数\cdf已通过在参数周围\def使用分隔符来定义。()

答案3

请注意,在较新版本的 gnuplot 中,有绘制标准正态 cdf 的“norm”函数。

 \addplot [very thick] gnuplot{norm(x)};

答案4

这里有一些可能有帮助的代码。

\begin{tikzpicture}[domain=0:4, yscale=4] 
\def\cumulative{\x,{1/(1 + exp((0-\x))}}
\def\betaA{\x,{1/(1 + (0.25*exp(0-\x))}}
\def\betaB{\x,{1/(1 + (0.5*exp(0-\x))}}
\def\betaC{\x,{1/(1 + (5*exp(0-\x))}}
\def\betaD{\x,{1/(1 + (15*exp(0-\x))}}
\draw[very thin,color=gray, step=0.25] (-6.1,-0.025) grid (5.9,1.025) ;
\draw[very thick, ->] (-6.1,0) -- (6,0) node[right] {Project Time} ; 
\draw[very thick, ->] (-6,-0.025) -- (-6,1.2) node[above] {\% Budget };
\draw[thick,color=red,domain=-6:6] plot (\cumulative);
\draw[thick,color=green,domain=-6:4] plot (\betaA) node[above left] {$\beta = 0.05$};
\draw[thick,color=blue,domain=-6:5] plot (\betaB) node[above] {$\beta = 0.25$};
\draw[thick,color=cyan,domain=-6:6] plot (\betaC) node[right] {$\beta = 5.00$};
\draw[thick,color=magenta,domain=-6:6] plot (\betaD) node[below right] {$\beta = 15.00$};
\node at (-6.4,0.25) {25\%};
\node at (-6.4,0.50) {50\%};
\node at (-6.4,0.75) {75\%};
\node at (-6.5,1.0) {100\%};

\node at (0,-.1){\textbf{Effect of Changing $\beta$}};
\end{tikzpicture}

相关内容