I would like to create an image to compare the difference between the gaussian distribution and the Student's t distribution for small n values.
From my searches in SE I took the definition of the gaussian pdf from Bell Curve/Gaussian Function/Normal Distribution in TikZ/PGF and the example to plot the t distribution from Student t-distribution with TikZ. In the latter, the functions "gamma" and "student" are declared locally. I intend to use this function a few times, so I would like to declare the functions globally. As you can see in the MWE, I tried to do this by using the functions from the tixzpicture declaration and copied them with minor modifications (variables) into the \pgfmathdeclarefunction command copied from the gaussian distribution.
However, if I comile the MWE using the tikzpicture declaration everything is fine, if I uncomment the functions in the preamble and commend the tikzpicture declaration I get no image at all.
My code:
\documentclass[border=5mm]{standalone}
\usepackage{pgfplots}
\pgfmathdeclarefunction{gauss}{3}{%
\pgfmathparse{1/(#3*sqrt(2*pi))*exp(-((#1-#2)^2)/(2*#3^2))}%
}
%\pgfmathdeclarefunction{gamma}{1}{%
% \pgfmathparse{2.506628274631*sqrt(1/#1)+ 0.20888568*(1/#1)^(1.5)+ 0.00870357*(1/#1)^(2.5)- (174.2106599*(1/#1)^(3.5))/25920- (715.6423511*(1/#1)^(4.5))/1244160)*exp((-ln(1/#1)-1)*#1}
%}
%
%\pgfmathdeclarefunction{student}{2}{%
% \pgfmathparse{gamma((#2+1)/2.)/(sqrt(#2*pi) *gamma(#2/2.)) *((1+(#1*#1)/#2)^(-(#2+1)/2.))}
%}
\begin{document}
\begin{tikzpicture}[
declare function={gamma(\z)=
2.506628274631*sqrt(1/\z)+ 0.20888568*(1/\z)^(1.5)+ 0.00870357*(1/\z)^(2.5)- (174.2106599*(1/\z)^(3.5))/25920- (715.6423511*(1/\z)^(4.5))/1244160)*exp((-ln(1/\z)-1)*\z;},
declare function={student(\x,\n)= gamma((\n+1)/2.)/(sqrt(\n*pi) *gamma(\n/2.)) *((1+(\x*\x)/\n)^(-(\n+1)/2.));}
]
\begin{axis}[
axis lines=left,
enlargelimits=upper,
samples=50,
]
\addplot [thick, smooth, domain=-6:6] {student(x,5)};
\addplot [thick, smooth, domain=-6:6] {gauss(x,0,1)};
\end{axis}
\end{tikzpicture}
\end{document}
Any hint about what happens here would be fine…
Best Answer
I don't know how to properly use
\pgfmathdeclarefunction
, but for me the following works:Basically, with
\tikzset
you can set the same options globally that you would otherwise set locally in square brackets.