Announcement

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

  • sem + estat teffects command lead to no path/ constrained

    Hello,

    I am trying to run a mediation model with Stata with observed variables. I have panel data based on firm and year.
    These are the variables I am trying to run the mediation analysis with: X: InvestorPressureScore; M: EnvironmentalPillarScore; Y: ROA1
    First, I run the sem command and get results. To be able to interpret them, I tried running
    estat teffects
    This is where the issues start. Stata says (no path) or (constrained) and does not give me z-value, p-value or a confidence interval.

    It would be great if someone could help me figure out the error!

    Thank you,
    Robin
    . sem (EnvironmentalPillarScore EnvironmentalPillarScore InvestorP
    > ressureScore), nocapslatent
    (1371 observations with missing values excluded)
    Endogenous variables
    Observed: EnvironmentalPillarScore ROA1
    Exogenous variables
    Observed: InvestorPressureScore
    Fitting target model:
    Iteration 0: log likelihood = -94727.46
    Iteration 1: log likelihood = -94727.46
    Structural equation model Number of obs = 3,795
    Estimation method: ml
    Log likelihood = -94727.46
    OIM
    Coefficient std. err. z P>z [95% conf. interval]
    Structural
    EnvironmentalPillarScore
    InvestorPressureScore 7.61e-09 8.18e-10 9.30 0.000 6.01e-09 9.21e-09
    _cons 48.99126 .4525535 108.26 0.000 48.10427 49.87824
    ROA1
    EnvironmentalPillarScore -.0000661 .0000438 -1.51 0.131 .0001519 .0000197
    InvestorPressureScore 8.61e-13 2.23e-12 0.39 0.699 3.51e-12 5.23e-12
    _cons .0717931 .0024672 29.10 0.000 .0669574 .0766287
    var(e.EnvironmentalPillarScore) 695.4355 15.96489 664.8384 727.4407
    var(e.ROA1) .005056 .0001161 .0048336 .0052887
    Note: The LR test of model vs. saturated is not reported because the fitted
    model is not full rank.
    .
    end of do-file
    . estat teffects
    Direct effects
    OIM
    Coefficient std. err. z P>z [95% conf. interval]
    Structural
    EnvironmentalPillarScore
    InvestorPressureScore 7.61e-09 8.18e-10 9.30 0.000 6.01e-09 9.21e-09
    ROA1
    EnvironmentalPillarScore -.0000661 .0000438 1.51 0.131 -.0001519 .0000197
    InvestorPressureScore 8.61e-13 2.23e-12 0.39 0.699 -3.51e-12 5.23e-12
    Indirect effects
    OIM
    Coefficient std. err. z P>z [95% conf. interval]
    Structural
    EnvironmentalPillarScore
    InvestorPressureScore 0 (no path)
    ROA1
    EnvironmentalPillarScore 0 (no path)
    InvestorPressureScore -5.03e-13 (constrained)
    Total effects
    OIM
    Coefficient std. err. z P>z [95% conf. interval]
    Structural
    EnvironmentalPillarScore
    InvestorPressureScore 7.61e-09 (constrained)
    ROA1
    EnvironmentalPillarScore -.0000661 .0000438 1.51 0.131 -.0001519 .0000197
    InvestorPressureScore 3.58e-13 (constrained)

  • #2
    Your post is difficult to read. To get the -sem- output more readably displayed, post it between code delimiters. (Use the # button on top of the edit wiindow to create a pair of code delimiters.)

    More important, we cannot see the actual exact command you gave, and without that it is impossible to fully understand the output. Please post that (also between code delimiters) for further advice.
    Last edited by Clyde Schechter; 20 Apr 2022, 10:42.

    Comment


    • #3
      Hey Clyde,

      sorry about that and thanks for the tips - I hope it becomes more clear now.

      As I mentioned, I would like to run a mediation model with the following variables:
      Independent: InvestorPressureScore
      Mediator: EnvironmentalPillarScore
      Dependent: ROA1

      First, I use
      Code:
      sem (EnvironmentalPillarScore <- InvestorPressureScore) (ROA1 <- EnvironmentalPillarScore InvestorPressureScore), nocapslatent
      and it works fine.
      Click image for larger version

Name:	sem command.png
Views:	1
Size:	179.5 KB
ID:	1660806


      Then, I would like to test whether the effects are significant and use
      Code:
      estat teffects
      This is where the problem starts setting in. Instead of the p-value, Stata tells me 'no path' and 'constrained' for the indirect effects and total effects.
      Click image for larger version

Name:	estat teffects.png
Views:	1
Size:	109.8 KB
ID:	1660807


      Do you know what could possibly be causing this?

      Thank you,
      Robin


      Comment


      • #4
        OK. This is much better.

        As far as the (no path) results, these are correct. There is no indirect path from EnvironmentalPillarScore to ROA1, nor from from InvestorPressureScore to EnvironmentalPillarScore. Only direct paths between those variables are specified in your model.

        I do not really know why the indirect and total paths from InvestorPressureScore to ROA1 are said to be constrained. But I have a hunch. The direct paths emanating from InvestorPressureScore to EnvironmentalPillarScore and ROA1 have very small coefficients and extremely small standard errors. My guess is that when the indirect effects are calculated, the resulting standard error is so small that it falls below some threshold which Stata considers to be 0. All of Stata's estimation commands encounter numerical difficulties when there are extremes of scaling in the same model, and I suspect this is what is happening here.

        If my guess is correct, you can fix this by rescaling. I have no idea what the InvestorPressureScore is, nor what units it is measured in. But I think if you rescale it downward, say by a factor of 106 or 109, you will get the inferential statistics you are currently missing. If the score is measured, say, in dollars, then this is equivalent to simply denominating it in units of millions of dollars instead. If that doesn't work I don't know what else might be going on. But it certainly can't hurt to try.

        Comment


        • #5
          Dear Clyde,

          thank you for clarifying and offering your insights.

          Perhaps to facilitate the understanding, the Investor Pressure Score measures the number of sustainability keywords on institutional investor sites multiplied by the number of shares the investors own. To get the data on a firm level, all institutional investor scores are cumulated per firm. The mean score is 186,035,746.

          As you suggested, I tried rescaling, however, it did not work as expected. I considered another possibility. This would be to transform the above mentioned variables to ln:
          Code:
          gen ln_InvestorPressureScore = ln(InvestorPressureScore)
          gen ln_EnvironmentalPillarScore = ln(EnvironmentalPillarScore)
          gen ln_ROA1 = ln(ROA1)
          Ln worked and the data was no longer constrained in the Total Effects model. However, a friend made me aware that I cannot take the ln of 0. In my 5,166 total observations, I have 38 occurrences of 0. As I explained the measure of the Investor Pressure Score, these are important to get proper results. My friend suggested calculating the score +1 everywhere and then taking the ln. However, after reading multiple reviews online, I am now unsure whether this is a reasonable thing to do.

          It would be great if you could give me your take on this matter and whether you think this could be used as an equivalent to rescaling, as you suggested.

          Kind regards,
          Robin

          Comment


          • #6
            The +1 kludge with logarithms of variables that can be zero is one I dislike intensely. Some others do find it acceptable. My objection is that the 1 is arbitrary. To avoid zeroes one could also look at log(x+1000) or log(x+0.0000001). And the problem is that the results you would get with these different choices of the offset can be dramatically different.

            You might consider other transformations that compress the range of the data, such as the square root or cube root. But before doing any of that, have you graphed the data to see what kind of relationships we are really dealing with? In particular, what can you see about the behavior of the ROA1:Investor Pressure Score relationship when the latter is 0 or close to 0. It may be that the zero-observations are really qualitatively different from the non-zero ones and don't belong in the same model. Or it may be that there is flat relationship among low values, including 0, which then "takes off" beyond some threshold.

            Another thought would be to revise the definition of Investor Pressure Score, if it is not a measure that is already established and widely used. I suspect that much of the variation in this score comes from the number of shares owned. And I would bet that all of the zeroes come from zero keywords, not from zero shares owned. So maybe a better definition of this score would be to multiply the number of keywords by the logarithm of the number of shares.

            Comment

            Working...
            X