output: Introduce pivot tables.
[pspp] / tests / language / stats / quick-cluster.at
1 dnl PSPP - a program for statistical analysis.
2 dnl Copyright (C) 2017 Free Software Foundation, Inc.
3 dnl 
4 dnl This program is free software: you can redistribute it and/or modify
5 dnl it under the terms of the GNU General Public License as published by
6 dnl the Free Software Foundation, either version 3 of the License, or
7 dnl (at your option) any later version.
8 dnl 
9 dnl This program is distributed in the hope that it will be useful,
10 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
11 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 dnl GNU General Public License for more details.
13 dnl 
14 dnl You should have received a copy of the GNU General Public License
15 dnl along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 dnl
17 AT_BANNER([QUICK CLUSTER])
18
19 AT_SETUP([QUICK CLUSTER with small data set])
20 AT_DATA([quick-cluster.sps], [dnl
21 DATA LIST LIST /x y z.
22 BEGIN DATA.
23 22,2930,4099
24 17,3350,4749
25 22,2640,3799
26 20, 3250,4816
27 15,4080,7827
28 4,5,4
29 5,6,5
30 6,7,6
31 7,8,7
32 8,9,8
33 9,10,9
34 END DATA.
35 QUICK CLUSTER x y z
36   /CRITERIA=CLUSTER(2) MXITER(20).
37 ])
38 AT_CHECK([pspp -o pspp.csv quick-cluster.sps])
39 AT_CHECK([cat pspp.csv], [0], [dnl
40 Table: Reading free-form data from INLINE.
41 Variable,Format
42 x,F8.0
43 y,F8.0
44 z,F8.0
45
46 Table: Final Cluster Centers
47 ,Cluster,
48 ,1,2
49 x,6.50,19.20
50 y,7.50,3250.00
51 z,6.50,5058.00
52
53 Table: Number of Cases in each Cluster
54 ,,Count
55 Cluster,1,6
56 ,2,5
57 Valid,,11
58 ])
59 AT_CLEANUP
60
61 AT_SETUP([QUICK CLUSTER with large data set])
62 AT_KEYWORDS([slow])
63 AT_DATA([quick-cluster.sps], [dnl
64 input program.
65 loop #i = 1 to 50000.
66 compute x = 3.
67 end case.
68 end loop.
69 end file.
70 end input program.
71 QUICK CLUSTER x /CRITERIA = CLUSTER(4) NOINITIAL.
72 ])
73 AT_CHECK([pspp -o pspp.csv quick-cluster.sps])
74 AT_CHECK([cat pspp.csv], [0], [dnl
75 Table: Final Cluster Centers
76 ,Cluster,,,
77 ,1,2,3,4
78 x,NaN,NaN,NaN,3.00
79
80 Table: Number of Cases in each Cluster
81 ,,Count
82 Cluster,1,0
83 ,2,0
84 ,3,0
85 ,4,50000
86 Valid,,50000
87 ])
88 AT_CLEANUP
89
90
91 AT_SETUP([QUICK CLUSTER with weights])
92 AT_DATA([qc-weighted.sps], [dnl
93 input program.
94 loop #i = 1 to 400.
95  compute x = mod (#i, 4).
96  compute w = 5.
97  end case.
98 end loop.
99 loop #i = 1 to 400.
100  compute x = mod (#i, 4).
101  compute w = 3.
102  end case.
103 end loop.
104 end file.
105 end input program.
106
107 weight by w.
108
109 QUICK CLUSTER x /CRITERIA = CLUSTER(4) MXITER (10).
110 ])
111
112 AT_CHECK([pspp -o pspp-w.csv qc-weighted.sps])
113
114
115 AT_DATA([qc-unweighted.sps], [dnl
116 input program.
117 loop #i = 1 to 3200.
118  compute x = mod (#i, 4).
119  end case.
120 end loop.
121 end file.
122 end input program.
123
124 QUICK CLUSTER x /CRITERIA = CLUSTER(4) MXITER (10).
125 ])
126
127 AT_CHECK([pspp -o pspp-unw.csv qc-unweighted.sps])
128
129 AT_CHECK([diff pspp-w.csv pspp-unw.csv], [0])
130
131 AT_CLEANUP
132
133 AT_SETUP([QUICK CLUSTER with listwise missing])
134 AT_DATA([quick-miss.sps], [dnl
135 data list notable list /x *.
136 begin data.
137 1
138 1
139 2
140 3
141 4
142 .
143 2
144 end data.
145
146 QUICK CLUSTER x /CRITERIA = CLUSTER(4) MXITER (10).
147 ])
148
149 AT_CHECK([pspp -o pspp-m.csv quick-miss.sps])
150
151 AT_DATA([quick-nmiss.sps], [dnl
152 data list notable list /x *.
153 begin data.
154 1
155 1
156 2
157 3
158 4
159 2
160 end data.
161
162 QUICK CLUSTER x /CRITERIA = CLUSTER(4) MXITER (10).
163 ])
164
165 AT_CHECK([pspp -o pspp-nm.csv quick-nmiss.sps])
166
167 AT_CHECK([diff pspp-m.csv pspp-nm.csv], [0])
168
169 AT_CLEANUP
170
171
172 AT_SETUP([QUICK CLUSTER with pairwise missing])
173
174 dnl This test runs two programs, which are identical except that one
175 dnl has an extra case with one missing value. Because the syntax uses
176 dnl NOINITIAL and NOUPDATE, the results should be identical except for
177 dnl the final classification.
178
179 AT_DATA([quick-s.sps], [dnl
180 data list notable list /x * y *.
181 begin data.
182 1   2
183 1   2.2
184 1.1 1.9
185 1   9
186 1   10
187 1.3 9.5
188 0.9 8.9
189 3.5 2
190 3.4 3
191 3.5 2.5
192 3.1 2.0
193 end data.
194
195 QUICK CLUSTER x y 
196         /PRINT = INITIAL
197         /CRITERIA = CLUSTER(3) NOINITIAL NOUPDATE
198         .
199 ])
200
201 AT_CHECK([pspp -O format=csv quick-s.sps  > pspp-s.csv])
202
203 AT_DATA([quick-pw.sps], [dnl
204 data list notable list /x * y *.
205 begin data.
206 1   2
207 1   2.2
208 1.1 1.9
209 1   9
210 1   10
211 1.3 9.5
212 0.9 8.9
213 3.5 2
214 3.4 3
215 3.5 2.5
216 3.1 2.0
217 .   2.3
218 end data.
219
220 QUICK CLUSTER x y 
221         /CRITERIA = CLUSTER(3) NOINITIAL NOUPDATE
222         /PRINT = INITIAL
223         /MISSING = PAIRWISE
224         .
225 ])
226
227 AT_CHECK([pspp -O format=csv quick-pw.sps  > pspp-pw.csv])
228
229 AT_CHECK([head -n 13  pspp-s.csv > top-s.csv])
230 AT_CHECK([head -n 13  pspp-pw.csv > top-pw.csv])
231 AT_CHECK([diff top-s.csv top-pw.csv])
232
233
234 AT_CHECK([grep Valid pspp-s.csv], [0], [Valid,,11
235 ])
236
237 AT_CHECK([grep Valid pspp-pw.csv], [0], [Valid,,12
238 ])
239
240
241 AT_CLEANUP
242
243
244
245 AT_SETUP([QUICK CLUSTER crash on bad cluster quantity])
246 AT_DATA([badn.sps], [dnl
247 data list notable list /x * y *.
248 begin data.
249 1   2
250 1   2.2
251 end data.
252
253 QUICK CLUSTER x y 
254         /CRITERIA = CLUSTER(0)
255         .
256 ])
257
258 AT_CHECK([pspp -O format=csv badn.sps], [1], [ignore])
259
260 AT_CLEANUP
261
262 AT_SETUP([QUICK CLUSTER infinite loop on bad command name])
263 AT_DATA([quick-cluster.sps], [dnl
264 data list notable list /x y.
265 begin data.
266 1   2
267 1   2.2
268 end data.
269
270 QUICK CLUSTER x y /UNSUPPORTED.
271 ])
272 AT_CHECK([pspp -O format=csv quick-cluster.sps], [1], [dnl
273 quick-cluster.sps:7.20-7.30: error: QUICK CLUSTER: Syntax error at `UNSUPPORTED'.
274 ])
275 AT_CLEANUP
276
277
278
279 AT_SETUP([QUICK CLUSTER /PRINT subcommand])
280 AT_DATA([quick-cluster.sps], [dnl
281 data list notable list /cluster (A8) x y (F8.0).
282 begin data.
283 A 10.45 9.38
284 A 10.67 9.17
285 A 10.86 9.63
286 A 8.77 8.45
287 A 8.04 11.77
288 A 10.34 9.83
289 A 10.37 10.54
290 A 11.49 8.18
291 A 10.17 11.10
292 A 11.37 9.16
293 A 10.25 8.83
294 A 8.69 9.92
295 A 10.36 10.39
296 A 10.89 10.51
297 A 9.9 11.39
298 A 11.1 10.91
299 A 11.77 8.47
300 A 9.5 10.46
301 B -11.01 -9.21
302 B -10.8 -11.76
303 B -10.03 -10.29
304 B -9.54 -9.17
305 B -10.16 -9.82
306 B -10.01 -8.63
307 B -9.6 -10.22
308 B -11.36 -10.93
309 B -10.63 -10.97
310 B -9.53 -10.78
311 B -9.40 -10.26
312 B -10.76 -9.76
313 B -9.9 -10.11
314 B -10.16 -9.75
315 B -8.65 -11.31
316 B -10.10 -10.90
317 B -11.67 -9.89
318 B -11.11 -9.23
319 B -8.7 -8.43
320 B -11.35 -8.68
321 C -10.20 9.00
322 C -10.12 9.92
323 C -10.41 10.16
324 C -9.86 10.12
325 C -10.31 10.12
326 C -9.57 10.16
327 C -9.69 9.93
328 C -9.14 10.84
329 C -9.8 10.19
330 C -9.97 10.22
331 C -11.65 10.81
332 C -9.80 11.39
333 C -10.31 10.74
334 C -10.26 10.38
335 C -11.57 10.02
336 C -10.50 9.75
337 C -9.06 9.63
338 C -10.17 10.82
339 C -10.22 9.99
340 end data.
341
342 QUICK CLUSTER x y
343   /CRITERIA=CLUSTERS(3)
344   /PRINT=INITIAL CLUSTER.
345 ])
346
347 AT_CHECK([pspp -O format=csv quick-cluster.sps], [0], [dnl
348 Table: Initial Cluster Centers
349 ,Cluster,,
350 ,1,2,3
351 x,-11,-12,11
352 y,-12,11,11
353
354 Table: Final Cluster Centers
355 ,Cluster,,
356 ,1,2,3
357 x,-10,-10,10
358 y,-10,10,10
359
360 Table: Number of Cases in each Cluster
361 ,,Count
362 Cluster,1,20
363 ,2,19
364 ,3,18
365 Valid,,57
366
367 Table: Cluster Membership
368 Case Number,Cluster
369 1,3
370 2,3
371 3,3
372 4,3
373 5,3
374 6,3
375 7,3
376 8,3
377 9,3
378 10,3
379 11,3
380 12,3
381 13,3
382 14,3
383 15,3
384 16,3
385 17,3
386 18,3
387 19,1
388 20,1
389 21,1
390 22,1
391 23,1
392 24,1
393 25,1
394 26,1
395 27,1
396 28,1
397 29,1
398 30,1
399 31,1
400 32,1
401 33,1
402 34,1
403 35,1
404 36,1
405 37,1
406 38,1
407 39,2
408 40,2
409 41,2
410 42,2
411 43,2
412 44,2
413 45,2
414 46,2
415 47,2
416 48,2
417 49,2
418 50,2
419 51,2
420 52,2
421 53,2
422 54,2
423 55,2
424 56,2
425 57,2
426 ])
427
428 AT_CLEANUP
429
430
431 dnl Test for a crash which happened on bad input syntax
432 AT_SETUP([QUICK CLUSTER -- Empty Parentheses])
433
434 AT_DATA([empty-parens.sps], [dnl
435 data list notable list /x * y *.
436 begin data.
437 1   2
438 1   2.2
439 end data.
440
441 QUICK CLUSTER x y
442         /CRITERIA = CONVERGE()
443         .
444 ])
445
446 AT_CHECK([pspp -o pspp.csv empty-parens.sps], [1], [ignore])
447
448 AT_CLEANUP
449