checkIdent: Identifiability of a model with one latent variable

checkIdentR Documentation

Identifiability of a model with one latent variable

Description

Checks four sufficient conditions for identifiability of a Gaussian DAG model with one latent variable.

Usage

checkIdent(amat, latent)

Arguments

amat

a square matrix with dimnames, representing the adjacency matrix of a DAG.

latent

an integer representing the latent variables among the nodes, or the name of the node.

Details

Stanghellini and Wermuth (2005) give some sufficient conditions for checking if a Gaussian model that factorizes according to a DAG is identified when there is one hidden node over which we marginalize. Specifically, the function checks the conditions of Theorem 1, (i) and (ii) and of Theorem 2 (i) and (ii).

Value

a vector of length four, indicating if the model is identified according to the conditions of theorems 1 and 2 in Stanghellini & Wermuth (2005). The answer is TRUE if the condition holds and thus the model is globally identified or FALSE if the condition fails, and thus we do not know if the model is identifiable.

Author(s)

Giovanni M. Marchetti

References

Stanghellini, E. & Wermuth, N. (2005). On the identification of path-analysis models with one hidden variable. Biometrika, 92(2), 337-350.

See Also

isGident, InducedGraphs

Examples

## See DAG in Figure 4 (a) in Stanghellini & Wermuth (2005)
d <- DAG(y1 ~ y3, y2 ~ y3 + y5, y3 ~ y4 + y5, y4 ~ y6)
checkIdent(d, "y3")  # Identifiable
checkIdent(d, "y4")  # Not identifiable?

## See DAG in Figure 5 (a) in Stanghellini & Wermuth (2005)
d <- DAG(y1 ~ y5+y4, y2 ~ y5+y4, y3 ~ y5+y4)
checkIdent(d, "y4")  # Identifiable
checkIdent(d, "y5")  # Identifiable

## A simple function to check identifiability for each node

is.ident <- function(amat){
### Check suff. conditions on each node of a DAG.
   p <- nrow(amat)
   ## Degrees of freedom
     df <- p*(p+1)/2 - p  - sum(amat==1) - p + 1
   if(df <= 0)
       warning(paste("The degrees of freedom are ", df))
    a <- rownames(amat)
    for(i in a) {
      b <- checkIdent(amat, latent=i)
      if(TRUE %in% b)
        cat("Node", i, names(b)[!is.na(b)], "\n")
      else
        cat("Unknown.\n")
    }
  }

ggm documentation built on May 29, 2024, 7:27 a.m.

Related to checkIdent in ggm...