Merge remote-tracking branch 'origin/master' into sheet
[pspp] / tests / language / stats / npar.at
index 874e83de810ae99ac826964105f97917a3d5235d..24a8cce65956b07353806a964b1af51944fc257d 100644 (file)
@@ -1,6 +1,22 @@
+dnl PSPP - a program for statistical analysis.
+dnl Copyright (C) 2017 Free Software Foundation, Inc.
+dnl 
+dnl This program is free software: you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation, either version 3 of the License, or
+dnl (at your option) any later version.
+dnl 
+dnl This program is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+dnl GNU General Public License for more details.
+dnl 
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program.  If not, see <http://www.gnu.org/licenses/>.
+dnl
 AT_BANNER([NPAR TESTS])
 
-AT_SETUP([NPAR TESTS BINOMIAL, P < 0.5; N1/N2 < 1])
+AT_SETUP([NPAR TESTS BINOMIAL P < 0.5; N1/N2 < 1])
 AT_DATA([npar.sps], [dnl
 SET FORMAT F8.3.
 
@@ -25,7 +41,7 @@ x,Group1,1.000,6.000,.286,.300,.551
 ])
 AT_CLEANUP
 
-AT_SETUP([NPAR TESTS BINOMIAL, P < 0.5; N1/N2 > 1])
+AT_SETUP([NPAR TESTS BINOMIAL P < 0.5; N1/N2 > 1])
 AT_DATA([npar.sps], [dnl
 SET FORMAT F8.3.
 
@@ -50,7 +66,7 @@ x,Group1,1,7,.538,.400,.229
 ])
 AT_CLEANUP
 
-AT_SETUP([NPAR TESTS BINOMIAL, P < 0.5; N1/N2 = 1])
+AT_SETUP([NPAR TESTS BINOMIAL P < 0.5; N1/N2 = 1])
 AT_DATA([npar.sps], [dnl
 SET FORMAT F8.3.
 
@@ -75,7 +91,7 @@ x,Group1,1,8,.500,.400,.284
 ])
 AT_CLEANUP
 
-AT_SETUP([NPAR TESTS BINOMIAL, P > 0.5; N1/N2 < 1])
+AT_SETUP([NPAR TESTS BINOMIAL P > 0.5; N1/N2 < 1])
 AT_DATA([npar.sps], [dnl
 SET FORMAT F8.3.
 
@@ -100,7 +116,7 @@ x,Group1,1,11,.478,.600,.164
 ])
 AT_CLEANUP
 
-AT_SETUP([NPAR TESTS BINOMIAL, P > 0.5; N1/N2 > 1])
+AT_SETUP([NPAR TESTS BINOMIAL P > 0.5; N1/N2 > 1])
 AT_DATA([npar.sps], [dnl
 SET FORMAT F8.3.
 
@@ -124,7 +140,7 @@ x,Group1,1,11,.550,.600,.404
 ])
 AT_CLEANUP
 
-AT_SETUP([NPAR TESTS BINOMIAL, P > 0.5; N1/N2 = 1])
+AT_SETUP([NPAR TESTS BINOMIAL P > 0.5; N1/N2 = 1])
 AT_DATA([npar.sps], [dnl
 SET FORMAT F8.3.
 
@@ -148,7 +164,7 @@ x,Group1,1,11,.500,.600,.228
 ])
 AT_CLEANUP
 
-AT_SETUP([NPAR TESTS BINOMIAL, P = 0.5; N1/N2 < 1])
+AT_SETUP([NPAR TESTS BINOMIAL P = 0.5; N1/N2 < 1])
 AT_DATA([npar.sps], [dnl
 SET FORMAT F8.3.
 
@@ -173,7 +189,7 @@ x,Group1,1,8,.348,.500,.210
 ])
 AT_CLEANUP
 
-AT_SETUP([NPAR TESTS BINOMIAL, P = 0.5; N1/N2 > 1])
+AT_SETUP([NPAR TESTS BINOMIAL P = 0.5; N1/N2 > 1])
 AT_DATA([npar.sps], [dnl
 SET FORMAT F8.3.
 
@@ -197,7 +213,7 @@ x,Group1,1,12,.667,.500,.238
 ])
 AT_CLEANUP
 
-AT_SETUP([NPAR TESTS BINOMIAL, P = 0.5; N1/N2 = 1])
+AT_SETUP([NPAR TESTS BINOMIAL P = 0.5; N1/N2 = 1])
 AT_DATA([npar.sps], [dnl
 SET FORMAT F8.3.
 
@@ -222,7 +238,7 @@ x,Group1,1,10,.500,.500,1.000
 ])
 AT_CLEANUP
 
-AT_SETUP([NPAR TESTS BINOMIAL, P = 0.5; N1/N2 = 1 Cutpoint])
+AT_SETUP([NPAR TESTS BINOMIAL P = 0.5; N1/N2 = 1 Cutpoint])
 AT_DATA([npar.sps], [dnl
 SET FORMAT F8.3.
 
@@ -248,7 +264,7 @@ x,Group1,<= 10,10.000,.385,.500,.327
 ])
 AT_CLEANUP
 
-AT_SETUP([NPAR TESTS BINOMIAL, P = 0.5; N1/N2 = 1 Named values])
+AT_SETUP([NPAR TESTS BINOMIAL P = 0.5; N1/N2 = 1 Named values])
 AT_DATA([npar.sps], [dnl
 SET FORMAT F8.3.
 
@@ -274,6 +290,28 @@ x,Group1,10.000,10.000,.435,.500,.678
 ])
 AT_CLEANUP
 
+
+
+dnl Test for a bug which caused binomial to crash.
+AT_SETUP([NPAR TESTS BINOMIAL - crash])
+AT_DATA([nparX.sps], [dnl
+data list list /range *.
+begin data.
+0
+1
+end data.
+
+* This is invalid syntax
+NPAR TEST
+       /BINOMIAL(0.5) = Range().
+
+])
+AT_CHECK([pspp -O format=csv nparX.sps], [1], [ignore])
+
+AT_CLEANUP
+
+
+
 AT_SETUP([NPAR TESTS CHISQUARE])
 AT_DATA([npar.sps], [dnl
 DATA LIST NOTABLE LIST /x * y * w *.
@@ -303,6 +341,7 @@ NPAR TESTS
   /EXPECTED = 6 10 3
   .
 ])
+
 AT_CHECK([pspp -O format=csv npar.sps], [0], [dnl
 Table: x
 ,Observed N,Expected N,Residual
@@ -326,7 +365,7 @@ Table: Test Statistics
 ,x,y
 Chi-Square,3.14,6.00
 df,5,3
-Asymp. Sig.,.68,.11
+Asymp. Sig.,.678,.112
 
 Table: y
 ,Observed N,Expected N,Residual
@@ -340,7 +379,7 @@ Table: Test Statistics
 ,y
 Chi-Square,10.61
 df,3
-Asymp. Sig.,.01
+Asymp. Sig.,.014
 
 Table: Frequencies
 ,x,,,,y,,,
@@ -354,8 +393,9 @@ Table: Test Statistics
 ,x,y
 Chi-Square,.13,4.13
 df,2,2
-Asymp. Sig.,.94,.13
+Asymp. Sig.,.936,.127
 ])
+
 AT_CLEANUP
 
 AT_SETUP([NPAR TESTS CHISQUARE expected values missing])
@@ -378,6 +418,7 @@ NPAR TESTS
   /EXPECTED = 3 4 5 4 3 1
   .
 ])
+
 AT_CHECK([pspp -O format=csv npar.sps], [1], [dnl
 "error: CHISQUARE test specified 6 expected values, but 4 distinct values were encountered in variable y."
 
@@ -385,8 +426,9 @@ Table: Test Statistics
 ,y
 Chi-Square,.00
 df,0
-Asymp. Sig.,1.00
+Asymp. Sig.,1.000
 ])
+
 AT_CLEANUP
 
 AT_SETUP([NPAR TESTS CHISQUARE with DESCRIPTIVES])
@@ -413,6 +455,7 @@ NPAR TESTS
   /STATISTICS=DESCRIPTIVES
   .
 ])
+
 AT_CHECK([pspp -O format=csv npar.sps], [0], [dnl
 Table: Frequencies
 ,x,,,,y,,,
@@ -431,7 +474,7 @@ Table: Test Statistics
 ,x,y
 Chi-Square,17.33,22.87
 df,7,7
-Asymp. Sig.,.02,.00
+Asymp. Sig.,.015,.002
 
 Table: Descriptive Statistics
 ,N,Mean,Std. Deviation,Minimum,Maximum
@@ -465,6 +508,7 @@ NPAR TESTS
   /STATISTICS=DESCRIPTIVES
   .
 ])
+
 AT_CHECK([pspp -O format=csv npar.sps], [0], [dnl
 Table: Frequencies
 ,x,,,,y,,,
@@ -483,7 +527,7 @@ Table: Test Statistics
 ,x,y
 Chi-Square,13.43,26.00
 df,7,7
-Asymp. Sig.,.06,.00
+Asymp. Sig.,.062,.001
 
 Table: Descriptive Statistics
 ,N,Mean,Std. Deviation,Minimum,Maximum
@@ -522,8 +566,8 @@ npar test
  /missing analysis
  /method=exact.
 ])
-AT_CHECK([pspp -o pspp.csv npar.sps])
-AT_CHECK([cat pspp.csv], [0], [dnl
+
+AT_CHECK([pspp -O format=csv npar.sps], [0], [dnl
 Table: Ranks
 ,,N,Mean Rank,Sum of Ranks
 first - second,Negative Ranks,8,6.00,48.00
@@ -534,10 +578,11 @@ first - second,Negative Ranks,8,6.00,48.00
 Table: Test Statistics
 ,first - second
 Z,-.18
-Asymp. Sig. (2-tailed),.86
-Exact Sig. (2-tailed),.89
-Exact Sig. (1-tailed),.45
+Asymp. Sig. (2-tailed),.861
+Exact Sig. (2-tailed),.893
+Exact Sig. (1-tailed),.446
 ])
+
 AT_CLEANUP
 
 AT_SETUP([NPAR TESTS WILCOXON with missing values])
@@ -568,11 +613,10 @@ npar test
  /wilcoxon=foo with bar (paired)
  /missing analysis
  /method=exact.
-
 ])
-AT_CHECK([pspp -o pspp.csv npar.sps])
+
 dnl This is the same output as the previous test.
-AT_CHECK([cat pspp.csv], [0], [dnl
+AT_CHECK([pspp -O format=csv npar.sps], [0], [dnl
 Table: Ranks
 ,,N,Mean Rank,Sum of Ranks
 first - second,Negative Ranks,8,6.00,48.00
@@ -583,9 +627,9 @@ first - second,Negative Ranks,8,6.00,48.00
 Table: Test Statistics
 ,first - second
 Z,-.18
-Asymp. Sig. (2-tailed),.86
-Exact Sig. (2-tailed),.89
-Exact Sig. (1-tailed),.45
+Asymp. Sig. (2-tailed),.861
+Exact Sig. (2-tailed),.893
+Exact Sig. (1-tailed),.446
 ])
 AT_CLEANUP
 
@@ -610,9 +654,9 @@ npar tests
        .
 ])
 AT_CHECK([pspp -o pspp.csv npar.sps])
-dnl Some machines return .313 instead of .312 for the Point Probability
+dnl Some machines return .313 instead of .312 
 dnl (see bug #31611).
-AT_CHECK([sed 's/\.313$/.312/' pspp.csv], [0], [dnl
+AT_CHECK([sed -e 's/\.313$/.312/' -e 's/^Exact Sig\. (1-tailed),\.313/Exact Sig. (1-tailed),.312/' pspp.csv], [0], [dnl
 Table: Frequencies
 ,,N
 age - height,Negative Differences,3
@@ -847,10 +891,8 @@ npar tests
        .
 ])
 
-AT_CHECK([pspp -o pspp.csv npar-runs.sps])
-
-AT_CHECK([cat pspp.csv], [0], [dnl
-Table: Runs Test
+AT_CHECK([pspp -O format=csv npar-runs.sps], [0],
+[Table: Runs Test
 ,score
 Test Value (median),3.0000
 Cases < Test Value,177.0000
@@ -858,7 +900,7 @@ Cases ≥ Test Value,309.0000
 Total Cases,486.0000
 Number of Runs,12
 Z,-20.9931
-Asymp. Sig. (2-tailed),.0000
+Asymp. Sig. (2-tailed),2.000
 
 Table: Runs Test
 ,score
@@ -868,7 +910,7 @@ Cases ≥ Test Value,227.0000
 Total Cases,486.0000
 Number of Runs,12
 Z,-21.0650
-Asymp. Sig. (2-tailed),.0000
+Asymp. Sig. (2-tailed),2.000
 
 Table: Runs Test
 ,score
@@ -878,12 +920,36 @@ Cases ≥ Test Value,170.0000
 Total Cases,486.0000
 Number of Runs,11
 Z,-21.0742
-Asymp. Sig. (2-tailed),.0000
+Asymp. Sig. (2-tailed),2.000
 ])
 
 AT_CLEANUP
 
 
+dnl Thanks to Douglas Bonett for providing this test case.
+AT_SETUP([NPAR TESTS Runs (2)])
+AT_DATA([npar-runs.sps], [dnl
+data list notable free /y.
+begin data
+1 1 2 1 2 1 1 2 1 1 1 2 1 2
+end data.
+NPAR TEST /RUNS(1.5) = y.
+])
+
+AT_CHECK([pspp -O format=csv npar-runs.sps], [0], [dnl
+Table: Runs Test
+,y
+Test Value,1.50
+Cases < Test Value,9
+Cases ≥ Test Value,5
+Total Cases,14
+Number of Runs,10
+Z,1.26
+Asymp. Sig. (2-tailed),.206
+])
+AT_CLEANUP
+
+
 AT_SETUP([NPAR TESTS Friedman])
 AT_DATA([npar-friedman.sps], [dnl
 set format F15.4.
@@ -905,9 +971,7 @@ npar tests
      /friedman = x y z.
 ])
 
-AT_CHECK([pspp -o pspp.csv npar-friedman.sps])
-
-AT_CHECK([cat pspp.csv], [0], [dnl
+AT_CHECK([pspp -O format=csv npar-friedman.sps], [0], [dnl
 Table: Ranks
 ,Mean Rank
 x,2.6500
@@ -918,7 +982,7 @@ Table: Test Statistics
 N,10
 Chi-Square,10.4737
 df,2
-Asymp. Sig.,.0053
+Asymp. Sig.,.005
 ])
 
 AT_CLEANUP
@@ -960,16 +1024,18 @@ begin data.
 85 0            
 76 1            
 145 1            
-24 1            
+24 1
+1 4
+-4 5
+34 5
+21 4
 end data.
 
 NPAR TESTS 
      /M-W = height BY sex (0,1).
 ])
 
-AT_CHECK([pspp -o pspp.csv npar-mann-whitney.sps])
-
-AT_CHECK([cat pspp.csv], [0], [dnl
+AT_CHECK([pspp -O format=csv npar-mann-whitney.sps], [0], [dnl
 Table: Ranks
 ,N,,,Mean Rank,,Sum of Ranks,
 ,0,1,Total,0,1,0,1
@@ -977,13 +1043,59 @@ height,15.0000,15.0000,30.0000,14.5333,16.4667,218.0000,247.0000
 
 Table: Test Statistics
 ,Mann-Whitney U,Wilcoxon W,Z,Asymp. Sig. (2-tailed)
-height,98.0000,218.0000,-.6020,.5472
+height,98.0000,218.0000,-.6020,.547
 ])
 
 
 AT_CLEANUP
 
 
+AT_SETUP([NPAR TESTS Mann-Whitney Multiple])
+dnl Check for a bug where the ranks were inappropriately allocated, when
+dnl multiple variables were tested and MISSING=ANALYSIS chosen.
+
+cp $abs_srcdir/language/mann-whitney.txt .
+
+AT_DATA([npar-mann-whitney.sps], [dnl
+SET FORMAT     = F11.3
+
+DATA LIST NOTABLE FILE='mann-whitney.txt'
+     LIST /I002_01 I002_02 I002_03 I002_04 sum_HL *.
+
+VARIABLE LABELS
+  I002_01 'IOS: Familie'
+  I002_02 'IOS: Freunde'
+  I002_03 'IOS: Partner*in'
+  I002_04 'IOS: Bekannte'.
+  
+MISSING VALUES I002_01 I002_02 I002_03 I002_04 (-9 -1).
+
+NPAR TESTS
+    /MISSING=ANALYSIS
+    /M-W=I002_01 I002_02 I002_03 I002_04 BY sum_HL (0 1).
+])
+
+AT_CHECK([pspp -O format=csv npar-mann-whitney.sps], [0], [dnl
+Table: Ranks
+,N,,,Mean Rank,,Sum of Ranks,
+,.000,1.000,Total,.000,1.000,.000,1.000
+IOS: Familie,114.000,115.000,229.000,110.018,119.939,12542.000,13793.000
+IOS: Freunde,115.000,115.000,230.000,108.339,122.661,12459.000,14106.000
+IOS: Partner*in,97.000,91.000,188.000,95.351,93.593,9249.000,8517.000
+IOS: Bekannte,115.000,115.000,230.000,111.065,119.935,12772.500,13792.500
+
+Table: Test Statistics
+,Mann-Whitney U,Wilcoxon W,Z,Asymp. Sig. (2-tailed)
+IOS: Familie,5987.000,12542.000,-1.167,.243
+IOS: Freunde,5789.000,12459.000,-1.674,.094
+IOS: Partner*in,4331.000,8517.000,-.245,.807
+IOS: Bekannte,6102.500,12772.500,-1.046,.296
+])
+
+AT_CLEANUP
+
+
+
 AT_SETUP([NPAR TESTS Cochran])
 AT_DATA([npar-cochran.sps], [dnl
 set format f11.3.
@@ -1625,3 +1737,117 @@ x,4,24.000,29.500,65.000,15.902,-2.232,.026
 ])
 
 AT_CLEANUP
+
+dnl Checks that (PAIRED) can have lists where the same 
+dnl variable appears more than once.
+AT_SETUP([NPAR TESTS (PAIRED)])
+AT_DATA([npar.sps], [dnl
+set format = F12.3.
+data list notable list /a * b * c *.
+begin data.
+1 2 4
+4 5 3
+1 2 2
+4 5 1
+end data.
+
+npar tests /wilcoxon a b with c c (paired).
+])
+
+AT_CHECK([pspp -O format=csv npar.sps], [0], [dnl
+Table: Ranks
+,,N,Mean Rank,Sum of Ranks
+a - c,Negative Ranks,2,2.500,5.000
+,Positive Ranks,2,2.500,5.000
+,Ties,0,,
+,Total,4,,
+b - c,Negative Ranks,1,1.500,1.500
+,Positive Ranks,2,2.250,4.500
+,Ties,1,,
+,Total,4,,
+
+Table: Test Statistics
+,a - c,b - c
+Z,.000,-.816
+Asymp. Sig. (2-tailed),1.000,.414
+])
+
+
+AT_CLEANUP
+
+
+
+AT_SETUP([NPAR TESTS CHISQUARE crash])
+dnl This syntax had been observed to crash pspp
+
+AT_DATA([npar.sps], [dnl
+data list list /x *.
+begin data.
+1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+end data.
+
+* This happens to be invalid syntax.  But should not crash.
+NPAR TEST
+       /CHISQUARE= x(0.098, 99.098)
+       /EXPECTED =  1.2.
+])
+
+AT_CHECK([pspp -O format=csv npar.sps], [1], [ignore])
+
+AT_CLEANUP
+
+
+AT_SETUP([NPAR TESTS - crash on invalid syntax])
+
+AT_DATA([npar.sps], [dnl
+data list notable list /ev * xscore *.
+begin data.
+2 109
+3 115
+1 61
+1 101
+3 147
+end data.
+
+
+npar tests
+        /kruskal-wallis xscore by(gv (1, 3).
+])
+
+AT_CHECK([pspp -O format=csv npar.sps], [1], [ignore])
+
+AT_CLEANUP
+
+
+
+
+AT_SETUP([NPAR TESTS - crash on unterminated string])
+
+AT_DATA([npar.sps], [dnl
+DATA LIST NOTABLE LIST /x * y * w * .
+BEGIN DATA.
+3.1 1  4
+3.2 2  1
+4   2  6
+END DATA.
+
+
+NPAR TESTS
+" CHISQUARE=x y(-2,5)
+  /STATISTICS=DESCRIPTIVES
+  .
+])
+
+AT_CHECK([pspp -O format=csv npar.sps], [1], [ignore])
+
+AT_CLEANUP
\ No newline at end of file