123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- function [pval z] = circ_rtest(alpha, w, d)
- %
- % [pval, z] = circ_rtest(alpha,w)
- % Computes Rayleigh test for non-uniformity of circular data.
- % H0: the population is uniformly distributed around the circle
- % HA: the populatoin is not distributed uniformly around the circle
- % Assumption: the distribution has maximally one mode and the data is
- % sampled from a von Mises distribution!
- %
- % Input:
- % alpha sample of angles in radians
- % [w number of incidences in case of binned angle data]
- % [d spacing of bin centers for binned data, if supplied
- % correction factor is used to correct for bias in
- % estimation of r, in radians (!)]
- %
- % Output:
- % pval p-value of Rayleigh's test
- % z value of the z-statistic
- %
- % PHB 7/6/2008
- %
- % References:
- % Statistical analysis of circular data, N. I. Fisher
- % Topics in circular statistics, S. R. Jammalamadaka et al.
- % Biostatistical Analysis, J. H. Zar
- %
- % Circular Statistics Toolbox for Matlab
- % By Philipp Berens, 2009
- % berens@tuebingen.mpg.de - www.kyb.mpg.de/~berens/circStat.html
- if size(alpha,2) > size(alpha,1)
- alpha = alpha';
- end
- if nargin < 2
- r = circ_r(alpha);
- n = length(alpha);
- else
- if length(alpha)~=length(w)
- error('Input dimensions do not match.')
- end
- if nargin < 3
- d = 0;
- end
- r = circ_r(alpha,w(:),d);
- n = sum(w);
- end
- % compute Rayleigh's R (equ. 27.1)
- R = n*r;
- % compute Rayleigh's z (equ. 27.2)
- z = R^2 / n;
- % compute p value using approxation in Zar, p. 617
- pval = exp(sqrt(1+4*n+4*(n^2-R^2))-(1+2*n));
- % outdated version:
- % compute the p value using an approximation from Fisher, p. 70
- % pval = exp(-z);
- % if n < 50
- % pval = pval * (1 + (2*z - z^2) / (4*n) - ...
- % (24*z - 132*z^2 + 76*z^3 - 9*z^4) / (288*n^2));
- % end
|