*(Вопрос) Когда сравниваем две группы (экспериментальную и контрольную), бывает полезно учесть неоднородность этих групп, которая может сильно искажать результаты. Так, в одной группе могут оказаться более тяжёлые пациенты, чем в другой. Один из способов нейтрализации неоднородностей групп - подбор контрольной группы на основе т.н. propensity score - показателя схожести с экспериментальной группой. Идея такова, что сравнивать нужно наблюдения из разных групп, похожие друг на друга, то есть, со схожими propensity scrores. Один из способов создания propensity scores - логистическая регрессия. Я всё это сделал и, в результате, получил следующие переменные в файле данных: A. Переменная группы. Указывает, находился ли пациент в контрольной или экспериментальной группе (0 или 1). B. Переменная со значениями propensity. Показывает шансы пациента находиться в экспериментальной группе при его характеристиках (по полу, возрасту, истории болезни и т.д., т.е. по тем предикторам, которые использовались в логистической регрессии). C. Переменная с результатами лечения (абсолютные или процентные показатели улучшения). Теперь передо мной стоит уже не теоретический или статистический вопрос, а, скорее, технический: определить номера пациентов, составляющих "улучшенную" контрольную группу (похожую на экспериментальную). Более точно, требуется новая переменная, в которой для каждой строки с пациентом из экспериментальной группы будет содержаться % улучшения для наиболее похожего на него пациента из контролькной группы. *(Ответ) Размещён в SPSSX-L, автор: rlevesque@videotron.ca, 7.11.2001. * http://www.spsstools.net * Решение предполагает, что число наблюдений в экспериментальной группе известно. * Если необходимо, это ограничение можно релаксировать доработкой синтаксиса. * Создадим данные для примера. INPUT PROGRAM. SET SEED=2365847. LOOP caseid=1 TO 20. COMPUTE treatm=TRUNC(UNIFORM(1)+.5). COMPUTE propen=UNIFORM(100). COMPUTE improv=UNIFORM(100). END CASE. END LOOP. END FILE. END INPUT PROGRAM. SORT CASES BY treatm(D) propen. COMPUTE idx=$CASENUM. SAVE OUTFILE='c:\\temp\\mydata.sav'. * Удалим ранее созданный файл результатов, если таковой имелся. ERASE FILE='c:\\temp\\results.sav'. COMPUTE key=1. SELECT IF (1=0). * Создадим пустой файл, в который быдем записывать результаты. SAVE OUTFILE='c:\\temp\\results.sav'. ********************************************. * Определим рабочий макрос. ********************************************. SET MPRINT=no. *////////////////////////////////. DEFINE !match (nbtreat=!TOKENS(1)) !DO !cnt=1 !TO !nbtreat GET FILE='c:\\temp\\mydata.sav'. SELECT IF idx=!cnt OR treatm=0. DO IF $CASENUM=1. COMPUTE #target=propen. ELSE. COMPUTE delta=propen-#target. END IF. EXECUTE. SELECT IF ~MISSING(delta). IF (delta<0) delta=-delta. SORT CASES BY delta. SELECT IF $CASENUM=1. COMPUTE key=!cnt. ADD FILES FILE=* /FILE='c:\\temp\\results.sav'. SAVE OUTFILE='c:\\temp\\results.sav'. !DOEND !ENDDEFINE. *////////////////////////////////. SET MPRINT=yes. **************************. * Вызовем макрос (мы знаем, что в экспериментальной группе есть 7 наблюдений). **************************. !match nbtreat=7. * Отсортируем файл результатов, чтобы можно было выполнить слиянеие. GET FILE='c:\\temp\\results.sav'. SORT CASES BY key. SAVE OUTFILE='c:\\temp\\results.sav'. * Сопоставим каждому наблюдению из экспериментальной группы наиболее похожее наблюдение из контрольной. GET FILE='c:\\temp\\mydata.sav'. MATCH FILES /FILE=* /FILE='C:\\Temp\\results.sav' /RENAME (idx = d0) caseid=caseid2 improv=improv2 propen=propen2 treatm=treatm2 key=idx /BY idx /DROP= d0. EXECUTE. * Готово!.