mo <- module_run(psychsci[1:10], "ethics_check")
mo$traffic_light#> [1] "red"
mo$summary_text#> [1] "3 of 10 papers appeared to involve live data collection and lacked an ethics approval statement."
The ethics_check module searches a paper for a statement that the research received ethics approval — for example from an Institutional Review Board (IRB), a Research Ethics Committee, or an animal-care committee — or that it was explicitly exempted or waived. Reporting ethics approval is expected for studies involving human or animal participants.
The module recognises a wide range of committee names and approval phrasing across several languages and conventions, including:
Not every paper needs an ethics statement — theoretical work, simulations, reviews, meta-analyses, and secondary analyses of existing data usually do not. So the module does not simply flag every paper that lacks an approval statement. Instead it first judges whether the paper appears to involve live data collection from human or animal participants, and only flags a missing statement for those papers.
This judgment is made by an internal helper that searches the text for sentences signalling that data were collected directly from participants — for example:
The patterns are deliberately conservative: they require explicit participant- or recruitment-language rather than generic words like “sample”, so that papers re-analysing existing survey data or running computational experiments are not mistakenly flagged. The result is stored in the needs_ethics column of the summary table, and the traffic light only turns red for papers where needs_ethics is TRUE and no approval statement was found.
This module is fully offline — it uses only regular expressions, so all the code below runs with just the Metacheck package.
The module only flags a missing statement when a paper appears to involve live data collection (so re-analyses of existing data are not penalised). We run it across the first ten papers of the built-in psychsci dataset.
mo <- module_run(psychsci[1:10], "ethics_check")
mo$traffic_light#> [1] "red"
mo$summary_text#> [1] "3 of 10 papers appeared to involve live data collection and lacked an ethics approval statement."
The summary_table has one row per paper, with an ethics_approved flag and the matched statement(s):
| paper_id | ethics_approved |
|---|---|
| 0956797613520608 | TRUE |
| 0956797614522816 | FALSE |
| 0956797614527830 | TRUE |
| 0956797614557697 | TRUE |
| 0956797614560771 | FALSE |
| 0956797614566469 | FALSE |
| 0956797615569001 | FALSE |
| 0956797615569889 | TRUE |
| 0956797615583071 | TRUE |
| 0956797615588467 | TRUE |
Papers that report approval show the exact sentence the module matched — useful for confirming it found a genuine statement:
approved <- mo$summary_table[mo$summary_table$ethics_approved %in% TRUE, ]
approved$ethics_statements[[1]]#> [1] "The ethics committee for the region of Midtjylland, Denmark, approved the experiment."
Papers that appear to collect data but contain no approval statement are the ones to check. These are what turn the traffic light red:
#> [1] "0956797614522816" "0956797614560771" "0956797615569001"
A missing statement is not proof that approval was never obtained — many authors simply omit it — but it flags papers where a reviewer should confirm the ethics reporting.
ethics_check takes only the paper argument.
Because the module matches committee names and approval phrasing with regular expressions, it can miss unusually worded statements, and may occasionally match a sentence that mentions ethics for another reason. As with every module, treat the output as a prompt for human judgement rather than a verdict.