Hi. I am attempting to manually run a single-group ITSA for my study that has two interventions at week 78 and 107 (the in-built stat command doesn't work for my purpose). I tried two methods (from here: https://rpubs.com/mbounthavong/itsa_stata):
- using spline (mkspline) to generate new variables that take into consideration the time after the intervention
- the more conventional method using interaction variables
Code:
*1. Using splines
*creating knots
mkspline knot1 78 knot2 107 knot3 = week_num, marginal
// Create a variable to separate the treatment periods
gen period = .
replace period = 0 if week_num < 78 /* Baseline phase */
replace period = 1 if week_num >= 78 & week_num<107 & !missing(week_num) /* Mandate phase */
replace period = 2 if week_num >= 107 & !missing(week_num) /* Platform phase */
tab period, m
xtset con_id week_num
xtreg week_docalltele i.period c.knot1 c.knot2 c.knot3
predict linear_spline
*Output 1
------------------------------------------------------------------------------
week_docal~e | Coefficient Std. err. z P>|z| [95% conf. interval]
-------------+----------------------------------------------------------------
period |
1 | 1.379151 .2534505 5.44 0.000 .8823975 1.875905
2 | .8693821 .4655648 1.87 0.062 -.0431081 1.781872
|
knot1 | -.0583853 .0030684 -19.03 0.000 -.0643993 -.0523713
knot2 | .053078 .0136945 3.88 0.000 .0262372 .0799188
knot3 | .0147004 .0188625 0.78 0.436 -.0222693 .0516702
_cons | 7.62364 .3468154 21.98 0.000 6.943895 8.303386
-------------+----------------------------------------------------------------
sigma_u | 2.663207
sigma_e | 3.3603617
rho | .38579202 (fraction of variance due to u_i)
------------------------------------------------------------------------------
. predict linear_spline
(option xb assumed; fitted values)
2. Using interaction variables
// Create a variable to separate the treatment periods
gen period = .
replace period = 0 if week_num < 78 /* Baseline phase */
replace period = 1 if week_num >= 78 & week_num<107 & !missing(week_num) /* Mandate phase */
replace period = 2 if week_num >= 107 & !missing(week_num) /* Platform phase */
tab period, m
xtset con_id week_num
xtreg week_docalltele i.period c.week_num i.period#c.week_num
predict linear_spline
*Output 2
-----------------------------------------------------------------------------------
week_docalltele | Coefficient Std. err. z P>|z| [95% conf. interval]
------------------+----------------------------------------------------------------
period |
1 | -2.760932 1.231048 -2.24 0.025 -5.173741 -.3481229
2 | -4.843649 1.624719 -2.98 0.003 -8.028039 -1.659259
|
week_num | -.0583853 .0030684 -19.03 0.000 -.0643993 -.0523713
|
period#c.week_num |
1 | .053078 .0136945 3.88 0.000 .0262372 .0799188
2 | .0677784 .0136487 4.97 0.000 .0410274 .0945295
|
_cons | 7.62364 .3468154 21.98 0.000 6.943895 8.303386
------------------+----------------------------------------------------------------
sigma_u | 2.663207
sigma_e | 3.3603617
rho | .38579202 (fraction of variance due to u_i)
-----------------------------------------------------------------------------------
. predict linear_spline
***Data sample
input float week_num long con_id float week_docalltele
1 4 12
1 11 5
1 12 10
1 13 2
1 17 8
1 22 7
1 23 19
1 24 4
1 25 3
1 26 3
1 30 7
1 31 7
1 33 2
1 37 12
1 38 11
1 40 16
1 41 14
1 42 1
1 43 3
1 45 8
1 46 2
1 51 4
1 54 22
1 55 2
1 56 9
1 57 17
1 58 21
1 59 20
1 61 2
1 63 6
1 65 2
1 67 9
1 69 8
1 71 24
2 12 17
2 13 6
2 16 12
2 17 12
2 23 14
2 25 2
2 26 5
2 28 2
2 31 7
2 32 3
2 33 1
2 35 10
2 37 14
2 38 6
2 39 5
2 41 1
2 42 6
2 43 6
2 45 12
2 46 2
2 48 1
2 49 9
2 50 4
2 51 6
2 54 19
2 55 1
2 56 10
2 57 20
2 58 25
2 59 16
2 61 8
2 62 6
2 65 2
2 67 15
2 69 6
2 70 15
2 71 17
3 4 6
3 11 15
3 12 15
3 16 10
3 17 9
3 22 14
3 24 14
3 25 2
3 27 10
3 28 3
3 29 3
3 31 12
3 33 5
3 37 4
3 38 10
3 39 10
3 40 20
3 41 14
3 42 5
3 43 7
3 45 21
3 46 1
3 48 1
3 49 5
3 50 5
3 51 8
3 56 1
3 57 27
3 58 19

Comment