Однофакторный дисперсионный анализ по сгруппированным данным (II)
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 147 148 149 150 151 152 153 154 155 156 157 158 | * Тема: Однофакторный дисперсионный анализ по сгруппированным данным (II): случай нескольких подмассивов в одном файле. * Ключевые слова: однофакторный, дисперсионный, сгруппированные, агрегированные, обобщенные, подмассив, подгруппа, MATRIX, SPLIT, INCLUDE, макрос. * Опубликован: ?, перевод: 27.10.2008. * Автор: Marta Garcia-Granero. * Перевод: А. Балабанов. * Размещение: http://www.spsstools.ru/Syntax/T-Test/ONEWAYwithSummaryDataI2.txt (.sps). * Проверено: SPSS 15.0.0. * Команды MATRIX...END MATRIX распознают включенное расщепление файла (SPLIT) только в пакетном режиме (через INCLUDE). * Переменная testnum определяет подмассивы, которые должны анализироваться отдельно друг от друга - примеч. перев. * (A) ПРИМЕР ДАННЫХ *. data list list/testnum(F4.0) groups(A8) n(F5.0) mean(F8.1) sd(F8.3). begin data 1 Control 10 62.8 6.9730 1 Respir 10 70.2 6.2147 1 Metabol 12 79.4 6.2397 1 Mixed 10 80.2 6.1065 2 Control 15 72.8 7.7703 2 Respir 15 80.4 7.3174 2 Metabol 15 89.4 7.4379 2 Mixed 15 90.2 8.1056 end data. * (B) СКОПИРУЙТЕ И СОХРАНИТЕ СЛЕДУЮЩИЙ СИНТАКСИС В ПАПКУ "C:\\Temp\\SummaryANOVA.sps". ******************** НАЧАЛО СИНТАКСИСА *******************. matrix. * Загрузка данных в матрицы *. get varnum /var=testnum. get names/var=groups. get n/var=n. get mean/var=mean. get sd/var=sd. print /title="-------------------------------------------". print varnum(1) /format="f8.0" /title="Расщепление файла:" /rlabel="Группа" * Основные вычисления *. compute k=nrow(n). compute totaln=msum(n). compute var=sd&**2. compute dfwithin=totaln-k. compute poolvar=msum((n-1)&*var)/dfwithin. * Проверки однородности дисперсий *. do if cmax(n)=cmin(n). print /title="Сбалансированный план. Возможны проверки Хартли и Кочрена". compute cochran=cmax(var)/msum(var). compute fmax=cmax(var)/cmin(var). print {cmax(var),cmin(var),fmax} /title="Проверка Fmax Хартли: см. таблицы критических значений" /format="f8.3" /clabels="Макс S^2","Мин S^2","Значение H". print cochran /title="Проверка Кочрена: см. таблицы критических значений" /format="f8.3" /clabel="Значение C". print (n(1)-1) /title="Число степеней свободы (DF) для всех групп" /format="f8.0". end if. print k /title="Число групп (K)" /format="f8.0". compute x2=dfwithin*ln(poolvar)-msum((n-1)&*ln(var)). compute cc=1+(msum(1/(n-1))-1/dfwithin)/(3*(k-1)). compute chi2=x2/cc. compute chisig=1-chicdf(chi2,k-1). print {chi2,chisig} /title="Проверка Бартлетта на однородность диспресий (df=K-1)" /format="f8.3" /clabels="Хи^2","Знач.". * Описательная статистика по выборкам и в целом *. compute gmean=(msum(n&*mean))/totaln. compute totsd=sqrt((msum((n-1)&*var+n&*(mean&**2))-(gmean&**2)*totaln)/(totaln-1)). compute eem=sd&/sqrt(n). compute toteem=totsd/sqrt(msum(n)). compute samplecv=100*sd/mean. compute totalcv=100*totsd/gmean. * 95% ДИ Альтамна для средних (используя внутригрупповые суммы квадратов и степени свободы вместо данных по каждой выборке) *. loop tvalue95=1960 to 12706. compute t95=tvalue95/1000. compute onetail=1-tcdf(t95,dfwithin). do if abs(onetail-0.025) lt 0.00005. break. end if. end loop. compute low95=mean-t95*sqrt(poolvar/n). compute upp95=mean+t95*sqrt(poolvar/n). compute lowgmean=gmean-t95*sqrt(poolvar/totaln). compute uppgmean=gmean+t95*sqrt(poolvar/totaln). * Вывод результатов *. compute names={names;'Total'}. print {n,mean,sd,samplecv,eem,low95,upp95;totaln,gmean,totsd,totalcv,toteem,lowgmean,uppgmean} /title="Описательные: 95% ДИ для средних (*) " /clabels='N','Среднее','SD','CV (%)','SE средн.','НГ','ВГ' /rnames=names /format='F7.2'. * Общий внутригрупповой (остаточный) коэффициент вариации (CV) *. compute cvar=100*sqrt(poolvar)/gmean. print cvar /title="Общий внутригрупповой коэффициент вариации (*)" /format="F5.2" /rlabels="CV (%)". print /title="(*) 95% ДИ Альтмана и внутригрупповые коэффициенты вариации основаны на предположении о равенстве дисперсий". * Запись данных в файл в матричном формате *. compute group=T({1:k}). MSAVE mean /TYPE=MEAN /fnames=group /factor=group /variable=depvar /snames=testnum /split=varnum /outfile=*. MSAVE sd /TYPE=STDDEV /fnames=group /factor=group /variable=depvar /snames=testnum /split=varnum /outfile=*. MSAVE n /TYPE=N /fnames=group /factor=group /variable=depvar /snames=testnum /split=varnum /outfile=*. print /title='Данные записаны в текущий файл в матричном формате'. end matrix. **************************** КОНЕЦ СИНТАКСИСА **************************. * (C) ТЕПЕРЬ "РАСЩЕПЛЯЕМ" ФАЙЛ ПО ПЕРЕМЕННОЙ "testnum" И ВЫЗЫВАЕМ СИНТАКСИС. set mxloop=30000. split file layered by testnum. include "C:\\Temp\\SummaryANOVA.sps". * Заключительным этапом будет выполнение однофакторного дисперсионного анализа для обоих подмассивов. * Если бы команда ONEWAY с матричными данными и включенным расщеплением файла работала нормально, то следующий синтаксис был бы решением данной задачи. ONEWAY depvar BY group /STATISTICS=DESCRIPTIVES WELCH /POSTHOC=TUKEY T2 /MATRIX=IN(*). *********************************************. * Но, поскольку это не работает (глюк SPSS?), решением будет следующий МАКРОС *. * Примеч. перев.: проверка синтаксиса в SPSS 15 показала, что указанная автором ошибка, вероятно, была исправлена разработчиком. Поэтому решение, приведённое выше, также работает. (D) ОПРЕДЕЛЕНИЕ МАКРОСА *. DEFINE !oneway (!POSITIONAL !TOKENS(1)). !DO !cnt=1 !TO !1. TEMPORARY. SELECT IF(testnum = !cnt). * Можете указать в подкоманде POSTHOC привычные вам апостериорные проверки. ONEWAY depvar BY group /STATISTICS=DESCRIPTIVES WELCH /POSTHOC=TUKEY T2 /MATRIX=IN(*). !DOEND. !ENDDEFINE. (E) ЗАПУСК МАКРОСА *. !oneway 2. |