Frequently Asked Questions
Below are some of the most commonly asked questions about the CIRCE Project.
If your question is not answered, please feel free to reach out the CIRCE team via email or schedule a time at our office hours!
Data
How does the timing of an encounter determine which data from that encounter are included in CIRCE?
The CIRCE data extract includes all encounters with admission dates within the specified study window. For example, for version `v20260630`, all encounters with a timestamp up until midnight on June 30, 2026 are included. As a result, not all the data from that admission will be included in the data set.
If an analysis requires complete admission data, or analyzing only patients who have been discharged, we suggest removing encounters with missing discharge dates and/or filtering by a specific discharge date, as not all patients will have been discharged at the time of the data pull.
What data from Lancaster General Hospital (LGH) are included?
CIRCE contains data for LGH dating back to July 1, 2011. Until July 2027, this data will come from a separate source, and must be merged in with other hospital data. We are working hard to include as much data as possible, but there are a few elements with the following, known issues:
- LGH data is not available in CLIF. This requires extra mapping which has not been completed.
- The `icu_mechanical_vent` table has no LGH data.
- The `medication_comments` table has no LGH data.
- The `ed` table is missing values for roughly 40% of the data.
- The `location` table is missing the unit_stay_types field.
- The `obstetrics` table is missing the delivery_proc field.
Do the identifiers for LGH map to the identifiers for Penn?
All LGH identifiers have the string "LGH" appended to the beginning. If doing a chart review for an LGH patient, you should drop the "LGH" from the beginning of the identifier for the patient or encounter. If a patient has an encounter with both LGH and Penn, the pat_id, pat_mrn_id, and empi will be different. There is currently no map or crosswalk between the identifiers for the two systems.
How does the timing of an encounter determine which data from that encounter are included in CIRCE?
The CIRCE data extract includes all encounters with admission dates within the specified study window. For example, for version v20250331, all encounters with a timestamp up until midnight on March 31, 2025 are included. As a result, not all of the data from that admission will be included in the data set. If an analysis requires complete admission data, or analyzing only patients who have been discharged, we suggest removing encounters with missing discharge dates and/or filtering by a specific discharge date, as not all patients will have been discharged at the time of the data pull.
What outpatient data is included in CIRCE?
The following tables include outpatient data: encounter, patient, admin, allergy, clinical_notes, imaging_orders, labs, and medication_intermittent. Outpatient data starts on 07/01/2011. More outpatient tables will be available in the next release of CIRCE.
Outpatient data is denoted by the ip_op_status field, which is included in all primary and derived tables. When the ip_op_status field has value 0, the row corresponds to inpatient data, 1 means outpatient data, and 2 means this patient-level row corresponds to both inpatient and outpatient data.
Do the ICU flowsheet tables only contain data for patients who are in the ICU?
No, these tables contain data that is typically measured in the ICU, but for all patients, regardless of location.
Why do a few `ord_creatr_user_ids` occur at much higher rates than expected?
If an order or flowsheet measurement is recorded, altered, or created by a computer, then this field populates with the user_id of the computer. To help determine the source of such data, the `labs` table contains authorzing_user_id_did, and the `icu_vent_flowsheet` table contains device_id and device_name.
What time zone are the time variables for CIRCE?
All time variables in CIRCE are in Eastern Standard Time (EST) as they are in PennChart.
In Databricks, all time variables display in EST.
On the PMACS Shared Drive and LPC Cluster, if you are using the arrow package to read in the parquet files, the time variables will display as UTC. This is due to an issue with the Databricks export and the way parquet files save time variables. To convert the times back into EST, run the following R code on each of the tables:
data <- data %>% mutate(across(where(~ inherits(.x, "POSIXct")), ~ with_tz(.x, "UTC")))
Resources
How do I find out if a certain data element is within CIRCE?
The CIRCE project has a Data Dictionary available, which contains information about what resides in each of the CIRCE tables.
What do the hospital abbreviations mean? (i.e., the location_abbr field in the `encounter` table)
A dictionary of the hospital abbreviations is available in the resources folder of the PMACS shared drive.
Can I use CIRCE in STATA?
Yes! STATA version 19 now supports direct import of parquet files. If using an older version, you can convert the parquet files using a tool file we have created for you. In the resources folder of the PMACS shared drive is a Python file titled load_parquet.py. To use this file, you must put it into your current STATA working directory or specify the full path to its location in the call. Here is an example call, specifying the full path:
python script “T:\\\\pmacs.upenn.edu\\depts\\BE-4104-CCEB\\projects\\Weissman\\CIRCE\\resources\\loadparquet.py”,
args(“T:\\\\pmacs.upenn.edu\\depts\\BE-4104-CCEB\\projects\\Weissman\\CIRCE\\data\\v20250630\\raw\\2025-03\\2025-03_encounter.parquet”, "stata_df_name")
In this example, CIRCE is mounted to the T drive, the May 2025 chunk of the encounters table is being read in, and "stata_df_name" is the name of the dataframe in STATA.
Identifiability
What do the time variables mean in the de-identified layer?
All time variables in the deidentified version are scaled to that patient's index time. The index time is the admission time for that patient's first encounter in CIRCE. This index time is set to 1/1/1000 00:00:00 in an attempt to be obvious. All other times for that patient are in relation to that index time.
Why are certain tables and/or variables missing from the limited and de-identified layers?
Certain data elements must be removed as PHI cannot be responsibly removed from them. For users with limited or de-identified access, the `clinical_notes`, `nursing_notes`, `order_narrative`, and `clif_clinical_notes_text` tables are removed, as well as the columns narrative, impression, and addendum in the `imaging_orders` table. At the de-identified layer, geographical data and the dates of birth and death are also removed. CLIF is not available at the de-identified layer.
In the de-identified layer, why is the maximum age 90?
In accordance with laws surrounding protected health information (PHI), age is capped at 90 in the de-identified layer. Any patient who is older than 90 has their age set to 90.
What if I am using the de-identified or limited versions of CIRCE but realize I must conduct a manual chart review in the electronic health record to validate some aspect of my project?
If this is applicable to you, please contact the CIRCE team. A crosswalk file that connects encounter and patient identifiers to their hashed equivalents can be made available for manual review purposes when regulatory approvals and data confidentiality practices are in place.
How is the de-identified layer chunked?
Since the de-identified layer does not have time variables preserved, we cannot chunk by month. Instead, to keep files at a usable size, we chunk based on the first two characters of the patient's hashed pat_id. There are 256 unique combinations of this.
I am an Honest Broker who needs access to CIRCE at multiple identifiability levels for different projects. What do I do?
Please contact the study team about this. We will work with you to schedule certain times when you have access to the different identifiability levels.