Office Visit
Introduction
In this section we will:
- identify which Office Visit procedures were excluded and why
- identify which different Office Visit subgroups were created and why
If you have questions or concerns about this data please contact Alexander Nielson (alexnielson@utah.gov)
Load Libraries
Load Libraries
library(data.table)
library(tidyverse)
## Warning: replacing previous import 'vctrs::data_frame' by 'tibble::data_frame'
## when loading 'dplyr'
library(stringi)
library(ggridges)
library(broom)
library(disk.frame)
library(RecordLinkage)
library(googlesheets4)
library(bigrquery)
library(DBI)
devtools::install_github("utah-osa/hcctools2", upgrade="never" )
library(hcctools2)
Establish color palettes
cust_color_pal1 <- c(
"Anesthesia" = "#f3476f",
"Facility" = "#e86a33",
"Medicine Proc" = "#e0a426",
"Pathology" = "#77bf45",
"Radiology" = "#617ff7",
"Surgery" = "#a974ee"
)
cust_color_pal2 <- c(
"TRUE" = "#617ff7",
"FALSE" = "#e0a426"
)
cust_color_pal3 <- c(
"above avg" = "#f3476f",
"avg" = "#77bf45",
"below avg" = "#a974ee"
)
fac_ref_regex <- "(UTAH)|(IHC)|(HOSP)|(HOSPITAL)|(CLINIC)|(ANESTH)|(SCOPY)|(SURG)|(LLC)|(ASSOC)|(MEDIC)|(CENTER)|(ASSOCIATES)|(U OF U)|(HEALTH)|(OLOGY)|(OSCOPY)|(FAMILY)|(VAMC)|(SLC)|(SALT LAKE)|(CITY)|(PROVO)|(OGDEN)|(ENDO )|( VALLEY)|( REGIONAL)|( CTR)|(GRANITE)|( INSTITUTE)|(INSTACARE)|(WASATCH)|(COUNTY)|(PEDIATRIC)|(CORP)|(CENTRAL)|(URGENT)|(CARE)|(UNIV)|(ODYSSEY)|(MOUNTAINSTAR)|( ORTHOPEDIC)|(INSTITUT)|(PARTNERSHIP)|(PHYSICIAN)|(CASTLEVIEW)|(CONSULTING)|(MAGEMENT)|(PRACTICE)|(EMERGENCY)|(SPECIALISTS)|(DIVISION)|(GUT WHISPERER)|(INTERMOUNTAIN)|(OBGYN)"
Connect to GCP database
bigrquery::bq_auth(path = 'D:/gcp_keys/healthcare-compare-prod-95b3b7349c32.json')
# set my project ID and dataset name
project_id <- 'healthcare-compare-prod'
dataset_name <- 'healthcare_compare'
con <- dbConnect(
bigrquery::bigquery(),
project = project_id,
dataset = dataset_name,
billing = project_id
)
Get NPI table
query <- paste0("SELECT npi, clean_name, osa_group, osa_class, osa_specialization
FROM `healthcare-compare-prod.healthcare_compare.npi_full`")
#bq_project_query(billing, query) # uncomment to determine billing price for above query.
npi_full <- dbGetQuery(con, query) %>%
data.table()
get a subset of the NPI providers based upon taxonomy groups
npi_prov_pair <- npi_full%>%
.[,.(npi=npi,
clean_name = clean_name
)
]
Load Data
bun_proc <- disk.frame("full_apcd.df")
# checkup <- bun_proc[faci_bun %>% stri_detect_regex("(99201)|(99202)|(99203)|(99204)|(99205)|(99211)|(99212)|(99213)
# (99214)|(99215)") &
# surg_bun=="" & medi_bun=="" & radi_bun=="" & path_bun=="" & anes_bun==""]
checkup <- bun_proc[(faci_bun =="99201" |
faci_bun == "99202" |
faci_bun == "99203" |
faci_bun == "99204" |
faci_bun == "99205" |
faci_bun == "99211" |
faci_bun == "99212" |
faci_bun == "99213" |
faci_bun == "99214" |
faci_bun == "99215") &
surg_bun=="" & medi_bun=="" & radi_bun=="" & path_bun=="" & anes_bun==""]
checkup %>% nrow()
## [1] 358443
checkup <- checkup[cnt > 4 & tp_med < 1000 & tp_med > 0]
checkup %>% nrow()
## [1] 71380
checkup %>% plot_med_density() %>% print()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
checkup %>% get_tag_cor() %>% print()
## Warning in stats::cor(cor_data): the standard deviation is zero
## # A tibble: 3 x 2
## name correlation
## <chr> <dbl>
## 1 faci_bun_t_est 0.349
## 2 duration_mean 0.0017
## 3 duration_max 0.0007
checkup %>% get_tag_density_information("faci_bun_t_est") %>% print()
## Scale for 'y' is already present. Adding another scale for 'y', which will
## replace the existing scale.
## Scale for 'x' is already present. Adding another scale for 'x', which will
## replace the existing scale.
## [1] "tp_med ~ faci_bun_t_est"
## Warning in leveneTest.default(y = y, group = group, ...): group coerced to
## factor.
## Picking joint bandwidth of 5.74
## $dist_plots
##
## $stat_tables
checkup_est <- checkup[faci_bun_t_est==T]
checkup_new <- checkup[faci_bun_t_est==F]
checkup_new <- checkup_new[,`:=`(
surg_sp_name_clean = surg_sp_npi %>% map_chr(get_npi_standard_name),
surg_bp_name_clean = surg_bp_npi %>% map_chr(get_npi_standard_name),
medi_sp_name_clean = medi_sp_npi %>% map_chr(get_npi_standard_name),
medi_bp_name_clean = medi_bp_npi %>% map_chr(get_npi_standard_name),
radi_sp_name_clean = radi_sp_npi %>% map_chr(get_npi_standard_name),
radi_bp_name_clean = radi_bp_npi %>% map_chr(get_npi_standard_name),
path_sp_name_clean = path_sp_npi %>% map_chr(get_npi_standard_name),
path_bp_name_clean = path_bp_npi %>% map_chr(get_npi_standard_name),
anes_sp_name_clean = anes_sp_npi %>% map_chr(get_npi_standard_name),
anes_bp_name_clean = anes_bp_npi %>% map_chr(get_npi_standard_name),
faci_sp_name_clean = faci_sp_npi %>% map_chr(get_npi_standard_name),
faci_bp_name_clean = faci_bp_npi %>% map_chr(get_npi_standard_name)
)]
checkup_new_btb4 <- checkup_new %>% btbv4()
checkup_new_bq <- checkup_new_btb4 %>%
.[is.na(doctor_str2)] %>%
.[,`:=`(procedure_type=10, procedure_modifier="New Patient")] %>%
.[,.(
primary_doctor = doctor_str1,
primary_doctor_npi = doctor_npi_str1 ,
most_important_fac ,
most_important_fac_npi,
procedure_type,
procedure_modifier,
tp_med_med,
tp_med_surg,
tp_med_medi,
tp_med_path,
tp_med_radi,
tp_med_anes,
tp_med_faci,
tp_cnt_cnt,
ingest_date = Sys.Date()
)]
bq_table_upload(x=procedure_dev_table, values= checkup_new_bq, create_disposition='CREATE_IF_NEEDED', write_disposition='WRITE_APPEND')
checkup_est <- checkup_est[,`:=`(
surg_sp_name_clean = surg_sp_npi %>% map_chr(get_npi_standard_name),
surg_bp_name_clean = surg_bp_npi %>% map_chr(get_npi_standard_name),
medi_sp_name_clean = medi_sp_npi %>% map_chr(get_npi_standard_name),
medi_bp_name_clean = medi_bp_npi %>% map_chr(get_npi_standard_name),
radi_sp_name_clean = radi_sp_npi %>% map_chr(get_npi_standard_name),
radi_bp_name_clean = radi_bp_npi %>% map_chr(get_npi_standard_name),
path_sp_name_clean = path_sp_npi %>% map_chr(get_npi_standard_name),
path_bp_name_clean = path_bp_npi %>% map_chr(get_npi_standard_name),
anes_sp_name_clean = anes_sp_npi %>% map_chr(get_npi_standard_name),
anes_bp_name_clean = anes_bp_npi %>% map_chr(get_npi_standard_name),
faci_sp_name_clean = faci_sp_npi %>% map_chr(get_npi_standard_name),
faci_bp_name_clean = faci_bp_npi %>% map_chr(get_npi_standard_name)
)]
checkup_est_btb4 <- checkup_est %>% btbv4()
checkup_est_bq <- checkup_est_btb4 %>%
.[,`:=`(procedure_type=10, procedure_modifier="Established Patient")] %>%
.[is.na(doctor_str2)] %>%
.[,.(
primary_doctor = doctor_str1,
primary_doctor_npi = doctor_npi_str1 ,
most_important_fac ,
most_important_fac_npi,
procedure_type,
procedure_modifier,
tp_med_med,
tp_med_surg,
tp_med_medi,
tp_med_path,
tp_med_radi,
tp_med_anes,
tp_med_faci,
tp_cnt_cnt,
ingest_date = Sys.Date()
)]
bq_table_upload(x=procedure_dev_table, values= checkup_est_bq, create_disposition='CREATE_IF_NEEDED', write_disposition='WRITE_APPEND')