本文充斥臆测内容,并非科学研究,请在教授陪同下阅读。

研究背景

最近要申请一个奖,少不了要看自己的发表论文情况。我已经把自己的论文整理到谷歌学术了,直接去那里看就可以。

呀!我的引用数已经超过一百了!前几天我看的时候它还停留在90多就停滞不前了,没想到这么快就突破了100,立即进入无限自我陶醉的状态。

我的被引数

盯着自己的数据,突然发现这数据还是挺有规律的,立马想到一个问题:能否预测未来的引用数呢?

预知未来

研究方法

这里我用一段JavaScript代码获取每年的引用数[1]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
var get_years = document.querySelectorAll("span.gsc_g_t");
var get_citations = document.querySelectorAll("span.gsc_g_al");

var years = [];
var citations = [];

for (var i = 0; i < get_years.length; ++i) {
years.push(get_years[i].textContent);
}

for (var i = 0; i < get_citations.length; ++i) {
citations.push(get_citations[i].textContent);
}

var out_years = "";

out_years += "["

years.forEach(function (v) {
out_years += v;
out_years += " ";
});

out_years += "]"

var out_citations = "";

out_citations += "["

citations.forEach(function (v) {
out_citations += v;
out_citations += " ";
});

out_citations += "]"

console.log(out_years);
console.log(out_citations);

用法是在形如https://scholar.google.com/citations?hl=en&user=换成你的&view_op=citations_histogram的页面执行这段代码,数据复制粘贴到Octave里分析。

我还找来Lorenzo Stella的引用数进行分析。虽然他做的工作和我不一样,但我看过他的很多篇文献,觉得以他为样本进行分析是合理的。

统计分析

我觉得我的引用情况可以用$y = ax^2 + bx +c$来描述。对于这种多项式Octave可以很简单的用polyfit进行拟合:

1
2
3
4
5
6
# 手动删掉最后一年的。
years = [2011 2012 2013 2014 2015];
citations = [1 8 12 15 37];

my = polyfit(years, citations, 2);
display(my); # -> >> 2.0714e+000 -8.3317e+003 8.3779e+006

就是说,在$y$年时我的引用数$C = 2.0714 y^2 - 8.3317 \times 10^3 y + 8.3779 \times 10^6$。Octave里可以直接根据这一公式来求后面的值,也就是预测之后的引用数。根据这一公式,2016年和2017年我的引用数分别为:

1
2
prediction = polyval(my, [2016 2017]);
display(prediction); # -> 52.800 75.200

就是说今年和明年我的引用数应该是53和75。让我们看看理论预测的结果是否可靠罢。

2017-1-6 Update: 2016年的被引数是54,超过了预期,和预测相符的非常好。

等等,其实我们完全可以用其他研究者的例子来研究。这里我把上面的过程写成了一个函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 删掉了两年的数据。
years = [1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014];
citations = [7 11 19 30 35 55 44 54 89 119 129 195 222 182 277 303 295];

function [p, s, mu] = pred_citations(years, citations, n, pred_years)
[p, s, mu] = polyfit(years, citations, n);
printf("\n");
printf("C = "); polyout(p, "y");
printf("%i ", pred_years); printf("-> ");
printf("%i ", polyval(p, pred_years, s, mu));
printf("\n");
endfunction

pred_citations(years, citations, 2, [2015 2016]);
# C = 27.345*y^2 + 99.745*y^1 + 95.793
# 2015 2016 -> 360.426 400.554

就是说2015和2016年的引用数是360和401,仅从2015年的数据看还是挺准的(他2015年实际的数值是353!)。

结论

  1. 可以预测。
  2. 预测性有赖研究者的「发育」情况。
  3. 期待对更多人进行测试。
  4. 我想把这东西做成个网页供其他人使用。

  1. 原来NodeList和Array不一样,不能用for...in和forEach而应该用for...of