*! version 1.0.1, 12 Oct 2022
help audit_cc

Title

audit_cc -- analysis of matched case-control audits of cervical cancer screening

Syntax

audit_cc depvar [if] [weight] [, options]

Model
groupid(varname) matched group id variable

id(varname) woman id variable

caseddiag(varname) case's date of diagnosis

casedob(varname) case's date of birth

caseage(varname) case's age at diagnosis

casevars handles situations in which the variables in caseddiag(), casedob() and caseage() are not case-specific

scrdate(varname) date of the screening test

result(varname) result of the screening test

agecutpoints(numlist) cut-points for age

tlcutpoints(numlist) cut-points for screening exposures

minage(#) minimum age for screening

maxage(#) maximum age for screening

anythreshold(#) exclusion of tests during the case's occult invasive phase for the time-since-last-screening-test exposure

negthreshold(#) exclusion of tests during the case's occult invasive phase for the time-since-last-negative-screening-test exposure

nosresult allows for adequate but not otherwise specified test results

Reporting
coefficients displays coefficients rather than odds ratios

nodetail suppresses information about the observations retained in the estimation

saving(filename[, replace]) saves the results in an external file

data(filename[, replace]) saves the data necessary to re-estimate the models

noheader suppresses the header information when the results are saved in a file

depvar is a variable that identifies the cases and controls; depvar equal to one indicates cases, whereas all other non-missing values are treated as controls. Note that this is
different from how the clogit command would treat the dependent variable, i.e. non-zero and non-missing would indicate cases and zeros would represent controls.

The data must be in long format (see help reshape), with each screening test on a separate line. Women with no screening event must be included in the data set with
a single record where the date and result of the test are missing. Each matched group must contain one case and one or more controls matched on age and, if necessary, other characteristics.

fweights, iweights and pweights are allowed but, since they apply to groups as a whole and not to individual observations, their values
must be constant which each matched group. For more details see Use of weights in [R] clogit.

Description

audit_cc fits a set of conditional logistic models for the analysis of matched case-control audits of cervical screening programmes. The command assumes that cases
and controls have been (approximately or exactly) matched on age as part of the study design prior to analysis. This is because cervical screening is usually offered at
different intervals depending on age and there is some evidence suggesting that the impact of screening differs by age. Matching on other variables is optional. Analyses are
then stratified by case's age group and reported for two screening exposure measures: (1) time since last test and (2) time since last negative test. Users can easily
generate automatic reports with results displayed in publication-quality tables and can save the manipulated data set used for the estimation of
the conditional logistic models so that further analysis or the use of post-estimation commands (e.g. margins) is possible.

Options

Model

groupid(varname) specifies the variable (either string or numeric) that uniquely identifies the matched groups. This option is required.

id(varname) specifies the variable (either string or numeric) that uniquely identifies the women. This option is required.

caseddiag(varname) identifies the variable containing the date of diagnosis (for cases) or the matched case's date of diagnosis (for controls); varname must be a date variable (see help datetime). This option is required.

casedob(varname) names the variable for the case's date of birth (for the controls this is the date of birth of the matched case); varname must be a date variable. Either
this option or caseage(), but not both, must be specified.

caseage(varname) indicates the variable containing the age at diagnosis (for cases) or the matched case's age at diagnosis (for controls). Either this option or casedob(), but
not both, must be specified.

casevars implies that for the controls the observations for the variables specified in caseddiag(), caseage() and casedob() are set to the corresponding case's
values. This option is particularly useful when the data set does not contain the case-specific variables for date of diagnosis, age or date of birth and the users prefer not to create them
(e.g. by using the egen command) before running audit_cc.

scrdate(varname) specifies the variable containing the date of the screening test; varname must be a date variable. This option is required.

result(varname) identifies the variable containing the screening test results. varname must be a numeric variable with integer values indicating the following:

-1 = "adequate but not otherwise specified"

1 = "inadequate"

2 = "negative"

3 or above = "positive"

Values below -1 or equal to zero are treated as missing test results.
When varname contains observations coded as -1 the nosresults option must be specified; in that case the analysis for the time-since-last-negative-test exposure is not
performed. The result() option is required.

agecutpoints(numlist) specifies the cut-points (in years) to be used for the age stratification. For example, agecutpoints(25 40 55 70) tells Stata to display
age-specific estimates for the 3 age groups: [25,40), [40,55) and [55,70), where here a square bracket means that the value is included whereas a round bracket means
it is excluded (e.g. [40,55) refers to the interval 40 <= age < 55). The matched groups where the case's age is < the minimum or >= the maximum cut-point
(i.e. age<25 or age>=70 in the above example) are excluded from the analysis. Age stratification can be avoided by specifying for example agecutpoints(0 150). The choice of
the age cut-points could reflect the different screening guidelines in force depending on the woman's age. The default is agecutpoints(25 50 65 100).

tlcutpoints(numlist) specifies the cut-points (in years) to be used for the two screening exposure measures, i.e. (1) time since the last test and (2) time since the last negative
test. The cut-points define time intervals, with the last one being an open interval. For example, tlcutpoints(0 1 3 5) leads to four intervals: [0,1), [1,3), [3,5) and
[5,+infinity). Note that the last cut-point is the lower bound of the last interval. Users interested in an "ever having had a test" exposure could, for instance, use
tlcutpoints(0 150). The default is tclcutpoint(0 0.5 3.5 5.5 9.5).

minage(#) indicates the age (in years) at first invitation for screening. All screening tests carried out before the age specified in minage() are ignored. The default is
minage(25).

maxage(#) indicates the age (in years) at last invitation for screening. All screening tests carried out after the age specified in maxage() are ignored. The default is
maxage(100).

anythreshold(#) specifies the exclusion period (in months) related to the case's occult invasive phase when deriving the time-since-last-test exposure. All screening tests
carried out during that period are disregarded in the analysis for time since last test. For example, anythreshold(12) indicates a 12-month exclusion period. The default is
anythreshold(6).

negthreshold(#) specifies the exclusion period (in months) related to the case's occult invasive phase when deriving the time-since-last-negative-test exposure. All negative tests
carried out during that period are disregarded in the analysis for time since last negative test. The default is negthreshold(0), i.e. no exclusion period.

nosresults must be specified when the variable in result() contains test results coded as -1 (i.e. "adequate but not otherwise specified"). When this option is used,
the analysis for the time-since-last-negative-test exposure is not performed.

Reporting

coefficients reports the estimated coefficients rather than the odds ratios (exponentiated coefficients). This option affects only how results are displayed and not how they are estimated.

nodetail suppresses part of the output in the Results windows and in the saved file if saving() is specified. The tables displaying the number of observations
retained in each age-specific estimation are omitted.

saving(filename[, replace]) saves the results in an external file. If filename is specified without extension, .docx is assumed and the results are saved in a
Word document. Possible file formats are .docx, .log and .smcl. If the sub-option replace is supplied, Stata overwrites the file in case it already exists.

data(filename[, replace]) saves a data set containing the records (one per woman) used to fit the age-specific conditional logistic models. If filename is specified without
extension, .dta is assumed. If the sub-option replace is specified, Stata overwrites the file in case it already exists. The saved data set contains the variables
specified in groupid() and id() along with agegroup (categorical age variable created using the cut-points in agecutpoints()), the two exposure
measures (Time_since_last_test and Last_screened_negative), weights (if weights are supplied). The variable Last_screened_negative is omitted when
the nosresults option is specified.

noheader has an effect only when the results are saved in a file using the saving() option. It suppresses the header information (name of the command, Stata
version and current date) at the top of the Word, log or smcl document.

Examples

Setup

. use auditdata, clear

Example 1

Let's consider two age groups (25 to <50 and 50 to <65 years) and use the tlcutpoint() option to specify cut-points for the screening exposures:

. audit_cc case, groupid(matchgrp) id(woman_id) caseddiag(case_ddiag) casedob(case_dbirth) scrdate(testdate) res(testresult) agec(25 50 65) tlc(0 5 10)

Since the default cut-points for age are 25, 50, 65 and 100, we would obtained the same output by specifying an if qualifier instead of using the agecutpoints() option:

. audit_cc case if case_age<65, groupid(matchgrp) id(woman_id) caseddiag(case_ddiag) casedob(case_dbirth) scrdate(testdate) res(testresult) tlc(0 5 10)

Example 2

Let's restrict the analysis to age<50 years and exclude all the screening tests performed during the 9 months (the default is 6 months) prior to the case's data
of diagnosis. We also save the results in a Word document called myresults.docx (the file already exists so we specify the sub-option replace in saving()). In addition,
we use the noheader option to suppress part of the output and we set showbaselevels to on so that the reference categories are displayed
in the result tables.

. set showbaselevels on

. audit_cc case if case_age<50, groupid(matchgrp) id(woman_id) caseddiag(case_ddiag) casedob(case_dbirth) scrdate(testdate) res(testresult) anythr(9) noheader sav(myresults, replace)

In the previous command we could have also specified the data() option and saved the data set used for the estimation of the age-specific conditional logistic models. This
would be useful if, for example, we want to use post-estimation commands (e.g. test or margins) or if we want to identify which observations were dropped by a specific
clogit model (i.e. we need to access the information stored in e(sample)). For instance, had we specified the data(mydata, replace) option

. audit_cc case if case_age<50, groupid(matchgrp) id(woman_id) caseddiag(case_ddiag) casedob(case_dbirth) scrdate(testdate) res(testresult) anythr(9) noheader sav(myresults, replace) data(mydata, replace)

we could reproduce the results for the first age group (i.e. "25 to <50") and the time-since-last-test exposure by typing

. use mydata, clear

. clogit Case_status i.Time_since_last_test if agegroup==1, group(matchgrp) or

Authors

Milena Falcaro

King's College London

London, UK

milena.falcaro@kcl.ac.uk

Peter Sasieni

King's College London

London, UK

peter.sasieni@kcl.ac.uk

Alejandra Castañon

King's College London

London, UK

alejandra.castanon@kcl.ac.uk

References

Breslow NE and Day NE (1980). Statistical methods in cancer research, vol. 1 - The analysis of case-control studies. Lyon: IARC.

Castañon A, Kamineni A, Elfström KM, Lim AWW and Sasieni P (2021). Exposure definition in case-control studies of cervical cancer screening: a systematic
literature review. Cancer Epidemiology, Biomarkers and Prevention 30(12): 2154-2166.

Sasieni P, Cuzick J and Lynch-Farmery E (1996). Estimating the efficacy of screening by auditing smear histories of women with and without cervical
cancer. British Journal of Cancer 73: 1001-1005.

Weiss NS (1994). Application of the case-control method in the evaluation of screening. Epidemiologic Reviews 16: 102-108.