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.
A paper that states that no human or animal subjects took part does not need an ethics statement, whatever participant phrase it also contains. The module looks for statements such as “no human subjects were involved”, “did not involve human participants”, “no animals nor human participants were involved”, or that people took part “not as subjects” (as in a paper whose professionals “described their own work as collaborators in the projects, not as subjects recruited for a study”, where “subjects recruited” alone would count as recruiting participants). Such a statement is recorded in the states_no_participants column of the summary table, and the report quotes it. A negation near a participant phrase is not enough on its own: “No participants were minors” and “No participants were excluded” describe studies that did have participants, so the statement must name human or animal subjects, or say “not as subjects”.
The result is stored in the needs_ethics column of the summary table, which is FALSE for a paper that states no participants took part. 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.
This module also runs on Metacheck’s website: upload a paper under Run Metacheck on a Paper, where it is one of the default checks under Checks. The Docker installation offers the same website on your own computer. The website runs the module with its default settings; to change them, run it in R as below.
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 psychsci corpus (see Using the Paper Database Corpora).
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, whether the paper appears to need a statement (needs_ethics), whether it states that no participants took part (states_no_participants), and the matched statement(s):
| paper_id | ethics_approved | needs_ethics | states_no_participants |
|---|---|---|---|
| 0956797613520608 | TRUE | TRUE | FALSE |
| 0956797614522816 | FALSE | TRUE | FALSE |
| 0956797614527830 | TRUE | TRUE | FALSE |
| 0956797614557697 | TRUE | TRUE | FALSE |
| 0956797614560771 | FALSE | TRUE | FALSE |
| 0956797614566469 | FALSE | FALSE | FALSE |
| 0956797615569001 | FALSE | TRUE | FALSE |
| 0956797615569889 | TRUE | TRUE | FALSE |
| 0956797615583071 | TRUE | TRUE | FALSE |
| 0956797615588467 | TRUE | TRUE | FALSE |
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.