1

I am running several simple regressions and I wish to save the value of the significance (P > |t|) of a regression for a given coefficient in a local macro.

For example, I know that:

local consCoeff = _b[_cons]

will save the coefficient for the constant, and that with _se[_cons] I can get the standard error. However, there doesn't seem to be any documentation on how to get the significance.

It would be best if the underscore format worked (like _pt etc.), but anything will do.

2 Answers2

1

There is no need to calculate anything yourself because Stata already does that for you.

For example:

. sysuse auto, clear
(1978 Automobile Data)

. regress price weight mpg


      Source |       SS           df       MS      Number of obs   =        74
-------------+----------------------------------   F(2, 71)        =     14.74
       Model |   186321280         2  93160639.9   Prob > F        =    0.0000
    Residual |   448744116        71  6320339.67   R-squared       =    0.2934
-------------+----------------------------------   Adj R-squared   =    0.2735
       Total |   635065396        73  8699525.97   Root MSE        =      2514

------------------------------------------------------------------------------
       price |      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
      weight |   1.746559   .6413538     2.72   0.008      .467736    3.025382
         mpg |  -49.51222   86.15604    -0.57   0.567    -221.3025     122.278
       _cons |   1946.069    3597.05     0.54   0.590    -5226.245    9118.382
------------------------------------------------------------------------------

The results are also returned in matrix r(table):

. matrix list r(table)

r(table)[9,3]
            weight         mpg       _cons
     b   1.7465592  -49.512221   1946.0687
    se   .64135379   86.156039   3597.0496
     t   2.7232382  -.57468079   .54101802
pvalue   .00812981   .56732373   .59018863
    ll   .46773602  -221.30248  -5226.2445
    ul   3.0253823   122.27804   9118.3819
    df          71          71          71
  crit   1.9939434   1.9939434   1.9939434
 eform           0           0           0

So for the p-value of, say weight, you type:

. matrix A = r(table)

. local pval = A[4,1]

. display `pval'
.00812981
0

The t-stat for the coefficient is the coefficient divided by the standard error. The p-value can then be calculated using the ttail function with the appropriate degrees of freedom. Since you are looking for the two-tailed p-value, the result gets multiplied by two.

In your case, the following should do it:

local consPvalue = (2 * ttail(e(df_r), abs(_b[cons]/_se[cons])))
Y Davis
  • 106
  • 5
  • While this code may answer the question, providing additional context regarding **how** and **why** it solves the problem would improve the answer's long-term value. – Alexander Jun 14 '18 at 02:43