Расчет индекса Хирша
Из википедии.
То ли я туплю, то ли с алгоритмикой слабовато, но что-то не могу сообразить, как это рассчитать. Может кто подмочь?
- Допустим 7 статей ученого имеется 15, 10 , 7, 4, 0, 0 ,0 ссылка соответсьвенно.Чему равняется индекс h этого ученого? от rafernm, 14 января 2015 года
А что должно быть на входе? Распределение публикаций как функция цитируемости?
Ну это как удобнее. Так то у меня есть таблица в БД, где есть поля entity_id - айдишник цитирующей публикации и field_refer_nid - айдишник цитируемой публикации. По этим данным нужно сделать выборку, чтобы результат был в удобном формате, а затем просчитать, собственно, h-индекс. Мы тут с LoneWolf повозились, что-то придумали, но я пока не уверен, что это верно. Вечерком поделюсь решением.
Код:
// Запрос с выборкой "количеств" цитирований по определенному автору
$result = db_query('
SELECT COUNT(fdfr.field_refer_nid) quotes
FROM {field_data_field_refer} fdfr
INNER JOIN {field_data_field_author} fdfa ON fdfr.field_refer_nid = fdfa.entity_id
WHERE fdfa.field_author_nid = :author_id
GROUP BY fdfr.field_refer_nid
ORDER BY quotes DESC', array(':author_id' => $row->nid))->fetchCol();
// Ну и перебор массива
$h = 0;
foreach ($result as $key=>$record) {
if (($key + 1) > $record) {
$h = $key;
break;
}
}
if ($h == 0) $h = $key+1;
return $h;
$result = db_query('
SELECT COUNT(fdfr.field_refer_nid) quotes
FROM {field_data_field_refer} fdfr
INNER JOIN {field_data_field_author} fdfa ON fdfr.field_refer_nid = fdfa.entity_id
WHERE fdfa.field_author_nid = :author_id
GROUP BY fdfr.field_refer_nid
ORDER BY quotes DESC', array(':author_id' => $row->nid))->fetchCol();
// Ну и перебор массива
$h = 0;
foreach ($result as $key=>$record) {
if (($key + 1) > $record) {
$h = $key;
break;
}
}
if ($h == 0) $h = $key+1;
return $h;
Вроде верно.
1. Располагаете свои статьи в виде списка в порядке убывания цитируемости.
2. Начинаете их пересчитывать. Порядковый номер статьи возрастает, а число цитирований убывает.
3. Как только порядковый номер статьи совпадет с числом цитирований - стоп. Это и есть ваш индекс Хирша.
"Обычно распределение количества публикации N(q) в зависимости от числа их цитирований q в очень грубом приближении соответствует гиперболе: N(q) ≈ const × q−1. Координата точки пересечения этой кривой с прямой N(q) = q и будет равна индексу Хирша."