Difference: HCIExperiments (1 vs. 8)

Revision 82015-08-21 - aponsard

Line: 1 to 1
 

HCI Experiments

Line: 6 to 6
 A place to put tips, suggestions, and best practices on running experiments.

Procedure

Changed:
<
<
  1. Design and develop experiment
  2. Get ethics approval (http://www.rise.ubc.ca)
  3. Recruit participants
  4. Run the experiment
  5. Analyze the data
  6. Report the data
>
>
  1. Design and develop experiment
  2. Get ethics approval (http://www.rise.ubc.ca)
  3. Recruit participants
  4. Run the experiment
  5. Analyze the data
  6. Report the data
 

Ethics

Line: 29 to 27
  There's a lot of great information on recruiting participants here: HCIStudyParticipantRecruitingResources.
Deleted:
<
<
 

Running the Experiment

Don't forget to have an extra consent form for participants, should they want their own copy.

Booking a room

Deleted:
<
<
To book a room in the Usability Lab (X727), go to this site: http://hct.ece.ubc.ca/mrbs/admin.php. There, you'll need to create a new experiment before you can reserve a room for it.
 
Changed:
<
<
As of June 13, 2014, there is a javascript bug preventing easy creation of new experiments. When attempting to submit the new experiment form an error dialog pops up saying the Sponsor field is empty, despite it being filled in. If this happens, you can fix it by inspecting the Sponsor input field element in your browser and deleting it from the DOM. You'll note that there is an additional hidden input field there that still has the sponsor information, so the form should work correctly. The admins have been informed, but have decided not to fix it.
>
>
To book a room in the Usability Lab (X727), go to this site: https://mrbs.icics.ubc.ca. There, you'll need to create a new experiment before you can reserve a room for it.
 
Added:
>
>
As of June 13, 2014, there is a javascript bug preventing easy creation of new experiments. When attempting to submit the new experiment form an error dialog pops up saying the Sponsor field is empty, despite it being filled in. If this happens, you can fix it by inspecting the Sponsor input field element in your browser and deleting it from the DOM. You'll note that there is an additional hidden input field there that still has the sponsor information, so the form should work correctly. The admins have been informed, but have decided not to fix it. (As of August 2015, the stupid bug is still there, and the website is still terrible. For instance, beware that the "end date" will not be included if you create a daily repeat booking).
 

Recording the data

Line: 59 to 55
 slow,6,1,0,0,2,3,3,... slow,7,1,1,0,1,1,1,... slow,8,1,0,0,2,2,3,...
Changed:
<
<
...
>
>
...
 

Participant receipt form

Revision 72014-06-17 - PeterBeshai

Line: 1 to 1
 

HCI Experiments

Line: 98 to 98
  See examples on how to use R to analyze your data here: https://github.com/pbeshai/stats. Feel free to contribute to the repository.
Changed:
<
<
You may also find examples and explanation at this page helpful: http://yatani.jp/HCIstats/HomePage.
>
>
You may also find examples and explanation at this page by Microsoft Research's Koji Yatani helpful: http://yatani.jp/HCIstats/HomePage.
 

META FILEATTACHMENT attr="" comment="Receipt sheet for participants to sign after doing the experiment" date="1402695744" name="receipt_generic.docx" path="receipt_generic.docx" size="23940" user="pbeshai" version="1.1"

Revision 62014-06-17 - PeterBeshai

Line: 1 to 1
 

HCI Experiments

Line: 98 to 98
  See examples on how to use R to analyze your data here: https://github.com/pbeshai/stats. Feel free to contribute to the repository.
Added:
>
>
You may also find examples and explanation at this page helpful: http://yatani.jp/HCIstats/HomePage.
 
META FILEATTACHMENT attr="" comment="Receipt sheet for participants to sign after doing the experiment" date="1402695744" name="receipt_generic.docx" path="receipt_generic.docx" size="23940" user="pbeshai" version="1.1"
META FILEATTACHMENT attr="" comment="Email from Brian Gleeson on doing stats on Likert-formatted data" date="1402696106" name="brian_likert.pdf" path="brian_likert.pdf" size="282083" user="pbeshai" version="1.1"

Revision 52014-06-17 - PeterBeshai

Line: 1 to 1
 

HCI Experiments

Line: 75 to 75
 
  • ANOVA
  • t-Test
Added:
>
>
Note that as per Cohen (1988), eta squared values map to the following effect sizes:

  • .01 = small
  • .06 = medium
  • .14 = large
  • Jacob Cohen (1988), Statistical Power Analysis for the Behavioral Sciences (2nd ed.), New Jersey: Lawrence Erlbaum Associates, ISBN 0-8058-0283-5.
 

Non-parametric Tests

For analyzing non-parametric data, such as Likert-formatted items, consider using the tests listed below. It is also worthwhile to read through an email from Brian Gleeson on the topic.

Revision 42014-06-16 - PeterBeshai

Line: 1 to 1
 

HCI Experiments

Line: 93 to 93
 See examples on how to use R to analyze your data here: https://github.com/pbeshai/stats. Feel free to contribute to the repository.
Deleted:
<
<

Reporting the data

TODO: Give examples of how to report the typical results. P-value and effect size. Examples for: ANOVA, t-test, Friedman, Wilcoxon, Kruskal-Wallis, and Mann-Whitney U.

 
META FILEATTACHMENT attr="" comment="Receipt sheet for participants to sign after doing the experiment" date="1402695744" name="receipt_generic.docx" path="receipt_generic.docx" size="23940" user="pbeshai" version="1.1"
META FILEATTACHMENT attr="" comment="Email from Brian Gleeson on doing stats on Likert-formatted data" date="1402696106" name="brian_likert.pdf" path="brian_likert.pdf" size="282083" user="pbeshai" version="1.1"
META FILEATTACHMENT attr="" comment="A sample consent form" date="1402697546" name="consent_form_ver1.1.docx" path="consent_form_ver1.1.docx" size="26532" user="pbeshai" version="1.1"

Revision 32014-06-16 - PeterBeshai

Line: 1 to 1
 

HCI Experiments

Line: 40 to 40
 As of June 13, 2014, there is a javascript bug preventing easy creation of new experiments. When attempting to submit the new experiment form an error dialog pops up saying the Sponsor field is empty, despite it being filled in. If this happens, you can fix it by inspecting the Sponsor input field element in your browser and deleting it from the DOM. You'll note that there is an additional hidden input field there that still has the sponsor information, so the form should work correctly. The admins have been informed, but have decided not to fix it.
Added:
>
>

Recording the data

It's important to think about how you'll record the data before running the experiment. To run statistics on the results, you'll want to use a wide format for at least some of the data. By this I mean that each participant's data should be saved in a single row. It is a great idea to try and run some of your analysis on sample data from your experiment before running the experiment on real participants. This will hopefully ensure that you are recording all the data you need to analyze and storing it in a way that makes the analysis easy.

As an example, you might record data with the following format, where the top row of data is in the wide-format (for statistical analysis), summarized from the raw data below:

userCorrect,disCorrect,dSlowDisCorrect,dMedDisCorrect,dFastDisCorrect,disOuterCorrect,disInnerCorrect,aCorrect,...
416,141,70,39,32,66,75,86,...

Block,Trial,UserCorrect,DistractorCorrect,UserSpeed,DistractorSpeed,DistractorRow,DistractorCol,...
slow,1,1,0,0,0,4,0,...
slow,2,1,0,0,1,2,0,...
slow,3,1,1,0,0,0,2,...
slow,4,1,0,0,2,2,1,...
slow,5,1,0,0,0,4,4,...
slow,6,1,0,0,2,3,3,...
slow,7,1,1,0,1,1,1,...
slow,8,1,0,0,2,2,3,...
...
 

Participant receipt form

You'll need a form for people to sign off indicating that they have been paid by you for having done the experiment. A sample template to follow has been attached to this page: receipt_generic.docx. At the completion of the experiment, this can be passed on to the program assistant for reimbursement.

Line: 75 to 97
  TODO: Give examples of how to report the typical results. P-value and effect size. Examples for: ANOVA, t-test, Friedman, Wilcoxon, Kruskal-Wallis, and Mann-Whitney U.
Deleted:
<
<
-- PeterBeshai - 13 Jun 2014
 
META FILEATTACHMENT attr="" comment="Receipt sheet for participants to sign after doing the experiment" date="1402695744" name="receipt_generic.docx" path="receipt_generic.docx" size="23940" user="pbeshai" version="1.1"
META FILEATTACHMENT attr="" comment="Email from Brian Gleeson on doing stats on Likert-formatted data" date="1402696106" name="brian_likert.pdf" path="brian_likert.pdf" size="282083" user="pbeshai" version="1.1"
META FILEATTACHMENT attr="" comment="A sample consent form" date="1402697546" name="consent_form_ver1.1.docx" path="consent_form_ver1.1.docx" size="26532" user="pbeshai" version="1.1"

Revision 22014-06-16 - PeterBeshai

Line: 1 to 1
 

HCI Experiments

Line: 53 to 53
 
  • ANOVA
  • t-Test
Deleted:
<
<

Running Repeated Measures ANOVA in R

Suppose your data was in a file all_results.csv, which had the form:

participant,slow_userCorrect,med_userCorrect,fast_userCorrect,...
1,99,50,20,...
2,103,66,32,...
...

You could run an ANOVA and post-hoc tests comparing slow vs. medium vs. fast (within subjects/repeated measures) across the participants as follows:

all_results <- read.csv("all_results.csv")

# Take a subset of the data only slow vs med vs fast user correct
smf <- all_results[c("slow_userCorrect","med_userCorrect","fast_userCorrect")]

# Create the participant column for each of the 3 conditions (used when stacked)
participant <- rep(all_results$Participant, 3)

# stack the data for repeated-measures anova (1 row per condition)
smf_stack <- stack(smf)
smf_stack[3] <- participant
rm(participant)

# Name the data
colnames(smf_stack) <- c("numCorrect", "condition", "participant")

writeLines("\nSummary of Slow/Medium/Fast\n----------------------------------------")
print(summary(smf))

# run the ANOVA
aov.out = aov(numCorrect ~ condition + Error(participant/condition), data=smf_stack)
writeLines("\n\nANOVA Results\n----------------------------------------")
print(summary(aov.out))

# run the post-hoc tests (t-Test with Holm correction)
writeLines("\n\nPost-hoc Test Results (Pairwise t-Test with Holm correction)\n----------------------------------------")
print(with(smf_stack, pairwise.t.test(numCorrect, condition, p.adjust.method="holm", paired=T)))
 

Non-parametric Tests

For analyzing non-parametric data, such as Likert-formatted items, consider using the tests listed below. It is also worthwhile to read through an email from Brian Gleeson on the topic.
Line: 103 to 61
 
  • Friedman Test
  • Wilcoxon Signed-Rank Test
Deleted:
<
<
Running Friedman and Wilcoxon in R
Suppose your data was in a file all_results.csv, which had the form:

participant,...,slow_avatarLetter,med_avatarLetter,fast_avatarLetter,...
1,...,5,4,3,...
2,...,4,4,2,...
...

Here slow_avatarLetter, med_avatarLetter, and fast_avatarLetter represent Likert-formatted question responses to the same question asked after the slow condition, medium condition, and fast condition (non-parametric repeated measures). You could run a Friedman test and Wilcoxon post-hoc tests to determine if there is significant differences between the responses (slow vs medium vs fast) as follows:

all_results <- read.csv("all_results.csv")

Mode <- function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}

# Take a subset of the data only slow vs med vs fast user correct
diff_smf <- all_results[c("slow_avatarLetter","med_avatarLetter","fast_avatarLetter")]

# Create the participant column for each of the 3 conditions (used when stacked)
participant <- rep(all_results$Participant, 3)

# stack the data for repeated-measures anova (1 row per condition)
diff_smf_stack <- stack(diff_smf)
diff_smf_stack[3] <- participant
rm(participant)

# Name the data
colnames(diff_smf_stack) <- c("numCorrect", "condition", "participant")

writeLines("\nSummary of Slow/Medium/Fast\n----------------------------------------")
print(summary(diff_smf))
diff_smf_modes <- c(Mode(diff_smf[,1]), Mode(diff_smf[,2]), Mode(diff_smf[,3]))
cat(c("Modes: ", diff_smf_modes, "\n"))


# Run the Friedman test
writeLines("\n\nFriedman Rank Sum Test Results\n----------------------------------------")
diff_smf_results <- friedman.test(numCorrect ~ condition | participant, data=diff_smf_stack)
print(diff_smf_results)


# Run the post-hoc tests (Wilcoxon with Holm correction)
writeLines("\n\nPost-hoc Test Results (Pairwise Wilcoxon Test with Holm correction)\n----------------------------------------")
print(with(diff_smf_stack, pairwise.wilcox.test(numCorrect, condition, p.adjust.method="holm", paired=T)))

Note that running this code will often produce warnings from R about ties and zero values preventing exact computation of a p-value. The tie warning happens when multiple participants in a block give the same response. The zero warning happens when a single participant gives the same response in two blocks (e.g., P1 slow = 4, P1 med = 4). It seems many people ignore these warnings and still use the results.

 

Between Subjects

  • Kruskal-Wallis
  • Mann-Whitney U
Added:
>
>

Running the analysis in R

See examples on how to use R to analyze your data here: https://github.com/pbeshai/stats. Feel free to contribute to the repository.

 

Reporting the data

TODO: Give examples of how to report the typical results. P-value and effect size. Examples for: ANOVA, t-test, Friedman, Wilcoxon, Kruskal-Wallis, and Mann-Whitney U.

Revision 12014-06-13 - PeterBeshai

Line: 1 to 1
Added:
>
>

HCI Experiments

A place to put tips, suggestions, and best practices on running experiments.

Procedure

  1. Design and develop experiment
  2. Get ethics approval (http://www.rise.ubc.ca)
  3. Recruit participants
  4. Run the experiment
  5. Analyze the data
  6. Report the data

Ethics

The following samples come from an accepted ethics application. It may be useful to reuse some of the boilerplate wording in future applications.

Recruiting

There's a lot of great information on recruiting participants here: HCIStudyParticipantRecruitingResources.

Running the Experiment

Don't forget to have an extra consent form for participants, should they want their own copy.

Booking a room

To book a room in the Usability Lab (X727), go to this site: http://hct.ece.ubc.ca/mrbs/admin.php. There, you'll need to create a new experiment before you can reserve a room for it.

As of June 13, 2014, there is a javascript bug preventing easy creation of new experiments. When attempting to submit the new experiment form an error dialog pops up saying the Sponsor field is empty, despite it being filled in. If this happens, you can fix it by inspecting the Sponsor input field element in your browser and deleting it from the DOM. You'll note that there is an additional hidden input field there that still has the sponsor information, so the form should work correctly. The admins have been informed, but have decided not to fix it.

Participant receipt form

You'll need a form for people to sign off indicating that they have been paid by you for having done the experiment. A sample template to follow has been attached to this page: receipt_generic.docx. At the completion of the experiment, this can be passed on to the program assistant for reimbursement.

Analyzing the Data

Common statistical methods used in analyzing experiment data.

Parametric tests

  • ANOVA
  • t-Test

Running Repeated Measures ANOVA in R

Suppose your data was in a file all_results.csv, which had the form:

participant,slow_userCorrect,med_userCorrect,fast_userCorrect,...
1,99,50,20,...
2,103,66,32,...
...

You could run an ANOVA and post-hoc tests comparing slow vs. medium vs. fast (within subjects/repeated measures) across the participants as follows:

all_results <- read.csv("all_results.csv")

# Take a subset of the data only slow vs med vs fast user correct
smf <- all_results[c("slow_userCorrect","med_userCorrect","fast_userCorrect")]

# Create the participant column for each of the 3 conditions (used when stacked)
participant <- rep(all_results$Participant, 3)

# stack the data for repeated-measures anova (1 row per condition)
smf_stack <- stack(smf)
smf_stack[3] <- participant
rm(participant)

# Name the data
colnames(smf_stack) <- c("numCorrect", "condition", "participant")

writeLines("\nSummary of Slow/Medium/Fast\n----------------------------------------")
print(summary(smf))

# run the ANOVA
aov.out = aov(numCorrect ~ condition + Error(participant/condition), data=smf_stack)
writeLines("\n\nANOVA Results\n----------------------------------------")
print(summary(aov.out))

# run the post-hoc tests (t-Test with Holm correction)
writeLines("\n\nPost-hoc Test Results (Pairwise t-Test with Holm correction)\n----------------------------------------")
print(with(smf_stack, pairwise.t.test(numCorrect, condition, p.adjust.method="holm", paired=T)))

Non-parametric Tests

For analyzing non-parametric data, such as Likert-formatted items, consider using the tests listed below. It is also worthwhile to read through an email from Brian Gleeson on the topic.

Repeated Measures / Within Subjects

  • Friedman Test
  • Wilcoxon Signed-Rank Test

Running Friedman and Wilcoxon in R
Suppose your data was in a file all_results.csv, which had the form:

participant,...,slow_avatarLetter,med_avatarLetter,fast_avatarLetter,...
1,...,5,4,3,...
2,...,4,4,2,...
...

Here slow_avatarLetter, med_avatarLetter, and fast_avatarLetter represent Likert-formatted question responses to the same question asked after the slow condition, medium condition, and fast condition (non-parametric repeated measures). You could run a Friedman test and Wilcoxon post-hoc tests to determine if there is significant differences between the responses (slow vs medium vs fast) as follows:

all_results <- read.csv("all_results.csv")

Mode <- function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}

# Take a subset of the data only slow vs med vs fast user correct
diff_smf <- all_results[c("slow_avatarLetter","med_avatarLetter","fast_avatarLetter")]

# Create the participant column for each of the 3 conditions (used when stacked)
participant <- rep(all_results$Participant, 3)

# stack the data for repeated-measures anova (1 row per condition)
diff_smf_stack <- stack(diff_smf)
diff_smf_stack[3] <- participant
rm(participant)

# Name the data
colnames(diff_smf_stack) <- c("numCorrect", "condition", "participant")

writeLines("\nSummary of Slow/Medium/Fast\n----------------------------------------")
print(summary(diff_smf))
diff_smf_modes <- c(Mode(diff_smf[,1]), Mode(diff_smf[,2]), Mode(diff_smf[,3]))
cat(c("Modes: ", diff_smf_modes, "\n"))


# Run the Friedman test
writeLines("\n\nFriedman Rank Sum Test Results\n----------------------------------------")
diff_smf_results <- friedman.test(numCorrect ~ condition | participant, data=diff_smf_stack)
print(diff_smf_results)


# Run the post-hoc tests (Wilcoxon with Holm correction)
writeLines("\n\nPost-hoc Test Results (Pairwise Wilcoxon Test with Holm correction)\n----------------------------------------")
print(with(diff_smf_stack, pairwise.wilcox.test(numCorrect, condition, p.adjust.method="holm", paired=T)))

Note that running this code will often produce warnings from R about ties and zero values preventing exact computation of a p-value. The tie warning happens when multiple participants in a block give the same response. The zero warning happens when a single participant gives the same response in two blocks (e.g., P1 slow = 4, P1 med = 4). It seems many people ignore these warnings and still use the results.

Between Subjects

  • Kruskal-Wallis
  • Mann-Whitney U

Reporting the data

TODO: Give examples of how to report the typical results. P-value and effect size. Examples for: ANOVA, t-test, Friedman, Wilcoxon, Kruskal-Wallis, and Mann-Whitney U.

-- PeterBeshai - 13 Jun 2014

META FILEATTACHMENT attr="" comment="Receipt sheet for participants to sign after doing the experiment" date="1402695744" name="receipt_generic.docx" path="receipt_generic.docx" size="23940" user="pbeshai" version="1.1"
META FILEATTACHMENT attr="" comment="Email from Brian Gleeson on doing stats on Likert-formatted data" date="1402696106" name="brian_likert.pdf" path="brian_likert.pdf" size="282083" user="pbeshai" version="1.1"
META FILEATTACHMENT attr="" comment="A sample consent form" date="1402697546" name="consent_form_ver1.1.docx" path="consent_form_ver1.1.docx" size="26532" user="pbeshai" version="1.1"
META FILEATTACHMENT attr="" comment="A sample recruitment email" date="1402697590" name="recruitment_email_ver1.1.docx" path="recruitment_email_ver1.1.docx" size="18282" user="pbeshai" version="1.1"
META FILEATTACHMENT attr="" comment="A sample completed ethics application" date="1402697763" name="completed_ethics_application.pdf" path="completed_ethics_application.pdf" size="883473" user="pbeshai" version="1.1"
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback