R: Identifiability of a model with one latent variable

checkIdent {ggm} | R 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")
        }
      }

[Package ggm version 2.3 Index]