clear set obs 500 generate x1 = runiform(-3,3) generate x2 = runiform(-3,3) generate y = invlogit(x1+x2)> runiform() logit y x1 x2 local B1 = _b[x1] local B2 = _b[x2] logit y x1 regress x2 x1 local T2 = _b[x1] local BT2 = `B2'*`T2' local check = `B1' + `BT2' predict x2r, resid logit y x1 x2r display "Total: " _b[x1] display "Direct: " `B1' display "Indirect: " `BT2' display "Total check: " `check' *khb logit y x2 || x1 khb logit y x1 || x2 clear set obs 500 matrix C = (1, .5 \ .5, 1) drawnorm x1 x2, n(500) corr(C) generate y = invlogit(x1+x2)> runiform() logit y x1 x2 local B1 = _b[x1] local B2 = _b[x2] logit y x1 regress x2 x1 local T2 = _b[x1] local BT2 = `B2'*`T2' local check = `B1' + `BT2' predict x2r, resid logit y x1 x2r display "Total: " _b[x1] display "Direct: " `B1' display "Indirect: " `BT2' display "Total check: " `check' khb logit y x1 || x2 gsem (y <- x1 x2, family(binomial)) (x2 <- x1)