This is some analysis of data on U.S. Supreme Court Justices, spanning 1937-2015. Source: Kaggle, via Abigail Larion. Original data from Supreme Court Database, with scores calculated by Andrew Martin (U Michigan) and Kevin Quinn (UC Berkeley)
Caveat: everything that follows is exploratory. It was lots of fun to do, but don’t take it too seriously.
This analysis is divided into four parts:
Do Supreme Court trends change depending on which party is in office? Answer: no, they do not
Where do judges fall on the liberal-conservative spectrum? Answer: pretty much all over the place!
My partner is really into Ruth Bader Ginsburg. How does her historical trend look relative to other current justices? Answer: The Notorious RBG exhibited the greatest change in ideological position of any current court member, going from moderate to very liberal
Can you divide all the justices into groups? Answer: Yes, I divide them into seven groups that span the ideological spectrum
What does the dataset look like? I’ll also load packages that will be useful later
library(ggplot2)
library(plyr)
library(dplyr)
library(RColorBrewer)
library(lsr)
library(car)
library(ggthemes)
library(grid)
ideology <- read.csv("C:/Users/alan/Documents/R/Scripts and projects/Kaggle/Datasets/Supreme Court Ideology/scores.csv")
dim(ideology)
## [1] 719 8
str(ideology)
## 'data.frame': 719 obs. of 8 variables:
## $ court_term : int 1937 1937 1937 1937 1937 1937 1937 1937 1937 1937 ...
## $ justice_code : int 77 75 71 74 78 67 68 76 72 79 ...
## $ justice_name : Factor w/ 45 levels "Abe Fortas","Anthony Kennedy",..: 5 7 16 17 20 21 27 28 29 37 ...
## $ posterior_mean : num -1.598 -0.371 1.574 -0.774 -2.904 ...
## $ standard_deviation: num 0.635 0.234 0.547 0.259 0.333 0.54 0.274 0.228 0.43 0.345 ...
## $ posterior_median : num -1.546 -0.367 1.541 -0.766 -2.903 ...
## $ twosigma_left : num -2.957 -0.834 0.606 -1.293 -3.56 ...
## $ twosigma_right : num -0.48 0.08 2.76 -0.282 -2.263 ...
head(ideology, n = 2)
## court_term justice_code justice_name posterior_mean standard_deviation posterior_median twosigma_left twosigma_right
## 1 1937 77 Benjamin N. Cardozo -1.598 0.635 -1.546 -2.957 -0.48
## 2 1937 75 Charles Evan Hughes -0.371 0.234 -0.367 -0.834 0.08
tail(ideology, n = 2)
## court_term justice_code justice_name posterior_mean standard_deviation posterior_median twosigma_left twosigma_right
## 718 2015 113 Sonia Sotomayor -2.507 0.512 -2.492 -3.547 -1.557
## 719 2015 110 Stephen Breyer -1.415 0.381 -1.401 -2.200 -0.716
The data are clean but incomplete for my purposes. First, I want to make a column indicating whether a given year corresponds to a Democratic or Republican presidency. My assumption is that a party is in power when a member of that party takes office and ends on the year when the other party wins office.
In other words: 2016 would be Democratic, 2017 would be Republican.
dem_years <- c(1937:1952,1961:1968, 1977:1980, 1993:2000, 2009:2015) #via Wikipedia
ideology$president <- ifelse(ideology$court_term %in% dem_years, ideology$president <- 0, ideology$president <- 1)
Next, I want to make a column indicating whether they were appointed by a Democratic or Republican president. For the sake of this analysis, I’m assuming that a judges’ first term corresponds with the rule of the party that nominated him/her.
Observers of American’s current hyper-polarized political system might be surprised that there have been presidents who nominated judges affiliated with the opposing party, Yes, you’re allowed to do that.
#number of years on the bench - might be useful later
ideology <- ideology %>%
arrange(justice_name) %>%
group_by(justice_name) %>%
mutate(n_years = n())
#sets up column for year of appointment
ideology <- ideology %>%
group_by(justice_name) %>%
mutate(appoint_year = min(court_term))
#sets up a column for party of appointment. 0 means Democrat, 1 means Republican
ideology$appoint_party <- ifelse(ideology$appoint_year %in% dem_years, "D", "R")
#need to manually input part of appointment of justices in 1937. Not going to change the
#appointment year for the sake of this analysis
manual_change <- ideology %>%
select(justice_code, justice_name, appoint_year, appoint_party) %>%
group_by(justice_name) %>%
filter(appoint_year == 1937)
manual_change_names <- unique(as.character(manual_change$justice_name))
manual_change_names #these are the justices whose appoint_year is listed as 1937
## [1] "Benjamin N. Cardozo" "Charles Evan Hughes" "George Sutherland" "Harlan F. Stone" "Hugo Black" "James Clark McReynolds" "Louis Brandeis" "Owen Josephus Roberts" "Pierce Butler" "Stanley Forman Reed"
#manually shifting justices 1,2,3,4,8,9 to "R". Note that some Democrat judges
#were nominated by Republicans. Column only reflects president who nominated
#them. Info gathered by Wikipedia
ideology <- mutate(ideology, appoint_party = replace(appoint_party, justice_code %in% c(71,72,74,75,76,77), "R"))
Time for some analysis. First, let’s try to compress a lot of historical data into one chart. The x-axis corresponds to the year, and the y-axis corresponds to the court’s mean ideology for that year. The lower the score, the more liberal the justice. For more on the scoring, click here.
The size corresponds to the mean justice deviation within that year. Finally, the color represents the party in power.
ideology %>%
group_by(court_term) %>%
summarize(court_mean = mean(posterior_mean), president = mean(president), deviation = mean(standard_deviation)) %>%
ggplot(aes(x = court_term, y = court_mean, size = deviation)) +
geom_point(aes(col = factor(president)), alpha = 0.5) +
scale_color_manual(values = c("royalblue", "red"), guide = "none") +
labs(title = "Ideology and Variance Over Time", x = "Year", y = "Ideology", size = "Deviation", col = NULL) +
theme_hc() +
theme(plot.title = element_text(hjust = 0.5))
To make things more interesting, I’m adding lines corresponding to how Democratic-appointed justices change over time vs. how Republican-appointed justices change.
republican_hist <- ideology %>%
group_by(court_term) %>%
filter(appoint_party == "R") %>%
summarize(court_mean = mean(posterior_mean), president = mean(president), deviation = mean(standard_deviation))
democrat_hist <- ideology %>%
group_by(court_term) %>%
filter(appoint_party == "D") %>%
summarize(court_mean = mean(posterior_mean), president = mean(president), deviation = mean(standard_deviation))
#same chart, but with additional lines for Republican and Democratic sentiments
ideology %>%
group_by(court_term) %>%
summarize(court_mean = mean(posterior_mean), president = mean(president), deviation = mean(standard_deviation)) %>%
ggplot(aes(x = court_term, y = court_mean, size = deviation)) +
geom_point(aes(col = factor(president)), alpha = 0.5) +
scale_color_manual(values = c("royalblue", "red"), guide = "none") +
geom_line(data = republican_hist, size = 1, col = "dark red", alpha = 0.5) +
geom_line(data = democrat_hist, size = 1, col = "dark blue", alpha = 0.5) +
theme_hc() +
theme(plot.title = element_text(hjust = 0.5)) +
labs(title = "Ideology and Variance Over Time", x = "Year", y = "Ideology", size = "Deviation", col = NULL)
The craziness of all this hints that there won’t be a clear relationship between the party that controls the White House and Supreme Court ideology. In principle, we could run a t-test comparing Democratic years vs. Republican years…
dem_years <- filter(ideology, president == 0) %>%
group_by(court_term) %>%
summarize(dem_year_mean = mean(posterior_mean), dem_year_sd = sd(standard_deviation))
rep_years <- filter(ideology, president == 1) %>%
group_by(court_term) %>%
summarize(rep_year_mean = mean(posterior_mean), rep_year_sd = sd(standard_deviation))
But since we’re running an independent t-test - in other words, we’re comparing two independent group means (mean score in Democratic years vs. mean score in Republican years), we need to run Levene’s Test in order to be satisfied that there is a homogeneity of variance between the two groups.
In other words, the t-test won’t work if the groups have significantly different levels of variance.
Is the t-test the most appropriate test to run here? Probably not. It’s good enough for now, though. What this dataset represents are two samples (Democrat years, Republican years) taken from a broader population (total Supreme Court years) whose mean and variance are unknown. Given this, running a t-test isn’t insane.
y <- c(dem_years$dem_year_mean, rep_years$rep_year_mean)
group <- as.factor(c(rep(1, length(dem_years$dem_year_mean)), rep(2, length(rep_years$rep_year_mean))))
leveneTest(y, group)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 1 17.204 8.568e-05 ***
## 77
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Crud. The fact that the test is significant means that we reject the null hypothesis that any differences in variation between the groups are due to chance. This means that the variance occurring in Democratic years is quite different from that in Republican years.
This is a potentially interesting point that I won’t address here. Sorry.
If this were a matter of life or death, we’d use Welsh’s Procedure or use a non-parametric test. Since today is Valentine’s Day and I want to spend some time with my partner (more on her later), let’s just pretend we forgot to run Levene’s Test and run the t-test anyway.
comparison_by_party <- t.test(dem_years$dem_year_mean, rep_years$rep_year_mean)
comparison_by_party
##
## Welch Two Sample t-test
##
## data: dem_years$dem_year_mean and rep_years$rep_year_mean
## t = -1.4376, df = 66.784, p-value = 0.1552
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -0.34150860 0.05554985
## sample estimates:
## mean of x mean of y
## -0.12807907 0.01490031
Nope! The p-value is over 0.05 and the confidence interval spans across 0. This implies that whatever difference in means does occur could plausibly be due to chance. The Cohen’s D statistic wasn’t that impressive, anyway.
So let’s move on!
First, let’s see what the spectrum looks like. Then let’s focus on the current (early 2017) justices.
ideology_ranked <- ideology %>%
group_by(justice_name) %>%
summarize(ind = mean(posterior_mean), first_year = first(court_term), last_year = last(court_term), party = first(appoint_party), spread = max(posterior_mean) - min(posterior_mean)) %>%
arrange(ind) %>%
mutate(hist_rank = rank(ind))
The purple line corresponds to the median justice rank, i.e., rank 22.5 / 45. Democrat-nominated justices are blue, Republican-nominated ones are red. Down is liberal, up is conservative.
ggplot(ideology_ranked, aes(x = hist_rank, y = ind, fill = party)) +
geom_bar(stat = "identity") +
scale_fill_manual(values = c("royalblue", "red")) +
geom_vline(xintercept = 22.5, color = "purple") +
theme_hc() +
labs(title = "Supreme Court Justice Ideological Spectrum", x = "Rank", y = "Ideology") +
scale_y_continuous(limits = c(-5,5)) +
theme(legend.position="none") +
theme(plot.title = element_text(hjust = 0.5))
## Warning: Stacking not well defined when ymin != 0
Interestingly, there are quite a few judges appointed by Democrats who are conservative and judges appointed by Republicans who are liberal. Here’s a list of each:
democratic_conservatives <- filter(ideology_ranked, ind > 0, party == "D")
republican_liberals <- filter(ideology_ranked, ind < 0, party == "R")
democratic_conservatives
## # A tibble: 9 x 7
## justice_name ind first_year last_year party spread hist_rank
## <fctr> <dbl> <int> <int> <chr> <dbl> <dbl>
## 1 Stanley Forman Reed 0.3784500 1937 1956 D 2.679 22
## 2 Byron White 0.4231250 1961 1992 D 1.484 23
## 3 Felix Frankfurter 0.4995417 1938 1961 D 3.170 25
## 4 Tom C. Clark 0.5036667 1949 1966 D 1.338 26
## 5 Robert H. Jackson 0.6976923 1941 1953 D 1.135 28
## 6 Harold Hitz Burton 1.0446429 1945 1958 D 0.844 31
## 7 Fred M. Vinson 1.0464286 1946 1952 D 1.134 32
## 8 Sherman Minton 1.1232500 1949 1956 D 0.648 34
## 9 James Clark McReynolds 3.4692500 1937 1940 D 0.208 44
republican_liberals
## # A tibble: 6 x 7
## justice_name ind first_year last_year party spread hist_rank
## <fctr> <dbl> <int> <int> <chr> <dbl> <dbl>
## 1 William J. Brennan -1.9340294 1956 1989 R 2.996 4
## 2 John Paul Stevens -1.8210000 1975 2009 R 3.460 5
## 3 Benjamin N. Cardozo -1.5980000 1937 1937 R 0.000 7
## 4 Earl Warren -1.2578125 1953 1968 R 1.652 13
## 5 David Souter -0.7866842 1990 2008 R 2.671 16
## 6 Harry Blackmun -0.0303600 1969 1993 R 3.710 19
Now let’s focus on current justices and their rank relative to their predecessors.
#Which correspond to current justices?
filter(ideology_ranked, last_year == 2015)
## # A tibble: 9 x 7
## justice_name ind first_year last_year party spread hist_rank
## <fctr> <dbl> <int> <int> <chr> <dbl> <dbl>
## 1 Sonia Sotomayor -2.0420000 2009 2015 D 0.958 3
## 2 Ruth Bader Ginsburg -1.5450435 1993 2015 D 2.297 9
## 3 Elena Kagan -1.5296667 2010 2015 D 0.249 10
## 4 Stephen Breyer -1.1321364 1994 2015 D 1.220 14
## 5 Anthony Kennedy 0.6972414 1987 2015 R 1.912 27
## 6 John Roberts 1.1106364 2005 2015 R 1.225 33
## 7 Samuel Alito 1.6603636 2005 2015 R 0.637 39
## 8 Antonin Scalia 2.4675333 1986 2015 R 2.049 42
## 9 Clarence Thomas 3.5234800 1991 2015 R 1.194 45
#dropping Scalia, deceased in 2016
ideology_ranked_current <- filter(ideology_ranked, last_year == 2015 & !(hist_rank == 42))
#current justices - dropped Scalia
ggplot(ideology_ranked, aes(x = hist_rank, y = ind, fill = ifelse(last_year == "2015" & !(hist_rank == 42), "purple", "grey"))) +
geom_bar(stat = "identity") +
scale_fill_manual(values = c("grey", "purple")) +
geom_vline(xintercept = 22.5, color = "purple") +
theme_hc() +
labs(fill = "Rank", title = "Supreme Court Justice Ideological Spectrum", x = "Rank", y = "Ideology") +
scale_y_continuous(limits = c(-5,5)) +
theme(legend.position="none") +
theme(plot.title = element_text(hjust = 0.5))
And finally, a graph of current justices, from most liberal to most conservative. The dashed line represents the mean ideology score of the court in 2015.
#bar graph of current justices
ideology_ranked_current$current_rank <- 1:8
ggplot(ideology_ranked_current, aes(x = reorder(justice_name, hist_rank), y = ind, fill = ifelse(party == "D", "royalblue", "red"))) +
geom_bar(stat = "identity") +
scale_fill_manual(values = c("red", "royalblue")) +
theme(legend.position="none") +
geom_hline(yintercept = mean(ideology_ranked_current$ind), linetype = "dashed") +
theme_hc() +
labs(title = "Current Individual Ideological Spectrum", x = NULL, y = "Ideology") +
theme(axis.text.x = element_text(size = 6)) +
theme(legend.position="none") +
theme(plot.title = element_text(hjust = 0.5))
Three notes before moving on. First, remember that this bar graph represents the average ideology of each justice over the course of their tenure, not a reflection of where they stand today. I’ll get to that in the next section.
Second, and on the same note, you may wonder why the average here is above zero whereas the average in the historical graph (above) is below zero. That’s because the first graph gives a snapshot of the average ideology of each year, uncontaminated by previous years. The bar chart shows the average ideology of the current justices. In other words, 2015 was a “liberal” year (because it was below 0) but the current set of justices, taken as a whole over their tenures, have been very slightly conservative.
Third, Justice Thomas is clearly very conservative. My partner passed the bar exam in California and is an avid court watcher. When I reported the results to her, she suggested that Thomas’ mega-conservatism may not be as decisive as it appears.
According to her on contentious issues, Thomas is never the decisive vote - in other words, he, Alito, and (until recently) Scalia could just be counted on to be interchangeably conservative. It’s on other opinions where Thomas takes incredibly conservative positions.
My partner may be right or may be wrong. In fairness, we were having some wine while discussing it. My partner is very much not a conservative, and in fact is a huge Ruth Bader Ginsburg (or RBG, for the uninitiated) fan. So in the next section, I’ll check out some trends and see where everyone’s favorite tiny justice stands in relation to her peers.
As you can see from this line graph, RBG has become significantly more liberal over the course of her tenure. I bolded her line to make it stand out.
ideology_current <- filter(ideology, justice_name %in% ideology_ranked_current$justice_name)
ggplot(ideology_current, aes(x = court_term, y = posterior_mean)) +
geom_line(data = subset(ideology_current, justice_code == 106), col = "red4") + #Kennedy
geom_line(data = subset(ideology_current, justice_code == 108), col = "red") + #Thomas
geom_line(data = subset(ideology_current, justice_code == 109), col = "dodgerblue2", size = 1.25) + #Ginsburg
geom_line(data = subset(ideology_current, justice_code == 110), col = "darkslateblue") + #Breyer
geom_line(data = subset(ideology_current, justice_code == 111), col = "red3") + #Roberts
geom_line(data = subset(ideology_current, justice_code == 112), col = "red2") + #Alito
geom_line(data = subset(ideology_current, justice_code == 113), col = "dodgerblue") + #Sotomayor
geom_line(data = subset(ideology_current, justice_code == 114), col = "dodgerblue4") + #Kagan
theme_hc() +
labs(title = "Current Individual Trends - RBG Bolded", x = "Year", y = "Ideology") +
scale_y_continuous(limits = c(-4,4)) +
theme(plot.title = element_text(hjust = 0.5))
In fact, it looks like Ginsburg had the most dramatic shift in any direction of any of the current justices:
ideology_ranked_current %>%
select(justice_name, spread) %>%
arrange(desc(spread))
## # A tibble: 8 x 2
## justice_name spread
## <fctr> <dbl>
## 1 Ruth Bader Ginsburg 2.297
## 2 Anthony Kennedy 1.912
## 3 John Roberts 1.225
## 4 Stephen Breyer 1.220
## 5 Clarence Thomas 1.194
## 6 Sonia Sotomayor 0.958
## 7 Samuel Alito 0.637
## 8 Elena Kagan 0.249
Silliness aside, this suggests that the recent infatuation with RBG is not merely the result of an increased popularity of social media or random chance. “Early” RBG was not the liberal that she is today.
This presents interesting classification problems. Should we consider RBG “radical”? If we look at her current (2015) ideological ranking, the claim isn’t ridiculous. But if we look at her body of work as a whole since becoming a Supreme Court Justice, the label doesn’t seem as appropriate as it would be for, say, Justice Thomas.
And speaking of clustering, let’s move on to the last piece of analysis…
Let’s do this thing. And let’s do it with with the kmeans() function.
First, here is a graph of all the justices, with the x-axis representing ideology (from more liberal to more conservative) and the y-axis representing their average deviation from the norm throughout their tenure. Blue is for Democrat-nominated justices; red is for Republic-nominated ones. The size of the dot represents the number of years the justice served.
ideology %>%
group_by(justice_name) %>%
summarize(avg = mean(posterior_mean), dev = mean(standard_deviation), num = n(), party = first(appoint_party)) %>%
ggplot(aes(x = avg, y = dev, size = num, col = party)) +
geom_point(alpha = 0.3) +
scale_color_manual(values = c("royalblue", "red")) +
theme_hc() +
scale_x_continuous(name = "Ideology", limits = c(-5,5)) +
scale_y_continuous(name = "Deviation from Peers") +
labs(title = "Individual Justices by Party", col = "Party", size = "Years Served") +
theme(plot.title = element_text(hjust = 0.5))
One vital point here: the deviation represents their deviation from the courts when they served. Why does this matter? Someone who might be a weirdo in one time period might be totally normal in another.
In other words, the y-axis represents the “maverick”ness of a judge during the time in which s/he served.
Another point I have to cop to: the size of the bubbles will only be accurate for judges that started their tenure from 1938 onwards. I don’t have the data to accurately represent the number of years served by the judges that served in 1937. As far as this dataset is concerned, they each started their tenure in that year.
Now let’s get clustering. Following a standard rough rule of thumb, the number of clusters should be (1) an odd number, and (2) approximately the square root of the number of observations. Since there are 45 judges, let’s go with seven. I think this ends up working out nicely.
#clustering without president or appoint_party
ideology_cluster <- ideology %>%
group_by(justice_name) %>%
summarize(avg = mean(posterior_mean), dev = mean(standard_deviation), num = n(), party = first(appoint_party))
vec.posterior_mean <- scale(as.vector(ideology_cluster$avg))
vec.standard_deviation <- scale(as.vector(ideology_cluster$dev))
vec.n_years <- scale(as.vector(ideology_cluster$num))
cluster_ideology <- as.data.frame(cbind(vec.posterior_mean, vec.standard_deviation))
set.seed(1)
ideology_7_clusters <- kmeans(cluster_ideology, centers = 7, nstart = 15)
ideology_cluster$seven_clusters <- as.factor(ideology_7_clusters$cluster)
#The initial plot needs work, so I'm not printing it
#ggplot(ideology_cluster, aes(x = avg, y = dev, size = num, col = #seven_clusters)) +
# geom_point(alpha = 0.6) +
# scale_color_manual(values = c("deepskyblue4", "orchid4", "red3", #"deepskyblue1", "red", "royalblue1","firebrick4")) +
# theme_hc()
#renaming clusters
levels(ideology_cluster$seven_clusters) <- c("Liberal Compromisor", "Placid Moderate", "Conservative Agitator", "Liberal Renegade", "Conservative Renegade", "Liberal Agitator", "Conservative Compromisor")
ggplot(ideology_cluster, aes(x = avg, y = dev, size = num, col = seven_clusters)) +
geom_point(alpha = 0.6) +
scale_color_manual(values = c("deepskyblue4", "orchid4", "red3", "deepskyblue1", "red", "royalblue1","firebrick4")) +
theme_hc() +
scale_x_continuous(name = "Ideology", limits = c(-5,5)) +
scale_y_continuous(name = "Deviation from Peers") +
scale_size_continuous(guide = FALSE) +
labs(title = "Individual Justices by Group", col = NULL, size = "Years Served") +
theme(plot.title = element_text(hjust = 0.5))
Based on the algorithm, I think it makes sense to think of the justices as falling along the following spectrum:
As expected, there are far more compromisors and moderates than there are renegades and agitators. Because the scores represent the averages for each justice, the questions regarding classification that I mentioned earlier once again become relevant.
For instance, how is Ginsburg classified here?
#Where is Ginsburg?
filter(ideology_cluster, justice_name == "Ruth Bader Ginsburg")
## # A tibble: 1 x 6
## justice_name avg dev num party seven_clusters
## <fctr> <dbl> <dbl> <int> <chr> <fctr>
## 1 Ruth Bader Ginsburg -1.545043 0.3026087 23 D Liberal Compromisor
Here she’s a liberal compromisor. But that doesn’t seem to do justice (ha) to her recent move toward more extreme liberalism.
Incidentally, if you’re a very liberal-leaning person (like my partner), you may want to figure out who the heck is that weirdo in the upper-left corner.
filter(ideology_cluster, avg < -3)
## # A tibble: 1 x 6
## justice_name avg dev num party seven_clusters
## <fctr> <dbl> <dbl> <int> <chr> <fctr>
## 1 William O. Douglas -4.648921 0.6046579 38 D Liberal Renegade
That’s William O. Douglas, who is apparently more to the left than Karl Marx, and just as much of a rabble-rouser. Crucially, this isn’t some random guy who sat on the court for two months and died. He has apparently sat on the court for thirty-eight years.
There is, of course, a better than epsilon chance that there’s more to the story than that, but for now I’ll leave you with the full table of justices, where they stand, and the category to which they were assigned.
Thanks for reading! This was a fun mini-project.
print(ideology_cluster[,1:5], n = 45)
## # A tibble: 45 x 5
## justice_name avg dev num party
## <fctr> <dbl> <dbl> <int> <chr>
## 1 Abe Fortas -1.43500000 0.2660000 4 D
## 2 Anthony Kennedy 0.69724138 0.2228276 29 R
## 3 Antonin Scalia 2.46753333 0.3630333 30 R
## 4 Arthur Goldberg -1.05366667 0.2323333 3 D
## 5 Benjamin N. Cardozo -1.59800000 0.6350000 1 R
## 6 Byron White 0.42312500 0.1770625 32 D
## 7 Charles Evan Hughes 0.17925000 0.2140000 4 R
## 8 Charles Evans Whittaker 1.23533333 0.2523333 6 R
## 9 Clarence Thomas 3.52348000 0.5122000 25 R
## 10 David Souter -0.78668421 0.2423684 19 R
## 11 Earl Warren -1.25781250 0.2298125 16 R
## 12 Elena Kagan -1.52966667 0.3338333 6 D
## 13 Felix Frankfurter 0.49954167 0.2170417 24 D
## 14 Frank Murphy -1.58740000 0.2754000 10 D
## 15 Fred M. Vinson 1.04642857 0.2400000 7 D
## 16 George Sutherland 1.57400000 0.5470000 1 R
## 17 Harlan F. Stone 0.01366667 0.2071111 9 R
## 18 Harold Hitz Burton 1.04464286 0.2347143 14 D
## 19 Harry Blackmun -0.03036000 0.2092400 25 R
## 20 Hugo Black -1.75867647 0.2775294 34 D
## 21 James Clark McReynolds 3.46925000 0.6005000 4 D
## 22 James F. Byrnes -0.19000000 0.2340000 1 D
## 23 John Marshall Harlan II 1.62452941 0.2618235 17 R
## 24 John Paul Stevens -1.82100000 0.3116857 35 R
## 25 John Roberts 1.11063636 0.2673636 11 R
## 26 Lewis Franklin Powell Jr. 0.94206250 0.1916250 16 R
## 27 Louis Brandeis -0.61750000 0.2930000 2 D
## 28 Owen Josephus Roberts 1.53337500 0.2936250 8 R
## 29 Pierce Butler 2.22050000 0.4325000 2 R
## 30 Potter Stewart 0.43752174 0.1692609 23 R
## 31 Robert H. Jackson 0.69769231 0.2238462 13 D
## 32 Ruth Bader Ginsburg -1.54504348 0.3026087 23 D
## 33 Samuel Alito 1.66036364 0.3208182 11 R
## 34 Sandra Day O'Connor 0.98084000 0.2259600 25 R
## 35 Sherman Minton 1.12325000 0.2735000 8 D
## 36 Sonia Sotomayor -2.04200000 0.3900000 7 D
## 37 Stanley Forman Reed 0.37845000 0.2276000 20 D
## 38 Stephen Breyer -1.13213636 0.2596364 22 D
## 39 Thurgood Marshall -2.81266667 0.3744583 24 D
## 40 Tom C. Clark 0.50366667 0.1953889 18 D
## 41 Warren E. Burger 1.86064706 0.2654118 17 R
## 42 Wiley Blount Rutledge -1.41542857 0.2658571 7 D
## 43 William J. Brennan -1.93402941 0.2800294 34 R
## 44 William O. Douglas -4.64892105 0.6046579 38 D
## 45 William Rehnquist 2.94802941 0.3670294 34 R
print(ideology_cluster[,c(1,6)], n = 45)
## # A tibble: 45 x 2
## justice_name seven_clusters
## <fctr> <fctr>
## 1 Abe Fortas Liberal Compromisor
## 2 Anthony Kennedy Placid Moderate
## 3 Antonin Scalia Conservative Agitator
## 4 Arthur Goldberg Liberal Compromisor
## 5 Benjamin N. Cardozo Liberal Renegade
## 6 Byron White Placid Moderate
## 7 Charles Evan Hughes Placid Moderate
## 8 Charles Evans Whittaker Conservative Compromisor
## 9 Clarence Thomas Conservative Renegade
## 10 David Souter Liberal Compromisor
## 11 Earl Warren Liberal Compromisor
## 12 Elena Kagan Liberal Agitator
## 13 Felix Frankfurter Placid Moderate
## 14 Frank Murphy Liberal Compromisor
## 15 Fred M. Vinson Conservative Compromisor
## 16 George Sutherland Conservative Renegade
## 17 Harlan F. Stone Placid Moderate
## 18 Harold Hitz Burton Conservative Compromisor
## 19 Harry Blackmun Placid Moderate
## 20 Hugo Black Liberal Compromisor
## 21 James Clark McReynolds Conservative Renegade
## 22 James F. Byrnes Placid Moderate
## 23 John Marshall Harlan II Conservative Compromisor
## 24 John Paul Stevens Liberal Agitator
## 25 John Roberts Conservative Compromisor
## 26 Lewis Franklin Powell Jr. Placid Moderate
## 27 Louis Brandeis Liberal Compromisor
## 28 Owen Josephus Roberts Conservative Compromisor
## 29 Pierce Butler Conservative Agitator
## 30 Potter Stewart Placid Moderate
## 31 Robert H. Jackson Placid Moderate
## 32 Ruth Bader Ginsburg Liberal Compromisor
## 33 Samuel Alito Conservative Compromisor
## 34 Sandra Day O'Connor Placid Moderate
## 35 Sherman Minton Conservative Compromisor
## 36 Sonia Sotomayor Liberal Agitator
## 37 Stanley Forman Reed Placid Moderate
## 38 Stephen Breyer Liberal Compromisor
## 39 Thurgood Marshall Liberal Agitator
## 40 Tom C. Clark Placid Moderate
## 41 Warren E. Burger Conservative Compromisor
## 42 Wiley Blount Rutledge Liberal Compromisor
## 43 William J. Brennan Liberal Compromisor
## 44 William O. Douglas Liberal Renegade
## 45 William Rehnquist Conservative Agitator