{"id":51456628,"url":"https://github.com/ielbadisy/mimar","last_synced_at":"2026-07-06T01:01:30.388Z","repository":{"id":361950016,"uuid":"1236637742","full_name":"ielbadisy/mimar","owner":"ielbadisy","description":"Compact R tools for missing-data analysis, multiple imputation, diagnostic evaluation, and post-imputation pooling.","archived":false,"fork":false,"pushed_at":"2026-06-10T20:18:07.000Z","size":4246,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-30T03:15:44.034Z","etag":null,"topics":["data-analysis","imputation","machine-learning","missing-data","multiple-imputation","r","r-package","statistics"],"latest_commit_sha":null,"homepage":null,"language":"R","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ielbadisy.png","metadata":{"files":{"readme":"README.md","changelog":"NEWS.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-12T12:38:21.000Z","updated_at":"2026-06-10T20:19:25.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ielbadisy/mimar","commit_stats":null,"previous_names":["ielbadisy/mimar"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/ielbadisy/mimar","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ielbadisy%2Fmimar","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ielbadisy%2Fmimar/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ielbadisy%2Fmimar/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ielbadisy%2Fmimar/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ielbadisy","download_url":"https://codeload.github.com/ielbadisy/mimar/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ielbadisy%2Fmimar/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35174071,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-05T02:00:06.290Z","response_time":100,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["data-analysis","imputation","machine-learning","missing-data","multiple-imputation","r","r-package","statistics"],"created_at":"2026-07-06T01:01:29.663Z","updated_at":"2026-07-06T01:01:30.359Z","avatar_url":"https://github.com/ielbadisy.png","language":"R","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# mimar\n\n`mimar` implements a compact chained-imputation workflow in R for\nmissing-data analysis, artificial amputation, native and learner-backed\nsingle and multiple imputation, diagnostic evaluation, and\npost-imputation pooling.\n\nThe package is built around a complete missing-data workflow: describe\nthe missingness, create benchmark amputations when needed, impute with\nnative or learner-backed update rules, inspect diagnostics, evaluate\nrecovered cells when truth is available, and pool post-fit quantities.\nThe goal is a concise grammar for the whole workflow, not a replacement\nfor every specialist feature in larger imputation systems.\n\nThe package owns the imputation loop. Every imputer, whether implemented\nnatively or backed by a learner package, is called the same way:\n\n``` r\nimpute(data, imputer = \"pmm\", m = 5, maxit = 5, seed = 1)\nimpute(data, imputer = \"rf\", m = 5, seed = 1)\nimpute(data, imputer = \"xgboost\", m = 5, seed = 1)\n```\n\nThere is no dependency on `funcml`. Learner-backed imputers call their\noriginal packages directly, and those backend packages are hard\ndependencies so users can run any registered imputer without manually\nresolving learner installations.\n\n## Installation\n\nInstall the released version from CRAN:\n\n``` r\ninstall.packages(\"mimar\")\n```\n\nThe CRAN package page is \u003chttps://CRAN.R-project.org/package=mimar\u003e.\n\nYou can install the development version from GitHub:\n\n``` r\ninstall.packages(\"remotes\")\nremotes::install_github(\"ielbadisy/mimar\")\n```\n\nThen load the package:\n\n``` r\nlibrary(mimar)\n```\n\n## Quick use\n\nFor normal use, `impute()` is the only function you need. The input data\ncan contain `NA`, and the completed outputs returned by `complete()` do\nnot. Set `verbose = TRUE` when you want a concise progress log for the\nchained imputation workflow.\n\n``` r\ni \u003c- impute(a, imputer = \"knn\", m = 5, maxit = 5, seed = 1)\ncomplete(i, 1)\ncomplete(i, \"all\")\n```\n\n## Grammar\n\n``` r\ndescribe()\nampute()\nimputer_registry()\nimputer()\nimpute()\ncomplete()\nevaluate()\npool()\nplot()\n```\n\n## Short example\n\n``` r\nlibrary(mimar)\n\nset.seed(1)\ndat \u003c- data.frame(\n  age = rnorm(120, 50, 10),\n  bmi = rnorm(120, 25, 4),\n  sex = factor(sample(c(\"F\", \"M\"), 120, TRUE)),\n  group = factor(sample(c(\"A\", \"B\", \"C\"), 120, TRUE)),\n  smoker = sample(c(TRUE, FALSE), 120, TRUE)\n)\n\na \u003c- ampute(\n  dat,\n  prop = 0.25,\n  mechanism = \"MAR\",\n  target = c(\"bmi\", \"group\"),\n  by = c(\"age\", \"sex\"),\n  seed = 1\n)\n\ni \u003c- impute(a, imputer = \"knn\", m = 5, maxit = 5, seed = 1, ncore = 2)\ncomplete(i, 1)\n```\n\n    ## # A tibble: 120 × 5\n    ##      age   bmi sex   group smoker\n    ##    \u003cdbl\u003e \u003cdbl\u003e \u003cfct\u003e \u003cfct\u003e \u003clgl\u003e \n    ##  1  43.7  23.0 M     C     FALSE \n    ##  2  51.8  30.4 F     A     FALSE \n    ##  3  41.6  24.1 F     B     TRUE  \n    ##  4  66.0  24.3 F     C     TRUE  \n    ##  5  53.3  24.6 F     A     FALSE \n    ##  6  41.8  27.9 M     C     TRUE  \n    ##  7  54.9  24.7 M     B     TRUE  \n    ##  8  57.4  24.8 F     B     FALSE \n    ##  9  55.8  22.3 F     B     FALSE \n    ## 10  46.9  30.8 M     A     FALSE \n    ## # ℹ 110 more rows\n\n``` r\nsummary(i)\n```\n\n    ## mimar imputation summary\n    ## # A tibble: 1 × 11\n    ##    rows columns n_imputations imputer maxit ncore stochastic\n    ##   \u003cint\u003e   \u003cint\u003e         \u003cint\u003e \u003cchr\u003e   \u003cdbl\u003e \u003cint\u003e \u003clgl\u003e     \n    ## 1   120       5             5 knn         5     2 TRUE      \n    ## # ℹ 4 more variables: total_missing_before \u003cint\u003e, total_imputed \u003cint\u003e,\n    ## #   remaining_missing \u003cint\u003e, variables_imputed \u003cint\u003e\n    ## \n    ## Variables:\n    ## # A tibble: 5 × 9\n    ##   variable type    method n_missing_before prop_missing_before n_imputed\n    ##   \u003cchr\u003e    \u003cchr\u003e   \u003cchr\u003e             \u003cint\u003e               \u003cdbl\u003e     \u003cint\u003e\n    ## 1 age      numeric none                  0               0             0\n    ## 2 bmi      numeric knn                  26               0.217        26\n    ## 3 sex      factor  none                  0               0             0\n    ## 4 group    factor  knn                  27               0.225        27\n    ## 5 smoker   logical none                  0               0             0\n    ## # ℹ 3 more variables: prop_imputed \u003cdbl\u003e, remaining_missing \u003cint\u003e,\n    ## #   between_imputation_sd \u003cdbl\u003e\n\n``` r\nevaluate(i)\n```\n\n    ## mimar imputation evaluation\n    ## # A tibble: 1 × 4\n    ##   n_imputations imputer total_missing evaluated_cells\n    ##           \u003cint\u003e \u003cchr\u003e           \u003cint\u003e           \u003cint\u003e\n    ## 1             5 knn                53              53\n\n``` r\nplot(i, type = \"density\")\n```\n\n![](README_files/figure-gfm/unnamed-chunk-1-1.png)\u003c!-- --\u003e\n\n## Imputers\n\nInspect available imputers with:\n\n``` r\nimputer_registry()\n```\n\n    ## # A tibble: 23 × 10\n    ##    imputer implementation package  supports_numeric supports_binary\n    ##    \u003cchr\u003e   \u003cchr\u003e          \u003cchr\u003e    \u003clgl\u003e            \u003clgl\u003e          \n    ##  1 mean    mimar          internal TRUE             TRUE           \n    ##  2 median  mimar          internal TRUE             TRUE           \n    ##  3 mode    mimar          internal TRUE             TRUE           \n    ##  4 naive   mimar          internal TRUE             TRUE           \n    ##  5 norm    mimar          internal TRUE             TRUE           \n    ##  6 pmm     mimar          internal TRUE             TRUE           \n    ##  7 spmm    mimar          internal TRUE             TRUE           \n    ##  8 logreg  mimar          internal TRUE             TRUE           \n    ##  9 polyreg mimar          internal TRUE             TRUE           \n    ## 10 rf      wrapped        ranger   TRUE             TRUE           \n    ## # ℹ 13 more rows\n    ## # ℹ 5 more variables: supports_multiclass \u003clgl\u003e, stochastic \u003clgl\u003e,\n    ## #   description \u003cchr\u003e, available \u003clgl\u003e, status \u003cchr\u003e\n\n``` r\ndescribe(\"imputers\")\n```\n\n    ## mimar available imputers\n    ## # A tibble: 23 × 10\n    ##    imputer implementation package  supports_numeric supports_binary\n    ##    \u003cchr\u003e   \u003cchr\u003e          \u003cchr\u003e    \u003clgl\u003e            \u003clgl\u003e          \n    ##  1 mean    mimar          internal TRUE             TRUE           \n    ##  2 median  mimar          internal TRUE             TRUE           \n    ##  3 mode    mimar          internal TRUE             TRUE           \n    ##  4 naive   mimar          internal TRUE             TRUE           \n    ##  5 norm    mimar          internal TRUE             TRUE           \n    ##  6 pmm     mimar          internal TRUE             TRUE           \n    ##  7 spmm    mimar          internal TRUE             TRUE           \n    ##  8 logreg  mimar          internal TRUE             TRUE           \n    ##  9 polyreg mimar          internal TRUE             TRUE           \n    ## 10 rf      wrapped        ranger   TRUE             TRUE           \n    ## # ℹ 13 more rows\n    ## # ℹ 5 more variables: supports_multiclass \u003clgl\u003e, stochastic \u003clgl\u003e,\n    ## #   description \u003cchr\u003e, available \u003clgl\u003e, status \u003cchr\u003e\n\nCore native imputers:\n\n- `mean`, `median`, `mode`\n- `naive`: median/mode chained baseline\n- `norm`: linear normal draw\n- `pmm`, `spmm`: predictive mean matching\n- `logreg`: binary logistic regression draw\n- `polyreg`: one-vs-rest multinomial draw\n- `knn`: nearest-neighbor donor imputation\n- `hotdeck`: stochastic donor imputation\n\nLearner-backed imputers:\n\n- `rf`: MissForest-style chained random forest imputer through `ranger`\n- `ranger`: random forest through `ranger`\n- `rpart`: tree imputer through `rpart`\n- `nbayes`: naive Bayes through `naivebayes`\n- `svm`: support vector machine through `e1071`\n- `bart`: Bayesian additive regression trees through `BART`\n- `glmnet`: penalized regression through `glmnet`\n- `gbm`: gradient boosting through `gbm`\n- `xgboost`: gradient boosted trees through `xgboost`\n- `famd`: FAMD-assisted donor imputation through `missMDA`\n- `superlearner`, `sl`: cross-validated Super Learner-style ensemble\n  imputer\n\nImputer names are strict: use the names shown by `imputer_registry()`.\nLearner-backed imputers are applied as requested to numeric, binary, and\nmulticlass targets; `mimar` does not silently swap them for another\nimputer inside benchmark runs.\n\n## Parallel imputation\n\nThe `ncore` argument runs independent completed datasets in parallel.\nThe parallel boundary is the outer imputation index: each completed\ndataset gets a deterministic seed offset, so a fixed `seed`, `m`,\n`maxit`, and imputer remain reproducible.\n\n``` r\ni \u003c- impute(a, imputer = \"knn\", m = 5, maxit = 5, seed = 1, ncore = 2)\n```\n\nUse `ncore = 1` for sequential execution, small examples, and the most\nconservative behavior in constrained environments.\n\n## Tuning imputers\n\nLearner-backed imputers expose their hyperparameters through `imputer()`\nor directly through `...` in `impute()`. Donor-based imputers use the\nexplicit `donors` argument.\n\n``` r\nrf_spec \u003c- imputer(\"rf\", num.trees = 500)\nxgb_spec \u003c- imputer(\"xgboost\", nrounds = 100, max_depth = 3)\n\ni1 \u003c- impute(a, imputer = rf_spec, m = 5, maxit = 5, seed = 1)\ni2 \u003c- impute(a, imputer = \"xgboost\", m = 5, maxit = 5, seed = 1,\n             nrounds = 100, max_depth = 3)\ni3 \u003c- impute(a, imputer = \"knn\", m = 5, maxit = 5, seed = 1, donors = 10)\n```\n\nThe same hyperparameter set is reused across all incomplete variables\nthat a given imputer supports, which keeps the full chained-imputation\npipeline reproducible and easy to tune.\n\n## Super Learner imputation\n\n`superlearner` combines candidate imputers by cross-validating them on\nobserved cells, assigning non-negative loss-based weights, and using the\nweighted ensemble inside the chained-imputation loop.\n\n``` r\nsl \u003c- imputer(\n  \"superlearner\",\n  library = c(\"pmm\", \"knn\", \"rpart\"),\n  folds = 5,\n  metalearner = \"inverse_loss\"\n)\n\ni_sl \u003c- impute(a, imputer = sl, m = 5, maxit = 5, seed = 1)\n```\n\nThe short alias `imputer = \"sl\"` is equivalent to\n`imputer = \"superlearner\"`.\n\n## Diagnostic Plots\n\n`plot()` methods return `ggplot` objects. For `mimar_imputation`\nobjects, the main diagnostic types are:\n\n``` r\nplot(i)                                      # imputed cell counts\n```\n\n![](README_files/figure-gfm/unnamed-chunk-6-1.png)\u003c!-- --\u003e\n\n``` r\nplot(i, type = \"missing\")                   # observed/imputed cell map\n```\n\n![](README_files/figure-gfm/unnamed-chunk-6-2.png)\u003c!-- --\u003e\n\n``` r\nplot(i, type = \"trace\", statistic = \"mean\") # convergence-screening trace\n```\n\n![](README_files/figure-gfm/unnamed-chunk-6-3.png)\u003c!-- --\u003e\n\n``` r\nplot(i, type = \"density\", variable = \"bmi\") # line-only density overlays\n```\n\n![](README_files/figure-gfm/unnamed-chunk-6-4.png)\u003c!-- --\u003e\n\n``` r\nplot(i, type = \"boxplot\", variable = \"bmi\") # observed vs imputation 1:m\n```\n\n![](README_files/figure-gfm/unnamed-chunk-6-5.png)\u003c!-- --\u003e\n\n``` r\nplot(i, type = \"strip\", variable = \"bmi\")   # individual values by imputation\n```\n\n![](README_files/figure-gfm/unnamed-chunk-6-6.png)\u003c!-- --\u003e\n\nFormula diagnostics are available for bivariate and categorical checks:\n\n``` r\nplot(i, type = \"xy\", formula = bmi ~ age | sex)\n```\n\n![](README_files/figure-gfm/unnamed-chunk-7-1.png)\u003c!-- --\u003e\n\n``` r\nplot(i, type = \"proportion\", formula = group ~ sex)\n```\n\n![](README_files/figure-gfm/unnamed-chunk-7-2.png)\u003c!-- --\u003e\n\nFor `type = \"xy\"`, formulas use `y ~ x` or `y ~ x | group`. For\n`type = \"proportion\"`, formulas use `categorical_variable ~ strata`.\nDensity diagnostics use line-only overlays so several imputations remain\nvisible rather than obscuring each other with filled areas.\n\n## Chained Imputation Model\n\nLet `X` be an `n x p` data frame and let `R_ij = 1` when cell `(i, j)`\nis missing. For each incomplete variable `X_j`:\n\n- `O_j = {i : R_ij = 0}` are the observed rows\n- `M_j = {i : R_ij = 1}` are the missing rows\n\nAt each chained update, `mimar` fits an imputer-specific model from the\nobserved rows and then predicts the missing rows from the current\ncompleted data. In compact form:\n\n``` text\nfit model on X_-j, O_j -\u003e X_j, O_j\nupdate X_j, M_j using the fitted model\n```\n\nMultiple imputation repeats the same chained procedure `m` times with\ncontrolled seeds, bootstrap samples of observed rows, and stochastic\nprediction where supported.\n\nLearner-backed imputers are practical stochastic update rules inside\nthis chained workflow. They can improve predictive recovery, but users\nshould still inspect trace, distribution, categorical-proportion, and\ndownstream sensitivity diagnostics rather than assuming every learner\nautomatically supplies proper multiple-imputation uncertainty for every\nanalysis.\n\n## Algorithm\n\n``` text\nInput: X, R, h, m, T\nInitialize: X~(0) \u003c- init(X)\nFor k = 1,...,m:\n  X~_k(0) \u003c- X~(0)\n  For t = 1,...,T:\n    For each incomplete variable j:\n      B_j \u003c- bootstrap sample of O_j\n      fit h on X~_k, B_j, -j and X_Bj,j\n      update missing rows M_j using the fitted model\n      restore observed rows O_j to their original values\nReturn: {X~_1(T), ..., X~_m(T)}\n```\n\n## Evaluation\n\nWhen imputation is run on an `ampute()` object, `evaluate()` uses the\nretained truth and scores only artificially removed cells. Numeric\nrecovery reports RMSE, MAE, bias, and correlation. Categorical recovery\nreports accuracy and balanced accuracy.\n\n## Pooling\n\n`pool()` combines post-fit quantities estimated separately in each\ncompleted dataset. The statistical target is the quantity itself, not a\ndata frame. A quantity can be a scalar, coefficient vector,\ncovariance-aware parameter vector, matrix of survival probabilities, or\na scalar metric. Data frames are accepted only as a tidy adapter for\nscalar model output.\n\nFor survival-probability matrices, `pool_survmat()` applies the\ncomplementary log-log transform internally, pools on that scale, and\nback-transforms the result.\n\nFor scalar quantities with complete-data variance estimates, `pool()`\napplies Rubin-style pooling:\n\n``` text\nQ_bar = mean(Q_k)\nU_bar = mean(U_k)\nB     = sample variance of Q_k\nT     = U_bar + (1 + 1/m) * B\n```\n\n``` r\nresults \u003c- data.frame(\n  term = rep(c(\"age\", \"bmi\"), each = 3),\n  estimate = c(0.10, 0.11, 0.09, 0.30, 0.32, 0.29),\n  std.error = c(0.04, 0.05, 0.04, 0.08, 0.09, 0.08),\n  imputation = rep(1:3, times = 2)\n)\n\npool(results)\n```\n\n    ## mimar pooled results\n    ## # A tibble: 2 × 14\n    ##   term  estimate std.error statistic    df  p.value conf.low conf.high     m\n    ##   \u003cchr\u003e    \u003cdbl\u003e     \u003cdbl\u003e     \u003cdbl\u003e \u003cdbl\u003e    \u003cdbl\u003e    \u003cdbl\u003e     \u003cdbl\u003e \u003cint\u003e\n    ## 1 age      0.1      0.0451      2.22  465. 0.0271     0.0114     0.189     3\n    ## 2 bmi      0.303    0.0853      3.56 1094. 0.000393   0.136      0.471     3\n    ## # ℹ 5 more variables: within_variance \u003cdbl\u003e, between_variance \u003cdbl\u003e,\n    ## #   total_variance \u003cdbl\u003e, relative_increase_variance \u003cdbl\u003e, rule \u003cchr\u003e\n\nDirect quantity inputs are preferred when available:\n\n``` r\npool(c(0.10, 0.11, 0.09), std.error = c(0.04, 0.05, 0.04), name = \"age\")\n```\n\n    ## mimar pooled results\n    ## # A tibble: 1 × 14\n    ##   term  estimate std.error statistic    df p.value conf.low conf.high     m\n    ##   \u003cchr\u003e    \u003cdbl\u003e     \u003cdbl\u003e     \u003cdbl\u003e \u003cdbl\u003e   \u003cdbl\u003e    \u003cdbl\u003e     \u003cdbl\u003e \u003cint\u003e\n    ## 1 age        0.1    0.0451      2.22  465.  0.0271   0.0114     0.189     3\n    ## # ℹ 5 more variables: within_variance \u003cdbl\u003e, between_variance \u003cdbl\u003e,\n    ## #   total_variance \u003cdbl\u003e, relative_increase_variance \u003cdbl\u003e, rule \u003cchr\u003e\n\n``` r\nbetas \u003c- list(\n  c(age = 0.10, bmi = 0.30),\n  c(age = 0.11, bmi = 0.32),\n  c(age = 0.09, bmi = 0.29)\n)\ncovariances \u003c- list(\n  diag(c(0.04, 0.08)^2),\n  diag(c(0.05, 0.09)^2),\n  diag(c(0.04, 0.08)^2)\n)\npool(betas, covariance = covariances)\n```\n\n    ## mimar pooled results\n    ## # A tibble: 2 × 14\n    ##   term  estimate std.error statistic    df  p.value conf.low conf.high     m\n    ##   \u003cchr\u003e    \u003cdbl\u003e     \u003cdbl\u003e     \u003cdbl\u003e \u003cdbl\u003e    \u003cdbl\u003e    \u003cdbl\u003e     \u003cdbl\u003e \u003cint\u003e\n    ## 1 age      0.1      0.0451      2.22  465. 0.0271     0.0114     0.189     3\n    ## 2 bmi      0.303    0.0853      3.56 1094. 0.000393   0.136      0.471     3\n    ## # ℹ 5 more variables: within_variance \u003cdbl\u003e, between_variance \u003cdbl\u003e,\n    ## #   total_variance \u003cdbl\u003e, relative_increase_variance \u003cdbl\u003e, rule \u003cchr\u003e\n\nWhen no reliable complete-data variance is supplied, as is common for\nsome performance metrics, `pool()` reports robust summaries by default:\nmedian, interquartile range, and range across imputations.\n\n## Installation notes\n\nLearner backends are hard dependencies. Installing `mimar` installs the\npackages needed by the registered learner-backed imputers, including\n`ranger`, `rpart`, `naivebayes`, `e1071`, `BART`, `glmnet`, `gbm`,\n`xgboost`, and `missMDA`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fielbadisy%2Fmimar","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fielbadisy%2Fmimar","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fielbadisy%2Fmimar/lists"}