{"id":45368948,"url":"https://github.com/cjabradshaw/epsilonindex","last_synced_at":"2026-02-21T15:19:54.145Z","repository":{"id":56496367,"uuid":"306547733","full_name":"cjabradshaw/EpsilonIndex","owner":"cjabradshaw","description":"A function to assess the ε-index of a researcher's relative citation performance","archived":false,"fork":false,"pushed_at":"2021-09-20T23:14:05.000Z","size":410,"stargazers_count":7,"open_issues_count":2,"forks_count":2,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-09-10T03:06:55.725Z","etag":null,"topics":["academia","bibliometrics","career-stage","citations","gender","h-index","m-quotient","performance","ranking"],"latest_commit_sha":null,"homepage":"","language":"R","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cjabradshaw.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-10-23T06:25:46.000Z","updated_at":"2025-06-01T21:52:04.000Z","dependencies_parsed_at":"2022-08-15T19:50:34.937Z","dependency_job_id":null,"html_url":"https://github.com/cjabradshaw/EpsilonIndex","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/cjabradshaw/EpsilonIndex","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cjabradshaw%2FEpsilonIndex","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cjabradshaw%2FEpsilonIndex/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cjabradshaw%2FEpsilonIndex/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cjabradshaw%2FEpsilonIndex/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cjabradshaw","download_url":"https://codeload.github.com/cjabradshaw/EpsilonIndex/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cjabradshaw%2FEpsilonIndex/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29684384,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-21T14:31:22.911Z","status":"ssl_error","status_checked_at":"2026-02-21T14:31:22.570Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["academia","bibliometrics","career-stage","citations","gender","h-index","m-quotient","performance","ranking"],"created_at":"2026-02-21T15:19:53.471Z","updated_at":"2026-02-21T15:19:54.139Z","avatar_url":"https://github.com/cjabradshaw.png","language":"R","funding_links":[],"categories":[],"sub_categories":[],"readme":"# \u003ci\u003eε\u003c/i\u003e-index\n\n\u003cimg align=\"right\" src=\"epsilonIndex logo.png\" alt=\"ε-index\" width=\"200\" style=\"margin-top: 20px\"\u003e\n\n\u003ca target=\"_blank\" href=\"https://cran.r-project.org\"\u003eR\u003c/a\u003e function to calculate the \u003ci\u003eε\u003c/i\u003e-index of a researcher's relative citation performance\n\nProf Corey J. A. Bradshaw \u003cbr\u003e\n\u003ca href=\"http://globalecologyflinders.com\" target=\"_blank\"\u003eGlobal Ecology\u003c/a\u003e, \u003ca href=\"http://flinders.edu.au\" target=\"_blank\"\u003eFlinders University\u003c/a\u003e, Adelaide, Australia \u003cbr\u003e\nSeptember 2021 \u003cbr\u003e\n\u003ca href=mailto:corey.bradshaw@flinders.edu.au\u003ee-mail\u003c/a\u003e \u003cbr\u003e\n\nExisting citation-based indices used to rank research performance do not permit a fair comparison of researchers among career stages or disciplines, nor do they treat women and men equally. We designed the ε-index, which is simple to calculate, based on open-access data, corrects for disciplinary variation, can be adjusted for career breaks, and sets a sample-specific threshold above and below which a researcher is deemed to be performing above or below expectation.\n\nCode accompanies the article:\n\n\u003cstrong\u003e\u003ca href=\"https://globalecologyflinders.com/people/#CJAB\" target=\"_blank\"\u003eBRADSHAW, CJA\u003c/a\u003e, \u003ca href=\"https://www.chalkerlab.com/jmc\" target=\"_blank\"\u003eJM CHALKER\u003c/a\u003e, \u003ca href=\"https://stefanicrabtree.com/about-stefani/\" target=\"_blank\"\u003eSA CRABTREE\u003c/a\u003e, \u003ca href=\"https://researchnow.flinders.edu.au/en/persons/bart-eijkelkamp\" target=\"_blank\"\u003eBA EIJKELKAMP\u003c/a\u003e, \u003ca href=\"https://en.wikipedia.org/wiki/John_A._Long\" target=\"_blank\"\u003eJA LONG\u003c/a\u003e, \u003ca href=\"https://www.flinders.edu.au/people/justine.smith\" target=\"_blank\"\u003eJR SMITH\u003c/a\u003e, \u003ca href=\"https://staffportal.curtin.edu.au/staff/profile/view/K.Trinajstic/\" target=\"_blank\"\u003eK TRINAJSTIC\u003c/a\u003e, \u003ca href=\"https://researchnow.flinders.edu.au/en/persons/vera-weisbecker\" target=\"_blank\"\u003eV WEISBECKER\u003c/a\u003e. 2021. \u003ca href=\"http://doi.org/10.1371/journal.pone.0257141\"\u003eA fairer way to compare researchers at any career stage and in any discipline using open-access citation data\u003c/a\u003e. \u003ci\u003e\u003cstrong\u003ePLoS One\u003c/strong\u003e\u003c/i\u003e 16(9): e0257141. doi:\u003ca href=\"http://doi.org/10.1371/journal.pone.0257141\"\u003e10.1371/journal.pone.0257141\u003c/a\u003e\u003c/strong\u003e\n\n-- \u003cbr\u003e\n\u003cstrong\u003eDIRECTIONS\u003c/strong\u003e\n\n1. Create a \u003ca href=\"https://en.wikipedia.org/wiki/Comma-separated_values\"\u003e.csv\u003c/a\u003e file of \u003cstrong\u003eexactly the same format\u003c/strong\u003e as the example file in this repository ('\u003ca href=\"https://github.com/cjabradshaw/EpsilonIndex/blob/main/datasample.csv\"\u003edatasample.csv\u003c/a\u003e'):\n\n - \u003cstrong\u003eCOLUMN 1\u003c/strong\u003e: \u003ci\u003epersonID\u003c/i\u003e — any character identification of an individual researcher (can be a name)\n - \u003cstrong\u003eCOLUMN 2\u003c/strong\u003e: \u003ci\u003egender\u003c/i\u003e — researcher's gender (\"F\" or \"M\")\n - \u003cstrong\u003eCOLUMN 3\u003c/strong\u003e: \u003ci\u003ei10\u003c/i\u003e — researcher's i10 index (# papers with ≥ 10 citations); \u003cstrong\u003emust be \u003e 0\u003c/strong\u003e\n - \u003cstrong\u003eCOLUMN 4\u003c/strong\u003e: \u003ci\u003eh\u003c/i\u003e — researcher's \u003ci\u003eh\u003c/i\u003e-index\n - \u003cstrong\u003eCOLUMN 5\u003c/strong\u003e: \u003ci\u003emaxcit\u003c/i\u003e — number of citations of researcher's most cited peer-reviewed paper\n - \u003cstrong\u003eCOLUMN 6\u003c/strong\u003e: \u003ci\u003efirstyrpub\u003c/i\u003e — the year of the researcher's first published peer-reviewed paper\n\n2. Import the sample .csv file, or your own following the format indicated above (make sure first to specify the directory in which 'datasample.csv' resides using the 'setwd()' command):\n  \n        setwd(\"/path\") # where /path is the directory path on your machine\n        example.dat \u003c- read.csv(\"datasample.csv\", header=T) \n\n3. Alternatively, you can automatically harvest the necessary citation data from Google Scholar using the 'get.profile.func.R' function, which produces a file that can be called directly by the 'epsilon.index.func.R':\n\n    \u003ci\u003ei\u003c/i\u003e. Predefine a Google Scholar ids vector (12-character user ID from \u003ca href=\"https://scholar.google.com.au/citations?hl=en\u0026user=1sO0O3wAAAAJ\"\u003escholar.google.com\u003c/a\u003e), e.g.,\n\n         ids \u003c- c(\"1sO0O3wAAAAJ\",\"ZBUju2QAAAAJ\",\"oGAui-IAAAAJ\",\"cpJnEYIAAAAJ\",\"ptDEg44AAAAJ\",\"PJYrOvQAAAAJ\",\"4UxbBYIAAAAJ\") \n\n    \u003ci\u003eii\u003c/i\u003e. Then define a 'genders' vector of the same length, e.g.,\n\n         genders \u003c- c(\"M\",\"M\",\"F\",\"M\",\"M\",\"F\",\"F\")\n\n    \u003ci\u003eiii\u003c/i\u003e. Load get.profile.func\n\n    \u003ci\u003eiv\u003c/i\u003e. Define an input file that the epsilon.index.func will use, e.g.,\n\n         example.dat \u003c- getProfiledatFunc(ids, genders)\n\n      \u003cstrong\u003eNote\u003c/strong\u003e: The estimation of the first year of publication (\u003ci\u003eY\u003c/i\u003e\u003csub\u003e1\u003c/sub\u003e) can return errors because the function does not differentiate peer-reviewed and non-peer-reviewed entries in Google Scholar, nor can it avoid clearly erroneous entries in a researcher's publication history. We recommend that all harvested values for the year of first publication be checked manually for each researcher in the sample. A case in point is id=ptDEg44AAAAJ that returns \u003ci\u003eY\u003c/i\u003e\u003csub\u003e1\u003c/sub\u003e = 1791, but the true year of first publication for this researcher is 1982. \n\n4. Load the function ('epsilon.index.func') in R by submitting the entire function code (\u003ca href=\"https://github.com/cjabradshaw/EpsilonIndex/blob/main/epsilon.index.R\"\u003elines 20 to 212\u003c/a\u003e) to the R console.\n\n5. Simply run the function as follows:\n\n        epsilonIndexFunc(dat.samp=example.dat, bygender=c('no','yes'), sort.index=c('e', 'd', 'ep', 'dp'))\n\nwhere 'bygender' indicates whether you want to calculate the gender-debiased index, and 'sort.out' is a sorting option for the final results table based on desired index (default = 'e')\n\n\u003ci\u003epossible values\u003c/i\u003e: 'e' = pooled; 'ep' = normalised; 'd' = gender-debiased; 'dp' = normalised gender-debiased\n\nIf there are insufficient individuals per gender to estimate a gender-specific index, we recommmend selecting bygender='no' and not using or sorting based on the gender-debiased index (option 'd'). If the individuals in the sample are not all in the same approximate discipline, we recommend not using or sorting based on either of the two normalised indices (options 'ep' or 'dp').\n\nThe output includes the following columns:\n\n- \u003ci\u003eperson\u003c/i\u003e: researcher's ID (specified by user)\n- \u003ci\u003egender\u003c/i\u003e: F=female; M=male\n- \u003ci\u003eyrs.publ\u003c/i\u003e: number of years since first peer-reviewed article\n- \u003ci\u003egender.eindex\u003c/i\u003e: \u003ci\u003eε\u003c/i\u003e-index relative to others of the same gender in the sample\n- \u003ci\u003eexpectation\u003c/i\u003e: whether above or below expectation based on chosen index (default is 'e' = pooled index)\n- \u003ci\u003em-quotient\u003c/i\u003e: \u003ci\u003eh\u003c/i\u003e-index ÷ yrs.publ\n- \u003ci\u003eh-index\u003c/i\u003e: \u003ci\u003eh\u003c/i\u003e-index\n- \u003ci\u003edebiased.e.prime.index\u003c/i\u003e: scaled gender.eindex (gender \u003ci\u003eε\u003c/i\u003e′-index)\n- \u003ci\u003egender.rank\u003c/i\u003e: rank from gender.eindex (1 = highest)\n- \u003ci\u003ernk.debiased\u003c/i\u003e: gender-debiased rank (1 = highest)\n- \u003ci\u003epooled.eindex\u003c/i\u003e: \u003ci\u003eε\u003c/i\u003e-index generated from the entire sample (not gender-specific)\n- \u003ci\u003ee.prime.index\u003c/i\u003e: scaled pooled.eindex (\u003ci\u003eε\u003c/i\u003e′-index)\n- \u003ci\u003epooled.rnk\u003c/i\u003e: rank from pooled.eindex (1 = highest)\n\n\nand\n\nif sort.index = 'ep':\n\n- \u003ci\u003eeprime.rnk\u003c/i\u003e: rank from scaled pooled.eindex (\u003ci\u003eε\u003c/i\u003e′-index)\n\nor if sort.index = 'dp':\n\n- \u003ci\u003eeprime.debiased.rnk\u003c/i\u003e: rank from scaled gender.eindex (gender \u003ci\u003eε\u003c/i\u003e′-index)\n\n6. You can easily export the output to a file like this:\n\n        out \u003c- epsilon.index.func(dat.samp=example.dat, sort.index=c('e', 'd', 'ep', 'dp'))\n        write.table(out,file=\"rank.output.csv\",sep=\",\",dec = \".\", row.names = F,col.names = TRUE)\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcjabradshaw%2Fepsilonindex","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcjabradshaw%2Fepsilonindex","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcjabradshaw%2Fepsilonindex/lists"}