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.
184 lines
5.7 KiB
Plaintext
184 lines
5.7 KiB
Plaintext
9 months ago
|
*! version 0.0.4 jsl 13Apr2005 - beta version
|
||
|
*! To do: there are no IF, IN or ALL options
|
||
|
*! To do: Add if ystar or xb
|
||
|
|
||
|
capture program drop prdc
|
||
|
program define prdc, rclass
|
||
|
version 8
|
||
|
|
||
|
*=> classify each valid type of model
|
||
|
|
||
|
if "`e(cmd)'"=="cloglog" {
|
||
|
local io = "typical binary"
|
||
|
}
|
||
|
if "`e(cmd)'"=="gologit" {
|
||
|
local io = "typical ordered"
|
||
|
}
|
||
|
if "`e(cmd)'"=="logistic" {
|
||
|
local io = "typical binary"
|
||
|
}
|
||
|
if "`e(cmd)'"=="logit" {
|
||
|
local io = "typical binary"
|
||
|
}
|
||
|
if "`e(cmd)'"=="mlogit" {
|
||
|
local io = "typical nomord"
|
||
|
}
|
||
|
if "`e(cmd)'"=="nbreg" {
|
||
|
local io = "typical count"
|
||
|
}
|
||
|
if "`e(cmd)'"=="ologit" {
|
||
|
local io = "typical nomord"
|
||
|
}
|
||
|
if "`e(cmd)'"=="oprobit" {
|
||
|
local io = "typical nomord"
|
||
|
}
|
||
|
if "`e(cmd)'"=="poisson" {
|
||
|
local io = "typical count"
|
||
|
}
|
||
|
if "`e(cmd)'"=="probit" {
|
||
|
local io = "typical binary"
|
||
|
}
|
||
|
if "`e(cmd)'"=="zinb" {
|
||
|
local io = "twoeq count"
|
||
|
}
|
||
|
if "`e(cmd)'"=="zip" {
|
||
|
local io = "twoeq count"
|
||
|
}
|
||
|
if "`io'"=="" {
|
||
|
di
|
||
|
di in y "prdc" in r " does not work for last model estimated."
|
||
|
exit
|
||
|
}
|
||
|
|
||
|
*=> decode input
|
||
|
syntax [varlist(default=none)] ///
|
||
|
[, x(string) Rest(passthru) LEvel(passthru) ///
|
||
|
MAXcnt(passthru) noLAbel noBAse Brief Save Diff ///
|
||
|
YStar ept DELta ///
|
||
|
BOOTstrap REPs(passthru) SIze(passthru) DOts match ///
|
||
|
NORMal PERCENTile BIAScorrected ///
|
||
|
From(real 0) To(real 0) Change(real 0) ///
|
||
|
BINary Unit SD UNCentered ]
|
||
|
|
||
|
local qui "quietly"
|
||
|
|
||
|
local changetype " Uncentered"
|
||
|
if "`uncentered'"=="" {
|
||
|
local changetype " Centered"
|
||
|
}
|
||
|
|
||
|
if "`varlist'" =="" {
|
||
|
di in red "you must specify a variable list."
|
||
|
exit
|
||
|
}
|
||
|
|
||
|
* unit by default
|
||
|
if `from'==0 & `to'==0 & `change'==0 ///
|
||
|
& "`binary'"=="" & "`unit'"=="" & "`sd'"=="" {
|
||
|
local unit "unit"
|
||
|
}
|
||
|
|
||
|
tempname mn sdval sdval2 fromto stval endval
|
||
|
foreach v in `varlist' {
|
||
|
|
||
|
matrix `fromto' = J(10,2,-99) // hold start and end
|
||
|
local rownm ""
|
||
|
local rows = 0
|
||
|
qui sum `v' `if' `in'
|
||
|
scalar `mn' = r(mean)
|
||
|
scalar `sdval' = r(sd)
|
||
|
local sdnm "sd"
|
||
|
scalar `sdval2' = `sdval'/2
|
||
|
if "`binary'"=="binary" {
|
||
|
local rows = `rows' + 1
|
||
|
local nm`rows' ""
|
||
|
mat `fromto'[`rows',1] = 0
|
||
|
mat `fromto'[`rows',2] = 1
|
||
|
}
|
||
|
if "`unit'"=="unit" {
|
||
|
local rows = `rows' + 1
|
||
|
local nm`rows' "[ -+1/2 ]"
|
||
|
scalar `stval' = `mn' - 1/2
|
||
|
if "`uncentered'"!="" {
|
||
|
local nm`rows' "[ +1 ]"
|
||
|
scalar `stval' = `mn'
|
||
|
}
|
||
|
scalar `endval' = `stval' + 1
|
||
|
mat `fromto'[`rows',1] = `stval'
|
||
|
mat `fromto'[`rows',2] = `endval'
|
||
|
}
|
||
|
if "`sd'"=="sd" {
|
||
|
local rows = `rows' + 1
|
||
|
local nm`rows' "[ -+sd/2 ]"
|
||
|
scalar `stval' = `mn' - `sdval2'
|
||
|
if "`uncentered'"!="" {
|
||
|
local nm`rows' "[ +sd ]"
|
||
|
scalar `stval' = `mn'
|
||
|
}
|
||
|
scalar `endval' = `stval' + `sdval'
|
||
|
mat `fromto'[`rows',1] = `stval'
|
||
|
mat `fromto'[`rows',2] = `endval'
|
||
|
}
|
||
|
if `change'!=0 {
|
||
|
local rows = `rows' + 1
|
||
|
local nm`rows' "[ -+(delta=`change'/2) ]"
|
||
|
scalar `stval' = `mn' - (`change'/2)
|
||
|
if "`uncentered'"!="" {
|
||
|
local nm`rows' "[ +(delta=`delta') ]"
|
||
|
scalar `stval' = `mn'
|
||
|
}
|
||
|
scalar `endval' = `stval' + `change'
|
||
|
mat `fromto'[`rows',1] = `stval'
|
||
|
mat `fromto'[`rows',2] = `endval'
|
||
|
}
|
||
|
if `from'==0 & `to'==0 {
|
||
|
}
|
||
|
else {
|
||
|
local rows = `rows' + 1
|
||
|
mat `fromto'[`rows',1] = `from'
|
||
|
mat `fromto'[`rows',2] = `to'
|
||
|
local nm`rows' ""
|
||
|
}
|
||
|
|
||
|
di _n in g "Discrete change for variable: " in y "`v' "
|
||
|
|
||
|
tempname val dif diflb difub difmisc difout base stis endis
|
||
|
foreach r of numlist 1/`rows' {
|
||
|
scalar `stis' = `fromto'[`r',1]
|
||
|
scalar `endis' = `fromto'[`r',2]
|
||
|
local xstis = `stis'
|
||
|
local xendis = `endis'
|
||
|
`qui' prvalue2, x(`x' `v'=`xstis') ///
|
||
|
`rest' `level' save
|
||
|
if `r'==1 {
|
||
|
* get column names
|
||
|
mat `val' = pepred[1,1...]
|
||
|
local colnm ""
|
||
|
local colnum = colsof(`val')
|
||
|
foreach k of numlist 1/`colnum' {
|
||
|
local a = `val'[1,`k']
|
||
|
local colnm "`colnm' `a'"
|
||
|
}
|
||
|
}
|
||
|
`qui' prvalue2, x(`x' `v'=`xendis') ///
|
||
|
`rest' `level' diff
|
||
|
mat `dif' = pepred[6,1...]
|
||
|
mat `diflb' = pelower[6,1...]
|
||
|
mat `difub' = peupper[6,1...]
|
||
|
mat `difmisc' = pepred[7,1...]
|
||
|
matrix `difout' = `dif' \ `diflb' \ `difub'
|
||
|
mat colnames `difout' = `colnm'
|
||
|
mat rownames `difout' = " Change" " LowerBound" " UpperBound"
|
||
|
di _new in g "`changetype' change from " in y %6.4f `stis' ///
|
||
|
in g " to " in y %6.4f `endis' ///
|
||
|
in g " `nm`r''"
|
||
|
mat list `difout', noheader
|
||
|
} // rows
|
||
|
|
||
|
} // list of variables
|
||
|
|
||
|
* levels of variables
|
||
|
mat `base' = r(x)
|
||
|
mat list `base', noheader
|
||
|
end
|