The tables will be pulled from the indicators page (https://www.who.int/data/gho/data/indicators), specifically for the assistve technology (AT) indicator, on the WHO website.
Prevalence of AT need(https://www.who.int/data/gho/data/indicators/indicator-details/GHO/prevalence-of-need-of-assistive-products-(-))
Prevalence of AT use (https://www.who.int/data/gho/data/indicators/indicator-details/GHO/prevalence-of-use-of-assistive-products)
AT education resources available (https://www.who.int/data/gho/data/indicators/indicator-details/GHO/availability-of-education-or-training-covering-the-assessment-fitting-and-user-training-of-assistive-products)
What is the prevalence for need and use assistive technologies (ATs) across the data?
What is the prevalence for need and use of vision related assistive technologies (ATs) within a specific parent location (Europe)? What about across the different countries within Europe?
What is the prevalence for need and use of hearing related assistive technologies (ATs) within a specific parent location (Europe)? What about across the different countries within Europe?
How does the need and use of ATs compare across parent locations? Are they correlated with each other (e.g. if the need increases, does use increase, decrease or neither)
What are the most common types of AT education in each country?
prevATUse <- read_csv("Final Project/Prev_Use_AT.csv")
## Rows: 1430 Columns: 34
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (15): IndicatorCode, Indicator, ValueType, ParentLocationCode, ParentLo...
## dbl (3): Period, FactValueNumeric, FactValueTranslationID
## lgl (15): IsLatestYear, Dim2 type, Dim2, Dim2ValueCode, Dim3 type, Dim3, Di...
## dttm (1): DateModified
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
head(prevATUse)
## # A tibble: 6 × 34
## IndicatorCode Indicator ValueType ParentLocationCode ParentLocation
## <chr> <chr> <chr> <chr> <chr>
## 1 ASSISTIVETECH_USEPREVAL… Prevalen… numeric EUR Europe
## 2 ASSISTIVETECH_USEPREVAL… Prevalen… numeric EUR Europe
## 3 ASSISTIVETECH_USEPREVAL… Prevalen… numeric EUR Europe
## 4 ASSISTIVETECH_USEPREVAL… Prevalen… numeric EUR Europe
## 5 ASSISTIVETECH_USEPREVAL… Prevalen… numeric EUR Europe
## 6 ASSISTIVETECH_USEPREVAL… Prevalen… numeric EUR Europe
## # ℹ 29 more variables: `Location type` <chr>, SpatialDimValueCode <chr>,
## # Location <chr>, `Period type` <chr>, Period <dbl>, IsLatestYear <lgl>,
## # `Dim1 type` <chr>, Dim1 <chr>, Dim1ValueCode <chr>, `Dim2 type` <lgl>,
## # Dim2 <lgl>, Dim2ValueCode <lgl>, `Dim3 type` <lgl>, Dim3 <lgl>,
## # Dim3ValueCode <lgl>, DataSourceDimValueCode <lgl>, DataSource <lgl>,
## # FactValueNumericPrefix <lgl>, FactValueNumeric <dbl>, FactValueUoM <lgl>,
## # FactValueNumericLowPrefix <lgl>, FactValueNumericLow <lgl>, …
prevATNeed <- read_csv("Final Project/Prev_Need_AT.csv")
## Rows: 1435 Columns: 34
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (15): IndicatorCode, Indicator, ValueType, ParentLocationCode, ParentLo...
## dbl (3): Period, FactValueNumeric, FactValueTranslationID
## lgl (15): IsLatestYear, Dim2 type, Dim2, Dim2ValueCode, Dim3 type, Dim3, Di...
## dttm (1): DateModified
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
head(prevATNeed)
## # A tibble: 6 × 34
## IndicatorCode Indicator ValueType ParentLocationCode ParentLocation
## <chr> <chr> <chr> <chr> <chr>
## 1 ASSISTIVETECH_TOTALNEED Prevalenc… numeric AFR Africa
## 2 ASSISTIVETECH_TOTALNEED Prevalenc… numeric AFR Africa
## 3 ASSISTIVETECH_TOTALNEED Prevalenc… numeric AFR Africa
## 4 ASSISTIVETECH_TOTALNEED Prevalenc… numeric AFR Africa
## 5 ASSISTIVETECH_TOTALNEED Prevalenc… numeric AFR Africa
## 6 ASSISTIVETECH_TOTALNEED Prevalenc… numeric AFR Africa
## # ℹ 29 more variables: `Location type` <chr>, SpatialDimValueCode <chr>,
## # Location <chr>, `Period type` <chr>, Period <dbl>, IsLatestYear <lgl>,
## # `Dim1 type` <chr>, Dim1 <chr>, Dim1ValueCode <chr>, `Dim2 type` <lgl>,
## # Dim2 <lgl>, Dim2ValueCode <lgl>, `Dim3 type` <lgl>, Dim3 <lgl>,
## # Dim3ValueCode <lgl>, DataSourceDimValueCode <lgl>, DataSource <lgl>,
## # FactValueNumericPrefix <lgl>, FactValueNumeric <dbl>, FactValueUoM <lgl>,
## # FactValueNumericLowPrefix <lgl>, FactValueNumericLow <lgl>, …
eduAT <- read_csv("Final Project/Ava_Edu_AT.csv")
## Rows: 490 Columns: 34
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (14): IndicatorCode, Indicator, ValueType, ParentLocationCode, ParentLo...
## dbl (2): Period, FactValueTranslationID
## lgl (17): IsLatestYear, Dim2 type, Dim2, Dim2ValueCode, Dim3 type, Dim3, Di...
## dttm (1): DateModified
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
head(eduAT)
## # A tibble: 6 × 34
## IndicatorCode Indicator ValueType ParentLocationCode ParentLocation
## <chr> <chr> <chr> <chr> <chr>
## 1 ASSISTIVETECH_Q07 Availability of… text EMR Eastern Medit…
## 2 ASSISTIVETECH_Q07 Availability of… text EMR Eastern Medit…
## 3 ASSISTIVETECH_Q07 Availability of… text EMR Eastern Medit…
## 4 ASSISTIVETECH_Q07 Availability of… text EMR Eastern Medit…
## 5 ASSISTIVETECH_Q07 Availability of… text EMR Eastern Medit…
## 6 ASSISTIVETECH_Q07 Availability of… text EMR Eastern Medit…
## # ℹ 29 more variables: `Location type` <chr>, SpatialDimValueCode <chr>,
## # Location <chr>, `Period type` <chr>, Period <dbl>, IsLatestYear <lgl>,
## # `Dim1 type` <chr>, Dim1 <chr>, Dim1ValueCode <chr>, `Dim2 type` <lgl>,
## # Dim2 <lgl>, Dim2ValueCode <lgl>, `Dim3 type` <lgl>, Dim3 <lgl>,
## # Dim3ValueCode <lgl>, DataSourceDimValueCode <lgl>, DataSource <lgl>,
## # FactValueNumericPrefix <lgl>, FactValueNumeric <lgl>, FactValueUoM <lgl>,
## # FactValueNumericLowPrefix <lgl>, FactValueNumericLow <lgl>, …
I checked different columns using distinct function in the console to remove any columns that did not contain any data. I also checked to see if columns have repetitive data (e.g. Dim 1 Type has the same information found in Dim1 and Dim1ValueCode).
I will remove all these columns from all the data sets with the intention to join them when we learn how to do that next week.
#remove `IndicatorCode`, `ValueType`, `ParentLocationCode`, `Location type`, `SpatialDimValueCode`, `Period type`, `IsLatestYear`, `Dim1 type`, `Dim2 type`, `Dim3 type`. `DataSource`, `FactValueNumericPrefix`, `FactValueUoM`, `FactValueNumericLowPrefix`, `FactValueNumericHigh`, `Language` from all the data sets
prevATUseClean <- prevATUse %>%
select(-`IndicatorCode`, -`ValueType`, -`ParentLocationCode`,
-`Location type`, -`SpatialDimValueCode`, -`Period type`,
-`IsLatestYear`, -`Dim1 type`, -`Dim2 type`, -`Dim3 type`,
-`DataSource`, -`FactValueNumericPrefix`, -`FactValueUoM`,
-`FactValueNumericLowPrefix`, -`FactValueNumericHigh`, -`Language`)
prevATNeedClean <- prevATNeed %>%
select(-`IndicatorCode`, -`ValueType`, -`ParentLocationCode`,
-`Location type`, -`SpatialDimValueCode`, -`Period type`,
-`IsLatestYear`, -`Dim1 type`, -`Dim2 type`, -`Dim3 type`,
-`DataSource`, -`FactValueNumericPrefix`, -`FactValueUoM`,
-`FactValueNumericLowPrefix`, -`FactValueNumericHigh`, -`Language`)
eduATClean <- eduAT %>%
select(-`IndicatorCode`, -`ValueType`, -`ParentLocationCode`,
-`Location type`, -`SpatialDimValueCode`, -`Period type`,
-`IsLatestYear`, -`Dim1 type`, -`Dim2 type`, -`Dim3 type`,
-`DataSource`, -`FactValueNumericPrefix`, -`FactValueUoM`,
-`FactValueNumericLowPrefix`, -`FactValueNumericHigh`, -`Language`)
#NEED DATA FRAME: make `Value` numeric rather than categorical as it is the decimal of what the prevalence of each assistive technology is in each country
typeof(prevATNeedClean$Value)
## [1] "character"
#NEED DATA FRAME: change Value from character to numeric
prevATNeedClean$Value <- as.numeric(gsub("[^0-9.]", "", prevATNeedClean$Value))
#NEED DATA FRAME: Check the data type again
typeof(prevATNeedClean$Value)
## [1] "double"
#USE DATA FRAME: make `Value` numeric rather than categorical as it is the decimal of what the prevalence of each assistive technology is in each country
typeof(prevATUseClean$Value)
## [1] "character"
#USE DATA FRAME: change Value from character to numeric
prevATUseClean$Value <- as.numeric(gsub("[^0-9.]", "", prevATUseClean$Value))
#USE DATA FRAME: Check the data type again
typeof(prevATUseClean$Value)
## [1] "double"
shortenATLabels <- function(data) {
shorten <- data %>%
mutate(DimUpdated = case_when(
Dim1 %in% c("Audio-players with DAISY capability") ~ "Audio-players",
Dim1 %in% c("Grab-bars / Hand rails") ~ "Grab-bars",
Dim1 %in% c("Braille displays (note takers)") ~ "Braille displays",
Dim1 %in% c("Braille writing equipment/braillers") ~ "Braille writing",
Dim1 %in% c("Closed captioning displays") ~ "CC display",
Dim1 %in% c("Pressure relief cushions") ~ "Cushions",
Dim1 %in% c("Deafblind communicators (for seeing/vision)") ~ "Deafblind vision comms.",
Dim1 %in% c("Gesture to voice technology") ~ "Gesture to voice",
Dim1 %in% c("Global Positioning System (GPS) locators") ~ "GPS locator",
Dim1 %in% c("Keyboard and mouse emulation software") ~ "Keyboard/mouse emulation",
Dim1 %in% c("Orthoses (upper limb)") ~ "Upper orthoses",
Dim1 %in% c("Personal emergency alarm systems") ~ "Alarm system",
Dim1 %in% c("Prostheses (lower limb)") ~ "Lower protheses",
Dim1 %in% c("Prostheses (upper limb)*") ~ "Upper protheses",
Dim1 %in% c("Ramps, portable") ~ "Portable ramp",
Dim1 %in% c("Rollators") ~ "Walker",
Dim1 %in% c("Screen readers") ~ "Screen reader",
Dim1 %in% c("Simplified mobile phones") ~ "Simplified mobile phones",
Dim1 %in% c("Smart phones/tablets/PDA (for communication)") ~ "Smart phone for comm",
Dim1 %in% c("Smart phones/tablets/PDA (for hearing)") ~ "Smart phone for hearing",
Dim1 %in% c("Smart phones/tablets/PDA (for seeing/vision)") ~ "Smart phone for vision",
Dim1 %in% c("Therapeutic footwear (diabetic, neuropathic, orthopedic)") ~ "Therapeutic footwear",
Dim1 %in% c("Travel aids, portable") ~ "Travel aids",
Dim1 %in% c("Video communication devices") ~ "Video comms",
Dim1 %in% c("Watches, talking/touching") ~ "Watches",
Dim1 %in% c("Deafblind communicators (for hearing)") ~ "Deafblind vision hearing",
Dim1 %in% c("Hearing loops/FM systems") ~ "Hearing loops",
Dim1 %in% c("Incontinence products, absorbent") ~ "Incontinence Prod",
Dim1 %in% c("Smart phones/tablets/PDA (for cognition)") ~ "Smart phone for cog.",
Dim1 %in% c("Standing frames, adjustable") ~ "Standing frames",
Dim1 %in% c("Time management products") ~ "Time Manag.",
Dim1 %in% c("Chairs for shower/bath/toilet") ~ "Shower Chairs",
Dim1 %in% c("Club foot braces") ~ "Foot braces",
Dim1 %in% c("Communication boards/books/cards") ~ "Comms Boards",
Dim1 %in% c("Communication software") ~ "Comms software",
Dim1 %in% c("Magnifiers, digital handheld") ~ "Digital Magnifier",
Dim1 %in% c("Magnifiers, optical") ~ "Optical magnifier",
Dim1 %in% c("Orthoses (lower limb)") ~ "Lower Orthoses",
Dim1 %in% c("Wheelchairs, electrically powered") ~ "Electric wheelchair",
Dim1 %in% c("Wheelchairs, manual with postural support") ~ "Manual wheelchair",
Dim1 %in% c("Alarm signalers with light/sound/vibration") ~ "A11y alarm signalers",
Dim1 %in% c("Orthoses (spinal)") ~ "Spinal Orthoses",
Dim1 %in% c("walking frames/walkers") ~ "Walker",
Dim1 %in% c("Manual wheelchairs - push type") ~ "Manual Wheelchair",
Dim1 %in% c("Manual wheelchairs - basic type for active users") ~ "Manual Wheelchair",
Dim1 %in% c("Axillary / Elbow crutches") ~ "Crutches",
Dim1 %in% c("Hearing aids (digital) and batteries") ~ "Hearing Aids",
Dim1 %in% c("Canes/sticks, tripod and quadripod") ~ "Canes",
Dim1 %in% c("Spectacles; low-vision, short/long distance/filters etc") ~ "Vision Glasses",
TRUE ~ as.character(Dim1)
))
return(shorten)
}
prevATUseClean1 <- shortenATLabels(prevATUseClean)
prevATNeedClean1 <- shortenATLabels(prevATNeedClean)
During this analysis, I want to have visualizations of the prevalent different types of assistive technology grouped by different accessibility groups. In order to look at all these assistive technologies, I will be grouping them into 6 accessibility/disability categories. I organized it by the accessibility/disability category that I believe it is the most applicable to.
This approach has it limitations. Assistive technology does not ‘belong’ to only one accessibility/disability category as it can be applicable to multiple different disabilities. This is just to give a visual estimation that is visually less overwhelming than seeing 53 individual type of assistive technologies.
Below are how I categorized the assistive technologies.
HEARING - Audio-players - CC display - Gesture to voice - Smart phone for hearing - Deafblind vision hearing - Hearing loops - Hearing Aids - A11y alarm signalers
LOWER BODY MOBILITY - Grab-bars - Cushions - Fall detectors - Lower protheses - Portable ramp - Walker - Therapeutic footwear - Travel aids - tricycles - Standing frames - Shower Chairs - Pressure relief mattresses - Foot braces - Lower Orthoses - Electric wheelchair - Manual wheelchair - Spinal Orthoses - Manual Wheelchair - Crutches - Canes
VISION - Braille displays - Braille writing - Screen reader - Smart phone for vision - White canes - Digital Magnifier - Optical magnifier - Vision Glasses
COGNITION - GPS locator - Alarm system - Pill organizers - Simplified mobile phones - Watches - Incontinence Prod - Smart phone for cog. - Time Manag. - Recorders
UPPER BODY MOBILITY - Keyboard/mouse emulation - Upper orthoses - Upper protheses
SPEECH - Smart phone for comm - Deafblind vision comms. - Video comms - Comms Boards - Comms software
Since we will be looking more closely at vision and hearing AT, below I will define what each of the AT to ensure there is no misinterpretation of what is most prevalent
VISION
Braille displays: This tool provide access to information on a computer screen by electronically raising and lowering different combinations of pins in braille cells.
Braille writing: A tactile writing system used by people who are visually impaired on physical products
Screen reader: A tool that renders text and image content from a digitial format to an auditory one.
Smart phone for vision: A smart device specifically make for individuals with vision impairment
White canes: A mobility device for individuals who are blind to feel their surrounds while moving
Digital Magnifier: an electronic reading aid for people
Optical magnifier: A magnifying glass
Vision Glasses: Glasses that help individuals read or see farther away
HEARING
Audio-players: a piece of computer software for playing audio files.
CC display: Closed captioning which displays what videos are saying in written form
Gesture to voice: any nonverbal communication, such as verbal cues and voice commands, that intends to convey information to the computer.
Smart phone for hearing: Use of a smart phone specifically for hearing
Deafblind vision used for hearing: Examples of this technology are teletypewriters (TTY) or a telephone device for the deaf (TDD).
Hearing loops: Is a system in which an audio source can be transmitted to a devices someone can wear to hear better in circumstances such as pharmacies, information desks, subway ticket counters, auditoriums, etc.
Hearing Aids: is small electronic device that you wear in or behind your ear that makes some sounds louder.
A11y alarm signalers: Alarms made to alert people who are deaf and/or hard of hearing to changes within their environment.
#Create function so all data frames can have a new column added for accessibility category
a11yCatAdded <- function(data) {
result <- data %>%
mutate('Accessibility Category' = case_when(
`DimUpdated` %in% c(
"Braille displays",
"Braille writing",
"Screen reader",
"Smart phone for vision",
"White canes",
"Digital Magnifier",
"Optical magnifier",
"Vision Glasses"
) ~ "Vision AT",
`DimUpdated` %in% c(
"Audio-players",
"CC display",
"Gesture to voice",
"Smart phone for hearing",
"Deafblind vision hearing",
"Hearing loops",
"Hearing Aids",
"A11y alarm signalers"
) ~ "Hearing AT",
`DimUpdated` %in% c(
"Grab-bars",
"Cushions",
"Fall detectors",
"Lower protheses",
"Portable ramp",
"Walker",
"Therapeutic footwear",
"Travel aids",
"tricycles",
"Standing frames",
"Shower Chairs",
"Pressure relief mattresses",
"Foot braces",
"Lower Orthoses",
"Electric wheelchair",
"Manual wheelchair",
"Spinal Orthoses",
"Manual Wheelchair",
"Canes",
"Crutches"
) ~ "Lower Mobility AT",
`DimUpdated` %in% c(
"GPS locator",
"Alarm system",
"Pill organizers",
"Simplified mobile phones",
"Watches",
"Incontinence Prod",
"Smart phone for cog.",
"Time Manag.",
"Recorders"
) ~ "Cognition AT",
`DimUpdated` %in% c(
"Keyboard/mouse emulation",
"Upper orthoses",
"Upper protheses"
) ~ "Upper Mobility AT",
`DimUpdated` %in% c(
"Smart phone for comm",
"Deafblind vision comms.",
"Video comms",
"Comms Boards",
"Comms software"
) ~ "Speech AT",
TRUE ~ as.character(`DimUpdated`)
))
return(result)
}
prevATUseClean2 <- a11yCatAdded(prevATUseClean1)
prevATNeedClean2 <- a11yCatAdded(prevATNeedClean1)
World health organization does not all have the data for all the countries in the world. So the graphs don’t get mis-interperted without being aware of what coutries are included, below is a table of all the countries grouped by their parent location.
#Countries within the use prevalance data frame
countriesPrevATUse <- prevATUseClean2 %>%
group_by(ParentLocation) %>%
summarize(
Locations = toString(unique(Location)),
LocationCount = n_distinct(Location)
) %>%
ungroup()
countriesPrevATUse
## # A tibble: 6 × 3
## ParentLocation Locations LocationCount
## <chr> <chr> <int>
## 1 Africa Burkina Faso, Kenya, Liberia, Malawi, Sen… 6
## 2 Americas Dominican Republic, Guatemala 2
## 3 Eastern Mediterranean Djibouti, Iran (Islamic Republic of), Ira… 5
## 4 Europe Azerbaijan, Georgia, Italy, Poland, Swede… 7
## 5 South-East Asia Indonesia, Maldives, Nepal, Myanmar 4
## 6 Western Pacific China, Mongolia 2
#Countries within the need prevalance data frame. This is the same as the use data frame
countriesPrevATNeed <- prevATNeedClean2 %>%
group_by(ParentLocation) %>%
summarize(
Locations = toString(unique(Location)),
LocationCount = n_distinct(Location)
) %>%
ungroup()
countriesPrevATNeed
## # A tibble: 6 × 3
## ParentLocation Locations LocationCount
## <chr> <chr> <int>
## 1 Africa Burkina Faso, Kenya, Liberia, Senegal, To… 6
## 2 Americas Dominican Republic, Guatemala 2
## 3 Eastern Mediterranean Djibouti, Iran (Islamic Republic of), Ira… 5
## 4 Europe Poland, Sweden, Tajikistan, Ukraine, Azer… 7
## 5 South-East Asia Indonesia, Maldives, Nepal, Myanmar 4
## 6 Western Pacific China, Mongolia 2
# for reference the Americas can actually be broken down into 4 areas (North America, South America, The Caribbean, Central America) Within those four areas there are 35 countries. This who data frame only has 2 countries data. It is important to take the visualations and data with a large grain of salt. It will not be representative of the parent areas.
#Countries within the education avaliability data frame. This is the same as the use data frame. This is more represenative than the other two data frames
countriesEduAT <- eduATClean %>%
group_by(ParentLocation) %>%
summarize(
Locations = toString(unique(Location)),
LocationCount = n_distinct(Location)
) %>%
ungroup()
countriesEduAT
## # A tibble: 6 × 3
## ParentLocation Locations LocationCount
## <chr> <chr> <int>
## 1 Africa Gambia, Mali, Mauritius, Niger, Nigeria, … 21
## 2 Americas Antigua and Barbuda, Brazil, Guatemala, N… 12
## 3 Eastern Mediterranean Afghanistan, Bahrain, Djibouti, Iraq, Jor… 10
## 4 Europe Belgium, Croatia, Czechia, The former Yug… 16
## 5 South-East Asia Myanmar, Sri Lanka, Timor-Leste, Bhutan, … 7
## 6 Western Pacific Brunei Darussalam, Australia, New Zealand… 4
#organizing the data by grouping by parent country and accessibility (a11y) category type. The summing up the prevalnce of the categorized AT for each parent location. Since not all the data is avaliable for all types of AT, I have it remove NA values
prevNeedA11yCatParentLocation <- prevATNeedClean2 %>%
group_by(ParentLocation, `Accessibility Category`) %>%
summarise(CatMean = mean(FactValueNumeric, na.rm = TRUE)) %>%
ungroup()
## `summarise()` has grouped output by 'ParentLocation'. You can override using
## the `.groups` argument.
#visualing the different parent locations by AT category. Vision has the most need across all the parent countries followed behind with lower mobility AT. Hearing and hearing AT are very close and switch between 3rd and 4th depending on the parent location
prevNeedA11yCatParentLocation %>%
ggplot(aes(x = reorder(`Accessibility Category`, -CatMean), y = CatMean)) +
geom_bar(stat = "identity", fill = 'lightblue')+
geom_text(aes(label = sprintf("%.2f", CatMean)), vjust = -0.5, color = "white", size = 3) +
geom_point(data = prevATNeedClean2, aes(x = reorder(`Accessibility Category`, -FactValueNumeric), y = FactValueNumeric), alpha = 0.2) +
theme_dark() +
theme(axis.text.x = element_text(angle = 45, hjust = 1), plot.title = element_text(hjust = 0.5)) +
labs(title = "Assistive Tech need prevalence grouped\n by Accessibility category and Parent Location", x = "Assistive Technology Category") +
scale_y_continuous(name = "Prevalence", labels = scales::percent_format(scale = 1), limits = c(0, 70)) +
facet_wrap(vars(ParentLocation))
## Warning: Removed 55 rows containing missing values (`geom_point()`).
#because most of the individual data points are from vision AT, it is hear to see the points for the rest of the AT. Here I will decrease the limits ofthe Y axis focus on the AT besides vision. Excluding vision, there is some more variation across the different parent locations for lower body mobility, hearing and cognition.
prevNeedA11yCatParentLocation %>%
ggplot(aes(x = reorder(`Accessibility Category`, -CatMean), y = CatMean)) +
geom_bar(stat = "identity", fill = 'lightblue')+
geom_text(aes(label = sprintf("%.2f", CatMean)), vjust = -0.5, color = "white", size = 3) +
geom_point(data = prevATNeedClean2, aes(x = reorder(`Accessibility Category`, -FactValueNumeric), y = FactValueNumeric), alpha = 0.2) +
theme_dark() +
theme(axis.text.x = element_text(angle = 45, hjust = 1), plot.title = element_text(hjust = 0.5)) +
labs(title = "Assistive Tech need prevalence grouped\n by Accessibility category and Parent Location y-axis adjusted down", x = "Assistive Technology Category") +
scale_y_continuous(name = "Prevalence", labels = scales::percent_format(scale = 1), limits = c(0, 10)) +
facet_wrap(vars(ParentLocation))
## Warning: Removed 75 rows containing missing values (`geom_point()`).
prevUseA11yCatParentLocation <- prevATUseClean2 %>%
group_by(ParentLocation, `Accessibility Category`) %>%
summarise(CatMean = mean(FactValueNumeric, na.rm = TRUE)) %>%
ungroup()
## `summarise()` has grouped output by 'ParentLocation'. You can override using
## the `.groups` argument.
#visualing the different parent locations by AT category. Use follows the same trend as need prevelance although the look a bit lower.
prevUseA11yCatParentLocation %>%
ggplot(aes(x = reorder(`Accessibility Category`, -CatMean), y = CatMean)) +
geom_bar(stat = "identity", fill = 'lightblue') +
geom_text(aes(label = sprintf("%.2f", CatMean)), vjust = -0.5, color = "white", size = 3) +
geom_point(data = prevATNeedClean2, aes(x = reorder(`Accessibility Category`, -FactValueNumeric), y = FactValueNumeric), alpha = 0.2) +
theme_dark() +
theme(axis.text.x = element_text(angle = 45, hjust = 1), plot.title = element_text(hjust = 0.5)) +
labs(title = "Assistive Tech use prevalence grouped\n by Accessibility category and Parent Location", x = "Assistive Technology Category") +
scale_y_continuous(name = "Prevalence", labels = scales::percent_format(scale = 1), limits = c(0, 60)) +
facet_wrap(vars(ParentLocation))
## Warning: Removed 56 rows containing missing values (`geom_point()`).
#because most of the individual data points are from vision AT, it is hear to see the points for the rest of the AT. Here I will decrease the limits ofthe Y axis focus on the AT besides vision. Excluding vision, there is some more variation across the diffrent parent locations for all AT groups except upper mobility AT.
prevUseA11yCatParentLocation %>%
ggplot(aes(x = reorder(`Accessibility Category`, -CatMean), y = CatMean)) +
geom_bar(stat = "identity", fill = 'lightblue') +
geom_text(aes(label = sprintf("%.2f", CatMean)), vjust = -0.5, color = "white", size = 3) +
geom_point(data = prevATNeedClean2, aes(x = reorder(`Accessibility Category`, -FactValueNumeric), y = FactValueNumeric), alpha = 0.2) +
theme_dark() +
theme(axis.text.x = element_text(angle = 45, hjust = 1), plot.title = element_text(hjust = 0.5)) +
labs(title = "Assistive Tech use prevalence grouped by Accessibility\n category and Parent Location y-axis adjusted down", x = "Assistive Technology Category") +
scale_y_continuous(name = "Prevalence", labels = scales::percent_format(scale = 1), limits = c(0, 10)) +
facet_wrap(vars(ParentLocation))
## Warning: Removed 75 rows containing missing values (`geom_point()`).
#making a table with only the information I need before I join it together. Also re-labeling the value column to be specific to need values
prevNeedA11yCatParentLocation1 <- prevNeedA11yCatParentLocation %>%
rename("Need Value" = CatMean)
#re-labeling the value column to be specific to use values
prevUseA11yCatParentLocation1 <- prevUseA11yCatParentLocation %>%
rename("Use Value" = CatMean)
#joining the two simplified data frames
prevNeedVsUseParentLocation <- left_join(
prevNeedA11yCatParentLocation1,
prevUseA11yCatParentLocation1,
by = c("ParentLocation", "Accessibility Category")
)
#pivoting longer to column the values in Need Value and Use values
prevNeedVsUseParentLocationLong <- prevNeedVsUseParentLocation %>%
pivot_longer(c(`Need Value`, `Use Value`), names_to = "PrevType", values_to = "Value")
#making the visualization. Although the bars are next to each other, it is hard to read what the difference in need versus use is for each category.
prevNeedVsUseParentLocationLong %>%
group_by(ParentLocation, `Accessibility Category`, PrevType) %>%
summarise(sumValue = sum(Value, na.rm = TRUE)) %>%
ungroup() %>%
ggplot(aes(x = reorder(`Accessibility Category`, -sumValue), y = sumValue, fill = PrevType)) +
geom_bar(stat = "identity", position = "dodge", color = "black") +
geom_text(aes(label = sprintf("%.2f", sumValue)), position = position_dodge(width = 0.9), vjust = -0.5, color = "black", size = 2) +
scale_fill_okabeito(name = "Prevalence") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1), plot.title = element_text(hjust = 0.5)) +
labs(
title = "Assistive Tech need and use prevalence grouped by\n Accessibility category and Parent Location",
x = "Assistive Technology Category",
y = "Prevalence",
fill = "PrevType"
) +
scale_y_continuous(labels = scales::percent_format(scale = 1), limits = c(0, 5)) +
facet_wrap(vars(ParentLocation), scales = "free_x")
## `summarise()` has grouped output by 'ParentLocation', 'Accessibility Category'.
## You can override using the `.groups` argument.
#subtracting the need versus use
prevNeedVsUseParentLocation1 <- prevNeedVsUseParentLocation %>%
mutate(`Difference Between Need and Use` = (`Use Value` - `Need Value`))
#plot the difference. If it is a positive number then the use is more than the need (colored green). If it is a negative number then the need is more than use (colored red). There is no country that has more use than reported need. Vision has the most difference across the board for all parent countries, which could be coorlated to having the highest need from previous graphs
prevNeedVsUseParentLocation1 %>%
ggplot(aes(
x = reorder(`Accessibility Category`, `Difference Between Need and Use`),
y = `Difference Between Need and Use`,
fill = `Difference Between Need and Use`
)) +
geom_bar(stat = "identity", position = "dodge", color = "black") +
geom_text(
aes(label = sprintf("%.2f",`Difference Between Need and Use`)),
position = position_dodge(width = 0.9),
vjust = -0.5,
color = "black",
size = 2
) +
scale_fill_gradientn(
name = "Difference Between Need and Use",
colors = c("red", "green"),
values = scales::rescale(c(-5, 5)),
limits = c(-5, 5)
) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 60, hjust = 1), plot.title = element_text(hjust = 0.5)) +
labs(
title = "Assistive Tech need and use prevalence grouped by\n Accessibility category and Parent Location",
x = "Assistive Technology Category",
y = "Prevalence",
fill = "Difference Between Need and Use"
) +
scale_y_continuous(limits = c(-5, 5)) +
facet_wrap(vars(ParentLocation), scales = "free_x")
#updating the data frame with specific AT column and removing the a11y category column within the the need prevalence data
prevNeedATParentLocation2 <- prevNeedATParentLocation1 %>%
rename("Need Value" = ATMean)
#updating the data frame with specific AT column and removing the a11y category column within the the use prevalence data
prevUsedATParentLocation2 <- prevUseATParentLocation1 %>%
rename("Use Value" = ATMean)
#joining the two simplified data frames
prevNeedVsUseATParentLocation <- left_join(
prevNeedATParentLocation2,
prevUsedATParentLocation2,
by = c("ParentLocation", "Location", "DimUpdated")
)
#subtracting the need versus use
prevNeedVsUseATParentLocation1 <- prevNeedVsUseATParentLocation %>%
mutate(`Difference Between Need and Use` = (`Use Value` - `Need Value`))
# Specific Europe vision difference between need and use. Just like in the other chart, if it is a positive number then the use is more than the need (colored green). If it is a negative number then the need is more than use (colored red). Vision glasses have the highest different with use and need.
prevNeedVsUseATParentLocation1 %>%
filter(`Accessibility Category.x` == "Vision AT", ParentLocation == "Europe") %>%
group_by(ParentLocation, DimUpdated) %>%
summarise(`Difference Between Need and Use` = sum(`Difference Between Need and Use`, na.rm = TRUE), .groups = "keep") %>%
ungroup() %>%
ggplot(aes(
x = reorder(DimUpdated, `Difference Between Need and Use`),
y = `Difference Between Need and Use`,
fill = `Difference Between Need and Use`
)) +
geom_bar(stat = "identity", position = "dodge", color = "black") +
geom_text(
aes(label = `Difference Between Need and Use`),
position = position_dodge(width = 0.9),
vjust = -0.5,
color = "black",
size = 3
) +
scale_fill_gradientn(
name = "Difference Between Need and Use",
colors = c("red", "green"),
values = scales::rescale(c(-30, 30)),
limits = c(-30, 30)
) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 60, hjust = 1), plot.title = element_text(hjust = 0.5)) +
labs(
title = "Assistive Tech need and use prevalence grouped for\n vision AT within Europe",
x = "Assistive Technology",
y = "Prevalence",
fill = "Difference Between Need and Use"
) +
scale_y_continuous(limits = c(-30, 30)) +
facet_wrap(vars(ParentLocation), scales = "free_x")
#filter out the no information and counting the different values (full, partial or no coverage)
eduCoverage <- eduATClean %>%
filter(Dim1 == "Summary" & Value != "No Information") %>%
count(Value)
#graphing how coverage is of total, partial, and no coverage. There is the most with partial coverage, which makes sense as anywere from 1 type to 5 types of training would fit in this category
eduCoverage %>%
mutate(Value=factor(Value,levels=c("Total coverage","Partial coverage","No coverage"),ordered=T)) %>%
ggplot(aes(x = Value, y = n)) +
geom_bar(stat = "identity", fill='lightblue') +
geom_text(aes(label = n), vjust = -0.5, color = "white", size = 3) +
theme_dark() +
theme(axis.text.x = element_text(angle = 45, hjust = 1), plot.title = element_text(hjust = 0.5)) +
scale_y_continuous(limits = c(0, 40)) +
labs(title = "Coverage", x = "Type of Coverage", y = "Number of Countries")
#summarizing the type of coverage across the entire data set
eduATClean1 <- eduATClean %>%
group_by(Dim1) %>%
summarise(sumValue = sum(Value == "Yes", na.rm = TRUE)) %>%
ungroup() %>%
filter(Dim1 != "Summary" )
#Most common type of Coverage. Traingin related to mobility and vision are the most common
eduATClean1 %>%
ggplot(aes(x = reorder(Dim1, -sumValue), y = sumValue)) +
geom_bar(stat = "identity", fill='lightblue') +
geom_text(aes(label = sumValue), vjust = -0.5, color = "white", size = 3) +
theme_dark() +
theme(axis.text.x = element_text(angle = 45, hjust = 1), plot.title = element_text(hjust = 0.5)) +
scale_y_continuous(limits = c(0, 50)) +
labs(title = "Most common type of Coverage", x = "Type of Coverage", y = "Number of Countries")
Although there is need for all types of assistive technologies across all parent locations, vision vision is the most reported need for assistitve technology. For use of AT vision again is higher but there is even less use of over AT categories across the board.
When specifically looking at vision AT, glasses were by far the most reported AT. From other reports, the prevalance of vision glasses seems inline to other reports (example: https://www.statista.com/statistics/711514/individuals-who-wear-spectacles-in-selected-european-countries/).
For hearing AT need and use across parent locations hearing aids are the most common AT. Anecdotally, I am surprised hearing AT doesn’t have a higher use. There are many ATs that people use even if they do require to use them in order to engage in the digital space (e.g. closed/open captions). It makes me wonder what the methods of obtaining this data was and if it was through self-reporting, then how were those questions framed.
When comparing need and use all the AT and AT categories had a higher need than use. This is to be expected as depending on the assistive technology, they can be quite expensive to obtain (at least in the US). It is more of note that the average need does not have a larger gap to the average use.
Specifically in Europe, vision glasses have a large difference indicating the need is not being meant. This would be a space to dig into further to understand why individuals are not able to get glasses when they need them.
Separately, education on how to use these ATs exist. This data should be looked at separately than the need/use prevalence data as there are more countries represented. It is a limitation that I did not remove countries that occurred in the other two data set for consistency and ability to compare the data across.
Most countries have partial coverage with most education across countries related to mobility and vision, followed closely behind by vision. Additionally, these trainings are not broken down by AT but by broad category (communication, self-care, vision, etc.) which makes it hard to understand what the training actually covers and if it is supporting the users who are using different AT or what topics are being covered.
This data set has quite limited data on assistive technology use from around the globe as it has many countries missing. Because not all countries are represented in their parent location, viewing visualization based on parent location can be deceiving. For example witin the visualization of “Vision Assistive Tech need prevalence Parent Location”, it looks as though the Americas average prevalance of glasses is ~16%. This would be odd as there are reports within the use that put use of glasses at ~64% (https://thevisioncouncil.org/sites/default/files/assets/media/TVC_OrgOverview_sheet_2021.pdf).
The visualization that are likely most difficult to understand is the difference between use and need combined so as the numbers get closer to 1 there is less of a differnce between the two variables.