Add copyright and licence notices to files which lack them.
[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 AT_BANNER([QUICK CLUSTER])
17
18 AT_SETUP([QUICK CLUSTER with small data set])
19 AT_DATA([quick-cluster.sps], [dnl
20 DATA LIST LIST /x y z.
21 BEGIN DATA.
22 22,2930,4099
23 17,3350,4749
24 22,2640,3799
25 20, 3250,4816
26 15,4080,7827
27 4,5,4
28 5,6,5
29 6,7,6
30 7,8,7
31 8,9,8
32 9,10,9
33 END DATA.
34 QUICK CLUSTER x y z
35   /CRITERIA=CLUSTER(2) MXITER(20).
36 ])
37 AT_CHECK([pspp -o pspp.csv quick-cluster.sps])
38 AT_CHECK([cat pspp.csv], [0], [dnl
39 Table: Reading free-form data from INLINE.
40 Variable,Format
41 x,F8.0
42 y,F8.0
43 z,F8.0
44
45 Table: Final Cluster Centers
46 ,Cluster,
47 ,,
48 ,1,2
49 ,,
50 x,6.50,19.20
51 y,7.50,3250.00
52 z,6.50,5058.00
53
54 Table: Number of Cases in each Cluster
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_DATA([quick-cluster.sps], [dnl
63 input program.
64 loop #i = 1 to 50000.
65 compute x = 3.
66 end case.
67 end loop.
68 end file.
69 end input program.
70 QUICK CLUSTER x /CRITERIA = CLUSTER(4) NOINITIAL.
71 ])
72 AT_CHECK([pspp -o pspp.csv quick-cluster.sps])
73 AT_CHECK([cat pspp.csv], [0], [dnl
74 Table: Final Cluster Centers
75 ,Cluster,,,
76 ,,,,
77 ,1,2,3,4
78 ,,,,
79 x,NaN,NaN,NaN,3.00
80
81 Table: Number of Cases in each Cluster
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. Becuase 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 18  pspp-s.csv > top-s.csv])
230 AT_CHECK([head -n 18  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 (F) y (F).
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 ,,,
351 ,1,2,3
352 ,,,
353 x,-11,-12,11
354 y,-12,11,11
355
356 Table: Final Cluster Centers
357 ,Cluster,,
358 ,,,
359 ,1,2,3
360 ,,,
361 x,-10,-10,10
362 y,-10,10,10
363
364 Table: Number of Cases in each Cluster
365 Cluster,1,20
366 ,2,19
367 ,3,18
368 Valid,,57
369
370 Table: Cluster Membership
371 Case Number,Cluster
372 1,3
373 2,3
374 3,3
375 4,3
376 5,3
377 6,3
378 7,3
379 8,3
380 9,3
381 10,3
382 11,3
383 12,3
384 13,3
385 14,3
386 15,3
387 16,3
388 17,3
389 18,3
390 19,1
391 20,1
392 21,1
393 22,1
394 23,1
395 24,1
396 25,1
397 26,1
398 27,1
399 28,1
400 29,1
401 30,1
402 31,1
403 32,1
404 33,1
405 34,1
406 35,1
407 36,1
408 37,1
409 38,1
410 39,2
411 40,2
412 41,2
413 42,2
414 43,2
415 44,2
416 45,2
417 46,2
418 47,2
419 48,2
420 49,2
421 50,2
422 51,2
423 52,2
424 53,2
425 54,2
426 55,2
427 56,2
428 57,2
429 ])
430
431 AT_CLEANUP
432
433
434 dnl Test for a crash which happened on bad input syntax
435 AT_SETUP([QUICK CLUSTER -- Empty Parentheses])
436
437 AT_DATA([empty-parens.sps], [dnl
438 data list notable list /x * y *.
439 begin data.
440 1   2
441 1   2.2
442 end data.
443
444 QUICK CLUSTER x y
445         /CRITERIA = CONVERGE()
446         .
447 ])
448
449 AT_CHECK([pspp -o pspp.csv empty-parens.sps], [1], [ignore])
450
451 AT_CLEANUP
452