* ВОПРОС: Как добавить параметры регрессии по наблюдениям (casewise regression) в файл данных. * ОТВЕТ (автор rlevesque@videotron.ca) размещён в SPSSX-L. /* ПОЯСНЕНИЕ. Под casewise-регрессией тут понимается проведение регрессионного анализа */ /* отдельно по каждому наблюдению таким образом, что значения из разных переменных */ /* одной и той же строки формируют наблюдения для анализа. В результате получаем столько */ /* результатов регрессионного анализа, сколько строк было в исходном файле данных. И требуется */ /* к каждой строке добавить результаты анализа - коэффициенты перед независимыми переменными */ /* Здесь приводится пример ситуации, где возможно использование такой casewise-регрессии. */ /* Допустим, у нас есть измерения степени алкогольного опьянения отдельных людей в разные */ /* моменты времени. Для каждого человека результаты этих измерений содержатся в переменных */ /* drink1, drink2 и т.д. Ясно, поскольку эти наблюдения разделяются временем, то именно время может быть независимой переменной, определяющей опьянение. Таким образом, в этом примере получаем результаты регрессионного анализа для каждого отдельного человека относительно */ /* того, как влияет временной фактор и квадрат временного фактора на степень опьянения. - А.Б.*/ * Смоделируем данные (допустим, есть результаты наблюдений 5 объектов в 6 моментов времени). INPUT PROGRAM. LOOP id=1 TO 5. VECTOR drink(6F8.0). LOOP #time=1 TO 6. COMPUTE drink(#time)=RND( UNIFORM(9)). END LOOP. END CASE. END LOOP. END FILE. END INPUT PROGRAM. LIST. SAVE OUTFILE='c:\\temp\\mydata.sav'. *Следующая строка разрешает вывод текста макроса в окно результатов. SET MPRINT=yes. * Начнём. STRING newname(A8). * Следующее будет работать, если в файле данных менее 10,000,000 строк. COMPUTE newname=CONCAT('v',LTRIM(STRING($CASENUM,F7.0))). FLIP /newnames=newname. * Определим 2 независимые переменные и фильтрующую переменную selecvar чтобы пропустить строку-идентификатор ID. COMPUTE time1 = $casenum-1. COMPUTE selecvar=time1>0. COMPUTE time2 = time1**2. *//////////////////////////////////////////////. DEFINE !doit(nbvar=!TOKENS(1)) * Сохраняем результаты регрессии для каждого наблюдения в отдельный файл. !DO !cnt=1 !TO !nbvar REGRESSION /SELECT= selecvar EQ 1 /MISSING LISTWISE /STATISTICS COEFF OUTS R ANOVA /CRITERIA=PIN(.05) POUT(.10) /NOORIGIN /DEPENDENT !CONCAT('v',!cnt) /METHOD=ENTER time1 time2 /OUTFILE=COVB( !QUOTE(!CONCAT('C:\\temp\\param',!cnt,'.sav'))) . !DOEND * Собираем все результаты в один файл, оставляем только коэффициенты.. GET FILE= 'C:\\temp\\param1.sav'. !DO !cnt=2 !TO !nbvar ADD FILES FILE=* /FILE=!QUOTE(!CONCAT('C:\\temp\\param',!cnt,'.sav')) . !DOEND SELECT IF RTRIM(rowtype_)="EST". * добавляем коэффицинты к исходному файлу данных. MATCH FILES /FILE=* /RENAME (depvar_ rowtype_ varname_ = d0 d1 d2) /FILE='C:\\Temp\\mydata.sav' /DROP= d0 d1 d2. EXECUTE. !ENDDEFINE. *//////////////////////////////////////////////. **** Вызов макроса (замените 5 на число наблюдений в вашем файле). **** (Этот шаг может быть тоже автоматизирован, если есть необходимость). !doit nbvar=5.