Use R para acceder a la API del Registro del Proveedor Nacional de los Estados Unidos (NPI) (V2.1) por el Centro de Servicios de Medicare y Medicaid (CMS): https://npiregistry.cms.hhs.gov/. Obtenga datos administrativos ricos vinculados a un proveedor de salud individual u organizacional específico, o realice búsquedas avanzadas basadas en el nombre del proveedor, la ubicación, el tipo de servicio, las credenciales y muchos otros atributos. npi
proporciona funciones de conveniencia para la extracción de datos, por lo que puede pasar menos tiempo disputando datos y más tiempo poniendo los datos en funcionamiento.
Los analistas que trabajan con datos de salud y salud pública con frecuencia necesitan unir datos de múltiples fuentes para responder a sus preguntas de negocios o de investigación. Desafortunadamente, unir datos en la atención médica es difícil porque muy pocas entidades tienen identificadores únicos y consistentes en los límites organizacionales. Sin embargo, los números de NPI no sufren de estas limitaciones, ya que todos los proveedores estadounidenses que cumplen ciertos criterios comunes deben tener un número NPI para recibir un reembolso por los servicios que brindan. Esto hace que los números de NPI sean increíblemente útiles para unir múltiples conjuntos de datos por el proveedor, que es la motivación principal para desarrollar este paquete.
Hay tres formas de instalar el paquete npi
:
install.packages( " npi " )
library( npi )
install.packages( " npi " , repos = " https://ropensci.r-universe.dev " )
library( npi )
devtools
: devtools :: install_github( " ropensci/npi " )
library( npi )
npi
exporta cuatro funciones, todas las cuales coinciden con el patrón "NPI_*":
npi_search()
: busque el registro NPI y devuelva la respuesta como un tibble con datos de alta tarjetas organizados en columnas de listas.npi_summarize()
: un método para mostrar una buena descripción general de los resultados de npi_search()
.npi_flatten()
: Un método para aplanar una o más columnas de lista de un resultado de búsqueda, unido por el número NPI.npi_is_valid()
: verifique la validez de uno o más números de NPI utilizando el estándar oficial de enumeración NPI. npi_search()
expone casi todos los parámetros de búsqueda de la API de NPPES. Digamos que queríamos encontrar hasta 10 proveedores con ubicaciones principales en la ciudad de Nueva York:
nyc <- npi_search( city = " New York City " )
# Your results may differ since the data in the NPPES database changes over time
nyc
# > # A tibble: 10 × 11
# > npi enume…¹ basic other_…² identi…³ taxono…⁴ addres…⁵ practi…⁶ endpoi…⁷
# > * <int> <chr> <list> <list> <list> <list> <list> <list> <list>
# > 1 1.19e9 Indivi… <tibble> <tibble> <tibble> <tibble> <tibble> <tibble> <tibble>
# > 2 1.31e9 Indivi… <tibble> <tibble> <tibble> <tibble> <tibble> <tibble> <tibble>
# > 3 1.64e9 Indivi… <tibble> <tibble> <tibble> <tibble> <tibble> <tibble> <tibble>
# > 4 1.35e9 Indivi… <tibble> <tibble> <tibble> <tibble> <tibble> <tibble> <tibble>
# > 5 1.56e9 Indivi… <tibble> <tibble> <tibble> <tibble> <tibble> <tibble> <tibble>
# > 6 1.79e9 Indivi… <tibble> <tibble> <tibble> <tibble> <tibble> <tibble> <tibble>
# > 7 1.56e9 Indivi… <tibble> <tibble> <tibble> <tibble> <tibble> <tibble> <tibble>
# > 8 1.96e9 Organi… <tibble> <tibble> <tibble> <tibble> <tibble> <tibble> <tibble>
# > 9 1.43e9 Indivi… <tibble> <tibble> <tibble> <tibble> <tibble> <tibble> <tibble>
# > 10 1.33e9 Indivi… <tibble> <tibble> <tibble> <tibble> <tibble> <tibble> <tibble>
# > # … with 2 more variables: created_date <dttm>, last_updated_date <dttm>, and
# > # abbreviated variable names ¹enumeration_type, ²other_names, ³identifiers,
# > # ⁴taxonomies, ⁵addresses, ⁶practice_locations, ⁷endpoints
Los resultados de búsqueda completos tienen cuatro columnas vectoriales regulares, npi
, enumeration_type
, created_date
y last_updated_date
y siete columnas de List. Cada columna de lista es una colección de datos relacionados:
basic
: información básica del perfil sobre el proveedorother_names
: otros nombres utilizados por el proveedoridentifiers
: otros identificadores de proveedores e información de credencialestaxonomies
: Clasificación de servicio e información de licenciaaddresses
: Información de ubicación y dirección postalpractice_locations
: ubicaciones de práctica del proveedorendpoints
: Detalles sobre los puntos finales del proveedor para el intercambio de información de saludSe puede encontrar una lista completa de los posibles campos dentro de estas columnas de la lista en la página de ayuda de la API NPPES.
Si se siente cómodo trabajando con las columnas de la lista, esto puede ser todo lo que necesita del paquete. Sin embargo, npi
también proporciona funciones que pueden ayudarlo a resumir y transformar sus resultados de búsqueda.
npi
tiene dos funciones de ayuda principal para trabajar con los resultados de búsqueda: npi_summarize()
y npi_flatten()
.
Ejecute npi_summarize()
en sus resultados para ver una descripción general más legible por el humano de sus resultados de búsqueda. Específicamente, la función devuelve el número de NPI, el nombre del proveedor, el tipo de enumeración (proveedor individual u organizacional), la dirección primaria, el número de teléfono y la taxonomía primaria (área de práctica):
npi_summarize( nyc )
# > # A tibble: 10 × 6
# > npi name enume…¹ prima…² phone prima…³
# > <int> <chr> <chr> <chr> <chr> <chr>
# > 1 1194276360 ALYSSA COWNAN Indivi… 5 E 98… 212-… Physic…
# > 2 1306849641 MARK MOHRMANN Indivi… 16 PAR… 212-… Orthop…
# > 3 1639173065 SAKSHI DUA Indivi… 10 E 1… 212-… Nurse …
# > 4 1346604592 SARAH LOWRY Indivi… 1335 D… 614-… Occupa…
# > 5 1558362566 AMY TIERSTEN Indivi… 1176 5… 212-… Psychi…
# > 6 1790786416 NOAH GOLDMAN Indivi… 140 BE… 973-… Intern…
# > 7 1558713628 ROBYN NOHLING Indivi… 9 HOPE… 781-… Nurse …
# > 8 1962983775 LENOX HILL MEDICAL ANESTHESIOLOGY, … Organi… 100 E … 212-… Intern…
# > 9 1427454529 YONGHONG TAN Indivi… 34 MAP… 203-… Obstet…
# > 10 1326403213 RAJEE KRAUSE Indivi… 12401 … 347-… Nurse …
# > # … with abbreviated variable names ¹enumeration_type,
# > # ²primary_practice_address, ³primary_taxonomy
Como se vio anteriormente, el marco de datos devuelto por npi_search()
tiene una estructura anidada. Aunque todos los datos en una sola fila se relacionan con un NPI, cada columna de la lista contiene una lista de uno o más valores correspondientes al NPI para esa fila. Por ejemplo, el registro NPI de un proveedor puede tener múltiples direcciones asociadas, números de teléfono, taxonomías y otros atributos, todos los cuales viven en la misma fila del marco de datos.
Debido a que las estructuras anidadas pueden ser un poco complicadas para trabajar, el npi
incluye npi_flatten()
, una función que transforma el marco de datos en una estructura más plana (es decir, sin manejo y fusionada) que es más fácil de usar. npi_flatten()
realiza las siguientes transformaciones:
npi_flatten()
admite una variedad de enfoques para aplanar los resultados de npi_search()
. Un extremo es aplanar todo a la vez:
npi_flatten( nyc )
# > # A tibble: 48 × 42
# > npi basic_fi…¹ basic…² basic…³ basic…⁴ basic…⁵ basic…⁶ basic…⁷ basic…⁸
# > <int> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
# > 1 1194276360 ALYSSA COWNAN PA NO F 2016-1… 2018-0… A
# > 2 1194276360 ALYSSA COWNAN PA NO F 2016-1… 2018-0… A
# > 3 1306849641 MARK MOHRMA… MD NO M 2005-0… 2019-0… A
# > 4 1306849641 MARK MOHRMA… MD NO M 2005-0… 2019-0… A
# > 5 1306849641 MARK MOHRMA… MD NO M 2005-0… 2019-0… A
# > 6 1306849641 MARK MOHRMA… MD NO M 2005-0… 2019-0… A
# > 7 1326403213 RAJEE KRAUSE AGPCNP… NO F 2015-1… 2019-0… A
# > 8 1326403213 RAJEE KRAUSE AGPCNP… NO F 2015-1… 2019-0… A
# > 9 1326403213 RAJEE KRAUSE AGPCNP… NO F 2015-1… 2019-0… A
# > 10 1326403213 RAJEE KRAUSE AGPCNP… NO F 2015-1… 2019-0… A
# > # … with 38 more rows, 33 more variables: basic_name <chr>,
# > # basic_name_prefix <chr>, basic_middle_name <chr>,
# > # basic_organization_name <chr>, basic_organizational_subpart <chr>,
# > # basic_authorized_official_credential <chr>,
# > # basic_authorized_official_first_name <chr>,
# > # basic_authorized_official_last_name <chr>,
# > # basic_authorized_official_middle_name <chr>, …
Sin embargo, debido a la cantidad de campos y la gran cantidad de potenciales combinaciones de valores, este enfoque es el más adecuado para pequeños conjuntos de datos. Lo más probable es que querrá aplanar un pequeño número de columnas de la lista del marco de datos original en una pasada, repitiendo el proceso con otras columnas de la lista que desea y fusionando después del hecho. Por ejemplo, para aplanar información básica de taxonomía del proveedor y proveedor, proporcione las columnas de la lista correspondientes como un vector de nombres para el argumento cols
:
# Flatten basic provider info and provider taxonomy, preserving the relationship
# of each to NPI number and discarding other list columns.
npi_flatten( nyc , cols = c( " basic " , " taxonomies " ))
# > # A tibble: 20 × 26
# > npi basic_fi…¹ basic…² basic…³ basic…⁴ basic…⁵ basic…⁶ basic…⁷ basic…⁸
# > <int> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
# > 1 1194276360 ALYSSA COWNAN PA NO F 2016-1… 2018-0… A
# > 2 1306849641 MARK MOHRMA… MD NO M 2005-0… 2019-0… A
# > 3 1306849641 MARK MOHRMA… MD NO M 2005-0… 2019-0… A
# > 4 1326403213 RAJEE KRAUSE AGPCNP… NO F 2015-1… 2019-0… A
# > 5 1326403213 RAJEE KRAUSE AGPCNP… NO F 2015-1… 2019-0… A
# > 6 1326403213 RAJEE KRAUSE AGPCNP… NO F 2015-1… 2019-0… A
# > 7 1346604592 SARAH LOWRY OTR/L YES F 2016-0… 2018-0… A
# > 8 1346604592 SARAH LOWRY OTR/L YES F 2016-0… 2018-0… A
# > 9 1427454529 YONGHONG TAN <NA> NO F 2014-1… 2018-1… A
# > 10 1558362566 AMY TIERST… M.D. YES F 2005-0… 2019-0… A
# > 11 1558713628 ROBYN NOHLING FNP-BC… YES F 2016-0… 2018-0… A
# > 12 1558713628 ROBYN NOHLING FNP-BC… YES F 2016-0… 2018-0… A
# > 13 1558713628 ROBYN NOHLING FNP-BC… YES F 2016-0… 2018-0… A
# > 14 1558713628 ROBYN NOHLING FNP-BC… YES F 2016-0… 2018-0… A
# > 15 1558713628 ROBYN NOHLING FNP-BC… YES F 2016-0… 2018-0… A
# > 16 1558713628 ROBYN NOHLING FNP-BC… YES F 2016-0… 2018-0… A
# > 17 1639173065 SAKSHI DUA M.D. YES F 2005-0… 2019-0… A
# > 18 1639173065 SAKSHI DUA M.D. YES F 2005-0… 2019-0… A
# > 19 1790786416 NOAH GOLDMAN M.D. NO M 2005-0… 2018-0… A
# > 20 1962983775 <NA> <NA> <NA> <NA> <NA> 2018-0… 2018-0… A
# > # … with 17 more variables: basic_name <chr>, basic_name_prefix <chr>,
# > # basic_middle_name <chr>, basic_organization_name <chr>,
# > # basic_organizational_subpart <chr>,
# > # basic_authorized_official_credential <chr>,
# > # basic_authorized_official_first_name <chr>,
# > # basic_authorized_official_last_name <chr>,
# > # basic_authorized_official_middle_name <chr>, …
Al igual que los números de tarjetas de crédito, los números de NPI se pueden confundir o dañarse en tránsito. Del mismo modo, los números de NPI emitidos oficialmente tienen un dígito de verificación para fines de verificación de errores. Use npi_is_valid()
para verificar si un número NPI que ha encontrado está construido válidamente:
# Validate NPIs
npi_is_valid( 1234567893 )
# > [1] TRUE
npi_is_valid( 1234567898 )
# > [1] FALSE
Tenga en cuenta que esta función no verifica si los números de NPI están activados o desactivados (ver #22). Simplemente verifica la consistencia del número con la especificación NPI. Como tal, puede ayudarlo a detectar y manejar problemas de calidad de datos temprano.
Un agente de usuario es una forma para que el software interactúe con una API para decirle quién o qué está haciendo la solicitud. Esto ayuda a los mantenedores de la API a comprender qué sistemas están utilizando la API. Por defecto, cuando npi
solicita la API NPPES, el encabezado de solicitud hace referencia al nombre del paquete y la URL para el repositorio (por ejemplo, 'NPI/0.2.0 (https://github.com/ropensci/npi) '). Si desea establecer un agente de usuario personalizado, actualice el valor de la opción npi_user_agent
. Por ejemplo, para la versión 1.0.0 de una aplicación llamada "my_app", puede ejecutar el siguiente código:
options( npi_user_agent = " my_app/1.0.0 " )
npi
tiene un sitio web con notas de versión, documentación en todas las funciones del usuario y ejemplos que muestran cómo se puede usar el paquete.
¿Viste un error? Me encantaría saber sobre eso en la página de temas.
Tenga en cuenta que este paquete se lanza con un código de conducta de contribuyentes. Al contribuir a este proyecto, usted acepta cumplir con sus términos.
¿Interesado en aprender cómo puede contribuir a NPI? Dirígete a la guía de contribuyentes, ¡y gracias por considerar!
Para obtener la última cita, consulte la página de autores y citas en el sitio web del paquete.
MIT (c) Frank Farach
El logotipo de este paquete tiene licencia bajo CC BY-SA 4.0 y co-creado por Frank Farach y Sam Parmar. El logotipo utiliza una versión modificada de una imagen de la barra de Asclepius y una lupa que se atribuye a Evanherk, GFDL.