-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathREADME.Rmd
executable file
·363 lines (268 loc) · 21.5 KB
/
README.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
---
title: "Reproduction files for the chapter 'Discourse Network Analysis'"
output: rmarkdown::github_document
<!-- output: html_document -->
bibliography: handbook_dna_lit.bib
header-includes:
- \usepackage{caption}
fig_caption: true
---
# Abstract
This [R Markdown](http://rmarkdown.rstudio.com) Notebook is part of the chapter 'Discourse Network Anylsis' in *The Routledge Handbook of Foreign Policy Methods* (edited by Patrick A. Mello & Falk Ostermann). It gives readers a more detailed discussion of DNA as a the method, the coding-scheme, allows them access to the dataset and the script used for analysis, and shows further graphs that are not used in the chapter, due to page-limitation.
# Data, Coding-Scheme and Coding
As discussed in the chapter, DNA proceeds in two stages and uses a combination of qualitative content analysis and social network analysis for grasping the statements of actors and relating them to each other [@Leifeld2013, 169]. A series of 13 debates in the British House of Commons from 16 April 2002 trough 18 March 2003 provide the data for analysing the reasons for the United Kingdom's participation in the Iraq War 2003. The dataset is available as an annotated DNA-file [here](https://github.com/franzeder/dna-example/blob/main/dna_example_UKIraqWar2003.dna).
In the first stage, a category-based coding-scheme is needed, to annotate this dataset. We can either deductively or inductively [@Bauer2000; @Schreier2014] develop such a scheme or combine both approaches. Deductively generated codes are developed top-down, inspired by theoretical assumptions researchers seek to verify. In contrast to that, inductively generated codes are developed during the process of coding itself. Combining both approaches is a common and promising procedure because it allows scholars to do both test their theoretical assumptions and ensure at the same time, that no categories are overlooked.
For this case study I combined both approaches. Following the secondary literature (deductive approach) and a close reading of the debates (inductive approach), I defined 22 claims and grouped these claims into three different storylines that dominated the overall discourse. These storyliens are (1) the nature of the Iraqi threat, (2) the policies to address these threats, and (3) the overall goals of the UK’s policy towards Iraq and the Middle East. In the first **threat storyline**, decision-makers feverishly argued whether Iraq and the regime of Saddam Hussein posed and imminent threat to the UK [@Bluth2004, 871], an overall threat to the world [@Hoggett2005, 423], or only a threat to the Middle East.
Furthermore, the actors disagreed whether this threat emanated from the possible possession and use of weapons of mass destruction (WMD), Iraq’s supposed link to international terrorism, or its ballistic missile programme [@Bluth2004, 884; @Kennedy-Pipe2007, 211]. Another claim that MPs raised in their contribution was the humanitarian issue [@Hoggett2005, 418; @Kennedy-Pipe2007, 211] and the threat of Saddam Hussein to his own people [@Bluth2004, 884]. Finally, speakers warned of the threat to the international order if Iraq did not obey to the United Nations (UN) Security Council resolutions [@Bluth2004, 871], and feared the consequence of unilateralism, should the United States decide to go alone [@Bluth2004, 875].
Based on this threat storyline, MPs introduced a second **policy-means storyline**, presenting their policy preference to tackle these threats. In this storyline they either proposed regime change, the use of force, containment and deterrence, arms inspections, disarmament, sanctions, the threat of force, diplomacy or the involvement of the United Nations (Security Council), or a combination of these claims, to address the challenges.
Finally, decision-makers presented in the **policy-goals storyline** the overall aims the UK sought to achieve. That is to uphold a close alliance with the United States [@Doig2005, 369; Kennedy-Pipe2007, 209], to reintegrate Iraq into the international community, to democratize the country, and to stabilize the whole region.
The final coding scheme looks as follows:
#### Threat Storyline
- 01 - imminent (i.e., Iraq/Hussein poses an imminent threat to the UK)
- 02 - overall (i.e., Iraq/Hussen poses a threat to the world)
- 03 - region (i.e., Iraq/Hussein poses a threat to the Middle East)
- 04 - WMD (i.e., Iraq/Hussein poses a threat because of weapons of mass destruction)
- 05 - terrorism (i.e., Iraq/Hussein poses a threat because of links to (transnational) terrorism)
- 06 - missiles (i.e., Iraq/Hussein poses a threat because of ballistic missiles)
- 07 - humanitarian (i.e., Iraq/Hussein poses a humanitarian threat to its people)
- 08 - international order (i.e., Iraq/Hussein poses a threat to the international order)
- 09 - unilateralism (i.e., Iraq/Hussein could further unilateral tendencies in the U.S.)
#### Policy-Means Storyline
- 21 - regime change (i.e., the problem can only be solved by toppling S. Hussein)
- 22 - war (i.e., the problem can only be solved by going to war with Iraq)
- 23 - containment/deterrence (i.e., containment and/or deterrence are useful to solve the problem)
- 24 - inspections (i.e., inspections are useful to solve the problem)
- 25 - disarmament (i.e., disarmament is useful to solve the problem)
- 26 - sanctions (i.e., sanctions are useful to solve the problem)
- 27 - all options (i.e., UK must consider all possible options (also war))
- 28 - negotiations (i.e., negotiations can solve the problem)
- 29 - United Nations (i.e., the United Nations can help to solve the problem)
#### Policy-Goals Storyline
- 31 - alliance (i.e., UK seeks to strengthen the international alliance)
- 32 - reintegration (i.e., UK seeks to reintegrate Iraq into the international community)
- 33 - democracy (i.e., UK seeks to foster democracy in Iraq)
- 34 - stabilization (i.e., UK seeks to stabilize the Middle East)
I then applied this coding scheme to code statements (i.e., claims) in the debates. Statements are comprised of four variables [@Leifeld2018, 304–305]: actors, organizations, concepts, agreement, and time stamps. An actor is any person or entity that speaks in a debate and that belongs to a certain organization. Concepts are political claims (henceforth claims) that either support or oppose policies, policy instruments, or certain actions in a policy process (see also @Lapesa2020, 144). Agreement refers to the extent of agreement or opposition of an actor towards a claim This variable can either be dichotomous (i.e., agree – 1 or disagree – 0) or lie within a certain range (e.g., from -5 to +5). Time stamp is a temporal variable that specifies the date and time of a statement and allows the construction of dynamic networks.
I will demonstrate the application of the coding-scheme with the following two claims made by Prime Minister Tony Blair in a debate on 18^th^ March 2003.
> "Iraq continues to deny that it has any weapons of mass destruction, although no serious intelligence service anywhere in the world believes it." (Tony Blair, 18^th^ March 2003, c760)
In this passage, Blair argues that Iraq is definitely in possession of weapons of mass destruction. He refers to the threat story-line and agrees to the claim "04 - WMD". Hence, I coded this statement as follows: "T Blair" (**actor**), "Cabinet" (**organization**), "04 - WMD" (**concept**), "yes" (**agreement**), "18.05.2003" (**time stamp**).
> "All we are asking for in the second resolution is the clear ultimatum that if Saddam continues to fail to co-operate, force should be used." (Tony Blair, 18^th^ March 2003, c767)
In this second example from the same debate, Prime Minister Blair calls for war as means to tackle the threat posed by Saddam Hussein. Hence, I coded this statement as follows: "T Blair" (**actor**), "Cabinet" (**organization**), "22 - war" (**concept**), "yes" (**agreement**), "18.05.2003" (**time stamp**).
In total, I used the 22 claims to code 1,166 statements of 161 persons (i.e., Members of Parliament), from nine organizations (i.e., parties in the House of Commons and the Cabinet).
# Network Analysis
After coding the dataset, we then transform the generated data (i.e., the sum of coded statements) into a two-mode network (a bipartite graph), also known as an affiliation network of actors (or organizations) and claims (for the mathematical details of this transformation, see @Leifeld2019), that allows us to display the content, dynamic and drivers of political debates. Chapter 7 (pages 59-79) of the [*Discourse Network Analyzer Manual*](https://github.com/leifeld/dna/releases/download/v2.0-beta.24/dna-manual.pdf) discusses this export with its many options in detail.
In the next paragraphs I will focus on the `R-Code` and show how to import, analyze and plot the coded-data in this framework (see also Chapter 8 (pages 80-119) of the [*Discourse Network Analyzer Manual*](https://github.com/leifeld/dna/releases/download/v2.0-beta.24/dna-manual.pdf)).
## Installing and configuring R and all required packages
Users first have to install the latest version of **R** -- "a free software environment for statistical computing and graphics" -- from [The Comprehensive R Archive Network](https://cran.r-project.org/). Users should then install [**RSTudio Desktop**](https://www.rstudio.com/products/rstudio/download/) -- "an integrated development environment (IDE) for R" -- that makes programming in R easier.
After installing R and RStudio, users have to install all required packages (i.e., extensions that increase the functionality of R).
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
```{r packages, eval=FALSE}
install.packages("rJava")
# package needed for installing R packages from Github
install.packages("remotes")
# installing rDNA package
remotes::install_github("leifeld/dna/rDNA@*release",
INSTALL_opts = "--no-multiarch")
# installing ggnet2 package for plotting networks
devtools::install_github("briatte/ggnet")
# package for loading R packages and installing them, if they are not already installed
install.packages("pacman")
```
In the next steps, users have to set the path for the working directory and load the required packages.
```{r working-directory, cache=TRUE, message=FALSE}
# set the working directory in RStudio to the current file location
setwd(dirname(rstudioapi::getActiveDocumentContext()$path))
# loading the "pacman" package for loading (p_load) packages and installing them,
## if they are not already installed
require(pacman)
# loading required packages for using RStudio to analyze DNA
p_load(rDNA, statnet, GGally, ggnet, network, sna, ggplot2, dplyr)
```
Now, users are able to connect to DNA via R and import the dataset ("dna_example_UKIraqWar2003.dna"). The various node attributes are then saved in different objects (`organization`, `person`, `concept`).
```{r dna-init, cache=TRUE, message=FALSE}
# loading dna
dna_init()
# connection to DNA-file
conn <- dna_connection("dna_example_UKIraqWar2003.dna", verbose = FALSE)
# read and save node attributes
organization <- dna_getAttributes(conn, variable = "organization")
person <- dna_getAttributes(conn, variable = "person")
concept <- dna_getAttributes(conn, variable = "concept")
```
## Plotting Affiliation Networks
Before plotting the affiliation networks, it makes sense to have a look at the discursive content of the debate by using the `dna_barplot` command and displaying the overall agreement and disagreement of actors towards claims, grouped by year.
```{r barplot-concepts2002, cache=TRUE, message=FALSE, echo=c(6:100)}
dna_init()
conn <- dna_connection("dna_example_UKIraqWar2003.dna", verbose = FALSE)
organization <- dna_getAttributes(conn, variable = "organization")
person <- dna_getAttributes(conn, variable = "person")
concept <- dna_getAttributes(conn, variable = "concept")
concepts_2002 <- dna_barplot(conn,
of = "concept", fontSize = 10, # plot all claims
stop.date = "01.01.2003") # plot claims through 31 December 2002
concepts_2002
```
As the barplot of 2003 clearly shows, **22 - war** becomes a contested claim but actors agree, that Iraq/Saddam Hussein poses a **07 - humanitarian** threat.
```{r barplot-concepts2003, cache=TRUE, message=FALSE, echo=c(6:100)}
dna_init()
conn <- dna_connection("dna_example_UKIraqWar2003.dna", verbose = FALSE)
organization <- dna_getAttributes(conn, variable = "organization")
person <- dna_getAttributes(conn, variable = "person")
concept <- dna_getAttributes(conn, variable = "concept")
concepts_2003 <- dna_barplot(conn,
of = "concept", fontSize = 10, # plott all claims
start.date = "01.01.2003") # plot claims from 1 January 2003 onwards
concepts_2003
```
In the next step, I display the affiliation network of the most active speakers (those with more than 9 mentions of a claim) towards four central claims in the debate (i.e., **01 - imminent**, **22 - war**, **23 - containment/deterrence**, **24 - inspections**). By it doing so, I able to show which actors referred to what concepts in the overall debate.
```{r affiliation network, out.width="150%", cache=TRUE, message=FALSE, echo=c(6:200)}
dna_init()
conn <- dna_connection("dna_example_UKIraqWar2003.dna", verbose = FALSE)
organization <- dna_getAttributes(conn, variable = "organization")
person <- dna_getAttributes(conn, variable = "person")
concept <- dna_getAttributes(conn, variable = "concept")
selection_person <- person %>% filter(frequency >9) # select actors with more than 9 mentions of a claim
selection_person$value # show this selection
exclusion_person <- person %>% filter(frequency < 10) # select actors with less than 10 mentions of a claim
selection_concept <- c(1, 11, 12, 13) # selecting the concepts '01 - imminent', '22 - war', '23 - containment/deterrence', '24 - inspections'
concept$value[selection_concept] # show claims
exclusion_concept <- concept$value[-selection_concept] # create new object with all claim, except the selected claims
# Affiliation network
## person x concept, substract-method and normalization, including duplicates
affil <- dna_network(conn,
networkType = "twomode", # affiliation network
statementType = "DNA Statement",
variable1 = "person",
variable2 = "concept",
qualifier = "agreement",
qualifierAggregation = "subtract",
normalization = "prominence",
duplicates = "document",
verbose = TRUE,
excludeValues = list(person = exclusion_person$value, # exclude certain actors and claims
concept = exclusion_concept))
x <- t(affil) # transpose matrix
y <- selection_person %>% filter(value %in% colnames(x)) # add names of selected actors to matrix
nw <- network(affil, bipartite = TRUE) # convert matrix to a nework-object
colors <- as.character(t(affil))
colors <- colors[colors != "0"]
colors[colors < 0] <- "gray85" # add gray color for negative values
colors[colors != "gray85"] <- "black" # add black color for positive values
set.edge.attribute(nw, "color", colors) # add edge attributes colors
plot(nw,
edge.col = get.edge.attribute(nw, "color"),
vertex.col = c(y$color,
rep("white", ncol(affil))),
displaylabels = TRUE,
label.cex = 0.5,
)
```
## Plotting Congruence Networks
After plotting the affiliation network, we can now have a closer look at the congruence network, that displays the links of actors based on their shared use of claims. To highlight the dynamic character of the debate, we group these congruence networks in two periods, that is the years **2002** and **2003**.
```{r congruence network 2002, cache=TRUE, warning=FALSE, message=FALSE, echo=c(6:200)}
dna_init()
conn <- dna_connection("dna_example_UKIraqWar2003.dna", verbose = FALSE)
organization <- dna_getAttributes(conn, variable = "organization")
person <- dna_getAttributes(conn, variable = "person")
concept <- dna_getAttributes(conn, variable = "concept")
set.seed(19030023)
selection_concept <- c(1, 11, 12, 13)
concept$value[selection_concept]
exclusion_concept <- concept$value[-selection_concept]
selection_person <- person %>% filter(frequency >5)
selection_person$value
exclusion_person <- person %>% filter(frequency < 6)
congruence_2002 <- dna_network(conn,
networkType = "onemode", # congruence network
statementType = "DNA Statement",
variable1 = "person", # actors
variable2 = "concept", # grouped via shared claims
qualifier = "agreement",
qualifierAggregation = "congruence",
stop.date = "01.01.2003", # until 1 January 2003 (i.e., all claims from 2002)
duplicates = "week", # ignore duplicates within a week
excludeValues = list(person = exclusion_person$value, # exclude actors with less than 9 mentions of claims
concept = exclusion_concept)) # exclude concepts, we are not interested in
nw_2002 <- network(congruence_2002)
x <- t(congruence_2002)
y <- selection_person %>% filter(value %in% row.names(x))
plot(nw_2002,
edge.lwd = congruence_2002,
displaylabels = TRUE,
label.cex = 0.5,
usearrows = FALSE,
edge.col = "gray85",
vertex.col = y$color,
label = y$value
)
```
As the both plots clearly show, the majority of actors stuck together very closely in 2002, by referring to similar claims and united in opposition to war as a policy option. Furthermore, already in 2002, PM Blair (accompanied by another cabinet member and Tory MPs) deviated from this anti-war discourse. In 2003, however, the PM and his cabinet (high edge betweenness of PM Blair and Foreign Secretary Straw) were successful in convincing a majority of MPs that war is a necessary evil. Hence, the discourse in 2003 is characterized by **two opposing discourse coalitions** – one coalition in favor and one against war as viable option.
```{r congruence network 2003, cache=TRUE, warning=FALSE, message=FALSE, echo=c(6:200)}
dna_init()
conn <- dna_connection("dna_example_UKIraqWar2003.dna", verbose = FALSE)
organization <- dna_getAttributes(conn, variable = "organization")
person <- dna_getAttributes(conn, variable = "person")
concept <- dna_getAttributes(conn, variable = "concept")
congruence_2003 <- dna_network(conn,
networkType = "onemode",
statementType = "DNA Statement",
variable1 = "person",
variable2 = "concept",
qualifier = "agreement",
qualifierAggregation = "congruence",
start.date = "01.01.2003",
duplicates = "week",
excludeValues = list(person = exclusion_person$value,
concept = exclusion_concept))
nw_2003 <- network(congruence_2003)
x <- t(congruence_2003)
y <- selection_person %>% filter(value %in% row.names(x))
plot(nw_2003,
displaylabels = TRUE,
label.cex = 0.5,
usearrows = FALSE,
edge.col = "gray85",
vertex.col = y$color,
label = y$value
)
```
## Cluster Analysis
In the final step, we **cluster organizations** (i.e., parties) according to their overall positions towards the four central claims mentioned before and display these organizations as distinctive branches by using the `dna_cluster` command. Organizations of the same branch or subbranch are ideologically closer than organizations of different branches.
```{r cluster analysis 2002, cache=TRUE, warning=FALSE, message=FALSE, echo=c(6:200)}
dna_init()
conn <- dna_connection("dna_example_UKIraqWar2003.dna", verbose = FALSE)
organization <- dna_getAttributes(conn, variable = "organization")
person <- dna_getAttributes(conn, variable = "person")
concept <- dna_getAttributes(conn, variable = "concept")
selection <- c(1, 11, 12, 13)
concept$value[selection]
exclusion <- concept$value[-selection]
clust_2002 <- dna_cluster(conn,
stop.date = "01.01.2003",
clust.method = "edge_betweenness",
duplicates = "document",
excludeValues = list(concept = exclusion))
dna_plotDendro(clust_2002,
show_legend = FALSE)
```
The interesting point here is, that the Cabinet’s final discourse in the debate in 2003 resembled the discourse of the Conservative party (i.e., the major opposition). In contrast, Labour’s discourse (i.e., the discourse of PM’s own party) shared more of the claims the Liberal Democrats (i.e., the major opposition to war) applied in their storylines.
```{r cluster analysis 2003, cache=TRUE, warning=FALSE, message=FALSE, echo=c(6:200)}
dna_init()
conn <- dna_connection("dna_example_UKIraqWar2003.dna", verbose = FALSE)
organization <- dna_getAttributes(conn, variable = "organization")
person <- dna_getAttributes(conn, variable = "person")
concept <- dna_getAttributes(conn, variable = "concept")
selection <- c(1, 11, 12, 13)
concept$value[selection]
exclusion <- concept$value[-selection]
clust_2003 <- dna_cluster(conn,
start.date = "01.01.2003",
clust.method = "edge_betweenness",
duplicates = "document",
excludeValues = list(concept = exclusion))
dna_plotDendro(clust_2003,
show_legend = FALSE)
```
# Bibliography