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/
- Elance14.do
- elance14.csv
- elance14.dta
- results140714b.log
- results140714c.log
- results140714d (1).log
- stats.xls
- stats2.xls
- wait-times-veterans-affairs-facilities.xlsx
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