1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~ 
Цель макросов - автоматически оценить все возможные простые уравнения регрессии для 
одной или нескольких зависимых переменных и большого числа независимых переменных.
Это полезно, если у вас есть множество потенциальных предикторов, и вы хотите их 
быстренько "прогнать", но не желаете двадцать раз править синтаксис.

Автор: Marta 


**************************************************************************** 
* 'Макросы для построения всех простых уравнений линейной и логистической регрессий
****************************************************************************. 
* Пример данных для использования с обоими макросами. 
INPUT PROGRAM. 
- VECTOR V(20). 
- LOOP #I = 1 TO 100. 
- LOOP #J = 1 TO 20. 
- COMPUTE V(#J) = NORMAL(1). 
- END LOOP. 
- END CASE. 
- END LOOP. 
- END FILE. 
END INPUT PROGRAM. 
execute. 

* Допустим, что первые 3 переменные могут играть роль зависимых переменных,
* а остальные 17 - роль предикторов. 
* Для обоих макросов имена зависимых переменных должны быть записаны как y1, y2, ...
* а имена независимых - как x2, x3...
* Так что мы переименуем то, что у нас есть на данный момент.
RENAME VARIABLES (v1 to v3 = y1 to y3). 
RENAME VARIABLES (v4 to v20 = x1 to x17). 
* (чтобы две команды выше сработали, переменные должны располагаться в файле данных
* по соседству). 

********************************************************************. 
* (1) Линейная регрессия. 

* Определение макроса. 
DEFINE lirdoall(!POSITIONAL !TOKENS(1) /!POSITIONAL !TOKENS(1)) 
DO IF $CASENUM=1. 
!DO !i=1 !to !1. 
!LET !yvar=!concat('y', !i). 
!DO !j=1 !to !2. 
!LET !xvar=!concat('x', !j). 
WRITE OUTFILE "c:\\windows\\temp\\alltests.sps" 
 /"REGRESSION" 
 /" /DESCRIPTIVES MEAN STDDEV" 
 /" /STATISTICS COEFF CI R ANOVA" 
 /" /DEPENDENT "!quote(!yvar) 
 /" /METHOD=ENTER " !quote(!xvar) " .". 
* Я добавила в выдачу кое-какие статистики по моему выбору.
* Можете изменить состав, если хотите, но будьте аккуратны с символами / и " . 
!DOEND. 
!DOEND. 
END IF. 
EXECUTE. 
INCLUDE FILE="c:\\windows\\temp\\alltests.sps". 
!ENDDEFINE. 

* Синтаксис вызова макроса: имя_макроса 'число_зависимых_переменных' 'число_независимых_переменных'. 
* Следующий вызов макроса создаст и запустит файл синтаксиса, который построит 
* 3x17=51 уравнение регрессии. 
SET MPRINT=yes.
LIRDOALL 3 17. 
SET MPRINT=no.

********************************************************************. 
* (2) Логистическая регрессия. 
* Определение макроса. 
DEFINE lordoall(!POSITIONAL !TOKENS(1) /!POSITIONAL !TOKENS(1)) 
DO IF $CASENUM=1. 
!DO !i=1 !to !1. 
!LET !yvar=!concat('y', !i). 
!DO !j=1 !to !2. 
!LET !xvar=!concat('x', !j). 
WRITE OUTFILE "c:\\windows\\temp\\alltests.sps" 
 /"LOGISTIC REGRESSION VAR="!quote(!yvar) 
 /" /METHOD=ENTER " !quote(!xvar) 
 /" /PRINT=GOODFIT CI(95) .". 
* Я запросила выдачу кое-каких статистик. 
* Исправьте, если хотите, но будьте аккуратны с символами / и " . 
!DOEND. 
!DOEND. 
END IF. 
EXECUTE. 
INCLUDE FILE="c:\\windows\\temp\\alltests.sps". 
!ENDDEFINE. 

* Перед вызовом макроса... Нам ведь потребуются двоичные зависимые переменные для примера... 
RECODE y1 TO y3 (Lowest thru 0.501=0) (0.501 thru Highest=1) . 
VALUE LABELS y1 TO y3 0 'No' 1 'Yes'. 
EXECUTE . 

* Синтаксис вызова макроса: имя_макроса 'число_зависимых_переменных' 'число_независимых_переменных'. 
* Следующий вызов макроса создаст и запустит файл синтаксиса, который построит 
* 3x17=51 уравнение регрессии. 
LORDOALL 3 17.