f152f72899c7cdec3f6176b7006e470931528547
[pspp] / tests / language / stats / examine.at
1 AT_BANNER([EXAMINE])
2
3 AT_SETUP([EXAMINE])
4 AT_DATA([examine.sps], [
5 DATA LIST LIST /QUALITY * W * BRAND * .
6 BEGIN DATA
7 3  1  1
8 2  2  1
9 1  2  1
10 1  1  1
11 4  1  1
12 4  1  1
13 5  1  2
14 2  1  2
15 4  4  2
16 2  1  2
17 3  1  2
18 7  1  3
19 4  2  3
20 5  3  3
21 3  1  3
22 6  1  3
23 END DATA
24
25 WEIGHT BY w.
26
27 VARIABLE LABELS brand   'Manufacturer'.
28 VARIABLE LABELS quality 'Breaking Strain'.
29
30 VALUE LABELS /brand 1 'Aspeger' 2 'Bloggs' 3 'Charlies'.
31
32 LIST /FORMAT=NUMBERED.
33
34 EXAMINE
35         quality BY brand
36         /STATISTICS descriptives extreme(3)
37         .
38 ])
39 AT_CHECK([pspp -o pspp.csv examine.sps])
40 dnl In the following data, only the extreme values have been checked.
41 dnl The descriptives have been blindly pasted.
42 AT_CHECK([cat pspp.csv], [0], [dnl
43 Table: Reading free-form data from INLINE.
44 Variable,Format
45 QUALITY,F8.0
46 W,F8.0
47 BRAND,F8.0
48
49 Table: Data List
50 Case Number,QUALITY,W,BRAND
51 1,3.00,1.00,1.00
52 2,2.00,2.00,1.00
53 3,1.00,2.00,1.00
54 4,1.00,1.00,1.00
55 5,4.00,1.00,1.00
56 6,4.00,1.00,1.00
57 7,5.00,1.00,2.00
58 8,2.00,1.00,2.00
59 9,4.00,4.00,2.00
60 10,2.00,1.00,2.00
61 11,3.00,1.00,2.00
62 12,7.00,1.00,3.00
63 13,4.00,2.00,3.00
64 14,5.00,3.00,3.00
65 15,3.00,1.00,3.00
66 16,6.00,1.00,3.00
67
68 Table: Case Processing Summary
69 ,Cases,,,,,
70 ,Valid,,Missing,,Total,
71 ,N,Percent,N,Percent,N,Percent
72 Breaking Strain,24.00,100%,.00,0%,24.00,100%
73
74 Table: Extreme Values
75 ,,,Case Number,Value
76 Breaking Strain,Highest,1,12,7.00
77 ,,2,16,6.00
78 ,,3,14,5.00
79 ,Lowest,1,3,1.00
80 ,,2,3,1.00
81 ,,3,4,1.00
82
83 Table: Descriptives
84 ,,,Statistic,Std. Error
85 Breaking Strain,Mean,,3.54,.32
86 ,95% Confidence Interval for Mean,Lower Bound,2.87,
87 ,,Upper Bound,4.21,
88 ,5% Trimmed Mean,,3.50,
89 ,Median,,4.00,
90 ,Variance,,2.52,
91 ,Std. Deviation,,1.59,
92 ,Minimum,,1.00,
93 ,Maximum,,7.00,
94 ,Range,,6.00,
95 ,Interquartile Range,,2.75,
96 ,Skewness,,.06,.47
97 ,Kurtosis,,-.36,.92
98
99 Table: Case Processing Summary
100 ,,Cases,,,,,
101 ,,Valid,,Missing,,Total,
102 ,Manufacturer,N,Percent,N,Percent,N,Percent
103 Breaking Strain,Aspeger,8.00,100%,.00,0%,8.00,100%
104 ,Bloggs,8.00,100%,.00,0%,8.00,100%
105 ,Charlies,8.00,100%,.00,0%,8.00,100%
106
107 Table: Extreme Values
108 ,Manufacturer,,,Case Number,Value
109 Breaking Strain,Aspeger,Highest,1,6,4.00
110 ,,,2,5,4.00
111 ,,,3,1,3.00
112 ,,Lowest,1,3,1.00
113 ,,,2,3,1.00
114 ,,,3,4,1.00
115 ,Bloggs,Highest,1,7,5.00
116 ,,,2,9,4.00
117 ,,,3,9,4.00
118 ,,Lowest,1,8,2.00
119 ,,,2,10,2.00
120 ,,,3,11,3.00
121 ,Charlies,Highest,1,12,7.00
122 ,,,2,16,6.00
123 ,,,3,14,5.00
124 ,,Lowest,1,15,3.00
125 ,,,2,13,4.00
126 ,,,3,13,4.00
127
128 Table: Descriptives
129 ,Manufacturer,,,Statistic,Std. Error
130 Breaking Strain,Aspeger,Mean,,2.25,.45
131 ,,95% Confidence Interval for Mean,Lower Bound,1.18,
132 ,,,Upper Bound,3.32,
133 ,,5% Trimmed Mean,,2.22,
134 ,,Median,,2.00,
135 ,,Variance,,1.64,
136 ,,Std. Deviation,,1.28,
137 ,,Minimum,,1.00,
138 ,,Maximum,,4.00,
139 ,,Range,,3.00,
140 ,,Interquartile Range,,2.75,
141 ,,Skewness,,.47,.75
142 ,,Kurtosis,,-1.55,1.48
143 ,Bloggs,Mean,,3.50,.38
144 ,,95% Confidence Interval for Mean,Lower Bound,2.61,
145 ,,,Upper Bound,4.39,
146 ,,5% Trimmed Mean,,3.50,
147 ,,Median,,4.00,
148 ,,Variance,,1.14,
149 ,,Std. Deviation,,1.07,
150 ,,Minimum,,2.00,
151 ,,Maximum,,5.00,
152 ,,Range,,3.00,
153 ,,Interquartile Range,,1.75,
154 ,,Skewness,,-.47,.75
155 ,,Kurtosis,,-.83,1.48
156 ,Charlies,Mean,,4.88,.44
157 ,,95% Confidence Interval for Mean,Lower Bound,3.83,
158 ,,,Upper Bound,5.92,
159 ,,5% Trimmed Mean,,4.86,
160 ,,Median,,5.00,
161 ,,Variance,,1.55,
162 ,,Std. Deviation,,1.25,
163 ,,Minimum,,3.00,
164 ,,Maximum,,7.00,
165 ,,Range,,4.00,
166 ,,Interquartile Range,,1.75,
167 ,,Skewness,,.30,.75
168 ,,Kurtosis,,.15,1.48
169 ])
170 AT_CLEANUP
171
172 AT_SETUP([EXAMINE -- extremes])
173 AT_DATA([examine.sps], [dnl
174 data list free /V1 W
175 begin data.
176 1  1
177 2  1
178 3  2
179 3  1
180 4  1
181 5  1
182 6  1
183 7  1
184 8  1
185 9  1
186 10 1
187 11 1
188 12 1
189 13 1
190 14 1
191 15 1
192 16 1
193 17 1
194 18 2
195 19 1
196 20 1
197 end data.
198
199 weight by w.
200
201 examine v1 
202  /statistics=extreme(6)
203  .
204 ])
205 AT_CHECK([pspp -o pspp.csv examine.sps])
206 AT_CHECK([cat pspp.csv], [0], [dnl
207 Table: Case Processing Summary
208 ,Cases,,,,,
209 ,Valid,,Missing,,Total,
210 ,N,Percent,N,Percent,N,Percent
211 V1,23.00,100%,.00,0%,23.00,100%
212
213 Table: Extreme Values
214 ,,,Case Number,Value
215 V1,Highest,1,21,20.00
216 ,,2,20,19.00
217 ,,3,19,18.00
218 ,,4,19,18.00
219 ,,5,18,17.00
220 ,,6,17,16.00
221 ,Lowest,1,1,1.00
222 ,,2,2,2.00
223 ,,3,3,3.00
224 ,,4,3,3.00
225 ,,5,4,3.00
226 ,,6,5,4.00
227 ])
228 AT_CLEANUP
229
230 dnl Test the PERCENTILES subcommand of the EXAMINE command.
231 dnl In particular test that it behaves properly when there are only 
232 dnl a few cases.
233 AT_SETUP([EXAMINE -- percentiles])
234 AT_DATA([examine.sps], [dnl
235 DATA LIST LIST /X *.
236 BEGIN DATA.
237 2.00 
238 8.00 
239 5.00 
240 END DATA.
241
242 EXAMINE /x
243         /PERCENTILES=HAVERAGE.
244
245 EXAMINE /x
246         /PERCENTILES=WAVERAGE.
247
248 EXAMINE /x
249         /PERCENTILES=ROUND.
250
251 EXAMINE /x
252         /PERCENTILES=EMPIRICAL.
253
254 EXAMINE /x
255         /PERCENTILES=AEMPIRICAL.
256 ])
257 AT_CHECK([pspp -o pspp.csv examine.sps])
258 AT_CHECK([cat pspp.csv], [0], [dnl
259 Table: Reading free-form data from INLINE.
260 Variable,Format
261 X,F8.0
262
263 Table: Case Processing Summary
264 ,Cases,,,,,
265 ,Valid,,Missing,,Total,
266 ,N,Percent,N,Percent,N,Percent
267 X,3,100%,0,0%,3,100%
268
269 Table: Percentiles
270 ,,Percentiles,,,,,,
271 ,,5,10,25,50,75,90,95
272 X,HAverage,.40,.80,2.00,5.00,8.00,8.00,8.00
273 ,Tukey's Hinges,,,3.50,5.00,6.50,,
274
275 Table: Case Processing Summary
276 ,Cases,,,,,
277 ,Valid,,Missing,,Total,
278 ,N,Percent,N,Percent,N,Percent
279 X,3,100%,0,0%,3,100%
280
281 Table: Percentiles
282 ,,Percentiles,,,,,,
283 ,,5,10,25,50,75,90,95
284 X,Weighted Average,.30,.60,1.50,3.50,5.75,7.10,7.55
285 ,Tukey's Hinges,,,3.50,5.00,6.50,,
286
287 Table: Case Processing Summary
288 ,Cases,,,,,
289 ,Valid,,Missing,,Total,
290 ,N,Percent,N,Percent,N,Percent
291 X,3,100%,0,0%,3,100%
292
293 Table: Percentiles
294 ,,Percentiles,,,,,,
295 ,,5,10,25,50,75,90,95
296 X,Rounded,.00,.00,2.00,5.00,5.00,8.00,8.00
297 ,Tukey's Hinges,,,3.50,5.00,6.50,,
298
299 Table: Case Processing Summary
300 ,Cases,,,,,
301 ,Valid,,Missing,,Total,
302 ,N,Percent,N,Percent,N,Percent
303 X,3,100%,0,0%,3,100%
304
305 Table: Percentiles
306 ,,Percentiles,,,,,,
307 ,,5,10,25,50,75,90,95
308 X,Empirical,2.00,2.00,2.00,5.00,8.00,8.00,8.00
309 ,Tukey's Hinges,,,3.50,5.00,6.50,,
310
311 Table: Case Processing Summary
312 ,Cases,,,,,
313 ,Valid,,Missing,,Total,
314 ,N,Percent,N,Percent,N,Percent
315 X,3,100%,0,0%,3,100%
316
317 Table: Percentiles
318 ,,Percentiles,,,,,,
319 ,,5,10,25,50,75,90,95
320 X,Empirical with averaging,2.00,2.00,2.00,5.00,8.00,8.00,8.00
321 ,Tukey's Hinges,,,3.50,5.00,6.50,,
322 ])
323 AT_CLEANUP
324
325 AT_SETUP([EXAMINE -- missing values])
326 AT_DATA([examine.sps], [dnl
327 DATA LIST LIST /x * y *.
328 BEGIN DATA.
329 1   1 
330 2   1
331 3   1
332 4   1
333 5   2
334 6   2
335 .   2
336 END DATA
337
338 EXAMINE /x by y
339         /MISSING = PAIRWISE
340         .
341 ])
342 AT_CHECK([pspp -o pspp.csv examine.sps])
343 AT_CHECK([cat pspp.csv], [0], [dnl
344 Table: Reading free-form data from INLINE.
345 Variable,Format
346 x,F8.0
347 y,F8.0
348
349 Table: Case Processing Summary
350 ,Cases,,,,,
351 ,Valid,,Missing,,Total,
352 ,N,Percent,N,Percent,N,Percent
353 x,6,85.7143%,1,14.2857%,7,100%
354
355 Table: Case Processing Summary
356 ,,Cases,,,,,
357 ,,Valid,,Missing,,Total,
358 ,y,N,Percent,N,Percent,N,Percent
359 x,1.00,4,100%,0,0%,4,100%
360 ,2.00,2,66.6667%,1,33.3333%,3,100%
361 ])
362 AT_CLEANUP
363
364
365 AT_SETUP([EXAMINE -- user missing values])
366 AT_DATA([examine-m.sps], [dnl
367 DATA LIST notable LIST /x * y *.
368 BEGIN DATA.
369 1                   2
370 9999999999          2
371 9999999999          99
372 END DATA.
373
374 MISSING VALUES x (9999999999).
375 MISSING VALUES y (99).
376
377 EXAMINE
378         /VARIABLES= x y
379         /MISSING=PAIRWISE.
380 ])
381 AT_CHECK([pspp -O format=csv examine-m.sps], [0], [dnl
382 Table: Case Processing Summary
383 ,Cases,,,,,
384 ,Valid,,Missing,,Total,
385 ,N,Percent,N,Percent,N,Percent
386 x,1,33.3333%,2,66.6667%,3,100%
387 y,2,66.6667%,1,33.3333%,3,100%
388 ])
389 AT_CLEANUP
390
391 AT_SETUP([EXAMINE -- missing values and percentiles])
392 AT_DATA([examine.sps], [dnl
393 DATA LIST LIST /X *.
394 BEGIN DATA.
395 99
396 99
397 5.00
398 END DATA.
399
400 MISSING VALUE X (99).
401
402 EXAMINE /x
403         /PERCENTILES=HAVERAGE.
404 ])
405 AT_CHECK([pspp -o pspp.csv examine.sps])
406 dnl Ignore output -- this is just a no-crash check.
407 AT_CLEANUP
408
409 dnl Tests the trimmed mean calculation in the case
410 dnl where the data is weighted towards the centre.
411 AT_SETUP([EXAMINE -- trimmed mean])
412 AT_DATA([examine.sps], [dnl
413 DATA LIST LIST /X * C *.
414 BEGIN DATA.
415 1 1
416 2 49
417 3 2
418 END DATA.
419
420 WEIGHT BY c.
421
422 EXAMINE
423         x
424         /STATISTICS=DESCRIPTIVES
425         .
426 ])
427 AT_CHECK([pspp -o pspp.csv examine.sps])
428 AT_CHECK([cat pspp.csv], [0], [dnl
429 Table: Reading free-form data from INLINE.
430 Variable,Format
431 X,F8.0
432 C,F8.0
433
434 Table: Case Processing Summary
435 ,Cases,,,,,
436 ,Valid,,Missing,,Total,
437 ,N,Percent,N,Percent,N,Percent
438 X,52.00,100%,.00,0%,52.00,100%
439
440 Table: Descriptives
441 ,,,Statistic,Std. Error
442 X,Mean,,2.02,.03
443 ,95% Confidence Interval for Mean,Lower Bound,1.95,
444 ,,Upper Bound,2.09,
445 ,5% Trimmed Mean,,2.00,
446 ,Median,,2.00,
447 ,Variance,,.06,
448 ,Std. Deviation,,.24,
449 ,Minimum,,1.00,
450 ,Maximum,,3.00,
451 ,Range,,2.00,
452 ,Interquartile Range,,.00,
453 ,Skewness,,1.19,.33
454 ,Kurtosis,,15.73,.65
455 ])
456 AT_CLEANUP
457
458 AT_SETUP([EXAMINE -- crash bug])
459 AT_DATA([examine.sps], [dnl
460 data list list /a * x * y *.
461 begin data.
462 3 1 3
463 5 1 4
464 7 2 3
465 end data.
466
467 examine a by x by y
468         /statistics=DESCRIPTIVES
469         . 
470 ])
471 AT_CHECK([pspp -o pspp.csv examine.sps])
472 dnl Ignore output -- this is just a no-crash check.
473 AT_CLEANUP
474
475 dnl Test that two consecutive EXAMINE commands don't crash PSPP.
476 AT_SETUP([EXAMINE -- consecutive runs don't crash])
477 AT_DATA([examine.sps], [dnl
478 data list list /y * z *.
479 begin data.
480 6 4
481 5 3
482 7 6
483 end data.
484
485 EXAMINE /VARIABLES= z BY y.
486
487 EXAMINE /VARIABLES= z. 
488 ])
489 AT_CHECK([pspp -o pspp.csv examine.sps])
490 dnl Ignore output -- this is just a no-crash check.
491 AT_CLEANUP
492
493 dnl Test that /DESCRIPTIVES does not crash in presence of missing values.
494 AT_SETUP([EXAMINE -- missing values don't crash])
495 AT_DATA([examine.sps], [dnl
496 data list list /x * y *.
497 begin data.
498 1 0
499 2 0
500 . 0
501 3 1
502 4 1
503 end data.
504 examine x by y /statistics=descriptives. 
505 ])
506 AT_CHECK([pspp -o pspp.csv examine.sps])
507 dnl Ignore output -- this is just a no-crash check.
508 AT_CLEANUP
509
510 dnl Test that having only a single case doesn't crash.
511 AT_SETUP([EXAMINE -- single case doesn't crash])
512 AT_DATA([examine.sps], [dnl
513 DATA LIST LIST /quality * .
514 BEGIN DATA
515 3  
516 END DATA
517
518
519 EXAMINE
520         quality 
521         /STATISTICS descriptives 
522         /PLOT = histogram
523         .
524 ])
525 AT_CHECK([pspp -o pspp.csv examine.sps], [0], [ignore])
526 dnl Ignore output -- this is just a no-crash check.
527 AT_CLEANUP
528
529 dnl Test that all-missing data doesn't crash.
530 AT_SETUP([EXAMINE -- all-missing data doesn't crash])
531 AT_DATA([examine.sps], [dnl
532 DATA LIST LIST /x *.
533 BEGIN DATA.
534 .
535 .
536 .
537 .
538 END DATA.
539
540 EXAMINE /x PLOT=HISTOGRAM.
541 ])
542 AT_CHECK([pspp -o pspp.csv examine.sps], [0], [ignore])
543 dnl Ignore output -- this is just a no-crash check.
544 AT_CLEANUP
545
546 dnl Test that big input doesn't crash (bug 11307).
547 AT_SETUP([EXAMINE -- big input doesn't crash])
548 AT_DATA([examine.sps], [dnl
549 INPUT PROGRAM.
550         LOOP #I=1 TO 50000.
551                 COMPUTE X=NORMAL(10).
552                 END CASE.
553         END LOOP.
554         END FILE.
555 END INPUT PROGRAM.
556
557
558 EXAMINE /x
559         /STATISTICS=DESCRIPTIVES.
560 ])
561 AT_CHECK([pspp -o pspp.csv examine.sps])
562 dnl Ignore output -- this is just a no-crash check.
563 AT_CLEANUP
564
565 dnl Another test that big input doesn't crash.
566 dnl The actual bug that this checks for has been lost.
567 AT_SETUP([EXAMINE -- big input doesn't crash 2])
568 AT_DATA([make-big-input.pl], 
569   [for ($i=0; $i<100000; $i++) { print "AB12\n" };
570    for ($i=0; $i<100000; $i++) { print "AB04\n" };
571 ])
572 AT_CHECK([$PERL make-big-input.pl > large.txt])
573 AT_DATA([examine.sps], [dnl
574 DATA LIST FILE='large.txt' /S 1-2 (A) X 3 .
575
576
577 AGGREGATE OUTFILE=* /BREAK=X /A=N.
578
579
580 EXAMINE /A BY X.
581 ])
582 AT_CHECK([pspp -o pspp.csv examine.sps])
583 dnl Ignore output -- this is just a no-crash check.
584 AT_DATA([more-big-input.pl], 
585   [for ($i=0; $i<25000; $i++) { print "AB04\nAB12\n" };
586 ])
587 AT_CHECK([$PERL more-big-input.pl >> large.txt])
588 AT_CHECK([pspp -o pspp.csv examine.sps])
589 dnl Ignore output -- this is just a no-crash check.
590 AT_CLEANUP
591
592
593 dnl Test that the ID command works with non-numberic variables
594 AT_SETUP([EXAMINE -- non-numeric ID])
595
596 AT_DATA([examine-id.sps], [dnl
597 data list notable list /x * y (a12).
598 begin data.
599 1  one
600 2  two
601 3  three
602 4  four
603 5  five
604 6  six
605 7  seven
606 8  eight
607 9  nine
608 10 ten
609 11 eleven
610 12 twelve
611 30 thirty
612 300 threehundred
613 end data.
614
615 examine x
616         /statistics = extreme
617         /id = y
618         /plot = boxplot
619         .
620 ])
621
622 AT_CHECK([pspp -O format=csv examine-id.sps], [0], 
623 [Table: Case Processing Summary
624 ,Cases,,,,,
625 ,Valid,,Missing,,Total,
626 ,N,Percent,N,Percent,N,Percent
627 x,14,100%,0,0%,14,100%
628
629 Table: Extreme Values
630 ,,,y,Value
631 x,Highest,1,threehundred,300.00
632 ,,2,thirty      ,30.00
633 ,,3,twelve      ,12.00
634 ,,4,eleven      ,11.00
635 ,,5,ten         ,10.00
636 ,Lowest,1,one         ,1.00
637 ,,2,two         ,2.00
638 ,,3,three       ,3.00
639 ,,4,four        ,4.00
640 ,,5,five        ,5.00
641 ])
642
643 AT_CLEANUP 
644
645 dnl Test for a crash which happened on cleanup from a bad input syntax
646 AT_SETUP([EXAMINE -- Bad Input])
647
648 AT_DATA([examine-bad.sps], [dnl
649 data list list /h * g *.
650 begin data.
651 1 1
652 2 1
653 3 1
654 4 1
655 5 2
656 6 2
657 7 2
658 8 2
659 9 2
660 end data.
661
662 EXAMINE 
663         /VARIABLES= h
664         BY  g
665         /STATISTICS = DESCRIPTIVES EXTREME
666         /PLOT = lkajsdas
667         .
668 ])
669
670 AT_CHECK([pspp -o pspp.csv examine-bad.sps], [1], [ignore])
671
672 AT_CLEANUP