ПРИМЕР:
В выборке 400 респондентов имеется:
(1) 60 голосов за "красных"
(2) 120 голосов за "синих"
(3) 20 голосов за "зелёных"
(4) 200 голосов за "серых"
(5) 0 голосов за "чёрных"
т.е. никто не "проголосовал" за "чёрных", но мы точно знаем, что такая партия существует.
Тогда байесовские оценки долей и 99% доверительные интервалы могут быть подсчитаны как:
bayes 60 120 20 200 0 / 99%.
В случае 95% доверительного интервала, последний аргумент может быть опущен:
bayes 60 120 20 200 0.
**************************************************
* Макрос: Bayes.sps *
* Автор: Евгений Ивашкевич (Evgeny Ivashkevich) *
* E-mail: ivashkev@yandex.ru) *
* Дата : 2005/07/19 *
**************************************************
preserve.
set printback=off.
define bayes (!positional !charend ('/')
/!positional !charend ('%') !default(95)).
!let !n = 0.
!let !r = 0.
!do !k !in (!1).
!let !n = !length(!concat(!blanks(!n),!blanks(!k))).
!let !r = !length(!concat(!blanks(!r),!blanks(1))).
!doend.
input program.
numeric id (f2) pr se lb ub (f7.5).
vector cov(!r e10.3) #p(!r).
string info(A10).
variable labels info ' '
id '#'
pr 'Доля'
se 'Стандартная ошибка'
lb 'Нижняя граница'
ub 'Верхняя граница'.
compute #i = 0.
!do !k !in (!1).
compute #i = #i+1.
compute #p(#i) = (!k+1)/(!n+!r).
!doend.
loop #i=1 to !r.
compute id = #i.
compute pr = #p(#i).
compute se = sqrt(#p(#i)*(1-#p(#i))/(!n+!r+1)).
compute lb = max(#p(#i)+probit((100-!2)/200)*se,0).
compute ub = min(#p(#i)+probit((100+!2)/200)*se,1).
loop #j=1 to !r.
if (#j =#i) cov(#j) = #p(#i)*(1-#p(#i))/(!n+!r+1).
if (#j<>#i) cov(#j) = -#p(#i)*#p(#j)/(!n+!r+1).
end loop.
if ($casenum=1) info = concat('P =',string(!2,f4),'%').
if ($casenum=2) info = concat('N =',string(!n,f5)).
if ($casenum>2) info = ' '.
end case.
end loop.
end file.
end input program.
execute.
report format = list automatic align(center)
/variables = id pr se lb ub info
/title 'БАЙЕСОВСКИЕ ОЦЕНКИ ДОЛЕЙ И ДОВЕРИТЕЛЬНЫЕ ИНТЕРВАЛЫ'.
!enddefine.
restore.
bayes 60 120 20 200 0 / 99%.