Skip to content
This repository has been archived by the owner on May 24, 2019. It is now read-only.
leeper edited this page Oct 4, 2014 · 1 revision

How much do your HITs pay?

Every HIT posted on MTurk has a reward amount in U.S. dollars that is paid to workers when an assignment is approved. That amount is set when a HIT is created as a property of the HITType and it can be changed using the ChangeHITType function in MTurkR. Similarly, it is possible to determine the total cost of a HIT (given assignments, fees, bonuses, etc.) using SufficientFunds.

An important question not solved by any of the functions inside MTurkR is how much that reward amount translates to in terms of a wage for workers completing your HITs. This matters because many MTurk workers (or "Turkers") are completing HITs in order to earn money. They are not volunteers and Amazon's ability to operate the MTurk platform is premised upon workers being just that: employees of each individual requester, completing tasks on a contractual basis. As such, requesters have some ethical - if not legal - obligation to pay workers a wage proportionate to the time and effort put into completing tasks.

How can we determine the average hourly rate being paid to all the workers who complete a given HIT? It's actually quite simple because each requester knows the reward amount for each HIT and MTurkR already provides information about the time each worker takes to complete their assignment. Let's see how this works in the code below.

# load MTurkR
library("MTurkR")

# setup your credentials using `credentials`
# credentials(c(accesskey,secretkey))

# retrieve all HITs
hits <- SearchHITs(return.all=TRUE)$HITs

# get all assignments for each HIT
hitassignments <- lapply(hits$HITId, function(x) { GetAssignments(hit=x, return.all=TRUE) })

# calculate total spent by workers time across all assignments on each HIT
hits$TimeOnHIT <-
  sapply(hitassignments, function(x) sum(as.numeric(x$SecondsOnHIT)))

# calculate mean hourly wage as total payments divided by total time on HIT
hits$TotalPayments <- as.numeric(hits$Amount) * as.numeric(hits$NumberOfAssignmentsCompleted)
hits$MeanHourlyWage <- round( hits$TotalPayments / (hits$TimeOnHIT/3600), 2)

The MeanHourlyWage variable in the hits dataframe now contains the mean hourly wage paid to workers for each HIT. One could also take a (weighted) average of this variable to determine the hourly wage paid across multiple HITs (which might be appropriate for a batch of HITs, or for the wage paid on average over your lifetime as a requester).

Since July 24, 2009, the United States federal minimum wage has been $7.25/hour. If you run the above code, what are your HITs paying?

Note: It's worth keeping in mind that this won't be a perfectly accurate estimate of wages because some workers may have elapsed time between when they accepted the HIT and when they actually started "working" on the HIT, which means this calculation will tend to slightly underestimate the wage paid for actual working time. One could use a trimmed mean (using the trim argument to mean) to perhaps obtain a slightly better estimate.