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