# Solved – Causal inference from a cross sectional study design

As far I know, causal inference can be made only from longitudinal study designs. Is there any way to make causal inference from a cross sectional study design? If yes, how can I do this? Please share if any literature is available.

Contents

You could also use pcalg package if you are interested in network analysis(graphical modeling) and creating directed causal networks. pcalg has several algorithms for observational(cross sectional) data. With assumption of no hidden variable, you could use "pc" algorithm in the package to estimate the equivalence class of a directed acyclic graph (DAG) from observational data. Depending on your variable having Gaussian distribution, discrete(ordinal) or binary you could use different conditional independence functions in the package. for example using the database that comes with the package(gmG) you could do the following for the above mentioned 3 types of variables (these are modified examples from package pdf):

``library(pcalg) ## Using Gaussian Data ################################################## ## Load predefined data data(gmG) n <- nrow (gmG8\$ x) V <- colnames(gmG8\$ x) # labels aka node names ## estimate CPDAG pc.fit <- pc(suffStat = list(C = cor(gmG8\$x), n = n), indepTest = gaussCItest, ## indep.test: partial correlations alpha=0.01, labels = V, verbose = TRUE) if (require(Rgraphviz)) { ## show estimated CPDAG ## par(mfrow=c(1,2)) plot(pc.fit, main = "Estimated CPDAG") ## CPDAG stands for completed partially directed acyclic graph(CPDAG) or  ## basically what pc algorithm computes for you.  } ################################################## ## Using discrete data ################################################## ## Load data data(gmD) V <- colnames(gmD\$x) ## define sufficient statistics suffStat <- list(dm = gmD\$x, nlev = c(3,2,3,4,2), adaptDF = FALSE) ## estimate CPDAG pc.D <- pc(suffStat, ## independence test: G^2 statistic indepTest = disCItest, alpha = 0.01, labels = V, verbose = TRUE) if (require(Rgraphviz)) { ## show estimated CPDAG ## par(mfrow = c(1,2)) plot(pc.D, main = "Estimated CPDAG") ## plot(gmD\$g, main = "True DAG") } ################################################## ## Using binary data ################################################## ## Load binary data data(gmB) V <- colnames(gmB\$x) ## estimate CPDAG pc.B <- pc(suffStat = list(dm = gmB\$x, adaptDF = FALSE), indepTest = binCItest, alpha = 0.01, labels = V, verbose = TRUE) pc.B if (require(Rgraphviz)) { ## show estimated CPDAG plot(pc.B, main = "Estimated CPDAG") ## plot(gmB\$g, main = "True DAG") } ########### ``

Rate this post

# Solved – Causal inference from a cross sectional study design

As far I know, causal inference can be made only from longitudinal study designs. Is there any way to make causal inference from a cross sectional study design? If yes, how can I do this? Please share if any literature is available.

``library(pcalg) ## Using Gaussian Data ################################################## ## Load predefined data data(gmG) n <- nrow (gmG8\$ x) V <- colnames(gmG8\$ x) # labels aka node names ## estimate CPDAG pc.fit <- pc(suffStat = list(C = cor(gmG8\$x), n = n), indepTest = gaussCItest, ## indep.test: partial correlations alpha=0.01, labels = V, verbose = TRUE) if (require(Rgraphviz)) { ## show estimated CPDAG ## par(mfrow=c(1,2)) plot(pc.fit, main = "Estimated CPDAG") ## CPDAG stands for completed partially directed acyclic graph(CPDAG) or  ## basically what pc algorithm computes for you.  } ################################################## ## Using discrete data ################################################## ## Load data data(gmD) V <- colnames(gmD\$x) ## define sufficient statistics suffStat <- list(dm = gmD\$x, nlev = c(3,2,3,4,2), adaptDF = FALSE) ## estimate CPDAG pc.D <- pc(suffStat, ## independence test: G^2 statistic indepTest = disCItest, alpha = 0.01, labels = V, verbose = TRUE) if (require(Rgraphviz)) { ## show estimated CPDAG ## par(mfrow = c(1,2)) plot(pc.D, main = "Estimated CPDAG") ## plot(gmD\$g, main = "True DAG") } ################################################## ## Using binary data ################################################## ## Load binary data data(gmB) V <- colnames(gmB\$x) ## estimate CPDAG pc.B <- pc(suffStat = list(dm = gmB\$x, adaptDF = FALSE), indepTest = binCItest, alpha = 0.01, labels = V, verbose = TRUE) pc.B if (require(Rgraphviz)) { ## show estimated CPDAG plot(pc.B, main = "Estimated CPDAG") ## plot(gmB\$g, main = "True DAG") } ########### ``