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