The American National Election Studies 2008 Time Series Study included an Affect Misattribution Procedure (AMP) that measured implicit attitudes. The 2008 ANES User's Guide, located here, noted that, "[d]uring this module, respondents attributed a 'pleasant' or 'unpleasant' characteristic to Chinese-character graphic images, each of which was displayed to the respondent following a briefly flashed photo image of a young male."

Here are the photos of the young males, from Appendix A:

ANES AMP Faces

As you can see, this procedure measured implicit attitudes about mustaches.

Tagged with: , ,

Here's the abstract of a PLoS One article, "Racial Bias in Perceptions of Others' Pain":

The present work provides evidence that people assume a priori that Blacks feel less pain than do Whites. It also demonstrates that this bias is rooted in perceptions of status and the privilege (or hardship) status confers, not race per se. Archival data from the National Football League injury reports reveal that, relative to injured White players, injured Black players are deemed more likely to play in a subsequent game, possibly because people assume they feel less pain. Experiments 1–4 show that White and Black Americans–including registered nurses and nursing students–assume that Black people feel less pain than do White people. Finally, Experiments 5 and 6 provide evidence that this bias is rooted in perceptions of status, not race per se. Taken together, these data have important implications for understanding race-related biases and healthcare disparities.

Here are descriptions of the samples for each experiment, after exclusions of respondents who did not meet criteria for inclusion:

  • Experiment 1: 240 whites from the University of Virginia psychology pool or MTurk
  • Experiment 2: 35 blacks from the University of Virginia psychology pool or MTurk
  • Experiment 3: 43 registered nurses or nursing students
  • Experiment 4: 60 persons from MTurk
  • Experiment 5: 104 persons from MTurk
  • Experiment 6: 245 persons from MTurk

Not the most representative samples, of course. If you're thinking that it would be interesting to see whether results hold in a nationally representative sample with a large sample size, well, that was tried, with a survey experiment as part of the Time Sharing Experiments in the Social Sciences. Here's the description of the results listed on the TESS site for the study:

Analyses yielded mixed evidence. Planned comparison were often marginal or non-significant. As predicted, White participants made (marginally) lower pain ratings for Black vs. White targets, but only when self-ratings came before target ratings. When target ratings came before self-ratings, White participants made (marginally) lower pain ratings for White vs. Black targets. Follow-up analyses suggest that White participants may have been reactant. White participants reported that they were most similar to the Black target and least similar to the White target, contrary to prediction and previous work both in our lab and others' lab. Moreover, White participants reported that Blacks were most privileged and White participants least privileged, again contrary to prediction and previous work both in our lab and others' lab.

The results of this TESS study do not invalidate the results of the six experiments and one archival study reported in the PLoS One article, but the non-reporting of the TESS study does raise questions about whether there were other unreported experiments and archival studies.

The TESS study had an unusually large and diverse sample: 586 non-Hispanic whites, 526 non-Hispanic blacks, 520 non-Hispanic Asians, and 528 Hispanics. It's too bad that these data were placed into a file drawer.

Tagged with: , , ,

Here are some graphs to follow up on this Monkey Cage post.

DW-Nominate_SD

Bailey_SD---

UPDATE (Sept 12, 2014)

Here's another graph of the Bailey data, to illustrate the narrowing and moderate cross-time shift of the congressional GOP and northern Democratic ideal point estimates, but a more dramatic leftward cross-time shift in the congressional southern Democratic ideal point estimates.

bailey_sort

---

UPDATE (Sept 13, 2014)

Here are the do files I used to create a database with Bailey scores and state and party codes for each case (House, Senate). Here is a description of the process that I used to create the do files.

Tagged with: ,

I blogged here about inferential problems in the typical symbolic racism research study, which measures symbolic racism with these items:

1. Irish, Italians, Jewish and many other minorities overcame prejudice and worked their way up. Blacks should do the same without any special favors.

2. Generations of slavery and discrimination have created conditions that make it difficult for blacks to work their way out of the lower class.

3. Over the past few years, blacks have gotten less than they deserve.

4. It's really a matter of some people not trying hard enough; if blacks would only try harder they could be just as well off as whites.

One inferential problem is that the above items cannot differentiate racial bias from non-racial beliefs and attitudes; for example, a respondent might oppose special favors for blacks because that respondent is racist or because that respondent opposes special favors in general.

Symbolic racism research has typically addressed this inferential problem through statistical control, tossing into a regression such variables as partisanship, self-identified ideology, or specific conservative beliefs. But the working manuscript here provided evidence that statistical control does not always isolate the racial component of symbolic racism.

The TESS proposal that I recently submitted tried to isolate the racial component of symbolic racism through a survey experiment: a randomly-selected half of white respondents would receive the traditional symbolic racism items, and the other half would receive an adjusted set of items, such as "Irish, Italians, Jewish and many other groups overcame prejudice and worked their way up. Poor whites should do the same without any special favors." The idea would be to compare support for the traditional item to support for the adjusted item to assess how much responses differ due to the target mentioned in the item (blacks or poor whites).

I did not originate this idea: Paul Sniderman and Edward Carmines reported a survey that did the same exact thing, but which used "new immigrants from Europe" in the special favors item (see p. 199 here, but the survey is reported in other publications, too). However, as far as I can tell, that survey experiment concerned only the special favors symbolic racism item; the purpose of the proposed experiment is to assess the racial component of the entire battery of symbolic racism items.

Benefits of the survey experiment measurement of symbolic racism are resources saved (no need to include control items) and stronger inference. Ideally, adjusted items could reflect the race or ethnicity of each respondent, such as poor Hispanics or poor Asians instead of poor whites.

Here is the proposal for TESS, which was rejected. Comments are welcome.

 

Tagged with: , , ,

This R lesson is for confidence intervals on point estimates. See here for other lessons.

---

Here's the first three lines of code:

pe <- c(2.48, 1.56, 2.96)
y.axis <- c(1:3)
plot(pe, y.axis, type="p", axes=T, pch=19, xlim=c(1,4), ylim=c(1,3))

The first line places 2.48, 1.56, and 2.96 into a vector called "pe" for point estimates; you can call the vector anything that you want, as long as R recognizes the vector name.

The second line sends the integers from 1 to 3 into the vector "y.axis"; instead of y.axis <- c(1:3), you could have written y.axis <- c(1,2,3) to do the same thing.

The third line plots a graph with pe on the x-axis and y.axis on the y-axis; type="p" tells R to plot points, axes=T tells R to draw axes, pch=19 indicates what type of points to draw, xlim=c(1,4) indicates that the x-axis extends from 1 to 4, and ylim=c(1,3) indicates that the y-axis extends from 1 to 3.

Here's the graph so far:

ci1---

Let's make the points a bit larger by adding cex=1.2 to the end of the plot command.

Let's also add a title, using a new line of code: title(main="Negative Stereotype Disagreement > 3").

ci2---

Let's add the 95% confidence interval lines.

lower <- c(2.26, 1.17, 2.64)
upper <- c(2.70, 1.94, 3.28)
segments(lower, y.axis, upper, y.axis, lwd= 1.3)

The first line indicates the lower ends of the confidence intervals; the second line indicates the upper ends of the confidence intervals; and the segments command draws line segments from the coordinate (lower, y.axis) to the coordinate (upper, y.axis), with lwd=1.3 indicating that the line should be slightly thicker than the default.

Here's what we have so far:

ci3---

Let's replace the x-axis and y-axis. First, change axes=T to axes=F in the plot command; then add the code axis(1, at=seq(1,4,by=1)) to tell R to draw an axis at the bottom from 1 to 4 with tick marks every 1 unit. Here's what we get:

ci4Let's get rid of the "pe" and "y.axis" labels. Add to the plot command: xlab="", ylab="". Here's the graph now:

ci5---

Let's work on the y-axis now:

names <- c("Baseline", "Black\nFamily", "Affirmative\nAction")
axis(2, at=y.axis, label=names)

The first line sends three phrases to the vector "names"; the \n in the phrases tells R to place "Family" and "Action" on a new line. Here's the result:

ci6Let's make the y-axis labels perpendicular to the y-axis by adding las=2 to the axis(2 line. [las=0 would keep the labels parallel.]

ci7Now we need to add a little more space to the left of the graph to see the y-axis labels. Add par(mar=c(4, 6, 2, 0)) above the plot command to tell R to make the margins 4, 6, 2, and 0 for the bottom, left, top, and right margins.

ci8---

Let's say that I decided that I prefer to have the baseline on top of the graph and Affirmative Action at the bottom of the graph. I could use the rev() function to reverse the order of the points in the plot, segments, and axis functions to get:

ci9---

Here is the whole code for the above graph. By the way, the graph above can be found in my article on social desirability in the list experiment, "You Wouldn't Like Me When I'm Angry."

Tagged with: ,

This R lesson is for the plot command. See here for other lessons.

---

The start of this code is a bit complex. It's from R Commander, which is a way to use R through a graphical interface without having to write code.

library(foreign)

The library function with the foreign package is used to import data from SPSS, Stata, or some other software.

DWHouse <- read.dta("C:/house_polarization46_113v9.dta", convert.dates=TRUE, convert.factors=TRUE, missing.type=TRUE, convert.underscore=TRUE, warn.missing.labels=TRUE)

The above command reads data from Stata (.dta extension) and places the data into DWHouse. The house_polarization46_113v9.dta dataset is from Voteview polarization data, located here. [The v9 on the end of the dataset indicates that I saved the dataset as Stata version 9.]

---

Here's the plot command:

plot(repmean1~year, type="p", xlim=c(1900,2012), ylim=c(-1,1), xlab="Year", ylab="Liberal - Conservative", pch=19, col="red", main="House", data=DWHouse)

Here are what the arguments mean: the tilde in repmean1~year plots repmean1 as a function of year, type="p" indicates to plot points, xlim=c(1900,2012) indicates the limits for the x-axis, ylim=c(-1,1) indicates the limits for the x-axis, xlab="Year" and ylab="Liberal - Conservative" respectively indicate labels for the x-axis and y-axis, pch=19 indicates to use the 19 plotting character [see here for a list of pchs], col="red" indicates the color for the pchs [see here for a list of colors], main="House" indicates the main title, and data=DWHouse indicates the data to plot.

Here's what the graph looks like so far:

plotgop---

The repmean1 plotted above is the Republican Party mean for the first-dimension DW-Nominate scores among members of the House of Representatives. Let's add the Democrats. Instead of adding a new plot command, we just add points:

points(demmean1~year, type="p", pch=19, col="blue", data=DWHouse)

Now let's add some labels:

text(1960,0.4,labels="GOP mean", col="red")
text(1960,-0.4,labels="Dem mean", col="blue")

The first command adds text at the coordinate x=1960 and y =0.4; the text itself is "GOP mean," and the color of the text is red. I picked x=1960 and y =0.4 through trial and error to see where the text would look the nicest.

Here's the graph now:

plotgopdem---

Notice that the x-axis is labeled in increments of 20 years (1900, 1920, 1940, ...). This can be changed as follows. First, add axes=F to the plot command to shut off axes; you could also write axes=FALSE); then add these axis lines below the plot command:

axis(1, at=seq(1900, 2020, 10))
axis(2, at=seq(-1, 1, 0.5))

The above lines tell R to plot axes at the indicated intervals. The first line arguments are: 1 tells R to plot an axis below [1=below, 2=left, 3=above, and 4=right], and the (1900, 2020, 10) sequence tells R to plot from 1900 to 2020 and place tick marks every 10 years. Here's the resulting graph:

plotgopdem20---

Notice that the x-axis and y-axis do not touch in the graph above. There's a few extra points plotted that I did not intend to plot: I meant to start the graph at 1900 so that the first point was 1901 (DW-Nominate scores are provided in the dataset every two years starting with 1879). To get the x-axis and y-axis to touch, add xaxs="i", yaxs="i" to the plot command. Let's also add box() to get a box around the graph, like we had in the first two graphs above.

plotgopdem20i

---

Here is the whole code for the plot above.

Tagged with: ,

The first graph in this series is a barplot. This post will show how to add error bars to a barplot.

Here's the data that we want to plot, from a t-test conducted in Stata:

ttest---

Here's the first part of the code:

library(Hmisc)

The code above opens the Hmisc library, which has the error bar function that we will use.

means <- c(2.96, 3.59)

The code above places 2.96 and 3.59 into the vector "means".

bp = barplot(means, ylim=c(0,6), names.arg=c("Black", "White"), ylab="Support for life in prison without parole", xlab="Race of the convicted teen", width=c(0.2,0.2), xlim=c(0,1), space=c(1,1), las=1, main="Black Non-Hispanic Respondents")

The code above is similar to the barplot code that we used before, but notice that in this case the barplot is = bp. The remainder of the arguments are: means indicates what data to plot, ylim=c(0,6) indicates that the limits of the y-axis are 0 and 6, names.arg=c("Black", "White") indicates the names for the bars, ylab="Support for life in prison without parole" indicates the label for the y-axis, xlab="Race of the convicted teen" indicates the label for the x-axis, width=c(0.2,0.2) indicates the width of the bars, xlim=c(0,1) indicates that the limits of the x-axis are 0 and 1, space=c(1,1) indicates the spacing between bars, and main="Black Non-Hispanic Respondents" indicates the main title for the graph.

Here's the graph so far:

95a

---

Here's how to add the error bars:

se <- c(0.2346, 0.2022)
lower = c(means-1.96*se, means-1.96*se)
upper = c(means+1.96*se, means+1.96*se)
errbar(bp, means, upper, lower, add=T)

The first line sends the values for the standard errors into the vector "se". The second and third lines are used to calculate the ends of the error bars. The fourth line tells R to plot error bars; the add=T option tells R to keep the existing graph; without add=T, the graph will show only the error bars.

Finally, add the code box(bty="L") so that there is a line on the bottom of the graph. The bty="L" tells R to make the axis look like the letter L. Other options include C, O, 7, and U.

Here is the graph now:

95b---

It's not necessary to use the 1.96 multiplier for the error bars. The following code plugged in the lower and upper limits directly from the Stata output.

library(Hmisc)

means <- c(2.96, 3.59)

bp = barplot(means, ylim=c(0,6), names.arg = c("Black", "White"), ylab="Support for life in prison without parole", xlab="Race of the convicted teen", xpd=T, width=c(0.2,0.2), xlim=c(0,1), space=c(1,1), main="Black Non-Hispanic Respondents")

se <- c(0.2346, 0.2022)
lower = c(2.48, 3.19)
upper = c(3.42, 4.00)
errbar(bp, means, upper, lower, add=T)

box(bty="O")

---

Here's what the graph looks like for the above, shortened code, with the bty="O":

95c

---

Data from this post were drawn from here, with the article here. Click here for the graph code.

Tagged with: ,