In Stata 11, the margins command replaced mfx.
| Title | Obtaining marginal effects quickly | |
| Author | May Boggess, StataCorp |
First, do not compute the marginal effects for all the variables if you are not interested in all of them. You can specify the variables you are interested in by using the varlist() option.
. sysuse auto, clear
(1978 Automobile Data)
. regress mpg weight length
Source | SS df MS Number of obs = 74
-------------+------------------------------ F( 2, 71) = 69.34
Model | 1616.08062 2 808.040312 Prob > F = 0.0000
Residual | 827.378835 71 11.653223 R-squared = 0.6614
-------------+------------------------------ Adj R-squared = 0.6519
Total | 2443.45946 73 33.4720474 Root MSE = 3.4137
------------------------------------------------------------------------------
mpg | Coef. Std. Err. t P>|t| [95% Conf. Interval]
-------------+----------------------------------------------------------------
weight | -.0038515 .001586 -2.43 0.018 -.0070138 -.0006891
length | -.0795935 .0553577 -1.44 0.155 -.1899736 .0307867
_cons | 47.88487 6.08787 7.87 0.000 35.746 60.02374
------------------------------------------------------------------------------
. mfx, predict(xb) eyex
Elasticities after regress
y = Linear prediction (predict, xb)
= 21.297297
------------------------------------------------------------------------------
variable | ey/ex Std. Err. z P>|z| [ 95% C.I. ] X
---------+--------------------------------------------------------------------
weight | -.5460497 .22509 -2.43 0.015 -.987208 -.104891 3019.46
length | -.7023518 .48867 -1.44 0.151 -1.66012 .255414 187.932
------------------------------------------------------------------------------
. mfx, predict(xb) eyex varlist(length)
Elasticities after regress
y = Linear prediction (predict, xb)
= 21.297297
------------------------------------------------------------------------------
variable | ey/ex Std. Err. z P>|z| [ 95% C.I. ] X
---------+--------------------------------------------------------------------
length | -.7023518 .48867 -1.44 0.151 -1.66012 .255414 187.932
------------------------------------------------------------------------------
Also, if you don’t need them, do not compute the standard errors as this can be time consuming. You achieve this with the nose option.
. mfx, predict(xb) eyex nose
Elasticities after regress
y = Linear prediction (predict, xb)
= 21.297297
-------------------------------------------------------------------------------
variable | ey/ex X
---------------------------------+---------------------------------------------
weight | -.5460497 3019.46
length | -.7023518 187.932
-------------------------------------------------------------------------------
The third thing you can do is use the force option. This prevents mfx from doing some checks that really should be done at least once. This will not save a noticeable amount of time on a small dataset but may save a few seconds on a large dataset. Here is an example you can run to compare:
. clear
. set obs 1000
obs was 0, now 1000
. set seed 23865
. generate y=int(uniform()*5)
. generate dum=uniform()>0.5
. forvalues i=1/3 {
2. generate x`i'=uniform()*20
3. }
. mlogit y x* dum, nolog
Multinomial logistic regression Number of obs = 1000
LR chi2(16) = 16.56
Prob > chi2 = 0.4145
Log likelihood = -1599.4028 Pseudo R2 = 0.0052
------------------------------------------------------------------------------
y | Coef. Std. Err. z p>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
0 |
x1 | -.0018747 .0173475 -0.11 0.914 -.0358752 .0321257
x2 | -.0317412 .0178107 -1.78 0.075 -.0666495 .0031671
x3 | .0078188 .0174158 0.45 0.653 -.0263155 .0419532
dum | .1263877 .2021265 0.63 0.532 -.269773 .5225484
_cons | .0561327 .3304511 0.17 0.865 -.5915396 .703805
-------------+----------------------------------------------------------------
2 |
x1 | .0008903 .0172058 0.05 0.959 -.0328323 .034613
x2 | -.0027325 .0176622 -0.15 0.877 -.0373498 .0318849
x3 | -.0162843 .0173379 -0.94 0.348 -.050266 .0176974
dum | .0784832 .2000959 0.39 0.695 -.3136975 .470664
_cons | .0107956 .3299801 0.03 0.974 -.6359536 .6575447
-------------+----------------------------------------------------------------
3 |
x1 | -.0152809 .0167811 -0.91 0.363 -.0481712 .0176094
x2 | -.02041 .0171957 -1.19 0.235 -.054113 .013293
x3 | -.003969 .0168479 -0.24 0.814 -.0369902 .0290522
dum | .1989654 .1952902 1.02 0.308 -.1837963 .5817271
_cons | .2797189 .3186474 0.88 0.380 -.3448184 .9042563
-------------+----------------------------------------------------------------
4 |
x1 | .0163031 .0168514 0.97 0.333 -.016725 .0493312
x2 | -.0270747 .0172928 -1.57 0.117 -.060968 .0068186
x3 | .0202191 .0169027 1.20 0.232 -.0129096 .0533477
dum | -.1317624 .1965608 -0.67 0.503 -.5170144 .2534897
_cons | -.0551544 .3244424 -0.17 0.865 -.6910499 .5807411
------------------------------------------------------------------------------
(y==1 is the base outcome)
. mfx, predict(p outcome(2))
Marginal effects after mlogit
y = Pr(y==2) (predict, p outcome(2))
= .18900063
------------------------------------------------------------------------------
variable | dy/dx Std. Err. z p>|z| [ 95% C.I. ] X
---------+--------------------------------------------------------------------
x1 | .000176 .00213 0.08 0.934 -.004008 .004359 9.9926
x2 | .0025355 .00218 1.16 0.246 -.001744 .006815 10.2813
x3 | -.0033915 .00215 -1.58 0.114 -.007602 .000819 9.44558
dum*| .0048542 .02479 0.20 0.845 -.043738 .053446 .496
------------------------------------------------------------------------------
(*) dy/dx is for discrete change of dummy variable from 0 to 1
. mfx, predict(p outcome(2)) force
Marginal effects after mlogit
y = (predict, p outcome(2))
= .18900063
------------------------------------------------------------------------------
variable | dy/dx Std. Err. z p>|z| [ 95% C.I. ] X
---------+--------------------------------------------------------------------
x1 | .000176 .00213 0.08 0.934 -.004008 .004359 9.9926
x2 | .0025355 .00218 1.16 0.246 -.001744 .006815 10.2813
x3 | -.0033915 .00215 -1.58 0.114 -.007602 .000819 9.44558
dum*| .0048542 .02479 0.20 0.845 -.043738 .053446 .496
------------------------------------------------------------------------------
(*) dy/dx is for discrete change of dummy variable from 0 to 1
The command set rmsg on tells Stata to show us the amount of time taken on the previous command. If you use that command before mfx, Stata will tell you how long mfx took after it is done. On my computer, it took close to the same time with force as without. Use set rmsg off when you are done looking at times.
Please let me stress here that you should not get in the habit of using force all the time. The checks that force avoids are very, very important because, if any of those checks fail, the results are probably invalid. So, remember, use force only if you have previously run mfx without force and verified that everything checks out OK.
You may be tempted to use the at() option to try and save time. It’s not a bad idea since mfx won’t have to compute the means of the variables, but it won’t save a noticeable amount of time either, unless your dataset is very large. Let’s compare:
. clear
. set obs 10000
obs was 0, now 10000
. set seed 23865
. generate y=int(uniform()*5)
. forvalues i=1/3 {
2. generate x`i'=uniform()*20
3. }
. quietly mlogit y x*
. forvalues i=1/3 {
2. quietly summarize x`i' if e(sample)
3. local xmean`i'=r(mean)
4. }
. mfx, predict(p outcome(2))
Marginal effects after mlogit
y = Pr(y==2) (predict, p outcome(2))
= .18965252
------------------------------------------------------------------------------
variable | dy/dx Std. Err. z P>|z| [ 95% C.I. ] X
---------+--------------------------------------------------------------------
x1 | -.0008298 .00218 -0.38 0.703 -.005096 .003436 9.96244
x2 | .00021 .00214 0.10 0.922 -.003975 .004395 9.9926
x3 | .0025351 .00219 1.16 0.247 -.001759 .006829 10.2813
------------------------------------------------------------------------------
. mfx, predict(p outcome(2)) at(x1=`xmean1' x2=`xmean2' x3=`xmean3')
Marginal effects after mlogit
y = Pr(y==2) (predict, p outcome(2))
= .18965252
------------------------------------------------------------------------------
variable | dy/dx Std. Err. z P>|z| [ 95% C.I. ] X
---------+--------------------------------------------------------------------
x1 | -.0008298 .00218 -0.38 0.703 -.005096 .003436 9.96244
x2 | .00021 .00214 0.10 0.922 -.003975 .004395 9.9926
x3 | .0025351 .00219 1.16 0.247 -.001759 .006829 10.2813
------------------------------------------------------------------------------
. mfx, predict(p outcome(2)) at(x1=`xmean1' x2=`xmean2' x3=`xmean3') force
Marginal effects after mlogit
y = (predict, p outcome(2))
= .18965252
------------------------------------------------------------------------------
variable | dy/dx Std. Err. z P>|z| [ 95% C.I. ] X
---------+--------------------------------------------------------------------
x1 | -.0008298 .00218 -0.38 0.703 -.005096 .003436 9.96244
x2 | .00021 .00214 0.10 0.922 -.003975 .004395 9.9926
x3 | .0025351 .00219 1.16 0.247 -.001759 .006829 10.2813
------------------------------------------------------------------------------
The last thing you can do to save time is to verify that your variables are well scaled. (Please see the FAQ stata.com/support/faqs/statistics/scaling-and-marginal-effects for a full discussion of scaling.) If mfx is taking a long time, you can check whether a lot of iterations are slowing down the process by using the tracelvl() option, as follows:
. webuse ldose, clear
. glm r ldose, family(binomial n) link(clog)
Iteration 0: log likelihood = -14.883594
Iteration 1: log likelihood = -14.822264
Iteration 2: log likelihood = -14.822228
Iteration 3: log likelihood = -14.822228
Generalized linear models No. of obs = 8
Optimization : ML Residual df = 6
Scale parameter = 1
Deviance = 3.446418004 (1/df) Deviance = .574403
Pearson = 3.294675153 (1/df) Pearson = .5491125
Variance function: V(u) = u*(1-u/n) [Binomial]
Link function : g(u) = ln(-ln(1-u/n)) [Complementary log-log]
AIC = 4.205557
Log likelihood = -14.82222811 BIC = -9.030231
------------------------------------------------------------------------------
| OIM
r | Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
ldose | 22.04118 1.793089 12.29 0.000 18.52679 25.55557
_cons | -39.57232 3.229047 -12.26 0.000 -45.90114 -33.24351
------------------------------------------------------------------------------
. mfx, predict(xb) trace(4)
calculating dydx (linear method)
equation i= 1
Iteration (dx): initial h = 1.793e-06
1 h= 1.345e-06
2 h= 1.009e-06
3 h= 7.566e-07
4 h= 5.675e-07
5 h= 4.256e-07
6 h= 3.192e-07
7 h= 2.394e-07
8 h= 1.795e-07
9 h= 1.347e-07
10 h= 1.010e-07
11 h= 7.575e-08
12 h= 5.681e-08
13 h= 4.261e-08
14 h= 3.196e-08
15 h= 2.397e-08
16 h= 1.797e-08
17 h= 1.348e-08
18 h= 1.011e-08
19 h= 7.583e-09
20 h= 5.687e-09
21 h= 4.266e-09
22 h= 3.199e-09
23 h= 2.399e-09
24 h= 1.800e-09
h= 1.800e-09
: df/d(xb) = 1
-------------------------
variable | dy/dx
---------+---------------
ldose | 22.041
-------------------------
calculating standard errors (linear method)
equation k = 1:
Iteration (dx): initial h = 1.793e-06
1 h= 1.345e-06
2 h= 1.009e-06
3 h= 7.566e-07
4 h= 5.675e-07
5 h= 4.256e-07
6 h= 3.192e-07
7 h= 2.394e-07
8 h= 1.795e-07
9 h= 1.347e-07
10 h= 1.010e-07
11 h= 7.575e-08
12 h= 5.681e-08
13 h= 4.261e-08
14 h= 3.196e-08
15 h= 2.397e-08
16 h= 1.797e-08
17 h= 1.348e-08
18 h= 1.011e-08
19 h= 7.583e-09
20 h= 5.687e-09
21 h= 4.266e-09
22 h= 3.199e-09
23 h= 2.399e-09
24 h= 1.800e-09
h= 1.800e-09
dfdxb = 1
Iteration (dx): initial h = 1.795e-06
1 h= 1.346e-06
2 h= 1.010e-06
3 h= 7.574e-07
4 h= 5.680e-07
5 h= 4.260e-07
6 h= 3.195e-07
7 h= 2.396e-07
8 h= 1.797e-07
9 h= 1.348e-07
10 h= 1.011e-07
11 h= 7.582e-08
12 h= 5.687e-08
13 h= 4.265e-08
14 h= 3.199e-08
15 h= 2.399e-08
16 h= 1.799e-08
17 h= 1.349e-08
18 h= 1.012e-08
19 h= 7.591e-09
20 h= 5.693e-09
21 h= 4.270e-09
22 h= 3.202e-09
23 h= 2.402e-09
24 h= 1.801e-09
25 h= 1.351e-09
26 h= 1.013e-09
27 h= 7.599e-10
28 h= 5.699e-10
29 h= 4.275e-10
30 h= 3.206e-10
31 h= 2.404e-10
32 h= 1.803e-10
33 h= 1.353e-10
h= 1.353e-10
dfdxb = .99999684
-----Iteration (dx) for d^2f/d(xb_k)d(xb_l)-----
1
Iteration (dx): initial h = 1.796e-06
1 h= 1.347e-06
2 h= 1.010e-06
3 h= 7.577e-07
4 h= 5.683e-07
5 h= 4.262e-07
6 h= 3.197e-07
7 h= 2.398e-07
8 h= 1.798e-07
9 h= 1.349e-07
10 h= 1.011e-07
11 h= 7.586e-08
12 h= 5.689e-08
13 h= 4.267e-08
14 h= 3.200e-08
15 h= 2.400e-08
16 h= 1.800e-08
17 h= 1.350e-08
18 h= 1.013e-08
19 h= 7.594e-09
20 h= 5.696e-09
21 h= 4.272e-09
22 h= 3.204e-09
23 h= 2.403e-09
24 h= 1.802e-09
25 h= 1.352e-09
26 h= 1.014e-09
27 h= 7.603e-10
28 h= 5.702e-10
h= 5.702e-10
dfdxb = .99999988
2
Iteration (dx): initial h = 1.797e-06
1 h= 1.348e-06
2 h= 1.011e-06
3 h= 7.583e-07
4 h= 5.687e-07
5 h= 4.265e-07
6 h= 3.199e-07
7 h= 2.399e-07
8 h= 1.799e-07
9 h= 1.350e-07
10 h= 1.012e-07
11 h= 7.592e-08
12 h= 5.694e-08
13 h= 4.270e-08
14 h= 3.203e-08
15 h= 2.402e-08
16 h= 1.802e-08
17 h= 1.351e-08
18 h= 1.013e-08
19 h= 7.600e-09
20 h= 5.700e-09
21 h= 4.275e-09
22 h= 3.206e-09
23 h= 2.405e-09
24 h= 1.804e-09
h= 1.804e-09
dfdxb = .99999991
3
Iteration (dx): initial h = 1.799e-06
1 h= 1.350e-06
2 h= 1.012e-06
3 h= 7.592e-07
4 h= 5.694e-07
5 h= 4.270e-07
6 h= 3.203e-07
7 h= 2.402e-07
8 h= 1.802e-07
9 h= 1.351e-07
10 h= 1.013e-07
11 h= 7.600e-08
12 h= 5.700e-08
13 h= 4.275e-08
14 h= 3.206e-08
15 h= 2.405e-08
16 h= 1.804e-08
17 h= 1.353e-08
18 h= 1.014e-08
19 h= 7.609e-09
20 h= 5.707e-09
21 h= 4.280e-09
22 h= 3.210e-09
h= 3.210e-09
dfdxb = 1
4
Iteration (dx): initial h = 1.803e-06
1 h= 1.352e-06
2 h= 1.014e-06
3 h= 7.604e-07
4 h= 5.703e-07
5 h= 4.277e-07
6 h= 3.208e-07
7 h= 2.406e-07
8 h= 1.805e-07
9 h= 1.353e-07
10 h= 1.015e-07
11 h= 7.613e-08
12 h= 5.710e-08
13 h= 4.282e-08
14 h= 3.212e-08
15 h= 2.409e-08
16 h= 1.807e-08
17 h= 1.355e-08
18 h= 1.016e-08
19 h= 7.622e-09
20 h= 5.716e-09
h= 5.716e-09
dfdxb = 1
5
Iteration (dx): initial h = 1.807e-06
1 h= 1.355e-06
2 h= 1.016e-06
3 h= 7.624e-07
4 h= 5.718e-07
5 h= 4.288e-07
6 h= 3.216e-07
7 h= 2.412e-07
8 h= 1.809e-07
9 h= 1.357e-07
10 h= 1.018e-07
11 h= 7.632e-08
12 h= 5.724e-08
13 h= 4.293e-08
14 h= 3.220e-08
15 h= 2.415e-08
16 h= 1.811e-08
17 h= 1.358e-08
18 h= 1.019e-08
h= 1.019e-08
dfdxb = 1
6
Iteration (dx): initial h = 1.814e-06
1 h= 1.360e-06
2 h= 1.020e-06
3 h= 7.652e-07
4 h= 5.739e-07
5 h= 4.304e-07
6 h= 3.228e-07
7 h= 2.421e-07
8 h= 1.816e-07
9 h= 1.362e-07
10 h= 1.021e-07
11 h= 7.661e-08
12 h= 5.746e-08
13 h= 4.309e-08
14 h= 3.232e-08
15 h= 2.424e-08
16 h= 1.818e-08
h= 1.818e-08
dfdxb = 1
7
Iteration (dx): initial h = 1.824e-06
1 h= 1.368e-06
2 h= 1.026e-06
3 h= 7.695e-07
4 h= 5.772e-07
5 h= 4.329e-07
6 h= 3.246e-07
7 h= 2.435e-07
8 h= 1.826e-07
9 h= 1.370e-07
10 h= 1.027e-07
11 h= 7.704e-08
12 h= 5.778e-08
13 h= 4.334e-08
14 h= 3.250e-08
15 h= 2.438e-08
h= 2.438e-08
dfdxb = .99999998
8
Iteration (dx): initial h = 1.839e-06
1 h= 1.380e-06
2 h= 1.035e-06
3 h= 7.760e-07
4 h= 5.820e-07
5 h= 4.365e-07
6 h= 3.274e-07
7 h= 2.455e-07
8 h= 1.841e-07
9 h= 1.381e-07
10 h= 1.036e-07
11 h= 7.769e-08
12 h= 5.827e-08
13 h= 4.370e-08
h= 4.370e-08
dfdxb = 1
9
Iteration (dx): initial h = 1.862e-06
1 h= 1.397e-06
2 h= 1.048e-06
3 h= 7.857e-07
4 h= 5.893e-07
5 h= 4.420e-07
6 h= 3.315e-07
7 h= 2.486e-07
8 h= 1.865e-07
9 h= 1.398e-07
10 h= 1.049e-07
11 h= 7.866e-08
12 h= 5.899e-08
h= 5.899e-08
dfdxb = 1
10
Iteration (dx): initial h = 1.897e-06
1 h= 1.423e-06
2 h= 1.067e-06
3 h= 8.003e-07
4 h= 6.002e-07
5 h= 4.501e-07
6 h= 3.376e-07
7 h= 2.532e-07
8 h= 1.899e-07
9 h= 1.424e-07
10 h= 1.068e-07
11 h= 8.012e-08
h= 8.012e-08
dfdxb = 1
11
Iteration (dx): initial h = 1.949e-06
1 h= 1.461e-06
2 h= 1.096e-06
3 h= 8.221e-07
4 h= 6.166e-07
5 h= 4.624e-07
6 h= 3.468e-07
7 h= 2.601e-07
8 h= 1.951e-07
9 h= 1.463e-07
h= 1.463e-07
dfdxb = 1
12
Iteration (dx): initial h = 2.026e-06
1 h= 1.520e-06
2 h= 1.140e-06
3 h= 8.548e-07
4 h= 6.411e-07
5 h= 4.808e-07
6 h= 3.606e-07
7 h= 2.705e-07
8 h= 2.029e-07
h= 2.029e-07
dfdxb = 1
13
Iteration (dx): initial h = 2.143e-06
1 h= 1.607e-06
2 h= 1.205e-06
3 h= 9.039e-07
4 h= 6.779e-07
5 h= 5.085e-07
6 h= 3.813e-07
7 h= 2.860e-07
h= 2.860e-07
dfdxb = 1
14
Iteration (dx): initial h = 2.317e-06
1 h= 1.738e-06
2 h= 1.303e-06
3 h= 9.776e-07
4 h= 7.332e-07
5 h= 5.499e-07
6 h= 4.124e-07
h= 4.124e-07
dfdxb = 1
15
Iteration (dx): initial h = 2.579e-06
1 h= 1.934e-06
2 h= 1.451e-06
3 h= 1.088e-06
4 h= 8.161e-07
5 h= 6.121e-07
h= 6.121e-07
dfdxb = 1
16
Iteration (dx): initial h = 2.972e-06
1 h= 2.229e-06
2 h= 1.672e-06
3 h= 1.254e-06
4 h= 9.404e-07
h= 9.404e-07
dfdxb = 1
17
Iteration (dx): initial h = 3.561e-06
1 h= 2.671e-06
2 h= 2.003e-06
3 h= 1.502e-06
h= 1.502e-06
dfdxb = 1
18
Iteration (dx): initial h = 4.445e-06
1 h= 3.334e-06
2 h= 2.501e-06
h= 2.501e-06
dfdxb = 1
19
Iteration (dx): initial h = 5.771e-06
1 h= 4.329e-06
2 h= 3.246e-06
h= 3.246e-06
dfdxb = 1
20
Iteration (dx): initial h = 7.760e-06
1 h= 5.820e-06
h= 5.820e-06
dfdxb = 1
21
Iteration (dx): initial h = .00001074
1 h= 8.058e-06
h= 8.058e-06
dfdxb = 1
22
Iteration (dx): initial h = .00001522
1 h= .00001141
h= .00001141
dfdxb = 1
23
Iteration (dx): initial h = .00002193
1 h= .00001645
h= .00001645
dfdxb = 1
24
Iteration (dx): initial h = .000032
1 h= .000024
h= .000024
dfdxb = 1
25
Iteration (dx): initial h = .0000471
1 h= .00003533
h= .00003533
dfdxb = 1
26
Iteration (dx): initial h = .00006976
1 h= .00005232
h= .00005232
dfdxb = 1
27
Iteration (dx): initial h = .00010374
1 h= .00007781
h= .00007781
dfdxb = 1
28
Iteration (dx): initial h = .00015472
1 h= .00011604
h= .00011604
dfdxb = 1
29
Iteration (dx): initial h = .00023118
1 h= .00017339
h= .00017339
dfdxb = 1
30
Iteration (dx): initial h = .00034588
1 h= .00025941
h= .00025941
dfdxb = 1
31
Iteration (dx): initial h = .00051792
1 h= .00038844
h= .00038844
dfdxb = 1
32
Iteration (dx): initial h = .00077598
1 h= .00058198
h= .00058198
dfdxb = 1
33
Iteration (dx): initial h = .00116307
1 h= .0008723
h= .0008723
dfdxb = 1
34
Iteration (dx): initial h = .00174371
1 h= .00130778
h= .00130778
dfdxb = 1
35
Iteration (dx): initial h = .00261467
1 h= .001961
h= .001961
dfdxb = 1
36
Iteration (dx): initial h = .00392111
1 h= .00294083
h= .00294083
dfdxb = 1
37
Iteration (dx): initial h = .00588077
1 h= .00441058
h= .00441058
dfdxb = 1
38
Iteration (dx): initial h = .00882026
1 h= .0066152
h= .0066152
dfdxb = 1
39
Iteration (dx): initial h = .0132295
1 h= .00992212
h= .00992212
dfdxb = 1
40
Iteration (dx): initial h = .01984335
1 h= .01488251
h= .01488251
dfdxb = 1
41
Iteration (dx): initial h = .02976412
1 h= .02232309
h= .02232309
dfdxb = 1
42
Iteration (dx): initial h = .04464529
1 h= .03348397
h= .03348397
dfdxb = 1
43
Iteration (dx): initial h = .06696704
1 h= .05022528
h= .05022528
dfdxb = 1
44
Iteration (dx): initial h = .10044966
1 h= .07533724
h= .07533724
dfdxb = 1
45 k= 1, l= 1: d^2f/d(xb_k)d(xb_l) = 0
ldose ... continuous
1 d^2f/dxdb = 1
2 d^2f/dxdb = 0
ldose: Std. Err. = 1.7930887
Marginal effects after glm
y = linear predictor (predict, xb)
= -.04312548
------------------------------------------------------------------------------
variable | dy/dx Std. Err. z P>|z| [ 95% C.I. ] X
---------+--------------------------------------------------------------------
ldose | 22.04118 1.79309 12.29 0.000 18.5268 25.5556 1.79343
------------------------------------------------------------------------------
The answer is accurate enough, but it sure took some effort to reach it. To see where my scale problem may be, I summarize my data and notice the response variable r has a large range compared with the other variables. So I decide to rescale r and see if that helps:
. summarize
Variable | Obs Mean Std. Dev. Min Max
-------------+--------------------------------------------------------
ldose | 8 1.793425 .0674563 1.6907 1.8839
n | 8 60.125 2.232071 56 63
r | 8 36.375 22.55747 6 61
. replace r=r/10
(8 real changes made)
. glm r ldose, family(binomial n) link(clog)
note: r has noninteger values
Iteration 0: log likelihood = -12.210073
Iteration 1: log likelihood = -12.202629
Iteration 2: log likelihood = -12.202628
Generalized linear models No. of obs = 8
Optimization : ML Residual df = 6
Scale parameter = 1
Deviance = 1.261310742 (1/df) Deviance = .2102185
Pearson = 1.264872999 (1/df) Pearson = .2108122
Variance function: V(u) = u*(1-u/n) [Binomial]
Link function : g(u) = ln(-ln(1-u/n)) [Complementary log-log]
AIC = 3.550657
Log likelihood = -12.20262839 BIC = -11.21534
------------------------------------------------------------------------------
| OIM
r | Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
ldose | 10.26508 3.45761 2.97 0.003 3.488291 17.04187
_cons | -21.37225 6.326251 -3.38 0.001 -33.77147 -8.973022
------------------------------------------------------------------------------
. mfx, predict(xb) trace(4)
calculating dydx (linear method)
equation i= 1
Iteration (dx): initial h = 1.793e-06
1 h= 1.345e-06
2 h= 1.009e-06
3 h= 7.566e-07
4 h= 5.675e-07
5 h= 4.256e-07
6 h= 3.192e-07
7 h= 2.394e-07
h= 2.394e-07
: df/d(xb) = 1
-------------------------
variable | dy/dx
---------+---------------
ldose | 10.265
-------------------------
calculating standard errors (linear method)
equation k = 1:
Iteration (dx): initial h = 1.793e-06
1 h= 1.345e-06
2 h= 1.009e-06
3 h= 7.566e-07
4 h= 5.675e-07
5 h= 4.256e-07
6 h= 3.192e-07
7 h= 2.394e-07
h= 2.394e-07
dfdxb = 1
Iteration (dx): initial h = 1.795e-06
1 h= 1.346e-06
2 h= 1.010e-06
3 h= 7.574e-07
4 h= 5.680e-07
5 h= 4.260e-07
6 h= 3.195e-07
7 h= 2.396e-07
h= 2.396e-07
dfdxb = 1
k= 1, l= 1: d^2f/d(xb_k)d(xb_l) = 0
ldose ... continuous
1 d^2f/dxdb = 1
2 d^2f/dxdb = 0
ldose: Std. Err. = 3.4576096
Marginal effects after glm
y = linear predictor (predict, xb)
= -2.962593
------------------------------------------------------------------------------
variable | dy/dx Std. Err. z P>|z| [ 95% C.I. ] X
---------+--------------------------------------------------------------------
ldose | 10.26508 3.45761 2.97 0.003 3.48829 17.0419 1.79343
------------------------------------------------------------------------------