Methods, ethics, and safety
Date | Presenters | Method |
---|---|---|
3 July: | Alexander V., Luis G., Oscar O., Mia C. | descriptive inference |
10 July: | Lina S., Stephen W., Philomena B., Aarón Z. | ethnography |
17 July: | Corinna Z., Eva M., and Rostislav N. | process tracing |
24 July: | Sebastian K., Thomas R., Emilia Z., Florian P. | quant. text analysis |
24 July: | Lorenz F., Daniel B., Medina H. | quant. text analysis |
Date | Presenters | Method |
---|---|---|
15 May: | Idil M., Zeynep P., Liesl W., Selin K., Chiara W. | logistic regression |
22 May: | Gabriel W., Lina M., Florian S., Julian B. | discourse analysis |
29 May: | NO CLASS MEETING |
Date | Presenters | Method |
---|---|---|
5 June: | Rasmus B., Andre D., Josefine E., Ioanna L., Santiago C. | surveys |
12 June: | Omar B., Lela E., Niclas W. | network analysis |
19 June: | NO CLASS MEETING | |
26 June: | Colombe I., Konstantin S., Jakob W., Veronika L. | ethnography |
26 June: | Maksim K., Felix S., Jon L.D., Damir S., Korbinian M. | case study |
four criteria: (i) construct validity, (ii) multi-dimensionality, (iii) measurement precision and (iv) coverage
Take the survey at https://forms.gle/cfFFMvuHiCWJG4nF7
import { liveGoogleSheet } from "@jimjamslam/live-google-sheet";
import { aq, op } from "@uwdata/arquero";
// UPDATE THE LINK FOR A NEW POLL
surveyResults = liveGoogleSheet(
"https://docs.google.com/spreadsheets/d/e/" +
"2PACX-1vT0X8SmKdeG_DPPZrpET7H9Xu7AQ2tq3mi3nL33OFPMuouMDV3hok64Pt_Rj3DzrQrpZ-UrEFKCR83T/" +
"pub?gid=858869001&single=true&output=csv",
10000, 1, 8); // adjust the last number to select all relevant columns
respondentCount = surveyResults.length;
engageCounts = aq.from(surveyResults)
.select("engage")
.groupby("engage")
.count()
.derive({ measure: d => "" })
// Calculate the maximum count from your dataset
engage_maxCountRE = Math.max(...engageCounts.objects().map(d => d.count));
plot_engage = Plot.plot({
marks: [
Plot.barY(engageCounts, {
x: "engage",
y: "count",
fill: "engage",
stroke: "black",
strokeWidth: 1
}),
Plot.ruleY([respondentCount], { stroke: "#ffffff99" })
],
color: {
domain: [
"Strongly disagree",
"Disagree",
"Neutral",
"Agree",
"Strongly agree"
],
range: [
"red",
"pink",
"lightgrey",
"lightgreen",
"forestgreen"
]
},
marginBottom: 180,
x: { label: "", tickSize: 2, tickRotate: -45,
domain: ["Strongly disagree", "Disagree", "Neutral", "Agree", "Strongly agree"]
},
y: {
label: "",
tickSize: 10,
tickFormat: d => d,
tickValues: Array.from(
new Set(engageCounts.objects().map(d => d.count))
).sort((a, b) => a - b),
domain: [0, engage_maxCountRE]
},
facet: { data: engageCounts, x: "measure", label: "" },
marginLeft: 140,
style: {
width: 1350,
height: 500,
fontSize: 30,
}
});
covert research of FR is unethical
covertCounts = aq.from(surveyResults)
.select("covert")
.groupby("covert")
.count()
.derive({ measure: d => "" })
// Calculate the maximum count from your dataset
covert_maxCountRE = Math.max(...covertCounts.objects().map(d => d.count));
plot_covert = Plot.plot({
marks: [
Plot.barY(covertCounts, {
x: "covert",
y: "count",
fill: "covert",
stroke: "black",
strokeWidth: 1
}),
Plot.ruleY([respondentCount], { stroke: "#ffffff99" })
],
color: {
domain: [
"Strongly disagree",
"Disagree",
"Neutral",
"Agree",
"Strongly agree"
],
range: [
"red",
"pink",
"lightgrey",
"lightgreen",
"forestgreen"
]
},
marginBottom: 180,
x: { label: "", tickSize: 2, tickRotate: -45,
domain: ["Strongly disagree", "Disagree", "Neutral", "Agree", "Strongly agree"]
},
y: {
label: "",
tickSize: 10,
tickFormat: d => d,
tickValues: Array.from(
new Set(covertCounts.objects().map(d => d.count))
).sort((a, b) => a - b),
domain: [0, covert_maxCountRE]
},
facet: { data: covertCounts, x: "measure", label: "" },
marginLeft: 140,
style: {
width: 1350,
height: 500,
fontSize: 30,
}
});
findings should not justify violence
publish_violentCounts = aq.from(surveyResults)
.select("publish_violent")
.groupby("publish_violent")
.count()
.derive({ measure: d => "" })
// Calculate the maximum count from your dataset
publish_violent_maxCountRE = Math.max(...publish_violentCounts.objects().map(d => d.count));
plot_publish_violent = Plot.plot({
marks: [
Plot.barY(publish_violentCounts, {
x: "publish_violent",
y: "count",
fill: "publish_violent",
stroke: "black",
strokeWidth: 1
}),
Plot.ruleY([respondentCount], { stroke: "#ffffff99" })
],
color: {
domain: [
"Strongly disagree",
"Disagree",
"Neutral",
"Agree",
"Strongly agree"
],
range: [
"red",
"pink",
"lightgrey",
"lightgreen",
"forestgreen"
]
},
marginBottom: 180,
x: { label: "", tickSize: 2, tickRotate: -45,
domain: ["Strongly disagree", "Disagree", "Neutral", "Agree", "Strongly agree"]
},
y: {
label: "",
tickSize: 10,
tickFormat: d => d,
tickValues: Array.from(
new Set(publish_violentCounts.objects().map(d => d.count))
).sort((a, b) => a - b),
domain: [0, publish_violent_maxCountRE]
},
facet: { data: publish_violentCounts, x: "measure", label: "" },
marginLeft: 140,
style: {
width: 1350,
height: 500,
fontSize: 30,
}
});
researchers should report crimes
crimeCounts = aq.from(surveyResults)
.select("crime")
.groupby("crime")
.count()
.derive({ measure: d => "" })
// Calculate the maximum count from your dataset
crime_maxCountRE = Math.max(...crimeCounts.objects().map(d => d.count));
plot_crime = Plot.plot({
marks: [
Plot.barY(crimeCounts, {
x: "crime",
y: "count",
fill: "crime",
stroke: "black",
strokeWidth: 1
}),
Plot.ruleY([respondentCount], { stroke: "#ffffff99" })
],
color: {
domain: [
"Strongly disagree",
"Disagree",
"Neutral",
"Agree",
"Strongly agree"
],
range: [
"red",
"pink",
"lightgrey",
"lightgreen",
"forestgreen"
]
},
marginBottom: 180,
x: { label: "", tickSize: 2, tickRotate: -45,
domain: ["Strongly disagree", "Disagree", "Neutral", "Agree", "Strongly agree"]
},
y: {
label: "",
tickSize: 10,
tickFormat: d => d,
tickValues: Array.from(
new Set(crimeCounts.objects().map(d => d.count))
).sort((a, b) => a - b),
domain: [0, crime_maxCountRE]
},
facet: { data: crimeCounts, x: "measure", label: "" },
marginLeft: 140,
style: {
width: 1350,
height: 500,
fontSize: 30,
}
});
research should not publish FR content
fr_contentCounts = aq.from(surveyResults)
.select("fr_content")
.groupby("fr_content")
.count()
.derive({ measure: d => "" })
// Calculate the maximum count from your dataset
fr_content_maxCountRE = Math.max(...fr_contentCounts.objects().map(d => d.count));
plot_fr_content = Plot.plot({
marks: [
Plot.barY(fr_contentCounts, {
x: "fr_content",
y: "count",
fill: "fr_content",
stroke: "black",
strokeWidth: 1
}),
Plot.ruleY([respondentCount], { stroke: "#ffffff99" })
],
color: {
domain: [
"Strongly disagree",
"Disagree",
"Neutral",
"Agree",
"Strongly agree"
],
range: [
"red",
"pink",
"lightgrey",
"lightgreen",
"forestgreen"
]
},
marginBottom: 180,
x: { label: "", tickSize: 2, tickRotate: -45,
domain: ["Strongly disagree", "Disagree", "Neutral", "Agree", "Strongly agree"]
},
y: {
label: "",
tickSize: 10,
tickFormat: d => d,
tickValues: Array.from(
new Set(fr_contentCounts.objects().map(d => d.count))
).sort((a, b) => a - b),
domain: [0, fr_content_maxCountRE]
},
facet: { data: fr_contentCounts, x: "measure", label: "" },
marginLeft: 140,
style: {
width: 1350,
height: 500,
fontSize: 30,
}
});
researchers should always engage with policymakers
policymakersCounts = aq.from(surveyResults)
.select("policymakers")
.groupby("policymakers")
.count()
.derive({ measure: d => "" })
// Calculate the maximum count from your dataset
policymakers_maxCountRE = Math.max(...policymakersCounts.objects().map(d => d.count));
plot_policymakers = Plot.plot({
marks: [
Plot.barY(policymakersCounts, {
x: "policymakers",
y: "count",
fill: "policymakers",
stroke: "black",
strokeWidth: 1
}),
Plot.ruleY([respondentCount], { stroke: "#ffffff99" })
],
color: {
domain: [
"Strongly disagree",
"Disagree",
"Neutral",
"Agree",
"Strongly agree"
],
range: [
"red",
"pink",
"lightgrey",
"lightgreen",
"forestgreen"
]
},
marginBottom: 180,
x: { label: "", tickSize: 2, tickRotate: -45,
domain: ["Strongly disagree", "Disagree", "Neutral", "Agree", "Strongly agree"]
},
y: {
label: "",
tickSize: 10,
tickFormat: d => d,
tickValues: Array.from(
new Set(policymakersCounts.objects().map(d => d.count))
).sort((a, b) => a - b),
domain: [0, policymakers_maxCountRE]
},
facet: { data: policymakersCounts, x: "measure", label: "" },
marginLeft: 140,
style: {
width: 1350,
height: 500,
fontSize: 30,
}
});
minimise surveillance of FR, avoid ‘authoritarian creep’
authoritarian_creepCounts = aq.from(surveyResults)
.select("authoritarian_creep")
.groupby("authoritarian_creep")
.count()
.derive({ measure: d => "" })
// Calculate the maximum count from your dataset
authoritarian_creep_maxCountRE = Math.max(...authoritarian_creepCounts.objects().map(d => d.count));
plot_authoritarian_creep = Plot.plot({
marks: [
Plot.barY(authoritarian_creepCounts, {
x: "authoritarian_creep",
y: "count",
fill: "authoritarian_creep",
stroke: "black",
strokeWidth: 1
}),
Plot.ruleY([respondentCount], { stroke: "#ffffff99" })
],
color: {
domain: [
"Strongly disagree",
"Disagree",
"Neutral",
"Agree",
"Strongly agree"
],
range: [
"red",
"pink",
"lightgrey",
"lightgreen",
"forestgreen"
]
},
marginBottom: 180,
x: { label: "", tickSize: 2, tickRotate: -45,
domain: ["Strongly disagree", "Disagree", "Neutral", "Agree", "Strongly agree"]
},
y: {
label: "",
tickSize: 10,
tickFormat: d => d,
tickValues: Array.from(
new Set(authoritarian_creepCounts.objects().map(d => d.count))
).sort((a, b) => a - b),
domain: [0, authoritarian_creep_maxCountRE]
},
facet: { data: authoritarian_creepCounts, x: "measure", label: "" },
marginLeft: 140,
style: {
width: 1350,
height: 500,
fontSize: 30,
}
});
Will individuals participate in this study who belong to a vulnerable group … or who cannot give their own consent to participate (e.g., under the age of 16)?
Will it be necessary that people participate in this study without having been informed about this previously or without having given their consent to participate (e.g., as in covert observation)?
Will the study involve covert observation or any other method that precludes informed consent, full debriefing, or the opportunity for participants to have their data deleted?
Will the study feature questions about topics that are of an intimate nature or that participants may perceive as stigmatising (e.g., questions pertaining to illegal or deviant behaviour or to sexual preferences)?
Will video or audio recordings be taken without prior consent by the participants?
Which personal data, if any, will be collected? … How will the anonymisation or pseudonymisation of collected data be ensured? … How long will the data be kept and where will they be stored?
1991
1998
2003
Blee’s article (and other output from this project) is a masterful display of research transparency – take inspiration for your thesis!
I made it clear that I did not share the racial convictions of these groups. I explicitly said that my ideological views were quite opposed to theirs, that they should not have any hope of converting me to their views, but that I would try to present an accurate depiction of women racist activists. This stance—as distant but not neutral researcher—was intended to clarify the nature of my interest in racist activists and their movement. It also positioned me as an observer who had not decided in advance to depict them as crazy or as personally pathological (a common media portrayal) and thus increase their vulnerability to incarceration by law enforcement or mental health agencies.
I made it clear that I did not share the racial convictions of these groups. I explicitly said that my ideological views were quite opposed to theirs, that they should not have any hope of converting me to their views, but that I would try to present an accurate depiction of women racist activists. This stance—as distant but not neutral researcher—was intended to clarify the nature of my interest in racist activists and their movement. It also positioned me as an observer who had not decided in advance to depict them as crazy or as personally pathological (a common media portrayal) and thus increase their vulnerability to incarceration by law enforcement or mental health agencies.
Actually with Linda and [her boyfriend] there was no indication that they might try to harm me at all. In fact, quite the contrary. I actually was afraid of that before they came because they both have very violent reputations, but in person they were extremely cordial and very friendly, not trying to intimidate me in any way. Perhaps trying to cultivate me.
To avoid giving further publicity to racist groups as well as to ensure anonymity, I use pseudonyms for both respondents’ names and the names of their groups and have changed some identifying details.
Posed by a previous student of this course:
Is democracy in decline? Is the far right a symptom/cause of that? If so, then what can/should we do? Is there a possibility science can “help”?
The quotation marks around ‘help’ are artful and wonderfully wry, recalling other times when science has ‘helped’
Thank you for your presence and participation!
Anonymous feedback here: https://forms.gle/pisUmtmWdE13zMD58
Alternatively, send me an email: m.zeller@lmu.de