Множественные проверки Манна-Уитни
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 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 | * Тема: Множественные проверки Манна-Уитни. * Ключевые слова: проверка, тест, критерий, Манн-Уитни, Mann-Whitney, test, множественное, сравнение, сочетания, цикл, LOOP, макрос, Kruskal-Wallis, Краскала-Уоллиса. * Опубликован: в SPSSX-L 03.01.2002, перевод: 27.10.2008. * Автор: rlevesque@videotron.ca. * Перевод: А. Балабанов. * Размещение: http://www.spsstools.ru/Syntax/T-Test/MultipleMann-WhitneyTests.txt (.sps). * Проверено: SPSS 15.0.0. *(Вопрос) Есть проблема со следующим макросом: DEFINE multi(depvar=!CHAREND ('/') /factor=!CHAREND ('/') /min=!CHAREND ('/') /max=!CMDEND ). DO IF $CASENUM=1. WRITE OUTFILE "c:\\temp\\multiman.sps" /"NPAR TESTS". LOOP #I=!min to !max-1. LOOP #J=#I+1 to !max. WRITE OUTFILE "c:\\temp\\multiman.sps" / " /M-W= !depvar BY !factor (" #I #J ")". END LOOP. END LOOP. WRITE OUTFILE "c:\\temp\\multiman.sps" /".". END IF. EXECUTE. INCLUDE FILE="c:\\temp\\multiman.sps". !ENDDEFINE. * Его задача - выполнить множественные проверки Манна-Уитни (Mann-Whitney) после проверки Краскала-Уоллиса (Kruskal-Wallis). Но SPSS отказывается выполнять любые статистические процедуры внутри цикла LOOP. Я поэтому постарался использовать цикл чтобы записать файл синтаксиса (multiman.sps), который бы включал весь набор инструкций, и запустить этот файл через INCLUDE. * Пример *. DATA LIST LIST /actype (F8.0) glucose (F8.0). BEGIN DATA 1 51 1 56 1 58 1 60 1 62 2 60 2 65 2 66 2 68 2 68 3 69 3 73 3 74 3 78 3 79 4 70 4 75 4 76 4 77 4 79 END DATA. multi depvar=glucose /factor=actype /min=1 /max=4. * Когда я пытаюсь выполнить этот макрос, то получаю сообщения об ошибках, связанных с именами !depvar и !factor, которые, видимо, распознаются только внутри макроса. * То есть, непосредственно проблема в следующем: * Созданный "multiman.sps" выглядит следующим образом: NPAR TESTS /M-W= !depvar BY !factor ( 1.00 2.00) /M-W= !depvar BY !factor ( 1.00 3.00) /M-W= !depvar BY !factor ( 1.00 4.00) /M-W= !depvar BY !factor ( 2.00 3.00) /M-W= !depvar BY !factor ( 2.00 4.00) /M-W= !depvar BY !factor ( 3.00 4.00) . * А чтобы заставить его работать, я бы хотел, чтобы он выглядел вот так: NPAR TESTS /M-W= glucose BY actype ( 1.00 2.00) /M-W= glucose BY actype ( 1.00 3.00) /M-W= glucose BY actype ( 1.00 4.00) /M-W= glucose BY actype ( 2.00 3.00) /M-W= glucose BY actype ( 2.00 4.00) /M-W= glucose BY actype ( 3.00 4.00) . Как мне записать эти имена переменных в multiman.sps? **************************************************. *(Ответ) Автор: rlevesque@videotron.ca, размещено в SPSSX-L 03.01.2002. **************************************************. SET MPRINT=no. *////////////////. DEFINE multi(depvar=!CHAREND('/') /factor=!CHAREND('/') /min=!CHAREND('/') /max=!CMDEND) STRING depvar factor(A8). COMPUTE depvar=!QUOTE(!depvar). COMPUTE factor=!QUOTE(!factor). DO IF $CASENUM=1. WRITE OUTFILE "c:\\temp\\multiman.sps" /"NPAR TESTS". LOOP #I=!min to !max-1. LOOP #J=#I+1 to !max. WRITE OUTFILE "c:\\temp\\multiman.sps" /" /M-W= "depvar" BY "factor" (" #I #J ")". END LOOP. END LOOP. WRITE OUTFILE "c:\\temp\\multiman.sps" /".". END IF. EXECUTE. INCLUDE FILE="c:\\temp\\multiman.sps". !ENDDEFINE. *////////////////. * Пример *. DATA LIST LIST /actype (F8.0) glucose (F8.0). BEGIN DATA 1 51 1 56 1 58 1 60 1 62 2 60 2 65 2 66 2 68 2 68 3 69 3 73 3 74 3 78 3 79 4 70 4 75 4 76 4 77 4 79 END DATA. SET MPRINT=yes. multi depvar=glucose /factor=actype /min=1 /max=4. |