Skip to content

Commit ab477a2

Browse files
authored
Merge pull request #398 from lucdw/master
Allow autoregression if coeff. fixed to zero
2 parents 4e01549 + 80ad0c4 commit ab477a2

File tree

2 files changed

+16
-12
lines changed

2 files changed

+16
-12
lines changed

R/lav_syntax_parser.R

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -903,15 +903,6 @@ ldw_parse_model_string <- function(model.syntax = "", as.data.frame. = FALSE) {
903903
footer = tl[2L]
904904
)
905905
}
906-
# check for variable regressed on itself
907-
if (formul1$elem.text[opi] == "~" && formul1$elem.text[opi - 1L] == formul1$elem.text[nelem]) {
908-
tl <- ldw_txtloc(modelsrc, formul1$elem.pos[opi])
909-
lav_msg_stop(
910-
gettext("a variable cannot be regressed on itself"),
911-
tl[1L],
912-
footer = tl[2L]
913-
)
914-
}
915906
# checks for valid names in lhs and rhs
916907
ldw_parse_check_valid_name(formul1, opi - 1L, modelsrc) # valid name lhs
917908
for (j in seq.int(opi + 1L, nelem)) { # valid names rhs
@@ -1101,6 +1092,18 @@ ldw_parse_model_string <- function(model.syntax = "", as.data.frame. = FALSE) {
11011092
}
11021093
}
11031094
}
1095+
# check for variable regressed on itself
1096+
if (formul1$elem.text[opi] == "~" &&
1097+
formul1$elem.text[opi - 1L] == formul1$elem.text[nelem]) {
1098+
if (!grepl("^0\\.?0*$", flat.fixed[idx])) {
1099+
tl <- ldw_txtloc(modelsrc, formul1$elem.pos[opi])
1100+
lav_msg_stop(
1101+
gettext("a variable cannot be regressed on itself"),
1102+
tl[1L],
1103+
footer = tl[2L]
1104+
)
1105+
}
1106+
}
11041107
}
11051108
# create flat (omit items without operator)
11061109
filled.ones <- which(flat.op != "")

R/lav_syntax_parser_r.R

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -797,9 +797,6 @@ lav_parse_model_string_r <- function(model.syntax = "", as.data.frame. = FALSE)
797797
if (length(contsp) > 0L) {
798798
lav_local_msgcode(FALSE, 102L, formul1$elem.pos[contsp[1L]], msgenv)
799799
}
800-
# check for variable regressed on itself
801-
if (formul1$elem.text[opi] == "~" && formul1$elem.text[opi - 1L] == formul1$elem.text[nelem])
802-
return(c(34L, formul1$elem.pos[opi] - 1L))
803800
# checks for valid names in lhs and rhs
804801
lav_parse_check_valid_name(formul1, opi - 1L, modelsrc, msgenv) # valid name lhs
805802
if (exists("error", envir = msgenv)) return(msgenv$error);
@@ -969,6 +966,10 @@ lav_parse_model_string_r <- function(model.syntax = "", as.data.frame. = FALSE)
969966
}
970967
}
971968
}
969+
# check for variable regressed on itself
970+
if (formul1$elem.text[opi] == "~" &&
971+
formul1$elem.text[opi - 1L] == formul1$elem.text[nelem])
972+
if (!grepl("^0\\.?0*$", flat.fixed[idx])) return(c(34L, formul1$elem.pos[opi] - 1L))
972973
}
973974
# create flat (omit items without operator)
974975
filled.ones <- which(flat.op != "")

0 commit comments

Comments
 (0)