## ----------------------------------------------------------------------------- #| label: setup library(causalDisco) ## ----------------------------------------------------------------------------- #| label: dag cg <- caugi::caugi( Z %-->% X1, X3 %-->% X2, X1 %-->% Y, X2 %-->% Y ) ## ----------------------------------------------------------------------------- #| label: plot dag layout <- caugi::caugi_layout_sugiyama(cg) plot(cg, layout = layout, main = "True DAG") ## ----------------------------------------------------------------------------- #| label: simple causal discovery data_linear <- generate_dag_data( cg, n = 10000, seed = 1405, coef_range = c(0.1, 0.9), error_sd = c(0.3, 2) ) head(data_linear) ## ----------------------------------------------------------------------------- #| label: generating model attr(data_linear, "generating_model") ## ----------------------------------------------------------------------------- #| label: pc algorithm simple pc_pcalg <- pc(engine = "pcalg", test = "fisher_z", alpha = 0.05) pc_result_pcalg <- disco(data = data_linear, method = pc_pcalg) ## ----------------------------------------------------------------------------- #| label: plot pc results simple plot(pc_result_pcalg, layout = layout, main = "PC (pcalg)") ## ----------------------------------------------------------------------------- #| label: pc algorithm reversed cg_reverse <- caugi::caugi( Z %-->% X1, X2 %-->% X3, X1 %-->% Y, X2 %-->% Y ) data_linear_reverse <- generate_dag_data( cg_reverse, n = 10000, seed = 1405, coef_range = c(0.1, 0.9), error_sd = c(0.3, 2) ) pc_result_reverse <- disco(data = data_linear_reverse, method = pc_pcalg) plot(pc_result_reverse, layout = layout, main = "PC (pcalg) reversed") ## ----------------------------------------------------------------------------- #| label: dag unobserved confounder cg_unobserved <- caugi::caugi( Z %-->% X1, X3 %-->% X2, X1 %-->% Y, X2 %-->% Y, U %-->% X1 + X2 ) ## ----------------------------------------------------------------------------- #| label: plot dag unobserved confounder plot( cg_unobserved, edge_style = list( by_edge = list( U = list(col = "red", fill = "red", lty = "dashed") ) ), node_style = list( by_node = list( U = list(col = "red", fill = "red") ) ), main = "True DAG" ) ## ----------------------------------------------------------------------------- #| label: data unobserved confounder data_unobserved <- generate_dag_data( cg_unobserved, n = 10000, seed = 1405, coef_range = c(0.1, 0.9), error_sd = c(0.3, 2) ) data_unobserved <- data_unobserved[, names(data_unobserved) != "U"] head(data_unobserved) ## ----------------------------------------------------------------------------- #| label: pc algorithm unobserved confounder pc_pcalg_unobserved <- pc(engine = "pcalg", test = "fisher_z", alpha = 0.05) pc_result_unobserved <- disco( data = data_unobserved, method = pc_pcalg_unobserved ) plot(pc_result_unobserved, layout = layout, main = "PC (pcalg)")