jtextor / dagitty

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

Error in dag #70

Closed juandavidgutier closed 1 year ago

juandavidgutier commented 1 year ago

I am drawing a DAG with dagitty, but I get the next error message: "Error in context_eval(join(src), private$context, serialize, await) : TypeError: Cannot read property '1' of null".

I do not understand what it means and how to solve it.

Here is the dataset: dataset_question.csv

And this is my code: ` library(ggdag) library(dagitty) library(lavaan) library(CondIndTests) library(dplyr) library(GGally) library(tidyr) library(MKdescr)

load data

dataset <- read.csv("D:/dataset_question.csv")

sd units

dataset$soi <- zscore(dataset$soi, na.rm = TRUE) dataset$Esoi <- zscore(dataset$Esoi, na.rm = TRUE) dataset$soi <- zscore(dataset$soi, na.rm = TRUE) dataset$SST3 <- zscore(dataset$SST3, na.rm = TRUE) dataset$SST4 <- zscore(dataset$SST4, na.rm = TRUE) dataset$SST34 <- zscore(dataset$SST34, na.rm = TRUE) dataset$SST12 <- zscore(dataset$SST12, na.rm = TRUE) dataset$NATL <- zscore(dataset$NATL, na.rm = TRUE) dataset$SATL <- zscore(dataset$SATL, na.rm = TRUE) dataset$TROP <- zscore(dataset$TROP, na.rm = TRUE) dataset$forest <- zscore(dataset$forest, na.rm = TRUE) dataset$Temp <- zscore(dataset$Temp, na.rm = TRUE) dataset$Rain <- zscore(dataset$Rain, na.rm = TRUE) dataset$Qs <- zscore(dataset$Qs, na.rm = TRUE) dataset$STMP <- zscore(dataset$STMP, na.rm = TRUE) dataset$Smoi <- zscore(dataset$Smoi, na.rm = TRUE) dataset$EVI <- zscore(dataset$EVI, na.rm = TRUE)

HERE IS THE ERROR

dag <- dagitty('dag { excess [pos="0, 0.5"] Treat [pos="-1, 0.5"]

soi [pos="-1.6, 1.1"] Esoi [pos="-1.7, 1.2"] SST3 [pos="-1.8, 1.3"] SST4 [pos="-1.9, 1.4"] SST34 [pos="-2, 1.5"] SST12 [pos="-2.1, 1.6"] NATL [pos="-2.2, 1.7"] SATL [pos="-2.3, 1.8"] TROP [pos="-2.4, 1.9"]

Temp [pos="-0.20, -0.40"] Rain [pos="-0.22, -0.42"] Qs [pos="-0.24, -0.44"] STMP [pos="-0.26 -0.46"] Smoi [pos="-0.28, -0.48"] EVI [pos="-0.30, -0.50"]

forest [pos="-0.5, -0.70"]

NBI [pos="-0.7, -0.90"]

SST12 -> SST3 SST12 -> SST34 SST12 -> SST4 SST12 -> soi SST12 -> Esoi SST12 -> NATL SST12 -> SATL SST12 -> TROP

SST3 -> SST34 SST3 -> SST4 SST3 -> soi SST3 -> Esoi SST3 -> NATL SST3 -> SATL SST3 -> TROP

SST34 -> SST4 SST34 -> soi SST34 -> Esoi SST34 -> NATL SST34 -> SATL SST34 -> TROP

SST4 -> soi SST4 -> Esoi SST4 -> NATL SST4 -> SATL SST4 -> TROP

soi -> Esoi soi -> NATL soi -> SATL soi -> TROP

Esoi -> NATL Esoi -> SATL Esoi -> TROP

NATL -> SATL NATL -> TROP

SATL -> TROP

SST12 -> Treat SST3 -> Treat SST34 -> Treat SST4 -> Treat soi -> Treat Esoi -> Treat NATL -> Treat SATL -> Treat TROP -> Treat

SST12 -> excess SST3 -> excess SST34 -> excess SST4 -> excess soi -> excess Esoi -> excess NATL -> excess SATL -> excess TROP -> excess

forest -> excess forest -> Temp forest -> Rain forest -> Qs forest -> STMP forest -> Smoi forest -> EVI forest -> NBI

Temp -> excess Rain -> excess Qs -> excess STMP -> excess Smoi -> excess EVI -> excess

Temp -> NBI Rain -> NBI Qs -> NBI STMP -> NBI Smoi -> NBI EVI -> NBI

NBI -> excess

SST12 -> Temp SST3 -> Temp SST34 -> Temp SST4 -> Temp soi -> Temp Esoi -> Temp NATL -> Temp SATL -> Temp TROP -> Temp

SST12 -> Rain SST3 -> Rain SST34 -> Rain SST4 -> Rain soi -> Rain Esoi -> Rain NATL -> Rain SATL -> Rain TROP -> Rain

SST12 -> Qs SST3 -> Qs SST34 -> Qs SST4 -> Qs soi -> Qs Esoi -> Qs NATL -> Qs SATL -> Qs TROP -> Qs

SST12 -> STMP SST3 -> STMP SST34 -> STMP SST4 -> STMP soi -> STMP Esoi -> STMP NATL -> STMP SATL -> STMP TROP -> STMP

SST12 -> Smoi SST3 -> Smoi SST34 -> Smoi SST4 -> Smoi soi -> Smoi Esoi -> Smoi NATL -> Smoi SATL -> Smoi TROP -> Smoi

SST12 -> EVI SST3 -> EVI SST34 -> EVI SST4 -> EVI soi -> EVI Esoi -> EVI NATL -> EVI SATL -> EVI TROP -> EVI

Treat -> excess

}')

plot(dag)

check whether any correlations are perfect (i.e., collinearity)

myCov <- cov(dataset) round(myCov, 2)

myCor <- cov2cor(myCov) noDiag <- myCor diag(noDiag) <- 0 any(noDiag == 1)

if not, check for multicollinearity (i.e., is one variable a linear combination of 2+ variables?)

det(myCov) < 0

or

any(eigen(myCov)$values < 0)

cond. independences

impliedConditionalIndependencies(dag) corr <- lavCor(dataset)

summary(corr)

plot

localTests(dag, sample.cov=corr, sample.nobs=nrow(dataset)) plotLocalTestResults(localTests(dag, sample.cov=corr, sample.nobs=nrow(dataset)), xlim=c(-1,1))

`

juandavidgutier commented 1 year ago

The problem is solved, by changing the coordinates e.g:

coordinates(dag) <- list(x=c(excess=0.0, Treat=-1, soi=-1.6, Esoi=-1.7, SST3=-1.8, SST4=-1.9, SST34=-2, SST12=-2.1, NATL=-2.2, SATL=-2.3, TROP=-2.4, Temp=-0.2, Rain=-0.24, Qs=-0.28, STMP=-0.32, Smoi=-0.36, EVI=-0.4, forest=-1.7, NBI=-1.5), y=c(excess=0.5, Treat=0.5, soi=1.1, Esoi=1.2, SST3=1.3, SST4=1.4, SST34=1.5, SST12=1.6, NATL=1.7, SATL=1.8, TROP=1.9, Temp=-0.4, Rain=-0.44, Qs=-0.48, STMP=-0.52, Smoi=-0.56, EVI=-0.6, forest=-0.7, NBI=-0.9))