Closed wilsoncai1992 closed 6 years ago
@jeremyrcoyle any idea on this?
I encountered this problem just yesterday as well and considered opening an issue with the condensier
package. It appears that the minimal reproducing example is from the condensier
README
so, perhaps, @osofr you could comment?
@nhejazi I would love to comment, but stuck on a weird sl3 bug #100 that doesn't allow me to test anything with sl3 on my system. This bug appears to be more sl3
related, since the minimal condensier-only examples are running just fine. I'll look into it once I have sl3 running again.
@osofr - thanks for offering to look into this when you can. Indeed, I can also confirm that the examples related only to condensier
appear to run fine for me as well; it's only the examples related to combining sl3
and condensier
that fail. That said, I also cannot reproduce #100 with a fully updated setup (R 3.4.3, etc.), which echoes the Travis and appveyor builds.
It appears that this wasn't even a bug after all. Just incorrect syntax for conditional density bin learners. Note that each learner in the above example is being provided task
. This is wrong, the task
is not part of the condensier
learner arguments. The above provided task was being used for an integer valued argument, which caused a downstream error in condensier::fit_density
. Unfortunately, no error message was returned from condensier::fit_density
by sl$train
, which made the debugging that much harder (I am looking at you @jeremyrcoyle 😉). The correct code example is provided below and will soon be replaced in condensier
example page.
options(sl3.verbose = FALSE)
library("condensier")
library("sl3")
library("simcausal")
D <- DAG.empty()
D <-
D + node("W1", distr = "rbern", prob = 0.5) +
node("W2", distr = "rbern", prob = 0.3) +
node("W3", distr = "rbern", prob = 0.3) +
node("sA.mu", distr = "rconst", const = (0.98 * W1 + 0.58 * W2 + 0.33 * W3)) +
node("sA", distr = "rnorm", mean = sA.mu, sd = 1)
D <- set.DAG(D, n.test = 10)
datO <- sim(D, n = 10000, rndseed = 12345)
# ================================================================================
task <- sl3_Task$new(datO, covariates=c("W1", "W2", "W3"),outcome="sA")
lrn1 <- Lrnr_condensier$new(nbins = 35, bin_method = "equal.len", pool = TRUE, bin_estimator =
Lrnr_xgboost$new(nrounds = 50, objective = "reg:logistic"))
lrn2 <- Lrnr_condensier$new(nbins = 25, bin_method = "equal.len", pool = TRUE,
bin_estimator = Lrnr_glm_fast$new(family = binomial()))
lrn3 <- Lrnr_condensier$new(nbins = 20, bin_method = "equal.mass", pool = TRUE,
bin_estimator = Lrnr_xgboost$new(nrounds = 50, objective = "reg:logistic"))
lrn4 <- Lrnr_condensier$new(nbins = 35, bin_method = "equal.len", pool = TRUE,
bin_estimator = Lrnr_xgboost$new(nrounds = 50, objective = "reg:logistic"))
sl <- Lrnr_sl$new(learners = list(lrn1, lrn2, lrn3, lrn4), metalearner = Lrnr_solnp_density$new())
sl_fit <- sl$train(task)
@wilsoncai1992, please see the updated examples (along with proper Rmd file containing the examples) in https://github.com/osofr/condensier/pull/13
Thank you @osofr for looking into this! I can confirm that the new code will work.
When I try to call
Lrnr_condensier
andtrain
function, SL3 gives the following error (reproduced on both mac and linux):You can reproduce the error with the following code: