~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~ Цель макросов - автоматически оценить все возможные простые уравнения регрессии для одной или нескольких зависимых переменных и большого числа независимых переменных. Это полезно, если у вас есть множество потенциальных предикторов, и вы хотите их быстренько "прогнать", но не желаете двадцать раз править синтаксис. Автор: 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.