Table of Contents
TL;DR 1
Environment 1
Data 2
Q1 – Our hospital 3
Q2 – Our state 5
Q3 – Weakest Link 6
Q4 – National average 8
Q5 – Form of Ownership 9
session information 10

This report analyzes the extract from the American Hospital Association (AHA) Information Technology (IT) Supplement to the AHA Annual Survey conducted in 2015.
TL;DR
This report answers the following questions:
1. Can our hospital send, receive, use, and find patient records electronically? Is it fully interoperable?
2. How interoperable are hospitals in our state?
3. What is the weakest link in interoperability of the hospitals in our state?
4. How does our state compare to the national average in terms of interoperability?
5. How does interoperability compare across different form of ownership?
Environment
library(magrittr) # pipes
library(dplyr) # data wrangling
library(tidyr) # data wrangling
library(forcats) # factors
library(stringr) # strings
library(lubridate) # dates
library(ggplot2) # graphs
library(janitor) # tidy data
library(TeachingDemos) # for char2seed function
Data
# getwd()
ds <- readxl::read_xlsx(“lab-data-AHA-IT-interop.xlsx”)
ds <- ds %>% janitor::clean_names()
ds %>% dplyr::glimpse()
## Rows: 3,522
## Columns: 17
## $ id <chr> “6940008”, “6940015”, “6940020”, “6940090”, “6940110”, “6940130”, “6…
## $ mname <chr> “Alaska Psychiatric Institute”, “Alaska Regional Hospital”, “Provide…
## $ mlocaddr <chr> “3700 Piper Street”, “2801 Debarr Road”, “3200 Providence Drive”, “6…
## $ mloccity <chr> “Anchorage”, “Anchorage”, “Anchorage”, “Dillingham”, “Kodiak”, “Kotz…
## $ mstate <chr> “AK”, “AK”, “AK”, “AK”, “AK”, “AK”, “AK”, “AK”, “AK”, “AK”, “AK”, “A…
## $ mloczip <chr> “99508-4677”, “99508-2997”, “99508-4615”, “99576”, “99615-6602”, “99…
## $ bdtot <dbl> 80, 132, 401, 16, 25, 17, 74, 27, 46, 28, 21, 50, 90, 510, 44, 48, 3…
## $ mcntrl <dbl> 12, 33, 21, 23, 23, 47, 32, 14, 21, 14, 14, 16, 16, 23, 33, 32, 33, …
## $ mserv <dbl> 22, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 46, 46, 13, …
## $ smehrs <chr> “NA”, “NA”, “1”, “1”, “1”, “1”, “1”, “1”, “1”, “NA”, “1”, “1”, “1”, …
## $ smehrr <chr> “NA”, “NA”, “1”, “1”, “1”, “1”, “1”, “1”, “1”, “NA”, “1”, “NA”, “1”,…
## $ ports <chr> “NA”, “1”, “1”, “NA”, “1”, “NA”, “NA”, “1”, “1”, “NA”, “1”, “NA”, “1…
## $ portr <chr> “NA”, “1”, “1”, “1”, “1”, “NA”, “NA”, “1”, “1”, “NA”, “1”, “NA”, “1”…
## $ hies <chr> “NA”, “NA”, “1”, “1”, “1”, “NA”, “1”, “1”, “1”, “1”, “1”, “NA”, “NA”…
## $ hier <chr> “NA”, “NA”, “1”, “NA”, “1”, “NA”, “1”, “1”, “1”, “1”, “1”, “NA”, “NA…
## $ socint <chr> “NA”, “NA”, “1”, “NA”, “1”, “1”, “NA”, “1”, “1”, “NA”, “1”, “NA”, “N…
## $ eqphios <chr> “NA”, “1”, “1”, “1”, “1”, “1”, “1”, “1”, “1”, “1”, “1”, “1”, “1”, “1…
Select your hospital
# Enter you own last name in the `char2seed` function to get your unique hospital
# You will need to install the pacakge `TeachingDemos`
set.seed(TeachingDemos::char2seed(x = “Pamela Shaw”, set = TRUE))
my_hospital_id <- sample(x = ds$id, size = 1)
ds_mine <- ds %>%
filter(id == my_hospital_id) %>%
select(id,mname,mloccity, mstate, bdtot)
ds_mine %>% print()
## # A tibble: 1 x 5
## id mname mloccity mstate bdtot
## <chr> <chr> <chr> <chr> <dbl>
## 1 6610760 Mayo Clinic Health System in Mankato Mankato MN 166
# create character vector of length 1 to store the id of the hospital for future reference
my_id <- ds_mine %>% pull(id)
Q1 – Our hospital
Q1. Can our hospital send, receive, use, and find patient records electronically? Is it fully interoperable?
Using the survey data, we have created four variables, capturing four essential interoperable activities, as well as the indicator for complete interoperability of the hospital:
• a) Variable send answers (Yes/No) the following question: When a patient transitions to another care setting outside your hospital system, does your hospital SEND (either via secure messaging(smehrs), provider portal(ports), or HIO (hies) ) a summary of care record?
• b) Variable receive answers (Yes/No) the following question: When a patient transitions to another care setting outside your hospital system does your hospital RECEIVE (either via secure messaging(smehrr), provider portal(portr), or HIO ((hier))) a summary of care record?
• c) Variable use answers (Yes/No) the following question: Does your hospital’s EHR have the ability to INTEGRATE (use)(socint) the information contained in a summary of care record received electronically?
• d) Variable find answers (Yes/No) the following question: Do providers at your hospital electronically FIND (query) (eqphios) patients’ health information from sources outside the hospital system?
• e) Variable interoperable answers (Yes/No) the following question: Does your hospital have the ability to conduct ALL FOUR interoperable exchange activities?
TODO: Create a new data frame ds1 by augmenting data frame ds with new variables send, receive, use, find, and interoperable based on the logic described above. Sourcing ds1, print rows 20 to 30 for 7 variables: id, mname, and the newly created 5 columns.
# Hints
# 0) The logic of `case_when`: https://www.youtube.com/watch?v=amiW9H-oOS4
# 1) Create a new dataset `ds1` , and use `case_when` function from the `dplyr` package to create 5 new variables: `send`, `receive`, `use`, `find` and `interoperable`. Each of these variables should contain only two possible values: `Yes` and `No`.
# 2) Compute these 5 new variables for ALL hospitals, not just yours
# 3) Remember that positive response to any of the three variables in a) and b) should result in `YES` on send/receive
# 4) symbols for logical tests: “|” = OR ; “&” = AND
ds1 <- ds %>%
dplyr::mutate(
send = case_when(smehrs == 1 | ports == 1 | hies == 1 ~ “Yes”, TRUE ~ “No”)
, receive = case_when(smehrr == 1 | portr == 1 | hier == 1 ~ “Yes”, TRUE ~ “No”)
, use = case_when(socint == 1 ~ “Yes”, TRUE ~ “No”)
, find = case_when(eqphios == 1 ~ “Yes”, TRUE ~ “No”)
, interoperable = case_when(send == “Yes” & receive == “Yes” & use == “Yes” &
find == “Yes” ~ “Yes”, TRUE ~ “No”)
)
# For testing your logic: (keep in the final report)
ds1 %>%
select(id, mname
# ,smehrs, ports, hies
,send
# ,smehrr, portr, hies
, receive
# ,socint
, use
# ,eqphios
, find
, interoperable
) %>%
slice(20:30)
## # A tibble: 11 x 7
## id mname send receive use find interoperable
## <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 6530090 Athens-Limestone Hospital Yes No No No No
## 2 6530142 Medical West Yes Yes Yes Yes Yes
## 3 6530160 Princeton Baptist Medical Center Yes Yes Yes Yes Yes
## 4 6530211 Baypointe Behavioral Health Yes No Yes Yes No
## 5 6530304 University of Alabama Hospital Yes Yes No Yes No
## 6 6530308 Marshall Medical Center South Yes Yes No Yes No
## 7 6530310 D. W. McMillan Memorial Hospital Yes Yes Yes No No
## 8 6530313 Cherokee Medical Center No No No No No
## 9 6530317 Washington County Hospital Yes Yes No No No
## 10 6530320 Cullman Regional Medical Center Yes Yes Yes Yes Yes
## 11 6530345 Bryan W. Whitfield Memorial Hospital Yes No Yes No No
TODO: Sourcing ds1 data frame, print a single row of data with your hospital’s information that provides evidence to answer Question 1.
# Hints
# 1a) use `filter` to limit data to a single row with your hospital using its id (not name),
# 1b) remember to use ‘==” and not “=”!!!
# 2) use `select` to limit data to 7 columns only: `xx`, `mname` and the 5 you have created
ds1 %>%
filter(id == ds_mine$id) %>%
select(id, mname, send, receive, use, find, interoperable)
## # A tibble: 1 x 7
## id mname send receive use find interoperable
## <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 6610760 Mayo Clinic Health System in Mankato Yes Yes No Yes No
1. TODO: Write a short paragraph describing the conclusions supported by evidence in the data.
Q2 – Our state
Q2 How interoperable are hospitals in our state?
TODO: Sourcing ds1, create a dataframe d2 storing the number of hospitals (n_hospitals) in the state broken down by whether hospitals are interoperable and compute the proportion (prop_hospitals) and percent (pct_hospitals) of interoperable hospitals within your state.
# Hints
# 1) Use `filter` to select only the hospitals in the state where your hospital is located
# 2) Include `mstate` into your `group_by` to keep it in the table
# 3) Make sure you `ungroup()` before computing the `total`
# 4) use `round()` to round the value of `prop_hospitals` to the second decimal
# 5) Use `scales::percent()` within `mutate()` to express the ratio of `n_hospitals` to `total` as percentage
d2 <- ds1 %>%
filter(mstate == ds_mine$mstate) %>%
group_by(mstate, interoperable) %>%
summarize(
n_hospitals = n()
) %>%
ungroup() %>%
mutate(
total = sum(n_hospitals)
, prop_hospitals = n_hospitals / total
, pct_hospitals = scales::percent(prop_hospitals)
)
d2 %>% print()
## # A tibble: 2 x 6
## mstate interoperable n_hospitals total prop_hospitals pct_hospitals
## <chr> <chr> <int> <int> <dbl> <chr>
## 1 MN No 90 139 0.647 65%
## 2 MN Yes 49 139 0.353 35%
2. TODO: Write a short paragraph describing the conclusions supported by evidence in the data.
Q3 – Weakest Link
Q3) What interoperable exchange activity (send, receive,use, find) has the lowest compliance in our state?
TODO:Sourcing ds1, print four tables, each containing the percentage of compliance for individual interoperability measure.
# Hints
# 1) Start with the script in the previous chunk
# 2) Use select() to drop the `total` column or use `sum(n_hospital)` in the computation of percentages
# 3) Use `accuracy` argumenet to display 2 decimals
ds1 %>%
filter(mstate == ds_mine$mstate) %>%
group_by(mstate, send) %>%
summarize(
n_hospitals = n()
) %>%
ungroup() %>%
mutate(
pct_hospitals = scales::percent(n_hospitals / sum(n_hospitals), accuracy = 0.01)
) %>%
print()
## # A tibble: 2 x 4
## mstate send n_hospitals pct_hospitals
## <chr> <chr> <int> <chr>
## 1 MN No 31 22.30%
## 2 MN Yes 108 77.70%
ds1 %>%
filter(mstate == ds_mine$mstate) %>%
group_by(mstate, receive) %>%
summarize(
n_hospitals = n()
) %>%
ungroup() %>%
mutate(
pct_hospitals = scales::percent(n_hospitals / sum(n_hospitals), accuracy = 0.01)
) %>%
print()
## # A tibble: 2 x 4
## mstate receive n_hospitals pct_hospitals
## <chr> <chr> <int> <chr>
## 1 MN No 43 30.94%
## 2 MN Yes 96 69.06%
ds1 %>%
filter(mstate == ds_mine$mstate) %>%
group_by(mstate, find) %>%
summarize(
n_hospitals = n()
) %>%
ungroup() %>%
mutate(
pct_hospitals = scales::percent(n_hospitals / sum(n_hospitals), accuracy = 0.01)
) %>%
print()
## # A tibble: 2 x 4
## mstate find n_hospitals pct_hospitals
## <chr> <chr> <int> <chr>
## 1 MN No 39 28.06%
## 2 MN Yes 100 71.94%
ds1 %>%
filter(mstate == ds_mine$mstate) %>%
group_by(mstate, use) %>%
summarize(
n_hospitals = n()
) %>%
ungroup() %>%
mutate(
pct_hospitals = scales::percent(n_hospitals / sum(n_hospitals), accuracy = 0.01)
) %>%
print()
## # A tibble: 2 x 4
## mstate use n_hospitals pct_hospitals
## <chr> <chr> <int> <chr>
## 1 MN No 76 54.68%
## 2 MN Yes 63 45.32%
3. TODO: Write a short paragraph describing the conclusions supported by evidence in the data.
Q4 – National average
How does our state compare to the national average in terms of interoperability?
TODO: Sourcing ds1, print a table containing national compliance proportion.
ds1 %>%
group_by(interoperable) %>%
summarize(
n_hospitals = n()
) %>%
ungroup() %>%
mutate(
prop_hospitals = n_hospitals / sum(n_hospitals)
, pct_hospitals = scales::percent(prop_hospitals, accuracy = 0.1)
) %>%
print()
## # A tibble: 2 x 4
## interoperable n_hospitals prop_hospitals pct_hospitals
## <chr> <int> <dbl> <chr>
## 1 No 2598 0.738 73.8%
## 2 Yes 924 0.262 26.2%
4. TODO: Write a short paragraph describing the conclusions supported by evidence in the data.
Q5 – Form of Ownership
How does interoperability compare across different form of ownership?
TODO: Create a new data frame ds2 by augmenting ds with a new variable ownership that encodes five different types of hospital owners. Print a table with percentages of interoperability compliance within each form of ownership on the national level. Sourcing ds2, print all unique combinations of variables mcntrl and ownership.
# Hints
# 0) Use Survey dictionary (“AHA-IT-2015-dictionary.pdf”) to recover the codes
# 1) Use operator `%in%` which means `belongs to the set of`
# 2) use `distinct(var1, var2)
# 3) use `n = nrow(.)` option in `print()` to print all
# alternatively, use knitr::kable() to print it.
ds2 <- ds1 %>%
mutate(
ownership = case_when(
mcntrl %in% c(12,13,14,15,16) ~ “Non-federal”,
mcntrl %in% c(21,23) ~ “Non-for-profit”,
mcntrl %in% c(42,43,44,45,47) ~ “Federal”,
mcntrl %in% c(31,32,33) ~ “For-profit”,
TRUE ~ “Other”
)
)
ds2 %>%
distinct(mcntrl, ownership) %>%
print()
## # A tibble: 17 x 2
## mcntrl ownership
## <dbl> <chr>
## 1 12 Non-federal
## 2 33 For-profit
## 3 21 Non-for-profit
## 4 23 Non-for-profit
## 5 47 Federal
## 6 32 For-profit
## 7 14 Non-federal
## 8 16 Non-federal
## 9 13 Non-federal
## 10 45 Federal
## 11 31 For-profit
## 12 42 Federal
## 13 15 Non-federal
## 14 30 Other
## 15 44 Federal
## 16 22 Other
## 17 43 Federal
TODO: Source ds2 to print a table with percentages of interoperability compliance within each form of ownership on the national level.
ds2 %>%
group_by(ownership, interoperable) %>%
summarize(
n_hospitals = n()
) %>%
mutate(
n_ownership = sum(n_hospitals)
, pct_from_ownership = scales::percent(n_hospitals / n_ownership)
) %>%
print()
## # A tibble: 10 x 5
## # Groups: ownership [5]
## ownership interoperable n_hospitals n_ownership pct_from_ownership
## <chr> <chr> <int> <int> <chr>
## 1 Federal No 68 73 93%
## 2 Federal Yes 5 73 7%
## 3 For-profit No 548 694 79%
## 4 For-profit Yes 146 694 21%
## 5 Non-federal No 631 766 82%
## 6 Non-federal Yes 135 766 18%
## 7 Non-for-profit No 1349 1986 68%
## 8 Non-for-profit Yes 637 1986 32%
## 9 Other No 2 3 67%
## 10 Other Yes 1 3 33%
5. TODO: Write a short paragraph describing the conclusions supported by evidence in the data.
session information
For the sake of documentation and reproducibility, the current report was rendered in the following environment. Click the line below to expand.
Environment
## – Session info ————————————————————————-
## setting value
## version R version 4.0.2 (2020-06-22)
## os Windows 10 x64
## system x86_64, mingw32
## ui RTerm
## language (EN)
## collate English_United States.1252
## ctype English_United States.1252
## tz America/New_York
## date 2020-10-11
##
## – Packages —————————————————————————–
## package * version date lib source
## assertthat 0.2.1 2019-03-21 [1] CRAN (R 4.0.2)
## backports 1.1.9 2020-08-24 [1] CRAN (R 4.0.2)
## callr 3.4.3 2020-03-28 [1] CRAN (R 4.0.2)
## cellranger 1.1.0 2016-07-27 [1] CRAN (R 4.0.2)
## cli 2.0.2 2020-02-28 [1] CRAN (R 4.0.2)
## colorspace 1.4-1 2019-03-18 [1] CRAN (R 4.0.2)
## crayon 1.3.4 2017-09-16 [1] CRAN (R 4.0.2)
## desc 1.2.0 2018-05-01 [1] CRAN (R 4.0.2)
## devtools 2.3.1 2020-07-21 [1] CRAN (R 4.0.2)
## digest 0.6.25 2020-02-23 [1] CRAN (R 4.0.2)
## dplyr * 1.0.2 2020-08-18 [1] CRAN (R 4.0.2)
## ellipsis 0.3.1 2020-05-15 [1] CRAN (R 4.0.2)
## evaluate 0.14 2019-05-28 [1] CRAN (R 4.0.2)
## fansi 0.4.1 2020-01-08 [1] CRAN (R 4.0.2)
## forcats * 0.5.0 2020-03-01 [1] CRAN (R 4.0.2)
## fs 1.5.0 2020-07-31 [1] CRAN (R 4.0.2)
## generics 0.0.2 2018-11-29 [1] CRAN (R 4.0.2)
## ggplot2 * 3.3.2 2020-06-19 [1] CRAN (R 4.0.2)
## glue 1.4.2 2020-08-27 [1] CRAN (R 4.0.2)
## gtable 0.3.0 2019-03-25 [1] CRAN (R 4.0.2)
## htmltools 0.5.0 2020-06-16 [1] CRAN (R 4.0.2)
## janitor * 2.0.1 2020-04-12 [1] CRAN (R 4.0.2)
## knitr 1.29 2020-06-23 [1] CRAN (R 4.0.2)
## lifecycle 0.2.0 2020-03-06 [1] CRAN (R 4.0.2)
## lubridate * 1.7.9 2020-06-08 [1] CRAN (R 4.0.2)
## magrittr * 1.5 2014-11-22 [1] CRAN (R 4.0.2)
## memoise 1.1.0 2017-04-21 [1] CRAN (R 4.0.2)
## munsell 0.5.0 2018-06-12 [1] CRAN (R 4.0.2)
## pillar 1.4.6 2020-07-10 [1] CRAN (R 4.0.2)
## pkgbuild 1.1.0 2020-07-13 [1] CRAN (R 4.0.2)
## pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 4.0.2)
## pkgload 1.1.0 2020-05-29 [1] CRAN (R 4.0.2)
## prettyunits 1.1.1 2020-01-24 [1] CRAN (R 4.0.2)
## processx 3.4.4 2020-09-03 [1] CRAN (R 4.0.2)
## ps 1.3.4 2020-08-11 [1] CRAN (R 4.0.2)
## purrr 0.3.4 2020-04-17 [1] CRAN (R 4.0.2)
## R6 2.4.1 2019-11-12 [1] CRAN (R 4.0.2)
## Rcpp 1.0.5 2020-07-06 [1] CRAN (R 4.0.2)
## readxl 1.3.1 2019-03-13 [1] CRAN (R 4.0.2)
## remotes 2.2.0 2020-07-21 [1] CRAN (R 4.0.2)
## rlang 0.4.7 2020-07-09 [1] CRAN (R 4.0.2)
## rmarkdown 2.3 2020-06-18 [1] CRAN (R 4.0.2)
## rprojroot 1.3-2 2018-01-03 [1] CRAN (R 4.0.2)
## scales 1.1.1 2020-05-11 [1] CRAN (R 4.0.2)
## sessioninfo 1.1.1 2018-11-05 [1] CRAN (R 4.0.2)
## snakecase 0.11.0 2019-05-25 [1] CRAN (R 4.0.2)
## stringi 1.4.6 2020-02-17 [1] CRAN (R 4.0.0)
## stringr * 1.4.0 2019-02-10 [1] CRAN (R 4.0.2)
## TeachingDemos * 2.12 2020-04-07 [1] CRAN (R 4.0.2)
## testthat 2.3.2 2020-03-02 [1] CRAN (R 4.0.2)
## tibble 3.0.3 2020-07-10 [1] CRAN (R 4.0.2)
## tidyr * 1.1.2 2020-08-27 [1] CRAN (R 4.0.2)
## tidyselect 1.1.0 2020-05-11 [1] CRAN (R 4.0.2)
## usethis 1.6.1 2020-04-29 [1] CRAN (R 4.0.2)
## utf8 1.1.4 2018-05-24 [1] CRAN (R 4.0.2)
## vctrs 0.3.4 2020-08-29 [1] CRAN (R 4.0.2)
## withr 2.2.0 2020-04-20 [1] CRAN (R 4.0.2)
## xfun 0.16 2020-07-24 [1] CRAN (R 4.0.2)
## yaml 2.2.1 2020-02-01 [1] CRAN (R 4.0.2)
##
## [1] C:/Users/wshaw/OneDrive/Documents/R/win-library/4.0
## [2] C:/Program Files/R/R-4.0.2/library

 

 

 

 

 

 

The post Interoperability;Pamela Shaw first appeared on COMPLIANT PAPERS.

"Do you want an original answer to this question?


Yes No

"Is this question part of your assignment? Essay
.We Can Help!

Order Now