Abstract: VA hospital admitting waiting times have become a political issue in the U.S., as the number of veteran patients experiencing delays has increased over time. The data show that overall VA admission waiting times are not actually that different from other non-VA hospitals. The data also show that VA wait time problems with delays tend to be concentrated in a fraction of the main hospitals across the US are worrisome. The data also suggest that while VA hospitals have been adjusting their supply of health services to local conditions (mainly related to the age and economic profile of patients), the influx of a large veteran population requiring treatment in primary care or mental health treatment is creating delays.
A preliminary review of the data by Dwight Steward, Ph.D. and Peter Cleary, Ph.D. is discussed below.
Extent of the problem
VA hospital waiting times for admission across the US are under fierce discussion. Overall, waiting times are not alarmingly high: out of six million appointments scheduled in May 2014, 96% of patients could visit a doctor within 30 days. That is slightly less than a quarter million of patients had to wait for more than a month to get an appointment at a hospital. Performance is not evenly distributed across hospitals. The wait time problem tends to be concentrated in 15 out of the 141 VA hospitals, where more than eight per cent of patients have to wait more than 30 days (Figure 1).
Waiting times
The major issue for VA patients is getting enrolled into the health system. Waiting times are significantly higher for new patients in primary, specialty or mental health care. In specialty care, new patients have to wait a full 45 days more than the established patients. The difference is 40 days for primary care, and a bit less (32 days) for mental health care.
A few hospitals have extremely long waiting times. For primary or speciality care, an appointment could take up to 5 months. The worst VA hospital performer in mental health care required a little more than 3 months to schedule an appointment. The bulk of established patients would be treated in 4 to 5 days for primary health or specialty care, and even within as little as 2 days in mental health care. For newly enrolled patients, the situation is more dramatic, as the bulk of patients is getting an appointment in just a bit less than 2 months in primary health or specialty care, and in 38 days for mental health care.
External factors
The data indicate that VA hospital waiting times depend on a number of factors. There is no evidence that waiting times depend much on the total number of appointments taken by patients. Hence, hospitals that are receiving many requests are not more inclined to put patients on longer waiting lists. Instead, it seems that a couple of external factors can explain the length of average waiting times.
Some VA hospitals may be faced with more patients than others due to the composition of the population to which they cater health services. For instance, an older population with few economic resources might be prone to illness, and require more care. US states with many military bases might also impact the number of veterans a hospital might need to prepare care for.
VA hospital waiting times for established patients are significantly lower in states with a larger presence of older and poorer people. VA hospitals in those states appear to be able to cope with the larger demand for health services. States with a larger fraction of the labor force employed in the armed forces also have significantly lower waiting times, suggesting that hospital capacity is better built out in those states with more of a military presences. By contrast, a larger fraction of the population with low education is associated with longer waiting times. The findings are quite similar for all three types of health care.
For newly enrolled VA patients, the external factor that is related to their waiting times is the fraction of veterans on the population.. That is the more veterans there are, the longer waiting times for primary or mental health care new patients. VA hospitals appear to adjust their staffing to population characteristics, but less so to the new influx of veterans requiring treatment.
The STATA programs and data used in this preliminary analysis are accessible from the directorybelow.
http://www.employstats.com/project_data/VA/
STATA code:
This file does the analysis for Elance14
* last update: 14/7/2014 17h00
*----------------------------------------------------------------------------------------------------------------
*log close
log using /Users/peterclaeys/Documents/FORUM/PROJECTS/2014/Elance14/results140714d.log, replace
use "/Users/peterclaeys/Documents/FORUM/PROJECTS/2014/Elance14/Elance14.dta", clear
set more off
*----------------------------------------------------------------------------------------------------------------
* DATA
*
* creation of categories
*tabstat vet, stats(mean max min sd variance semean)
summarize appoint
gen dumapp = 0
replace dumapp = 1 if appoint>r(mean)
summarize vet
gen dumvet = 0
replace dumvet = 1 if vet>r(mean)
summarize disab
gen dumdisab = 0
replace dumdisab = 1 if disab>r(mean)
summarize medage
gen dummedage = 0
replace dummedage = 1 if medage>r(mean)
summarize loweduc
gen dumloweduc = 0
replace dumloweduc = 1 if loweduc>r(mean)
summarize higheduc
gen dumhigheduc = 0
replace dumhigheduc = 1 if higheduc>r(mean)
summarize white
gen dumwhite = 0
replace dumwhite = 1 if white>r(mean)
summarize foreign
gen dumforeign = 0
replace dumforeign = 1 if foreign>r(mean)
summarize labforce
gen dumlabforce = 0
replace dumlabforce = 1 if labforce>r(mean)
summarize unempl
gen dumunempl = 0
replace dumunempl = 1 if unempl>r(mean)
summarize armed
gen dumarmed = 0
replace dumarmed = 1 if armed>r(mean)
summarize meanwage
gen dummeanwage = 0
replace dummeanwage = 1 if meanwage>r(mean)
summarize ssincome
gen dumssincome = 0
replace dumssincome = 1 if ssincome>r(mean)
summarize poverty
gen dumpoverty = 0
replace dumpoverty = 1 if poverty>r(mean)
summarize age60
gen dumage60 = 0
replace dumage60 = 1 if age60>r(mean)
/*
* statistics of time (overall)
tabstat avgnewp, stats(mean max min sd variance semean)
tabstat avgnews, stats(mean max min sd variance semean)
tabstat avgnewm, stats(mean max min sd variance semean)
tabstat avgestp, stats(mean max min sd variance semean)
tabstat avgests, stats(mean max min sd variance semean)
tabstat avgestm, stats(mean max min sd variance semean)
* t test
ttest avgnewp == avgestp
ttest avgnews == avgests
ttest avgnewm == avgestm
*----------------------------------------------------------------------------------------------------------------
* BASIC STATISTICS
* histogram of average waiting times
foreach nser in avgnewp avgnews avgnewm avgestp avgests avgestm {
histogram `nser', start(0) frac addl mlabsize(minuscule) mlabangle(90) normal
graph export /Users/peterclaeys/Documents/FORUM/PROJECTS/2014/Elance14/hist_`nser'.pdf, replace
}
* histogram of average waiting times, overlay with fraction of different categories
foreach ser in avgnewp avgnews avgnewm avgestp avgests avgestm {
twoway (histogram appoint, start(0) frac color(blue)) ///
(histogram `ser', frac start(0) ///
fcolor(none) lcolor(black)), legend(order(1 "appoint" 2 "avg" ))
graph export /Users/peterclaeys/Documents/FORUM/PROJECTS/2014/Elance14/H_appoint_`ser'.pdf, replace
}
/*
* histogram of Adjudication Active Time, plot for different categories
graph bar (sum) avgnews , over(appoint) asyvars stack legend(order(1 "AA time with denial=0" 2 "AA time with denial=1" 3 "AA time with denial=2" 4 "AA time with denial=3" 5 "AA time with denial=4"))
graph export /Users/peterclaeys/Documents/FORUM/EMTAN/Files/Elance/Elance8/B_aat1_rfe_denial.pdf, replace
*/
* ANOVA test for difference in mean of aat1 by different characteristics
foreach ser in avgnewp avgnews avgnewm avgestp avgests avgestm {
anova `ser' appoint
anova `ser' dumvet
anova `ser' dumdisab
anova `ser' dummedage
anova `ser' dumwhite
anova `ser' dumloweduc
anova `ser' dumhigheduc
anova `ser' dumforeign
anova `ser' dumlabforce
anova `ser' dumunempl
anova `ser' dumarmed
anova `ser' dummeanwage
anova `ser' dumssincome
anova `ser' dumpoverty
anova `ser' dumage60
}
*/
*----------------------------------------------------------------------------------------------------------------
* Regression analysis
*** DURATION MODEL
foreach ser in `ser' avgnewp avgnews avgnewm avgestp avgests avgestm {
di " ----------------------------------------------- " `ser'
stset `ser'
stdes
sts graph
graph export /Users/peterclaeys/Documents/FORUM/PROJECTS/2014/Elance14/STS_`ser'.pdf, replace
sts test dumapp, logrank
streg appoint vet medage loweduc armed ssincome poverty, dist(exp) nohr
/*
sts graph
graph export /Users/peterclaeys/Documents/FORUM/PROJECTS/2014/Elance14/STS_`ser'.pdf, replace
sts graph, by(dumvet)
graph export /Users/peterclaeys/Documents/FORUM/PROJECTS/2014/Elance14/STS_`ser'_vet.pdf, replace
sts graph, by(dumdisab)
graph export /Users/peterclaeys/Documents/FORUM/PROJECTS/2014/Elance14/STS_`ser'_disab.pdf, replace
sts graph, by(dummedage)
graph export /Users/peterclaeys/Documents/FORUM/PROJECTS/2014/Elance14/STS_`ser'_medage.pdf, replace
sts graph, by(dumwhite)
graph export /Users/peterclaeys/Documents/FORUM/PROJECTS/2014/Elance14/STS_`ser'_white.pdf, replace
sts graph, by(dumloweduc)
graph export /Users/peterclaeys/Documents/FORUM/PROJECTS/2014/Elance14/STS_`ser'_loweduc.pdf, replace
sts graph, by(dumhigheduc)
graph export /Users/peterclaeys/Documents/FORUM/PROJECTS/2014/Elance14/STS_`ser'_higheduc.pdf, replace
sts graph, by(dumforeign)
graph export /Users/peterclaeys/Documents/FORUM/PROJECTS/2014/Elance14/STS_`ser'_foreign.pdf, replace
sts graph, by(dumlabforce)
graph export /Users/peterclaeys/Documents/FORUM/PROJECTS/2014/Elance14/STS_`ser'_labforce.pdf, replace
sts graph, by(dumunempl)
graph export /Users/peterclaeys/Documents/FORUM/PROJECTS/2014/Elance14/STS_`ser'_unempl.pdf, replace
sts graph, by(dumarmed)
graph export /Users/peterclaeys/Documents/FORUM/PROJECTS/2014/Elance14/STS_`ser'_armed.pdf, replace
sts graph, by(dummeanwage)
graph export /Users/peterclaeys/Documents/FORUM/PROJECTS/2014/Elance14/STS_`ser'_meanwage.pdf, replace
sts graph, by(dumssincome)
graph export /Users/peterclaeys/Documents/FORUM/PROJECTS/2014/Elance14/STS_`ser'_ssincome.pdf, replace
sts graph, by(dumpoverty)
graph export /Users/peterclaeys/Documents/FORUM/PROJECTS/2014/Elance14/STS_`ser'_poverty.pdf, replace
sts graph, by(dumage60)
graph export /Users/peterclaeys/Documents/FORUM/PROJECTS/2014/Elance14/STS_`ser'_age60.pdf, replace
* test
sts test dumvet, logrank
sts test dumdisab, logrank
sts test dummedage, logrank
sts test dumwhite, logrank
sts test dumloweduc, logrank
sts test dumhigheduc, logrank
sts test dumforeign, logrank
sts test dumlabforce, logrank
sts test dumunempl, logrank
sts test dumarmed, logrank
sts test dummeanwage, logrank
sts test dumssincome, logrank
sts test dumpoverty, logrank
sts test dumage60, logrank
*/
* regression
*streg vet disab medage white loweduc higheduc foreign labforce unempl armed meanwage ssincome poverty age60, dist(exp) nohr
streg vet medage loweduc armed ssincome poverty, dist(exp) nohr
*streg vet disab, dist(exp) nohr
}
/*
di " %saving estimates in: ...FORUM/PROJECTS/2014/Elance14/results_project_xx0714.xls"
xml_tab aat01 aat02 aat03 aat04 ///
using "/Users/peterclaeys/Documents/FORUM/EMTAN/Files/Elance/Elance8/results_project_260514b.xls", tstat below append sheet("results") stats(N r2_a F)
estimates drop *
*/
*----------------------------------------------------------------------------------------------------------------
log close