Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Heterogeneous treatment effects in a piecewise regression with splines

    Hi. I am running a piecewise regression on my panel data where the time series variables are con_id and week_num. I have used the mkspline command to create knots at week 78 and 107, my two intervention points. I also have a categorical age variable that groups consultants (con_id) by age groups (<30, 30-40...). I suspect heterogenous treatment effects by age, where doctors of different age groups respond differently to the treatment, and want to estimate this effect of age on treatment uptake. In a regression with interaction terms, I would have interacted each age group with the treatment variable. However, I am not sure how to do this in the regression using splines. Any guidance on this would be much appreciated.

    Code:
    
    *current code
    
    
    //time dummy vars at intervention points
    gen week1 = 0
        replace week1 = 1 if week_num >= 78
    
        gen week2 = 0
        replace week2 = 1 if week_num >= 107
    
    
    *creating knots
    mkspline knot1 78 knot2 107 knot3 = week_num
    
    
    xtset con_id week_num
    xtreg week_docalltele knot1 knot2 knot3 week1 week2, vce(cluster con_id)
    predict linear_spline     /* Generate the predicted scores */
    
    
    *sample data
    
    clear
    input float week_num long con_id float(week_docalltele age_cat) byte(knot1 knot2 knot3) float(week1 week2)
    1  1  5 2 1 0 0 0 0
    1  2  3 2 1 0 0 0 0
    1  3  1 3 1 0 0 0 0
    1  4 16 3 1 0 0 0 0
    1  5 15 3 1 0 0 0 0
    1  6  5 4 1 0 0 0 0
    1  9  3 2 1 0 0 0 0
    1 10  3 3 1 0 0 0 0
    1 14  6 3 1 0 0 0 0
    1 18  3 2 1 0 0 0 0
    1 19 12 4 1 0 0 0 0
    1 20  2 2 1 0 0 0 0
    1 21  1 4 1 0 0 0 0
    2  1  9 2 2 0 0 0 0
    2  2  2 2 2 0 0 0 0
    2  3  5 3 2 0 0 0 0
    2  4 15 3 2 0 0 0 0
    2  5 10 3 2 0 0 0 0
    2  6  6 4 2 0 0 0 0
    2  9  2 2 2 0 0 0 0
    2 10  1 3 2 0 0 0 0
    2 11  2 3 2 0 0 0 0
    2 14  5 3 2 0 0 0 0
    2 17  3 4 2 0 0 0 0
    2 18  4 2 2 0 0 0 0
    2 19  7 4 2 0 0 0 0
    2 20  6 2 2 0 0 0 0
    2 21  6 4 2 0 0 0 0
    2 23  2 4 2 0 0 0 0
    3  1 24 2 3 0 0 0 0
    3  4 13 3 3 0 0 0 0
    3  5 29 3 3 0 0 0 0
    3  9  8 2 3 0 0 0 0
    3 10  4 3 3 0 0 0 0
    3 11  1 3 3 0 0 0 0
    3 12  2 3 3 0 0 0 0
    3 14  7 3 3 0 0 0 0
    3 18  6 2 3 0 0 0 0
    3 19  6 4 3 0 0 0 0
    3 20  1 2 3 0 0 0 0
    3 21  6 4 3 0 0 0 0
    3 22  2 3 3 0 0 0 0
    3 23  3 4 3 0 0 0 0
    4  1  5 2 4 0 0 0 0
    4  3  2 3 4 0 0 0 0
    4  4  6 3 4 0 0 0 0
    4  5  1 3 4 0 0 0 0
    4  6  1 4 4 0 0 0 0
    4  7 15 2 4 0 0 0 0
    4  9  5 2 4 0 0 0 0
    4 10  1 3 4 0 0 0 0
    4 12  1 3 4 0 0 0 0
    4 19 10 4 4 0 0 0 0
    4 20  3 2 4 0 0 0 0
    4 22  2 3 4 0 0 0 0
    5  1 13 2 5 0 0 0 0
    5  2  1 2 5 0 0 0 0
    5  3  4 3 5 0 0 0 0
    5  4  3 3 5 0 0 0 0
    5  5 16 3 5 0 0 0 0
    5  6  1 4 5 0 0 0 0
    5  7  1 2 5 0 0 0 0
    5  9  5 2 5 0 0 0 0
    5 10  6 3 5 0 0 0 0
    5 12  1 3 5 0 0 0 0
    5 14  3 3 5 0 0 0 0
    5 17  1 4 5 0 0 0 0
    5 18  4 2 5 0 0 0 0
    5 19  8 4 5 0 0 0 0
    5 20  1 2 5 0 0 0 0
    5 21  9 4 5 0 0 0 0
    5 22  1 3 5 0 0 0 0
    5 23  3 4 5 0 0 0 0
    6  1 11 2 6 0 0 0 0
    6  3  1 3 6 0 0 0 0
    6  4  4 3 6 0 0 0 0
    6  5 14 3 6 0 0 0 0
    6  6  4 4 6 0 0 0 0
    6  7 12 2 6 0 0 0 0
    6  9  7 2 6 0 0 0 0
    6 10  2 3 6 0 0 0 0
    6 12  3 3 6 0 0 0 0
    6 14  5 3 6 0 0 0 0
    6 17  2 4 6 0 0 0 0
    6 19  1 4 6 0 0 0 0
    6 21  7 4 6 0 0 0 0
    6 22  1 3 6 0 0 0 0
    6 23  1 4 6 0 0 0 0
    7  2  2 2 7 0 0 0 0
    7  4  7 3 7 0 0 0 0
    7  5 19 3 7 0 0 0 0
    7  6  9 4 7 0 0 0 0
    7  7 10 2 7 0 0 0 0
    7  9  6 2 7 0 0 0 0
    7 10  2 3 7 0 0 0 0
    7 11  1 3 7 0 0 0 0
    7 14  1 3 7 0 0 0 0
    7 17  1 4 7 0 0 0 0
    7 18  9 2 7 0 0 0 0
    7 19  5 4 7 0 0 0 0

  • #2
    Hi. Just wanted to check if anyone had any suggestions on this. I'd greatly appreciate any help!

    Comment


    • #3
      dataex is useless.

      Code:
      clear all
      
      set obs 150
      
      g t = _n
      tsset t
      
      mkspline knot1 50 knot2 100 knot3 = t, marginal
      
      g period = 1 + 1*(knot2>0) + 1*(knot3>0)
      g age = runiform()>0.5
      
      ** SLOPE 1: = 0.1
      ** SLOPE 2: = 0.3
      ** SLOPE 3: = 0.5
      ** SLOPE 2: = 0.35 for age==1
      ** SLOPE 3: = 0.60 for age==1
      g y = 1 + 0.1*t + 0.2*knot2 + 0.3*knot3 + 0.15*age*knot2 + 0.3*age*knot3 + rnormal(0,0.1)
      
      tsline y
      twoway scatter y t if age==0 , color(black%20) jitter(2)     ///
          || lfit y t if period==1 & age==0                        ///
          || lfit y t if period==2 & age==0                        ///
          || lfit y t if period==3 & age==0                        ///
          || scatter y t if age==1 , color(black%20) jitter(2)     ///
          || lfit y t if period==1 & age==1                        ///
          || lfit y t if period==2 & age==1                        ///
          || lfit y t if period==3 & age==1
          
      
      reg y i.period i.age i.age#(c.knot1 c.knot2 c.knot3)

      Comment

      Working...
      X