Skip to content

Commit

Permalink
Merge pull request #283 from easystats/robust_predictor_guessing
Browse files Browse the repository at this point in the history
More robust in guessing predictors
  • Loading branch information
strengejacke authored Dec 25, 2024
2 parents cb7d2eb + 1a58e6e commit c734805
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 10 deletions.
2 changes: 1 addition & 1 deletion DESCRIPTION
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
Type: Package
Package: modelbased
Title: Estimation of Model-Based Predictions, Contrasts and Means
Version: 0.8.9.2
Version: 0.8.9.3
Authors@R:
c(person(given = "Dominique",
family = "Makowski",
Expand Down
5 changes: 4 additions & 1 deletion R/get_emcontrasts.R
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,11 @@ model_emcontrasts <- get_emcontrasts
by = NULL,
...) {
# Gather info
predictors <- insight::find_predictors(model, effects = "fixed", flatten = TRUE, ...)
model_data <- insight::get_data(model, verbose = FALSE)
predictors <- intersect(
colnames(model_data),
insight::find_predictors(model, effects = "fixed", flatten = TRUE, ...)
)

# Guess arguments
if (is.null(contrast)) {
Expand Down
21 changes: 15 additions & 6 deletions R/get_emmeans.R
Original file line number Diff line number Diff line change
Expand Up @@ -130,20 +130,23 @@ model_emmeans <- get_emmeans
by = NULL,
...) {
# Gather info
predictors <- insight::find_predictors(model, effects = "fixed", flatten = TRUE, ...)
my_data <- insight::get_data(model, verbose = FALSE)
model_data <- insight::get_data(model, verbose = FALSE)
predictors <- intersect(
colnames(model_data),
insight::find_predictors(model, effects = "fixed", flatten = TRUE, ...)
)

# Guess arguments
if (!is.null(by) && length(by) == 1 && by == "auto") {
by <- predictors[!sapply(my_data[predictors], is.numeric)]
by <- predictors[!sapply(model_data[predictors], is.numeric)]
if (!length(by) || all(is.na(by))) {
stop("Model contains no categorical factor. Please specify 'by'.", call. = FALSE)
}
insight::format_alert(paste0("We selected `by = c(", toString(paste0('"', by, '"')), ")`."))
}

my_args <- list(by = by)
.format_emmeans_arguments(model, args = my_args, data = my_data, ...)
.format_emmeans_arguments(model, args = my_args, data = model_data, ...)
}


Expand All @@ -152,7 +155,13 @@ model_emmeans <- get_emmeans
# Create the data_matrix
# ---------------------------
# data <- insight::get_data(model)
data <- data[insight::find_predictors(model, effects = "fixed", flatten = TRUE, ...)]
predictors <- insight::find_predictors(
model,
effects = "fixed",
flatten = TRUE,
...
)
data <- data[intersect(predictors, colnames(data))]

# Deal with 'at'
if (is.null(args$by)) {
Expand All @@ -168,7 +177,7 @@ model_emmeans <- get_emmeans
args$by <- names(args$data_matrix)
} else {
if (!is.null(args$by) && all(args$by == "all")) {
target <- insight::find_predictors(model, effects = "fixed", flatten = TRUE)
target <- intersect(predictors, colnames(data))
} else {
target <- args$by
}
Expand Down
5 changes: 4 additions & 1 deletion R/get_emtrends.R
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,11 @@ model_emtrends <- get_emtrends
by = NULL,
...) {
# Gather info
predictors <- insight::find_predictors(model, effects = "fixed", flatten = TRUE, ...)
model_data <- insight::get_data(model, verbose = FALSE)
predictors <- intersect(
colnames(model_data),
insight::find_predictors(model, effects = "fixed", flatten = TRUE, ...)
)

# Guess arguments
if (is.null(trend)) {
Expand Down
5 changes: 4 additions & 1 deletion R/get_marginalmeans.R
Original file line number Diff line number Diff line change
Expand Up @@ -189,8 +189,11 @@ model_marginalmeans <- get_marginalmeans
#' @keywords internal
.guess_arguments_means <- function(model, by = NULL, ...) {
# Gather info and data from model
predictors <- insight::find_predictors(model, flatten = TRUE, ...)
model_data <- insight::get_data(model)
predictors <- intersect(
colnames(model_data),
insight::find_predictors(model, effects = "fixed", flatten = TRUE, ...)
)

# Guess arguments 'by'
if (identical(by, "auto")) {
Expand Down

0 comments on commit c734805

Please sign in to comment.