// --------------------------------------------------------------------------------------------------------------------// <copyright file="BackdoorAdjustmentExample.cs" company="Bayes Server">//   Copyright (C) Bayes Server.  All rights reserved.// </copyright>// --------------------------------------------------------------------------------------------------------------------using BayesServer.Causal;using BayesServer.Causal.Identification;using BayesServer.Causal.Inference;using BayesServer.Inference;using System;using System.Collections;using System.Collections.Generic;using System.Diagnostics;using System.Linq;using System.Text;using System.Threading.Tasks;namespace BayesServer.HelpSamples{    public static class BackdoorAdjustmentExample    {        public static void Main()        {            // This example uses Causal AI (Causal Inference)            // to calculate P(Y | Do(X)) in the presence of            // unobserved confounders, using the             // Backdoor Adjustment algorithm.            var network = new Network();            // TODO download the network from the Bayes Server User Interface (or Bayes Server Online)            // and adjust the following path            network.Load(@"Backdoor Collider.bayes");            var x = network.Variables["X", true];            var y = network.Variables["Y", true];            var z = network.Variables["Z", true];            var a = network.Variables["A", true];            var inf = new BackdoorInference(network);            var qopt = new BackdoorQueryOptions();            var qout = new BackdoorQueryOutput();            var query = new Table(y);            inf.QueryDistributions.Add(query);            // Set one or more interventions            inf.Evidence.SetState(x.States[0], null, InterventionType.Do);            // you could also set non-intervention evidence here            // Method 1            {                // let the algorithm determine an appropriate adjustment set                Debug.Assert(qopt.AdjustmentSetOverride == null);                inf.Query(qopt, qout);                Console.WriteLine("Method 1");                Console.WriteLine(query[y.States[0]]);            }            Console.WriteLine();            // Method 2            {                // supply your own adjustment set (e.g. using the BackdoorCriterion class)                qopt.AdjustmentSetOverride = new AdjustmentSet(                    new AdjustmentSetNode(z.Node),                    new AdjustmentSetNode(a.Node));                inf.Query(qopt, qout);                Console.WriteLine("Method 2");                Console.WriteLine(query[y.States[0]]);            }        }    }}