R: Rank Swapping

rankSwap {sdcMicro} | R Documentation

## Rank Swapping

### Description

Swapping values within a range so that, first, the correlation structure of original variables are preserved, and second, the values in each record are disturbed. To be used on numeric or ordinal variables where the rank can be determined and the correlation coefficient makes sense.

### Usage

    rankSwap(
      obj,
      variables = NULL,
      TopPercent = 5,
      BottomPercent = 5,
      K0 = NULL,
      R0 = NULL,
      P = NULL,
      missing = NA,
      seed = NULL
    )

### Arguments

`obj` | a `sdcMicroObj-class`-object or a `data.frame`
`variables` | names or index of variables for that rank swapping is applied. For an object of class `sdcMicroObj-class`, all numeric key variables are selected if variables=NULL.
`TopPercent` | Percentage of largest values that are grouped together before rank swapping is applied.
`BottomPercent` | Percentage of lowest values that are grouped together before rank swapping is applied.
`K0` | Subset-mean preservation factor. Preserves the means before and after rank swapping within a range based on K0. K0 is the subset-mean preservation factor such that abs(X_1-X_2<=2*K_0*X_1/sqrt (N_S), where X_1 and X_2 are the subset means of the field before and after swapping, and N_S is the sample size of the subset.
`R0` | Multivariate preservation factor. Preserves the correlation between variables within a certain range based on the given constant R0. We can specify the preservation factor as R_0 = R_1/R_2 where R_1 is the correlation coefficient of the two fields after swapping, and R_2 is the correlation coefficient of the two fields before swapping.
`P` | Rank range as percentage of total sample size. We can specify the rank range itself directly, noted as P, which is the percentage of the records. So two records are eligible for swapping if their ranks, i and j respectively, satisfy abs(i-j)<P*N/100, where N is the total sample size.
`missing` | missing - the value to be used as missing value in the C++ routine instead of NA. If NA, a suitable value is calculated internally. Note that in the returned dataset, all NA-values (if any) will be replaced with this value.
`seed` | Seed.

### Details

Rank swapping sorts the values of one numeric variable by their numerical values (ranking). The restricted range is determined by the rank of two swapped values, which cannot differ, by definition, by more than P percent of the total number of observations. Only positive P, R0 and K0 are used and only one of it must be supplied. If none is supplied, sdcMicro sets parameter eqnR0 to 0.95 internally.

### Value

The rank-swapped data set or a modified `sdcMicroObj-class` object.

### Author(s)

Alexander Kowarik for the interface, Bernhard Meindl for improvements.

For the underlying C++ code: This work is being supported by the International Household Survey Network (IHSN) and funded by a DGF Grant provided by the World Bank to the PARIS21 Secretariat at the Organisation for Economic Co-operation and Development (OECD). This work builds on previous work which is elsewhere acknowledged.

### References

Moore, Jr.R. (1996) Controlled data-swapping techniques for masking public use microdata, U.S. Bureau of the Census Statistical Research Division Report Series, RR 96-04.

Kowarik, A. and Templ, M. and Meindl, B. and Fonteneau, F. and Prantner, B.: Testing of IHSN Cpp Code and Inclusion of New Methods into sdcMicro, in: Lecture Notes in Computer Science, J. Domingo-Ferrer, I. Tinnirello (editors.); Springer, Berlin, 2012, ISBN: 978-3-642-33626-3, pp. 63-77. doi: 10.1007/978-3-642-33627-0_6

### Examples

    data(testdata2)
    ## Not run:
    data_swap <- rankSwap(
      obj = testdata2,
      variables = c("age", "income", "expend", "savings")
    )

    ## for objects of class sdcMicro:
    data(testdata2)
    sdc <- createSdcObj(
      dat = testdata2,
      keyVars = c("urbrur", "roof", "walls", "water", "electcon", "relat", "sex"),
      numVars = c("expend", "income", "savings"),
      w = "sampling_weight")
    sdc <- rankSwap(sdc)

    ## End(Not run)

[Package sdcMicro version 5.6.1 Index]