Impute option

impute(type, [saveimp]) imputes missing values in policyvar and uses the imputed variable as the independent policy variable in estimation. type determines the imputation rule. The suboption saveimp adds the new variable to the database as policyvar_imputed. The following imputation types are available:

Examples

We want to estimate the dynamic effects of being a union member on the wage. We will use the National Longitudinal Survey data from Stata’s example datasets.

. webuse nlswork, clear
(National Longitudinal Survey.  Young Women 14-26 years of age in 1968)

This dataset has many missing observations. For the sake of the example, we will create a time variable that ignores these gaps.

. by idcode (year): gen time=_n

. xtset idcode time
       panel variable:  idcode (unbalanced)
        time variable:  time, 1 to 15
                delta:  1 unit

The policyvar union reverts to the unadopted-policy-state for several units. We generate a policyvar that follows staggered adoption.

. by idcode (time): gen union2=sum(union)

. replace union2=1 if union2>1 
(4,177 real changes made)

. order time union union2, after(year)

Now we add some missing values to the policyvar for this example and display how the policyvar looks for unit 2.

. replace union2=. if idcode==2 & inlist(time, 1,8,9,11,12)
(5 real changes made, 5 to missing)

. list idcode time union2 if idcode==2, noobs

  ┌────────────────────────┐
  │ idcode   time   union2 │
  ├────────────────────────┤
  │      2      1        . │
  │      2      2        0 │
  │      2      3        0 │
  │      2      4        0 │
  │      2      5        1 │
  ├────────────────────────┤
  │      2      6        1 │
  │      2      7        1 │
  │      2      8        . │
  │      2      9        . │
  │      2     10        1 │
  ├────────────────────────┤
  │      2     11        . │
  │      2     12        . │
  └────────────────────────┘

nuchange

First, we estimate an event-study where we impute outer missing values in the policyvar without verifying staggered adoption, i.e., according to nuchange. We also want to add the new policyvar to the database. We can do this using the saveimp suboption.

. xtevent ln_w age c.age#c.age ttl_exp c.ttl_exp#c.ttl_exp tenure , ///
>     policyvar(union2) window(3) impute(nuchange, saveimp)

Using options panelvar and timevar from xtset

No proxy or instruments provided. Implementing OLS estimator

Linear regression, absorbing indicators         Number of obs     =     23,533
Absorbed variable: idcode                       No. of categories =      2,771
                                                F(  27,  20735)   =     177.64
                                                Prob > F          =     0.0000
                                                R-squared         =     0.6662
                                                Adj R-squared     =     0.6211
                                                Root MSE          =     0.2872

────────────────────┬────────────────────────────────────────────────────────────────
            ln_wage │      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
────────────────────┼────────────────────────────────────────────────────────────────
           _k_eq_m4 │   -.044991   .0129656    -3.47   0.001    -.0704046   -.0195773
           _k_eq_m3 │   -.056602   .0146577    -3.86   0.000    -.0853324   -.0278717
           _k_eq_m2 │  -.0421076   .0132848    -3.17   0.002    -.0681469   -.0160683
           _k_eq_p0 │    .089006   .0126565     7.03   0.000     .0641984    .1138137
           _k_eq_p1 │   .0816302   .0130645     6.25   0.000     .0560227    .1072377
           _k_eq_p2 │   .0805316   .0137205     5.87   0.000     .0536383    .1074249
           _k_eq_p3 │   .0636236   .0146177     4.35   0.000     .0349717    .0922754
           _k_eq_p4 │   .0299571   .0131044     2.29   0.022     .0042715    .0556428
                age │   .0200429   .0039789     5.04   0.000      .012244    .0278418
                    │
        c.age#c.age │  -.0005227   .0000592    -8.83   0.000    -.0006388   -.0004067
                    │
            ttl_exp │   .0491641   .0035992    13.66   0.000     .0421095    .0562188
                    │
c.ttl_exp#c.ttl_exp │  -.0004481   .0001315    -3.41   0.001     -.000706   -.0001903
                    │
             tenure │    .009586   .0009319    10.29   0.000     .0077594    .0114126
                    │
               time │
                 2  │   .0560126   .0085424     6.56   0.000     .0392688    .0727564
                 3  │   .0575009   .0102856     5.59   0.000     .0373404    .0776614
                 4  │   .0602892   .0126124     4.78   0.000     .0355678    .0850106
                 5  │   .0485475   .0152863     3.18   0.001     .0185852    .0785099
                 6  │   .0484402   .0181939     2.66   0.008     .0127786    .0841017
                 7  │   .0293352   .0212178     1.38   0.167    -.0122535    .0709238
                 8  │     .02131   .0241125     0.88   0.377    -.0259524    .0685723
                 9  │   .0151379   .0269115     0.56   0.574    -.0376107    .0678866
                10  │   -.001417   .0298443    -0.05   0.962    -.0599142    .0570803
                11  │  -.0124587    .032712    -0.38   0.703    -.0765768    .0516593
                12  │   -.017273   .0355159    -0.49   0.627     -.086887    .0523411
                13  │  -.0346884   .0388956    -0.89   0.372    -.1109267    .0415499
                14  │  -.0097704   .0431507    -0.23   0.821    -.0943492    .0748084
                15  │  -.0288539   .0509617    -0.57   0.571    -.1287429    .0710351
                    │
              _cons │   1.221635   .0606818    20.13   0.000     1.102694    1.340576
────────────────────┴────────────────────────────────────────────────────────────────
F test of absorbed indicators: F(2770, 20735) = 9.920         Prob > F = 0.000

Compare the original policyvar and the imputed policyvar for unit 2.

. list idcode time union2 union2_imputed if idcode==2, noobs

  ┌───────────────────────────────────┐
  │ idcode   time   union2   union2~d │
  ├───────────────────────────────────┤
  │      2      1        .          0 │
  │      2      2        0          0 │
  │      2      3        0          0 │
  │      2      4        0          0 │
  │      2      5        1          1 │
  ├───────────────────────────────────┤
  │      2      6        1          1 │
  │      2      7        1          1 │
  │      2      8        .          . │
  │      2      9        .          . │
  │      2     10        1          1 │
  ├───────────────────────────────────┤
  │      2     11        .          1 │
  │      2     12        .          1 │
  └───────────────────────────────────┘

Drop the imputed policyvar.

. drop union2_imputed

stag

Now, we estimate an event-study imputing outer missing values in the policyvar verifying staggered adoption, i.e., according to stag, and save the imputed policyvar.

. xtevent ln_w age c.age#c.age ttl_exp c.ttl_exp#c.ttl_exp tenure , ///
>             policyvar(union2) window(3) impute(stag, saveimp)

Using options panelvar and timevar from xtset

No proxy or instruments provided. Implementing OLS estimator

Linear regression, absorbing indicators         Number of obs     =     23,533
Absorbed variable: idcode                       No. of categories =      2,771
                                                F(  27,  20735)   =     177.64
                                                Prob > F          =     0.0000
                                                R-squared         =     0.6662
                                                Adj R-squared     =     0.6211
                                                Root MSE          =     0.2872

────────────────────┬────────────────────────────────────────────────────────────────
            ln_wage │      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
────────────────────┼────────────────────────────────────────────────────────────────
           _k_eq_m4 │   -.044991   .0129656    -3.47   0.001    -.0704046   -.0195773
           _k_eq_m3 │   -.056602   .0146577    -3.86   0.000    -.0853324   -.0278717
           _k_eq_m2 │  -.0421076   .0132848    -3.17   0.002    -.0681469   -.0160683
           _k_eq_p0 │    .089006   .0126565     7.03   0.000     .0641984    .1138137
           _k_eq_p1 │   .0816302   .0130645     6.25   0.000     .0560227    .1072377
           _k_eq_p2 │   .0805316   .0137205     5.87   0.000     .0536383    .1074249
           _k_eq_p3 │   .0636236   .0146177     4.35   0.000     .0349717    .0922754
           _k_eq_p4 │   .0299571   .0131044     2.29   0.022     .0042715    .0556428
                age │   .0200429   .0039789     5.04   0.000      .012244    .0278418
                    │
        c.age#c.age │  -.0005227   .0000592    -8.83   0.000    -.0006388   -.0004067
                    │
            ttl_exp │   .0491641   .0035992    13.66   0.000     .0421095    .0562188
                    │
c.ttl_exp#c.ttl_exp │  -.0004481   .0001315    -3.41   0.001     -.000706   -.0001903
                    │
             tenure │    .009586   .0009319    10.29   0.000     .0077594    .0114126
                    │
               time │
                 2  │   .0560126   .0085424     6.56   0.000     .0392688    .0727564
                 3  │   .0575009   .0102856     5.59   0.000     .0373404    .0776614
                 4  │   .0602892   .0126124     4.78   0.000     .0355678    .0850106
                 5  │   .0485475   .0152863     3.18   0.001     .0185852    .0785099
                 6  │   .0484402   .0181939     2.66   0.008     .0127786    .0841017
                 7  │   .0293352   .0212178     1.38   0.167    -.0122535    .0709238
                 8  │     .02131   .0241125     0.88   0.377    -.0259524    .0685723
                 9  │   .0151379   .0269115     0.56   0.574    -.0376107    .0678866
                10  │   -.001417   .0298443    -0.05   0.962    -.0599142    .0570803
                11  │  -.0124587    .032712    -0.38   0.703    -.0765768    .0516593
                12  │   -.017273   .0355159    -0.49   0.627     -.086887    .0523411
                13  │  -.0346884   .0388956    -0.89   0.372    -.1109267    .0415499
                14  │  -.0097704   .0431507    -0.23   0.821    -.0943492    .0748084
                15  │  -.0288539   .0509617    -0.57   0.571    -.1287429    .0710351
                    │
              _cons │   1.221635   .0606818    20.13   0.000     1.102694    1.340576
────────────────────┴────────────────────────────────────────────────────────────────
F test of absorbed indicators: F(2770, 20735) = 9.920         Prob > F = 0.000

Compare the original policyvar and the imputed policyvar for unit 2.

. list idcode time union2 union2_imputed if idcode==2, noobs

  ┌───────────────────────────────────┐
  │ idcode   time   union2   union2~d │
  ├───────────────────────────────────┤
  │      2      1        .          0 │
  │      2      2        0          0 │
  │      2      3        0          0 │
  │      2      4        0          0 │
  │      2      5        1          1 │
  ├───────────────────────────────────┤
  │      2      6        1          1 │
  │      2      7        1          1 │
  │      2      8        .          . │
  │      2      9        .          . │
  │      2     10        1          1 │
  ├───────────────────────────────────┤
  │      2     11        .          1 │
  │      2     12        .          1 │
  └───────────────────────────────────┘

Drop the imputed policyvar.

. drop union2_imputed

instag

Last, we estimate an event-study imputing outer and inner missing values in the policyvar verifying staggered adoption, i.e., according to instag, and save the imputed policyvar.

. xtevent ln_w age c.age#c.age ttl_exp c.ttl_exp#c.ttl_exp tenure , ///
>     policyvar(union2) window(3) impute(instag, saveimp)

Using options panelvar and timevar from xtset

No proxy or instruments provided. Implementing OLS estimator

Linear regression, absorbing indicators         Number of obs     =     23,541
Absorbed variable: idcode                       No. of categories =      2,771
                                                F(  27,  20743)   =     177.82
                                                Prob > F          =     0.0000
                                                R-squared         =     0.6662
                                                Adj R-squared     =     0.6212
                                                Root MSE          =     0.2872

────────────────────┬────────────────────────────────────────────────────────────────
            ln_wage │      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
────────────────────┼────────────────────────────────────────────────────────────────
           _k_eq_m4 │  -.0449924   .0129631    -3.47   0.001    -.0704011   -.0195837
           _k_eq_m3 │  -.0565855   .0146546    -3.86   0.000    -.0853096   -.0278614
           _k_eq_m2 │  -.0421016   .0132823    -3.17   0.002    -.0681359   -.0160673
           _k_eq_p0 │    .089023   .0126502     7.04   0.000     .0642277    .1138183
           _k_eq_p1 │   .0815659   .0130576     6.25   0.000     .0559719    .1071598
           _k_eq_p2 │   .0804259   .0137127     5.87   0.000      .053548    .1073037
           _k_eq_p3 │   .0635638   .0146083     4.35   0.000     .0349305    .0921971
           _k_eq_p4 │   .0299474   .0130957     2.29   0.022     .0042789    .0556159
                age │   .0200353   .0039778     5.04   0.000     .0122385    .0278322
                    │
        c.age#c.age │  -.0005226   .0000592    -8.83   0.000    -.0006386   -.0004065
                    │
            ttl_exp │   .0491603   .0035979    13.66   0.000     .0421082    .0562125
                    │
c.ttl_exp#c.ttl_exp │  -.0004479   .0001315    -3.41   0.001    -.0007057   -.0001902
                    │
             tenure │   .0095845   .0009314    10.29   0.000     .0077588    .0114102
                    │
               time │
                 2  │   .0560166   .0085406     6.56   0.000     .0392763    .0727568
                 3  │   .0575122   .0102831     5.59   0.000     .0373564     .077668
                 4  │   .0603109   .0126093     4.78   0.000     .0355958    .0850261
                 5  │   .0485817   .0152818     3.18   0.001     .0186282    .0785352
                 6  │   .0484417   .0181883     2.66   0.008     .0127912    .0840921
                 7  │   .0293154   .0212118     1.38   0.167    -.0122613    .0708922
                 8  │    .021307   .0241059     0.88   0.377    -.0259425    .0685565
                 9  │   .0151769   .0269039     0.56   0.573    -.0375569    .0679106
                10  │  -.0014045   .0298363    -0.05   0.962     -.059886    .0570769
                11  │  -.0124446   .0327037    -0.38   0.704    -.0765463    .0516572
                12  │  -.0173009    .035506    -0.49   0.626    -.0868955    .0522938
                13  │  -.0346925   .0388867    -0.89   0.372    -.1109135    .0415284
                14  │  -.0097838   .0431413    -0.23   0.821    -.0943442    .0747766
                15  │  -.0288719   .0509512    -0.57   0.571    -.1287403    .0709964
                    │
              _cons │   1.221736   .0606651    20.14   0.000     1.102827    1.340644
────────────────────┴────────────────────────────────────────────────────────────────
F test of absorbed indicators: F(2770, 20743) = 9.924         Prob > F = 0.000

Compare the original policyvar and the imputed policyvar for unit 2.

. list idcode time union2 union2_imputed if idcode==2, noobs

  ┌───────────────────────────────────┐
  │ idcode   time   union2   union2~d │
  ├───────────────────────────────────┤
  │      2      1        .          0 │
  │      2      2        0          0 │
  │      2      3        0          0 │
  │      2      4        0          0 │
  │      2      5        1          1 │
  ├───────────────────────────────────┤
  │      2      6        1          1 │
  │      2      7        1          1 │
  │      2      8        .          1 │
  │      2      9        .          1 │
  │      2     10        1          1 │
  ├───────────────────────────────────┤
  │      2     11        .          1 │
  │      2     12        .          1 │
  └───────────────────────────────────┘

How the imputation works on the event-time dummies

Now we display how the imputation works on the event-time dummies. First, we differentiate the policyvar.

. gen union2_d=d.union2
(4,717 missing values generated)

Estimate an event study without imputing the policyvar and save the event-time dummies by the savek option.

. xtevent ln_w age c.age#c.age ttl_exp c.ttl_exp#c.ttl_exp tenure , ///
>     policyvar(union2) window(3) savek(vv)

Using options panelvar and timevar from xtset

No proxy or instruments provided. Implementing OLS estimator

Linear regression, absorbing indicators         Number of obs     =      5,672
Absorbed variable: idcode                       No. of categories =      1,600
                                                F(  20,   4052)   =      16.82
                                                Prob > F          =     0.0000
                                                R-squared         =     0.8030
                                                Adj R-squared     =     0.7243
                                                Root MSE          =     0.2162

────────────────────┬────────────────────────────────────────────────────────────────
            ln_wage │      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
────────────────────┼────────────────────────────────────────────────────────────────
           _k_eq_m4 │  -.0486214   .0268491    -1.81   0.070    -.1012604    .0040177
           _k_eq_m3 │  -.0501976   .0245746    -2.04   0.041    -.0983773   -.0020179
           _k_eq_m2 │   -.052895   .0219346    -2.41   0.016     -.095899   -.0098911
           _k_eq_p0 │   .0405804   .0215074     1.89   0.059     -.001586    .0827468
           _k_eq_p1 │   .0206119    .022553     0.91   0.361    -.0236043    .0648281
           _k_eq_p2 │   .0282941   .0244515     1.16   0.247    -.0196443    .0762325
           _k_eq_p3 │   .0152028   .0273227     0.56   0.578    -.0383647    .0687703
           _k_eq_p4 │  -.0092743   .0298438    -0.31   0.756    -.0677845    .0492359
                age │  -.0080527   .0146572    -0.55   0.583    -.0367888    .0206835
                    │
        c.age#c.age │  -.0002118   .0002247    -0.94   0.346    -.0006524    .0002287
                    │
            ttl_exp │    .040395   .0105632     3.82   0.000     .0196853    .0611047
                    │
c.ttl_exp#c.ttl_exp │  -.0006165   .0004356    -1.42   0.157    -.0014706    .0002375
                    │
             tenure │   .0074825   .0018953     3.95   0.000     .0037666    .0111984
                    │
               time │
                 6  │   .0274323   .0136636     2.01   0.045     .0006441    .0542204
                 7  │   .0364149   .0241351     1.51   0.131    -.0109032     .083733
                 8  │   .0677196     .03455     1.96   0.050    -.0000174    .1354565
                 9  │   .0935328   .0442389     2.11   0.035     .0068002    .1802655
                10  │   .0944863   .0554168     1.71   0.088     -.014161    .2031336
                11  │   .1177996   .0662023     1.78   0.075    -.0119933    .2475924
                12  │    .134973   .0756575     1.78   0.074    -.0133573    .2833033
                    │
              _cons │   1.864822   .2456629     7.59   0.000     1.383187    2.346456
────────────────────┴────────────────────────────────────────────────────────────────
F test of absorbed indicators: F(1599, 4052) = 8.310          Prob > F = 0.000

Now, we display the event-time dummies for a unit. We can verify that this set of event-time dummies corresponds to different leads of the differentiated policyvar (see equation 2 in Freyaldenhoven et al. (2021)).

. list idcode time union2 union2_d vv_eq_m4 vv_eq_m3 vv_eq_m2 vv_eq_m1 if idcode==24, noobs

  ┌───────────────────────────────────────────────────────────────────────────────┐
  │ idcode   time   union2   union2_d   vv_eq_m4   vv_eq_m3   vv_eq_m2   vv_eq_m1 │
  ├───────────────────────────────────────────────────────────────────────────────┤
  │     24      1        0          .          1          0          0          0 │
  │     24      2        0          0          1          0          0          0 │
  │     24      3        0          0          1          0          0          0 │
  │     24      4        0          0          1          0          0          0 │
  │     24      5        0          0          1          0          0          0 │
  ├───────────────────────────────────────────────────────────────────────────────┤
  │     24      6        0          0          1          0          0          0 │
  │     24      7        0          0          0          1          0          0 │
  │     24      8        0          0          0          0          1          0 │
  │     24      9        0          0          0          0          0          1 │
  │     24     10        1          1          0          0          0          0 │
  ├───────────────────────────────────────────────────────────────────────────────┤
  │     24     11        1          0          0          0          0          0 │
  │     24     12        1          0          0          0          0          0 │
  │     24     13        1          0          .          .          0          0 │
  │     24     14        1          0          .          .          .          0 │
  │     24     15        1          0          .          .          .          . │
  └───────────────────────────────────────────────────────────────────────────────┘

Drop the event-time dummies.

. drop vv*

Estimate the same model, but with imputation according to stag.

. xtevent ln_w age c.age#c.age ttl_exp c.ttl_exp#c.ttl_exp tenure , ///
> policyvar(union2) window(3) savek(vv) impute(stag)

Using options panelvar and timevar from xtset

No proxy or instruments provided. Implementing OLS estimator

Linear regression, absorbing indicators         Number of obs     =     23,533
Absorbed variable: idcode                       No. of categories =      2,771
                                                F(  27,  20735)   =     177.64
                                                Prob > F          =     0.0000
                                                R-squared         =     0.6662
                                                Adj R-squared     =     0.6211
                                                Root MSE          =     0.2872

────────────────────┬────────────────────────────────────────────────────────────────
            ln_wage │      Coef.   Std. Err.      t    P>|t|     [95% Conf. Interval]
────────────────────┼────────────────────────────────────────────────────────────────
           _k_eq_m4 │   -.044991   .0129656    -3.47   0.001    -.0704046   -.0195773
           _k_eq_m3 │   -.056602   .0146577    -3.86   0.000    -.0853324   -.0278717
           _k_eq_m2 │  -.0421076   .0132848    -3.17   0.002    -.0681469   -.0160683
           _k_eq_p0 │    .089006   .0126565     7.03   0.000     .0641984    .1138137
           _k_eq_p1 │   .0816302   .0130645     6.25   0.000     .0560227    .1072377
           _k_eq_p2 │   .0805316   .0137205     5.87   0.000     .0536383    .1074249
           _k_eq_p3 │   .0636236   .0146177     4.35   0.000     .0349717    .0922754
           _k_eq_p4 │   .0299571   .0131044     2.29   0.022     .0042715    .0556428
                age │   .0200429   .0039789     5.04   0.000      .012244    .0278418
                    │
        c.age#c.age │  -.0005227   .0000592    -8.83   0.000    -.0006388   -.0004067
                    │
            ttl_exp │   .0491641   .0035992    13.66   0.000     .0421095    .0562188
                    │
c.ttl_exp#c.ttl_exp │  -.0004481   .0001315    -3.41   0.001     -.000706   -.0001903
                    │
             tenure │    .009586   .0009319    10.29   0.000     .0077594    .0114126
                    │
               time │
                 2  │   .0560126   .0085424     6.56   0.000     .0392688    .0727564
                 3  │   .0575009   .0102856     5.59   0.000     .0373404    .0776614
                 4  │   .0602892   .0126124     4.78   0.000     .0355678    .0850106
                 5  │   .0485475   .0152863     3.18   0.001     .0185852    .0785099
                 6  │   .0484402   .0181939     2.66   0.008     .0127786    .0841017
                 7  │   .0293352   .0212178     1.38   0.167    -.0122535    .0709238
                 8  │     .02131   .0241125     0.88   0.377    -.0259524    .0685723
                 9  │   .0151379   .0269115     0.56   0.574    -.0376107    .0678866
                10  │   -.001417   .0298443    -0.05   0.962    -.0599142    .0570803
                11  │  -.0124587    .032712    -0.38   0.703    -.0765768    .0516593
                12  │   -.017273   .0355159    -0.49   0.627     -.086887    .0523411
                13  │  -.0346884   .0388956    -0.89   0.372    -.1109267    .0415499
                14  │  -.0097704   .0431507    -0.23   0.821    -.0943492    .0748084
                15  │  -.0288539   .0509617    -0.57   0.571    -.1287429    .0710351
                    │
              _cons │   1.221635   .0606818    20.13   0.000     1.102694    1.340576
────────────────────┴────────────────────────────────────────────────────────────────
F test of absorbed indicators: F(2770, 20735) = 9.920         Prob > F = 0.000

Now, we display the event-time dummies for the same unit. We can verify that xtevent imputed event-time dummies despite the policyvar not having missing values in its observed data range. This imputation happens because the imputation works on both the observed and the unobserved data range of the policyvar.

. list idcode time union2 union2_d vv_eq_m4 vv_eq_m3 vv_eq_m2 vv_eq_m1 if idcode==24, noobs

  ┌───────────────────────────────────────────────────────────────────────────────┐
  │ idcode   time   union2   union2_d   vv_eq_m4   vv_eq_m3   vv_eq_m2   vv_eq_m1 │
  ├───────────────────────────────────────────────────────────────────────────────┤
  │     24      1        0          .          1          0          0          0 │
  │     24      2        0          0          1          0          0          0 │
  │     24      3        0          0          1          0          0          0 │
  │     24      4        0          0          1          0          0          0 │
  │     24      5        0          0          1          0          0          0 │
  ├───────────────────────────────────────────────────────────────────────────────┤
  │     24      6        0          0          1          0          0          0 │
  │     24      7        0          0          0          1          0          0 │
  │     24      8        0          0          0          0          1          0 │
  │     24      9        0          0          0          0          0          1 │
  │     24     10        1          1          0          0          0          0 │
  ├───────────────────────────────────────────────────────────────────────────────┤
  │     24     11        1          0          0          0          0          0 │
  │     24     12        1          0          0          0          0          0 │
  │     24     13        1          0          0          0          0          0 │
  │     24     14        1          0          0          0          0          0 │
  │     24     15        1          0          0          0          0          0 │
  └───────────────────────────────────────────────────────────────────────────────┘