* Автор: David Marso. * Опубликован: 09.12.2005. /***********************************************************/ /* Макрос SPSS: */ /* Доверительный интервал по методу бутстреп для альфа Кронбаха */ /* Требует указания трёх аргументов: */ /* NSAMP: число выборок бутстреп */ /* VARLIST: набор переменных, составляющих шкалу */ /* INTWID : доверительный интервал (95 = 95%) */ /* Пример : !CA_BOOT NSAMP 2000 */ /* / VARLIST V1 TO V10 */ /* / INTWID 95 */ /* */ /* Внимание: Этот макрос создаёт и удаляет два файла в текущей рабочей директории */ /* 'NMACRO.INC' и 'BOOTSAMP.SAV'. Исходный файл данных сохраняется как */ /* 'RAWDATA.SAV' и затем восстанавливается после завершения работы макроса. */ /***********************************************************/. DEFINE !CA_BOOT (NSAMP !CHAREND('/') /VARLIST !CHAREND('/') / INTWID !CMDEND ). *0 Сохраняем исходный файл данных после добавления ключевой переменной *. COMPUTE BOOTID=$CASENUM. SAVE OUTFILE 'RAWDATA.SAV'. *1 Находим размер выборки и создаём макрос для неё *. COMPUTE NOBREAK=1. AGGREGATE OUTFILE * / PRESORTED / BREAK=NOBREAK / N=N. WRITE OUTFILE 'NMACRO.INC' / 'DEFINE !NCASE ( ) ',N,' !ENDDEFINE '. EXECUTE. SET ERRORS OFF. INCLUDE 'NMACRO.INC'. SET ERRORS ON. *2 Строим выборки бутстреп * . VECTOR #SUBJ( !NCASE). LOOP SAMPLE=1 TO !NSAMP. * Инициализируем вектор индикаторов наблюдений * . + LOOP #I=1 TO !NCASE. + COMPUTE #SUBJ(#I)=0. + END LOOP. *3 Отмечаем для каждого наблюдения сколько раз оно должно войти в выборки *. + LOOP #ITER=1 TO !NCASE. + COMPUTE INDEX=TRUNC(UNIFORM(!NCASE))+1. + COMPUTE #SUBJ(INDEX)=#SUBJ(INDEX)+1. + END LOOP. *4 Записываем наблюдения и вес для каждой выборки бутстреп *. + LOOP BOOTID=1 TO !NCASE. + DO IF #SUBJ(BOOTID) > 0. + COMPUTE BOOTWGT=#SUBJ(BOOTID) . + XSAVE OUTFILE 'BOOTSAMP.SAV' / KEEP SAMPLE BOOTID BOOTWGT. + END IF. + END LOOP. END LOOP. EXECUTE. *5 Присоединяем исходный файл с помощью ключевой таблицы *. GET FILE 'BOOTSAMP.SAV' . SORT CASES BY BOOTID. MATCH FILES FILE * / TABLE 'RAWDATA.SAV' / BY BOOTID. *6 Взвешиваем наблюдения по числу их вхождений в выборки *. WEIGHT BY BOOTWGT. *7 Рассчитываем альфу Кронбаха для каждой выборки * . COMPUTE SCALE = SUM(!VARLIST). AGGREGATE OUTFILE * / BREAK SAMPLE / !VARLIST SCALE=SD(!VARLIST SCALE). DO REPEAT V=!VARLIST SCALE. COMPUTE V=V**2. END REPEAT. COMPUTE NV=NVALID(!VARLIST). COMPUTE C_ALPHA =(NV/(NV-1))*(1-(SUM(!VARLIST)/SCALE)). * 8 Находим нижнюю и верхнюю доверительные границы для альфы * . SORT CASES BY C_ALPHA. COMPUTE #=#+1. COMPUTE CPCT=#/!NSAMP. COMPUTE #IW=!INTWID/100. SELECT IF (CPCT <=(1-#IW)/2) OR (CPCT >= 1-(1-#IW)/2 ). COMPUTE TAG=CPCT > (1-#IW)/2. MATCH FILES FILE * / FIRST=TOP / LAST=BOT / BY TAG / KEEP C_ALPHA CPCT TAG. SELECT IF (NOT (TAG) AND BOT) OR (TAG AND TOP). DO IF TAG. COMPUTE LCL=LAG(C_ALPHA). COMPUTE UCL=C_ALPHA. PRINT /!QUOTE(!CONCAT(!INTWID,"% доверит интервал для альфа Кронбаха")) /!QUOTE(!CONCAT("Основан на ",!NSAMP," выборках")) /"Нижняя граница=",LCL,' Верхняя граница=',UCL . END IF. EXECUTE. SELECT IF TOP. EXECUTE. ERASE FILE 'BOOTSAMP.SAV'. ERASE FILE 'NMACRO.INC'. GET FILE 'RAWDATA.SAV'. !ENDDEFINE . * Создаём файл данных и запускаем макрос * . * (случайно генерируем данные) *. INPUT PROGRAM. LOOP #CASE=1 to 33. COMPUTE #SEED=NORMAL(1). DO REPEAT V=V1 TO V10. COMPUTE V=.7 * #SEED + NORMAL(1). END REPEAT. END CASE. END LOOP. END FILE. END INPUT PROGRAM. * END OF DATA SIMULATION *. * Запускайте макрос следующей командой. * Измениет 2000 на то количество бутстреп-выборок, которое вам необходимо. * Измените V1 TO V10 на ваш список переменных . * Измените 95 на доверительный уровень, который желаете получить. !CA_BOOT NSAMP=2000 / VARLIST V1 TO V10 / INTWID 95 .