freeman: Generalized Freeman's segregation index

View source: R/freeman.R

freemanR Documentation

Generalized Freeman's segregation index


Calculate Freeman's segregation index for undirected networks with arbitrary number of groups.


freeman(object, ...)

## S3 method for class 'table'
freeman(object, gsizes = NULL, loops = FALSE, ...)

## S3 method for class 'igraph'
freeman(object, vattr, gsizes = NULL, loops = any(is.loop(object)), ...)

## Default S3 method:
freeman(object, ...)



R object, see Details for available methods


other arguments passed to/from other methods


numeric, optional true distribution of types, see Details


logical, whether loops are allowed


character scalar or any vector of length equal to vcount(object), name of the vertex attribute in object designating the groups or a vector with the attribute itself


Freeman's segregation index (Freeman, 1978) is designed to capture the extent to which the defined groups of vertices tend to have more edges with vertices from the same group than with other groups. Formally, the index compares the observed number of between-group ties with the number of between-group ties that would be expected if ties would be created randomly.

Originally the index has a discontinuity for network and group size configurations that are characterized by the higher number of between-group ties that is expected under a random graph, for which it returns 0 (as originally described by Freeman (1978)). We removed that truncation such that it returns values betweem -1 and 1.

The original Freeman's formulation involves two groups of vertices. Here it is extended to the arbitrary number of groups. The generalization affects the way in which the expected number of between-group edges under pure random graph is calculated, see Bojanowski & Corten (2014) for details.

The function internally calculates the sizes of groups of vertices in the supplied attribute vattr. However, it is possible to override this by specifying "true" type distribution with the gsizes argument. It is assumed to be a table (as returned by table()) or a numeric vector with the group sizes. This may be especially usefull when dealing with large graphs and/or with large number of isolates.

If object is a table it is interpreted as a mixing matrix. Two-dimensional table is interpreted as a contact layer. Three-dimensional table is interpreted as a full mixing matrix m_{ghy} cross-classyfying all dyads, in which g and h correspond to group membership of ego and alter respectively. Layers y=1 and y=2 are assumed to be non-contact and contact layers respectively.

If object is of class "igraph" it is required to supply vattr with the name of the vertex attribute to calculate intermediate mixing matrix.

Method for mixing matrices

Method for "igraph"s


The value of the Freeman's index.


Freeman, Linton C. (1978) Segregation in Social Networks, Sociological Methods & Research 6(4):411–429

Bojanowski, Michał, and Rense Corten. 2014. "Measuring Segregation in Social Networks." Social Networks 39: 14–32. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.1016/j.socnet.2014.04.001")}

See Also

Other segregation measures: assort(), coleman(), ei(), gamix(), orwg(), smi(), ssi()


## White's data from Freeman's article segregation level
freeman(WhiteKinship, "gender")

# using 'more' argument
freeman(WhiteKinship, "gender")

netseg documentation built on July 9, 2023, 6:33 p.m.