world-cafe study (informing basal attributes, S2)

Author

Julius Fenn, Louisa Estadieu

Notes

Remark: …

prepare data

set up data.frame

########################################
# create counter variable for data set
########################################
dat$ID <- NA

tmp_IDcounter <- 0
for(i in 1:nrow(dat)){
  if(!is.na(dat$sender[i]) && dat$sender[i] == "Greetings"){
    # tmp <- dat$prolific_pid[i]
    tmp_IDcounter = tmp_IDcounter + 1
  }
  dat$ID[i] <- tmp_IDcounter
}


########################################
# keep only complete data sets
########################################
sum(table(dat$ID) != max(table(dat$ID)))
[1] 15
sum(table(dat$ID) == max(table(dat$ID)))
[1] 13
dat <- dat[dat$ID %in% names(table(dat$ID))[table(dat$ID) == max(table(dat$ID))],]

########################################
# json (from JATOS) to 2D data.frame
########################################
tmp_notNumeric <- str_subset(string = colnames(dat), pattern = "^meta")
tmp_notNumeric <- str_subset(string = tmp_notNumeric, pattern = "labjs|location", negate = TRUE)

# tmp_numeric <- str_subset(string = colnames(dat), pattern = "^affImgAffect|^CRKQ|^CCSQ|^CMQ|^GCB")


vec_ques <- c("dummy_informedconsent",
              tmp_notNumeric,
              
              "applicationsSR", "applicationsSRdefinition",
              
              "benefitsSR", "benefitsSRdefinition",
              "risksSR", "risksSRdefinition",
              
              "socialBenefitsSR", "socialBenefitsSRdefinition", 
              "socialRisksSR", "socialRisksSRdefinition",
              
              "sustainableSR", "sustainableSRdefinition",
              
              "feedback_critic")

vec_notNumeric = c("dummy_informedconsent",
              tmp_notNumeric,
              
              "applicationsSR", "applicationsSRdefinition",
              
              "benefitsSR", "benefitsSRdefinition",
              "risksSR", "risksSRdefinition",
              
              "socialBenefitsSR", "socialBenefitsSRdefinition", 
              "socialRisksSR", "socialRisksSRdefinition",
              
              "sustainableSR", "sustainableSRdefinition",
              
              "feedback_critic")

questionnaire <- questionnairetype(dataset = dat, 
                                        listvars = vec_ques, 
                                        notNumeric = vec_notNumeric)

get reaction times for single components

not needed

clean data (if needed)

not needed

describe data

sample description

## number of participants
nrow(questionnaire)
[1] 13

open questions

applications of soft robots

open question: What are the most promising applications of soft robots over their rigid counterparts within your field of expertise?

DT::datatable(questionnaire[, c("applicationsSR","applicationsSRdefinition")], options = list(pageLength = 5)) 

main benefits and risks of soft robots

open questions:

  • In your expert opinion, what are the main benefits of soft robots compared to rigid robots?
  • In your expert opinion, what are the main risks of soft robots compared to rigid robots?
DT::datatable(questionnaire[, c("benefitsSR","benefitsSRdefinition",
                                "risksSR","risksSRdefinition")], options = list(pageLength = 5)) 

social benefits and risks of soft robots

open questions:

  • From your expert perspective, what do you identify as the primary social benefits of soft robots compared to rigid robots?
  • From your expert perspective, what do you identify as the primary social risks of soft robots compared to rigid robots?
DT::datatable(questionnaire[, c("socialBenefitsSR","socialBenefitsSRdefinition",
                                "socialRisksSR","socialRisksSRdefinition")], options = list(pageLength = 5)) 

environmental impacts of soft robots

open question: From your expert point of view, could you elaborate on the potential environmental impacts of soft robots, considering aspects like energy efficiency, and end-of-life disposal, particularly in comparison to rigid robots?

DT::datatable(questionnaire[, c("sustainableSR","sustainableSRdefinition")], options = list(pageLength = 5)) 

save as Excel

as .xlsx file

tmp_dat <- questionnaire[, c("ID",
"applicationsSR","applicationsSRdefinition",
"benefitsSR","benefitsSRdefinition",
"risksSR","risksSRdefinition",
"socialBenefitsSR","socialBenefitsSRdefinition",
"socialRisksSR","socialRisksSRdefinition",
"sustainableSR","sustainableSRdefinition",
"feedback_critic")]
xlsx::write.xlsx2(x = tmp_dat, file = "outputs/openQuestions.xlsx")

general feedback, critic

tmp_dat <- questionnaire[questionnaire$feedback_critic != "" & !is.na(questionnaire$feedback_critic), c("ID","feedback_critic")]
DT::datatable(tmp_dat, options = list(pageLength = 5)) 

basal attributes

relevancy and valence ratings

########################################
# get data set with all ratings
########################################
dat_ratings <- na.omit(dat[, c("ID", "Attribut", "English_translation", "ratingLivmats", "ratingValence")])
dat_ratings$ratingLivmats <- as.numeric(dat_ratings$ratingLivmats)
dat_ratings$ratingValence <- as.numeric(dat_ratings$ratingValence)

if(nrow(dat_ratings) / 32 == nrow(questionnaire)){
  print("Everything worked fine")
}
[1] "Everything worked fine"
########################################
# summary of all ratings
########################################
summary_ratings <- dat_ratings %>%
  group_by(English_translation) %>%
  summarize(N = n(), 
            mean_ratingLivmats = mean(ratingLivmats), SD_ratingLivmats = sd(ratingLivmats),
            mean_ratingValence = mean(ratingValence), SD_ratingValence = sd(ratingValence)) %>%
  mutate(across(3:6, round, 2))
DT::datatable(summary_ratings, options = list(pageLength = 5)) 
## save
xlsx::write.xlsx2(x = summary_ratings, file = "outputs/summary_ratings.xlsx")

########################################
# get words of basal attributes => 6
########################################
summary_ratings$English_translation[summary_ratings$mean_ratingLivmats >= 6]
 [1] "adaptive"                 "autonomous"              
 [3] "bio-inspired"             "biologically inspired"   
 [5] "changeable"               "changeable shape"        
 [7] "durable"                  "ecologically"            
 [9] "electronic-free"          "energy autonomous"       
[11] "energy-efficient"         "environmentally friendly"
[13] "intelligent"              "life-like"               
[15] "maintenance-free"         "multifunctional"         
[17] "reactive"                 "reliable"                
[19] "resilient"                "responsive"              
[21] "robust"                   "self-healing"            
[23] "self-repairing"           "storing energy"          
[25] "sustainable"              "technological"           
[27] "versatile"               

Plot relevancy ratings:

# Calculate mean and standard deviation
mu <- mean(dat_ratings$ratingLivmats, na.rm = TRUE)
sigma <- sd(dat_ratings$ratingLivmats, na.rm = TRUE)

# Create the histogram with normal distribution overlay
ggplot(dat_ratings, aes(x = ratingLivmats)) +
  geom_histogram(aes(y = ..density..), binwidth = 1, fill = "dodgerblue3", color = "white") +
  stat_function(fun = dnorm, args = list(mean = mu, sd = sigma), color = "red") +
  labs(x = "Mean Relevancy Ratings", y = "Density") +
  theme_apa() +
  theme(plot.title = element_text(hjust = 0.5)) + geom_vline(xintercept = mean(dat_ratings$ratingLivmats, na.rm = TRUE), col = "red")

Plot valence ratings:

# Calculate mean and standard deviation
mu <- mean(dat_ratings$ratingValence, na.rm = TRUE)
sigma <- sd(dat_ratings$ratingValence, na.rm = TRUE)

# Create the histogram with normal distribution overlay
ggplot(dat_ratings, aes(x = ratingValence)) +
  geom_histogram(aes(y = ..density..), binwidth = 1, fill = "dodgerblue3", color = "white") +
  stat_function(fun = dnorm, args = list(mean = mu, sd = sigma), color = "red") +
  labs(x = "Mean Valence Ratings", y = "Density") +
  theme_apa() +
  theme(plot.title = element_text(hjust = 0.5)) + geom_vline(xintercept = mean(dat_ratings$ratingValence, na.rm = TRUE), col = "red")

both are medium-strongly slightly related

cor(dat_ratings$ratingLivmats, dat_ratings$ratingValence)
[1] 0.507867

missing basal attributes for single research areas

for Research Area A (Energy Autonomy):

table(unlist(dat$toolsStatistics))

convert energy Energy storage harvest energy          local      renewable 
             3              3              3              2              1 

for Research Area B (Adaptivity):

table(unlist(dat$toolsSoftwares))

         adaptivty       feasability              health           learning 
                 3                  1                  1                  1 
          lifetime trigger responsive 
                 1                  4 

for Research Area C (Longevity):

table(unlist(dat$toolsTopics))

    circular     lifetime long-lasting    permanent    recycling self-healing 
           3            2            4            1            2            1 
self-sealing  Sustainable 
           1            3 

for Research Area D (Societal challenges and Sustainability):

table(unlist(dat$toolsData))

 accaptance in society individual vs. society    local vs. worldwide 
                     4                      2                      1 
              politics 
                     1