Mercurial > octave
annotate scripts/statistics/tests/z_test.m @ 21634:96518f623c91
Backed out changeset dcf8922b724b
author | Mike Miller <mtmiller@octave.org> |
---|---|
date | Wed, 20 Apr 2016 11:06:03 -0700 |
parents | dcf8922b724b |
children | bac0d6f07a3e |
rev | line source |
---|---|
19697
4197fc428c7d
maint: Update copyright notices for 2015.
John W. Eaton <jwe@octave.org>
parents:
19306
diff
changeset
|
1 ## Copyright (C) 1995-2015 Kurt Hornik |
3426 | 2 ## |
3922 | 3 ## This file is part of Octave. |
4 ## | |
5 ## Octave is free software; you can redistribute it and/or modify it | |
6 ## under the terms of the GNU General Public License as published by | |
7016 | 7 ## the Free Software Foundation; either version 3 of the License, or (at |
8 ## your option) any later version. | |
3426 | 9 ## |
3922 | 10 ## Octave is distributed in the hope that it will be useful, but |
3200 | 11 ## WITHOUT ANY WARRANTY; without even the implied warranty of |
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
3426 | 13 ## General Public License for more details. |
14 ## | |
3200 | 15 ## You should have received a copy of the GNU General Public License |
7016 | 16 ## along with Octave; see the file COPYING. If not, see |
17 ## <http://www.gnu.org/licenses/>. | |
3200 | 18 |
3454 | 19 ## -*- texinfo -*- |
20852
516bb87ea72e
2015 Code Sprint: remove class of function from docstring for all m-files.
Rik <rik@octave.org>
parents:
20174
diff
changeset
|
20 ## @deftypefn {} {[@var{pval}, @var{z}] =} z_test (@var{x}, @var{m}, @var{v}, @var{alt}) |
20174
d9341b422488
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19833
diff
changeset
|
21 ## Perform a Z-test of the null hypothesis @code{mean (@var{x}) == @var{m}} |
d9341b422488
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19833
diff
changeset
|
22 ## for a sample @var{x} from a normal distribution with unknown mean and known |
d9341b422488
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19833
diff
changeset
|
23 ## variance @var{v}. |
3200 | 24 ## |
20174
d9341b422488
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19833
diff
changeset
|
25 ## Under the null, the test statistic @var{z} follows a standard normal |
d9341b422488
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19833
diff
changeset
|
26 ## distribution. |
d9341b422488
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19833
diff
changeset
|
27 ## |
d9341b422488
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19833
diff
changeset
|
28 ## With the optional argument string @var{alt}, the alternative of interest |
d9341b422488
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19833
diff
changeset
|
29 ## can be selected. If @var{alt} is @qcode{"!="} or @qcode{"<>"}, the null |
d9341b422488
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19833
diff
changeset
|
30 ## is tested against the two-sided alternative |
17281
bc924baa2c4e
doc: Add new @qcode macro for code samples which are quoted.
Rik <rik@octave.org>
parents:
17245
diff
changeset
|
31 ## @code{mean (@var{x}) != @var{m}}. If @var{alt} is @qcode{">"}, the |
3457 | 32 ## one-sided alternative @code{mean (@var{x}) > @var{m}} is considered. |
20174
d9341b422488
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19833
diff
changeset
|
33 ## Similarly for @qcode{"<"}, the one-sided alternative |
d9341b422488
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19833
diff
changeset
|
34 ## @code{mean (@var{x}) < @var{m}} is considered. The default is the two-sided |
3457 | 35 ## case. |
3200 | 36 ## |
3454 | 37 ## The p-value of the test is returned in @var{pval}. |
3426 | 38 ## |
20174
d9341b422488
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19833
diff
changeset
|
39 ## If no output argument is given, the p-value of the test is displayed along |
d9341b422488
doc: Update more docstrings to have one sentence summary as first line.
Rik <rik@octave.org>
parents:
19833
diff
changeset
|
40 ## with some information. |
3454 | 41 ## @end deftypefn |
3200 | 42 |
5428 | 43 ## Author: KH <Kurt.Hornik@wu-wien.ac.at> |
3456 | 44 ## Description: Test for mean of a normal sample with known variance |
3200 | 45 |
46 function [pval, z] = z_test (x, m, v, alt) | |
3426 | 47 |
19833
9fc020886ae9
maint: Clean up m-files to follow Octave coding conventions.
Rik <rik@octave.org>
parents:
19697
diff
changeset
|
48 if (nargin < 3 || nargin > 4) |
6046 | 49 print_usage (); |
3200 | 50 endif |
3426 | 51 |
4030 | 52 if (! isvector (x)) |
11472
1740012184f9
Use uppercase for variable names in error() strings to match Info documentation. Only m-files done.
Rik <octave@nomad.inbox5.com>
parents:
8920
diff
changeset
|
53 error ("z_test: X must be a vector"); |
3200 | 54 endif |
4030 | 55 if (! isscalar (m)) |
11472
1740012184f9
Use uppercase for variable names in error() strings to match Info documentation. Only m-files done.
Rik <octave@nomad.inbox5.com>
parents:
8920
diff
changeset
|
56 error ("z_test: M must be a scalar"); |
3200 | 57 endif |
4030 | 58 if (! (isscalar (v) && (v > 0))) |
11472
1740012184f9
Use uppercase for variable names in error() strings to match Info documentation. Only m-files done.
Rik <octave@nomad.inbox5.com>
parents:
8920
diff
changeset
|
59 error ("z_test: V must be a positive scalar"); |
3200 | 60 endif |
3426 | 61 |
3200 | 62 n = length (x); |
63 z = sqrt (n/v) * (sum (x) / n - m); | |
64 cdf = stdnormal_cdf (z); | |
3426 | 65 |
3200 | 66 if (nargin == 3) |
67 alt = "!="; | |
68 endif | |
69 | |
5443 | 70 if (! ischar (alt)) |
11472
1740012184f9
Use uppercase for variable names in error() strings to match Info documentation. Only m-files done.
Rik <octave@nomad.inbox5.com>
parents:
8920
diff
changeset
|
71 error ("z_test: ALT must be a string"); |
3200 | 72 elseif (strcmp (alt, "!=") || strcmp (alt, "<>")) |
73 pval = 2 * min (cdf, 1 - cdf); | |
74 elseif (strcmp (alt, ">")) | |
75 pval = 1 - cdf; | |
76 elseif (strcmp (alt, "<")) | |
77 pval = cdf; | |
78 else | |
3456 | 79 error ("z_test: option %s not recognized", alt); |
3200 | 80 endif |
3426 | 81 |
3200 | 82 if (nargout == 0) |
17245
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
16994
diff
changeset
|
83 s = ["Z-test of mean(x) == %g against mean(x) %s %g,\n", ... |
7babcdb9bc13
Use ... instead of \ for line continuation marker.
Stefan Mahr <dac922@gmx.de>
parents:
16994
diff
changeset
|
84 "with known var(x) == %g:\n", ... |
17295
2946888dfa56
z_test.m: Fix typo in string concatenation.
Rik <rik@octave.org>
parents:
17281
diff
changeset
|
85 " pval = %g\n"]; |
21634
96518f623c91
Backed out changeset dcf8922b724b
Mike Miller <mtmiller@octave.org>
parents:
21633
diff
changeset
|
86 printf (s, m, alt, m, v, pval); |
3200 | 87 endif |
88 | |
89 endfunction | |
17338
1c89599167a6
maint: End m-files with 1 blank line.
Rik <rik@octave.org>
parents:
17295
diff
changeset
|
90 |
19306
314b4de4bb6d
Add BIST tests for subspace, t_test, z_test.
Pooja Rao <poojarao12@gmail.com>
parents:
17744
diff
changeset
|
91 |
314b4de4bb6d
Add BIST tests for subspace, t_test, z_test.
Pooja Rao <poojarao12@gmail.com>
parents:
17744
diff
changeset
|
92 %!test |
314b4de4bb6d
Add BIST tests for subspace, t_test, z_test.
Pooja Rao <poojarao12@gmail.com>
parents:
17744
diff
changeset
|
93 %! ## Two-sided (also the default option) |
314b4de4bb6d
Add BIST tests for subspace, t_test, z_test.
Pooja Rao <poojarao12@gmail.com>
parents:
17744
diff
changeset
|
94 %! x = rand (10,1); n = length (x); |
314b4de4bb6d
Add BIST tests for subspace, t_test, z_test.
Pooja Rao <poojarao12@gmail.com>
parents:
17744
diff
changeset
|
95 %! u0 = 0.5; v = 1/12; # true mean, var |
314b4de4bb6d
Add BIST tests for subspace, t_test, z_test.
Pooja Rao <poojarao12@gmail.com>
parents:
17744
diff
changeset
|
96 %! pval = z_test (x, u0, v, "!="); |
314b4de4bb6d
Add BIST tests for subspace, t_test, z_test.
Pooja Rao <poojarao12@gmail.com>
parents:
17744
diff
changeset
|
97 %! if (mean (x) >= u0) |
314b4de4bb6d
Add BIST tests for subspace, t_test, z_test.
Pooja Rao <poojarao12@gmail.com>
parents:
17744
diff
changeset
|
98 %! zval = abs (norminv (0.5*pval)); |
314b4de4bb6d
Add BIST tests for subspace, t_test, z_test.
Pooja Rao <poojarao12@gmail.com>
parents:
17744
diff
changeset
|
99 %! else |
314b4de4bb6d
Add BIST tests for subspace, t_test, z_test.
Pooja Rao <poojarao12@gmail.com>
parents:
17744
diff
changeset
|
100 %! zval = -abs (norminv (0.5*pval)); |
314b4de4bb6d
Add BIST tests for subspace, t_test, z_test.
Pooja Rao <poojarao12@gmail.com>
parents:
17744
diff
changeset
|
101 %! endif |
314b4de4bb6d
Add BIST tests for subspace, t_test, z_test.
Pooja Rao <poojarao12@gmail.com>
parents:
17744
diff
changeset
|
102 %! unew = zval * sqrt (v/n) + u0; |
314b4de4bb6d
Add BIST tests for subspace, t_test, z_test.
Pooja Rao <poojarao12@gmail.com>
parents:
17744
diff
changeset
|
103 %! assert (mean (x), unew, 100*eps); |
314b4de4bb6d
Add BIST tests for subspace, t_test, z_test.
Pooja Rao <poojarao12@gmail.com>
parents:
17744
diff
changeset
|
104 |
314b4de4bb6d
Add BIST tests for subspace, t_test, z_test.
Pooja Rao <poojarao12@gmail.com>
parents:
17744
diff
changeset
|
105 %!test |
314b4de4bb6d
Add BIST tests for subspace, t_test, z_test.
Pooja Rao <poojarao12@gmail.com>
parents:
17744
diff
changeset
|
106 %! x = rand (10,1); n = length (x); |
314b4de4bb6d
Add BIST tests for subspace, t_test, z_test.
Pooja Rao <poojarao12@gmail.com>
parents:
17744
diff
changeset
|
107 %! u0 = 0.5; v = 1/12; |
314b4de4bb6d
Add BIST tests for subspace, t_test, z_test.
Pooja Rao <poojarao12@gmail.com>
parents:
17744
diff
changeset
|
108 %! pval = z_test (x, u0, v, ">"); |
314b4de4bb6d
Add BIST tests for subspace, t_test, z_test.
Pooja Rao <poojarao12@gmail.com>
parents:
17744
diff
changeset
|
109 %! zval = norminv (1-pval); |
314b4de4bb6d
Add BIST tests for subspace, t_test, z_test.
Pooja Rao <poojarao12@gmail.com>
parents:
17744
diff
changeset
|
110 %! unew = zval * sqrt (v/n) + u0; |
314b4de4bb6d
Add BIST tests for subspace, t_test, z_test.
Pooja Rao <poojarao12@gmail.com>
parents:
17744
diff
changeset
|
111 %! assert (mean (x), unew, 100*eps); |
314b4de4bb6d
Add BIST tests for subspace, t_test, z_test.
Pooja Rao <poojarao12@gmail.com>
parents:
17744
diff
changeset
|
112 |
314b4de4bb6d
Add BIST tests for subspace, t_test, z_test.
Pooja Rao <poojarao12@gmail.com>
parents:
17744
diff
changeset
|
113 %!test |
314b4de4bb6d
Add BIST tests for subspace, t_test, z_test.
Pooja Rao <poojarao12@gmail.com>
parents:
17744
diff
changeset
|
114 %! x = rand (10,1); n = length (x); |
314b4de4bb6d
Add BIST tests for subspace, t_test, z_test.
Pooja Rao <poojarao12@gmail.com>
parents:
17744
diff
changeset
|
115 %! u0 = 0.5; v = 1/12; |
314b4de4bb6d
Add BIST tests for subspace, t_test, z_test.
Pooja Rao <poojarao12@gmail.com>
parents:
17744
diff
changeset
|
116 %! pval = z_test (x, u0, v, "<"); |
314b4de4bb6d
Add BIST tests for subspace, t_test, z_test.
Pooja Rao <poojarao12@gmail.com>
parents:
17744
diff
changeset
|
117 %! zval = norminv (pval); |
314b4de4bb6d
Add BIST tests for subspace, t_test, z_test.
Pooja Rao <poojarao12@gmail.com>
parents:
17744
diff
changeset
|
118 %! unew = zval * sqrt (v/n) + u0; |
314b4de4bb6d
Add BIST tests for subspace, t_test, z_test.
Pooja Rao <poojarao12@gmail.com>
parents:
17744
diff
changeset
|
119 %! assert (mean (x), unew, 100*eps); |
314b4de4bb6d
Add BIST tests for subspace, t_test, z_test.
Pooja Rao <poojarao12@gmail.com>
parents:
17744
diff
changeset
|
120 |