This appears to be the algorithm:
- Order publications by decreasing number of citations
- Assign a weight to each publication as the inverse of the number of authors (e.g., 1 author paper = 1; 2 author paper = 0.5; 3 author paper = 0.33, etc.)
- Take the cumulative sum of weights while this cumulative sum remains less than or equal to the number of citations for a given paper. This is the hm-index.
So, in R code, it might look like this:
hmindex <- function(citations, authors) {
dat <- data.frame(citations = citations, authors = authors)
dat <- dat[order(dat$citations, decreasing = TRUE), ]
dat$weights <- 1/dat$authors
dat$cweights <- cumsum(dat$weights)
list(
citetab = dat,
hmindex = dat[sum(dat$cweights <= dat$citations), "cweights"])
}
And here's an example using the data from the paper of an academic with 8 papers each with a certain number of citations and a certain number of authors.
citetab <- data.frame(
citations = c(16,15,14,12, 10, 3,3,2),
authors = c(2,2,3,3,2,2,3,1))
hmindex(citetab$citations, citetab$authors)
It produces the following output:
> hmindex(citetab$citations, citetab$authors)
$citetab
citations authors weights cweights
1 16 2 0.5000000 0.500000
2 15 2 0.5000000 1.000000
3 14 3 0.3333333 1.333333
4 12 3 0.3333333 1.666667
5 10 2 0.5000000 2.166667
6 3 2 0.5000000 2.666667
7 3 3 0.3333333 3.000000
8 2 1 1.0000000 4.000000
$hmindex
[1] 3
I.e., the researcher's h-index is 5 (because they have 5 papers with at least 5 citations. But their hm-index is 3 (i.e., largest cumulative weight that is greater than or equal to paper citation count).
Some comments:
- So it does not distinguish between different author positions (i.e., 1st or last author are weighted more in some metrics).
- If a researcher only publishes sole author papers, h-index equals hm-index. In all other cases hm-index will be less than h-index.