interpretation of odds ratio for continuous predictor

I'm examining the influence of new venture product maturity on different type of investments (none, angel, crowdfunding, and series investments). I have multiple measures for each firm. The variable product maturity is continuous and ranges between 0 and 1 (although the sample data only ranges from about 0.5 to 0.9). The base of this regression is the investment type "none".

From this Stata 16 command...

mlogit investmenttype maturity, vce(cluster id) rrr


... I retrieve the following output:

                   RRR
maturity
angel           0.054
crowdfunding    0.344
series          8.054


How do I phrase these results? I struggle with comparing the category "none" as well as with the continuous characteristics of the independent variable. From non-continuous variables I learned that it would be something like "the probability of series investments is 7 times higher for product maturity = 1 than for product maturity = 0". But since there is not less than no investment... I have the feeling that I messed up.

Stata is showing the exponentiated coefficients, which give the relative-risks ratio for a one-unit change in the corresponding variable. Risk is measured as the risk of the outcome relative to the base outcome. In your case,

$$\frac{\frac{\Pr(angel \vert maturity'=maturity+1)}{\Pr(none \vert maturity'=maturity+1)}}{\frac{\Pr(angel \vert maturity)}{\Pr(none \vert maturity)}}=0.054$$

I don't know if that is a particularly meaningful quantity in this case given the scale of maturity (since values over 1 don't make sense). I also find ratios of ratios hard to wrap my brain around and to explain to others. I would calculate predicted probabilities or some sort of marginal effect at various values of maturity (see below for an example).

Here's a toy example with binary mlogit, which is just a logit:

. sysuse auto, clear
(1978 Automobile Data)

.
. mlogit foreign c.price, rrr nolog

Multinomial logistic regression                 Number of obs     =         74
LR chi2(1)        =       0.17
Prob > chi2       =     0.6784
Log likelihood =  -44.94724                     Pseudo R2         =     0.0019

------------------------------------------------------------------------------
foreign |        RRR   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
Domestic     |  (base outcome)
-------------+----------------------------------------------------------------
Foreign      |
price |   1.000035   .0000844     0.42   0.676     .9998699    1.000201
_cons |    .339666   .1996674    -1.84   0.066     .1073214    1.075023
------------------------------------------------------------------------------
Note: _cons estimates baseline relative risk for each outcome.

. logit foreign c.price, or  nolog

Logistic regression                             Number of obs     =         74
LR chi2(1)        =       0.17
Prob > chi2       =     0.6784
Log likelihood =  -44.94724                     Pseudo R2         =     0.0019

------------------------------------------------------------------------------
foreign | Odds Ratio   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
price |   1.000035   .0000844     0.42   0.676     .9998699    1.000201
_cons |    .339666   .1996674    -1.84   0.066     .1073214    1.075023
------------------------------------------------------------------------------
Note: _cons estimates baseline odds.

. logit foreign c.price, nolog

Logistic regression                             Number of obs     =         74
LR chi2(1)        =       0.17
Prob > chi2       =     0.6784
Log likelihood =  -44.94724                     Pseudo R2         =     0.0019

------------------------------------------------------------------------------
foreign |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
price |   .0000353   .0000844     0.42   0.676    -.0001301    .0002006
_cons |  -1.079792   .5878344    -1.84   0.066    -2.231927    .0723419
------------------------------------------------------------------------------

. display "Price RRR = " exp(_b[price])
Price RRR = 1.0000353

.
. /* RRR By Hand */
. gen double pr_foreign_np  = invlogit(_b[price]*(price + 1) + _b[_cons])

. gen double pr_domestic_np = 1 - pr_foreign_np

. gen double pr_foreign_op  = invlogit(_b[price]*(price) + _b[_cons])

. gen double pr_domestic_op = 1 - pr_foreign_op

. gen double rrr = (pr_foreign_np/pr_domestic_np)/(pr_foreign_op/pr_domestic_op)

. sum rrr

Variable |        Obs        Mean    Std. Dev.       Min        Max
-------------+---------------------------------------------------------
rrr |         74    1.000035    2.22e-16   1.000035   1.000035

.
. /* RRR Via Margins */
. margins, at(price == generate(price + 1)) at(price == generate(price)) post

Adjusted predictions                            Number of obs     =         74
Model VCE    : OIM

Expression   : Pr(foreign), predict()

1._at        : price           = price + 1

2._at        : price           = price

------------------------------------------------------------------------------
|            Delta-method
|     Margin   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
_at |
1  |   .2973047   .0530708     5.60   0.000     .1932878    .4013215
2  |   .2972973     .05307     5.60   0.000      .193282    .4013126
------------------------------------------------------------------------------

. display "Price RRR = " (_b[1._at]/(1-_b[1._at]))/(_b[2._at]/(1-_b[2._at]))
Price RRR = 1.0000352


Here the relative risk is a tiny bit larger when price increases by \$1 since the RRR is barely greater than one. Even if price went up by$1K, the RRR would only be 1.035.

Personally, I would do something like this:

mlogit foreign c.price, nolog
margins, at(price = (3e3(2e3)15e3))
marginsplot, name(phats, replace)
margins, at(price = (3e3(2e3)15e3)) contrast(atcontrast(ar._at)) predict(outcome(1))
marginsplot, name(FDs, replace)


This plot below shows the average predicted probability for each outcome varying price (as if every car cost 3K,5K,...,15K). You can see that the probability of foreign (outcome 1) rises with cost, and the probability of domestic falls (outcome 0). At each price point (as the car dealers like to say), a car is more likely to be domestic and the difference is starker at low prices.

The second graph plots the change in that probability for each 2K increase in price for the foreign car purchase outcome only (differences between adjacent points on the graph above). This confirms that the probability of foreign origin increases very little as cars get more expensive and that it is indistinguishable from no change at all.

To me, this makes more sense and is easier to explain to others than RRRs. I think RRS were easier to compute once upon the time (and still are with many other packages), but Stata's margins command obviates the need for them.