{
  "@context": "https://w3id.org/ro/crate/1.1/context",
  "@graph": [
    {
      "@id": "ro-crate-metadata.json",
      "@type": "CreativeWork",
      "about": {
        "@id": "./"
      },
      "conformsTo": {
        "@id": "https://w3id.org/ro/crate/1.1"
      }
    },
    {
      "@id": "./",
      "@type": "Dataset",
      "name": "Reproduction bundle — Reproducible PLS calibration of protein content from near-infrared spectra",
      "description": "A worked, end-to-end example of the nirs4all reproduction-document publisher. A partial least-squares model is calibrated on near-infrared spectra to predict protein content, using a min–max scaling and standard-normal-variate preprocessing chain. The deposited .n4a bundle carries the exact pipeline and fitted artifacts; this page re-derives the cross-validated scores live in the browser from an included synthetic dataset, and lists the literature for every method used.\n",
      "mainEntity": {
        "@id": "pipeline.json"
      },
      "hasPart": [
        {
          "@id": "model.n4a"
        },
        {
          "@id": "pipeline.json"
        },
        {
          "@id": "CITATION.cff"
        },
        {
          "@id": "references.bib"
        }
      ],
      "dagml:nirs4all_version": "0.10.0",
      "author": [
        {
          "@id": "#author-1"
        },
        {
          "@id": "#author-2"
        }
      ],
      "datePublished": "2026",
      "license": {
        "@id": "https://creativecommons.org/licenses/by/4.0/"
      },
      "mentions": [
        {
          "@id": "#dataset"
        }
      ]
    },
    {
      "@id": "#dataset",
      "@type": "Dataset",
      "name": "Synthetic NIRS protein calibration set",
      "variableMeasured": "protein (% w/w)"
    },
    {
      "@id": "#author-1",
      "@type": "Person",
      "name": "Gregory Beurier",
      "affiliation": "CIRAD"
    },
    {
      "@id": "#author-2",
      "@type": "Person",
      "name": "nirs4all ecosystem"
    },
    {
      "@id": "https://creativecommons.org/licenses/by/4.0/",
      "@type": "CreativeWork",
      "name": "CC-BY-4.0"
    },
    {
      "@id": "model.n4a",
      "@type": "File",
      "name": "model.n4a",
      "contentSize": 623095,
      "encodingFormat": "application/zip",
      "sha256": "c1d99c12d44233ddcb43c9643cfb7b0237c308dbee7fdaca406eefea54b3dff0"
    },
    {
      "@id": "pipeline.json",
      "@type": [
        "File",
        "SoftwareSourceCode",
        "ComputationalWorkflow"
      ],
      "name": "pipeline.json",
      "contentSize": 536,
      "encodingFormat": "application/json",
      "sha256": "450ad09edf83f1c5f0691fff24572098580dcbac1067352a1ff343bb420f9526",
      "programmingLanguage": "Python",
      "softwareVersion": "nirs4all 0.10.0",
      "dagml:pipeline_uid": "d0446b12-df2a-4b80-9d3d-4a95c9d4d700",
      "dagml:bundle_fingerprint": "164b03cb496f078d0627449461122de5b110ee0290159eec06f4527ff9850c7a",
      "step": [
        {
          "@type": "HowToStep",
          "position": 1,
          "name": "MinMaxScaler",
          "dagml:operator": "sklearn.preprocessing._data.MinMaxScaler",
          "dagml:role": "preprocessing"
        },
        {
          "@type": "HowToStep",
          "position": 2,
          "name": "FullTrainFoldSplitter",
          "dagml:operator": "<nirs4all.pipeline.execution.refit.executor._FullTrainFoldSplitter>",
          "dagml:role": "split"
        },
        {
          "@type": "HowToStep",
          "position": 3,
          "name": "StandardNormalVariate",
          "dagml:operator": "nirs4all.operators.transforms.scalers.StandardNormalVariate",
          "dagml:role": "preprocessing",
          "citation": {
            "@id": "https://doi.org/10.1366/0003702894202201"
          }
        },
        {
          "@type": "HowToStep",
          "position": 4,
          "name": "StandardScaler",
          "dagml:operator": "sklearn.preprocessing._data.StandardScaler",
          "dagml:role": "target"
        },
        {
          "@type": "HowToStep",
          "position": 5,
          "name": "PLSRegression",
          "dagml:operator": "sklearn.cross_decomposition._pls.PLSRegression",
          "dagml:role": "model",
          "dagml:params": {
            "n_components": 10,
            "max_iter": 100
          },
          "citation": {
            "@id": "https://doi.org/10.1016/S0169-7439(01)00155-1"
          }
        }
      ]
    },
    {
      "@id": "CITATION.cff",
      "@type": "File",
      "name": "CITATION.cff",
      "contentSize": 2207,
      "encodingFormat": "application/x-yaml",
      "sha256": "df9d25d5bd2907889fd0c54d491501b63289f4fa041ba6ad1d1aec86e110d727"
    },
    {
      "@id": "references.bib",
      "@type": "File",
      "name": "references.bib",
      "contentSize": 933,
      "encodingFormat": "application/x-bibtex",
      "sha256": "58ffab5efbc42c01b00a8df942021927b99af6b69f36b2d43103ad460d6b0dca"
    }
  ]
}