Data Processing
The RDSdata function is the foundational function for processing respondent-driven sampling (RDS) survey data. It reconstructs recruitment chains, calculates wave numbers, identifies seeds, and imputes missing degree values by tracking how participants recruited one another through coupon redemption. Use RDSdata before applying any estimation or plotting functions from the RDSTools package.
Usage
RDSdata(data, unique_id, redeemed_coupon, issued_coupons, degree, zero_degree="hotdeck", NA_degree="hotdeck")
Arguments
- data
pandas.DataFrame. Should contain an ID variable for sample case, corresponding redeemed coupon code, and issued coupon code.
- unique_id
str. The column name of the column with respondent IDs.
- redeemed_coupon
str. The column name of the column with coupon codes redeemed by respondents when participating in the study.
- issued_coupons
list of str. The column name of the column with coupon codes issued to respondents (i.e., coupons given to respondents to recruit their peers). If multiple coupons are issued, list all coupon code variables.
- degree
str. The column name of the column with degree (i.e., network size) reported by respondents.
- zero_degree
str, optional. Used to set the method for handling zero values in the ‘degree’ variable. Three available methods are: mean imputation, median imputation, and hotdeck imputation. The default is hotdeck.
mean: Impute all positions that require imputation with the average value of all non-zero and non-missing values from the input degree.
median: Impute all positions that require imputation with the median value of all non-zero and non-missing values from the input degree.
hotdeck: For each position needing imputation, perform random sampling with replacement from all non-zero and non-missing values in the input degree, where each value has equal probability of being selected. The sampled value is then used as the imputed value.
- NA_degree
str, optional. Used to set the method for handling missing values in the ‘degree’ variable. Three available methods are: mean imputation, median imputation, and hotdeck imputation. The default is hotdeck.
mean: Impute all positions that require imputation with the average value of all non-zero and non-missing values from the input degree.
median: Impute all positions that require imputation with the median value of all non-zero and non-missing values from the input degree.
hotdeck: For each position needing imputation, perform random sampling with replacement from all non-zero and non-missing values in the input degree, where each value has equal probability of being selected. The sampled value is then used as the imputed value.
Returns
- pandas.DataFrame
A data frame with all original variables, some renamed, and new RDS-related information:
ID (str): Renamed unique_id
R_CP (str): Renamed redeemed coupon ID
T_CP1 - T_CPn (str): Renamed issued_coupon
DEGREE (original type): Original degree variable
DEGREE_IMP (float): Degree variable with missing 0 and/or missing values treated
WEIGHT (float): Weight variable calculated as 1/DEGREE_IMP
WAVE (int): Indicates the wave a node was introduced into the data. The value of Seed is 0
S_ID (str): Indicates the ID of the seed corresponding to the node. For seeds, the value is the same as the value of ID
R_ID (str): Indicates the ID of the recruiter node. For seeds, the value is NA because there is no recruiter for seeds among respondents
SEED (int): Values are only 0 and 1, they are used to indicate whether the node is seed or not. If it is seed, the value is 1, if not, it is 0
CP_ISSUED (int): The count of issued coupons to the respondent
CP_USED (int): The count of used coupons (i.e., coupons redeemed by recruits) among the issued coupons
Example
from RDSTools import load_toy_data, RDSdata
# Using the built-in toy dataset
data = load_toy_data()
rds_data = RDSdata(
data=data,
unique_id="ID",
redeemed_coupon="CouponR",
issued_coupons=["Coupon1", "Coupon2", "Coupon3"],
degree="Degree"
)
# With custom imputation methods
rds_data = RDSdata(
data=data,
unique_id="ID",
redeemed_coupon="CouponR",
issued_coupons=["Coupon1", "Coupon2", "Coupon3"],
degree="Degree",
zero_degree="median",
NA_degree="mean"
)