OSCR

Interpretative diagnostic model for neuroblastoma metastases using bone marrow cytology.

Code ↔ Paper

1 match between paragraphs of the paper and lines of its authors' code, computed by the harvester (lexical-v1). Click a colored paragraph or line to see its counterpart.

The 1 match
  1. [1] § Materials and methods › Construction and validation of diagnostic cytology model for BM metastasis in neuroblastoma ↔ feature_extraction/deep_learning_training/Model building and evaluation.ipynb, lines 286–325 · score 0.50 · NPV, PPV, thresholds, sensitivity, metric, WSI

Paper

Loaded from Europe PMC by your browser, not stored by OSCR: doi.org · Europe PMC

The paper is loaded when this pane is shown.

The authors' code

Jupyter notebook · 464 lines · 15 KB · no license · 1 match

  1. # %% [markdown]
  2. # %%
  3. # Model building and evaluation
  4. 1. data verification and review
  5. 2. data regularization which changes the data to obey N~(0, 1)
  6. 3. construct the training and test sets
  7. 4. features screening through Lasso and select non-zero items for the subsequent model
  8. 5. Use machine learning algorithms for clinical task
  9. 6. Model visualization
  10. # feature_file: the path of the feature data
  11. # label_file: label information file for each sample
  12. # labels: targets to be learned by the AI system
  13. import os
  14. from IPython.display import display
  15. os.environ['KMP_DUPLICATE_LIB_OK'] = 'TRUE'
  16. from onekey_algo import OnekeyDS as okds
  17. import pandas as pd
  18. os.makedirs('img', exist_ok=True)
  19. os.makedirs('results', exist_ok=True)
  20. os.makedirs('features', exist_ok=True)
  21. # file settings
  22. label_file = r'label information file for each sample'
  23. feature_file = r'the path of your feature data'
  24. labels = ['label']
  25. # %% [markdown]
  26. # %%
  27. # read the column name of labeled file
  28. # read data, the data is stored in CSV forma
  29. # the required label_data is a 'DataFrame' format including the ID column and the subsequent labels column which can be multiple columns
  30. feature_data = pd.read_csv(feature_file)
  31. display(feature_data)
  32. label_data = pd.read_csv(label_file)
  33. label_data.head()
  34. # %% [markdown]
  35. # %%
  36. # feature splicing
  37. from onekey_algo.custom.utils import print_join_info
  38. print_join_info(feature_data, label_data)
  39. combined_data = pd.merge(feature_data, label_data, on=['ID'], how='inner')
  40. ids = combined_data['ID']
  41. combined_data = combined_data.drop(['ID'], axis=1)
  42. print(combined_data[labels].value_counts())
  43. combined_data.columns
  44. # %% [markdown]
  45. # %%
  46. combined_data.describe()
  47. # %% [markdown]
  48. # #normalize_df,change the data to a mean of 0,a variance of 1
  49. #
  50. # $column = \frac{column - mean}{std}$
  51. # %%
  52. # regularization
  53. from onekey_algo.custom.components.comp1 import normalize_df
  54. data = normalize_df(combined_data, not_norm=labels, group='group')
  55. data = data.dropna(axis=1)
  56. data.describe()
  57. # %% [markdown]
  58. # %%
  59. # correlation coefficient,there are three methods to choose from for calculating the correlation coefficient
  60. 1. pearson: standard correlation coefficient
  61. 2. kendall: Kendall Tau correlation coefficient
  62. 3. spearman: Spearman rank correlation
  63. pearson_corr = data[data['group'] == 'train'][[c for c in data.columns if c not in labels]].corr('pearson')
  64. # kendall_corr = data[[c for c in data.columns if c not in labels]].corr('kendall')
  65. # spearman_corr = data[[c for c in data.columns if c not in labels]].corr('spearman')
  66. # %% [markdown]
  67. # %%
  68. # visualization of correlation coefficient
  69. import seaborn as sns
  70. import matplotlib.pyplot as plt
  71. from onekey_algo.custom.components.comp1 import draw_matrix
  72. if combined_data.shape[1] < 100:
  73. plt.figure(figsize=(50.0, 40.0))
  74. # select the correlation coefficient for visualization
  75. draw_matrix(pearson_corr, annot=True, cmap='YlGnBu', cbar=False)
  76. plt.savefig(f'img/feature_corr.svg', bbox_inches = 'tight')
  77. # %% [markdown]
  78. # %%
  79. # cluster analysis
  80. import seaborn as sns
  81. import matplotlib.pyplot as plt
  82. if combined_data.shape[1] < 100:
  83. pp = sns.clustermap(pearson_corr, linewidths=.5, figsize=(50.0, 40.0), cmap='YlGnBu')
  84. plt.setp(pp.ax_heatmap.get_yticklabels(), rotation=0)
  85. plt.savefig(f'img/feature_cluster.svg', bbox_inches = 'tight')
  86. # %% [markdown]
  87. # %%
  88. # feature filtering--correlation coefficient
  89. def select_feature(corr threshold: float = 0.9 keep: int = 1 topn=10 verbose=False):
  90. from onekey_algo.custom.components.comp1
  91. import select_feature
  92. sel_feature = select_feature(pearson_corr, threshold=0.9, topn=32, verbose=False)
  93. sel_feature = sel_feature + labels + ['group']
  94. sel_feature
  95. # %% [markdown]
  96. # %%
  97. # features screening
  98. sel_data = data[sel_feature]
  99. sel_data.describe()
  100. # %%
  101. # %%
  102. # construct datasets
  103. import numpy as np
  104. import onekey_algo.custom.components as okcomp
  105. n_classes = 2
  106. train_data = sel_data[(sel_data['group'] == 'train')]
  107. train_ids = ids[train_data.index]
  108. train_data = train_data.reset_index()
  109. train_data = train_data.drop('index', axis=1)
  110. y_data = train_data[labels]
  111. X_data = train_data.drop(labels + ['group'], axis=1)
  112. test_data = sel_data[sel_data['group'] != 'train']
  113. test_ids = ids[test_data.index]
  114. test_data = test_data.reset_index()
  115. test_data = test_data.drop('index', axis=1)
  116. y_test_data = test_data[labels]
  117. X_test_data = test_data.drop(labels + ['group'], axis=1)
  118. y_all_data = sel_data[labels]
  119. X_all_data = sel_data.drop(labels + ['group'], axis=1)
  120. column_names = X_data.columns
  121. print(f"sample size in the training set:{X_data.shape}, sample size in the validation set:{X_test_data.shape}")
  122. # %% [markdown]
  123. # %%
  124. # Lasso, initialize the Lasso model with alpha as the penalty coefficient
  125. # reference (https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.Lasso.html?highlight=lasso#sklearn.linear_model.Lasso)
  126. alpha = okcomp.comp1.lasso_cv_coefs(X_data, y_data, column_names=None, alpha_logmin=-3)
  127. plt.savefig(f'img/feature_lasso.svg', bbox_inches = 'tight')
  128. # %% [markdown]
  129. # %%
  130. okcomp.comp1.lasso_cv_efficiency(X_data, y_data, points=50, alpha_logmin=-3)
  131. plt.savefig(f'img/feature_mse_label.svg', bbox_inches = 'tight')
  132. # %% [markdown]
  133. # %%
  134. # penalty factor, use the penalty factor of cross-validation as the basis for model training
  135. from sklearn import linear_model
  136. models = []
  137. for label in labels:
  138. clf = linear_model.Lasso(alpha=alpha)
  139. clf.fit(X_data, y_data[label])
  140. models.append(clf)
  141. # %% [markdown]
  142. # %%
  143. # feature screening, screened features with coef > 0 and print
  144. COEF_THRESHOLD = 1e-8 # feature thresholds after filtering
  145. scores = []
  146. selected_features = []
  147. for label, model in zip(labels, models):
  148. feat_coef = [(feat_name, coef) for feat_name, coef in zip(column_names, model.coef_)
  149. if COEF_THRESHOLD is None or abs(coef) > COEF_THRESHOLD]
  150. selected_features.append([feat for feat, _ in feat_coef])
  151. formula = ' '.join([f"{coef:+.6f} * {feat_name}" for feat_name, coef in feat_coef])
  152. score = f"{label} = {model.intercept_} {'+' if formula[0] != '-' else ''} {formula}"
  153. scores.append(score)
  154. print(scores[0])
  155. # %% [markdown]
  156. # %%
  157. # feature weights
  158. feat_coef = sorted(feat_coef, key=lambda x: x[1])
  159. feat_coef_df = pd.DataFrame(feat_coef, columns=['feature_name', 'Coefficients'])
  160. feat_coef_df.plot(x='feature_name', y='Coefficients', kind='barh')
  161. plt.savefig(f'img/feature_weights.svg', bbox_inches = 'tight')
  162. # %% [markdown]
  163. # %%
  164. # screening features, use the features with high coefficients screened by Lasso as training data
  165. X_data = X_data[selected_features[0]]
  166. X_test_data = X_test_data[selected_features[0]]
  167. X_data.columns
  168. # %% [markdown]
  169. # %%
  170. # model selection
  171. model_names = ['ExtraTrees','RandomForest','LightGBM','AdaBoost', 'LR', 'MLP']
  172. models = okcomp.comp1.create_clf_model(model_names)
  173. model_names = list(models.keys())
  174. # %% [markdown]
  175. # %%
  176. # cross validation (if the study needed, no need in multicenterc ohort)
  177. # import seaborn as sns
  178. # import matplotlib.pyplot as plt
  179. # import pandas as pd
  180. # from sklearn.metrics import accuracy_score, roc_auc_score
  181. # results = okcomp.comp1.get_bst_split(X_data, y_data, models, test_size=0.2, metric_fn=roc_auc_score, cv=True, random_state=0)
  182. _, (X_train_sel, X_test_sel, y_train_sel, y_test_sel) = results['results'][results['max_idx']]
  183. # X_train_sel, X_test_sel, y_train_sel, y_test_sel = X_data, X_test_data, y_data, y_test_data
  184. # trails, _ = zip(*results['results'])
  185. # cv_results = pd.DataFrame(trails, columns=model_names)
  186. # sns.boxplot(data=cv_results)
  187. # plt.ylabel('AUC %')
  188. # plt.xlabel('Model Nmae')
  189. # plt.savefig(f'img/model_cv.svg', bbox_inches = 'tight')
  190. # %% [markdown]
  191. # %%
  192. # model selection and evaluation
  193. import joblib
  194. from onekey_algo.custom.components.comp1 import plot_feature_importance, plot_learning_curve, smote_resample
  195. targets = []
  196. os.makedirs('models', exist_ok=True)
  197. for l in labels:
  198. new_models = list(okcomp.comp1.create_clf_model(model_names).values())
  199. for mn, m in zip(model_names, new_models):
  200. X_train_smote, y_train_smote = X_train_sel, y_train_sel
  201. # X_train_smote, y_train_smote = smote_resample(X_train_sel, y_train_sel)
  202. m.fit(X_train_smote, y_train_smote[l])
  203. # save result
  204. joblib.dump(m, f'models/{mn}_{l}.pkl')
  205. plot_feature_importance(m, selected_features[0], save_dir='img')
  206. # plot_learning_curve(m, X_train_sel, y_train_sel, title=f'Learning Curve {mn}')
  207. # plt.savefig(f"img/Rad_{mn}_learning_curve.svg", bbox_inches='tight')
  208. plt.show()
  209. targets.append(new_models)
  210. # %% [markdown]
  211. # %%
  212. # WSI-level predictions
  213. # predictions for prediction results of each model corresponding to each label.
  214. # pred_scores for predicted probability value for each model for each label.
  215. from sklearn.metrics import accuracy_score
  216. from sklearn.preprocessing import OneHotEncoder
  217. from onekey_algo.custom.components.delong import calc_95_CI
  218. from onekey_algo.custom.components.metrics import analysis_pred_binary
  219. predictions = [[(model.predict(X_train_sel), model.predict(X_test_sel))
  220. for model in target] for label, target in zip(labels, targets)]
  221. pred_scores = [[(model.predict_proba(X_train_sel), model.predict_proba(X_test_sel))
  222. for model in target] for label, target in zip(labels, targets)]
  223. metric = []
  224. pred_sel_idx = []
  225. for label, prediction, scores in zip(labels, predictions, pred_scores):
  226. pred_sel_idx_label = []
  227. for mname, (train_pred, test_pred), (train_score, test_score) in zip(model_names, prediction, scores):
  228. acc, auc, ci, tpr, tnr, ppv, npv, precision, recall, f1, thres = analysis_pred_binary(y_train_sel[label],
  229. train_score[:, 1])
  230. ci = f"{ci[0]:.4f} - {ci[1]:.4f}"
  231. metric.append((mname, acc, auc, ci, tpr, tnr, ppv, npv, precision, recall, f1, thres, f"{label}-train"))
  232. acc, auc, ci, tpr, tnr, ppv, npv, precision, recall, f1, thres = analysis_pred_binary(y_test_sel[label],
  233. test_score[:, 1])
  234. ci = f"{ci[0]:.4f} - {ci[1]:.4f}"
  235. metric.append((mname, acc, auc, ci, tpr, tnr, ppv, npv, precision, recall, f1, thres, f"{label}-test"))
  236. pred_sel_idx_label.append(np.logical_or(test_score[:, 0] >= thres, test_score[:, 1] >= thres))
  237. pred_sel_idx.append(pred_sel_idx_label)
  238. metric = pd.DataFrame(metric, index=None, columns=['model_name', 'Accuracy', 'AUC', '95% CI',
  239. 'Sensitivity', 'Specificity',
  240. 'PPV', 'NPV', 'Precision', 'Recall', 'F1',
  241. 'Threshold', 'Task'])
  242. metric
  243. # %% [markdown]
  244. # %%
  245. # draw curves
  246. import seaborn as sns
  247. plt.figure(figsize=(10, 10))
  248. plt.subplot(211)
  249. sns.barplot(x='model_name', y='Accuracy', data=metric, hue='Task')
  250. plt.subplot(212)
  251. sns.lineplot(x='model_name', y='Accuracy', data=metric, hue='Task')
  252. plt.savefig(f'img/model_acc.svg', bbox_inches = 'tight')
  253. # %% [markdown]
  254. # %%
  255. # ROC
  256. sel_model = model_names
  257. for sm in sel_model:
  258. if sm in model_names:
  259. sel_model_idx = model_names.index(sm)
  260. # Plot all ROC curves
  261. plt.figure(figsize=(8, 8))
  262. for pred_score, label in zip(pred_scores, labels):
  263. okcomp.comp1.draw_roc([np.array(y_train_sel[label]), np.array(y_test_sel[label])],
  264. pred_score[sel_model_idx],
  265. labels=['Train', 'Test'], title=f"Model: {sm}")
  266. plt.savefig(f'img/model_{sm}_roc.svg', bbox_inches = 'tight')
  267. # %% [markdown]
  268. # %%
  269. # model result
  270. sel_model = model_names
  271. for pred_score, label in zip(pred_scores, labels):
  272. pred_test_scores = []
  273. for sm in sel_model:
  274. if sm in model_names:
  275. sel_model_idx = model_names.index(sm)
  276. pred_test_scores.append(pred_score[sel_model_idx][1])
  277. okcomp.comp1.draw_roc([np.array(y_test_sel[label])] * len(pred_test_scores),
  278. pred_test_scores,
  279. labels=sel_model, title=f"Model AUC")
  280. plt.savefig(f'img/model_roc.svg', bbox_inches = 'tight')
  281. # %% [markdown]
  282. # %%
  283. # DCA
  284. from onekey_algo.custom.components.comp1 import plot_DCA
  285. for pred_score, label in zip(pred_scores, labels):
  286. pred_test_scores = []
  287. for sm in sel_model:
  288. if sm in model_names:
  289. sel_model_idx = model_names.index(sm)
  290. okcomp.comp1.plot_DCA(pred_score[sel_model_idx][1][:,1], np.array(y_test_sel[label]),
  291. title=f'Rad Model {sm} DCA')
  292. plt.savefig(f'img/model_{sm}_dca.svg', bbox_inches = 'tight')
  293. # %% [markdown]
  294. # %%
  295. # confusion matrix
  296. # set the drawing parameters
  297. sel_model = model_names
  298. c_matrix = {}
  299. for sm in sel_model:
  300. if sm in model_names:
  301. sel_model_idx = model_names.index(sm)
  302. for idx, label in enumerate(labels):
  303. cm = okcomp.comp1.calc_confusion_matrix(predictions[idx][sel_model_idx][-1], y_test_sel[label],
  304. # sel_idx = pred_sel_idx[idx][sel_model_idx],
  305. class_mapping={1:'1', 0:'0'}, num_classes=2)
  306. c_matrix[label] = cm
  307. plt.figure(figsize=(5, 4))
  308. plt.title(f'Rad Model:{sm}')
  309. okcomp.comp1.draw_matrix(cm, norm=False, annot=True, cmap='Blues', fmt='.3g')
  310. plt.savefig(f'img/model_{sm}_cm.svg', bbox_inches = 'tight')
  311. # %% [markdown]
  312. # %%
  313. # sample prediction histogram
  314. # plot the predicted results and the corresponding true results for each sample
  315. sel_model = model_names
  316. c_matrix = {}
  317. for sm in sel_model:
  318. if sm in model_names:
  319. sel_model_idx = model_names.index(sm)
  320. for idx, label in enumerate(labels):
  321. okcomp.comp1.draw_predict_score(pred_scores[idx][sel_model_idx][-1], y_test_sel[label])
  322. plt.title(f'{sm} sample predict score')
  323. plt.legend(labels=["label=0","label=1"],loc="lower right")
  324. plt.savefig(f'img/model_{sm}_sample_dis.svg', bbox_inches = 'tight')
  325. plt.show()
  326. # %% [markdown]
  327. # %% [markdown]
  328. # #save model result
  329. # import os
  330. # import numpy as np
  331. #
  332. # os.makedirs('results', exist_ok=True)
  333. # sel_model = sel_model
  334. #
  335. # for idx, label in enumerate(labels):
  336. # for sm in sel_model:
  337. # if sm in model_names:
  338. # sel_model_idx = model_names.index(sm)
  339. # target = targets[idx][sel_model_idx]
  340. # # sample prediction result
  341. # train_indexes = np.reshape(np.array(train_ids), (-1, 1)).astype(str)
  342. # test_indexes = np.reshape(np.array(test_ids), (-1, 1)).astype(str)
  343. # y_train_pred_scores = target.predict_proba(X_train_sel)
  344. # y_test_pred_scores = target.predict_proba(X_test_sel)
  345. # columns = ['ID'] + [f"{label}-{i}"for i in range(y_test_pred_scores.shape[1])]
  346. # # save results
  347. # result_train = pd.DataFrame(np.concatenate([train_indexes, y_train_pred_scores], axis=1), columns=columns)
  348. # result_train.to_csv(f'results/{sm}_Rad_train.csv', index=False)
  349. # result_test = pd.DataFrame(np.concatenate([test_indexes, y_test_pred_scores], axis=1), columns=columns)
  350. # result_test.to_csv(f'results/{sm}_Rad_test.csv', index=False)
  351. # %%

Model building and evaluation.ipynb at commit d1a39a2, no license · at the source

Overview

Authors: Juan Ma1,2,3, Qiang Yao4, Xiaoying Fu4, Zhouqi Xia5,6, Yaoting Yue7, Dongqing Xu8, Xiaojun Yuan8, Liebin Zhao9,10, Jinhu Wang11,12, Ao Dong13, Limei Gao1, Junyao Yang1,2,3, Lisong Shen1,2,3, Yingxia Zheng1,2,3, Shaoqing Ni5,6
13 affiliations
  1. Department of Laboratory Medicine, Xin Hua Hospital, Shanghai Jiao Tong University School of Medicine, Shanghai, 200092 China
  2. Faculty of Medical Laboratory Science, Shanghai Jiao Tong University School of Medicine, Shanghai, 200025 China
  3. Institute of Artificial Intelligence Medicine, Shanghai Academy of Experimental Medicine, Shanghai, 200092 China
  4. Department of Laboratory Medicine, Shenzhen Children’s Hospital, Affiliated to Shantou University Medical College, Shenzhen, 518038 China
  5. National Clinical Trial Institute, Children’s Hospital, Zhejiang University School of Medicine, National Clinical Research Center for Children and Adolescents’ Health and Diseases, Hangzhou, Zhejiang 310052 China
  6. Research Center for Clinical Pharmacy, College of Pharmaceutical Sciences, Zhejiang University, Hangzhou, Zhejiang 310058 China
  7. School of Communication and Information Engineering, Shanghai University, Shanghai, 200444 China
  8. Department of Pediatric Hematology/Oncology, Xin Hua Hospital, Shanghai Jiao Tong University School of Medicine, Shanghai, 200092 China
  9. Xinhua Hospital, School of Medicine, Shanghai Jiao Tong University, Shanghai, 200092 China
  10. Shanghai Engineering Research Center of Intelligence Pediatrics (SERCIP), Shanghai, 200127 China
  11. Pediatric Cancer Research Center, Zhejiang University School of Medicine, National Clinical Research Center for Children and Adolescents’ Health and Diseases, Hangzhou, Zhejiang 310052 China
  12. Department of Surgical Oncology, Children’s Hospital, Zhejiang University School of Medicine, National Clinical Research Center for Children and Adolescents’ Health and Diseases, Hangzhou, Zhejiang 310052 China
  13. Department of Clinical Laboratory, Children’s Hospital, Zhejiang University School of Medicine, National Clinical Research Center for Children and Adolescents’ Health and Diseases, Hangzhou, Zhejiang 310052 China
Journal: Journal of translational medicine, volume 24, issue 1, article 691
Dates: received 28 September 2025; accepted 23 March 2026; published online 7 April 2026
Type: Research article · Language: English
License: CC BY-NC-ND
Identifiers: DOI 10.1186/s12967-026-08069-2 · PMID 41947227 · PMCID PMC13188757 · OpenAlex W7151240168
Open access: gold, a free copy (OpenAlex)
Status: code verified
Categories: human (organism), other condition (population), clinical / translational (subfield)
Methods: Statistics, Machine learning
Keywords: Neuroblastoma, Artificial intelligence, Bone marrow, Cytology, Metastasis, Risk stratification
MeSH: Bone Marrow*, Bone Marrow Neoplasms*, Cytodiagnosis*, Neuroblastoma*, Child, Child, Preschool, Convolutional Neural Networks, Female, Humans, Infant, Male, Multiple-Instance Learning Algorithms, Neoplasm Metastasis, Retrospective Studies (* major topic)
Topic: Neuroblastoma Research and Treatments (Neurology, Medicine), according to OpenAlex
Funding: Key Technologies Research and Development Program (2023YFC2706100); Science and Technology Innovation Plan Of Shanghai Science and Technology Commission (21ZR1441500); National Natural Science Foundation of China (82373971)
Citations: not cited yet (Europe PMC); 33 references in the paper

Abstract

The abstract is not reproduced here: the paper's license (CC BY-NC-ND) does not allow it. Read it in the paper, at the publisher or on Europe PMC.

Repository

Its files are read in the Code ↔ Paper reader above, with 1 match between paragraphs and lines of code.

dr-jenna/cMIL

License: none: the authors keep all their rights
State: the link answers, verified on 29 September 2026
Evidence: files inventoried
Commit: d1a39a23789e2f53cefcf05af2dc6b2fa59b42e1, 16 January 2025
Languages: Python (25), Jupyter (6)
Size: 74 files, 31 scripts
Software Heritage: not archived
Found in: “Data availability”
Holds: README, license file, environment (requirements.txt), 6 notebooks
Not found: CITATION.cff, tests, continuous integration, documentation
Tools: PyTorch (15 files), NumPy (9 files), pandas (9 files), Pillow (5 files), Matplotlib (2 files), scikit-learn (2 files), seaborn (2 files), NiBabel (1 file)
Availability: 1 check, the latest on 29 September 2026: the link answers
  • 29 September 2026: the link answers
33 files

The paper's code and data availability statement is in the Data section.

Tracing map

Proposed by the machine: these links were found in the paper and verified at the source, without human review. The map will receive a Zenodo DOI once one of the paper's authors has validated it with their ORCID.

What the map holds:

  • 1 repository of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
  • 31 scripts, each with its path and the digest of its content;
  • 1 match between paragraphs of the paper and lines of the code (method lexical-v1);
  • neither the text of the paper nor the code itself.

Its JSON (tracing-map.json) is deposited on Zenodo with its DOI once the map is validated.

Data

No dataset and no data link were found in the paper.

Code and data availability statement

The paper has a code and data availability statement. Its license (CC BY-NC-ND) does not allow reproducing it here; in short, from what the harvester recognized in it:

  • it points to the authors' code: dr-jenna/cMIL
  • it says that the data are available on request

Read it in the paper: doi.org/10.1186/s12967-026-08069-2.

Versions

The history of this record: each version stored by the harvester or made by a correction of its authors or of the maintainers of its code, and what changed in its facts. The texts of the paper (its abstract, its availability statements) are not part of it; versions that changed only those are not listed.

Version 1, 29 September 2026: the first record

Recorded: type, language, journal, volume, issue, pages, dates, 15 authors, 6 keywords, 14 MeSH terms, 3 funders, 33 references.

Cite

This paper

Ma, J., Yao, Q., Fu, X., Xia, Z., Yue, Y., Xu, D., Yuan, X., Zhao, L., Wang, J., Dong, A., Gao, L., Yang, J., Shen, L., Zheng, Y., & Ni, S. (2026). Interpretative diagnostic model for neuroblastoma metastases using bone marrow cytology. Journal of translational medicine, 24(1), 691. https://doi.org/10.1186/s12967-026-08069-2

BibTeX

@article{ma2026interpretative,
author = {Ma, Juan and Yao, Qiang and Fu, Xiaoying and Xia, Zhouqi and Yue, Yaoting and Xu, Dongqing and Yuan, Xiaojun and Zhao, Liebin and Wang, Jinhu and Dong, Ao and Gao, Limei and Yang, Junyao and Shen, Lisong and Zheng, Yingxia and Ni, Shaoqing},
title = {{Interpretative diagnostic model for neuroblastoma metastases using bone marrow cytology}},
journal = {Journal of translational medicine},
year = {2026},
month = apr,
volume = {24},
number = {1},
pages = {691},
publisher = {BMC},
issn = {1479-5876},
doi = {10.1186/s12967-026-08069-2},
url = {https://doi.org/10.1186/s12967-026-08069-2},
pmid = {41947227},
pmcid = {PMC13188757}
}

RIS

TY - JOUR
AU - Ma, Juan
AU - Yao, Qiang
AU - Fu, Xiaoying
AU - Xia, Zhouqi
AU - Yue, Yaoting
AU - Xu, Dongqing
AU - Yuan, Xiaojun
AU - Zhao, Liebin
AU - Wang, Jinhu
AU - Dong, Ao
AU - Gao, Limei
AU - Yang, Junyao
AU - Shen, Lisong
AU - Zheng, Yingxia
AU - Ni, Shaoqing
TI - Interpretative diagnostic model for neuroblastoma metastases using bone marrow cytology
T2 - Journal of translational medicine
J2 - J Transl Med
PY - 2026
DA - 2026/04/07
VL - 24
IS - 1
SP - 691
SN - 1479-5876
PB - BMC
DO - 10.1186/s12967-026-08069-2
UR - https://doi.org/10.1186/s12967-026-08069-2
LA - en
ER -

CSL-JSON

{
"id": "10.1186/s12967-026-08069-2",
"type": "article-journal",
"title": "Interpretative diagnostic model for neuroblastoma metastases using bone marrow cytology",
"container-title": "Journal of translational medicine",
"author": [
{
"family": "Ma",
"given": "Juan"
},
{
"family": "Yao",
"given": "Qiang"
},
{
"family": "Fu",
"given": "Xiaoying"
},
{
"family": "Xia",
"given": "Zhouqi"
},
{
"family": "Yue",
"given": "Yaoting"
},
{
"family": "Xu",
"given": "Dongqing"
},
{
"family": "Yuan",
"given": "Xiaojun"
},
{
"family": "Zhao",
"given": "Liebin"
},
{
"family": "Wang",
"given": "Jinhu"
},
{
"family": "Dong",
"given": "Ao"
},
{
"family": "Gao",
"given": "Limei"
},
{
"family": "Yang",
"given": "Junyao"
},
{
"family": "Shen",
"given": "Lisong"
},
{
"family": "Zheng",
"given": "Yingxia"
},
{
"family": "Ni",
"given": "Shaoqing"
}
],
"container-title-short": "J Transl Med",
"volume": "24",
"issue": "1",
"page": "691",
"DOI": "10.1186/s12967-026-08069-2",
"PMID": "41947227",
"PMCID": "PMC13188757",
"ISSN": "1479-5876",
"publisher": "BMC",
"URL": "https://doi.org/10.1186/s12967-026-08069-2",
"language": "en",
"issued": {
"date-parts": [
[
2026,
4,
7
]
]
}
}

The tracing map gets a citation of its own once an author has validated it and it has a DOI.

Similar papers

The papers with a page that share the most with this one: the tools found in their code, their categories, datasets, cited references and authors, the rarest counting most.

[1] doi:10.1186/s13244-026-02365-7 [code]
Super-resolution MRI and 2.5D deep learning for intratumoral-peritumoral radiomics in preoperative prediction of rectal cancer perineural invasion.
Journal: Insights into imaging
In common: Pillow, NiBabel, PyTorch, 5 other tools, other condition
[2] doi:10.1002/alz.71649 [code]
Postmortem brain MRI reveals differential associations of subcortical and limbic volumes with cortical thinning and neurodegenerative pathologies.
Journal: Alzheimer's & dementia : the journal of the Alzheimer's Association
In common: Pillow, NiBabel, PyTorch, 5 other tools, other condition
[3] doi:10.1016/j.phro.2026.101056 [code]
Toward uncertainty-aware manual delineation of brain tumours using eye-tracking and image-derived features.
Journal: Physics and imaging in radiation oncology
In common: Pillow, NiBabel, PyTorch, 5 other tools, other condition
[4] doi:10.1038/s41592-026-03194-8 [code]
Beyond benchmarking: an expert-guided consensus approach to spatially aware clustering.
Journal: Nature methods
In common: Pillow, NiBabel, PyTorch, 5 other tools
[5] doi:10.64898/2026.08.18.26360725 [code]
Temporal pole blurring in hippocampal sclerosis reflects seizure-disrupted myelination
Journal: medRxiv (preprint)
In common: Pillow, NiBabel, PyTorch, 5 other tools
[6] doi:10.1038/s41467-026-76098-y [code]
A single computational objective can produce specialization of streams in visual cortex.
Journal: Nature communications
In common: Pillow, NiBabel, PyTorch, 5 other tools
[7] doi:10.1523/jneurosci.0038-26.2026 [code]
Multidimensional Feature Tuning in Category Selective Areas of Human Visual Cortex.
Journal: The Journal of neuroscience : the official journal of the Society for Neuroscience
In common: Pillow, NiBabel, PyTorch, 5 other tools
[8] doi:10.1162/imag.a.1309 [code]
Probing the content of semantic representations in body-selective regions.
Journal: Imaging neuroscience (Cambridge, Mass.)
In common: Pillow, NiBabel, PyTorch, 5 other tools
[9] doi:10.1371/journal.pcbi.1014555 [code]
Body surface potential driven personalisation of electrophysiological digital twins in hypertrophic cardiomyopathy.
Journal: PLoS computational biology
In common: Pillow, NiBabel, PyTorch, 5 other tools
[10] doi:10.1007/s00234-026-04103-8 [code]
Enhanced detection of subtle cortical abnormalities in focal epilepsy using 7 T MRI surface-based models and graph neural networks.
Journal: Neuroradiology
In common: Pillow, NiBabel, PyTorch, 5 other tools

Contribute

The authors of this paper can claim it, correct its record and validate its tracing map, and the maintainers of its code (its owner, or a public member of its organization) correct what it says of their repository; anyone signed in can ask for its removal. Every request goes to OSCR's own machine, which answers it; your account page follows them.

Sign in with ORCID to claim this paper as one of its authors, correct its record or validate its tracing map: when the paper's metadata lists your ORCID iD, you are recognized at once. Maintainers of its code: sign in with GitHub, then claim the repository on your account page.

Request its removal

To ask OSCR to remove this record, the copies of its authors' scripts or its tracing map, use the removal request page: signed in, you say who you are, what to remove and why, then review and confirm the request. Published rules decide every request (how).

Discussion, reproductions, activity

Discussion: questions and error reports about this paper and its code, from signed-in readers and its authors. It opens with sign-in.

Reproductions: reports from readers who ran the authors' code: what they reproduced, with which environment, commit and data. It opens with sign-in.

Activity: what happens around this paper: new versions of its record, its map's validation, discussions and reproductions. It opens with sign-in.