Socket
Socket
Sign inDemoInstall

basic-influence-roles

Package Overview
Dependencies
0
Maintainers
1
Versions
3
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    basic-influence-roles

Detect and measure the Basic Influence Role each node holds within a Directed Network.


Version published
Weekly downloads
1
decreased by-90%
Maintainers
1
Install size
14.1 kB
Created
Weekly downloads
 

Readme

Source

Basic Influence Roles (BIRs) · GitHub license PRs Welcome

Detect and measure the basic role of influence each node plays within a directed network.

It supports a raw list of nodes, a Graphology DiGraph, as well as a method to be used in a distributed context for Big Data use cases.

This algorithm returns:

  • The Basic Influence Role (BIR) of a node in a network
  • The BIR's level
  • The influence measure related to the role
  • A global influence measure based on indegree and outdegree
  • The influence ranking of the node

For in-depth theoretical details and more examples, please read the main repository intro.

Index of contents

All useful informations can be found in the following paragraphs:

Installation

npm install basic-influence-roles

How to use it

Import BIRs package

Using import:

import BIRs from 'basic-influence-roles';

Using require:

const BIRs = require('basic-influence-roles');

Detect Basic Influence Roles

Methods to detect BIRs.

From a list of nodes

BIRs.detectFromNodes(nodes=Array[Object]);
Parameters
FieldTypeRequiredDescription
nodes[{...}]yesAn array of all nodes' data.
nodes[i].idanyyesThe name or id of the node.
nodes[i].indegreeintegeryesThe number of incoming connections.
nodes[i].outdegreeintegeryesThe number of outcoming connections.
Example
// The list of nodes with indegree and outdegree
nodes = [
  {id: 1, indegree: 13, outdegree: 5},
  {id: 2, indegree: 3, outdegree: 8},
  {id: 3, indegree: 0, outdegree: 22},
  {id: 4, indegree: 16, outdegree: 19},
  {...}
];
// Measure the influence score and detect the basic influence roles
res = BIRs.detectFromNodes(nodes);

From a Graphology directed graph

Detect roles of a Graphology Directed Graph

BIRs.detectGraphology(G);
Parameters
TypeRequiredDescription
GyesA Graphology directed graph.
Example
const { DirectedGraph } = require('graphology');
// Create a directed graph
const G = new DirectedGraph({multi: false, allowSelfLoops: false});
// Add some nodes and edges
...
// Detect basic influence roles of nodes
res = BIRs.detectGraphology(G);

To use in a distributed context

In case of Big Data or Huge Networks you can distribute the load in this way:

BIRs.detect(indegree, outdegree, nodeCount, data);
Parameters
FieldTypeRequiredDescription
indegreeintegeryesThe number of incoming connections.
outdegreeintegeryesThe number of outcoming connections.
nodeCountintegeryesThe total number of nodes.
databooleannoIf true returns indegree and outdegree.
Example
// Get the total count of nodes
nodeCount = 8586987087;
// For every node in a huge network (use here a distributed loop instead)
nodes.map(([indegree, outdegree]) => {
    // Get basic influence role of every node in network
    return BIRs.detect(indegree, outdegree, nodeCount, true);
});

Output

The output is a list of nodes reporting their id, role, role level, influence measure, influence ranking.

FieldTypeDescription
idanyThe id of node.
rolestringThe basic influence role.
roleInfluencefloatThe influence magnitude related to the node's role.
roleLevelstringThe level of role, a role subcategory.
influencefloatA normalized influence score based on indegree and outdegree.
indegreeintegerThe number of incoming connections.
outdegreeintegerThe number of outcoming connections.
normalizedIndegreefloatThe normalized number of incoming connections.
normalizedOutdegreefloatThe normalized number of outcoming connections.
rankintegerThe normalized influence ranking based on the value of influence field.
Example
[
    {
        id: 4,
        role: 'hub',
        roleInfluence: 0.9210526315789473,
        roleLevel: 'strong',
        influence: 0.9210526315789473,
        indegree: 16,
        outdegree: 19,
        normalizedIndegree: 0.8421052631578947,
        normalizedOutdegree: 1.0,
        rank: 1
    },
    {
        id: 3,
        role: 'emitter',
        roleInfluence: 0.9473684210526315,
        roleLevel: 'strong',
        influence: 0.47368421052631576,
        indegree: 0,
        outdegree: 18,
        normalizedIndegree: 0.0,
        normalizedOutdegree: 0.9473684210526315
        rank: 2
    },
    ...
]

Get the distribution of Basic Influence Roles

Given a list of BIRs, can be calculated the distribution of BIRs in a network, as a normalized frequency between roles and also between their levels.

BIRs.distribution(data=[]);
Parameters
FieldTypeRequiredDescription
data[{...}]yesThe list of roles, the output of BIRs' detection methods.
Example
// Detect basic influence roles of nodes
data = BIRs.detectFromNodes([...])
// Detect the distribution of BIRs
res = BIRs.distribution(data)
Output
{
    reducer: {
        count: 12,
        frequency: 0.12,
        levels: {
            none: {count: 0, frequency: 0.0},
            branch: {count: 0, frequency: 0.0},
            weak: {count: 7, frequency: 0.07},
            strong: {count: 5, frequency: 0.05},
            top: {count: 0, frequency: 0.0}
        }
    },
    amplifier: {
        count: 13,
        frequency: 0.13,
        levels: {
            none: {count: 0, frequency: 0.0},
            branch: {count: 0, frequency: 0.0},
            weak: {count: 12, frequency: 0.12},
            strong: {count: 1, frequency: 0.01},
            top: {count: 0, frequency: 0.0}
        }
    },
    emitter: {
        count: 28,
        frequency: 0.28,
        levels: {
            none: {count: 0, frequency: 0.0},
            branch: {count: 18, frequency: 0.18},
            weak: {count: 10, frequency: 0.1},
            strong: {count: 0, frequency: 0.0},
            top: {count: 0, frequency: 0.0}
        }
    },
    ...
}

Tests

The package is battle tested with a coverage of 98%. Unit tests are inside the folder /test.

At first, install dev requirements:

npm install

To run all unit tests with coverage through nyc, type:

npm test

Citing

If you use this software in your work, please cite it as below:

Miceli, D. (2024). Basic Influence Roles (BIRs) [Computer software]. https://github.com/davidemiceli/basic-influence-roles

Or the BibTeX version:

@software{MiceliBasicInfluenceRoles2024,
  author = {Miceli, Davide},
  license = {MIT},
  month = mar,
  title = {{Basic Influence Roles (BIRs)}},
  url = {https://github.com/davidemiceli/basic-influence-roles},
  year = {2024}
}

License

Basic Influence Roles is an open source project available under the MIT license.

Keywords

FAQs

Last updated on 22 Mar 2024

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc