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