This data is for our ACM IMWUT 2022 paper “Privacy-Enhancing Technology and Everyday Augmented Reality: Understanding Bystanders’ Varying Needs for Awareness and Consent”.
This was a rather complex survey, with multiple looping factors. This RMarkdown file contains our breakdown and analysis of the quesitons in the survey. See also the attachment of the survey PDF.
3 age 4 gender 5 country 6 have you used AR before 7 do you know what an ar headset is
| Question mappings for looped questions |
|---|
| capability 11 23 consent by social connection 13 25 automatic consent 14 26 concerning 15 27 more concerning than smartphone 16 28 stranger awareness preference 18 30 your headset awareness preference 20 32 |
34 more or less uncomfortable with AR 35 how comortable are you —————
library(qualtRics)
Warning messages:
1: In readChar(file, size, TRUE) : truncating string with embedded nuls
2: In readChar(file, size, TRUE) : truncating string with embedded nuls
3: In readChar(file, size, TRUE) : truncating string with embedded nuls
4: In readChar(file, size, TRUE) : truncating string with embedded nuls
5: In readChar(file, size, TRUE) : truncating string with embedded nuls
6: In readChar(file, size, TRUE) : truncating string with embedded nuls
7: In readChar(file, size, TRUE) : truncating string with embedded nuls
8: In readChar(file, size, TRUE) : truncating string with embedded nuls
9: In readChar(file, size, TRUE) : truncating string with embedded nuls
10: In readChar(file, size, TRUE) : truncating string with embedded nuls
library(reshape2)
library(stringr)
library(plyr)
library(dplyr)
library(ggplot2)
library(ARTool)
library(forcats)
library(statsExpressions)
library(cowplot)
library(scales)
raw_data <- read_survey("cleaned_data.csv")
[36m--[39m [1mColumn specification[22m [36m------------------------------------------------------------------------------------------------------------------------------------------------------------------------[39m
cols(
.default = col_character(),
Progress = [32mcol_double()[39m,
`Duration (in seconds)` = [32mcol_double()[39m,
Finished = [33mcol_logical()[39m
)
[36mi[39m Use `spec()` for the full column specifications.
raw_data$ParticipantID <- seq.int(nrow(raw_data))
head(raw_data)
raw_data <- subset(raw_data, Progress == 100)
no_complete_responses = nrow(raw_data)
#data = raw_data
#questions_to_select = c("Q21", "Q22", "Q42")
#question_factor_levels = c("21" = "Age", "22" = "Gender", "42" = "Country")
#id_variables = c("ParticipantID")
#factor_one_levels = loop.factor
#factor_two_levels = NULL
ExportPlot <- function(gplot, filename, width=2, height=1.5, doPNG=TRUE, doPDF=FALSE, doEPS=FALSE) {
# Export plot in PDF and EPS.
# Notice that A4: width=11.69, height=8.27
if (doPDF){
ggsave(paste(filename, '.pdf', sep=""), gplot, width = width, height = height)
}
if (doEPS){
postscript(file = paste(filename, '.eps', sep=""), width = width, height = height, horizontal = FALSE, onefile = FALSE, paper = "special")
}
#print(gplot)
#dev.off()
if (doPNG){
#png(file = paste(filename, '_.png', sep=""), width = width * 100, height = height * 100)
ggsave(paste(filename, '_.png', sep=""), gplot, width = width, height = height)
}
#print(gplot)
#dev.off()
}
# define factor levels ala c(Congruent = "Con", InCongruent = "InCon")
extract_composite_question_with_factors <- function(data, questions_to_select, id_variables, value_order,
question_factor_levels = NULL,
factor_one_levels = NULL,
factor_two_levels = NULL) {
# select subset of questions we are looking at and ID variables
data_subset <- select(data,matches( append(id_variables, questions_to_select)))
# now flatten this list using melt, excluding ID variables
melted_data_subset <- melt(data_subset, id.vars=id_variables)
#print(melted_data_subset)
# then we need to set the factor levels for the various factors in our questionnaire.
# This might be encoded in the question (e.g. q34 looking at bystander perspective, Q35 looking at user perspective)
# Or might be explicitly coded for (e.g. a question loop, or rows in a question)
# This is all encoded in the question string e.g. "4_Q64_1" where
# 4 indicates level of first factor
# 54 indicates level of question factor
# 1 indicates level of third factor
if (exists("question_factor_levels") && !is.null(question_factor_levels)){
question_index = 1;
# if we have a precursor factor defined, it's parsed before the question number is parsed
if ( (exists("factor_one_levels") && !is.null(factor_one_levels)) )
question_index = 2;
melted_data_subset$question_factor <- unlist(purrr::transpose (stringr::str_extract_all(melted_data_subset$variable,"\\(?[0-9,.]+\\)?"))[[question_index]])
melted_data_subset$question_factor <- factor(melted_data_subset$question_factor)
melted_data_subset$question_factor <- revalue(melted_data_subset$question_factor, question_factor_levels)
}
if (exists("factor_one_levels") && !is.null(factor_one_levels)){
melted_data_subset$factor_one <- unlist(purrr::transpose (stringr::str_extract_all(melted_data_subset$variable,"\\(?[0-9,.]+\\)?"))[[1]])
melted_data_subset$factor_one <- factor(melted_data_subset$factor_one)
melted_data_subset$factor_one <- revalue(melted_data_subset$factor_one, factor_one_levels)
}
if (exists ("factor_two_levels") && !is.null(factor_two_levels)){
melted_data_subset$factor_two <- unlist(purrr::transpose (stringr::str_extract_all(melted_data_subset$variable,"\\(?[0-9,.]+\\)?"))[[3]])
melted_data_subset$factor_two <- factor(melted_data_subset$factor_two)
#print(levels(melted_data_subset$factor_two))
melted_data_subset$factor_two <- revalue(melted_data_subset$factor_two, factor_two_levels)
}
melted_data_subset$ParticipantID <- factor(melted_data_subset$ParticipantID)
melted_data_subset$value <- factor(melted_data_subset$value)
#if (! is.null(value_order)){
# melted_data_subset$value <- factor(melted_data_subset$value, ordered = TRUE, levels = value_order)
#} else {
# melted_data_subset$value <- factor(melted_data_subset$value)
#}
return (na.omit(melted_data_subset))
}
common.loopfactor <- c(
"4" = "Camera usage",
"5" = "Microphone usage",
"7" = "Diminished reality",
"8" = "Activity tracking",
"9" = "Internal state",
"12" = "Biometric ID",
"13" = "Augmented perception",
"16" = "Personal characteristics",
"17" = "Physiological state",
"18" = "Volumetric capture",
"19" = "Augmented appearance"
)
common.looporder <-c(
"Camera usage",
"Microphone usage",
"Activity tracking",
"Volumetric capture",
"Personal characteristics",
"Biometric ID",
"Internal state",
"Physiological state",
"Augmented appearance",
"Diminished reality",
"Augmented perception"
)
common.id_variables <- c("ParticipantID")
common.relationship <- c(
"1" = "Close friend",
"2" = "Friend",
"3" = "Familiar stranger",
"4" = "Stranger",
"5" = "Accessibility needs"
)
common.awareness <- c(
"1" = "None",
"2" = "Basic",
"3" = "Iconographic",
"4" = "Full"
)
common.consent <- c(
"1" = "With Consent",
"2" = "Without Consent"
)
common.theme <- theme(legend.position="bottom", legend.text=element_text(size=11),
legend.title =element_blank(),
legend.spacing.x=unit(0.8,"line"),
legend.key.width=unit(1.8,"line"), legend.key.height=unit(1,"line")) +
theme(axis.title.x=element_blank(),
strip.text.x=element_text(size=12),
axis.text=element_text(size=12),
axis.ticks.y = element_blank(),
axis.text.y=element_text(margin=margin(0,-8,0,0)),
panel.background=element_blank(),
panel.border=element_blank(),
panel.grid.major=element_blank(),
panel.grid.minor=element_blank(),
panel.spacing.x = unit(1.0, "lines"),
plot.background=element_blank())
CIColor = "red"
# common.agerange <- c(
# "18 - 24" = 21,
# "25 - 34" = ,
# "35 - 44" = "Diminished reality",
# "45 - 54" = "Tracking bystanders",
# "55 - 64" = "Emotional & Physiological State",
# "65 - 74" = "Biometric ID",
# "13" = "Super hearing / sight",
# "16" = "Personal characteristics",
# "17" = "Medical / Health data",
# "18" = "3D capture",
# "19" = "Augmented appearance"
# )
age_results = extract_composite_question_with_factors(raw_data, c("Q3$"), common.id_variables, NULL,
c("3" = "Age"))
age_results
levels(factor(age_results$value))
[1] "18 - 24" "25 - 34" "35 - 44" "45 - 54" "55 - 64" "Under 18"
age_count <- age_results %>% count(value)
age_count$percentage <- (age_count$n / no_complete_responses) * 100
age_count
gender_results = extract_composite_question_with_factors(raw_data, c("Q4$"), common.id_variables, NULL,
c("4" = "Gender"))
gender_results
gender_count <- gender_results %>% count(value)
gender_count$percentage <- (gender_count$n / no_complete_responses) * 100
gender_count
country_results = extract_composite_question_with_factors(raw_data, c("Q5$"), common.id_variables, NULL,
c("5" = "Country"))
country_results
country_count <- country_results %>% count(value)
country_count$percentage <- (country_count$n / no_complete_responses) * 100
country_count
questionnaire_plot <- function(data, factor_one, factor_two, has_two_factors=FALSE){
barplotdata <- NULL
barplotdata <- data
barplotdata$value_raw <- barplotdata$value
barplotdata$value_multiplied <- as.numeric(barplotdata$value_raw)
barplotdata$value_factor <- barplotdata$value_raw
scale_size = length(levels(barplotdata$value))
barplotdata$value_multiplied = (barplotdata$value_multiplied) * (no_complete_responses/scale_size) # then multiply to scale up
print(barplotdata$value_raw_multiplied)
app_plot_2 <- ggplot(data = barplotdata, aes_string(x=factor_one)) + common.theme+
geom_bar(aes(fill=forcats::fct_rev(value_factor)), lwd=0) + coord_flip() +
scale_y_continuous(limits=c(0, no_complete_responses), breaks=c(0,1/4 * no_complete_responses, 1/2 * no_complete_responses, 3/4 * no_complete_responses, no_complete_responses), labels=c("0%", "25%", "50%", "75%", "100%"))+
stat_summary(aes(y=value_multiplied), fun.data=mean_cl_normal, fun.args = list(conf.int = 0.95), geom="errorbar", colour=CIColor, width=0.4, size=1.0) + #
stat_summary(aes(y=value_multiplied), fun.y=mean, geom="point", colour=CIColor)+
scale_fill_viridis_d(option = "D", drop=FALSE)+
guides(fill = guide_legend(label.position = "bottom", reverse = TRUE, nrow=1))+
xlab("")+ ylab("# of Responses")# + facet_wrap(~interactiontechnique, nrow=6)
if (has_two_factors){
app_plot_2 <- app_plot_2 + facet_wrap( as.formula(paste( "~", factor_two )), labeller = labeller(.rows = label_wrap_gen(20)))
}
#ExportPlot(app_plot_2, "acceptability_plot.png", 8, 20, doPDF=TRUE)
#print(app_plot_2)
#print(ggplot_build(app_plot_2)$data[[3]])
return(app_plot_2)
}
#https://cran.r-project.org/web/packages/ggsignif/vignettes/intro.html
#https://cran.r-project.org/web/packages/ARTool/vignettes/art-contrasts.html
filter_contrasts <- function(contrasts){
result = as.data.frame(summary(contrasts))
result = subset(result, p.value <= 0.05)
}
stats_testing <-function(data, value_order, two_factor=FALSE) {
#data$ParticipantID <- factor(data$ParticipantID)
#data$value <- factor(data$value, ordered = TRUE, levels = value_order)
if (!two_factor){
model.result <- art(value ~ factor_one + Error(ParticipantID), data=data)
model.aov<-anova(model.result)
model.contrasts<- art.con(model.result, "factor_one")
#model.df <- as.data.frame(summary(model.contrasts))
output <- list(
model.result,
model.aov,
model.contrasts,
filter_contrasts(model.contrasts)
)
return(output)
} else {
model.result <- art(value ~ factor_one*factor_two + Error(ParticipantID), data=data)
anova_result<-anova(model.result)
model.df_1 <- art.con(model.result, "factor_one")
model.df_2 <- art.con(model.result, "factor_two")
output<-list(
model.result,
anova_result,
model.df_1,
filter_contrasts(model.df_1),
model.df_2,
filter_contrasts(model.df_2)
)
return(output)
#print(art.con(model.result, "factor_one"))
#print(art.con(model.result, "factor_two"))
}
#return(model)
}
ar_experience_results_q6 = extract_composite_question_with_factors(raw_data, c("Q6$"), common.id_variables, NULL,
c("6" = "Know what AR is"))
ar_experience_results_q6$value <- revalue(factor(ar_experience_results_q6$value), c(
"I don't know" = "I don't know",
"No" = "No",
"Yes, but smartphone AR only (e.g. instagram filters, snapchat lenses, IKEA furniture app etc.)" = "Yes, but\nsmartphone\nAR only",
"Yes, including AR headsets" = "Yes, inc.\nAR headsets"
))
value_order = c(
"No",
"I don't know",
"Yes, but\nsmartphone\nAR only",
"Yes, inc.\nAR headsets"
)
ar_experience_results_q6$value <- factor(ar_experience_results_q6$value, ordered = TRUE, levels = value_order)
ar_experience_results_q6$variable <- "Used AR Before"
q6_plot <- questionnaire_plot(ar_experience_results_q6, "variable")
NULL
`fun.y` is deprecated. Use `fun` instead.
print(q6_plot)
q6_count <- ar_experience_results_q6 %>% count(value)
q6_count$percentage <- (q6_count$n / no_complete_responses) * 100
#ar_experience_results_q7 = extract_composite_question_with_factors(raw_data, c("Q7$"), common.id_variables,
# c("No",
# "Yes, but smartphone AR only (e.g. instagram filters, snapchat lenses, IKEA furniture app etc.)",
# "Yes, including AR headsets"),
# c("7" = "Used AR Previously"))
ar_experience_results_q7 = extract_composite_question_with_factors(raw_data, c("Q7$"), common.id_variables,
NULL,
c("7" = "Used AR Previously"))
ar_experience_results_q7$value <- revalue(factor(ar_experience_results_q7$value), c(
"No" = "No",
"Sort of" = "Sort of\n\n",
"Yes" = "Yes"
))
ar_experience_results_q7$variable <- "Know what AR is"
q7_plot <- questionnaire_plot(ar_experience_results_q7, "variable")
NULL
`fun.y` is deprecated. Use `fun` instead.
print(q7_plot)
q7_count <- ar_experience_results_q7 %>% count(value)
q7_count$percentage <- (q7_count$n / no_complete_responses) * 100
print(q6_count)
print(q7_count)
NA
Combination of intro questions
q6_plot_mod <- q6_plot + theme(axis.title.y=element_blank(),
axis.text.y=element_blank(),
axis.ticks.y=element_blank()) + ggtitle("Used AR Before?")
q7_plot_mod <- q7_plot + theme(axis.title.y=element_blank(),
axis.text.y=element_blank(),
axis.ticks.y=element_blank()) + ggtitle("Know what an AR headset is?")
knowledge_combi <- plot_grid(q6_plot_mod, q7_plot_mod,
ncol = 2, rel_widths = c(1.0,1.0), rel_heights = c(1.0, 1.0))
print(knowledge_combi)
ExportPlot(knowledge_combi, "knowledge_combi", 9.5, 2.1, doPDF=TRUE)
Did you know AR headsets have this capability?
know_capability.results = extract_composite_question_with_factors(raw_data, c("Q11", "Q23"), common.id_variables, NULL,
c("11" = "know_capability", "27" = "know_capability"),
common.loopfactor)
attributes are not identical across measure variables; they will be droppedThe following `from` values were not present in `x`: 27
know_capability.results$factor_one <- fct_rev(fct_relevel( know_capability.results$factor_one, common.looporder))
know_capability.results$value <- revalue(factor(know_capability.results$value), c(
"I did not know AR headsets could do this" = "Did not know",
"I was somewhat aware AR headsets could do this" = "Somewhat aware",
"I knew AR headsets could do this" = "Aware"
))
know_capability.results$value <- fct_relevel( know_capability.results$value, c("Did not know", "Somewhat aware", "Aware"))
know_capability.plot <- questionnaire_plot(know_capability.results, "factor_one") + ggtitle("Did you know AR headsets have this capability?")
NULL
`fun.y` is deprecated. Use `fun` instead.
ExportPlot(know_capability.plot, "know_capability_plot", 8.5, 3.5, doPDF=TRUE)
print(know_capability.plot)
know_capability.results$value <- factor(know_capability.results$value, ordered = TRUE, levels = c(
"Did not know",
"Somewhat aware",
"Aware"
))
model_result<- stats_testing(know_capability.results, NULL, FALSE)
NOTE: Results are based on intra-block estimates and are biased.
print(model_result[2])
[[1]]
Analysis of Variance of Aligned Rank Transformed Data
Table Type: Repeated Measures Analysis of Variance Table (Type I)
Model: Repeated Measures (aov)
Response: art(value)
Error Df Df.res F value Pr(>F)
1 factor_one PrtID 1 100 0.25987 0.61134
2 factor_one Withn 10 1009 48.57530 < 2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
print(model_result[4])
[[1]]
contrast estimate SE df t.ratio p.value
2 Augmented perception - Augmented appearance -298.75183 28.62762 1009 -10.435792 9.560130e-13
5 Augmented perception - Biometric ID -219.36948 28.62762 1009 -7.662863 3.275047e-12
8 Augmented perception - Activity tracking -115.17831 28.62762 1009 -4.023329 2.996870e-03
9 Augmented perception - Microphone usage -305.57536 28.62762 1009 -10.674147 9.503509e-13
10 Augmented perception - Camera usage -381.14889 28.62762 1009 -13.314029 8.499867e-13
11 Diminished reality - Augmented appearance -305.39706 28.54999 1009 -10.696925 9.500178e-13
14 Diminished reality - Biometric ID -226.01471 28.54999 1009 -7.916456 1.324718e-12
17 Diminished reality - Activity tracking -121.82353 28.54999 1009 -4.267026 1.092701e-03
18 Diminished reality - Microphone usage -312.22059 28.54999 1009 -10.935928 9.262591e-13
19 Diminished reality - Camera usage -387.79412 28.54999 1009 -13.582988 8.499867e-13
20 Augmented appearance - Physiological state 287.23529 28.54999 1009 10.060786 9.541257e-13
21 Augmented appearance - Internal state 276.51471 28.54999 1009 9.685284 9.529044e-13
23 Augmented appearance - Personal characteristics 226.45588 28.54999 1009 7.931909 1.284084e-12
24 Augmented appearance - Volumetric capture 226.80882 28.54999 1009 7.944271 1.254996e-12
25 Augmented appearance - Activity tracking 183.57353 28.54999 1009 6.429899 1.079970e-08
29 Physiological state - Biometric ID -207.85294 28.54999 1009 -7.280317 3.772238e-11
32 Physiological state - Activity tracking -103.66176 28.54999 1009 -3.630887 1.320539e-02
33 Physiological state - Microphone usage -294.05882 28.54999 1009 -10.299789 9.565682e-13
34 Physiological state - Camera usage -369.63235 28.54999 1009 -12.946849 8.499867e-13
35 Internal state - Biometric ID -197.13235 28.54999 1009 -6.904814 4.889444e-10
38 Internal state - Activity tracking -92.94118 28.54999 1009 -3.255384 4.573796e-02
39 Internal state - Microphone usage -283.33824 28.54999 1009 -9.924286 9.550138e-13
40 Internal state - Camera usage -358.91176 28.54999 1009 -12.571347 8.499867e-13
41 Biometric ID - Personal characteristics 147.07353 28.54999 1009 5.151440 1.673514e-05
42 Biometric ID - Volumetric capture 147.42647 28.54999 1009 5.163802 1.569988e-05
43 Biometric ID - Activity tracking 104.19118 28.54999 1009 3.649430 1.236244e-02
45 Biometric ID - Camera usage -161.77941 28.54999 1009 -5.666532 1.036488e-06
48 Personal characteristics - Microphone usage -233.27941 28.54999 1009 -8.170912 1.028067e-12
49 Personal characteristics - Camera usage -308.85294 28.54999 1009 -10.817972 9.404699e-13
51 Volumetric capture - Microphone usage -233.63235 28.54999 1009 -8.183274 1.022293e-12
52 Volumetric capture - Camera usage -309.20588 28.54999 1009 -10.830334 9.384715e-13
53 Activity tracking - Microphone usage -190.39706 28.54999 1009 -6.668902 2.329409e-09
54 Activity tracking - Camera usage -265.97059 28.54999 1009 -9.315962 9.583445e-13
How would you consent to this, if at all?
consent.results = extract_composite_question_with_factors(raw_data, c("Q13", "Q25"), common.id_variables, NULL,
c("13" = "consent", "25" = "consent"),
common.loopfactor, common.relationship)
attributes are not identical across measure variables; they will be dropped
consent.results$factor_one <- fct_relevel( consent.results$factor_one, common.looporder)
value_order = c(
"Opt-out - I would never consent to this activity",
"Opt-out by default, with ability to request your consent",
"Opt-in by default, with ability to withdraw your consent",
"Opt-in by default, no consent required"
)
consent.results$value <- factor(consent.results$value, ordered = TRUE, levels = value_order)
consent.results$value <- revalue(factor(consent.results$value), c(
"Opt-out - I would never consent to this activity" = "Opt-out - I would never\n consent to this activity",
"Opt-out by default, with ability to request your consent" = "Opt-out, with ability\nto request your consent" ,
"Opt-in by default, with ability to withdraw your consent" = "Opt-in, with ability\nto withdraw your consent",
"Opt-in by default, no consent required" = "Opt-in by default,\nno consent required"
))
consent.stats_results <- stats_testing(consent.results, NULL, TRUE)
NOTE: Results may be misleading due to involvement in interactions
NOTE: Results may be misleading due to involvement in interactions
print(consent.stats_results[2])
[[1]]
Analysis of Variance of Aligned Rank Transformed Data
Table Type: Repeated Measures Analysis of Variance Table (Type I)
Model: Repeated Measures (aov)
Response: art(value)
Error Df Df.res F value Pr(>F)
1 factor_one Withn 10 5454 83.6666 < 2e-16 ***
2 factor_two Withn 4 5454 170.1682 < 2e-16 ***
3 factor_one:factor_two Withn 40 5454 1.2181 0.16325
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
print(consent.stats_results[3])
[[1]]
contrast estimate SE df t.ratio p.value
Camera usage - Microphone usage 134.61 73.5 5454 1.830 0.7621
Camera usage - Activity tracking 3.15 73.5 5454 0.043 1.0000
Camera usage - Volumetric capture 770.43 73.5 5454 10.476 <.0001
Camera usage - Personal characteristics 851.01 73.5 5454 11.572 <.0001
Camera usage - Biometric ID 614.03 73.5 5454 8.349 <.0001
Camera usage - Internal state 861.99 73.5 5454 11.721 <.0001
Camera usage - Physiological state 692.45 73.5 5454 9.416 <.0001
Camera usage - Augmented appearance -178.29 73.5 5454 -2.424 0.3509
Camera usage - Diminished reality -549.20 73.5 5454 -7.468 <.0001
Camera usage - Augmented perception 180.10 73.5 5454 2.449 0.3355
Microphone usage - Activity tracking -131.45 73.5 5454 -1.787 0.7879
Microphone usage - Volumetric capture 635.82 73.5 5454 8.646 <.0001
Microphone usage - Personal characteristics 716.41 73.5 5454 9.741 <.0001
Microphone usage - Biometric ID 479.42 73.5 5454 6.519 <.0001
Microphone usage - Internal state 727.39 73.5 5454 9.891 <.0001
Microphone usage - Physiological state 557.85 73.5 5454 7.585 <.0001
Microphone usage - Augmented appearance -312.90 73.5 5454 -4.255 0.0011
Microphone usage - Diminished reality -683.81 73.5 5454 -9.298 <.0001
Microphone usage - Augmented perception 45.50 73.5 5454 0.619 0.9999
Activity tracking - Volumetric capture 767.27 73.5 5454 10.433 <.0001
Activity tracking - Personal characteristics 847.86 73.5 5454 11.529 <.0001
Activity tracking - Biometric ID 610.87 73.5 5454 8.306 <.0001
Activity tracking - Internal state 858.84 73.5 5454 11.678 <.0001
Activity tracking - Physiological state 689.30 73.5 5454 9.373 <.0001
Activity tracking - Augmented appearance -181.45 73.5 5454 -2.467 0.3242
Activity tracking - Diminished reality -552.36 73.5 5454 -7.511 <.0001
Activity tracking - Augmented perception 176.95 73.5 5454 2.406 0.3627
Volumetric capture - Personal characteristics 80.59 73.5 5454 1.096 0.9913
Volumetric capture - Biometric ID -156.40 73.5 5454 -2.127 0.5580
Volumetric capture - Internal state 91.57 73.5 5454 1.245 0.9772
Volumetric capture - Physiological state -77.97 73.5 5454 -1.060 0.9933
Volumetric capture - Augmented appearance -948.72 73.5 5454 -12.900 <.0001
Volumetric capture - Diminished reality -1319.63 73.5 5454 -17.944 <.0001
Volumetric capture - Augmented perception -590.32 73.5 5454 -8.027 <.0001
Personal characteristics - Biometric ID -236.99 73.5 5454 -3.222 0.0496
Personal characteristics - Internal state 10.98 73.5 5454 0.149 1.0000
Personal characteristics - Physiological state -158.56 73.5 5454 -2.156 0.5366
Personal characteristics - Augmented appearance -1029.31 73.5 5454 -13.996 <.0001
Personal characteristics - Diminished reality -1400.22 73.5 5454 -19.040 <.0001
Personal characteristics - Augmented perception -670.91 73.5 5454 -9.123 <.0001
Biometric ID - Internal state 247.96 73.5 5454 3.372 0.0310
Biometric ID - Physiological state 78.42 73.5 5454 1.066 0.9930
Biometric ID - Augmented appearance -792.32 73.5 5454 -10.774 <.0001
Biometric ID - Diminished reality -1163.23 73.5 5454 -15.817 <.0001
Biometric ID - Augmented perception -433.92 73.5 5454 -5.900 <.0001
Internal state - Physiological state -169.54 73.5 5454 -2.305 0.4302
Internal state - Augmented appearance -1040.29 73.5 5454 -14.145 <.0001
Internal state - Diminished reality -1411.19 73.5 5454 -19.189 <.0001
Internal state - Augmented perception -681.89 73.5 5454 -9.272 <.0001
Physiological state - Augmented appearance -870.75 73.5 5454 -11.840 <.0001
Physiological state - Diminished reality -1241.65 73.5 5454 -16.883 <.0001
Physiological state - Augmented perception -512.35 73.5 5454 -6.967 <.0001
Augmented appearance - Diminished reality -370.91 73.5 5454 -5.043 <.0001
Augmented appearance - Augmented perception 358.40 73.5 5454 4.873 0.0001
Diminished reality - Augmented perception 729.31 73.5 5454 9.917 <.0001
Results are averaged over the levels of: factor_two
P value adjustment: tukey method for comparing a family of 11 estimates
print(consent.stats_results[4])
[[1]]
contrast estimate SE df t.ratio p.value
3 Camera usage - Volumetric capture 770.4255 73.54253 5454 10.475917 0.000000e+00
4 Camera usage - Personal characteristics 851.0137 73.54253 5454 11.571722 0.000000e+00
5 Camera usage - Biometric ID 614.0275 73.54253 5454 8.349283 0.000000e+00
6 Camera usage - Internal state 861.9922 73.54253 5454 11.721002 0.000000e+00
7 Camera usage - Physiological state 692.4520 73.54253 5454 9.415666 0.000000e+00
9 Camera usage - Diminished reality -549.2020 73.54253 5454 -7.467814 5.034750e-12
12 Microphone usage - Volumetric capture 635.8196 73.54253 5454 8.645604 0.000000e+00
13 Microphone usage - Personal characteristics 716.4078 73.54253 5454 9.741408 0.000000e+00
14 Microphone usage - Biometric ID 479.4216 73.54253 5454 6.518970 4.238865e-09
15 Microphone usage - Internal state 727.3863 73.54253 5454 9.890688 0.000000e+00
16 Microphone usage - Physiological state 557.8461 73.54253 5454 7.585353 1.971423e-12
17 Microphone usage - Augmented appearance -312.9000 73.54253 5454 -4.254681 1.076669e-03
18 Microphone usage - Diminished reality -683.8078 73.54253 5454 -9.298127 0.000000e+00
20 Activity tracking - Volumetric capture 767.2716 73.54253 5454 10.433032 0.000000e+00
21 Activity tracking - Personal characteristics 847.8598 73.54253 5454 11.528836 0.000000e+00
22 Activity tracking - Biometric ID 610.8735 73.54253 5454 8.306398 0.000000e+00
23 Activity tracking - Internal state 858.8382 73.54253 5454 11.678116 0.000000e+00
24 Activity tracking - Physiological state 689.2980 73.54253 5454 9.372781 0.000000e+00
26 Activity tracking - Diminished reality -552.3559 73.54253 5454 -7.510700 3.599454e-12
32 Volumetric capture - Augmented appearance -948.7196 73.54253 5454 -12.900285 0.000000e+00
33 Volumetric capture - Diminished reality -1319.6275 73.54253 5454 -17.943731 0.000000e+00
34 Volumetric capture - Augmented perception -590.3216 73.54253 5454 -8.026941 0.000000e+00
35 Personal characteristics - Biometric ID -236.9863 73.54253 5454 -3.222438 4.963470e-02
38 Personal characteristics - Augmented appearance -1029.3078 73.54253 5454 -13.996089 0.000000e+00
39 Personal characteristics - Diminished reality -1400.2157 73.54253 5454 -19.039536 0.000000e+00
40 Personal characteristics - Augmented perception -670.9098 73.54253 5454 -9.122745 0.000000e+00
41 Biometric ID - Internal state 247.9647 73.54253 5454 3.371718 3.100986e-02
43 Biometric ID - Augmented appearance -792.3216 73.54253 5454 -10.773651 0.000000e+00
44 Biometric ID - Diminished reality -1163.2294 73.54253 5454 -15.817098 0.000000e+00
45 Biometric ID - Augmented perception -433.9235 73.54253 5454 -5.900307 2.106277e-07
47 Internal state - Augmented appearance -1040.2863 73.54253 5454 -14.145369 0.000000e+00
48 Internal state - Diminished reality -1411.1941 73.54253 5454 -19.188816 0.000000e+00
49 Internal state - Augmented perception -681.8882 73.54253 5454 -9.272025 0.000000e+00
50 Physiological state - Augmented appearance -870.7461 73.54253 5454 -11.840034 0.000000e+00
51 Physiological state - Diminished reality -1241.6539 73.54253 5454 -16.883481 0.000000e+00
52 Physiological state - Augmented perception -512.3480 73.54253 5454 -6.966690 1.993216e-10
53 Augmented appearance - Diminished reality -370.9078 73.54253 5454 -5.043447 2.537389e-05
54 Augmented appearance - Augmented perception 358.3980 73.54253 5454 4.873344 6.017674e-05
55 Diminished reality - Augmented perception 729.3059 73.54253 5454 9.916790 0.000000e+00
print(consent.stats_results[5])
[[1]]
contrast estimate SE df t.ratio p.value
Close friend - Friend 137 50.3 5454 2.715 0.0519
Close friend - Familiar stranger 752 50.3 5454 14.955 <.0001
Close friend - Stranger 1133 50.3 5454 22.522 <.0001
Close friend - Accessibility needs 369 50.3 5454 7.327 <.0001
Friend - Familiar stranger 616 50.3 5454 12.240 <.0001
Friend - Stranger 996 50.3 5454 19.807 <.0001
Friend - Accessibility needs 232 50.3 5454 4.613 <.0001
Familiar stranger - Stranger 381 50.3 5454 7.567 <.0001
Familiar stranger - Accessibility needs -384 50.3 5454 -7.628 <.0001
Stranger - Accessibility needs -764 50.3 5454 -15.195 <.0001
Results are averaged over the levels of: factor_one
P value adjustment: tukey method for comparing a family of 5 estimates
consent.plot <- questionnaire_plot(consent.results, "factor_two", "factor_one", TRUE) + ggtitle("How would you wish to manage your consent to this activity?")
NULL
`fun.y` is deprecated. Use `fun` instead.
print(consent.plot)
ExportPlot(consent.plot, "consent_plot", 9, 6, doPDF=TRUE)
revoke_consent.results = extract_composite_question_with_factors(raw_data, c("Q14", "Q26"), common.id_variables, NULL,
c("14" = "revoke.consent", "26" = "revoke.consent"),
common.loopfactor)
attributes are not identical across measure variables; they will be dropped
revoke_consent.results$factor_one <- fct_rev(fct_relevel( revoke_consent.results$factor_one, common.looporder))
#levels(factor(consent.results$value))
value_order = c(
"Definitely not",
"Probably not" ,
"May or may not",
"Probably yes" ,
"Definitely yes"
)
revoke_consent.results$value <- factor(revoke_consent.results$value, ordered = TRUE, levels = value_order)
revoke_consent.results$value <- revalue(factor(revoke_consent.results$value), c(
"Definitely not" = "Definitely\nnot",
"Probably not" = "Probably\nnot",
"May or may not" = "May or\nmay not",
"Probably yes" = "Probably\nyes",
"Definitely yes" = "Definitely\nyes"
))
revoke_consent.stats_results <- stats_testing(revoke_consent.results, NULL, FALSE)
print(revoke_consent.stats_results[2])
[[1]]
Analysis of Variance of Aligned Rank Transformed Data
Table Type: Repeated Measures Analysis of Variance Table (Type I)
Model: Repeated Measures (aov)
Response: art(value)
Error Df Df.res F value Pr(>F)
1 factor_one Withn 10 1010 2.5218 0.005332 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
print(revoke_consent.stats_results[4])
[[1]]
contrast estimate SE df t.ratio p.value
2 Augmented perception - Augmented appearance 87.63235 26.77915 1010 3.272410 0.04340441
20 Augmented appearance - Physiological state -92.05392 26.77915 1010 -3.437522 0.02560955
24 Augmented appearance - Volumetric capture -93.33824 26.77915 1010 -3.485482 0.02182536
revoke_consent.plot <- questionnaire_plot(revoke_consent.results, "factor_one") + ggtitle("Automatic opt-in/out based on pre-provided AR preferences")
NULL
`fun.y` is deprecated. Use `fun` instead.
print(revoke_consent.plot)
ExportPlot(revoke_consent.plot, "revoke_consent_plot", 8.5, 3.5, doPDF=TRUE)
concern.results = extract_composite_question_with_factors(raw_data, c("Q15", "Q27"), common.id_variables, NULL,
c("15" = "concern", "27" = "concern"),
common.loopfactor)
attributes are not identical across measure variables; they will be dropped
concern.results$factor_one <- fct_rev(fct_relevel( concern.results$factor_one, common.looporder))
concern.results
levels(factor(concern.results$value))
[1] "Neutral" "Somewhat concerning" "Unconcerning" "Very concerning" "Very unconcerning"
value_order = c(
"Very unconcerning" ,
"Unconcerning" ,
"Neutral" ,
"Somewhat concerning",
"Very concerning"
)
concern.results$value <- factor(concern.results$value, ordered = TRUE, levels = value_order)
concern.results$value <- revalue(factor(concern.results$value), c(
"Very unconcerning" = "Very\nunconcerning",
"Unconcerning" = "Unconcerning",
"Neutral" = "Neutral",
"Somewhat concerning" = "Somewhat\nconcerning\n ",
"Very concerning" = "Very\nconcerning"
))
concern.stats_results <- stats_testing(concern.results, NULL, FALSE)
print(concern.stats_results[2])
[[1]]
Analysis of Variance of Aligned Rank Transformed Data
Table Type: Repeated Measures Analysis of Variance Table (Type I)
Model: Repeated Measures (aov)
Response: art(value)
Error Df Df.res F value Pr(>F)
1 factor_one Withn 10 1010 29.711 < 2.22e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
print(concern.stats_results[4])
[[1]]
contrast estimate SE df t.ratio p.value
1 Augmented perception - Diminished reality 275.9608 32.84765 1010 8.401235 4.473089e-13
2 Augmented perception - Augmented appearance 227.6225 32.84765 1010 6.929646 4.130342e-10
8 Augmented perception - Activity tracking 148.7696 32.84765 1010 4.529080 3.439291e-04
12 Diminished reality - Physiological state -315.0980 32.84765 1010 -9.592713 4.315437e-13
13 Diminished reality - Internal state -333.6078 32.84765 1010 -10.156218 4.295453e-13
14 Diminished reality - Biometric ID -344.9608 32.84765 1010 -10.501842 4.283240e-13
15 Diminished reality - Personal characteristics -346.1176 32.84765 1010 -10.537061 4.299894e-13
16 Diminished reality - Volumetric capture -355.5245 32.84765 1010 -10.823440 4.179990e-13
17 Diminished reality - Activity tracking -127.1912 32.84765 1010 -3.872155 5.419931e-03
18 Diminished reality - Microphone usage -215.7451 32.84765 1010 -6.568054 4.473874e-09
19 Diminished reality - Camera usage -196.1961 32.84765 1010 -5.972911 1.765652e-07
20 Augmented appearance - Physiological state -266.7598 32.84765 1010 -8.121124 5.325740e-13
21 Augmented appearance - Internal state -285.2696 32.84765 1010 -8.684629 4.223288e-13
22 Augmented appearance - Biometric ID -296.6225 32.84765 1010 -9.030253 4.282130e-13
23 Augmented appearance - Personal characteristics -297.7794 32.84765 1010 -9.065472 4.295453e-13
24 Augmented appearance - Volumetric capture -307.1863 32.84765 1010 -9.351851 4.310996e-13
26 Augmented appearance - Microphone usage -167.4069 32.84765 1010 -5.096465 2.218819e-05
27 Augmented appearance - Camera usage -147.8578 32.84765 1010 -4.501322 3.900433e-04
32 Physiological state - Activity tracking 187.9069 32.84765 1010 5.720558 7.631313e-07
34 Physiological state - Camera usage 118.9020 32.84765 1010 3.619802 1.373321e-02
38 Internal state - Activity tracking 206.4167 32.84765 1010 6.284063 2.686519e-08
39 Internal state - Microphone usage 117.8627 32.84765 1010 3.588164 1.534752e-02
40 Internal state - Camera usage 137.4118 32.84765 1010 4.183306 1.556591e-03
43 Biometric ID - Activity tracking 217.7696 32.84765 1010 6.629687 3.004171e-09
44 Biometric ID - Microphone usage 129.2157 32.84765 1010 3.933788 4.270102e-03
45 Biometric ID - Camera usage 148.7647 32.84765 1010 4.528931 3.441625e-04
47 Personal characteristics - Activity tracking 218.9265 32.84765 1010 6.664906 2.389217e-09
48 Personal characteristics - Microphone usage 130.3725 32.84765 1010 3.969007 3.718907e-03
49 Personal characteristics - Camera usage 149.9216 32.84765 1010 4.564150 2.930480e-04
50 Volumetric capture - Activity tracking 228.3333 32.84765 1010 6.951285 3.569182e-10
51 Volumetric capture - Microphone usage 139.7794 32.84765 1010 4.255386 1.148240e-03
52 Volumetric capture - Camera usage 159.3284 32.84765 1010 4.850528 7.568326e-05
concern.plot <- questionnaire_plot(concern.results, "factor_one") + ggtitle("Concern with Stranger's AR Activity")
NULL
`fun.y` is deprecated. Use `fun` instead.
print(concern.plot)
ExportPlot(concern.plot, "concern_plot", 8.5, 3.5, doPDF=TRUE)
NA
NA
concern_versus_smartphone.results = extract_composite_question_with_factors(raw_data, c("Q16", "Q28"), common.id_variables, NULL,
c("16" = "concern_versus_smartphone", "28" = "concern_versus_smartphone"),
common.loopfactor)
attributes are not identical across measure variables; they will be dropped
concern_versus_smartphone.results$factor_one <- fct_rev(fct_relevel( concern_versus_smartphone.results$factor_one, common.looporder))
#concern_versus_smartphone.results
#levels(factor(concern_versus_smartphone.results$value))
value_order = c(
"Much less concerning than smartphones" ,
"Somewhat less concerning",
"About the same",
"Somewhat more concerning",
"Much more concerning than smartphones"
)
concern_versus_smartphone.results$value <- factor(concern_versus_smartphone.results$value, ordered = TRUE, levels = value_order)
concern_versus_smartphone.results$value <- revalue(factor(concern_versus_smartphone.results$value), c(
"Much less concerning than smartphones" = "Much\nless\nconcerning",
"Somewhat less concerning" = "Somewhat\nless\nconcerning",
"About the same" = "About\nthe same",
"Somewhat more concerning" = "Somewhat\nmore\nconcerning",
"Much more concerning than smartphones" = "Much\nmore\nconcerning"
))
concern_versus_smartphone.stats_results <- stats_testing(concern_versus_smartphone.results, NULL, FALSE)
print(concern_versus_smartphone.stats_results[2])
[[1]]
Analysis of Variance of Aligned Rank Transformed Data
Table Type: Repeated Measures Analysis of Variance Table (Type I)
Model: Repeated Measures (aov)
Response: art(value)
Error Df Df.res F value Pr(>F)
1 factor_one Withn 10 1010 11.164 < 2.22e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
print(concern_versus_smartphone.stats_results[4])
[[1]]
contrast estimate SE df t.ratio p.value
2 Augmented perception - Augmented appearance 125.6225 31.61321 1010 3.973736 3.650144e-03
12 Diminished reality - Physiological state -133.8333 31.61321 1010 -4.233462 1.260325e-03
13 Diminished reality - Internal state -173.0637 31.61321 1010 -5.474412 3.009718e-06
14 Diminished reality - Biometric ID -164.1422 31.61321 1010 -5.192202 1.354777e-05
15 Diminished reality - Personal characteristics -172.9069 31.61321 1010 -5.469450 3.092365e-06
16 Diminished reality - Volumetric capture -158.8235 31.61321 1010 -5.023961 3.205196e-05
20 Augmented appearance - Physiological state -163.6225 31.61321 1010 -5.175765 1.475435e-05
21 Augmented appearance - Internal state -202.8529 31.61321 1010 -6.416715 1.173115e-08
22 Augmented appearance - Biometric ID -193.9314 31.61321 1010 -6.134504 6.712286e-08
23 Augmented appearance - Personal characteristics -202.6961 31.61321 1010 -6.411753 1.210378e-08
24 Augmented appearance - Volumetric capture -188.6127 31.61321 1010 -5.966264 1.836407e-07
27 Augmented appearance - Camera usage -127.6471 31.61321 1010 -4.037776 2.827854e-03
33 Physiological state - Microphone usage 110.0588 31.61321 1010 3.481419 2.212551e-02
38 Internal state - Activity tracking 138.1912 31.61321 1010 4.371311 6.957330e-04
39 Internal state - Microphone usage 149.2892 31.61321 1010 4.722368 1.401247e-04
43 Biometric ID - Activity tracking 129.2696 31.61321 1010 4.089101 2.297068e-03
44 Biometric ID - Microphone usage 140.3676 31.61321 1010 4.440158 5.132201e-04
47 Personal characteristics - Activity tracking 138.0343 31.61321 1010 4.366349 7.110215e-04
48 Personal characteristics - Microphone usage 149.1324 31.61321 1010 4.717406 1.434596e-04
50 Volumetric capture - Activity tracking 123.9510 31.61321 1010 3.920860 4.490729e-03
51 Volumetric capture - Microphone usage 135.0490 31.61321 1010 4.271917 1.069999e-03
concern_versus_smartphone.plot <- questionnaire_plot(concern_versus_smartphone.results, "factor_one") + ggtitle("Concern relative to Smartphone AR") #+ guides(fill = guide_legend(nrow = 2))
NULL
`fun.y` is deprecated. Use `fun` instead.
print(concern_versus_smartphone.plot)
ExportPlot(concern_versus_smartphone.plot, "concern_versus_smartphone_plot", 8.5, 3.5, doPDF=TRUE)
NA
NA
concern_versus_smartphone.plot_without_y_labels <- concern_versus_smartphone.plot +
theme(axis.title.y=element_blank(),
axis.text.y=element_blank(),
axis.ticks.y=element_blank())
concern_plot_mod <- concern.plot + theme(legend.justification = c(1,0))
concern_combi_plot <- plot_grid(concern_plot_mod, concern_versus_smartphone.plot_without_y_labels,
ncol = 2, rel_widths = c(1.5,0.96))
print(concern_combi_plot)
ExportPlot(concern_combi_plot, "concern_combi_plot", 11.5, 4, doPDF=TRUE)
This is a matrix question, so need to be sure about the formatting here? 19_Q30_1/2
awareness_preference_by_consent.results = extract_composite_question_with_factors(raw_data, c("Q18", "Q30"), common.id_variables, NULL,
c("20" = "awareness_preference_by_consent", "30" = "awareness_preference_by_consent"),
common.loopfactor, common.consent)
attributes are not identical across measure variables; they will be droppedThe following `from` values were not present in `x`: 20
awareness_preference_by_consent.results$factor_one <- fct_rev(fct_relevel( awareness_preference_by_consent.results$factor_one, common.looporder))
#awareness_preference_by_consent.results
#levels(factor(awareness_preference_by_consent.results $value))
value_order = c(
"1 - No awareness of activity" ,
"2 - Basic awareness device sensing is active (e.g. LED colour)" ,
"3 - Awareness of activity type sensing is being used for" ,
"4 - Full, real-time awareness of what the headset is doing"
)
awareness_preference_by_consent.results$value <- factor(awareness_preference_by_consent.results$value, ordered = TRUE, levels = value_order)
awareness_preference_by_consent.results$value <- revalue(factor(awareness_preference_by_consent.results$value), c(
"1 - No awareness of activity" = "No awareness" ,
"2 - Basic awareness device sensing is active (e.g. LED colour)" = "Basic awareness\ndevice active",
"3 - Awareness of activity type sensing is being used for" = "Awareness of\nactivity type",
"4 - Full, real-time awareness of what the headset is doing" = "Full, real-time\nawareness"
))
awareness_preference_by_consent.stats_results <- stats_testing(awareness_preference_by_consent.results, NULL, TRUE)
NOTE: Results are based on intra-block estimates and are biased.
NOTE: Results may be misleading due to involvement in interactions
NOTE: Results are based on intra-block estimates and are biased.
NOTE: Results may be misleading due to involvement in interactions
print(awareness_preference_by_consent.stats_results[2])
[[1]]
Analysis of Variance of Aligned Rank Transformed Data
Table Type: Repeated Measures Analysis of Variance Table (Type I)
Model: Repeated Measures (aov)
Response: art(value)
Error Df Df.res F value Pr(>F)
1 factor_one PrtID 1 100 0.72226 0.39743394
2 factor_one Withn 10 2117 25.99563 < 2.22e-16 ***
3 factor_two Withn 1 2117 138.94404 < 2.22e-16 ***
4 factor_one:factor_two Withn 10 2117 3.30800 0.00028466 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
awareness_preference_by_consent.plot <- questionnaire_plot(awareness_preference_by_consent.results, "factor_one", "factor_two", TRUE) + ggtitle("Blep")
NULL
`fun.y` is deprecated. Use `fun` instead.
print(awareness_preference_by_consent.plot)
ExportPlot(awareness_preference_by_consent.plot, "awareness_preference_by_consent_plot", 11.5, 4, doPDF=TRUE)
NA
NA
awareness_preference_headset_informs_others.results = extract_composite_question_with_factors(raw_data, c("Q20", "Q32"), common.id_variables, NULL,
c("20" = "awareness_preference_headset_informs_others", "32" = "awareness_preference_headset_informs_others"),
common.loopfactor)
attributes are not identical across measure variables; they will be dropped
awareness_preference_headset_informs_others.results$factor_one <- fct_rev(fct_relevel( awareness_preference_headset_informs_others.results$factor_one, common.looporder))
#awareness_preference_headset_informs_others.results
#levels(factor(awareness_preference_headset_informs_others.results$value))
value_order = c(
"1 - No awareness of activity" ,
"2 - Basic awareness device sensing is active (e.g. LED colour)" ,
"3 - Awareness of activity type sensing is being used for" ,
"4 - Full, real-time awareness of what the headset is doing"
)
awareness_preference_headset_informs_others.results$value <- factor(awareness_preference_headset_informs_others.results$value, ordered = TRUE, levels = value_order)
awareness_preference_headset_informs_others.results$value <- revalue(factor(awareness_preference_headset_informs_others.results$value), c(
"1 - No awareness of activity" = "No awareness" ,
"2 - Basic awareness device sensing is active (e.g. LED colour)" = "Basic awareness\ndevice active",
"3 - Awareness of activity type sensing is being used for" = "Awareness of\nactivity type",
"4 - Full, real-time awareness of what the headset is doing" = "Full, real-time\nawareness"
))
awareness_preference_headset_informs_others.stats_results <- stats_testing(awareness_preference_headset_informs_others.results, NULL, FALSE)
print(awareness_preference_headset_informs_others.stats_results[2])
[[1]]
Analysis of Variance of Aligned Rank Transformed Data
Table Type: Repeated Measures Analysis of Variance Table (Type I)
Model: Repeated Measures (aov)
Response: art(value)
Error Df Df.res F value Pr(>F)
1 factor_one Withn 10 1010 17.31 < 2.22e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
awareness_preference_headset_informs_others.plot <- questionnaire_plot(awareness_preference_headset_informs_others.results, "factor_one", NULL, FALSE)
NULL
`fun.y` is deprecated. Use `fun` instead.
print(awareness_preference_headset_informs_others.plot)
combine awareness_preference_headset_informs_others.results and awareness_preference_by_consent.results
awareness_preference_by_consent.results$factor_two <- revalue(factor(awareness_preference_by_consent.results$factor_two), c(
"With Consent" = "As a bystander\nwith consent",
"Without Consent" = "As a bystander\nwithout consent"
))
awareness_preference_headset_informs_others.results$factor_two <- "As the \nAR user"
combined_data <- rbind(awareness_preference_by_consent.results,awareness_preference_headset_informs_others.results )
# now combined where factor_two tells us perspective (bystander with consent, without consent, and user)
combined_data.stats_results <- stats_testing(combined_data, NULL, TRUE)
NOTE: Results are based on intra-block estimates and are biased.
NOTE: Results may be misleading due to involvement in interactions
NOTE: Results are based on intra-block estimates and are biased.
NOTE: Results may be misleading due to involvement in interactions
print(combined_data.stats_results[2])
[[1]]
Analysis of Variance of Aligned Rank Transformed Data
Table Type: Repeated Measures Analysis of Variance Table (Type I)
Model: Repeated Measures (aov)
Response: art(value)
Error Df Df.res F value Pr(>F)
1 factor_one PrtID 1 100 0.44277 0.5073190
2 factor_one Withn 10 3228 32.14512 < 2.22e-16 ***
3 factor_two Withn 2 3228 76.85463 < 2.22e-16 ***
4 factor_one:factor_two Withn 20 3228 1.94639 0.0070543 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
print(combined_data.stats_results[3])
[[1]]
contrast estimate SE df t.ratio p.value
Augmented perception - Diminished reality 413.714 55.6 3228 7.437 <.0001
Augmented perception - Augmented appearance 262.381 55.6 3228 4.716 0.0001
Augmented perception - Physiological state -132.755 55.6 3228 -2.386 0.3757
Augmented perception - Internal state -100.270 55.6 3228 -1.802 0.7790
Augmented perception - Biometric ID -118.877 55.7 3228 -2.133 0.5534
Augmented perception - Personal characteristics -130.553 55.7 3228 -2.343 0.4048
Augmented perception - Volumetric capture -245.448 55.6 3228 -4.412 0.0005
Augmented perception - Activity tracking 216.253 55.6 3228 3.887 0.0049
Augmented perception - Microphone usage 215.927 55.6 3228 3.881 0.0050
Augmented perception - Camera usage 294.595 55.6 3228 5.295 <.0001
Diminished reality - Augmented appearance -151.333 55.6 3228 -2.720 0.1911
Diminished reality - Physiological state -546.469 55.6 3228 -9.823 <.0001
Diminished reality - Internal state -513.984 55.6 3228 -9.239 <.0001
Diminished reality - Biometric ID -532.591 55.7 3228 -9.557 <.0001
Diminished reality - Personal characteristics -544.267 55.7 3228 -9.766 <.0001
Diminished reality - Volumetric capture -659.162 55.6 3228 -11.849 <.0001
Diminished reality - Activity tracking -197.461 55.6 3228 -3.549 0.0171
Diminished reality - Microphone usage -197.788 55.6 3228 -3.555 0.0168
Diminished reality - Camera usage -119.119 55.6 3228 -2.141 0.5475
Augmented appearance - Physiological state -395.136 55.6 3228 -7.103 <.0001
Augmented appearance - Internal state -362.650 55.6 3228 -6.519 <.0001
Augmented appearance - Biometric ID -381.258 55.7 3228 -6.841 <.0001
Augmented appearance - Personal characteristics -392.933 55.7 3228 -7.051 <.0001
Augmented appearance - Volumetric capture -507.828 55.6 3228 -9.128 <.0001
Augmented appearance - Activity tracking -46.127 55.6 3228 -0.829 0.9991
Augmented appearance - Microphone usage -46.454 55.6 3228 -0.835 0.9991
Augmented appearance - Camera usage 32.214 55.6 3228 0.579 1.0000
Physiological state - Internal state 32.485 55.6 3228 0.584 1.0000
Physiological state - Biometric ID 13.878 55.7 3228 0.249 1.0000
Physiological state - Personal characteristics 2.202 55.7 3228 0.040 1.0000
Physiological state - Volumetric capture -112.693 55.6 3228 -2.026 0.6309
Physiological state - Activity tracking 349.008 55.6 3228 6.274 <.0001
Physiological state - Microphone usage 348.681 55.6 3228 6.268 <.0001
Physiological state - Camera usage 427.350 55.6 3228 7.682 <.0001
Internal state - Biometric ID -18.607 55.7 3228 -0.334 1.0000
Internal state - Personal characteristics -30.283 55.7 3228 -0.543 1.0000
Internal state - Volumetric capture -145.178 55.6 3228 -2.610 0.2439
Internal state - Activity tracking 316.523 55.6 3228 5.690 <.0001
Internal state - Microphone usage 316.196 55.6 3228 5.684 <.0001
Internal state - Camera usage 394.864 55.6 3228 7.098 <.0001
Biometric ID - Personal characteristics -11.676 55.8 3228 -0.209 1.0000
Biometric ID - Volumetric capture -126.571 55.7 3228 -2.271 0.4542
Biometric ID - Activity tracking 335.130 55.7 3228 6.013 <.0001
Biometric ID - Microphone usage 334.803 55.7 3228 6.008 <.0001
Biometric ID - Camera usage 413.472 55.7 3228 7.419 <.0001
Personal characteristics - Volumetric capture -114.895 55.7 3228 -2.062 0.6051
Personal characteristics - Activity tracking 346.806 55.7 3228 6.223 <.0001
Personal characteristics - Microphone usage 346.479 55.7 3228 6.217 <.0001
Personal characteristics - Camera usage 425.148 55.7 3228 7.629 <.0001
Volumetric capture - Activity tracking 461.701 55.6 3228 8.299 <.0001
Volumetric capture - Microphone usage 461.374 55.6 3228 8.293 <.0001
Volumetric capture - Camera usage 540.043 55.6 3228 9.707 <.0001
Activity tracking - Microphone usage -0.327 55.6 3228 -0.006 1.0000
Activity tracking - Camera usage 78.341 55.6 3228 1.408 0.9466
Microphone usage - Camera usage 78.668 55.6 3228 1.414 0.9452
Results are averaged over the levels of: factor_two
P value adjustment: tukey method for comparing a family of 11 estimates
print(combined_data.stats_results[4])
[[1]]
contrast estimate SE df t.ratio p.value
1 Augmented perception - Diminished reality 413.7141 55.63200 3228 7.436621 0.000000e+00
2 Augmented perception - Augmented appearance 262.3807 55.63200 3228 4.716364 1.321656e-04
7 Augmented perception - Volumetric capture -245.4477 55.63200 3228 -4.411988 5.444269e-04
8 Augmented perception - Activity tracking 216.2533 55.63200 3228 3.887210 4.923185e-03
9 Augmented perception - Microphone usage 215.9265 55.63200 3228 3.881336 5.037014e-03
10 Augmented perception - Camera usage 294.5948 55.63200 3228 5.295420 6.864245e-06
12 Diminished reality - Physiological state -546.4690 55.63200 3228 -9.822926 0.000000e+00
13 Diminished reality - Internal state -513.9837 55.63200 3228 -9.238994 0.000000e+00
14 Diminished reality - Biometric ID -532.5911 55.73004 3228 -9.556625 0.000000e+00
15 Diminished reality - Personal characteristics -544.2669 55.73004 3228 -9.766131 0.000000e+00
16 Diminished reality - Volumetric capture -659.1618 55.63200 3228 -11.848609 0.000000e+00
17 Diminished reality - Activity tracking -197.4608 55.63200 3228 -3.549410 1.711996e-02
18 Diminished reality - Microphone usage -197.7876 55.63200 3228 -3.555285 1.677326e-02
20 Augmented appearance - Physiological state -395.1356 55.63200 3228 -7.102668 0.000000e+00
21 Augmented appearance - Internal state -362.6503 55.63200 3228 -6.518737 2.963598e-09
22 Augmented appearance - Biometric ID -381.2578 55.73004 3228 -6.841154 0.000000e+00
23 Augmented appearance - Personal characteristics -392.9335 55.73004 3228 -7.050659 0.000000e+00
24 Augmented appearance - Volumetric capture -507.8284 55.63200 3228 -9.128352 0.000000e+00
32 Physiological state - Activity tracking 349.0082 55.63200 3228 6.273515 2.041322e-08
33 Physiological state - Microphone usage 348.6814 55.63200 3228 6.267641 2.124633e-08
34 Physiological state - Camera usage 427.3497 55.63200 3228 7.681725 0.000000e+00
38 Internal state - Activity tracking 316.5229 55.63200 3228 5.689583 7.561149e-07
39 Internal state - Microphone usage 316.1961 55.63200 3228 5.683709 7.822863e-07
40 Internal state - Camera usage 394.8644 55.63200 3228 7.097793 0.000000e+00
43 Biometric ID - Activity tracking 335.1303 55.73004 3228 6.013459 1.091119e-07
44 Biometric ID - Microphone usage 334.8035 55.73004 3228 6.007595 1.131367e-07
45 Biometric ID - Camera usage 413.4718 55.73004 3228 7.419191 0.000000e+00
47 Personal characteristics - Activity tracking 346.8061 55.73004 3228 6.222965 2.867589e-08
48 Personal characteristics - Microphone usage 346.4793 55.73004 3228 6.217101 2.981168e-08
49 Personal characteristics - Camera usage 425.1476 55.73004 3228 7.628697 0.000000e+00
50 Volumetric capture - Activity tracking 461.7010 55.63200 3228 8.299199 0.000000e+00
51 Volumetric capture - Microphone usage 461.3742 55.63200 3228 8.293324 0.000000e+00
52 Volumetric capture - Camera usage 540.0425 55.63200 3228 9.707408 0.000000e+00
print(combined_data.stats_results[5])
[[1]]
contrast estimate SE df t.ratio p.value
As a bystander\nwith consent - As a bystander\nwithout consent -347.8 29.8 3228 -11.673 <.0001
As a bystander\nwith consent - As the \nAR user -66.2 29.8 3228 -2.224 0.0674
As a bystander\nwithout consent - As the \nAR user 281.5 29.8 3228 9.454 <.0001
Results are averaged over the levels of: factor_one
P value adjustment: tukey method for comparing a family of 3 estimates
print(combined_data.stats_results[6])
[[1]]
contrast estimate SE df t.ratio p.value
1 As a bystander\nwith consent - As a bystander\nwithout consent -347.7644 29.79183 3228 -11.673146 0
3 As a bystander\nwithout consent - As the \nAR user 281.5423 29.77937 3228 9.454273 0
combined_data.plot <- questionnaire_plot(combined_data, "factor_one", "factor_two", TRUE) + ggtitle("Preference Toward Awareness of AR Activity...")
NULL
`fun.y` is deprecated. Use `fun` instead.
print(combined_data.plot)
ExportPlot(combined_data.plot, "awareness_preferences_combined_plot", 9, 4, doPDF=TRUE)
more_or_less_comfortable_with_ar.results = extract_composite_question_with_factors(raw_data, c("Q34"), common.id_variables,
c("34" = "more_less_comfortable"))
more_or_less_comfortable_with_ar.results
value_order = c(
"Much more uncomfortable",
"More uncomfortable",
"Neutral / No change",
"More comfortable",
"Much more comfortable"
)
more_or_less_comfortable_with_ar.results$value <- factor(more_or_less_comfortable_with_ar.results$value, ordered = TRUE, levels = value_order)
more_or_less_comfortable_with_ar.results$value <- revalue(factor(more_or_less_comfortable_with_ar.results$value), c(
"Much more uncomfortable" = "Much more\n uncomfortable" ,
"More uncomfortable" = "More \nuncomfortable",
"Neutral / No change" = "Neutral /\nNo change",
"More comfortable" = "More\ncomfortable",
"Much more comfortable" = "Much more\ncomfortable"
))
more_or_less_comfortable_with_ar.plot <- questionnaire_plot(more_or_less_comfortable_with_ar.results, "factor_one", NULL, FALSE) +
theme(axis.title.y=element_blank(),
axis.text.y=element_blank(),
axis.ticks.y=element_blank()) + ggtitle("Retrospective - More or less comfortable with AR")
NULL
`fun.y` is deprecated. Use `fun` instead.
print(more_or_less_comfortable_with_ar.plot)
how_comfortable_with_ar.results = extract_composite_question_with_factors(raw_data, c("Q35"), common.id_variables,
c("35" = "how_comfortable_with_ar"))
how_comfortable_with_ar.results
value_order = c(
"Extremely uncomfortable" ,
"Somewhat uncomfortable" ,
"Neither comfortable nor uncomfortable" ,
"Somewhat comfortable" ,
"Extremely comfortable"
)
how_comfortable_with_ar.results$value <- factor(how_comfortable_with_ar.results$value, ordered = TRUE, levels = value_order)
how_comfortable_with_ar.results$value <- revalue(factor(how_comfortable_with_ar.results$value), c(
"Extremely uncomfortable" = "Extremely\nuncomfortable",
"Somewhat uncomfortable" = "Somewhat\nuncomfortable",
"Neither comfortable nor uncomfortable" ="Neither comfortable\nnor uncomfortable",
"Somewhat comfortable" ="Somewhat\ncomfortable" ,
"Extremely comfortable" = "Extremely\ncomfortable"
))
how_comfortable_with_ar.plot <- questionnaire_plot(how_comfortable_with_ar.results, "factor_one", NULL, FALSE) +
theme(axis.title.y=element_blank(),
axis.text.y=element_blank(),
axis.ticks.y=element_blank()) + ggtitle("Retrospective - Comfort with Everyday Augmented Reality")
NULL
`fun.y` is deprecated. Use `fun` instead.
print(how_comfortable_with_ar.plot)
Combined comfort
comfort_combi <- plot_grid(more_or_less_comfortable_with_ar.plot, how_comfortable_with_ar.plot,
ncol = 2, rel_widths = c(1.0,1.0))
print(comfort_combi)
ExportPlot(comfort_combi, "comfort_combi", 11.5, 2, doPDF=TRUE)