Taylor-based Estimation – Samplics Documentation
Description: Documentation of the Python package Samplics for statistical design and analysis of complex samples

# Taylor-based Estimation

Samplics’s class TaylorEstimator uses linearization methods to estimate the variance of population parameters.

    from samplics.datasets import load_nhanes2
    from samplics.estimation import TaylorEstimator

    from samplics.utils.types import PopParam

    # Load Nhanes sample data
    nhanes2_dict = load_nhanes2()
    nhanes2 = nhanes2_dict["data"]

    nhanes2.head(15)

| stratid | psuid | race | highbp | highlead | zinc | diabetes | finalwgt
--- | --- | --- | --- | --- | --- | --- | --- | ---
0 | 1 | 1 | 1 | 0 | NaN | 104.0 | 0.0 | 8995
1 | 1 | 1 | 1 | 0 | 0.0 | 111.0 | 0.0 | 25964
2 | 1 | 1 | 3 | 0 | NaN | 102.0 | 0.0 | 8752
3 | 1 | 1 | 1 | 1 | NaN | 109.0 | 1.0 | 4310
4 | 1 | 1 | 1 | 0 | 0.0 | 99.0 | 0.0 | 9011
5 | 1 | 1 | 1 | 1 | NaN | 101.0 | 0.0 | 4310
6 | 1 | 1 | 1 | 0 | 0.0 | 93.0 | 0.0 | 3201
7 | 1 | 1 | 1 | 1 | NaN | 83.0 | 0.0 | 25386
8 | 1 | 1 | 1 | 0 | NaN | 98.0 | 0.0 | 12102
9 | 1 | 1 | 2 | 0 | 0.0 | 98.0 | 0.0 | 4312
10 | 1 | 1 | 1 | 1 | NaN | 92.0 | 0.0 | 4031
11 | 1 | 1 | 2 | 0 | 0.0 | 90.0 | 0.0 | 3628
12 | 1 | 1 | 1 | 0 | NaN | 101.0 | 0.0 | 28590
13 | 1 | 1 | 1 | 0 | 0.0 | NaN | 0.0 | 22754
14 | 1 | 1 | 2 | 0 | 1.0 | 123.0 | 0.0 | 7119

Using samplics, we can estimate the average level of zinc in the blood using the following

    zinc_mean_str = TaylorEstimator(PopParam.mean)
    zinc_mean_str.estimate(
        y=nhanes2["zinc"],
        samp_weight=nhanes2["finalwgt"],
        stratum=nhanes2["stratid"],
        psu=nhanes2["psuid"],
        remove_nan=True,
    )

    print(zinc_mean_str)

    SAMPLICS - Estimation of Mean

    Number of strata: 31
    Number of psus: 62
    Degree of freedom: 31

         MEAN       SE       LCI       UCI       CV
    87.182067 0.494483 86.173563 88.190571 0.005672

The results of the estimation are stored in the dictionary `zinc_mean_str`. The users can covert the main estimation information into a pd.DataFrame by using the method `to_dataframe()`.

    zinc_mean_str.to_dataframe()

| _param | _estimate | _stderror | _lci | _uci | _cv
--- | --- | --- | --- | --- | --- | ---
0 | PopParam.mean | 87.182067 | 0.494483 | 86.173563 | 88.190571 | 0.005672

The method `to_dataframe()` is more useful for domain estimation by producing a table where which row is a level of the domain of interest, as shown below.

    zinc_mean_by_race = TaylorEstimator(PopParam.mean)
    zinc_mean_by_race.estimate(
        y=nhanes2["zinc"],
        samp_weight=nhanes2["finalwgt"],
        stratum=nhanes2["stratid"],
        domain=nhanes2["race"],
        psu=nhanes2["psuid"],
        remove_nan=True,
    )

    zinc_mean_by_race.to_dataframe()

| _param | _domain | _estimate | _stderror | _lci | _uci | _cv
--- | --- | --- | --- | --- | --- | --- | ---
0 | PopParam.mean | 1 | 87.495389 | 0.479196 | 86.518062 | 88.472716 | 0.005477
1 | PopParam.mean | 2 | 85.085744 | 1.165209 | 82.709286 | 87.462203 | 0.013695
2 | PopParam.mean | 3 | 83.570910 | 1.585463 | 80.337338 | 86.804483 | 0.018971

Let’s remove the stratum parameter then we get

    zinc_mean_nostr = TaylorEstimator(PopParam.mean)
    zinc_mean_nostr.estimate(
        y=nhanes2["zinc"],
        samp_weight=nhanes2["finalwgt"],
        psu=nhanes2["psuid"],
        remove_nan=True
    )

    print(zinc_mean_nostr)

    SAMPLICS - Estimation of Mean

    Number of strata: 1
    Number of psus: 2
    Degree of freedom: 1

         MEAN       SE       LCI       UCI       CV
    87.182067 0.742622 77.746158 96.617976 0.008518