-
Notifications
You must be signed in to change notification settings - Fork 26
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feature request: allow new factor levels in brandom #115
Comments
Hi,
you have to make sure that your factor, i.e. the group variable, in
data_test has exactly the same levels as in data. you can get that by
something like:
x_test = c(1.2562301, -0.4628746, -0.2848149, -0.9655805, -1.0166867,
1.8343589, -0.6302188, 1.1909887, -0.8064399, 0.3444268,
-0.4593891)
y_test = c(3.004605, 5.595847, 7.62922, 6.687553, 7.435949,
11.453977, 13.381522, 13.393321, 6.855579, 16.023104,
17.48234)
group_test = c(rep("4",10), "1") ## only use levels that were part of the
original data object
df_test = data.frame(y = y_test, x = x_test, group = group_test)
df_test$group = factor(df_test$group, levels = 1:4) ## set levels
explicitly!
preds = predict.mboost(mod, newdata = df_test)
Am Mo., 22. Nov. 2021 um 15:46 Uhr schrieb kmorndahl <
***@***.***>:
… I am building a gamboost model with the GammaReg() family. The model fits
fine, but when it comes time to predict on a new dataset I am getting an
error: Error in X %*% rowSums(cf) : Cholmod error 'X and/or Y have wrong
dimensions' at file ../MatrixOps/cholmod_sdmult.c, line 90.
I attempted to create a smaller reproducible example of this, but could
not replicate that exact error. Instead, this smaller dataset gives a
different error: Error in f(init, x[[i]]) : non-conformable arrays. This
example is created using a subset of the training data from my original
data, the same modeling approach, and I attempt to predict on the full test
set from my original data.
Any help troubleshooting these error(s) would be much appreciated. I can
of course share the full dataset if that would be helpful.
x = c(-0.420619854880168, -0.769823976992038, -0.709316986674812,
-1.25099225335503, -0.618892161183838, -0.555349783432928,
-0.914234689796377, -1.22903701739405, -0.4833834921797,
-0.320848947810941, 0.135931013665819, 2.39042286987258,
1.73643729459268, -0.506909477648839, 1.62136146009556,
2.15263600603266, 1.4014282748866, 2.03401367337059, 0.877646599658447,
1.02535151508941, -0.837245279816666, 0.58292669901717,
0.602153227358826, 1.83594483207367, 1.02820280062304,
-0.765221508789011, -0.74152886321564, -0.354830989878368,
-0.282803791828277, -0.407939851800533)
y = c(3.37808396795311, 4.31703013336414, 3.62201047152382,
3.47647337833432, 3.57383927065914, 4.0274754006413, 5.11993857962149,
4.10603649459834, 3.44626699808267, 6.50187496364316, 47.364073741465,
49.4539651723017, 18.5584474694755, 167.384017225471, 43.854077667435,
20.5948980572258, 60.0090328389651, 32.2859775573889, 23.028143147698,
27.5759143301009, 36.8938384302345, 132.866721315487, 187.170964086464,
14.9766986238594, 4.54648985258215, 25.5890448582519, 48.696962593379,
36.9890174750545, 53.4100395759561, 49.565020848753)
group = c("1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "2", "2",
"2", "2", "2", "2", "2", "2", "2", "2", "3", "3", "3", "3", "3",
"4", "4", "4", "4", "4")
df = data.frame(y, x, group)
df$group = factor(df$group)
mod = mboost::gamboost(y ~ bols(x) + brandom(group), data = df, family = GammaReg())
x_test = c(1.2562301, -0.4628746, -0.2848149, -0.9655805, -1.0166867,
1.8343589, -0.6302188, 1.1909887, -0.8064399, 0.3444268,
-0.4593891)
y_test = c(3.004605, 5.595847, 7.62922, 6.687553, 7.435949,
11.453977, 13.381522, 13.393321, 6.855579, 16.023104,
17.48234)
group_test = c("5", "5", "5", "5", "5", "5", "5", "5", "5", "5", "1")
df_test = data.frame(y = y_test, x = x_test, group = group_test)
df_test$group = factor(df_test$group)
preds = predict.mboost(mod, newdata = df_test)
# Error in f(init, x[[i]]) : non-conformable arrays
# Error when running on full dataset:
# Error in X %*% rowSums(cf) :
# Cholmod error 'X and/or Y have wrong dimensions' at file ../MatrixOps/cholmod_sdmult.c, line 90
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
<#115>, or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ADCWY7VMEP66AGWM5DMSNTTUNJJVBANCNFSM5IRF2UTQ>
.
Triage notifications on the go with GitHub Mobile for iOS
<https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675>
or Android
<https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub>.
|
Ah easy fix, thanks very much @sbrockhaus! The error (Error in X %*% rowSums(cf) : Cholmod error 'X and/or Y have wrong dimensions) still persisted in the full data set, but this seems to be resolved in the patched version available through github. Are there plans to/a timeline for incorporating the patched version into the main CRAN install? (pardon my ignorance here, I don't know much about package development). Best |
Upon further reflection, I'm wondering if mboost provides the functionality to include new levels of a brandom() grouping variable in the test set/newdata object for prediction. For random effects, I believe this is not uncommon (?) For example, the glmer function provides the allow.new.levels = TRUE parameter for this purpose. Thanks! |
I am wondering that the code breaks with the CRAN version but not the github version as they should be practically identical and we did not modify anything wrt to the above mentioned functionality. A feature such as |
I am building a gamboost model with the GammaReg() family. The model fits fine, but when it comes time to predict on a new dataset I am getting an error: Error in X %*% rowSums(cf) : Cholmod error 'X and/or Y have wrong dimensions' at file ../MatrixOps/cholmod_sdmult.c, line 90.
I attempted to create a smaller reproducible example of this, but could not replicate that exact error. Instead, this smaller dataset gives a different error: Error in f(init, x[[i]]) : non-conformable arrays. This example is created using a subset of the training data from my original data, the same modeling approach, and I attempt to predict on the full test set from my original data.
Any help troubleshooting these error(s) would be much appreciated. I can of course share the full dataset if that would be helpful.
The text was updated successfully, but these errors were encountered: