source("./device-setup.R")
measured_runs <- read_device_runs(measured_only=TRUE)
Age
age_data <- measured_runs %>%
filter(!is.na(age)) %>%
distinct(participant, .keep_all = T) %>%
select(participant, age, accuracy)
ggplot(
age_data,
aes(x = age, fill=accuracy)
) +
geom_histogram(binwidth = 1)

age_data %>%
summarize(
mean_age = mean(age),
sd_age = sd(age),
max_age = max(age),
min_age = min(age)
)
age_data %>%
group_by(accuracy) %>%
summarize(
mean_age = mean(age),
sd_age = sd(age),
max_age = max(age),
min_age = min(age)
)
Gender
table(measured_runs %>% distinct(participant, .keep_all = T) %>% pull(gender))
Female Male
13 23
measured_runs %>%
distinct(participant, .keep_all = T) %>%
group_by(accuracy, gender) %>%
summarize(
n = n(),
.groups = "drop"
)
Device Use (last 7
days)
ggplot(measured_runs, aes(x = device_use, fill=accuracy)) +
geom_histogram(stat="count") +
facet_grid(rows = vars(device)) +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))
Warning in geom_histogram(stat = "count"): Ignoring unknown parameters: `binwidth`, `bins`, and `pad`

measured_runs %>%
group_by(device) %>%
summarize(
.groups="drop",
n_frequent = sum(device_use %in% c("2 to 4 hours", "4 to 8 hours", "more than 8 hours")),
total = n(),
ratio = n_frequent / total
)
Typing (last 7
days)
ggplot(measured_runs, aes(x = typing_use, fill=accuracy)) +
geom_histogram(stat="count") +
facet_grid(rows = vars(device)) +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))
Warning in geom_histogram(stat = "count"): Ignoring unknown parameters: `binwidth`, `bins`, and `pad`

measured_runs %>%
group_by(device) %>%
summarize(
.groups="drop",
n_frequent = sum(typing_use %in% c("4 to 8 hours", "more than 8 hours")),
total = n(),
ratio = n_frequent / total
)
One handed typing on
phone
typing_handedness_data <- measured_runs %>%
filter(device == PHONE) %>%
pivot_longer(
cols = starts_with("typing_use"),
names_to = "prop",
values_to = "use"
) %>%
mutate(
handedness = case_when(
prop == "typing_use" ~ "both hands",
TRUE ~ "dominant"
)
)
typing_handedness_data %>%
ggplot(aes(x = use, fill=accuracy)) +
geom_histogram(stat="count") +
facet_grid(rows = vars(handedness)) +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))
Warning in geom_histogram(stat = "count"): Ignoring unknown parameters: `binwidth`, `bins`, and `pad`

typing_handedness_data %>%
filter(handedness == "dominant") %>%
summarize(
.groups="drop",
frequent = sum(use %in% c("1 to 2 hours", "2 to 4 hours", "4 to 8 hours", "more than 8 hours")),
total = n(),
ratio = frequent / total
)
Swipe typing
ggplot(measured_runs, aes(x=suggestions_use_frequency, fill=accuracy)) +
geom_histogram(stat="count") +
facet_grid(rows = vars(device))
Warning in geom_histogram(stat = "count"): Ignoring unknown parameters: `binwidth`, `bins`, and `pad`

Suggestions Use (last
24h)
ggplot(measured_runs, aes(x=suggestions_use_frequency, fill=accuracy)) +
geom_histogram(stat="count") +
facet_grid(rows = vars(device)) +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))
Warning in geom_histogram(stat = "count"): Ignoring unknown parameters: `binwidth`, `bins`, and `pad`

measured_runs %>%
select(participant, device, suggestions_use_frequency) %>%
arrange(participant, device) %>%
group_by(device) %>%
summarize(
.groups="drop",
use_frequently = sum(!suggestions_use_frequency %in% c("10 to 30", "30 to 100", "100 to 300")),
total = n(),
ratio = use_frequently / total
)
Typing speed as a
function of familiarity
data_fam <- measured_runs |>
mutate(exp_typing_use = ifelse(
is.na(typing_use_one_hand),
as.character(typing_use),
as.character(typing_use_one_hand)
) |>
factor(levels = levels(measured_runs$typing_use)))
ggplot(data_fam, aes(x = exp_typing_use, y = avg_wpm, fill = device)) +
geom_boxplot(show.legend = FALSE) +
facet_wrap(vars(device)) +
xlab("Typing usage in the experiment's condition") +
theme(axis.text.x = element_text(
angle = 90,
vjust = 0.5,
hjust = 1
))

LS0tCnRpdGxlOiAiV29yZC1TdWdnZXN0aW9uczogRGV2aWNlIERlbW9ncmFwaGljIFJlc3VsdHMiCm91dHB1dDoKICBodG1sX25vdGVib29rOgogICAgdG9jOiB0cnVlCiAgICB0b2NfZmxvYXQ6IHRydWUKICAgIHRoZW1lOiBsdW1lbgogICAgaGlnaGxpZ2h0OiBkZWZhdWx0CiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUKICAgIG51bWJlcl9zZWN0aW9uczogVFJVRQotLS0KCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpzb3VyY2UoIi4vZGV2aWNlLXNldHVwLlIiKQoKbWVhc3VyZWRfcnVucyA8LSByZWFkX2RldmljZV9ydW5zKG1lYXN1cmVkX29ubHk9VFJVRSkKYGBgCgoKIyBBZ2UKCmBgYHtyfQphZ2VfZGF0YSA8LSBtZWFzdXJlZF9ydW5zICU+JQogIGZpbHRlcighaXMubmEoYWdlKSkgJT4lCiAgZGlzdGluY3QocGFydGljaXBhbnQsIC5rZWVwX2FsbCA9IFQpICU+JQogIHNlbGVjdChwYXJ0aWNpcGFudCwgYWdlLCBhY2N1cmFjeSkKCmdncGxvdCgKICBhZ2VfZGF0YSwKICBhZXMoeCA9IGFnZSwgZmlsbD1hY2N1cmFjeSkKKSArCiAgZ2VvbV9oaXN0b2dyYW0oYmlud2lkdGggPSAxKQpgYGAKCgpgYGB7cn0KYWdlX2RhdGEgJT4lCiAgc3VtbWFyaXplKAogICAgbWVhbl9hZ2UgPSBtZWFuKGFnZSksCiAgICBzZF9hZ2UgPSBzZChhZ2UpLAogICAgbWF4X2FnZSA9IG1heChhZ2UpLAogICAgbWluX2FnZSA9IG1pbihhZ2UpCiAgKQpgYGAKCmBgYHtyfQphZ2VfZGF0YSAlPiUKICBncm91cF9ieShhY2N1cmFjeSkgJT4lCiAgc3VtbWFyaXplKAogICAgbWVhbl9hZ2UgPSBtZWFuKGFnZSksCiAgICBzZF9hZ2UgPSBzZChhZ2UpLAogICAgbWF4X2FnZSA9IG1heChhZ2UpLAogICAgbWluX2FnZSA9IG1pbihhZ2UpCiAgKQpgYGAKCgoKIyBHZW5kZXIKCmBgYHtyfQp0YWJsZShtZWFzdXJlZF9ydW5zICU+JSBkaXN0aW5jdChwYXJ0aWNpcGFudCwgLmtlZXBfYWxsID0gVCkgJT4lIHB1bGwoZ2VuZGVyKSkKYGBgCgoKYGBge3J9Cm1lYXN1cmVkX3J1bnMgJT4lCiAgZGlzdGluY3QocGFydGljaXBhbnQsIC5rZWVwX2FsbCA9IFQpICU+JQogIGdyb3VwX2J5KGFjY3VyYWN5LCBnZW5kZXIpICU+JQogIHN1bW1hcml6ZSgKICAgIG4gPSBuKCksCiAgICAuZ3JvdXBzID0gImRyb3AiCiAgKQpgYGAKCgojIERldmljZSBVc2UgKGxhc3QgNyBkYXlzKQoKYGBge3J9CmdncGxvdChtZWFzdXJlZF9ydW5zLCBhZXMoeCA9IGRldmljZV91c2UsIGZpbGw9YWNjdXJhY3kpKSArCiAgZ2VvbV9oaXN0b2dyYW0oc3RhdD0iY291bnQiKSArCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyhkZXZpY2UpKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgdmp1c3QgPSAwLjUsIGhqdXN0PTEpKQpgYGAKCmBgYHtyfQptZWFzdXJlZF9ydW5zICU+JQogIGdyb3VwX2J5KGRldmljZSkgJT4lCiAgc3VtbWFyaXplKAogICAgLmdyb3Vwcz0iZHJvcCIsCiAgICBuX2ZyZXF1ZW50ID0gc3VtKGRldmljZV91c2UgJWluJSBjKCIyIHRvIDQgaG91cnMiLCAiNCB0byA4IGhvdXJzIiwgIm1vcmUgdGhhbiA4IGhvdXJzIikpLAogICAgdG90YWwgPSBuKCksCiAgICByYXRpbyA9IG5fZnJlcXVlbnQgLyB0b3RhbAogICkKYGBgCgoKIyBUeXBpbmcgKGxhc3QgNyBkYXlzKQoKYGBge3J9CmdncGxvdChtZWFzdXJlZF9ydW5zLCBhZXMoeCA9IHR5cGluZ191c2UsIGZpbGw9YWNjdXJhY3kpKSArCiAgZ2VvbV9oaXN0b2dyYW0oc3RhdD0iY291bnQiKSArCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyhkZXZpY2UpKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgdmp1c3QgPSAwLjUsIGhqdXN0PTEpKQpgYGAKCmBgYHtyfQptZWFzdXJlZF9ydW5zICU+JQogIGdyb3VwX2J5KGRldmljZSkgJT4lCiAgc3VtbWFyaXplKAogICAgLmdyb3Vwcz0iZHJvcCIsCiAgICBuX2ZyZXF1ZW50ID0gc3VtKHR5cGluZ191c2UgJWluJSBjKCI0IHRvIDggaG91cnMiLCAibW9yZSB0aGFuIDggaG91cnMiKSksCiAgICB0b3RhbCA9IG4oKSwKICAgIHJhdGlvID0gbl9mcmVxdWVudCAvIHRvdGFsCiAgKQpgYGAKCiMjIE9uZSBoYW5kZWQgdHlwaW5nIG9uIHBob25lCgpgYGB7cn0KdHlwaW5nX2hhbmRlZG5lc3NfZGF0YSA8LSBtZWFzdXJlZF9ydW5zICU+JQogIGZpbHRlcihkZXZpY2UgPT0gUEhPTkUpICU+JQogIHBpdm90X2xvbmdlcigKICAgIGNvbHMgPSBzdGFydHNfd2l0aCgidHlwaW5nX3VzZSIpLAogICAgbmFtZXNfdG8gPSAicHJvcCIsCiAgICB2YWx1ZXNfdG8gPSAidXNlIgogICkgJT4lCiAgbXV0YXRlKAogICAgaGFuZGVkbmVzcyA9IGNhc2Vfd2hlbigKICAgICAgcHJvcCA9PSAidHlwaW5nX3VzZSIgfiAiYm90aCBoYW5kcyIsCiAgICAgIFRSVUUgfiAiZG9taW5hbnQiCiAgICApCiAgKQoKdHlwaW5nX2hhbmRlZG5lc3NfZGF0YSAlPiUKICBnZ3Bsb3QoYWVzKHggPSB1c2UsIGZpbGw9YWNjdXJhY3kpKSArCiAgICBnZW9tX2hpc3RvZ3JhbShzdGF0PSJjb3VudCIpICsKICAgIGZhY2V0X2dyaWQocm93cyA9IHZhcnMoaGFuZGVkbmVzcykpICsKICAgIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIHZqdXN0ID0gMC41LCBoanVzdD0xKSkKYGBgCgpgYGB7cn0KdHlwaW5nX2hhbmRlZG5lc3NfZGF0YSAlPiUKICBmaWx0ZXIoaGFuZGVkbmVzcyA9PSAiZG9taW5hbnQiKSAlPiUKICBzdW1tYXJpemUoCiAgICAuZ3JvdXBzPSJkcm9wIiwKICAgIGZyZXF1ZW50ID0gc3VtKHVzZSAlaW4lIGMoIjEgdG8gMiBob3VycyIsICIyIHRvIDQgaG91cnMiLCAiNCB0byA4IGhvdXJzIiwgIm1vcmUgdGhhbiA4IGhvdXJzIikpLAogICAgdG90YWwgPSBuKCksCiAgICByYXRpbyA9IGZyZXF1ZW50IC8gdG90YWwKICApCmBgYAoKCiMjIFN3aXBlIHR5cGluZwoKYGBge3J9CmdncGxvdChtZWFzdXJlZF9ydW5zLCBhZXMoeD1zdWdnZXN0aW9uc191c2VfZnJlcXVlbmN5LCBmaWxsPWFjY3VyYWN5KSkgKwogIGdlb21faGlzdG9ncmFtKHN0YXQ9ImNvdW50IikgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMoZGV2aWNlKSkKYGBgCgoKIyBTdWdnZXN0aW9ucyBVc2UgKGxhc3QgMjRoKQoKYGBge3J9CmdncGxvdChtZWFzdXJlZF9ydW5zLCBhZXMoeD1zdWdnZXN0aW9uc191c2VfZnJlcXVlbmN5LCBmaWxsPWFjY3VyYWN5KSkgKwogIGdlb21faGlzdG9ncmFtKHN0YXQ9ImNvdW50IikgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMoZGV2aWNlKSkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIHZqdXN0ID0gMC41LCBoanVzdD0xKSkKYGBgCgoKYGBge3J9Cm1lYXN1cmVkX3J1bnMgJT4lCiAgc2VsZWN0KHBhcnRpY2lwYW50LCBkZXZpY2UsIHN1Z2dlc3Rpb25zX3VzZV9mcmVxdWVuY3kpICU+JQogIGFycmFuZ2UocGFydGljaXBhbnQsIGRldmljZSkgJT4lCiAgZ3JvdXBfYnkoZGV2aWNlKSAlPiUKICBzdW1tYXJpemUoCiAgICAuZ3JvdXBzPSJkcm9wIiwKICAgIHVzZV9mcmVxdWVudGx5ID0gc3VtKCFzdWdnZXN0aW9uc191c2VfZnJlcXVlbmN5ICVpbiUgYygiMTAgdG8gMzAiLCAiMzAgdG8gMTAwIiwgIjEwMCB0byAzMDAiKSksCiAgICB0b3RhbCA9IG4oKSwKICAgIHJhdGlvID0gdXNlX2ZyZXF1ZW50bHkgLyB0b3RhbAogICkKYGBgCgojIFR5cGluZyBzcGVlZCBhcyBhIGZ1bmN0aW9uIG9mIGZhbWlsaWFyaXR5CgpgYGB7cn0KZGF0YV9mYW0gPC0gbWVhc3VyZWRfcnVucyB8PgogIG11dGF0ZShleHBfdHlwaW5nX3VzZSA9IGlmZWxzZSgKICAgIGlzLm5hKHR5cGluZ191c2Vfb25lX2hhbmQpLAogICAgYXMuY2hhcmFjdGVyKHR5cGluZ191c2UpLAogICAgYXMuY2hhcmFjdGVyKHR5cGluZ191c2Vfb25lX2hhbmQpCiAgKSB8PgogICAgZmFjdG9yKGxldmVscyA9IGxldmVscyhtZWFzdXJlZF9ydW5zJHR5cGluZ191c2UpKSkKCmdncGxvdChkYXRhX2ZhbSwgYWVzKHggPSBleHBfdHlwaW5nX3VzZSwgeSA9IGF2Z193cG0sIGZpbGwgPSBkZXZpY2UpKSArCiAgZ2VvbV9ib3hwbG90KHNob3cubGVnZW5kID0gRkFMU0UpICsKICBmYWNldF93cmFwKHZhcnMoZGV2aWNlKSkgKwogIHhsYWIoIlR5cGluZyB1c2FnZSBpbiB0aGUgZXhwZXJpbWVudCdzIGNvbmRpdGlvbiIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dCgKICAgIGFuZ2xlID0gOTAsCiAgICB2anVzdCA9IDAuNSwKICAgIGhqdXN0ID0gMQogICkpCmBgYA==