jtextor / dagitty

Graphical analysis of structural causal models / graphical causal models.
GNU General Public License v2.0
255 stars 47 forks source link

Frontdoor #73

Closed benibela closed 1 year ago

benibela commented 1 year ago

Algorithms from "Linear-Time Algorithms for Front-Door Adjustment in Causal Graphs"

jtextor commented 1 year ago

I merged this and made it available on dagitty.net/experimental/ for now.

I do still find the output a bit confusing. Can you explain the behavior in the DAG below? Why does it say "biasing paths are open" and "no adjustment set found" here? Wouldn't it be more logical to say something like "no front-door adjustment necessary" because the causal effect is simply identified?

image
benibela commented 1 year ago

Why does it say "biasing paths are open"

Because I did not change the red text, only the logic.

It tests, form the adjusted nodes a front-door adjustment set, and then shows the text for the old adjustment sets:


    if( GraphAnalyzer[f]( g ) ){
        if( adjusted.length == 0 ){
            tgt_el.appendChild( msgOKP( "No open biasing paths." ) )
        } else {
            tgt_el.appendChild( msgOKP( "Correctly adjusted." ) )
        }
    } else {
        if( adjusted.length == 0 ){
            tgt_el.appendChild( msgWarnP( "Biasing paths are open." ) )
        } else {
            tgt_el.appendChild( msgWarnP( "Incorrectly adjusted." ) )
        }
    }

and then it ends up with the biasing paths, because the empty set is not a front-door adjustment set.

and "no adjustment set found" here?

Because there is no front door adjustment.

A front door set would need to block all causal paths