R Under development (unstable) (2023-11-25 r85635 ucrt) -- "Unsuffered Consequences" Copyright (C) 2023 The R Foundation for Statistical Computing Platform: x86_64-w64-mingw32/x64 R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > # DEMO FOR SEMTREE > > > require("semtree") Loading required package: semtree Loading required package: OpenMx > require("lavaan") Loading required package: lavaan This is lavaan 0.6-16 lavaan is FREE software! Please report any bugs. > > # ORGANIZE DATA BY TYPE FOR COVARIATES. > # SOME COVARIATES ARE ORGANIZED IN THE DATA. MODEL VARIABLES AND > # COVARIATES DO NOT NEED TO BE ORDERED IN THE DATASET. ONLY VARIABLE > # TYPE NEEDS TO BE DEFINED FOR THE COVARIATES (FACTOR/ORDERED/NUMERIC) > # BE AWARE OF THE EXPONENTIAL GROWTH OF MODEL COMPARISON WITH INCREASES > # IN NUMBER OF FACTORS PER A COVARIATE. > > data(lgcm) > > lgcm$agegroup <- as.ordered(lgcm$agegroup) > lgcm$training <- as.factor(lgcm$training) > lgcm$noise <- as.numeric(lgcm$noise) > > # LOAD IN LAVAAN MODEL. > # A SIMPLE LINEAR GROWTH MODEL WITH 5 TIME POINTS FROM SIMULATED DATA > > lgcModelstr <- ' + g0 =~ 1*o1 + 1*o2 + 1*o3 + 1*o4 + 1*o5; + g1 =~ 0*o1 + 1*o2 + 2*o3 + 3*o4 + 4*o5; + g0 ~~ g0; g0 ~ mui*1; + g1 ~~ g1; g1 ~ sli*1; + g0 ~~ g1; + o1 ~~ o1; o1 ~ 0*1; + o2 ~~ o2; o2 ~ 0*1; + o3 ~~ o3; o3 ~ 0*1; + o4 ~~ o4; o4 ~ 0*1; + o5 ~~ o5; o5 ~ 0*1; + ' > lgcModel <- lavaan(lgcModelstr, lgcm, do.fit=TRUE) > > # TREE CONTROL OPTIONS. > # TO OBTAIN BASIC/DEFAULT SMETREE OPTIONS, SIMPLY TPYE THE FOLLOWING: > > controlOptions <- semtree.control() > > # THE CONTENTS OF THE DEFAULT CONTROLS CAN THEN BE VIEWED. > > controlOptions SEM-Tree control: ▔▔▔▔▔▔▔▔▔▔ ● Splitting Method: naive ● Alpha Level: 0.05 ● Bonferroni Correction:FALSE ● Minimum Number of Cases: 20 ● Maximum Tree Depth: NA ● Number of CV Folds: 5 ● Exclude Heywood Cases: TRUE ● Test Invariance Alpha Level: NA ● Use all Cases: FALSE ● Verbosity: FALSE ● Progress Bar: TRUE ● Seed: NA > > # AND MODEL OPTIONS CAN BE CHANGED BY REDEFINING ELEMENTS OF THE > # CONTROL OBJECT. > > controlOptions$alpha <- 0.01 > > # RUN TREE. > > tree <- semtree(model=lgcModel, data=lgcm, control = controlOptions) ✖ Variable noise is numeric but has only few unique values. Consider recoding as ordered factor. ✔ Tree construction finished [took 2s]. > > # SEE PLOT. > # THE PLOT FUNCTION WILL SHOW ALL FREE PARAMETERS AT EACH TERMINAL NODE. > # THIS CAN CREATE UNREADABLE FIGURES FOR MODELS WITH MANY FREE PARAMETERS. > > plot(tree) > > # SEE SUMMARY. > # OVERALL MODEL FACTS ARE GIVEN WITH THE SUMMARY FUNCTION. > > summary(tree) SEMtree Summary Template model: Total Sample Size: 400 Number of nodes: 5 Number of leaf nodes: 3 Free Parameters: 10 ( g0~~g0 mui g1~~g1 sli g0~~g1 o1~~o1 o2~~o2 o3~~o3 o4~~o4 o5~~o5 ) > > # summary(treeConstrained) > > # USING THE PRINT FUNCTION WILL PROVIDE AN OVERVIEW OF THE MODEL > # SPLITS, LR TESTS WITH DF, AND SUBGROUP SIZES (N). > > print(tree) SEMtree with numbered nodes |-[1] agegroup > 0 [N=400 LR=1258.08, df=10] | |-[2] TERMINAL [N=200] | |-[3] training in [ 0 ] [N=200 LR=40.85, df=10] | | |-[4] TERMINAL [N=100] | | |-[5] TERMINAL [N=100] > > # GET NODE PARAMETERS (leafs only as default). > # THE DEFAULT IS ONLY DISPLAYING LEAF NODE PARAMETER ESTIMATES. > > parameters(tree) 2 4 5 g0~~g0 0.082 0.104 0.085 mui 5.017 1.941 2.005 g1~~g1 0.499 0.674 1.629 sli -0.142 -0.494 -1.084 g0~~g1 -0.011 0.028 -0.044 o1~~o1 0.068 0.048 0.042 o2~~o2 0.049 0.069 0.049 o3~~o3 0.043 0.053 0.053 o4~~o4 0.055 0.039 0.063 o5~~o5 0.037 0.048 0.011 > > # TO GET ALL PARAMETER ESTIMATES FOR EVERY NODE CHANGE THE DEFAULT TO. > > parameters(tree, leafs.only=FALSE) 1 2 3 4 5 g0~~g0 2.410 0.082 0.095 0.104 0.085 mui 3.496 5.017 1.973 1.941 2.005 g1~~g1 0.973 0.499 1.239 0.674 1.629 sli -0.466 -0.142 -0.789 -0.494 -1.084 g0~~g1 0.477 -0.011 -0.017 0.028 -0.044 o1~~o1 0.052 0.068 0.045 0.048 0.042 o2~~o2 0.058 0.049 0.059 0.069 0.049 o3~~o3 0.047 0.043 0.053 0.053 0.053 o4~~o4 0.052 0.055 0.051 0.039 0.063 o5~~o5 0.036 0.037 0.030 0.048 0.011 > > # SUBTREE FUNCTION. > # IF ONLY A SUBSET OF THE TREE IS TO BE EXAMINED, THEN THE TREE CAN > # BE PARED. THIS IS DONE WITH A SUBSET FUNCTION WHICH STORES THE TREE > # FROM A GIVEN NODE ON. IF THE TREE FROM NODE 2 ON IS DESIRED, THEN: > > treeSub <- subtree(tree, startNode=3) > > > # ALTERNATIVE SPLIT RULE > > controlOptions$method <- "fair" > tree2 <- semtree(model=lgcModel, data=lgcm, control = controlOptions) ✖ Variable noise is numeric but has only few unique values. Consider recoding as ordered factor. ✔ Tree construction finished [took 3s]. > > # disabled for time restrictions on CRAN > #controlOptions$method <- "cv" > #tree3 <- semtree(model=lgcModel, data=lgcm, control = controlOptions) > > proc.time() user system elapsed 6.79 0.32 7.11