File: defExo.R

package info (click to toggle)
r-cran-semplot 1.1.7-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 464 kB
  • sloc: makefile: 2
file content (50 lines) | stat: -rw-r--r-- 1,879 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
defExo <- function(object,layout="tree")
{
  manNames <- object@Vars$name[object@Vars$manifest]
  latNames <- object@Vars$name[!object@Vars$manifest]

  # Define exogenous variables (only if any is NA):
  if (any(is.na(object@Vars$exogenous)))
  {
    if (any(!is.na(object@Vars$exogenous)))
    {
      exoOrig <- object@Vars$exogenous
      repExo <- TRUE
    } else repExo <- FALSE
    object@Vars$exogenous <- FALSE
    for (i in which(!object@Vars$manifest))
    {
      if (!any(object@Pars$edge[object@Pars$rhs==object@Vars$name[i]] %in% c("~>","->") & object@Pars$lhs[object@Pars$rhs==object@Vars$name[i]]%in%latNames))
      {
        object@Vars$exogenous[i] <- TRUE
      }
    }
    for (i in which(object@Vars$manifest))
    {
      if (all(object@Pars$lhs[object@Pars$rhs==object@Vars$name[i] & object@Pars$lhs%in%latNames]%in%object@Vars$name[object@Vars$exogenous]) &
            all(object@Pars$rhs[object@Pars$lhs==object@Vars$name[i] & object@Pars$rhs%in%latNames]%in%object@Vars$name[object@Vars$exogenous]) &
            !any(object@Pars$rhs==object@Vars$name[i] & object@Pars$edge=="~>"))
      {
        object@Vars$exogenous[i] <- TRUE
      }
    }
    
    # If all exo, treat all as endo:
    if (all(object@Vars$exogenous) | layout%in%c("circle","circle2","circle3"))
    {
      object@Vars$exogenous <- FALSE
    }
    # If al endo, treat formative manifest as exo (MIMIC mode), unless all manifest are formative.
    if (!any(object@Vars$exogenous))
    {
      if (any(object@Vars$manifest & (object@Vars$name%in%object@Pars$rhs[object@Pars$edge %in% c("~>","--","->")])))
        object@Vars$exogenous[object@Vars$manifest & !(object@Vars$name%in%object@Pars$rhs[object@Pars$edge %in% c("~>","--","->")])] <- TRUE
    }
    if (repExo)
    {
      object@Vars$exogenous[!is.na(exoOrig)] <- exoOrig[!is.na(exoOrig)]
    }
  }
  
  return(object)
}