📄 glim_v2.ado
字号:
*! version 1.0.3 04jun2002
program define glim_v2
version 7
args todo eta mu return touse
if `todo' == -1 {
if "$SGLM_m" != "1" { /* Title */
global SGLM_vt "Binomial"
global SGLM_vf "u*(1-u/$SGLM_m)"
}
else {
global SGLM_vt "Bernoulli"
global SGLM_vf "u*(1-u)"
}
local y "$SGLM_y"
local m "$SGLM_m"
local touse "`eta'"
capture assert `m'>0 if `touse' /* sic, > */
if _rc {
di as err `"`m' has nonpositive values"'
exit 499
}
capture assert `m'==int(`m') if `touse'
if _rc {
capture confirm number `m'
if _rc {
di as txt `"note: `m' has non-integer values"'
}
else {
di as txt `"note: `m' is a non-integer"'
}
}
capture assert `y'>=0 if `touse'
if _rc {
di as err `"dependent variable `y' has negative values"'
exit 499
}
capture assert `y'<=`m' if `touse'
if _rc {
di as err `"`y' > `m' in some cases"'
exit 499
}
capture assert `y'==int(`y') if `touse'
if _rc {
di as txt `"note: `y' has non-integer values"'
}
global SGLM_mu "glim_mu 0 $SGLM_m"
exit
}
if `todo' == 0 { /* Initialize eta */
if "$SGLM_L" == "glim_l01" { /* Identity */
gen double `eta' = `mu'/$SGLM_m
}
else if "$SGLM_L" == "glim_l02" { /* Logit */
gen double `eta' = ln(`mu'/($SGLM_m-`mu'))
}
else if "$SGLM_L" == "glim_l03" { /* Log */
gen double `eta' = ln(`mu'/$SGLM_m)
}
else if "$SGLM_L" == "glim_l05" { /* Log compl */
gen double `eta' = ln(1-`mu'/$SGLM_m)
}
else if "$SGLM_L" == "glim_l06" { /* Loglog */
gen double `eta' = -ln(-ln(`mu'/$SGLM_m))
}
else if "$SGLM_L" == "glim_l07" { /* Cloglog */
gen double `eta' = ln(-ln(1-`mu'/$SGLM_m))
}
else if "$SGLM_L" == "glim_l08" { /* Probit */
gen double `eta' = invnorm(`mu'/$SGLM_m)
}
else if "$SGLM_L" == "glim_l09" { /* Reciprocal */
gen double `eta' = $SGLM_m/`mu'
}
else if "$SGLM_L" == "glim_l10" { /* Power(-2) */
gen double `eta' = ($SGLM_m/`mu')^2
}
else if "$SGLM_L" == "glim_l11" { /* Power(a) */
gen double `eta' = (`mu'/$SGLM_m)^$SGLM_a
}
else if "$SGLM_L" == "glim_l12" { /* OPower(a) */
gen double `eta' = /*
*/ ((`mu'/($SGLM_m-`mu'))^$SGLM_a-1) / $SGLM_a
}
else {
gen double `eta' = $SGLM_m*($SGLM_y+.5)/($SGLM_m+1)
}
exit
}
if `todo' == 1 { /* V(mu) */
gen double `return' = `mu'*(1-`mu'/$SGLM_m)
exit
}
if `todo' == 2 { /* (d V)/(d mu) */
gen double `return' = 1 - 2*`mu'/$SGLM_m
exit
}
if `todo' == 3 { /* deviance */
local y "$SGLM_y"
local m "$SGLM_m"
if "`y'" == "" {
local y "`e(depvar)'"
}
if "`m'" == "" {
local m "`e(m)'"
}
if `m' == 1 {
gen double `return' = cond(`y', /*
*/ -2*ln(`mu'), -2*ln(1-`mu'))
exit
}
gen double `return' = cond(`y'>0 & `y'<`m', /*
*/ 2*`y'*ln(`y'/`mu') + /*
*/ 2*(`m'-`y') * /*
*/ ln((`m'-`y')/(`m'-`mu')), /*
*/ cond(`y'==0, 2*`m' * /*
*/ ln(`m'/(`m'-`mu')), /*
*/ 2*`y'*ln(`y'/`mu')) )
exit
}
if `todo' == 4 { /* Anscombe */
local y "$SGLM_y"
local m "$SGLM_m"
if "`y'" == "" {
local y "`e(depvar)'"
}
if "`m'" == "" {
local m "`e(m)'"
}
gen double `return' = /*
*/ 1.5*(`y'^(2/3)*_hyp2f1(`y'/`m') - /*
*/ `mu'^(2/3)*_hyp2f1(`mu'/`m')) / /*
*/ ((`mu'*(1-`mu'/`m'))^(1/6))
exit
}
if `todo' == 5 { /* ln-likelihood */
local y "$SGLM_y"
local m "$SGLM_m"
if "`y'" == "" {
local y "`e(depvar)'"
}
if "`m'" == "" {
local m "`e(m)'"
}
tempname sig2
if $SGLM_s1 {
scalar `sig2' = $SGLM_s1
}
else {
scalar `sig2' = $SGLM_ph*(($ML_N-$ML_k)/$ML_N)
}
gen double `return' = `sig2'*cond(`y'==0, /*
*/ lngamma(`m'+1)-lngamma(`m'-`y'+1) + /*
*/ `m'*ln(1-`mu'/`m'), /*
*/ cond(`y'==`m', /*
*/ lngamma(`m'+1)-lngamma(`y'+1) + /*
*/ `m'*ln(`mu'/`m'),/*
*/ lngamma(`m'+1)-lngamma(`y'+1)-lngamma(`m'-`y'+1) + /*
*/ `y'*ln(`mu'/`m') + (`m'-`y')*ln(1-`mu'/`m')))
exit
}
if `todo' == 6 {
local m "$SGLM_m"
if "`m'" == "" {
local m "`e(m)'"
}
gen double `return' = (1-2*`mu'/`m')/(6*sqrt(`mu'*(1-`mu'/`m')))
exit
}
noi di as err "Unknown call to glim variance function"
error 198
end
exit
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -