## Author impact factors

| categories: bibliometrics | tags: | View Comments

In this new letter http://pubs.acs.org/doi/pdf/10.1021/acs.jpclett.5b01527 , the editors suggest a new "Author Impact Factor" as a way to measure the productivity and impact of an author independently of the journals they publish in. The AIF is defined for a year like this: take the paper published in two consecutive years, get the citations for those papers in the following year, and compute:

$$AIF = \frac{Y3 citations for papers_{Y1,Y2}}{Number of papers in Y1, Y2}$$.

Here I do this for myself, using Scopus as the source of papers and citations. My Scopus ID is scopusid:7004212771. First, we need to get the articles published in 2012 and 2013. Here is the query, and the results.

from scopus import *
from scopus.scopus_api import ScopusAbstract

s = ScopusSearch(query='au-id(7004212771) and (pubyear is 2012 or pubyear is 2013)',
fields='dc:identifier')

abstracts = [ScopusAbstract(eid) for eid in s.EIDS
if ScopusAbstract(eid).aggregationType == 'Journal']

print('<ol>')
for ab in abstracts:
print('<li>' + ab.html + '</li>')
print('</ol>')


Now, we need to get the citing articles for each one of these, and only count them if they were published in 2014 or earlier. Each abstract has a cite_link in it, which points to the API url to get the articles citing it. Let's see what we are up against here. First, we see how many citations there are in total.

from scopus import *
from scopus.scopus_api import get_encoded_text, ScopusAbstract
from scopus.my_scopus import MY_API_KEY

s = ScopusSearch(query='au-id(7004212771) and (pubyear is 2012 or pubyear is 2013)',
fields='dc:identifier')

abstracts = [ScopusAbstract(eid) for eid in s.EIDS
if ScopusAbstract(eid).aggregationType == 'Journal']

import requests
import xml.etree.ElementTree as ET

TOTAL = 0
for ab in abstracts:
'X-ELS-APIKey': MY_API_KEY}).text.encode('utf-8')

results = ET.fromstring(xml)
N = int(get_encoded_text(results, 'opensearch:totalResults'))
TOTAL += N
print N

print '{} total citations'.format(TOTAL)
print TOTAL / float(11)

4
9
5
18
5
98
10
50
4
0
16
219 total citations
19.9090909091


Not bad looking, but some of those citations might be from 2015, and some of them might be self-citations. Let's see about removing those. Usually, there are just 25 results per query, and some of the ones above have more than 25 results, so we will have to run a loop to get them all. For now, we just remove the citations from papers newer than the desired year It is a little tougher to remove the self-citations; that would require another request to Scopus to get authors and look for matches.

Here is some code that calculates my AIF for 2012, 2013 and 2014. The only issue I currently have with this code is the use of the abstract coverDate to get the publication year. I don't have a better way to do this, but I have seen a lot of cover dates that start on Jan 1 of a year, and that seems improbable to me. On the other hand, that might reflect a lot of submissions near the end of a year that just make it into the next one.

from scopus import *
from scopus.scopus_api import get_encoded_text, ns, ScopusAbstract
from scopus.my_scopus import MY_API_KEY
import requests
import xml.etree.ElementTree as ET

QUERY = 'au-id(7004212771) and ((pubyear is {0}) or (pubyear is {1}))'

for YEAR in [2012, 2013, 2014]:

print(QUERY.format(YEAR - 2, YEAR - 1))
s = ScopusSearch(query=QUERY.format(YEAR - 2, YEAR - 1),
fields='dc:identifier')

abstracts = [ScopusAbstract(eid) for eid in s.EIDS
if ScopusAbstract(eid).aggregationType == 'Journal']
print '{0}-{1} papers'.format(YEAR - 2, YEAR - 1)
print ' '.join(['doi:{}'.format(ab.doi) for ab in abstracts])
TOTAL = 0 # citation count

for ab in abstracts:
'X-ELS-APIKey': MY_API_KEY}).text.encode('utf-8')

results = ET.fromstring(xml)
N = int(get_encoded_text(results, 'opensearch:totalResults'))

start = 0
count = 25

while N > 0:
'X-ELS-APIKey': MY_API_KEY},
params={'count': count,
'start': start}).text.encode('utf-8')
results = ET.fromstring(xml)

start += count
N -= count

for el in results.findall('atom:entry/prism:coverDate', ns):
year = int(el.text.split('-')[0])
if year <= YEAR:
TOTAL += 1

s = 'Author Impact Factor ({1}) = {0:1.3f} ({2} papers, {3} citations)\n'
print(s.format(float(TOTAL) / len(abstracts),
YEAR,
len(abstracts),
TOTAL))

au-id(7004212771) and ((pubyear is 2010) or (pubyear is 2011))
2010-2011 papers
doi:10.1063/1.3631948 doi:10.1002/cctc.201000397 doi:10.1021/cs200039t doi:10.1063/1.3561287 doi:10.1002/cssc.201000056 doi:10.1149/1.3432440 doi:10.1103/PhysRevB.82.045414 doi:10.1016/j.fuel.2009.11.036 doi:10.1080/08927022.2010.481794
Author Impact Factor (2012) = 9.667 (9 papers, 87 citations)

au-id(7004212771) and ((pubyear is 2011) or (pubyear is 2012))
2011-2012 papers
doi:10.1021/ie301419q doi:10.1016/j.pecs.2012.03.003 doi:10.1063/1.4746117 doi:10.1021/cs3002644 doi:10.1111/j.1551-2916.2012.05236.x doi:10.1007/s11244-012-9808-0 doi:10.1021/ie300452c doi:10.1063/1.3631948 doi:10.1002/cctc.201000397 doi:10.1021/cs200039t doi:10.1063/1.3561287
Author Impact Factor (2013) = 14.000 (11 papers, 154 citations)

au-id(7004212771) and ((pubyear is 2012) or (pubyear is 2013))
2012-2013 papers
doi:10.1016/j.ijggc.2013.06.020 doi:10.1021/ie400582a doi:10.1016/j.molstruc.2013.01.046 doi:10.1039/c2sc21601a doi:10.1021/ie301419q doi:10.1016/j.pecs.2012.03.003 doi:10.1063/1.4746117 doi:10.1021/cs3002644 doi:10.1111/j.1551-2916.2012.05236.x doi:10.1007/s11244-012-9808-0 doi:10.1021/ie300452c
Author Impact Factor (2014) = 14.000 (11 papers, 154 citations)


Just a reminder of what these AIFs are. It is the ratio of the number of citations papers from two consecutive years (Y1 and Y2) have received in the next year Y3. These numbers suggest that on average my recent papers are getting 14 citations a year. I printed the DOIs above because I was skeptical that my AIF in 2013 and 2014 were identical, but it seems clear the papers are different, and it must be a coincidence that the number of citations is the same (I am still a bit skeptical though ;).

Is this a useful measure of author impact? That would take some study. The way this is defined it is a short-term impact which might be biased to some fields that have more than a three year time-frame before citations build up. That is fixed easily enough by increasing the window of publications, and/or counting citations two years out, for example. It is interesting this decouples the impact from the journals the articles are published in. I think this says I should be submitting my papers to higher impact journals though! My AIF exceeds the JIF of the journals I usually publish in.