Add copyright and licence notices to files which lack them.
[pspp] / tests / language / data-io / matrix-data.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([MATRIX DATA])
17
18 AT_SETUP([Matrix data (lower file)])
19
20 AT_DATA([matrix-data.pspp], [dnl
21 matrix data
22     variables = rowtype_
23     var01 TO var08
24     /format = lower diagonal
25     /file = 'matrix.dat'
26     .
27
28 list.
29 ])
30
31 AT_DATA([matrix.dat], [dnl
32 mean  24.3  5.4  69.7  20.1  13.4  2.7  27.9  3.7
33 sd    5.7   1.5  23.5  5.8   2.8   4.5  5.4   1.5
34 n     92    92   92    92    92    92   92    92
35 corr 1.00
36 corr .18  1.00
37 corr -.22  -.17  1.00
38 corr .36  .31  -.14  1.00
39 corr .27  .16  -.12  .22  1.00
40 corr .33  .15  -.17  .24  .21  1.00
41 corr .50  .29  -.20  .32  .12  .38  1.00
42 corr .17  .29  -.05  .20  .27  .20  .04  1.00
43 ])
44
45
46 AT_CHECK([pspp -O format=csv matrix-data.pspp], [0], [dnl
47 Table: Data List
48 ROWTYPE_,VARNAME_,var01,var02,var03,var04,var05,var06,var07,var08
49 mean    ,,24.3000,5.4000,69.7000,20.1000,13.4000,2.7000,27.9000,3.7000
50 STDDEV  ,,5.7000,1.5000,23.5000,5.8000,2.8000,4.5000,5.4000,1.5000
51 n       ,,92.0000,92.0000,92.0000,92.0000,92.0000,92.0000,92.0000,92.0000
52 corr    ,var01,1.0000,.1800,-.2200,.3600,.2700,.3300,.5000,.1700
53 corr    ,var02,.1800,1.0000,-.1700,.3100,.1600,.1500,.2900,.2900
54 corr    ,var03,-.2200,-.1700,1.0000,-.1400,-.1200,-.1700,-.2000,-.0500
55 corr    ,var04,.3600,.3100,-.1400,1.0000,.2200,.2400,.3200,.2000
56 corr    ,var05,.2700,.1600,-.1200,.2200,1.0000,.2100,.1200,.2700
57 corr    ,var06,.3300,.1500,-.1700,.2400,.2100,1.0000,.3800,.2000
58 corr    ,var07,.5000,.2900,-.2000,.3200,.1200,.3800,1.0000,.0400
59 corr    ,var08,.1700,.2900,-.0500,.2000,.2700,.2000,.0400,1.0000
60 ])
61 AT_CLEANUP
62
63
64
65 AT_SETUP([Matrix data (upper)])
66
67 AT_DATA([matrix-data.pspp], [dnl
68 matrix data
69     variables = rowtype_  var01 var02 var03 var04
70     /format = upper diagonal.
71
72 begin data
73 mean        34 35 36 37
74 sd          22 11 55 66
75 n_vector    100 101 102 103
76 corr        1 9 8 7
77 corr        1 6 5
78 corr        1 4
79 corr        1
80 end data.
81
82 list.
83 ])
84
85 AT_CHECK([pspp -O format=csv matrix-data.pspp], [0], [dnl
86 Table: Data List
87 ROWTYPE_,VARNAME_,var01,var02,var03,var04
88 mean    ,,34.0000,35.0000,36.0000,37.0000
89 STDDEV  ,,22.0000,11.0000,55.0000,66.0000
90 N       ,,100.0000,101.0000,102.0000,103.0000
91 corr    ,var01,1.0000,9.0000,8.0000,7.0000
92 corr    ,var02,9.0000,1.0000,6.0000,5.0000
93 corr    ,var03,8.0000,6.0000,1.0000,4.0000
94 corr    ,var04,7.0000,5.0000,4.0000,1.0000
95 ])
96
97 AT_CLEANUP
98
99 AT_SETUP([Matrix data (full)])
100
101 dnl Just for fun, this one is in a different case.
102 AT_DATA([matrix-data.pspp], [dnl
103 matrix data
104     variables = ROWTYPE_  var01 var02 var03 var04
105     /format = full diagonal.
106
107 begin data
108 MEAN 34 35 36 37
109 SD   22 11 55 66
110 N    100 101 102 103
111 CORR 1 9 8 7
112 CORR 9 1 6 5
113 CORR 8 6 1 4
114 CORR 7 5 4 1
115 end data.
116
117 list.
118 ])
119
120
121 AT_CHECK([pspp -O format=csv matrix-data.pspp], [0], [dnl
122 Table: Data List
123 ROWTYPE_,VARNAME_,var01,var02,var03,var04
124 MEAN    ,,34.0000,35.0000,36.0000,37.0000
125 STDDEV  ,,22.0000,11.0000,55.0000,66.0000
126 N       ,,100.0000,101.0000,102.0000,103.0000
127 CORR    ,var01,1.0000,9.0000,8.0000,7.0000
128 CORR    ,var02,9.0000,1.0000,6.0000,5.0000
129 CORR    ,var03,8.0000,6.0000,1.0000,4.0000
130 CORR    ,var04,7.0000,5.0000,4.0000,1.0000
131 ])
132
133 AT_CLEANUP
134
135
136 AT_SETUP([Matrix data (upper nodiagonal)])
137
138 AT_DATA([matrix-data.pspp], [dnl
139 matrix data
140     variables = rowtype_  var01 var02 var03 var04
141     /format = upper nodiagonal.
142
143 begin data
144 mean 34 35 36 37
145 sd   22 11 55 66
146 n    100 101 102 103
147 corr  9 8 7
148 corr  6 5
149 corr  4
150 end data.
151
152 list.
153 ])
154
155 AT_CHECK([pspp -O format=csv matrix-data.pspp], [0], [dnl
156 Table: Data List
157 ROWTYPE_,VARNAME_,var01,var02,var03,var04
158 mean    ,,34.0000,35.0000,36.0000,37.0000
159 STDDEV  ,,22.0000,11.0000,55.0000,66.0000
160 n       ,,100.0000,101.0000,102.0000,103.0000
161 corr    ,var01,1.0000,9.0000,8.0000,7.0000
162 corr    ,var02,9.0000,1.0000,6.0000,5.0000
163 corr    ,var03,8.0000,6.0000,1.0000,4.0000
164 corr    ,var04,7.0000,5.0000,4.0000,1.0000
165 ])
166
167 AT_CLEANUP
168
169
170 AT_SETUP([Matrix data (lower nodiagonal)])
171
172 AT_DATA([matrix-data.pspp], [dnl
173 matrix data
174     variables = rowtype_  var01 var02 var03 var04
175     /format = lower nodiagonal.
176
177 begin data
178 mean 34 35 36 37
179 sd   22 11 55 66
180 n    100 101 102 103
181 corr  9
182 corr  8 6
183 corr  7 5 4
184 end data.
185
186 list.
187 ])
188
189 AT_CHECK([pspp -O format=csv matrix-data.pspp], [0], [dnl
190 Table: Data List
191 ROWTYPE_,VARNAME_,var01,var02,var03,var04
192 mean    ,,34.0000,35.0000,36.0000,37.0000
193 STDDEV  ,,22.0000,11.0000,55.0000,66.0000
194 n       ,,100.0000,101.0000,102.0000,103.0000
195 corr    ,var01,1.0000,9.0000,8.0000,7.0000
196 corr    ,var02,9.0000,1.0000,6.0000,5.0000
197 corr    ,var03,8.0000,6.0000,1.0000,4.0000
198 corr    ,var04,7.0000,5.0000,4.0000,1.0000
199 ])
200
201 AT_CLEANUP
202
203
204
205 AT_SETUP([Matrix data split data])
206
207 AT_DATA([matrix-data.pspp], [dnl
208 matrix data
209     variables = s1 s2 rowtype_  var01 var02 var03
210     /split=s1 s2.
211
212 begin data
213 8 0   mean     21.4  5.0  72.9
214 8 0   sd       6.5   1.6  22.8
215 8 0   n        106   106  106
216 8 0   corr     1
217 8 0   corr    .41  1
218 8 0   corr    -.16  -.22  1
219 8 1   mean     11.4  1.0  52.9
220 8 1   sd       9.5   8.6  12.8
221 8 1   n        10   11  12
222 8 1   corr     1
223 8 1   corr    .51  1
224 8 1   corr    .36  -.41  1
225 end data.
226
227 display dictionary.
228
229 list.
230 ])
231
232
233 AT_CHECK([pspp -O format=csv matrix-data.pspp], [0], [dnl
234 Variable,Description,Position
235 s1,Format: F4.0,1
236 s2,Format: F4.0,2
237 ROWTYPE_,Format: A8,3
238 VARNAME_,Format: A8,4
239 var01,Format: F10.4,5
240 var02,Format: F10.4,6
241 var03,Format: F10.4,7
242
243 Table: Data List
244 s1,s2,ROWTYPE_,VARNAME_,var01,var02,var03
245 8,0,mean    ,,21.4000,5.0000,72.9000
246 8,0,STDDEV  ,,6.5000,1.6000,22.8000
247 8,0,n       ,,106.0000,106.0000,106.0000
248 8,0,corr    ,var01,1.0000,.4100,-.1600
249 8,0,corr    ,var02,.4100,1.0000,-.2200
250 8,0,corr    ,var03,-.1600,-.2200,1.0000
251 8,1,mean    ,,11.4000,1.0000,52.9000
252 8,1,STDDEV  ,,9.5000,8.6000,12.8000
253 8,1,n       ,,10.0000,11.0000,12.0000
254 8,1,corr    ,var01,1.0000,.5100,.3600
255 8,1,corr    ,var02,.5100,1.0000,-.4100
256 8,1,corr    ,var03,.3600,-.4100,1.0000
257 ])
258
259 AT_CLEANUP
260
261
262
263
264 AT_SETUP([Matrix data duplicate variable])
265
266 dnl Negative test to check for sane behaviour in the face of bad syntax
267 AT_DATA([matrix-data.pspp], [dnl
268 set decimal = dot .
269 matrix data
270     variables = s1 s1 rowtype_  var01 var02 var03
271     /split=s1.
272
273 begin data
274 0   mean     21.4  5.0  72.9
275 0   sd       6.5   1.6  22.8
276 0   n        106   106  106
277 0   corr     1
278 0   corr    .41  1
279 0   corr    -.16  -.22  1
280 end data .
281
282 list.
283 ])
284
285
286 AT_CHECK([pspp -O format=csv matrix-data.pspp], [1], [dnl
287 matrix-data.pspp:3: error: MATRIX DATA: Variable s1 appears twice in variable list.
288
289 matrix-data.pspp:6: error: Stopping syntax file processing here to avoid a cascade of dependent command failures.
290 ])
291
292 AT_CLEANUP
293
294
295
296 AT_SETUP([Matrix data - long variable names])
297
298 AT_DATA([matrix-data.pspp], [dnl
299 matrix data
300     variables = rowtype_  var01 var_two variable_number_three variableFour
301     /format = upper diagonal.
302
303 begin data
304 mean         34  35  36  37
305 sd           22  11  55  66
306 n_vector    100 101 102 103
307 corr          1   9   8   7
308 corr              1   6   5
309 corr                  1   4
310 corr                      1
311 end data.
312
313 list.
314 ])
315
316 AT_CHECK([pspp -O format=csv matrix-data.pspp], [0], [dnl
317 Table: Data List
318 ROWTYPE_,VARNAME_,var01,var_two,variable_number_three,variableFour
319 mean    ,,34.0000,35.0000,36.0000,37.0000
320 STDDEV  ,,22.0000,11.0000,55.0000,66.0000
321 N       ,,100.0000,101.0000,102.0000,103.0000
322 corr    ,var01,1.0000,9.0000,8.0000,7.0000
323 corr    ,var_two,9.0000,1.0000,6.0000,5.0000
324 corr    ,variable_number_three,8.0000,6.0000,1.0000,4.0000
325 corr    ,variableFour,7.0000,5.0000,4.0000,1.0000
326 ])
327
328 AT_CLEANUP
329
330
331
332 AT_SETUP([Matrix reader - read integrity])
333
334 dnl Check that matrices presented are read correctly.
335 dnl The example below is an unlikely one since all
336 dnl covariance/correlation matrices must be symetrical
337 dnl but it serves a purpose for this test.
338 AT_DATA([matrix-reader.pspp], [dnl
339 matrix data
340     variables = rowtype_  var01 to var9
341     /format = full.
342
343 begin data
344 n    1  2  3  4  5  6  7  8  9
345 sd   100 200 300 400 500 600 700 800 900
346 corr 11 12 13 14 15 16 17 18 19
347 corr 21 22 23 24 25 26 27 28 29
348 corr 31 32 33 34 35 36 37 38 39
349 corr 41 42 43 44 45 46 47 48 49
350 corr 51 52 53 54 55 56 57 58 59
351 corr 61 62 63 64 65 66 67 68 69
352 corr 71 72 73 74 75 76 77 78 79
353 corr 81 82 83 84 85 86 87 88 89
354 corr 91 92 93 94 95 96 97 98 99
355 end data.
356
357 factor  /matrix = in (corr = *)
358         /analysis var02 var04 var06
359         /method = correlation
360         /rotation = norotate
361         /print correlation.
362 ])
363
364 AT_CHECK([pspp -O format=csv matrix-reader.pspp], [0], [dnl
365 Table: Correlation Matrix
366 ,,var02,var04,var06
367 Correlations,var02,22.00,24.00,26.00
368 ,var04,42.00,44.00,46.00
369 ,var06,62.00,64.00,66.00
370
371 Table: Component Matrix
372 ,Component,
373 ,1,2
374 var02,6.73,-2.23
375 var04,6.95,2.15
376 var06,9.22,.01
377 ])
378
379 AT_CLEANUP
380
381
382 AT_SETUP([Matrix data - too many rows])
383
384 dnl Test for a crash which occurred when the matrix had more rows declared
385 dnl than variables to hold them.
386 AT_DATA([matrix-data.pspp], [dnl
387 matrix data
388     variables = rowtype_
389     var01 var02 var03 var04
390     / format = upper diagonal .
391 begin data
392     mean     21.4  5.0  72.9  17.4
393     sd       6.5  1.6  22.8  5.7
394     n       106  106  106  106
395     corr    1.00  .32  .48  .28
396     corr    1.00  .72  .54  .44
397     corr    1.00  .50  .59  .64
398     corr    1.00  .62  .49  -.30
399     corr    1.00  .56  -.38  .52
400     corr    1.00  -.73  .91  .80
401     corr    1.00  -.65  -.60
402     corr    1.00  .70
403     corr    1.00
404 end data .
405
406 execute.
407 ])
408
409
410 AT_CHECK([pspp -O format=csv matrix-data.pspp], [1], [dnl
411 matrix-data.pspp:13: error: MATRIX DATA: There are 4 variable declared but the data has at least 5 matrix rows.
412
413 matrix-data.pspp:20: error: EXECUTE: EXECUTE is allowed only after the active dataset has been defined.
414 ])
415
416
417 AT_CLEANUP
418
419
420
421
422 AT_SETUP([Matrix data (badly formed)])
423
424 AT_DATA([data.pspp], [dnl
425 data list list /ROWTYPE_ (a8) VARNAME_(a4) v1 v2 v3 v4xxxxxxxxxxxxxxxxxxxxxzzzzzzzzzzzzzxxxxxxxxx.
426 begin data
427 mean ""                          1 2 3 4
428 sd   ""                          5 6 7 8
429 n    ""                          2 3 4 5
430 corr v1                          11 22 33 44
431 corr v2                          55 66 77 88
432 corr v3                          111 222 333 444
433 corr v4                           4 3 21 1
434 end data.
435
436 list.
437
438 factor matrix=in(corr = *)
439         .
440 ])
441
442 AT_CHECK([pspp -O format=csv data.pspp], [1], [ignore])
443
444 AT_CLEANUP
445
446
447
448
449 AT_SETUP([Matrix data (N subcommand)])
450
451 AT_DATA([matrix-data.pspp], [dnl
452 matrix data
453     variables = rowtype_  var01 var02 var03 var04
454     /n = 99
455     /format = upper nodiagonal.
456 begin data
457 mean 34 35 36 37
458 sd   22 11 55 66
459 n_vector 1 2 3 4
460 corr  9 8 7
461 corr  6 5
462 corr  4
463 end data.
464
465 list.
466 ])
467
468 AT_CHECK([pspp -O format=csv matrix-data.pspp], [0], [dnl
469 "matrix-data.pspp:12: warning: MATRIX DATA: The N subcommand was specified, but a N record was also found in the data.  The N record will be ignored."
470
471 Table: Data List
472 ROWTYPE_,VARNAME_,var01,var02,var03,var04
473 N       ,,99.0000,99.0000,99.0000,99.0000
474 mean    ,,34.0000,35.0000,36.0000,37.0000
475 STDDEV  ,,22.0000,11.0000,55.0000,66.0000
476 corr    ,var01,1.0000,9.0000,8.0000,7.0000
477 corr    ,var02,9.0000,1.0000,6.0000,5.0000
478 corr    ,var03,8.0000,6.0000,1.0000,4.0000
479 corr    ,var04,7.0000,5.0000,4.0000,1.0000
480 ])
481
482 AT_CLEANUP