Бутстреп-оценки для среднего и медианы
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 | * Тема: Бутстреп-оценки для среднего и медианы. * Автор: David Marso. * Опубликован: 12.12.2005. * Заметка Рэйналя: 474 - число наблюдений в файле примера. В принципе, возможно автоматически определить число наблюдений (см. файл bcnon.sps, например). SET PRINTBACK ON MPRINT ON . DEFINE BOOTMED ( NSAMP !TOKENS(1) / NSIZE !TOKENS(1) / BOOTVAR !TOKENS(1) / OUTFILE !TOKENS(1) ) . * Сортируем данные и формируем вектор * . sort cases by !BOOTVAR . vector data (!NSIZE). compute data($casenum)=!BOOTVAR . compute nobreak=1. aggregate outfile * / break nobreak / data1 to !CONCAT(data,!NSIZE) = max(data1 to !CONCAT(data,!NSIZE)). * Делаем рандомизацию и статистические вычисления * . vector data=data1 to !CONCAT(data,!NSIZE) . vector tmp (!NSIZE). loop #P=1 to !NSAMP. * Инициализируем рабочий массив для каждой итерации * . loop #=1 to !NSIZE . compute tmp(#)=0. end loop. * Увеличиваем размер массива каждый раз, как только отбираем очередное наблюдение в выборку * . loop #I=1 to !NSIZE . compute ID=trunc(uni(!NSIZE )+1). compute tmp(ID)=TMP(ID)+1. end loop. **** В данном примере я вычислил медиану и среднее**** . **** Вы можете вычислить ту функцию, которая вам нужна ****. **** Дерзайте!!! **** * Вычисляем номер наблюдения, содержащего медиану * . compute tot=0. compute crit=!NSIZE / 2. * Бежим по массиву, пока не найдём нужное наблюдение * . loop #=1 to !NSIZE . compute tot=tot + tmp(#). end loop if tot >=crit . * Вычисляем медиану * . do if mod(!NSIZE,2)=0 . compute median=(data(#) + data(#-1))/2. else. compute median=data(#). end if . *** Вычисляем среднее, используя ту же выборку *** . compute MEAN=0 . loop # = 1 to !NSIZE . compute MEAN=MEAN + data(#) * tmp(#) . end loop. COMPUTE MEAN=MEAN / !NSIZE . * Записываем среднее и медиану во внешний файл OUTFILE * . xsave outfile !QUOTE(!OUTFILE) / keep median MEAN . * Делаем это ещё и ещё... * . end loop . execute . !ENDDEFINE . GET FILE='C:\\Program Files\\SPSS\\Employee data.sav'. BOOTMED NSAMP=1000 NSIZE = 474 BOOTVAR=SALARY OUTFILE=BOOTME . **GET THE BOOT STRAP FILE AND SMILE *. get file "BOOTME" . |
Related pages
...