You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
228 lines
6.3 KiB
Plaintext
228 lines
6.3 KiB
Plaintext
program define raschpce,rclass
|
|
syntax varlist [if] [in] [, rsm]
|
|
preserve
|
|
if "`if'"!=""|"`in'"!="" {
|
|
di "if:`if' in: `in'"
|
|
keep `if' `in'
|
|
}
|
|
tokenize `varlist'
|
|
|
|
local nbitems:word count `varlist'
|
|
|
|
local lines=1
|
|
local summ=0
|
|
local modamax=0
|
|
forvalues i=1/`nbitems' {
|
|
qui su ``i''
|
|
local moda`i'=r(max)
|
|
local lines=`lines'*(`moda`i''+1)
|
|
local summ=`summ'+`moda`i''
|
|
if `modamax'<`moda`i'' {
|
|
local modamax `moda`i''
|
|
}
|
|
}
|
|
local col=1+`nbitems'
|
|
*di "matrix table=J(`lines',`col',.)"
|
|
|
|
|
|
*matrix table=J(`lines',`col',.)
|
|
|
|
local line=1
|
|
/*forvalues i=1/`nbitems' {
|
|
forvalues j=`=`i'+1'/`nbitems' {
|
|
forvalues mi=0/`moda`i'' {
|
|
forvalues mj=0/`moda`j'' {
|
|
matrix table[`line',`i']=`mi'
|
|
matrix table[`line',`j']=`mj'
|
|
qui count if ``i''==`mi'&``j''==`mj'
|
|
matrix table[`line',`=`nbitems'+1']=r(N)
|
|
local ++line
|
|
}
|
|
}
|
|
}
|
|
}
|
|
*/
|
|
|
|
local line=1
|
|
forvalues i=1/`nbitems' {
|
|
forvalues j=`=`i'+1'/`nbitems' {
|
|
forvalues mi=0/`moda`i'' {
|
|
forvalues mj=0/`moda`j'' {
|
|
qui count if ``i''==`mi'&``j''==`mj'
|
|
local table_`line'_`=`nbitems'+1'=r(N)
|
|
local ++line
|
|
}
|
|
}
|
|
}
|
|
}
|
|
qui drop _all
|
|
set obs `=`line'-1'
|
|
local line=1
|
|
forvalues i=1/`nbitems' {
|
|
qui gen table`i'=.
|
|
}
|
|
qui gen table`=`nbitems'+1'=.
|
|
*set trace on
|
|
forvalues i=1/`nbitems' {
|
|
forvalues j=`=`i'+1'/`nbitems' {
|
|
forvalues mi=0/`moda`i'' {
|
|
forvalues mj=0/`moda`j'' {
|
|
qui replace table`i'=`mi' in `line'
|
|
qui replace table`j'=`mj' in `line'
|
|
qui replace table`=`nbitems'+1'=`table_`line'_`=`nbitems'+1'' in `line'
|
|
local ++line
|
|
}
|
|
}
|
|
}
|
|
}
|
|
*qui svmat table
|
|
local ti
|
|
local vi
|
|
forvalues i=1/`nbitems' {
|
|
rename table`i' ``i''
|
|
}
|
|
rename table`=`nbitems'+1' freq
|
|
local s="0"
|
|
local max=0
|
|
forvalues i=1/`nbitems' {
|
|
local max=`max'+`moda`i''
|
|
local bi`i'm0=0
|
|
local s="`s'+vi`i'mi`moda`i''"
|
|
forvalues j=`=`i'+1'/`nbitems' {
|
|
qui gen ti`i'j`j'=``i''+``j''
|
|
qui replace ti`i'j`j'=0 if ti`i'j`j'==.
|
|
local ti "`ti' i.ti`i'j`j'"
|
|
}
|
|
forvalues mi=1/`moda`i'' {
|
|
qui gen vi`i'mi`mi'=``i''==`mi'
|
|
local vi "`vi' vi`i'mi`mi'"
|
|
}
|
|
}
|
|
local s="(`s')/`max'"
|
|
|
|
count
|
|
if "`rsm'"=="" {
|
|
*edit
|
|
qui xi:poisson freq `vi' `ti', nocons iterate(30)
|
|
local ll=e(ll)
|
|
*set trace on
|
|
|
|
*lincom -(vi1mi1-(vi1mi3+vi2mi3+vi3mi3+vi4mi3+vi5mi3)/15)
|
|
*lincom -(vi1mi2-(vi1mi3+vi2mi3+vi3mi3+vi4mi3+vi5mi3)/15-vi1mi1)
|
|
*lincom -(vi1mi3-(vi1mi3+vi2mi3+vi3mi3+vi4mi3+vi5mi3)/15-vi1mi2)
|
|
*lincom -.5*(vi1mi1-(vi1mi2+vi2mi2+vi3mi2+vi4mi2+vi5mi2+vi6mi2+vi7mi2)/14)-.5*(vi1mi2-(vi1mi2+vi2mi2+vi3mi2+vi4mi2+vi5mi2+vi6mi2+vi7mi2)/14-vi1mi1)
|
|
|
|
qui matrix b=e(b)
|
|
local col=1
|
|
forvalues i=1/`nbitems' {
|
|
forvalues mi=1/`moda`i'' {
|
|
local bi`i'm`mi'=b[1,`col']
|
|
local ++col
|
|
}
|
|
}
|
|
*local s=`s'/`max'
|
|
*set trace on
|
|
forvalues i=1/`nbitems' {
|
|
local location`i'="0"
|
|
forvalues mi=1/`moda`i'' {
|
|
local delta`i'm`mi'=-(`bi`i'm`mi''-`mi'*`s'-`bi`i'm`=`mi'-1'')
|
|
if (`mi'==1) {
|
|
qui di "-(vi`i'mi`mi'-`s')"
|
|
local tdelta`i'_1 "-(vi`i'mi`mi'-`s')"
|
|
qui lincom -(vi`i'mi`mi'-`s')
|
|
local location`i' "`location`i''-(vi`i'mi`mi'-`s')"
|
|
}
|
|
else {
|
|
/*QUESTION : DOIT-ON MULTIPLIER `s' par `mi'*/
|
|
qui di " vi`i'mi`=`mi'-1'-vi`i'mi`mi'+`s'"
|
|
local tdelta`i'_`mi' " vi`i'mi`=`mi'-1'-vi`i'mi`mi'+`s'"
|
|
qui lincom vi`i'mi`=`mi'-1'-vi`i'mi`mi'+`s'
|
|
local location`i' "`location`i''+vi`i'mi`=`mi'-1'-vi`i'mi`mi'+`s'"
|
|
}
|
|
local delta`i'_`mi'=r(estimate)
|
|
local sedelta`i'_`mi'=r(se)
|
|
}
|
|
qui lincom (`location`i'')/`moda`i''
|
|
local delta`i'=r(estimate)
|
|
local sedelta`i'=r(se)
|
|
}
|
|
forvalues i=1/`nbitems' {
|
|
forvalues mi=1/`moda`i'' {
|
|
di "delta`i'_`mi' : `delta`i'_`mi'' (`sedelta`i'_`mi'')"
|
|
}
|
|
di "delta`i' : `delta`i'' (`sedelta`i'')"
|
|
}
|
|
}
|
|
else {
|
|
qui gen vmi2=vi1mi2+vi2mi2+vi3mi2
|
|
drop vi1mi2 vi2mi2 vi3mi2
|
|
edit
|
|
qui xi:poisson freq vi1mi1 vi2mi1 vi3mi1 vmi2 `ti', nocons
|
|
local ll=e(ll)
|
|
*set trace on
|
|
|
|
*lincom -(vi1mi1-(vi1mi3+vi2mi3+vi3mi3+vi4mi3+vi5mi3)/15)
|
|
*lincom -(vi1mi2-(vi1mi3+vi2mi3+vi3mi3+vi4mi3+vi5mi3)/15-vi1mi1)
|
|
*lincom -(vi1mi3-(vi1mi3+vi2mi3+vi3mi3+vi4mi3+vi5mi3)/15-vi1mi2)
|
|
*lincom -.5*(vi1mi1-(vi1mi2+vi2mi2+vi3mi2+vi4mi2+vi5mi2+vi6mi2+vi7mi2)/14)-.5*(vi1mi2-(vi1mi2+vi2mi2+vi3mi2+vi4mi2+vi5mi2+vi6mi2+vi7mi2)/14-vi1mi1)
|
|
|
|
forvalues i=1/`nbitems' {
|
|
local location`i'="0"
|
|
forvalues mi=1/`moda`i'' {
|
|
* local delta`i'm`mi'=-(`bi`i'm`mi''-`mi'*`s'-`bi`i'm`=`mi'-1'')
|
|
if (`mi'==1) {
|
|
qui di "-(vi`i'mi1-vi2)"
|
|
local tdelta`i'_1 "-(vi`i'mi1-vi2)"
|
|
qui lincom -(vi`i'mi1-vi2)
|
|
local location`i' "`location`i''-(vi`i'mi1)"
|
|
}
|
|
else {
|
|
/*QUESTION : DOIT-ON MULTIPLIER `s' par `mi'*/
|
|
qui di " vi`i'mi`=`mi'-1'"
|
|
local tdelta`i'_`mi' " vi`i'mi`=`mi'-1'"
|
|
qui lincom vi`i'mi`=`mi'-1'
|
|
local location`i' "`location`i''+vi`i'mi`=`mi'-1'"
|
|
}
|
|
local delta`i'_`mi'=r(estimate)
|
|
local sedelta`i'_`mi'=r(se)
|
|
}
|
|
qui lincom (`location`i'')/`moda`i''
|
|
local delta`i'=r(estimate)
|
|
local sedelta`i'=r(se)
|
|
}
|
|
forvalues i=1/`nbitems' {
|
|
forvalues mi=1/`moda`i'' {
|
|
di "delta`i'_`mi' : `delta`i'_`mi'' (`sedelta`i'_`mi'')"
|
|
}
|
|
di "delta`i' : `delta`i'' (`sedelta`i'')"
|
|
}
|
|
}
|
|
*set trace on
|
|
matrix delta=J(`nbitems',`modamax',.)
|
|
matrix sedelta=J(`nbitems',`modamax',.)
|
|
forvalues i=1/`nbitems' {
|
|
forvalues mi=1/`moda`i'' {
|
|
matrix delta[`i',`mi']=`delta`i'_`mi''
|
|
matrix sedelta[`i',`mi']=`sedelta`i'_`mi''
|
|
}
|
|
}
|
|
*set trace on
|
|
matrix b=delta
|
|
matrix list delta
|
|
*matrix delta=delta'
|
|
*matrix sedelta=sedelta'
|
|
return matrix b=delta
|
|
return matrix sedelta=sedelta
|
|
return scalar ll=`ll'
|
|
restore
|
|
|
|
|
|
|
|
*set trace on
|
|
matrix list b
|
|
*pcm item*, fixed(b)
|
|
|
|
|
|
|
|
end
|