* Определение объемов выборок для статистических выводов о долях (пропорциях). * (I) РАЗМЕР ВЫБОРКИ ДЛЯ ОЦЕНКИ ДОВЕРИТЕЛЬНОГО ИНТЕРВАЛА *. DEFINE ciprop(p=!DEFAULT(0.5) !TOKENS(1) /eps=!TOKENS(1) /ci=!DEFAULT(95) !TOKENS(1) ). * Размер выборки, необходимый для оценки доверительного интервала одной доли *. MATRIX. PRINT /TITLE ' ОБЪЕМ ВЫБОРКИ: ЗАДАННАЯ ТОЧНОСТЬ ДОВЕРИТЕЛЬНОГО ИНТЕРВАЛА: ОДНА ДОЛЯ'. compute p=!p. compute eps=!eps. compute ci=!ci. do if ci=95. compute zalfa=1.96. end if. do if ci=99. compute zalfa=2.576. end if. do if ci=99.9. compute zalfa=3.09. end if. print ci /format="f8.1" /title='Уровень доверия (%)'. print eps /format="f8.2" /title="Желаемая точность". print p /format="f8.2" /title="Ожидаемая доля". compute n=TRUNC(p*(1-p)*((zalfa/eps)**2))+1. print n /format="f8.0" /title="Требуемый размер выборки". END MATRIX. !ENDDEFINE. * ВЫЗОВ макроса: задайте значения ожидаемой доли, желаемой точности оценки (половина ширины доверительного интервала) и уровень доверия. Если сведения о возможной величине доли отсутствуют, следует использовать наиболее консервативную оценку (p=0.5). Значения по умолчанию для p и ci: 0.5 и 95 *. ciprop eps=0.02. ciprop p=0.3 eps=0.04 ci=99. ciprop p=0.2 eps=0.03 ci=99.9. ******************************************************************************** (II) РАЗМЕРЫ ВЫБОРОК ДЛЯ ПРОВЕРКИ ГИПОТЕЗ *. * Создадим дополнительный файл, где отразим обычные параметры для заданного уровня значимости (альфа) и мощности статистической проверки. * В файле собраны традиционно используемые варианты условий для определения размера выборки (при желании вы можете дополнить файл собственными условиями): - альфа=5% и 1% для одно- и двусторонних гипотез - мощность=80%, 90%, 95% и 99%. * Данный файл должен быть активным файлом данных при запуске последующих макросов. DATA LIST LIST /id(F2.0) alfa(f8.3) tails(F2.0) power(F8.3). BEGIN DATA 1 0.05 1 0.80 2 0.05 2 0.80 3 0.05 1 0.90 4 0.05 2 0.90 5 0.05 1 0.95 6 0.05 2 0.95 7 0.05 1 0.99 8 0.05 2 0.99 9 0.01 1 0.80 10 0.01 2 0.80 11 0.01 1 0.90 12 0.01 2 0.90 13 0.01 1 0.95 14 0.01 2 0.95 15 0.01 1 0.99 16 0.01 2 0.99 END DATA. COMPUTE zalfa = IDF.NORMAL(1-(alfa/tails),0,1) . COMPUTE zbeta = IDF.NORMAL(1-power,0,1) . EXEC. ********************************************* * ОДНА ВЫБОРКА, ДВОИЧНЫЕ ПЕРЕМЕННЫЕ (ДОЛИ) * *********************************************. DEFINE oneprop(p0=!TOKENS(1) /p1=!TOKENS(1)). * Сравнение одной доли в выборке с долей в генеральной совокупности p0: значение доли для нулевой гипотезы p1: значение доли для альтернативной гипотезы (требуется доп. файл) *. MATRIX. PRINT /TITLE ' ОБЪЕМ ВЫБОРКИ: ОДНА ДОЛЯ '. get id /var=id. get alfa /var=alfa. get tails/ var=tails. get power /var=power. get zalfa /var=zalfa. get zbeta /var=zbeta. compute p0=!p0. compute p1=!p1. compute diff=abs(p0-p1). print {p0,p1,diff} /format="f8.2" /clabels="Нуль-p","Альт.-p", "Разность" /title="Определяемая величина различий". compute n=TRUNC(((zalfa*sqrt(p0*(1-p0))-zbeta*sqrt(p1*(1-p1)))&**2)/(diff&**2))+1. print {id,100*alfa,tails,100*power,n} /format="f8.0" /clabels="NN","Альфа(%)","Хвосты","Power(%)","N" /title="Требуемая величина выборки". END MATRIX. !ENDDEFINE. * ВЫЗОВ макроса: необходимо указать значения p0 и p1 *. oneprop p0=0.5 p1=0.8. DEFINE poneprop(p0=!TOKENS(1) /p1=!TOKENS(1) /n=!TOKENS(1) /alfa=!DEFAULT(0.05) !TOKENS(1) /tails=!DEFAULT(2) !TOKENS(1)). * Мощность критерия проверки; задан размер выборки и значения p0 и p1 (доп. файл НЕ требуется) *. MATRIX. PRINT /TITLE ' ОБЪЕМ ВЫБОРКИ: МОЩНОСТЬ ПРОВЕРКИ (ОДНА ДОЛЯ)'. compute p0=!p0. compute p1=!p1. compute diff=abs(p0-p1). compute n=!n. compute alfa=!alfa. compute tails=!tails. compute pval=alfa/tails. do if pval=0.05. compute zalfa=1.645. end if. do if pval=0.025. compute zalfa=1.96. end if. do if pval=0.01. compute zalfa=2.326. end if. do if pval=0.005. compute zalfa=2.576. end if. print {p0,p1,diff} /format="f8.2" /clabels="Нуль-p","Альт.-p", "Разность" /title="Определяемая величина различий". print {100*alfa,tails,n} /format="f8.0" /clabels="Альфа(%)","Хвосты","N" /title="Входные данные". compute beta=100*(1-cdfnorm((zalfa*sqrt(p0*(1-p0))-diff*sqrt(n))/sqrt(p1*(1-p1)))). print beta /format="f8.1" /title="Мощность критерия проверки (%)". END MATRIX. !ENDDEFINE. * ВЫЗОВ макроса: необходимо задать значения p0, p1, объем выборки, уровень альфа и хвосты (тип гипотез: одност./двустор.) *. poneprop p0=0.5 p1=0.8 n=30 alfa=0.05 tails=2. poneprop p0=0.5 p1=0.8 n=20 alfa=0.05 tails=2. poneprop p0=0.5 p1=0.8 n=15 alfa=0.05 tails=1. * Значения альфа и тип гипотезы имеют умолчания, соответственно, 0.05 и 2. ******************************************** * ДВЕ НЕЗАВИСИМЫЕ ВЫБОРКИ, ДВОИЧНЫЕ ПЕРЕМЕННЫЕ * ********************************************. DEFINE twoprop(p1=!TOKENS(1)/ p2=!TOKENS(1)/ r=!DEFAULT(1)!TOKENS(1)). * Сравнение 2 независимых пропорций (требуется доп. файл) *. MATRIX. PRINT /TITLE ' ОБЪЕМ ВЫБОРКИ: ДВЕ НЕЗАВИСИМЫЕ ДОЛИ'. get id /var=id. get alfa /var=alfa. get tails/ var=tails. get power /var=power. get zalfa /var=zalfa. get zbeta /var=zbeta. compute k=!r. compute p1=!p1. compute q1=1-p1. compute p2=!p2. compute q2=1-p2. compute p=(p1+k*p2)/(1+k). compute q=1-p. compute diff=abs(p1-p2). print {p1,p2,diff} /format="f8.2" /clabels="p1","p2","Разность" /title="Определяемая величина различий". print k /format="f8.0" /title="Отношение (N2/N1)". * Ni *. COMPUTE n1=TRUNC(((zalfa*sqrt(p*q*(1+k)/k)-zbeta*sqrt(p1*q1+(p2*q2/k)))&**2)/(diff**2))+1. COMPUTE n2=TRUNC(((zalfa*sqrt(p*q*(1+k))-zbeta*sqrt(k*p1*q1+(p2*q2)))&**2)/(diff**2))+1. print {id,100*alfa,tails,100*power,n1,n2,n1+n2} /format="f8.0" /clabels="NN","Альфа(%)","Хвосты","Мощн.(%)","N1","N2","Общий N" /title="Требуемый размер выборки". END MATRIX. !ENDDEFINE. * ВЫЗОВ макроса: необходимо указать значения p1, p2 и отношение размеров выборок*. twoprop p1=0.5 p2=0.3 r=1. twoprop p1=0.5 p2=0.3 r=2. twoprop p1=0.5 p2=0.3 r=3. * Если вам необходимо получить результат расчета только для одного условия, например, альфа=5%, односторонняя проверка и 90% мощности (строка № 3), сделайте так:. TEMPORARY. SELECT IF ID=3. twoprop p1=0.5 p2=0.3 r=2. DEFINE ptwoprop(p1=!TOKENS(1) /p2=!TOKENS(1) /n1=!TOKENS(1) /n2=!TOKENS(1) /alfa=!DEFAULT(0.05) !TOKENS(1) /tails=!DEFAULT(2) !TOKENS(1)). * Мощность критерия проверки; заданы размеры выборок и доли p1 и p2 (доп. файл НЕ требуется) *. MATRIX. PRINT /TITLE ' ОБЪЕМ ВЫБОРКИ: МОЩНОСТЬ ПРОВЕРКИ (ДВЕ ДОЛИ (ПРОПОРЦИИ))'. compute p1=!p1. compute p2=!p2. compute n1=!n1. compute n2=!n2. compute q1=1-p1. compute q2=1-p2. compute p=(n1*p1+n2*p2)/(n1+n2). compute q=1-p. compute diff=abs(p1-p2). compute n=2*n1*n2/(n1+n2). compute alfa=!alfa. compute tails=!tails. compute pval=alfa/tails. do if pval=0.05. compute zalfa=1.645. end if. do if pval=0.025. compute zalfa=1.96. end if. do if pval=0.01. compute zalfa=2.326. end if. do if pval=0.005. compute zalfa=2.576. end if. compute diff=abs(p1-p2). print {p1,p2,diff} /format="f8.2" /clabels="p1","p2","Разность" /title="Определяемая величина различий". print {100*alfa,tails,n1,n2} /format="f8.0" /clabels="Альфа(%)","Хвосты","N1","N2" /title="Входные данные". compute beta=100*(1-cdfnorm((zalfa*sqrt(2*p*q)-diff*sqrt(n))/sqrt(p1*q1+p2*q2))). print beta /format="f8.1" /title="Мощность критерия проверки (%)". END MATRIX. !ENDDEFINE. * ВЫЗОВ макроса: необходимо указать объемы обеих выборок, доли, уровни альфа и типы гипотез(хвосты: одност./двуст.)*. ptwoprop p1=0.5 p2=0.3 n1=124 n2=124 alfa=0.05 tails=2. ptwoprop p1=0.5 p2=0.3 n1=82 n2=245 alfa=0.05 tails=2. ptwoprop p1=0.5 p2=0.3 n1=115 n2=229 alfa=0.01 tails=1. ptwoprop p1=0.5 p2=0.4 n1=50 n2=80 alfa=0.05 tails=1. * Уровни альфа и типы гипотез имеют значения по умолчанию, равные, соответственно, 0.05 и 2.