<?xml version="1.0" encoding="UTF-8"?>
<rss  xmlns:atom="http://www.w3.org/2005/Atom" 
      xmlns:media="http://search.yahoo.com/mrss/" 
      xmlns:content="http://purl.org/rss/1.0/modules/content/" 
      xmlns:dc="http://purl.org/dc/elements/1.1/" 
      version="2.0">
<channel>
<title>Gjalt-Jorn Peters&#39; website</title>
<link>https://behaviorchange.eu/</link>
<atom:link href="https://behaviorchange.eu/index.xml" rel="self" type="application/rss+xml"/>
<description>This is the website of Gjalt-Jorn Peters. It is the home of the ScienceR blog, and collects links to other websites.</description>
<image>
<url>https://behaviorchange.eu/img/2024-07-13---profile-square.jpg</url>
<title>Gjalt-Jorn Peters&#39; website</title>
<link>https://behaviorchange.eu/</link>
</image>
<generator>quarto-1.4.554</generator>
<lastBuildDate>Sun, 19 Oct 2025 22:00:00 GMT</lastBuildDate>
<item>
  <title>Behavior change using medical analogies</title>
  <dc:creator>Gjalt-Jorn Peters</dc:creator>
  <link>https://behaviorchange.eu/posts/2025-10-behavior-change-using-medical-analogies.html</link>
  <description><![CDATA[ 





<!-- This is a Mastodon thread. [The original thread is available here](https://mastodon.nl/@matherion/){.external target="_blank"}: -->
<!-- <iframe src="https://mastodon.nl/@matherion//embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" allowfullscreen="allowfullscreen"></iframe><script src="https://mastodon.nl/embed.js" async="async"></script> -->
<div class="callout callout-style-default callout-warning callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Warning
</div>
</div>
<div class="callout-body-container callout-body">
<p>This is a draft - it will be updated later.</p>
<p>Probably 😬</p>
</div>
</div>
<hr>
<p>This is a brief thread / blog post about how concepts from behavior change science would map onto medical concepts.</p>
<p>If you’re seeing this in the fediverse, the URL to the blog post is <a href="https://sciencer.eu/posts/2025-10-behavior-change-using-medical-analogies.html">https://sciencer.eu/posts/2025-10-behavior-change-using-medical-analogies.html</a>.</p>
<hr>
<p>The vocabulary we use here is based on the Intervention Mapping protocol. If you want to check these more in depth, you can have a look at the Acyclic Behavior Change Diagram article at <a href="https://doi.org/jp9t">https://doi.org/jp9t</a>, or the glossary for the Intervention Mapping Work Book at <a href="https://im-wb.com/glossary.html">https://im-wb.com/glossary.html</a>.</p>
<hr>
<p>Where in behavior change science we focus on addressing issues in society or at a larger scale where human behavior plays a role, medicine is concerned with issues in the human body. The analogy for the behavior we ultimately want to change is therefore a disease.</p>
<p>When a disease is cured or changed a behavior is changed, medicine and behavior change science’s job is done; so in a way we started at the end of the story.</p>
<hr>
<p>The story begins with the diagnosis. In medicine, this process establishes what exactly the situation is and how the disease at hand can be targeted. In behavior change science, this consists of two things:</p>
<p>1️⃣ the needs assessment, to establish the broader context; 2️⃣ and determinant studies to establish what exactly should be targeted.</p>
<p>Especially determinant studies can be considered similar to the differential diagnosis: is the cause habits, perceived norms, or attitudes?</p>
<hr>
<p>Once the diagnosis has been made, to address a disease, medicine uses, well, medicine. The analogy of a medicine is a behavior change intervention.</p>
<p>This medicine works through a mechanism of action. This is the theoretical process through which it targets whatever it targets.</p>
<hr>
<p>Such mechanisms of action are clever exploitations of nature.</p>
<p>They leverage dynamics that generally evolved for wholly different purposes. For example, some medication binds to certain receptors or mimics a hormone.</p>
<p>This analogy also holds for the mechanisms of action in behavior change interventions. These mechanisms of action are the behavior change principles (behavior change methods in Intervention Mapping terms).</p>
<hr>
<p>In medicine, the mechanisms of action are based on an understanding of the human body: anatomy, physiology, neurology, etc. Because we have theories about how the human body works, we can design medication that works with the natural processes that make our bodies work.</p>
<p>In behavior change science, the mechanisms of action are based on an understanding of the human psyche: health psychology, social psychology, cognitive psychology, etc. Because we have theories about how the human psyche works, we can design interventions that work with the natural processes that make our mind work.</p>
<hr>
<p>Like in medicine, the mechanisms of action of behavior change science (i.e.&nbsp;behavior change principles or behavior change methods) are abstract, theoretical descriptions of how such natural psychological structures and processes can be leveraged to make certain changes.</p>
<hr>
<p>For example, modelling relies on vicarious learning; the evolved learning process where organisms can learn through observation of other organisms. Because these behavior change principles leverage structures and functions that exist for very different reasons, correct application is a very delicate process.</p>
<hr>
<p>To stick to the modeling example: modeling does not work when the audience does not identify with the used role model, or when the role model is not positively reinforced, or when it is a mastery model instead of a coping model, or when the audience does not have the requisite skills.</p>
<hr>
<p>If one deviates from these parameters, the way the behavior change principle is applied in the intervention does not approximate the underlying evolved learning processes enough, and no learning will occur (in other words, the audience’s psyche will stay unchanged; and therefore, ultimately, so will their behavior).</p>
<hr>
<p>In medicine, the analogy is found in things like dose (e.g.&nbsp;most medication has the desired effect at the right dose but does nothing at lower doses and can become toxic at higher doses) and molecular structure (e.g., benzylpenicillin or penicilin G treating syphilis and pneumonia with side effects including seizures, but phenoxymethylpenicillin or penicilin V treating otitis media with side effects including nausea).</p>
<hr>
<p>Finally, in medicine, the mechanisms of action operate on specific structural or functional parts of the human body, lowering or increasing blood pressure, making blood thicker or thinner, or causing certain neurotransmitters to be released or inhibited. These dynamics are used to achieve a desirable state that should make the person more healthy.</p>
<hr>
<p>In behavior change science, the mechanisms of action operate on specific structural or functional parts of the human psyche, lowering or increasing attitude, perceived norms, habits, or self-efficacy. These dynamics are used to achieve a desirable state that should make the person more healthy.</p>
<hr>
<p>So, now the full causal-structural chain that underlies our model of why medication and interventions work is complete:</p>
<p>1️⃣ The mechanism of action [🧠 behavior change principle 🔄️ ⚕️pharmaceutical principle];</p>
<p>2️⃣ is applied [within its 🧠 parameters of use 🔄️ ⚕️ chemical constraints];</p>
<p>3️⃣ in a concrete implementation [🧠 practical applications 🔄️ ⚕️pills];</p>
<p>4️⃣ that targets specific elements [🧠 sub-determinants 🔁 ⚕️physiological variables];</p>
<p>5️⃣ that belong to an overarching cluster [🧠 determinants 🔁 ⚕️anatomical structure];</p>
<p>6️⃣ that causes an intermediate target [🧠 sub-behaviors 🔄️ ⚕️symptoms];</p>
<p>7️⃣ that is a part of the ultimate target [🧠target behavior 🔄️ ⚕️disease].</p>
<hr>



 ]]></description>
  <category>behavior change</category>
  <category>intervention mapping</category>
  <guid>https://behaviorchange.eu/posts/2025-10-behavior-change-using-medical-analogies.html</guid>
  <pubDate>Sun, 19 Oct 2025 22:00:00 GMT</pubDate>
</item>
<item>
  <title>Free and easy and versatile QR codes</title>
  <dc:creator>Gjalt-Jorn Peters</dc:creator>
  <link>https://behaviorchange.eu/posts/2025-09-free-and-easy-and-versatile-qr-codes.html</link>
  <description><![CDATA[ 





<p>This is a Mastodon thread. <a href="https://mastodon.nl/@matherion/115221047847571516" class="external" target="_blank">The original thread is available here</a>:</p>
<iframe src="https://mastodon.nl/@matherion/115221047847571516/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" allowfullscreen="allowfullscreen">
</iframe>
<script src="https://mastodon.nl/embed.js" async="async"></script>
<hr>
<p>This is a brief thread / blog post about how to create QR codes in a way that’s free, easy, and versatile, using the userfriendly open source application <span class="citation" data-cites="Inkscape">@Inkscape</span><span class="citation" data-cites="mastodon.art">@mastodon.art</span></p>
<p>By the way, the blog post URL is <a href="https://sciencer.eu/posts/2025-09-free-and-easy-and-versatile-qr-codes.html">https://sciencer.eu/posts/2025-09-free-and-easy-and-versatile-qr-codes.html</a>.</p>
<hr>
<p>QR codes are very useful to efficiently share information (usually URLs).</p>
<p>QR codes are quite versatile and robust; they’re not too demanding in terms of colors and shapes, and even have a degree of error correction allowing them to still be ‘legible’ to QR code readers even if part of the QR code is obscured.</p>
<p>This allows you to create QR codes consisting of circles, pills, or other shapes; in red, blue, or pink; and embed shapes such as logos while still keeping their functionality.</p>
<hr>
<p>A number of websites exist that can help you do this, but there’s a better solution: the awesome open source application InkScape.</p>
<p>This quick &amp; dirty blog post / Mastodon thread briefly talks you through that process.</p>
<p>First, if you don’t have it yet, get <a href="https://mastodon.nl/@inkscape@mastodon.art"><span class="citation" data-cites="inkscape">@inkscape</span><span class="citation" data-cites="mastodon.art">@mastodon.art</span></a> from <a href="https://inkscape.org">https://inkscape.org</a> and install it in the version for your operating system.</p>
<p><img src="https://behaviorchange.eu/img/inkscape-0.png" class="img-fluid" alt="A screenshot of the InkScape webpage with a cursor at the download button."></p>
<hr>
<p>Then open InkScape and open an empty document. Open the “Extensions” menu, and in the drop-down menu, open the “Render” submenu. In that submenu, open the “Barcode” submenu, and in that submenu, select the “QR Code…” option.</p>
<p><img src="https://behaviorchange.eu/img/inkscape-1.png" class="img-fluid" alt="A screenshot of the InkScape application on Windows 10, showing the menu's expanded as described with the cursor hovering over the 'QR code...' menu option."></p>
<hr>
<p>In the QR code dialog, you can copy-paste the URL (or other text) you want to encode in the QR code. You can also select the error correction level (from Low, where 7% of the QR code can be recovered, via M(edium, about 19%) and Q(uartile, about 25%) to H(igh, about 30%).</p>
<p><img src="https://behaviorchange.eu/img/inkscape-2.png" class="img-fluid" alt="A screenshot of the InkScape application on Windows 10, showing the 'QR Code' dialog, with the 'Error correction level' drop-down menu opened and the mouse cursor hovering over the 'L(ow)' menu option."></p>
<hr>
<p>In that dialog you can aldo set other things. For example, the “Clones” section allows you to use, instead of the default QR “squares”, any shape you desire. The QR-code simply using the shape you have selected when creating the QR-code. You may have to play around a bit with the size of the object to get things working as you want.</p>
<p><img src="https://behaviorchange.eu/img/oscp-site-hyperlink---low-error-correction---stars.png" class="img-fluid" alt="A QR code where the shapes are stars."></p>
<hr>
<p>Then, hit “Apply” and the QR code is created. It consists of a number of objects (well, they’re called “paths” in InkScape; there’s something else that’s actually called an object - sorry for the confusion!). First, a group of the background (a larger white square) and the foreground (the QR code squares/objects). That foreground is a group of all the tiny little squares.</p>
<p><img src="https://behaviorchange.eu/img/inkscape-3.png" class="img-fluid" alt="A QR-code that was just rendered by InkScape."></p>
<hr>
<p>First, select the QR-code group and ungroup the foreground and background so you can delete (or adjust) the background. You do this by rightclicking it and selecting “ungroup”, or by selecting it and hitting CTRL-SHIFT-G.</p>
<p><img src="https://behaviorchange.eu/img/inkscape-4.png" class="img-fluid" alt="A screenshot of the InkScape application on Windows 10, showing a QR-code with a pop-up (right-click) menu with the mouse cursor hovering over the 'Ungroup' option."></p>
<hr>
<p>Then edit it further (you may want to ungroup into separate objects/paths first). You can edit the colors, and if the level of error correction you chose allows it, you can place a white square (or other color/shape) in front of some of the QR code and place a logo (or some text) inside it.</p>
<p><img src="https://behaviorchange.eu/img/oscp-site-hyperlink---with-logo---text-to-path.png" class="img-fluid" alt="A QR code with the Open Science Community Parkstad logo placed in its center."></p>
<hr>
<p>When you’re happy, don’t forget to adjust the page to the size of your QR code (SVG files have a kind of ‘page’ displaying the content). To do that, open the File menu and select the Document Properties option.</p>
<p><img src="https://behaviorchange.eu/img/inkscape-5.png" class="img-fluid" alt="A screenshot of the InkScape application on Windows 10, showing the File menu expanded with the cursor hovering over the 'Document Properties' menu option."></p>
<hr>
<p>In the dialog that then opens, click the “Resize to content” button to, well, resize the page to the content.</p>
<p><img src="https://behaviorchange.eu/img/inkscape-6.png" class="img-fluid" alt="A screenshot of the InkScape application on Windows 10, showing the 'Document Properties' dialog with the cursor hovering over the 'Resize to content' button."></p>
<hr>
<p>If you’re a scientist, check this post too, about pro conference tips: <a href="https://sciencer.eu/posts/2024-08-open-science-conference-contributions-pro-tips.html">https://sciencer.eu/posts/2024-08-open-science-conference-contributions-pro-tips.html</a></p>
<p>(actually, unfortunately, the OSF meetings service was discontinued… 😭)</p>
<p>And that was it! I hope it’s useful to somebody 🙂</p>



 ]]></description>
  <category>open science</category>
  <category>design</category>
  <category>open source</category>
  <guid>https://behaviorchange.eu/posts/2025-09-free-and-easy-and-versatile-qr-codes.html</guid>
  <pubDate>Tue, 16 Sep 2025 22:00:00 GMT</pubDate>
</item>
<item>
  <title>ROCK Basics</title>
  <dc:creator>Gjalt-Jorn Peters</dc:creator>
  <link>https://behaviorchange.eu/posts/2024-12-rock-basics.html</link>
  <description><![CDATA[ 





<div class="callout callout-style-default callout-warning callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Warning
</div>
</div>
<div class="callout-body-container callout-body">
<p>This blog post is still a work in progress!</p>
</div>
</div>
<p>The Reproducible Open Coding Kit, the ROCK, allows you to do qualitative research in an Open Science way. It is a so-called Open Standard and a number of Open Source applications exist to work with ROCK files. This blog post is meant as a brief introduction to this standard.</p>
<section id="starting-from-coded-rock-sources" class="level1">
<h1>Starting from coded ROCK sources</h1>
<section id="the-simplest-rock-source" class="level2">
<h2 class="anchored" data-anchor-id="the-simplest-rock-source">The simplest ROCK source</h2>
<p>A very very minimal coded ROCK source might look something like this:</p>
<div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode html code-with-copy"><code class="sourceCode html"><span id="cb1-1">Being proud of oneself: is a</span>
<span id="cb1-2">self-conscious emotion or self-directed [[emotion]]</span>
<span id="cb1-3">emotion. It is based on considerations</span>
<span id="cb1-4">of social standards and/or evaluation [[social]]</span>
<span id="cb1-5">by oneself or by others.</span></code></pre></div>
<p>Two codes are applied here. The first is identified by code identifier “emotion”, and the second by code identifier “social”. Each code identifier is delimited by two square brackets to designate that they represent the application of a code to a data fragment.</p>
<p>The key of the ROCK standard is that this coded source can be read by both humans and computers. The first enables easy sharing of coded data: people don’t need to install specific software to be able to understand what you did. The second enables processing by computers to do everything that software for qualitative analysis can do.</p>
<p>Each line of this source is a data fragment. In the ROCK, such a data fragment is called an “utterance”, and utterances are the shortest codable segment of data. They are separated by line breaks.</p>
</section>
<section id="adding-more-information" class="level2">
<h2 class="anchored" data-anchor-id="adding-more-information">Adding more information</h2>
<p>It is good practice to attach unique identifiers to each utterance as well, so as to enable unequivalent reference to them as well as easily compare coding from independent coding efforts. Such identifiers are prepended to the utterances (so they don’t distract from the data). They are called UIDs (Utterance Identifiers), and you can see examples in the source below.</p>
<p>In addition, you often want to encode data provenance (e.g.&nbsp;the data provider). These are attached using so-called class instance identifiers. These identify instances of classes, where a class can be, for example, participants, the time of the data collection, the questions asked in an interview, or who coded the interview. Class instance identifiers look the same as utterance identifiers: they start with the class identifier (e.g., <code>participantId</code>), followed by an equals sign (<code>=</code>) or a colon (<code>:</code>), and end with the instance identifier (e.g., <code>base</code>).</p>
<p>If we add this to the rudimentary example source, it looks like this:</p>
<div class="sourceCode" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode html code-with-copy"><code class="sourceCode html"><span id="cb2-1">[[uid=7xf3dl1g]] [[participantId=base]] [[tssid=20240901T0700Z]]</span>
<span id="cb2-2">[[uid=7xf3dl1k]] </span>
<span id="cb2-3">[[uid=7xf3dl1l]] [[taskId=label]]</span>
<span id="cb2-4">[[uid=7xf3dl1m]] </span>
<span id="cb2-5">[[uid=7xf3dl1n]] pride</span>
<span id="cb2-6">[[uid=7xf3dl1p]] </span>
<span id="cb2-7">[[uid=7xf3dl1q]] [[taskId=definition]]</span>
<span id="cb2-8">[[uid=7xf3dl1r]] </span>
<span id="cb2-9">[[uid=7xf3dl1s]] Being proud of oneself: is a</span>
<span id="cb2-10">[[uid=7xf3dl1t]] self-conscious emotion or self-directed [[emotion]]</span>
<span id="cb2-11">[[uid=7xf3dl1w]] emotion. It is based on considerations</span>
<span id="cb2-12">[[uid=7xf3dl1x]] of social standards and/or evaluation [[social]]</span>
<span id="cb2-13">[[uid=7xf3dl1y]] by oneself or by others.</span></code></pre></div>
<p>As you can see, one of the benefits of UIDs is that they enable efficient reference to a specific data fragment (‘utterance’). Within a source, the last three characters of a UID suffice as unique references, so we will use these to further discuss this source.</p>
<p>On the line identified by <code>l1g</code> we see only two class instance identifiers. <code>[[participantId=base]]</code> encodes that these data were provided by a participant with identifier <code>base</code>, and <code>[[tssid=20240901T0700Z]]</code> is the so-called “time-stamped source identifier” (the TSSID). This is the minute the data collection started in ISO 8601 standard format and converted to the UTC timezone. Together with UIDs, TSSIDs are a virtually guaranteed unique reference to any data fragment from any qualitative data collection.<sup>1</sup></p>
<p>On the line identified by <code>l1l</code>, we see <code>[[taskId=label]]</code>. Apparently, what follows now are data provided for that task (<code>label</code>). Knowing what that task entails requires knowing more about the study itself (these data are from <a href="https://explicate.opens.science/alice.html">the Alice study, see here</a>). The data that follows is one the line identified by <code>l1n</code>: the word “pride”, which has not been coded yet.</p>
<p>On the line identified by <code>l1q</code>, <code>[[taskId=definition]]</code> tells us that the next section of data relates to the second task, identified as ‘<code>definition</code>’. These data are the data fragments we saw earlier, on the lines identified by <code>l1s</code> to <code>l1y</code>.</p>
<p>The ROCK standard describes how software can process ROCK sources such as this example. Software that does that (such as the <code>{rock}</code> package in R, or the <a href="https://shiny.rock.science/feldspar">Shiny ROCK Feldspar web app</a> that processes one or more sources into what’s called the Qualitative Data Table) will then label all data following a class instance identifier with that identifier.</p>
<p>As such, after processing the data, it’s clear that the data on the line identified with <code>l1n</code> belongs to task ‘<code>label</code>’, and the data on the lines identified by <code>l1s</code> to <code>l1y</code> belongs to task ‘<code>definition</code>’. For all data, it’s clear they belong to the participant identified by <code>base</code>, and that they came from the source identified by <code>20240901T0700Z</code>.</p>
<p>These class instance identifiers can also be used to attach attributes to data fragments. For example, participant <code>base</code> may be somebody who, at the time of data collection, was aged between 22 and 30, identified as a woman, and resided in a rural area. They will be attached to all data fragments coded with the corresponding class instance identifier - in our example, all data, since this class instance identifier was on the first line.</p>
<p>If another class instance identifier for another instance of the same class appears later in the source, from that point on the attributes of that class instance will be attached instead. Attributes can be specified in a ROCK source in the YAML format, which will be explained below.</p>
<p>Now, it’s time to dive a bit into the idea of the ROCK standard.</p>
</section>
</section>
<section id="the-rock-fundamentals" class="level1">
<h1>The ROCK fundamentals</h1>
<p>The ROCK format has a number of features, but for now I’ll focus on the most commonly used ones.</p>
<p>A ROCK file is a so-called plain text file. Plain text file are pretty self-explanatory: they’re files with text - plain text. So unlike text processor files, they have no markup: no bold, no italic, no bulleted lists, no tables, no hyperlinks, nothing. Kieran Healy wrote an excellent introduction with <a href="https://plain-text.co/">The Plain Person’s Guide to Plain Text Social Science</a>, as did Tim Elder with <a href="https://introtoplaintext.com">Introduction to Plaintext for Research and Writing</a>.</p>
<p>The ROCK uses plain text because it’s the most open file format there is. Anybody can open plain text files; in fact, pretty much all operating systems come with plain text editors.</p>
<section id="the-rock-file-extension" class="level2">
<h2 class="anchored" data-anchor-id="the-rock-file-extension">The ROCK file extension</h2>
<p>File extensions are the last characters of the filename, the ones following the period (<code>.</code>). They tell computers and humans about the type of information in a file. Some common file extensions are <code>.jpg</code> for photographs, <code>.html</code> for webpages, <code>.mp3</code> for audio files, and <code>.txt</code> for regular plain text files. Some operating systems even go so far so as to hide the file extension from users, instead showing icons to represent the file type. The extension for ROCK files is <code>.rock</code>, so this is how you can recognize ROCK files.</p>
</section>
<section id="rock-codes" class="level2">
<h2 class="anchored" data-anchor-id="rock-codes">ROCK codes</h2>
<p>The ROCK standard consists of two things: concepts and conventions on how to represent them in plain text files. The concepts are the most important part, but also invisible: they embody a set of decisions on how to represent coded qualitative data.<sup>2</sup></p>
<p>The way the ROCK represents coding (i.e.&nbsp;the application of a code to data), on the other hand, is very visible. Most codings are delimited by double square brackets, which contain one or more identifiers, such as code identifiers or class identifiers and class instance identifiers.</p>
<p>Identifiers (“ids” for short) are unique character sequences that represent something; for example, a code or a person. Identifiers start with a Latin letter (<code>a-z</code> or <code>A-Z</code>), followed by one or more Latin letters, Arabic digits (<code>0-9</code>), and/or underscores (<code>_</code>).</p>
</section>
<section id="coding-patterns" class="level2">
<h2 class="anchored" data-anchor-id="coding-patterns">Coding patterns</h2>
<p>The following coding patterns are defined.</p>
<section id="basic-coding-patterns" class="level3">
<h3 class="anchored" data-anchor-id="basic-coding-patterns">Basic coding patterns</h3>
<p>First the three we already saw:</p>
<ul>
<li><p><code>[[codeId]]</code>: the simplest coding just applies a flat code, without specifying any relationship to other codes.</p></li>
<li><p><code>[[classId:instanceId]]</code> or <code>[[classId=instanceId]]</code>: class instance identifiers encode data provenance; either the origin of the data, such as the data provider (e.g.&nbsp;a participant), data collection location (e.g.&nbsp;a venue), or coder (e.g.&nbsp;a researcher). Class instances can be used to efficiently attach attributes to data fragments; for example, label all data provided by a participant from a rural area as such.</p></li>
<li><p><code>[[uid:xxx]]</code> or <code>[[uid=xxx]]</code>: Utterance identifiers enable unequivocal reference to specific data fragments. They are also required to compare or merge codings from independent coders.</p></li>
</ul>
</section>
<section id="advanced-coding-patterns" class="level3">
<h3 class="anchored" data-anchor-id="advanced-coding-patterns">Advanced coding patterns</h3>
<p>There are three more advanced patterns. The first is supported by most qualitative software:</p>
<ul>
<li><code>[[parentCodeId&gt;childCodeId]]</code>: a hierarchical coding, or tree coding, specifies a parent-child relationship between codes.</li>
</ul>
<p>The other two are as yet unique to the ROCK, and are mostly used for Advanced Qualitative/Unified Analysis (see below):</p>
<ul>
<li><p><code>[[codeId||value]]</code>: this specifies a value for the code referenced by the code identifier. This is useful for registering values inductively. For example, age or gender identity, but also categories or degrees, for example to code the intensity of statements.</p></li>
<li><p><code>[[fromCodeId&gt;toCodeId||edgeCodeId]]</code>: a network coding specifies a generic relationship. Unlike with hierarchical/tree coding, it is possible to specify the type of relationship. In addition, structures don’t need to be nested necessarily. This is discussed more in detail inb the Qualitative Network Approach (QNA) section below.</p></li>
</ul>
</section>
<section id="structural-coding-patterns" class="level3">
<h3 class="anchored" data-anchor-id="structural-coding-patterns">Structural coding patterns</h3>
<p>In addition to specifying code identifiers to indicate how you want to code data, you can also specify the data structure in the ROCK. To do this, you use structural coding patterns.</p>
<section id="segmenting-the-data" class="level4">
<h4 class="anchored" data-anchor-id="segmenting-the-data">Segmenting the data</h4>
<p>The first type are section breaks, used to segment the data. These look as follows:</p>
<div class="sourceCode" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode html code-with-copy"><code class="sourceCode html"><span id="cb3-1">--<span class="er" style="color: #AD0000;
background-color: null;
font-style: inherit;">&lt;</span><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">&lt;</span><span class="kw" style="color: #003B4F;
background-color: null;
font-style: inherit;">sectionBreakId</span><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">&gt;</span>&gt;--</span></code></pre></div>
<p>They enable analysing the data per segment, for example collapsing the codings per segment. You can use multiple segmentation schemes in parallel by using different section break identifiers (note that segmentation decisions can have far-reaching implications; see <a href="https://doi.org/j5sx">doi.org/j5sx</a>).</p>
</section>
<section id="nested-data" class="level4">
<h4 class="anchored" data-anchor-id="nested-data">Nested data</h4>
<p>For data that are nested (e.g.&nbsp;social media data where posts reply to other posts), this nesting can be indicated using tildes (<code>~</code>), for example:</p>
<div class="sourceCode" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode html code-with-copy"><code class="sourceCode html"><span id="cb4-1">~ This is a post.</span>
<span id="cb4-2">~~ This is a reply to that post.</span>
<span id="cb4-3">~~~ This is a third reply.</span></code></pre></div>
</section>
</section>
<section id="anchors-to-enable-synchronization" class="level3">
<h3 class="anchored" data-anchor-id="anchors-to-enable-synchronization">Anchors to enable synchronization</h3>
<p>Finally, anchors can be used to attach timestamps, useful to synchronize multiple data streams. Anchors look like this:</p>
<div class="sourceCode" id="cb5" style="background: #f1f3f5;"><pre class="sourceCode html code-with-copy"><code class="sourceCode html"><span id="cb5-1">--+-{ anchorId }-+--</span></code></pre></div>
<p>As with all identifiers, the anchor identifiers have to be unique; and they have to have the exact same order in all sources to be synchronized.</p>
</section>
</section>
</section>
<section id="advanced-qualitativeunified-analysis-aqua" class="level1">
<h1>Advanced Qualitative/Unified Analysis (AQUA)</h1>
<p>As mentioned above, the ROCK supports Advanced Qualitative/Unified Analysis (AQUA). In this blog post, three AQUA analyses will be briefly covered: Anchor-based Stream Synchronization, the Qualitative Network Approach, and Qualitative/Unified Exploration of State Transitions.</p>
<section id="anchor-based-stream-synchronization" class="level2">
<h2 class="anchored" data-anchor-id="anchor-based-stream-synchronization">Anchor-based Stream Synchronization</h2>
<p>Sometimes you have multiple data streams that you want to code and analyze together. In that case you will want the data streams to be synchronized, so that the codes correspond to roughly the same moments in time.</p>
<p>To this end, you can specify anchors as described above. This makes it possible for software that supports this functionality to synchronize multiple streams to a primary stream. If you want to do this, you have to include, in addition to anchors, class instance identifiers to identify the source and the stream. Specifically, the class identifiers to use are <code>sourceId</code> and <code>streamId</code>.</p>
<p>The following fragment of a coded source shows how this can look:</p>
<div class="sourceCode" id="cb6" style="background: #f1f3f5;"><pre class="sourceCode html code-with-copy"><code class="sourceCode html"><span id="cb6-1">[[uid=7xy80zrp]] [[sourceId=participant6]] [[tssid=20241219T0954Z]]  </span>
<span id="cb6-2">[[uid=7xy80zrq]] [[streamId=interviews]]</span>
<span id="cb6-3">[[uid=7xy80zrr]]</span>
<span id="cb6-4">[[uid=7xy80zrs]] --+-{ 2024-12-19 09:54 }-+--</span>
<span id="cb6-5">[[uid=7xy80zrt]] </span>
<span id="cb6-6">[[uid=7xy80zrw]] At first, we were just friends.</span>
<span id="cb6-7">[[uid=7xy80zrx]] However, soon I started developing feelings</span></code></pre></div>
<p>For an application of Anchor-based Stream Synchronization, see <a href="https://doi.org/nxdj">doi.org/nxdj</a>.</p>
</section>
<section id="qualitative-network-approach-qna" class="level2">
<h2 class="anchored" data-anchor-id="qualitative-network-approach-qna">Qualitative Network Approach (QNA)</h2>
<p>To explain QNA, we’ll first zoom out a bit. In qualitative research, your data collection is usually aimed at being as “lossless” as possible: you aim to register everything that is relevant, erring on the side of registration. As a consequence, you often collect audio or video data. To systematically detect patterns in the data (in a way where we make it as hard as possible <a href="https://web.archive.org/web/20241207133832/https://calteches.library.caltech.edu/51/2/CargoCult.htm">to fool ourselves</a>), we devise codes that define those patterns, and we attach those codes to the data where we identify the pattern. This simplest mode of code organization is called flat coding.</p>
<p>Because “everything is related”, as it were, the phenomena we study are also usually related to each other. Therefore, we often want to also code relationships. The simplest way to do this is to nest codes within each other. This mode of code organization is called hierarchical or tree coding.</p>
<p>However, hierarchical or tree coding requires that code relationships are all the same type (and the types of this relationship is usually not specified). Often, codes can be related in different ways; and not all relationships are nested.</p>
<p>In those situations, you can use network coding, as implemented by the Qualitative Network Approach (QNA). When you use QNA, you always specify three codes: one representing at which code the association starts; one representing at which code the association ends; and one represention what type of association you observed. For example, if you code an interview transcript and somebody expresses the belief that drinking coffee causes them to feel energetic, you could use <code>[[coffee-&gt;energetic||causal_positive]]</code>.</p>
<p>Software (like the <code>{rock}</code> R package or the <a href="https://shiny.rock.science/diamond">Shiny ROCK Crystal web app</a> can then parse a coded source and produce the network that was coded, visualizing the relationships you observed.</p>
<p>For example, this fragment of coded data:</p>
<div class="sourceCode" id="cb7" style="background: #f1f3f5;"><pre class="sourceCode html code-with-copy"><code class="sourceCode html"><span id="cb7-1">[[uid=7yww3938]] When I'm tired, I often get cranky. [[tired-&gt;cranky||causal_pos||1]]</span>
<span id="cb7-2">[[uid=7yww3939]] In general, such things matter for my mood. [[cranky-&gt;mood||structural||1]]</span>
<span id="cb7-3">[[uid=7yww393b]] For example, when I'm hungry, I also get cranky. [[hungry-&gt;cranky||causal_pos||1]] [[hungry-&gt;cranky||causal_pos||1]]</span>
<span id="cb7-4">[[uid=7yww393c]] And when I have coffee, I feel cheerful. [[cheerful-&gt;mood||structural||1]] [[coffee-&gt;cheerful||causal_pos||1]]</span>
<span id="cb7-5">[[uid=7yww393d]] But that's also because it's a drug I think. [[coffee-&gt;drug||structural||1]]</span>
<span id="cb7-6">[[uid=7yww393f]] And coffee also makes me feel less tired of course. [[coffee-&gt;tired||causal_neg||1]]</span>
<span id="cb7-7">[[uid=7yww393g]] My mood is also influenced by the weather. [[weather-&gt;mood||causal||1]]</span>
<span id="cb7-8">[[uid=7yww393h]] Actually, the weather also matter for how hungry I get. [[weather-&gt;hungry||causal||1]]</span>
<span id="cb7-9">[[uid=7yww393j]] For example, if it's very warm, I get much less hungry. [[warmWeather-&gt;weather||structural||1]] [[warmWeather-&gt;hungry||causal_neg||1]]</span></code></pre></div>
<p>Produces this network:</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="sourceCode cell-code" id="cb8" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb8-1">source <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span></span>
<span id="cb8-2"></span>
<span id="cb8-3"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">[[uid=7yww3938]] When I'm tired, I often get cranky. [[tired-&gt;cranky||causal_pos||1]]</span></span>
<span id="cb8-4"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">[[uid=7yww3939]] In general, such things matter for my mood. [[cranky-&gt;mood||structural||1]]</span></span>
<span id="cb8-5"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">[[uid=7yww393b]] For example, when I'm hungry, I also get cranky. [[hungry-&gt;cranky||causal_pos||1]] [[hungry-&gt;cranky||causal_pos||1]]</span></span>
<span id="cb8-6"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">[[uid=7yww393c]] And when I have coffee, I feel cheerful. [[cheerful-&gt;mood||structural||1]] [[coffee-&gt;cheerful||causal_pos||1]]</span></span>
<span id="cb8-7"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">[[uid=7yww393d]] But that's also because it's a drug I think. [[coffee-&gt;drug||structural||1]]</span></span>
<span id="cb8-8"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">[[uid=7yww393f]] And coffee also makes me feel less tired of course. [[coffee-&gt;tired||causal_neg||1]]</span></span>
<span id="cb8-9"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">[[uid=7yww393g]] My mood is also influenced by the weather. [[weather-&gt;mood||causal||1]]</span></span>
<span id="cb8-10"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">[[uid=7yww393h]] Actually, the weather also matter for how hungry I get. [[weather-&gt;hungry||causal||1]]</span></span>
<span id="cb8-11"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">[[uid=7yww393j]] For example, if it's very warm, I get much less hungry. [[warmWeather-&gt;weather||structural||1]] [[warmWeather-&gt;hungry||causal_neg||1]]</span></span>
<span id="cb8-12"></span>
<span id="cb8-13"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>;</span>
<span id="cb8-14"></span>
<span id="cb8-15">parsedSource <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> rock<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">parse_source</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">text =</span> source);</span>
<span id="cb8-16"></span>
<span id="cb8-17">DiagrammeR<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">render_graph</span>(</span>
<span id="cb8-18">  parsedSource<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>networkCodes<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>network<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>graph</span>
<span id="cb8-19">);</span></code></pre></div>
</details>
<div class="cell-output-display">
<div class="grViz html-widget html-fill-item" id="htmlwidget-dd5ff47794063c4f86b1" style="width:100%;height:464px;"></div>
<script type="application/json" data-for="htmlwidget-dd5ff47794063c4f86b1">{"x":{"diagram":"digraph {\n\ngraph [layout = \"neato\",\n       outputorder = \"edgesfirst\",\n       bgcolor = \"white\"]\n\nnode [fontname = \"arial\",\n      fontsize = \"10\",\n      shape = \"ellipse\",\n      fixedsize = \"false\",\n      width = \"0.5\",\n      style = \"rounded,filled\",\n      fillcolor = \"#FFFFFF\",\n      color = \"#000000\",\n      fontcolor = \"gray50\"]\n\nedge [fontname = \"arial\",\n     fontsize = \"8\",\n     len = \"1.5\",\n     color = \"#000000\",\n     arrowsize = \"0.5\",\n     headclip = \"true\",\n     tailclip = \"false\"]\n\n  \"1\" [label = \"cranky\", fillcolor = \"#FFFFFF\", fontcolor = \"#000000\"] \n  \"2\" [label = \"mood\", fillcolor = \"#FFFFFF\", fontcolor = \"#000000\"] \n  \"3\" [label = \"cheerful\", fillcolor = \"#FFFFFF\", fontcolor = \"#000000\"] \n  \"4\" [label = \"drug\", fillcolor = \"#FFFFFF\", fontcolor = \"#000000\"] \n  \"5\" [label = \"tired\", fillcolor = \"#FFFFFF\", fontcolor = \"#000000\"] \n  \"6\" [label = \"hungry\", fillcolor = \"#FFFFFF\", fontcolor = \"#000000\"] \n  \"7\" [label = \"weather\", fillcolor = \"#FFFFFF\", fontcolor = \"#000000\"] \n  \"8\" [label = \"coffee\", fillcolor = \"#FFFFFF\", fontcolor = \"#000000\"] \n  \"9\" [label = \"warmWeather\", fillcolor = \"#FFFFFF\", fontcolor = \"#000000\"] \n\"5\"->\"1\" [penwidth = \"1\"] \n\"1\"->\"2\" [penwidth = \"1\"] \n\"6\"->\"1\" [penwidth = \"1\"] \n\"3\"->\"2\" [penwidth = \"1\"] \n\"8\"->\"3\" [penwidth = \"1\"] \n\"8\"->\"4\" [penwidth = \"1\"] \n\"8\"->\"5\" [penwidth = \"1\"] \n\"7\"->\"2\" [penwidth = \"1\"] \n\"7\"->\"6\" [penwidth = \"1\"] \n\"9\"->\"7\" [penwidth = \"1\"] \n\"9\"->\"6\" [penwidth = \"1\"] \n}","config":{"engine":"dot","options":null}},"evals":[],"jsHooks":[]}</script>
</div>
</div>
</section>
<section id="qualitativeunified-exploration-of-state-transitions-quest" class="level2">
<h2 class="anchored" data-anchor-id="qualitativeunified-exploration-of-state-transitions-quest">Qualitative/Unified Exploration of State Transitions (QUEST)</h2>
<p>When you want to use Qualitative/Unified Exploration of State Transitions (QUEST), you have to specify state identifiers in the data to code the state. State identifiers are class instance identifiers for class <code>state</code>.<sup>3</sup></p>
<p>For example, the following fragment of a coded source contains four state transitions:</p>
<div class="sourceCode" id="cb9" style="background: #f1f3f5;"><pre class="sourceCode html code-with-copy"><code class="sourceCode html"><span id="cb9-1">[[uid=7xy80zrw]] At first, we were just friends. [[state=friends]]</span>
<span id="cb9-2">[[uid=7xy80zrx]] However, soon I started developing feelings [[state=crush]]</span>
<span id="cb9-3">[[uid=7xy80zry]] for them. For a few weeks, I wasn't sure</span>
<span id="cb9-4">[[uid=7xy80zrz]] how they felt, but eventually we started dating. [[state=dating]]</span>
<span id="cb9-5">[[uid=7xy80zs0]] As we got to know each other better, we discovered</span>
<span id="cb9-6">[[uid=7xy80zs1]] that we wanted very different things from</span>
<span id="cb9-7">[[uid=7xy80zs2]] life. We ultimately decided to part as friends. [[state=friends]]</span></code></pre></div>
<p>Analysing this source with appropriate software (e.g., the <code>{rock}</code> R package) can then show the state transition diagram. Specifically, the <code>{rock}</code> package produces the following result for this coded data fragment (admittedly not incredibly exciting):</p>
<div class="cell">
<details class="code-fold">
<summary>Code</summary>
<div class="sourceCode cell-code" id="cb10" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb10-1">source <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span></span>
<span id="cb10-2"></span>
<span id="cb10-3"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">[[uid=7xy80zrw]] At first, we were just friends. [[state=friends]]</span></span>
<span id="cb10-4"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">[[uid=7xy80zrx]] However, soon I started developing feelings [[state=crush]]</span></span>
<span id="cb10-5"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">[[uid=7xy80zry]] for them. For a few weeks, I wasn't sure</span></span>
<span id="cb10-6"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">[[uid=7xy80zrz]] how they felt, but eventually we started dating. [[state=dating]]</span></span>
<span id="cb10-7"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">[[uid=7xy80zs0]] As we got to know each other better, we discovered</span></span>
<span id="cb10-8"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">[[uid=7xy80zs1]] that we wanted very different things from</span></span>
<span id="cb10-9"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">[[uid=7xy80zs2]] life. We ultimately decided to part as friends. [[state=friends]]</span></span>
<span id="cb10-10"></span>
<span id="cb10-11"><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span>;</span>
<span id="cb10-12"></span>
<span id="cb10-13">parsedSource <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> rock<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">parse_source</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">text =</span> source);</span>
<span id="cb10-14"></span>
<span id="cb10-15">exampleTable <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> rock<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">get_state_transition_table</span>(</span>
<span id="cb10-16">  parsedSource</span>
<span id="cb10-17">);</span>
<span id="cb10-18"></span>
<span id="cb10-19">exampleStateDf <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> rock<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">get_state_transition_df</span>(</span>
<span id="cb10-20">  exampleTable</span>
<span id="cb10-21">);</span>
<span id="cb10-22"></span>
<span id="cb10-23">exampleDotCode <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> rock<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">get_state_transition_dot</span>(</span>
<span id="cb10-24">  exampleStateDf</span>
<span id="cb10-25">);</span>
<span id="cb10-26"></span>
<span id="cb10-27">DiagrammeR<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">grViz</span>(exampleDotCode);</span></code></pre></div>
</details>
<div class="cell-output-display">
<div class="grViz html-widget html-fill-item" id="htmlwidget-a82b41e66ddfadb4b73d" style="width:100%;height:464px;"></div>
<script type="application/json" data-for="htmlwidget-a82b41e66ddfadb4b73d">{"x":{"diagram":"digraph {\n  node[fontname=Arial]\n\n  edge[fontname=Arial]\n\n  crush -> dating [label=\"  1    \", penwidth=3];\n  dating -> friends [label=\"  1    \", penwidth=3];\n  friends -> crush [label=\"  1    \", penwidth=3];\n}\n","config":{"engine":"dot","options":null}},"evals":[],"jsHooks":[]}</script>
</div>
</div>
<p>You can then use the states and state transitions for analyzing coding patterns (for example, study what precedes transitions from a given state to another state). For an example in the wild, see <a href="https://doi.org/nxdj">doi.org/nxdj</a>.</p>
</section>
</section>
<section id="getting-started-with-the-rock" class="level1">
<h1>Getting started with the ROCK</h1>
<p>If you would like to try the ROCK, there are roughly four routes.</p>
<p>First, you could just get going and start playing around. If you’re familiar with R, you can install the <code>{rock}</code> package and then you have access to all functions there - see <a href="https://rock.opens.science">rock.opens.science</a> for the PkgDown website with the documentation.</p>
<p>If you’re <em>not</em> familiar with R, you can play with the web apps. There’s a series of Shiny ROCK apps. For example, you can prepare a ROCK source using <a href="https://shiny.rock.science/emerald">Shiny ROCK Emerald</a>. You can then code the source with <a href="https://shiny.rock.science/diamond">Shiny ROCK Diamond</a>. Finally, if you applied network coding, you can view the produced network with <a href="https://shiny.rock.science/crystal">Shiny ROCK Crystal</a>. You can also produce the qualitative data tabel with <a href="https://shiny.rock.science/feldspar">Shiny ROCK Feldspar</a>.</p>
<p>Second, you can start a project. There’s a great template for qualitative projects, the Simple Qualitative Administration For File Organization, Licensing, and Development (SQAFFOLD), available at <a href="https://www.sqaffold.org">www.sqaffold.org</a>. You can find both a workshop and a prepared template there.</p>
<p>Third, there’s a <a href="https://rock.science/workshop/2hr">two hour workshop</a> on the ROCK available, as well as a <a href="https://rock.science/workshop/3hr">three hour workshop</a>. There is also a <a href="https://rockbook.org/rock-tutorial.html">tutorial available in the ROCK book</a>.</p>
<p>Fourth, there’s an <a href="https://doi.org/jrfb">open access article</a> discussing the ROCK standard as well as Epistemic Network Analysis, a way to visualize qualitative data that can be helpful depending on your research question.</p>


</section>


<div id="quarto-appendix" class="default"><section id="footnotes" class="footnotes footnotes-end-of-document"><h2 class="anchored quarto-appendix-heading">Footnotes</h2>

<ol>
<li id="fn1"><p>UIDs are always exactly eight characters, at least until 2177-11-28 13:00:00 UTC, when they become nine characters; see <code>rock::numericToBase30(as.numeric(as.POSIXct("2177-11-28 13:00:00 UTC")) * 100)</code> in R↩︎</p></li>
<li id="fn2"><p>These decisions underlie any software. They are necessary to enable analyses; and at the same time, they constrain what is possible, and have nontrivial epistemological consequences.↩︎</p></li>
<li id="fn3"><p>By default the class identifier for states is <code>state</code>. In theory you could use another class identifier. However, this is discouraged as it means others will not be able to understand your coded sources unless they know which state identifier you used instead.↩︎</p></li>
</ol>
</section></div> ]]></description>
  <category>open science</category>
  <category>research</category>
  <category>qualitative methods</category>
  <category>open standards</category>
  <category>open source</category>
  <guid>https://behaviorchange.eu/posts/2024-12-rock-basics.html</guid>
  <pubDate>Fri, 06 Dec 2024 23:00:00 GMT</pubDate>
</item>
<item>
  <title>Ethical AI Use in Academia</title>
  <dc:creator>Gjalt-Jorn Peters</dc:creator>
  <link>https://behaviorchange.eu/posts/2024-09-ethical-ai-use-in-academia.html</link>
  <description><![CDATA[ 





<p>This blog post describes some considerations around ethical use of artificial intelligence, or in most cases more accurately, stochastic parrots, in academia. I will start by describing use in scientific research, and then discuss use in teaching.</p>
<section id="guidelines-for-ethical-work-in-academia" class="level2">
<h2 class="anchored" data-anchor-id="guidelines-for-ethical-work-in-academia">Guidelines for ethical work in academia</h2>
<p>I will assume that ethical use of AI requires at the very least adherence to the following two sets of guidelines.</p>
<section id="open-science" class="level3">
<h3 class="anchored" data-anchor-id="open-science">Open Science</h3>
<p>Open Science principles have seen widespread adoption by the UN (see the UNESCO recommendation on Open Science) and pretty much every other influential actor and university. Therefore, they can be considered as wordwide parameters for academic work, both research and teaching.</p>
<p>Open Science principles cover many aspects of the scientific endeavour, with various perspectives. Three important ones are those of the UNESCO (<a href="https://bit.ly/unesco-os">see here</a>), the EU (<a href="https://research-and-innovation.ec.europa.eu/strategy/strategy-2020-2024/our-digital-future/open-science_en">see here</a>), and the Netherlands Open Science Program (see <a href="https://www.openscience.nl/sites/open_science/files/media-files/final_npos2030_ambition_document_and_rolling_agenda.pdf">here</a>).</p>
</section>
<section id="unesco" class="level3">
<h3 class="anchored" data-anchor-id="unesco">UNESCO</h3>
<p>UNESCO emphasizes that all infrastructure and products for the scientific endeavour must be open and free. Some aspects they describe are open source software, open hardware, and open science infrastructure. They also list core values and guiding principles. The listed core values are quality and integrity; collective benefit; equity and fairness; and diversity and inclusiveness. The listed core principles are transparency, scrutiny, critique and reproducibility; equality of opportunities; responsibility, respect, and accountability; collaboration, participation, and inclusion; flexibility; and sustainability.</p>
</section>
<section id="eu" class="level3">
<h3 class="anchored" data-anchor-id="eu">EU</h3>
<p>The EU lists a number of notable Open Science practices, including providing immediate and unrestricted open access to scientific publications, research data, models, algorithms, software […]. The <a href="https://openscience.eu/open-science-policy-platform-final-report">EU Open Science Policy Platform</a> also lists eight core areas, often called pillars, of Open Science: 1) rewards and incentives, 2) indicators &amp; next-generation metrics, 3) future of scholarly communications, 3) European Open Science Cloud (EOSC), 5) FAIR data, 6) research integrity, 7) skills &amp; education, 8) citizen science.</p>
</section>
<section id="dutch-open-science-program" class="level3">
<h3 class="anchored" data-anchor-id="dutch-open-science-program">Dutch Open Science Program</h3>
<p>The Dutch Open Science Program defines four core values: Quality and integrity; Collective benefit; Equity and fairness; and Diversity and inclusiveness. They translate these into the following guiding principles: Scientific knowledge is a public good and access to it is a universal right; Scientific outputs and processes must be as open as possible, but as restricted as necessary; Reproducibility and scrutiny are essential to safeguard the quality and integrity of scientific work; Diversity, equity, and inclusiveness are crucial for the success of Open Science; Academic and digital sovereignty must be safeguarded. In this last principle, they explicitly state:</p>
<blockquote class="blockquote">
<p>To guarantee scientific knowledge as a public good for collective benefit, it is important to consider the sustainability, governance, and financial models of scholarly infrastructure, (retention of) copyright and open licensing of scientific work. The risks of becoming more and more dependent on commercial or foreign providers and their terms of use in all stages of the research life cycle asks for open (not-for-profit) alternatives for digital services and regulation.</p>
</blockquote>
</section>
</section>
<section id="the-netherlands-code-of-conduct-for-research-integrity" class="level2">
<h2 class="anchored" data-anchor-id="the-netherlands-code-of-conduct-for-research-integrity">The Netherlands Code of Conduct for Research Integrity</h2>
<p>One thing these key stakeholders in the Open Science landscape have in common is that integrity is a core value. This shows how scientific integrity and open science are intertwined. This becomes even clearer when inspecting the <a href="https://www.nwo.nl/en/netherlands-code-conduct-research-integrity">Netherlands Code of Conduct for Research Integrity</a>. This code of conduct defines five principles: Honesty, Scrupulousness, Transparency, Independence, and Responsibility.</p>
<p>This code of conduct is binding to all Dutch universities, universities of applied science, academic medical centers, funders, and related organizations. Other countries have similar codes of conduct, and the basic tenets will be the same.</p>
<p>For scientists, integrity is not an optional nice to have. At all times, scientists must be transparent, accountable, independent, scrupulousness and responsible.</p>
</section>
<section id="parameters-for-choosing-scientific-infrastructure" class="level2">
<h2 class="anchored" data-anchor-id="parameters-for-choosing-scientific-infrastructure">Parameters for choosing scientific infrastructure</h2>
<p>Both Open Science principles and scientific integrity principles mandate that scientific infrastructure is fully open and transparent (so, open source); that the applications and tools forming this infrastructure are developed in an integreous manner, responsibly and sustainably, and for the collective benefit of mankind; and that academic sovereignty is safeguarded.</p>
<p>The responsibility to consider these principles lies with both the individual scientist and at the institutional level. Institutions must survey their scientific infrastructures (their enterprise architecture choices, so to speak) and plan for phasing out closed (commercial, industry-owned) applications in favour of open science alternatives (open source and community-owned). Individual scientists must carefully evaluate the nature and provenance of any new tools they consider exploring or adopting.</p>
</section>
<section id="requirements-for-using-ai-in-scientific-applications" class="level2">
<h2 class="anchored" data-anchor-id="requirements-for-using-ai-in-scientific-applications">Requirements for using AI in scientific applications</h2>
<p>Applied to uses of AI (which I here use loosely to encompass large language models, other generative AI, and machine learning applications), the following requirements emerge (I use the word ‘tool’ as an umbrella term to encompass all aspects of any AI application, including the software and any underlying models):</p>
<ol type="1">
<li>the tool is fully open source</li>
<li>the provenance of the tool is fully transparent</li>
<li>the tool was developed ethically</li>
<li>the tool can be used sustainably</li>
<li>the tool is controlled by academic or public organizations</li>
</ol>
</section>
<section id="applying-these-requirements-chatgpt-and-openai" class="level2">
<h2 class="anchored" data-anchor-id="applying-these-requirements-chatgpt-and-openai">Applying these requirements: ChatGPT and OpenAI</h2>
<p>These requirements mean that, for example, the generative AI products produced by OpenAI can not be used for scientific work. OpenAI practices pretty much the opposite of openness (see <a href="https://opening-up-chatgpt.github.io">this comparison</a> by <a href="https://markdingemanse.net">Mark Dingemanse</a>). Their tools are not open source, but neither are the procedures they use(d) to develop the tools (i.e.&nbsp;the provenance).</p>
<p>However, investigative journalists revealed that they exploited Kenyan workers to train their large language models; very emotionally taxing, potentially traumatizing work, for excessively low salaries and without proper support (see <a href="https://time.com/6247678/openai-chatgpt-kenya-workers/">here</a>, <a href="https://www.wsj.com/articles/chatgpt-openai-content-abusive-sexually-explicit-harassment-kenya-workers-on-human-workers-cf191483">here</a>, <a href="https://www.theguardian.com/technology/2023/aug/02/ai-chatbot-training-human-toll-content-moderator-meta-openai">here</a>, or <a href="https://slate.com/technology/2023/05/openai-chatgpt-training-kenya-traumatic.html%5D,%20for%20example">here</a>. Without this training, their LLMs would spit out the racist, sexist, violent content that large swaths of the internet consist of.</p>
<p>Keep this crucial human training of a generative AI model in mind; we will come back to this later.</p>
<p>In addition, they knowingly imported works protected by intellectual property law, then refusing to be open about what they ingested ‘to avoid being sued’ (see <a href="https://www.theguardian.com/technology/2024/jan/08/ai-tools-chatgpt-copyrighted-material-openai">here</a>, <a href="https://mindmatters.ai/2024/01/does-chatgpt-depend-on-copyright-violation-to-function/">here</a>, or <a href="https://www.techpolicy.press/chatgpt-and-copyright-the-ultimate-appropriation/">here</a>.</p>
<p>In addition to these unacceptable practices, once constructed, the use of generative AI models is excessively costly in terms of the required energy (and so, harm to the planet; see for example <a href="https://www.theguardian.com/commentisfree/article/2024/may/30/ugly-truth-ai-chatgpt-guzzling-resources-environment">here</a>, <a href="https://dataethics.eu/the-environmental-costs-of-generative-ai/">here</a>.</p>
<p>Using (free or paid) products that were developed with these methods cannot be commensurated with the principles in the scientific code of conduct and the open science principles.</p>
<p>This is true for <em>any</em> use of AI tools developed Big AI / Big Tech by scientists, including seemingly trivial use cases such as summarizing an email, meeting notes, or just for fun. Use of these products creates more value for this industry, an industry that clearly has no regard for the collective benefit of humandkind, planetary health, or intellectual property.</p>
</section>
<section id="epistemology-and-sovereignty" class="level2">
<h2 class="anchored" data-anchor-id="epistemology-and-sovereignty">Epistemology and Sovereignty</h2>
<p>However, specifically when applying such AI tools to the scientific endeavour (not just answering emails, but conceptualizing studies, collecting data, or conducting analyses), there is an important additional problem with using AI tools developed by industry organizations.</p>
<p>One of the reasons why academic sovereignty is so important to safeguard, as set out in the open science principles outlines above, is that scientists’ jobs are epistemic in nature. We produce knowledge, ideally ultimately to make the world a better place. The process of knowledge production is not neutral or objective; it is a subjective endeavour, rife with bias and influenced by politics and human convitions. The transparency and openness mandated by scientific integrity codes of conduct and open science principles partly serve to mitigate this unfortunate truth.</p>
<p>Any scientific enterprise consists of a plethora of decisions: which sampling strategy to employ, which analysis to use, which tools to use, the list goes on and on. Each of these decisions has epistemic implications. More concretely, the tools scientists use shape the way they produce knowledge in a variety of ways.</p>
<p>For example, the fact that the widely used quantitative analysis package SPSS only implemented Cohen’s d in version 27 (released in 2019). Cohen published his landmark book on power analysis and effect sizes in 1977, with a second edition published in 1988. In 1977, SPSS was on version 2; in 1993, version 5 was released, and in 1999, version 10. The fact that Cohen’s d was only included in SPSS in 2019 has considerably slowed down its widespread adoption in the social sciences, and as a consequence, adoption of sample size computation when planning studies.</p>
<p>Similarly, software for qualitative data analyses typically lets users label qualitative data fragments using codes organized hierarchically. This constrains how scientists construe the patterns in the data they analyze to hierarchical structures. For example, the analysis usually results in a code structure; the same code structure for all participants, requiring the assumption that the patterns of interest exist identically in all participants. In addition, Scientists typically do not specify what kind of hierarchical relationship exists between codes. Both characteristics of the used tools fundamentally change the knowledge that is created through those studies.</p>
<p>Both examples show how software fundamentally changes how knowledge is generated in the social sciences. Many things now considered “psychological knowledge” because of quantitative or qualitative research are in fact far from the truth, partly because software implicitly or explicitly favoured certain epistemic alternatives over others.</p>
<p>It is the responsibility of the researcher to be aware of their epistemic aims and keep these in mind when determining their ontological and epistemological stance, the theory to use, the methods to employ, as well as the operational procedures, including whichs tools to use. For example, it is common for researchers to select one analytical software package over another based on the analyses that are supported.</p>
<p>When using AI tools in scientific applications, whatever is produced is determined by the company developing the model. For example, the instructions provided to the Sama workers who trained OpenAI’s ChatGPT to stop spewing out sexual abuse, violence, and other problematic results shaped the responses the system will provide and which are trained out of the system. Any use of this system is constrained by the parameters provided by OpenAI.</p>
<p>In addition to this deliberate influence to determine the system’s output, the system’s input does not represent an unbiased sample of the human mind. This is because online activity differs per age group, country, and with other characteristics; and in addition, OpenAI made a lot of decisions when they decided which sources to ingest and which to ignore.</p>
<p>In other words, OpenAI controls what is returned by their generative AI models. This is the same for other Big AI models. Not only do they have full control over what the models produce, because the models and their development procedures are not fully open, biases cannot be spotted.</p>
<p>Applications of these AI tools in the scientific endeavour fulful an epistemic role; as such, using such tools delegates this responsibility from scientists and universities to exploited workers retraining AIs and their Big AI employers in Silicon Valley. Relocating this epistemic responsibility from academia to industry while simultaneously ‘academy washing’ the efforts seems quite inconsistent with the code of conduct for scientific integrity, as well as with open science principles such as protecting academic sovereignty.</p>


</section>

 ]]></description>
  <category>open science</category>
  <category>ethics</category>
  <category>research</category>
  <category>teaching</category>
  <category>AI</category>
  <guid>https://behaviorchange.eu/posts/2024-09-ethical-ai-use-in-academia.html</guid>
  <pubDate>Fri, 20 Sep 2024 22:00:00 GMT</pubDate>
</item>
<item>
  <title>Open Science Conference Contributions: Pro Tips</title>
  <dc:creator>Gjalt-Jorn Peters</dc:creator>
  <link>https://behaviorchange.eu/posts/2024-08-open-science-conference-contributions-pro-tips.html</link>
  <description><![CDATA[ 





<p>At conferences, people often present slides and/or posters. Ideally, these help interested researchers to find you and your work, so in the old days it was common to bring handouts of your poster or slides for audience members to take - or hand out business cards.</p>
<p>Nowadays, most scientific infrastructure is digital. For example, most professional conferences now use <a href="https://osf.io/meetings">Open Science Framework (OSF) Meetings pages</a> to collect slides and posters so they can be easily found by other researchers.</p>
<p>This creates an awesome opportunity to help people find your slides or poster, link them to related work, and/or make it easier for them to find other slides or powers from the same session.</p>
<section id="osf-meetings" class="level1">
<h1>OSF Meetings</h1>
<p>OSF Meetings is a great resource for sharing conference materials. For a list of OSF meetings pages for Health Psychology conferences, please see <a href="https://hpss.one">https://hpss.one</a>.</p>
<p>Once an OSF Meetings page for a conference has been created, it’s supereasy to add slides or posters:</p>
<ol type="1">
<li>Compose a new email from your OSF account address (no account yet? See the tip in the box below)</li>
<li>Address it to an address like “X-poster@osf.io” or “X-talk@osf.io”, where you replace X with the conference name in the OSF Meetings page URL (e.g.&nbsp;“EHPS2024”)</li>
<li>As the email subject, use the title of your poster or presentation</li>
<li>As the email body, include the abstract</li>
<li>As the attachment, include the PDF of the poster or slide deck</li>
<li>Hit send</li>
</ol>
<div class="callout callout-style-default callout-tip callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Tip: OSF accounts and email
</div>
</div>
<div class="callout-body-container callout-body">
<p><strong>Multiple emails</strong></p>
<p>OSF accounts support multiple emails. You can click your name in the top-right corner; then go to My Profile, and then visit the Account Settings. You can add Alternate emails there (and switch which one to use as primary email, which is where OSF will email you). You can send emails to OSF Meetings accounts from any of your primary or alternate emails.</p>
<p><strong>Creating an account</strong></p>
<p>If you don’t have an OSF account yet, you can also create one at <a href="https://osf.io/register?campaign=&amp;next=https%3A%2F%2Fosf.io%2F&amp;view_only=">https://osf.io/register</a> before sending the email.</p>
</div>
</div>
<p>The Open Science Framework then creates a new repository with the file you sent. That file is then also displayed in the list at the OSF Meetings page.</p>
</section>
<section id="being-ahead-and-in-control-of-things" class="level1">
<h1>Being ahead and in control of things</h1>
<p>Now, the trick is: you can edit that repository like any other OSF repository! This is great, because you can do the following:</p>
<ul>
<li>Use the “wiki” component to link people to other cool resourced: related publications, your Mastodon or other social media profike, your OpenAlex profile, a blog, etc.</li>
<li>Link to other OSF projects or components</li>
<li>If you’re in a symposium, create another repo for that symposium, and then link to each of the contributions’ repo’s</li>
</ul>
<p>But most importantly: you can also update the file later (as long as you do it by uploading a new version of the file, so you won’t be able to change the filename any more).</p>
<p>This means you can do the following:</p>
<ol type="1">
<li>Create a first draft of your slides or poster</li>
<li>Give it a sensible filename (I always use <code>author1--author2---year---title.pdf</code> - I use dashes to separate the components because spaces are best avoided, see <a href="https://github.com/jennybc/how-to-name-files/blob/main/how-to-name-files.pdf">this excellent slide deck</a>) - remember, you <em>won’t</em> be able to change it later!</li>
<li>Email it to the OSF Meetings page for your conference as explained above</li>
<li>Get the URL to the shiny new repo that OSF will create</li>
<li>Include that in your poster or slide deck, ideally with a QR code (see below)</li>
<li>When your poster or slide deck is done, update the file in the OSF repo, et voila!</li>
</ol>
<p>You now have a super-easy way for people to find your slides or poster, plus all the other stuff you want to link them to, <em>and</em> your contribution is easy to find through the conference’s OSF Meetings page! 👌</p>
<p>And as a cherry on the cake, you can request a DOI for the repository! 🍒</p>
<p>That helps people to cite your poster or talk. And finally, the final touch: after about 24 hours, the DOI will have been ‘minted’ (as it’s called) by CrossRef. Once that’s done, you can then generate a ShortDOI for the DOI at <a href="https://shortdoi.org">https://shortdoi.org</a>!</p>
<p>That means you have a better, shorter URL (e.g.&nbsp;<a href="https://doi.org/mh3s">https://doi.org/mh3s</a>), which also makes for a better QR code (fewer, larger blocks, making it easier to scan from a distance)! 🤩</p>
</section>
<section id="creating-qr-codes" class="level1">
<h1>Creating QR Codes</h1>
<p>There are several ways to create a QR code.</p>
<p>For quick and dirty situations, I use the Tab2QR (<a href="https://addons.mozilla.org/firefox/addon/tab2qr/">Firefox</a>, <a href="https://chrome.google.com/webstore/detail/tab2qr/mkfcgekjddmlceifimndhbliepfgnogo">Chrome</a>) browser plugin to create a PNG file.</p>
<p>For more serious situations (e.g.&nbsp;slides or other more ‘high stakes’ situations where I want more control, I use the awesome <a href="https://inkscape.org/">InkScape</a>. There is a great explanation of how to create a QR code with InkScape here: <a href="https://daviesmediadesign.com/how-to-generate-qr-codes-in-inkscape/">https://daviesmediadesign.com/how-to-generate-qr-codes-in-inkscape/</a>.</p>
<p>One advantage of using InkScape is that you get an SVG file, which you can scale up as much as you want without it ever becoming ugly (as you get when enlarging low-resolution images).</p>
<p>A second advantage is that you can set the ‘error correction’; with low error correction, you get a simpler QR code (fewer, larger blocks, making it easier to scan from a distance); but with higher error correction levels, the QR code contains redundancies so it can still be reconstructed if part of it is obstructed when it’s scanned.</p>
<p>And <em>that</em> allows you to insert, for example, a logo in the QR code 🤩</p>
<p>There also exist various websites where you can create QR Codes; you can use search engines to find those. I have no recommendations as I never use them myself 😬</p>
</section>
<section id="a-pro-tip-for-pros" class="level1">
<h1>A pro tip for pros</h1>
<p>Finally, if you’re in a symposium, there’s one last step to really round things off. Before submitting the symposium abstract, you can create an OSF repository for the symposium. You will later link to the separate contributions’ repositories as explained above.</p>
<p>You can then create a DOI for the symposium repo, and then a ShortDOI. And you can then <em>include that in the abstract</em>. This way everybody with the abstract book can easily find your contributions!</p>


</section>

 ]]></description>
  <category>open science</category>
  <guid>https://behaviorchange.eu/posts/2024-08-open-science-conference-contributions-pro-tips.html</guid>
  <pubDate>Thu, 29 Aug 2024 22:00:00 GMT</pubDate>
</item>
<item>
  <title>Code book elements</title>
  <dc:creator>Gjalt-Jorn Peters</dc:creator>
  <link>https://behaviorchange.eu/posts/2024-06-codebook-elements.html</link>
  <description><![CDATA[ 





<p>A codebook specifies the codes used to organize data.</p>
<p>For quantitative data, code books describe what each data series represents, linking the variable names (for rectangular data such as spreadsheets, these are the column names) to more details about the data series’ provenance (for example how those data were obtained, which categories are represented by which values, et cetera).</p>
<p>For qualitative data, such as coded sources from interview studies (e.g., transcribed audio recordings) or systematic reviews (e.g., extracted text fragments), code books describe what each code represents, linking the code identifiers as used in the coded sources to the code label, definition, and coding instructions.</p>
<p>This blog post concerns qualitative code books, and will describe which elements a code book should have and why.</p>
<section id="what-is-a-code" class="level2">
<h2 class="anchored" data-anchor-id="what-is-a-code">What is a code?</h2>
<p>In this blog post, a code is defined as the interface between a theoretical concept and empirical data. The code is used to label bits of a qualitative data source (such as data fragments in a transcribed interview or parts of a text fragment extracted from a scientific article). To fulfill their function of linking a theoretical concept to empirical data, codes have a number of components.</p>
</section>
<section id="code-identifier" class="level2">
<h2 class="anchored" data-anchor-id="code-identifier">Code identifier</h2>
<p>The code identifier is a short sequence of characters that uniquely identifies the code in a project. The identifier (or id for short) is used to label (or annotate or mark) data fragments as being coded with that code. That act signifies the coder’s observation that the data describes or otherwise expressed the theoretical concept that the code represents.</p>
<p>Code identifiers may only consist of lower (<code>[a-z]</code>) and upper case (<code>[A-Z]</code>) Latin letters, Arabic digits (<code>[0-9]</code>), and underscores (<code>_</code>) and must start with a letter. Because code identifiers must be unique, if you use a hierarchical organizational mode for your codes (i.e.&nbsp;tree coding as opposed to flat coding or network coding), it is often a good idea to include an abbreviation for the parent code in the code identifier.</p>
<p>For example, let’s say you have codes for advantages (let’s use code identifier <code>adv</code>) of various holiday destinations (let’s use identifier slugs <code>beach</code> and <code>city</code>). You use holiday destinations as parent codes (or clusters, or themes). You cannot then use the code identifier <code>adv</code> to represent both the advantages of beach holidays and the advantages of city holidays: those refer to different things and so should have unique identifiers. You can use for example <code>beach_adv</code> and <code>city_adv</code> as identifiers so it’s unequivocal what you code a data fragment with.</p>
</section>
<section id="code-label" class="level2">
<h2 class="anchored" data-anchor-id="code-label">Code label</h2>
<p>The code label is the human-readable name for a code. Because identifiers secure the ability to uniquely refer to a code, code labels do not need to be unique. In the above advantage, you <em>could</em> use the code label <code>Advantages</code> for both <code>beach_adv</code> and <code>city_adv</code>. However, this would still be messy; future you (and other researchers) will probably not be very grateful for that particular decision.</p>
<p>Code labels have no rules; they just have to be short. You can describe the concept that the code represents more fully in the code description.</p>
</section>
<section id="code-description" class="level2">
<h2 class="anchored" data-anchor-id="code-description">Code description</h2>
<p>The code description describes the concept that the code represent in as much detail as you want. Or, more accurately, maybe more detail than you want, but as much details as possible and useful. If you give somebody the code label and this description, they should obtain the same representation as you have. This means it’s important to be careful to avoid tacit knowledge, jargon, and other terms that themselves may be heterogeneously defined by people.</p>
<p>In qualitative work, it is often said that the coding phase represents the analysis of the data. That work does not consist of applying codes; that work consists of iterative improvement of the codes, as specified in the code book. It can be tempting to pay lip service to the code book once you and your project team have consensus about the codes you want to use. After all, documenting things is time consuming; and by making your assumptions about your shared representations explicit, it may turn out you didn’t quite agree as much as you thought beforehand. This prompts more discussion and maybe changes of the code description.</p>
<p>It is important to keep in mind that that is a feature, not a bug. The result of those discussions will be a comprehensive description of the theoretical concept you are interested in; one that is clear to all project members as well, hopefully, to others. The product of the coding exercise is the development of the theoretical concepts the codes represent, and that work is done through code explication.</p>
<p>For example, imagine a project where we are interested in why people have the sleeping patterns they do. One code may be Descriptive norms (i.e.&nbsp;that’s the code label), with identifier <code>descriptive_norms</code>, and its description could be:</p>
<blockquote class="blockquote">
<p>Descriptive norms are defined as somebody’s perception of the behavior of others in their environment (so-called “social referents”). Note that this is different from injunctive norms, which refer to somebody’s perception of the approval or disapproval of social referents.</p>
</blockquote>
<p>(For more information about descriptive norms, see <a href="https://psycore.one/descriptiveNorms_73dnt5zp_">https://psycore.one/descriptiveNorms_73dnt5zp</a>.)</p>
</section>
<section id="coding-instructions" class="level2">
<h2 class="anchored" data-anchor-id="coding-instructions">Coding instructions</h2>
<p>The coding instructions differ from the code description in that they describe when to apply the code, when not to apply the code, and which other codes to consider before deciding which code to apply. Coding instructions therefore do not describe the concept the code represents (as code descriptions do) but instead provide specific instructions to follow when evaluating data fragments as ones you potentially want to code with a code.</p>
<p>An example from the hypothetical project into sleeping patterns would be the instruction for the <code>descriptive_norms</code> code:</p>
<blockquote class="blockquote">
<p>Apply this code when a data fragment expresses that somebody engages in certain sleeping pattern-related behavior because (they believe) other people do the same. This code should not be applied to people going to bed earlier or later in response to <em>other</em> behaviors of others (e.g.&nbsp;going to bed later because housemates play music until a late time).</p>
</blockquote>
<p>Contrast this with the description: this is much more focused on the operational act of coding, not on defining what the code represents.</p>
</section>
<section id="examples" class="level2">
<h2 class="anchored" data-anchor-id="examples">Examples</h2>
<p>Code development often happens at the hand of concrete examples: data fragments that you decide do or do not “fall within” a code. Similarly, concrete examples can help people to understand what your code represents “in the real world” and what it doesn’t. Together with the label, description, and coding instructions, the examples furnish the reader (which includes future you) with the full understanding of what the code represents, both conceptually and in its interface to empirical data.</p>
<p>Examples fall within four categories, defined by two characteristics. An example can be either an edge case (where whether the code should be applied or not is not directly obvious) or a core case (where the code should clearly be applied or not applied); and an example can be either a match (where the code should be applied) or a mismatch (where the code should not be applied).</p>
<p>The four categories of code examples, then, are core matches, core mismatches, edge matches, and edge mismatches. By having a few examples of each, you make it clear to everybody what exactly you mean by the code (and what you don’t mean).</p>
</section>
<section id="a-machine-readable-code-book-specification" class="level2">
<h2 class="anchored" data-anchor-id="a-machine-readable-code-book-specification">A machine-readable code book specification</h2>
<p>There’s a standard for machine readable code book specifications. There is an example at <a href="https://rock.science/codebook">https://rock.science/codebook</a>.</p>


</section>

 ]]></description>
  <category>methodology</category>
  <category>qualitative methods</category>
  <guid>https://behaviorchange.eu/posts/2024-06-codebook-elements.html</guid>
  <pubDate>Mon, 10 Jun 2024 22:00:00 GMT</pubDate>
</item>
<item>
  <title>How to create a Tabulated Open Questionnaire (TOQ) specification</title>
  <dc:creator>Gjalt-Jorn Peters</dc:creator>
  <link>https://behaviorchange.eu/posts/2024-04-how-to-create-a-tabulated-open-questionnaire-specification.html</link>
  <description><![CDATA[ 





<p>In this brief blog post, I describe a number of steps you could take to create a Tabulated Open Questionnaire specification.</p>
<p>Tabulated Open Questionnaire specifications (or TOQ specs for short) are questionnaires described in an open standard. This allows converting them to Serialized Open Questionnaire specifications (or SOQ specs for short), which in term can be included in open repositories such as <a href="https://operationalizations.com">https://operationalizations.com</a>. For more background information, you can check the brief blog post / Mastodon thread <a href="https://sciencer.eu/posts/2024-03-towards-interoperability-for-psychological-data.html">Towards interoperability for psychological data</a>.</p>
<p>The examples in this blog post are taken from the TOQ specs for the questionnaires with UQID URLs <a href="https://operationalizations.com/questionnaire/eq60eng_7rs8g3bd">https://operationalizations.com/questionnaire/eq60eng_7rs8g3bd</a> and <a href="https://operationalizations.com/questionnaire/bfi10eng_7sp9mjx3">https://operationalizations.com/questionnaire/bfi10eng_7sp9mjx3</a>.</p>
<p>This post starts with a step-by-step guide to specifying a new questionnaire. That guide is followed by a full description of the spreadsheet format.</p>
<section id="specifying-a-new-questionnaire" class="level2">
<h2 class="anchored" data-anchor-id="specifying-a-new-questionnaire">Specifying a new questionnaire</h2>
<p>If you want to specify a new questionnaire in TOQ format, first copy an empty TOQ specification, for example that at <a href="https://measurement.rocks/toq-spec-example">https://measurement.rocks/toq-spec-example</a> (click the File menu and select “Make a copy”).</p>
<section id="the-questionnaire-label" class="level3">
<h3 class="anchored" data-anchor-id="the-questionnaire-label">The questionnaire label</h3>
<p>Then, in the <code>metadata_content</code> column, in the row that has “label” in the <code>metadata_field</code> column, type the name of the questionnaire. The recommended format has the name, followed by, between parentheses, the language as an ISO-639-3 code and the number of items.</p>
</section>
<section id="the-questionnaire-language" class="level3">
<h3 class="anchored" data-anchor-id="the-questionnaire-language">The questionnaire language</h3>
<p>In the <code>language_ISO639_3</code> row, specify the questionnaire’s language. This is the language used for the verbal stimuli presented to participants, for example in the questions, in the introduction, or in any other way.</p>
<p>Specify the language as an ISO 639 3 standard code. You can find these at <a href="https://iso639-3.sil.org/code_tables/639/data">https://iso639-3.sil.org/code_tables/639/data</a>, through <a href="https://en.wikipedia.org/wiki/ISO_639-3">https://en.wikipedia.org/wiki/ISO_639-3</a>, or through a variety of other resources.</p>
</section>
<section id="the-unique-questionnaire-identifier" class="level3">
<h3 class="anchored" data-anchor-id="the-unique-questionnaire-identifier">The Unique Questionnaire Identifier</h3>
<p>Then, produce a Unique Questionnaire Identifier (UQID) for the questionnaire. This consists of two parts. The first part is called the <code>uqid_prefix</code>, and you create it yourself. It can only contain Latin letters (a-z and A-Z) and Arabic digits (0-9) and must always start with a Latin letter. The recommended format is a short acronym for the questionnaire, followed by the number of items, and then the ISO 639-3 language code for the language, for example “eq60eng” and “bfi10eng”.</p>
<p>The second part is a string of characters as produced by the <code>{psyverse}</code> R package (see the manual at <a href="https://psyverse.opens.science">https://psyverse.opens.science</a>) or the Elsa Shiny App (see <a href="https://opens.science/apps/elsa">https://opens.science/apps/elsa</a>. So either visit Elsa or fire up R and create the full UQID.</p>
</section>
<section id="the-measured-constructs" class="level3">
<h3 class="anchored" data-anchor-id="the-measured-constructs">The measured construct(s)</h3>
<p>Another important field to provide content for is the <code>ucids</code> field. Here, you can specify a URL linking to a comprehensive construct definition using it’s Unique Construct Identifier (or UCID), such as <a href="https://psycore.one/personality_79n2fh4s">https://psycore.one/personality_79n2fh4s</a> or <a href="https://psycore.one/expAttitude_expectation_73dnt5z1">https://psycore.one/expAttitude_expectation_73dnt5z1</a>. Make sure to use the URL format (unlike for the UQID), so that the construct definition is immediately available (without people having to find out which construct repository it’s stored in).</p>
<p>This is a field that can be repeated on multiple rows; the <code>metadata_field</code> content is <code>ucids</code> on every row, and by specifying a different UCID URL in the <code>metadata_content</code> column, you can specify multiple constructs that you think should be measurable with the questionnaire you’re adding.</p>
<p>If there is no construct definition stored yet, you can either add it yourself (see <a href="https://doiu.org/jnjp">https://doi.org/jnjp</a>), contact others and add it together, or leave <code>ucids</code> field empty.</p>
</section>
<section id="sources" class="level3">
<h3 class="anchored" data-anchor-id="sources">Sources</h3>
<p>Often, one or more articles or websites will be available with more background information on the questionnaire. You can specify these in content on rows identified with <code>sources</code> in the <code>metadata_field</code> column. Like <code>ucids</code> rows, the <code>sources</code> rows can appear multiple times, so you can specify multiple sources.</p>
<p>If you specify scientific sources, try to find the Digital Object Identifier (DOI) for the source, and enter it at <a href="https://shortdoi.org">https://shortdoi.org</a> to obtain the corresponding ShortDOI. ShortDOIs are very handy short unique identifiers for articles, chapters, and other objects with a DOI. ShortDOIs have a number of advantages over DOIs, such as being short 😬 – but also only consisting of Latin letters [a-z] and Arabic digits, [0-9], which means they can be (part of) filenames or column names in datasets (unlike DOIs, which contain slashes (<code>/</code>) and can contain other special characters). Therefore, ShortDOIs are used by the <code>{metabefor}</code> system for systematic reviews to unique identify sources (such as articles), which is another reason to use them here, too.</p>
<p>Regardless of whether you managed to obtain a ShortDOI, enter the <code>sources</code> as URLs, for example <a href="https://doi.org/djzd32">https://doi.org/djzd32</a>, <a href="https://doi.org/dbh">https://doi.org/dbh</a> (how awesome is that?!? A three-character unique identifier for an article 🤩), or something like <a href="https://measures.scienceofbehaviorchange.org/measuredetails/da946282-a16c-46cf-a67c-40a2eb47d398">https://measures.scienceofbehaviorchange.org/measuredetails/da946282-a16c-46cf-a67c-40a2eb47d398</a>.</p>
</section>
<section id="ontology-references" class="level3">
<h3 class="anchored" data-anchor-id="ontology-references">Ontology references</h3>
<p>In some cases, you may want to refer to an ontology, for example to a representation of the construct or the measurement instrument. You can use <code>ontologyRefs</code> for this. Like rows for <code>ucids</code> and <code>sources</code>, rows for <code>ontologyRefs</code> can be repeated to specify multiple references. And like for those two fields, make sure that you enter a valid URL that resolves to the relevant element in the relevant ontology.</p>
</section>
<section id="the-questionnaire-description" class="level3">
<h3 class="anchored" data-anchor-id="the-questionnaire-description">The questionnaire description</h3>
<p>In the <code>description</code> row, you can briefly describe the questionnaire. There are dedicated fields for more specific information, so you don’t have to go into too much detail (see below).</p>
</section>
<section id="the-measurement-theory" class="level3">
<h3 class="anchored" data-anchor-id="the-measurement-theory">The measurement theory</h3>
<p>A measurement instrument like a questionnaire is always based on a theory of how the measurement instrument works. This often involves the target construct and how the answers people give to the questions somehow crucially depend on that target construct. You can specify this as the <code>measurement_theory</code>. If you don’t know the measurement theory, you can also specify that (and then hopefully you can add it in a later version).</p>
<p>Note that while, if we take the idea that questionnaires can measure constructs seriously, the measurement theory underlying the questionnaire is very important, when adding questionnaires to a repository, specifying the measurement theory in detail is not your main responsibility. Also, many questionnaires are developed without corresponding measurement theories. Although that is a problematic practice, it is also often simply a fact of life, and should not prohibit those questionnaires from being added to an open repository.</p>
<p>Therefore, your primary task here is to be as transparent as you can. If as far as you know there is no source describing the measurement theory, it’s ok to just say that. If there might be sources but you don’t have time to look, similarly, just say that. And if you suspect the measurement theory to be described in a given source, but you don’t have time to read it, it’s also ok to say that.</p>
<p>Often, the important thing is to specify the questionnaire and its items in a machine-readable format (in the TOQ spec). That will also facilitate further work on the questionnaire’s measurement theory. There will be ample opportunity to specify that later.</p>
</section>
<section id="the-measurement-scope" class="level3">
<h3 class="anchored" data-anchor-id="the-measurement-scope">The measurement scope</h3>
<p>Questionnaires (and other measurement instruments) are developed with certain constrainsts. For example, thermometers generally only work on Earth and in a narrow range of temperatures (only -40 to 50 degrees celcius). Similarly, questionnaires also only work for specific populations in specific circumstances. This scope is described here.</p>
<p>For example, if a questionnaire has only been studied among a very narrow, specific population (for example, first- or second-year psychology students in the Netherlands), it is unknown how it will perform in different populations (for example, students in other studies; or students in other countries; or the general population in the Netherlands; or the general population in other countries; or parents with one or more children; or people who are retired; or adolescents; etc).</p>
<p>For scope, like for measurement theory, the most important thing is to maximize transparency. Describe what you know. Doing this already enables others to build on this, for example by adding extra information they have about the scope where we know the questionnaire can be used.</p>
</section>
<section id="the-composition-administration-and-aggregation" class="level3">
<h3 class="anchored" data-anchor-id="the-composition-administration-and-aggregation">The composition, administration, and aggregation</h3>
<p>TOQ specs were developed as a machine-readable (and so, interoperable) format for questionnaires. They contain the most important parts: the questions (and ‘flanking’ content). However, the way these components need to be composed into one questionnaire can differ. For example, if a certain font needs to be used or a certain paper color, or the items need to be presented in a certain way, this can be specified in the <code>composition_instructions</code>.</p>
<p>Sometimes, there are specific procedures or requirements for the administration of a questionnaire (i.e.&nbsp;the procedure used to present the questionnaire to participants and register the responses). This can be provided as <code>administration_procedure</code>.</p>
<p>Often, the data series produced by participant responses to each item are somehow aggregated into one or several (if there are subscales) data series. For some questionnaires, this can mean averaging the data series for all items; for others, it can mean summing them; sometimes, some items have to be inverted first (e.g.&nbsp;by subtracting the data series from a number, e.g.&nbsp;for 5-point likert scales scores 1-5, subtracting every value from 6), and sometimes, a questionnaire has multiple subscales, and those are aggregated to arrive at multiple final estimates. Whatever the procedure is, it can be described here in the <code>aggregation_procedure_narrative</code>.</p>
</section>
<section id="toq-spec-version-date-and-authors" class="level3">
<h3 class="anchored" data-anchor-id="toq-spec-version-date-and-authors">TOQ spec version, date, and authors</h3>
<p>The version of the TOQ specification is stored in metadata field <code>toq_specification_version</code>. Note that this is the version of the TOQ specification format, <em>not</em> of the contents, which is specified in the <code>version</code> metadata field. Four other fields that start with <code>toq_specification_</code> <em>do</em> refer to the contents: the <code>date</code> field and three repeated fields with author information. Specifically, these are <code>toq_specification_date</code> for the date of the TOQ specification (this occurs only once) and <code>toq_specification_authorNames</code>, <code>toq_specification_authorOrcids</code>, and <code>toq_specification_authorContacts</code>, each of which is a field that can repeat on multiple rows if multiple people specified the TOQ. The authors of the questionnaire specified in the TOQ spec can be found through the <code>sources</code>.</p>
</section>
<section id="precursors" class="level3">
<h3 class="anchored" data-anchor-id="precursors">Precursors</h3>
<p>Precursors are questionnaires that preceded the questionnaire. These can be earlier versions or otherwise related questionnaires. These are stored in metadata field <code>toq_specification_precursors</code>, which can be repeated if there are multiple precursors. These should be the UQIDs of the relevant specifications, including the full URL (i.e.&nbsp;starting with the repository’s URL).</p>
</section>
<section id="comments" class="level3">
<h3 class="anchored" data-anchor-id="comments">Comments</h3>
<p>If you have any additional comment,s you can specify them as <code>comments</code>.</p>
</section>
</section>
<section id="worksheets-in-a-toq-spec" class="level2">
<h2 class="anchored" data-anchor-id="worksheets-in-a-toq-spec">Worksheets in a TOQ spec</h2>
<p>A TOQ spec is a spreadsheet with six worksheets (each will be explained in detail below):</p>
<ul>
<li><code>metadata</code>: metadata about the questionnaire</li>
<li><code>items</code>: the items in the questionnaire</li>
<li><code>response_registration_templates</code>: templates that describe how participants’ responses are registered</li>
<li><code>adapters</code>: information about how adapters should convert the questionnaire to their corresponding formats</li>
<li><code>flanking_content</code>: “non-item questionnaire content”, such as an introduction or closing message</li>
<li><code>content_types</code>: the content types that can use used to specify the stimuli that comprise the questionnaire</li>
</ul>
</section>
<section id="the-metadata-worksheet" class="level2">
<h2 class="anchored" data-anchor-id="the-metadata-worksheet">The <code>metadata</code> worksheet</h2>
<p>The <code>metadata</code> worksheet has two columns. The first is named <code>metadata_field</code> and the second is named <code>metadata_content</code>. In each row, the <code>metadata_content</code> cell holds information that is identified by the <code>metadata_field</code> column.</p>
<p>Each field (as identified in the <code>metadata_field</code> column) can only occur once (i.e.&nbsp;on one row), with three exceptions: the <code>ucids</code> field, the <code>sources</code> field, and the <code>ontologyRefs</code> field can occur multiple times.</p>
<p>The metadata fields that can occur are the following:</p>
<ul>
<li><code>label</code>: A human readable label (title or name) for the questionnaire. The recommended format is “Name (Language, # items)”, for example “Empathy Quotient (English, 60 items)” and “Big Factor Index (English, 10 items)”.</li>
<li><code>uqid_prefix</code>: The prefix of the Unique Questionnaire Identifier (UQID). This can only contain Latin letters (a-z and A-Z) and Arabic digits (0-9) and must always start with a Latin letter. The recommended format is a short acronym for the questionnaire, followed by the number of items, and then the ISO639-3 language code for the language, for example “eq60eng” and “bfi10eng”.</li>
<li><code>uqid</code>: The full UQID, which consists of the UQID prefix, an underscore, and a string of characters as produced by the <code>{psyverse}</code> R package (see the manual at <a href="https://psyverse.opens.science">https://psyverse.opens.science</a>) or the Elsa Shiny App (see <a href="https://opens.science/apps/elsa">https://opens.science/apps/elsa</a>.</li>
<li><code>ucids</code>: One or more Unique Construct Identifiers (UCIDs), in the URL format (for example <a href="https://psycore.one/personality_79n2fh4s">https://psycore.one/personality_79n2fh4s</a>). These UCID URLs link to comprehensive construct definitions of the construct(s) that this questionnaire measures.</li>
<li><code>sources</code>: One or more URLs to source(s) with more information about this questionnaire, preferably using the ShortDOI format for articles, for example <a href="https://doi.org/djzd32">https://doi.org/djzd32</a> and <a href="https://doi.org/dbh">https://doi.org/dbh</a>.</li>
<li><code>ontologyRefs</code>: One or more URLs to relevant entities (or, classes, attributes, etc) in an ontology.</li>
<li><code>description</code>: A description of the questionnaire.</li>
<li><code>language_ISO639_3</code>: The language of the questionnaire, as ISO639-3 code (e.g., to list the 10 most spoken languages: “eng” for English, “zho” for Chinese, “hin” for Hindi, “spa” for Spanish, “fra” for French, and “ara” for Arabic, “ben” for Bengali, “por” for Portuguese, “rus” for Russian, and “urd” for Urdu).</li>
<li><code>measurement_theory</code>: The measurement theory underlying the measurement instrument. This explains the assumptions and theory that valid measurement relies on.</li>
<li><code>measurement_scope</code>: The scope of the measurement instrument. Just like most thermometers only work on Earth and in a narrow range of temperatures (only -40 to 50 degrees celcius), questionnaire also only work for specific populations in specific circumstances. This scope is described here.</li>
<li><code>composition_instructions</code>: Instructions for composing the measurement instrument from the items and the flanking content. This can be, for example, something like “Typically, the items are presented in a matrix/array format (with the question texts in rows and the response options in four columns).”</li>
<li><code>administration_procedure</code>: The procedure used to administer the measurement instrument. For example, whether participants can be disturbed while completing the questionnaire; whether there is any additional instruction that has to be provided verbally by the administrator; whether the participant has to be in quiet surroundings or whether that doesn’t matter; etc.</li>
<li><code>aggregation_procedure_narrative</code>: A narrative description of the aggregation procedure for the data series formed by participants’ responses to the items. For example, responses to some items may need to be transformed (for example, subtracting the resulting value from another value, to invert them); and the data series can be averaged or summed, etc.</li>
<li><code>toq_specification_version</code>: The version of the TOQ specification - note that this is the version of the TOQ specification format, <em>not</em> of the contents, which is specified in the <code>version</code> metadata field.</li>
<li><code>toq_specification_date</code>: The date of the TOQ specification</li>
<li><code>toq_specification_authorNames</code>, <code>toq_specification_authorOrcids</code> and <code>toq_specification_authorContacts</code>: The names, Orcids, and contact information for the people specifying the TOQ. Note that the authors of the questionnaire specified in the TOQ spec can be found through the <code>sources</code>.</li>
<li><code>toq_specification_precursors</code>: Questionnaires that preceded the questionnaire, e.g.&nbsp;earlier versions or otherwise related questionnaires. These should be the UQIDs of the relevant specifications, including the full URL (i.e.&nbsp;starting with the repository’s URL).</li>
<li><code>version</code>: The version of the specification. For example, you may want to update information about the measurement scope as you learn more about how the measurement instrument works / performs. Note that if you change items, you cannot assume that you don’t change the nature of the measurement instrument, so you should update the identifiers (and so, technically, you are creating a new measurement instrument).</li>
<li><code>comments</code>: Any comments you may want to make.</li>
</ul>
</section>
<section id="the-items-worksheet" class="level2">
<h2 class="anchored" data-anchor-id="the-items-worksheet">The <code>items</code> worksheet</h2>
<p>The <code>items</code> worksheet has the following columns:</p>
<ul>
<li><code>sequence</code>: Numbers that indicate the order of the items in the questionnaire.</li>
<li><code>uiid_prefix</code>: The prefix to the Unique Item Identifier (UIID). This prefix is a more or less human-readable component of the UIID the helps with quick identification of the item. The prefix does not have to be unique; the other components of the UIID takes care of that. The UIID prefix can only contain Latin letters (a-z and A-Z) and Arabic digits (0-9), and must always start with a Latin letter. The recommended format is to use one word (or two, or three; as few as possible) to describe the item content. Examples are <code>reserved</code> and <code>enterConverse</code>.</li>
<li><code>uiid</code>: The item’s full Unique Item Identifier (UIID). The recommended format is to start with the questionnaire’s UQID prefix, followed by an underscore, followed by the UIID prefix, followed by an underscore, and a string of characters as produced by the <code>{psyverse}</code> R package (see the manual at <a href="https://psyverse.opens.science">https://psyverse.opens.science</a>) or the Elsa Shiny App (see <a href="https://opens.science/apps/elsa">https://opens.science/apps/elsa</a>. Examples are <code>bfi10eng_reserved_7sp9pd51</code> and <code>eq60eng_enterConverse_7rs8rnq8</code>.</li>
<li><code>question_text</code>: The text of the question, in the format specified in the <code>content_type</code> column. Together with the item’s response registration template (see the <code>rrTemplateId</code> column) the question text forms the item.</li>
<li><code>rrTemplateId</code>: The item’s response registration template. This is a response registration template identifier of a response registration template described in the <code>response_registration_templates</code> worksheet.</li>
<li><code>content_type</code>: The content type of the question text. At present, this can only be “html” (for HTML), “text” (for plain text), and “markdown” (for Markdown formatted text). In principle “image”, “audio” and “video” can also be used, but at present, none of the adapters process those content types yet.</li>
<li><code>subscale</code>: Optionally, a subscale of the item. These can be referred to in the content for the <code>aggregation_procedure_narrative</code> field in the <code>metadata</code> worksheet, to enable aggregating subsets of items.</li>
<li><code>comments</code>: Any comments you may want to make.</li>
</ul>
</section>
<section id="the-response_registration_templates-worksheet" class="level2">
<h2 class="anchored" data-anchor-id="the-response_registration_templates-worksheet">The <code>response_registration_templates</code> worksheet</h2>
<p>This worksheet has the following columns:</p>
<ul>
<li><code>template_id</code>: The response registration template identifier. All response options with the same response registration template identifier together form that response registration template. Response registration template identifiers can only contain Latin letters (a-z and A-Z) and Arabic digits (0-9), and must always start with a Latin letter.</li>
<li><code>response_option_content</code>: The content of the response option, in the format specified in the <code>content_type</code> column.</li>
<li><code>identifier</code>: The response option identifier within the response registration template. Response option identifiers can only contain Latin letters (a-z and A-Z) and Arabic digits (0-9), and must always start with a Latin letter. This will be used by SOQ or TOQ adapters and can be used to unequivocally and efficiently refer to a response option in a questionnaire.</li>
<li><code>content_type</code>: The content type of the response option. At present, this can only be “html” (for HTML), “text” (for plain text), and “markdown” (for Markdown formatted text). In principle “image”, “audio” and “video” can also be used, but at present, none of the adapters process those content types yet.</li>
<li><code>response_option_sequence</code>: Numbers that indicate the order of the response options in each item.</li>
<li><code>response_option_value</code>: The value to register when this response option represented participant’s response.</li>
</ul>
</section>
<section id="the-adapters-worksheet" class="level2">
<h2 class="anchored" data-anchor-id="the-adapters-worksheet">The <code>adapters</code> worksheet</h2>
<p>This worksheet contains information for SOQ and TOQ adapters: software that can convert a questionnaire specified in a SOQ or TOQ specification to another format. This enabled automatic creation of files that can be imported into software for data collection, such as <a href="https://www.limesurvey.org/">LimeSurvey</a> or <a href="https://formr.org/">{formr}</a>, or even closed science (paywalled) software such as Qualtrics.</p>
<p>Each row in this worksheet specifies a directive for an adapter by specifying the field name and the contents. These directives are read by adapters to parametrize their conversion of this questionnaire.</p>
<p>This worksheet has the following columns:</p>
<ul>
<li><code>target_format</code>: The format for which this row specifies a directive. This is used by the relevant adapter when it reads this worksheets and collects its directives. As such, this has to be meaningful given how the adapter is written (i.e.&nbsp;it has to look for rows with these values).</li>
<li><code>target_wikidata_id</code>: If available, a wikidata identifier for the format to which the adapter will export.</li>
<li><code>uiid</code>: Either a star (<code>*</code>) to indicate that this directive pertains to all items, or the UIID to which this directive pertains.</li>
<li><code>field</code>: The field for which this row specifies a directive.</li>
<li><code>content</code>: The directive’s content.</li>
</ul>
</section>
<section id="the-flanking_content-worksheet" class="level2">
<h2 class="anchored" data-anchor-id="the-flanking_content-worksheet">The <code>flanking_content</code> worksheet</h2>
<p>This worksheet has the following columns:</p>
<ul>
<li><code>position</code>: Whether the content should appear <code>before</code> or <code>after</code> the items.</li>
<li><code>sequence</code>: If multiple bits of content are specified, their order.</li>
<li><code>content</code>: The content to present.</li>
<li><code>content_type</code>: The content type (see the <code>content_types</code> worksheet).</li>
</ul>
</section>
<section id="the-content_types-worksheet" class="level2">
<h2 class="anchored" data-anchor-id="the-content_types-worksheet">The <code>content_types</code> worksheet</h2>
<p>This worksheet enables processing different content types in different ways. Its has the following columns:</p>
<ul>
<li><code>id</code>: The content type identifier.</li>
<li><code>comments</code>: Any comments about this content type.</li>
</ul>


</section>

 ]]></description>
  <category>methodology</category>
  <category>measurement</category>
  <guid>https://behaviorchange.eu/posts/2024-04-how-to-create-a-tabulated-open-questionnaire-specification.html</guid>
  <pubDate>Wed, 10 Apr 2024 22:00:00 GMT</pubDate>
</item>
<item>
  <title>Towards interoperability for psychological data</title>
  <dc:creator>Gjalt-Jorn Peters</dc:creator>
  <link>https://behaviorchange.eu/posts/2024-03-towards-interoperability-for-psychological-data.html</link>
  <description><![CDATA[ 





<p>This is a Mastodon thread. <a href="https://mastodon.nl/@matherion/112135038387897653" class="external" target="_blank">The original thread is available here</a>:</p>
<iframe src="https://mastodon.nl/@matherion/112135038387897653/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" allowfullscreen="allowfullscreen">
</iframe>
<script src="https://mastodon.nl/embed.js" async="async"></script>
<hr>
<p>From Monday the 18th of March 2024 to Thursday the 21st of March 2024, <a href="https://crutzen.net">Rik</a> and me had a writing week in Leuven ✍️🍻</p>
<p>During this week, Rik worked on a Narrative Response Model for a self-efficacy item (more later, for example in our EHPS symposium in Cascais 💃), and I worked on a repository for psychological questionnaires ✅</p>
<p>I’ll explain a bit in this Mastodon Thread and blog post (at <a href="https://sciencer.eu/posts/2024-03-towards-interoperability-for-psychological-data.html">https://sciencer.eu/posts/2024-03-towards-interoperability-for-psychological-data.html</a>).</p>
<p><img src="https://behaviorchange.eu/img/kermit-the-frog-typing.gif" class="img-fluid" alt="A GIF of Kermit the frog typing."></p>
<hr>
<p>Loads of repositories exist already, so let me explain what’s so different about this one and why I’m currently so stoked about the progress 🤩</p>
<p>So, Rik and me are working on trying to work our way out of the theory crisis and the measurement crisis. I try to summarize this in <a href="https://sciencer.eu/posts/2022-12-knowing-what-we-re-talking-about--mastodon-thread.html">https://sciencer.eu/posts/2022-12-knowing-what-we-re-talking-about–mastodon-thread.html</a>.</p>
<p><img src="https://behaviorchange.eu/img/the-big-lebowski-jeff-bridges.gif" class="img-fluid" alt="Jeff Bridges in The Big Lebowski sitting in a car, looking stoked."></p>
<hr>
<p>Part of our proposed solution is using comprehensive construct definitions that have Unique Construct Identifiers, UCIDs (also see <a href="https://doi.org/jnjp">https://doi.org/jnjp</a>).</p>
<p>However, these have limited value if they cannot be linked to measurement and data.</p>
<p>In addition, most existing repositories for questionnaires (‘scales’) suffer from a number of problems that I’ve been aching to address for a while now:</p>
<hr>
<p>1️⃣ They are often not open infrastructure. The database and interface are often not publicly available for anybody to copy, adjust and run.</p>
<p>2️⃣ They often do not link to unique construct identifiers that are built on open infrastructure (although they often have system-specific unique identifiers).</p>
<p>3️⃣ They often are not openly machine-readable (for example with an API).</p>
<p>4️⃣ They often do not allow easy conversion of a questionnaire to import them into open software.</p>
<hr>
<p>This new repository is built upon a number of existing open tools:</p>
<p>1️⃣ The same Quarto website that underlies the Psychological Construct Repository (<a href="https://psycore.one">https://psycore.one</a>);</p>
<p>2️⃣ Open standards for specifying questionnaires in machine-readable formats, with identifiers for questionnaires and single items;</p>
<p>3️⃣ The {psyverse} R package to work with the specifications we designed (<a href="https://psyverse.opens.science">https://psyverse.opens.science</a>);</p>
<p>4️⃣ The {limonaid} R package for working with LimeSurvey (<a href="https://limonaid.opens.science">https://limonaid.opens.science</a>).</p>
<hr>
<p>All this is wrapped together to create the repository of which the first so-fresh-it’s-not-even-beta version is live at <a href="https://operationalizations.com">https://operationalizations.com</a>.</p>
<p>The little ecosystem consists of a number of things (spread over two Mastodon posts, sorry 🤷):</p>
<p>👉 A way to set up a spreadsheet to specify questionnaire content in a Tabulated Open Questionnaire specification (a TOQ spec).</p>
<p>👉 A way to assign Unique Questionnaire Identifiers (UQIDs) to questionnaires.</p>
<hr>
<p>👉 A way to convert a TOQ into a Serialized Open Questionnaire specification (a SOQ spec) in YAML format.</p>
<p>👉 A Quarto site that embeds a set of TOQs in a website with an interface for humans and one for machines.</p>
<p>👉 A Shiny app that, when you provide a UQID, imports the SOQ spec from that repository and produces a LimeSurvey group file (a .lsg file) that can then be directly imported into LimeSurvey.</p>
<hr>
<p>Because TOQs and SOQs contain a field to specify one or more Unique Construct Identifiers (UCIDs), it’s always clear what a questionnaire (and so, an item) measures.</p>
<p>This means it’s relatively easy to devise a convention for naming columns or for the code book with metadata that accompanies a dataset that makes datasets fully machine readable. It will make it possible to automatically determine for every column in a dataset which construct the data in that column pertains to.</p>
<hr>
<p>That makes it possible for psychological data to become FAIR. The Interoperability was always challenging, but now within reach.</p>
<p>This also enables accumulation of evidence. As Individual Participant Data meta-analyses are becoming more common, being able to automatically and reliably determine which constructs are represented how in a dataset can really help accelerate evidence synthesis.</p>
<hr>
<p>Also, although I now wrote an adapter for LimeSurvey (as it’s an excellent open source application for online studies), adapters can also be written for other software (such as {formr} or even for closed science software such as Qualtrics).</p>
<p>This means repositories can contain links to questionnaires in a variety of formats.</p>
<p>To use the LimeSurvey adapter, I created 💅LAFOQS🦊: the LimeSurvey Adapter For Open Questionnaire Specifications: <a href="https://measurement.shinyapps.io/LAFOQS/">https://measurement.shinyapps.io/LAFOQS/</a>.</p>
<hr>
<p>All in all, this is a puzzle piece that I think can really help us move forward. And it all works! There are two examples. One is the BFI-10, which has:</p>
<p>✅ a TOQ specification: <a href="https://docs.google.com/spreadsheets/d/1atGTOs9RGTISDxiSH0IfSH5fDPYaDhnJEdbXqWqDRto">https://docs.google.com/spreadsheets/d/1atGTOs9RGTISDxiSH0IfSH5fDPYaDhnJEdbXqWqDRto</a>;</p>
<p>✅ a ❄️UQID: bfi10eng_7sp9mjx3;</p>
<p>✅ a SOQ specification: <a href="https://codeberg.org/measurement/operationalizations-website/src/branch/main/data/questionnaires/bfi10eng_7sp9mjx3.yml">https://codeberg.org/measurement/operationalizations-website/src/branch/main/data/questionnaires/bfi10eng_7sp9mjx3.yml</a>;</p>
<p>✅ a page in the repo: <a href="https://operationalizations.com/questionnaire/bfi10eng_7sp9mjx3" class="external">https://operationalizations.com/questionnaire/bfi10eng_7sp9mjx3</a>;</p>
<p>✅ if you throw the UQID in 💅LAFOQS🦊, a LimeSurvey group that you can directly import 🤩</p>
<hr>
<p>And of course there’s the overview page with the questionnaires at <a href="https://operationalizations.com/questionnaires">https://operationalizations.com/questionnaires</a>. Well, for now, with <em>two</em> questionnaires 😬</p>
<p>I still need to do a lot on work on all of this. For example, the repository doesn’t show the information very usefully yet. And of course we need to start adding questionnaires. But as a proof of concept I think this is pretty cool 🤩</p>
<p>So, a work week well spent I’d say. Time to celebrate! 🥳🍻</p>
<p><img src="https://behaviorchange.eu/img/leuven_20240321_184703.jpg" class="img-fluid" alt="A photograph of Rik and GJ enjoying a beer."></p>
<hr>
<p>PS: the beer symbolizes both this week in Leuven (or Louvain; and the beer is called Louve, which is close enough for barbarians like us 😬), and the 💅LAFOQS🦊 Shiny App, since the can shows a fox, and 💅LAFOQS🦊 is, obviously, also a fox 😬</p>
<p>(Ow, Rik found out that Louve is apparently the name for a female wolf 🐺 Ah well, close enough 😬)</p>



 ]]></description>
  <category>mastodon</category>
  <category>methodology</category>
  <category>measurement</category>
  <guid>https://behaviorchange.eu/posts/2024-03-towards-interoperability-for-psychological-data.html</guid>
  <pubDate>Wed, 20 Mar 2024 23:00:00 GMT</pubDate>
</item>
<item>
  <title>You (or your university) don’t own your data</title>
  <dc:creator>Gjalt-Jorn Peters</dc:creator>
  <link>https://behaviorchange.eu/posts/2024-02-you-or-your-university-dont-own-your-data.html</link>
  <description><![CDATA[ 





<p>This is a Mastodon thread. <a href="https://mastodon.nl/@matherion/111872838950111317" class="external" target="_blank">The original thread is available here</a>:</p>
<iframe src="https://mastodon.nl/@matherion/111872838950111317/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" allowfullscreen="allowfullscreen">
</iframe>
<script src="https://mastodon.nl/embed.js" async="async"></script>
<hr>
<p>This is a brief thread/blog post about ownership of data. I created it because of efficiency (basically, I find myself explaining this a lot). Apparently, there are a lot of misunderstandings around data ownership. Here, I hope to correct some misunderstandings.</p>
<p><img src="https://behaviorchange.eu/img/all-your-base-all-your-base-are-belong-to-us.gif" class="img-fluid" alt="A GIF of the 'Cats' character from the eighties video game Zero Wing, saying 'All your base are belong to us'."></p>
<hr>
<p>The TL;DR: the only data you own are your personal data as per the GDPR. If you process others’ personal data, you don’t own them, but just temporarily process them. Data that are not personal data (i.e.&nbsp;that are not about a person) are about the world and cannot be owned. All data falls within one of these two categories, and as such, only personal data is somebody’s property. Your institution (or you) cannot own anonymous data.</p>
<section id="section" class="level2">
<h2 class="anchored" data-anchor-id="section"><img src="https://behaviorchange.eu/img/lets-just-own-it-married-to-medicine.gif" class="img-fluid" alt="A GIF of a woman saying 'Let's just own it' (from the series 'Married to Medicine')"></h2>
<p>Data about the world are facts, and facts cannot be owned: they are defined as existing in the public domain. For example, you cannot claim to own the fact that the earth revolves around the sun. For more information see <a href="https://copyrightalliance.org/faqs/whats-not-protected-by-copyright-law/">https://copyrightalliance.org/faqs/whats-not-protected-by-copyright-law/</a>.</p>
<hr>
<p>If you conduct a qualitative study, audio or video recordings can easily be considered personal data (not <em>always</em>, but it’s generally best — and easiest — to assume they will be). This means you, as a temporary data processor, can only do with the data what you agreed to with the participants whose data you’re processing (except in some edge cases where your grounds for processing the data are not consent).</p>
<hr>
<p>Once the data are transcribed into a text file, the data will often still enable identifying the participant who was interviewed (with <em>reasonable</em> effort; arguably, anything can be identified when infinite resource are thrown at it). That makes everything in the transcript about that participant personal data as per the GDPR, and so you cannot own those data.</p>
<hr>
<p>In most cases, it’s possible to anonymize such data. Campbell, Javorka, Engleton, Fishwick, Gregory and Goodman-Williams describe a systematic approach to this end in <a href="https://doi.org/k7fm">https://doi.org/k7fm</a>.</p>
<hr>
<p>For qualitative data, it is possible the interviewees could claim the copyright for the narrative they provided. In that case that would still disallow you from making the data public. Therefore, it’s important to provide for this in your informed consent, which then serves three purposes: the ethical informed consent as per most ethical committees’ requirements; the consent as per the GDPR; and the agreement to deposit the anonymized data in the public domain.</p>
<p><img src="https://behaviorchange.eu/img/now-i-too-shall-share-my-story-with-you-vldl.gif" class="img-fluid" alt="A GIF of a man and a woman dressed in historic or fantasy outfits, with the man saying -perhaps proclaiming- 'Now I too shall share my story with you!')"></p>
<hr>
<p>To make it easy to create such informed consent forms, Szilvia Zorgo, James Green and me created an example informed consent insert that covers this. It is freely available at <a href="https://behaviorchange.eu/files/open-consent.odt">https://behaviorchange.eu/files/open-consent.odt</a>.</p>
<hr>
<p>Especially in the social sciencs, quantitative data are much easier. This is because of the low quality of our “measurement instruments” (the scare quotes reflecting the question of whether it’s reasonable to consider this measurement).</p>
<p><img src="https://behaviorchange.eu/img/measuring-things-is-fun---blair-realty-group-brg.gif" class="img-fluid" alt="A GIF of a woman and a men, the woman holding a measuring tape and intensely looking in the camera, saying 'Measuring things is fun. Now go measure.'"></p>
<hr>
<p>The large measurement error, and often even larger transient measurement error (<a href="https://doi.org/mkqn">https://doi.org/mkqn</a>), are usually problematic, decimating effect sizes and requiring considerable sample sizes — but when it comes to identifiability, they are a boon.</p>
<hr>
<p>A spreadsheet with answers to, for example, three measurement instruments of psychological constructs contains no personal data (the low reliability of these instruments means that even if people were to complete the same questions again and you’d use those results to try to identify them, you wouldn’t be able to locate their row in the spreadsheet since their answers will differ).</p>
<hr>
<p>Therefore, for quantitative data, the best approach is to collect anonymous data: data that cannot be linked to the persons providing the data. In this respect, the concept of k-anonymity comes in handy (see <a href="https://en.wikipedia.org/wiki/K-anonymity">https://en.wikipedia.org/wiki/K-anonymity</a>).</p>
<p>K-anonimity means that there are always at least <em>k</em> participants that share any combination of data points.</p>
<hr>
<p>For example, if you collected age, gender, and region, if you store age as date of birth, your sample would need to be pretty huge to no longer have unique dates of birth. If you store age in years at the time of data collection, you achieve k-anonimity with smaller datasets; and if you store age in decades at the time of date collection (0-10, 11-20, 21-30, etc), dozens of participants suffice.</p>
<p><img src="https://behaviorchange.eu/img/im-still-young-at-heart-leroy-brown.gif" class="img-fluid" alt="A GIF of a man with a grey beard and wearing a shirt with big cats (cheetas or something like that) and bright neon pink suspenders, saying 'I'm still young at heart'."></p>
<hr>
<p>The same goes for gender: if you measure gender in three categories (non-binary, female, and male), you achieve k-anonymity with smaller sample sizes than if you provide an open text field where participants can specify their gender (tempting to say “how they identify”, but that might be confusing in this context).</p>
<hr>
<p>Of course, you can always include such an open question and then have an anonymization procedure where you categorize the answers into a smaller number of categories, for example using the :rstats: {gendercoder} R package (unfortunately not on CRAN: see <a href="https://docs.ropensci.org/gendercoder">https://docs.ropensci.org/gendercoder</a>).</p>
<hr>
<p>Whether participants can be identified also depends on your sampling frame. If you sample from “people in the Netherlands who use drugs and are between 20 and 40 years of age”, your sampling frame is much larger than if you sample from “primary school teachers in Valkenburg” (a village in the south of the Netherlands that has four primary school; also see <a href="https://nltimes.nl/2023/12/01/valkenburg-among-10-trendiest-destinations-worldwide-bookingcom-survey">https://nltimes.nl/2023/12/01/valkenburg-among-10-trendiest-destinations-worldwide-bookingcom-survey</a>).</p>
<hr>
<p>After all, the larger the group you sample from, the harder it is to identify any group member given a set of attributes. There are many more people with red hair among “people in the Netherlands who use drugs and are between 20 and 40 years of age” than among “primary school teachers in Valkenburg”.</p>
<p>For more details on anonymization, see <a href="https://behaviorchange.eu/posts/2019-09-a-poor-person-s-guide-to-open-sciencing-gdpr-compliant-data-management.html">https://behaviorchange.eu/posts/2019-09-a-poor-person-s-guide-to-open-sciencing-gdpr-compliant-data-management.html</a>.</p>
<hr>
<p>Once anonymized, a dataset contains no personal data, so it only contains facts about the world. Therefore, you or your university cannot claim to own those data.</p>
<p>(And if it <em>had</em> contained personal data, you or your university still wouldn’t have to be able to claim to own those data; personal data are only owned by the relevant person, and at most can be temporarily processed by others.)</p>
<p><img src="https://behaviorchange.eu/img/lets-not-get-greedy-jason-bateman.gif" class="img-fluid" alt="A GIF of a man, Jason Bateman, saying 'let's not get greedy'."></p>
<hr>
<p>There is one exception to this relatively simple state of affairs. First, a person or university (or other organization) can invoke what we’ll call “database right”: this is an instrument created to make it worthwhile for commercial organizations to invest in compiling large datasets (e.g.&nbsp;the yellow pages, <a href="https://en.wikipedia.org/wiki/Yellow_pages">https://en.wikipedia.org/wiki/Yellow_pages</a>).</p>
<hr>
<p>This means you claim to own a specific configuration of data that otherwise consists in the public domain. While this is a perfectly legal instrument, invoking it is incompatible with open science principles, and in the case of the Netherlands, with the Dutch Code of Conduct on Research Integrity, which mandates transparency. As such, this exception remains, um, academic 😬</p>
<hr>
<p>I hope this helps to clarify why you never need to engage in discussions with your university administrators, or with external organizations, about “who owns the data”. The data cannot be owned by anybody other than the person who provided the data, and then <em>only</em> if the data are personal data as per the GDPR (i.e.&nbsp;identiable data).</p>
<hr>
<p>As a final note: the fact that data exist in the public domain and cannot be owned does <em>not</em> mandate publication of the data. An organization is under no obligation to make data they collect public, even if they cannot claim to own the data. There are no obstacled to publishing the data, but that doesn’t mean organizations are forced to do so.</p>
<hr>
<p>This imperative follows from scientific ethical integrity principles, as well as the implicit contract entered into with participants: that the data will be used for scientific research (which includes the ability for close scrutiny by other researchers and replicability of any analyses done on the data).</p>
<hr>
<p>Researchers and universities have to make all data they collect public (well not <em>all</em>: following the principle “as open as possible, as closed as necessary), not because the legislator forces them, but because they adhere to standards of scientific integrity.</p>
<p><img src="https://behaviorchange.eu/img/you-are-a-good-person-and-you-want-to-do-whats-right.gif" class="img-fluid" alt="A GIF of a person standing in front of a whiteboard with, looking into the camera and pointing to the viewer, saying 'You are a good person and you want to do what's right.'"></p>


</section>

 ]]></description>
  <category>mastodon</category>
  <guid>https://behaviorchange.eu/posts/2024-02-you-or-your-university-dont-own-your-data.html</guid>
  <pubDate>Sat, 03 Feb 2024 23:00:00 GMT</pubDate>
</item>
<item>
  <title>Preregistering Systematic Reviews</title>
  <dc:creator>Gjalt-Jorn Peters</dc:creator>
  <link>https://behaviorchange.eu/posts/2023-09-Preregistering-SysRevs.html</link>
  <description><![CDATA[ 





<p>This is a Mastodon thread. <a href="https://mastodon.nl/@matherion/111190532196969574" class="external" target="_blank">The original thread is available here</a>:</p>
<iframe src="https://mastodon.nl/@matherion/111190532196969574/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" allowfullscreen="allowfullscreen">
</iframe>
<script src="https://mastodon.nl/embed.js" async="async"></script>
<hr>
<p>The article about the generalized preregistration form for systematic reviews is finally out (see <a href="https://doi.org/kt87" class="external" target="_blank">doi.org/kt87</a>)! 🥳</p>
<p>It was published on the 22nd of September 2023 - and the process start culminated in that preregistration form and article started on the 9th of February in 2018, so over five years ago 😶</p>
<hr>
<p>It started when I supervised the Bachelor’s thesis of Tim Vincken. He was doing a systematic review about the home advantage: the idea that soccer teams have an advantage when they play at home versus in their adversary’s city.</p>
<p>We wanted to preregister this systematic review, but we found out that no preregistration form or service existed that we could use 😱</p>
<p><img src="https://behaviorchange.eu/img/penguins-with-soccer-ball.gif" class="img-fluid" alt="A GIF of a penguin balancing on a soccer ball, but 'tackled' when another penguin comes sliding along."></p>
<hr>
<p>That was of course not acceptable, so I reached out on Twitter.*</p>
<ul>
<li>For those who haven’t brushed up on their history lately: Twitter used to be a social media service, back in the days. It has since been bought by a billionaire and expertly destroyed. An unexpected side effect of this was widescale migration to the fediverse, revealing this development to be a blessing in disguise.</li>
</ul>
<p><img src="https://behaviorchange.eu/img/syrev-prereg-form-1.png" class="img-fluid" alt="A screenshot from Twitter showing a post asking about registration forms."></p>
<hr>
<p>That yielded some responses, but not many - until it was retweeted by James Coyne, a much bigger account.</p>
<p>This prompted more discussion, and at some point Nieky van Veggel chimed in. He is a senior lecturer in Animal Health; quite a different field, but he had run into the same problem. He got Brian Nosek’s attention, and he put us in touch with Matt Spitzer.</p>
<p>That initiated the development of the form that just got published.</p>
<p><img src="https://behaviorchange.eu/img/syrev-prereg-form-2.png" class="img-fluid" alt="A screenshot from Twitter showing a retweet and an ensuing dialogue as described in the toot."></p>
<hr>
<p>We then gathered a large group of people with expertise in doing systematic reviews, and set out to develop a (pre)registration form that was as inclusive as possible (both to disciplines as well as systematic review types).</p>
<p>In this process, Olmo van den Akker (<a href="https://www.ovdakker.com/" class="external" target="_blank">https://www.ovdakker.com/</a>) became the de facto leader, and he expertly guided the project to the finish line.</p>
<p><img src="https://behaviorchange.eu/img/we-love-every-single-one-of-them-enabuns.gif" class="img-fluid" alt="A GIF of a person saying 'we love every single one of them'."></p>
<hr>
<p>The result is a form that is relatively elaborate, but with items formulated such that they should fit for reviews in fields such as chemistry, law, and psychology, and review types such as scoping reviews, qualitative systematic reviews, and meta-analyses.</p>
<p>The form has six sections:</p>
<p>1️⃣ Metadata; 2️⃣ Methods; 3️⃣ Search Strategy; 4️⃣ Screening; 5️⃣ Extraction; and 6️⃣ Synthesis and Quality Assessment.</p>
<hr>
<p>The Metadata section just contains, well, metadata.</p>
<p>The Methods section describes the general methodological constraints of the review: the review type, stages, start and end date, background, research questions, hypotheses and/or expectations, software, funding, conflicts of interest, and how to deal with overlapping authorships.</p>
<hr>
<p>The form only uses open fields, i.e.&nbsp;no ‘categorical choices’. We figured that if we want to be inclusive, we shouldn’t impose whatever we happen to think is an exhaustive list of options.</p>
<p>In the Search Strategy section, you list the databases and interfaces, how you plan to deal with grey literature, your query, in- and exclusion criteria, search strategy validation, how you’ll deal with contacting authors (to get missing info), and search expiration and search repetition planning.</p>
<p><img src="https://behaviorchange.eu/img/looking-searching.gif" class="img-fluid" alt="A GIF of a person searching for something."></p>
<hr>
<p>The Screening section has 10 items, covering things like screening stages, screened fields and masking, exclusion criteria, instructions, reliability and reconciliation, and sampling.</p>
<p>The idea is that as much as possible, if you complete these items comprehensively, this should be all that screeners need to start screening.</p>
<p><img src="https://behaviorchange.eu/img/productivity-thomas-frank.gif" class="img-fluid" alt="A GIF of a person typing on a keyboard with their head seemingly in a computer screen."></p>
<hr>
<p>After screening, it’s time to extract stuff! In the Extraction section, you specify which entities you extract, in which stages, with which instructions, as well as whether extractors will be masked and how you deal with reliability and reconciliation.</p>
<p>In my experience developing good definitions of the entities to be extracted is one of the hardest and most time-consuming parts of doing a systematic review - so this section may be one of the hardest to complete.</p>
<hr>
<p>And then, finally, you specify your plans for Synthesis and Quality Assessment.</p>
<p>Here, you describe your planned data transformations, your missing data plans, your data validation plans, quality assessment plans, and of course your synthesis plans, as well as your inference criteria (if you have any), synthesist masking, reliability, and reconciliation, and finally, planned publication bias analyses and sensitivity analyses.</p>
<hr>
<p>And that’s it. Ths whole form has 65 items. Yes, 65. That’s a feature, not a bug. The form was designed to enable pretty comprehensive documentation of your plans.</p>
<p>And as a pleasant side-effect, that means the form lends itself well to supporting the planning of your systematic review.</p>
<p>For example, it prompts you to think about whether you want to mask screeners from some fields (common), and/or extractors (rare), and/or synthesists (almost never done).</p>
<hr>
<p>The form is, however, designed to be applicable to all disciplines and review types. More specialized forms will generally contain items that are more pertinent to your discipline or review type. However, for many combinations, those may not exist yet.</p>
<p>One of the nice things about this form is that it’s available in the {preregr} R package (see <a href="https://preregr.opens.science" class="external" target="_blank">https://preregr.opens.science</a>).</p>
<p>That means you can easily adjust it - or create an R Markdown template to fill out.</p>
<hr>
<p>You can do that with:</p>
<p>preregr::form_to_rmd_template(‘genSysRev_v1’, file = ‘C:/path/to/file.Rmd’);</p>
<p>That loads the form and writes it to the file you specified. You can put that in a Git repository (for example) and then complete it. Once you and all co-authors agree on the contents, you can move the contents to the form on the OSF, if you want.</p>
<hr>
<p>Or, alternatively, you can render the {preregr} form to an HTML file. It will then also include both the form specification and the form’s contents as machine-readable embedded JSON.</p>
<p>Or both, of course.</p>
<p>The Center for Open Science posted a blog post about the form at <a href="https://www.cos.io/blog/generalized-systematic-review-template-joins-osf-registries" class="external" target="_blank">https://www.cos.io/blog/generalized-systematic-review-template-joins-osf-registries</a>, and I recorded a talk about the form which is available at <a href="https://youtu.be/qB3n9u4VnY0?feature=shared" class="external" target="_blank">https://youtu.be/qB3n9u4VnY0?feature=shared</a>.</p>
<hr>
<p>And of course, the form itself is also always available at <a href="https://doi.org/kt87" class="external" target="_blank">doi.org/kt87</a>.</p>
<p>I hope this thread was useful!</p>
<p>If you plan to do a systematic review, feel free to get in touch - I’m still working on {metabefor} and R package to help with Modular, Extensible, Transparent, Accessible, Bootstrapped Extraction For Systematic Reviews (i.e.&nbsp;METABEFor), and recently created the Extraction Validation App, EVA: <a href="https://opens.science/apps/eva" class="external" target="_blank">https://opens.science/apps/eva</a>. Not documented well yet, though - so as I said, get in touch 🙂</p>



 ]]></description>
  <category>mastodon</category>
  <guid>https://behaviorchange.eu/posts/2023-09-Preregistering-SysRevs.html</guid>
  <pubDate>Thu, 05 Oct 2023 22:00:00 GMT</pubDate>
</item>
<item>
  <title>A-bit-of-X-odus</title>
  <dc:creator>Gjalt-Jorn Peters</dc:creator>
  <link>https://behaviorchange.eu/posts/2023-08-A-bit-of-X-odus.html</link>
  <description><![CDATA[ 





<p>This is a Mastodon thread. <a href="https://mastodon.nl/@matherion/110955184229185117" class="external" target="_blank">The original thread is available here</a>:</p>
<iframe src="https://mastodon.nl/@matherion/110955184229185117/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" allowfullscreen="allowfullscreen">
</iframe>
<script src="https://mastodon.nl/embed.js" async="async"></script>
<hr>
<p>I finally full-on joined the X-odus and left X (ex-Twitter).</p>
<p>It’s a bit painful (I met a lot of nice people there, and it really helped build my network), but I just can’t justify contributing to it in any way any more.</p>
<p><img src="https://behaviorchange.eu/img/matherion_old_twitter_profile.png" class="img-fluid" alt="A screenshot of my old Twitter profile, with a cool banner saying 'Trans rights are human rights' by Kathryn Gibes."></p>
<hr>
<p>The straw was that I saw that (already in July apparently), Elon Musk proclaimed that “cis” would be considered a slur on Twitter henceforth:</p>
<p><a href="https://web.archive.org/web/20230708033233/https://www.forbes.com/sites/kimelsesser/2023/07/02/elon-musk-deems-cis-a-twitter-slurheres-why-its-is-so-polarizing/">https://web.archive.org/web/20230708033233/https://www.forbes.com/sites/kimelsesser/2023/07/02/elon-musk-deems-cis-a-twitter-slurheres-why-its-is-so-polarizing/</a></p>
<hr>
<p>I’ve barely used Twitter since November, only for some retweeting of initiatives I endorse (e.g.&nbsp;open science-related promo etc).</p>
<p>But the point is, by sticking around, it makes Twitter seem more alive than it is. Finally leaving for real and only using Mastodon shows the X-odus more clearly.</p>
<hr>
<p>And of course, Mastodon represents the social medium to use if you care about open science; as the UNESCO points out, it’s important that the infrastructure we as scientists use is community-owned and open, not corporation-owned and subject to the CEO’s whims.</p>
<p>Since I use social media to discuss science, meet colleagues, network, and disseminate to the general audience and colleagues, I can’t keep using X with integrity.</p>
<p><a href="https://unesdoc.unesco.org/ark:/48223/pf0000379949.locale=en">https://unesdoc.unesco.org/ark:/48223/pf0000379949.locale=en</a></p>
<p><img src="https://behaviorchange.eu/img/unesco-open-science-cover.png" class="img-fluid" alt="THe cover of the UNESCO Open Science Recommendation."></p>
<hr>
<p>So farewell little blue bird. It was fun while it lasted. But I’m with the elephant now 🐘🤩</p>
<p><img src="https://behaviorchange.eu/img/twitter-deactivate-account.png" class="img-fluid" alt="A screenshot from the Twitter/X site showing the dialog where you delete your account."></p>



 ]]></description>
  <category>mastodon</category>
  <guid>https://behaviorchange.eu/posts/2023-08-A-bit-of-X-odus.html</guid>
  <pubDate>Fri, 25 Aug 2023 22:00:00 GMT</pubDate>
</item>
<item>
  <title>Using Git in Shiny Apps</title>
  <dc:creator>Gjalt-Jorn Peters</dc:creator>
  <link>https://behaviorchange.eu/posts/2023-08-Using-Git-in-Shiny-Apps.html</link>
  <description><![CDATA[ 





<p>This is a brief blog post to document how you can use Git in a Shiny app.</p>
<p>In August 2023, <a href="https://crutzen.net" class="external" target="_blank">Rik</a> and me were revising our “Knowing What We’re Talking About: Facilitating Decentralized, Unequivocal Publication of and Reference to Psychological Construct Definitions and Instructions” article (preprinted here)<span class="external" target="_blank">https://doi.org/jnjp</span>. If you find the topic interesting, I have a <a href="https://sciencer.eu/posts/2022-12-knowing-what-we-re-talking-about--mastodon-thread.html" class="external" target="_blank">brief blog post here</a> and the same in <a href="https://mastodon.nl/@matherion/109445312966461935" class="external" target="_blank">a Mastodon thread here</a> - but this post is about one part of Constructor, the Shiny app we created to accompany this article.</p>
<p>Constructor allows people to import or create a DCT specification. The app allows people to edit the DCT specification, shows a human-readable overview, and produces the YAML code used to store DCT specifications. Finally, it allows people to upload their DCT specification to the <a href="https://psycore.one" class="external" target="_blank">PsyCoRe.one repository</a>.</p>
<p>These uploads work with a git repository: the PsyCoRe.one repository is a <a href="https://gohugo.io" class="external" target="_blank">Hugo website</a>, and the overview table with constructs, as well as the other pages (e.g.&nbsp;each construct’s overview page) are produced by Hugo as it loops over a series of YAML files (that hold each DCT specification). The rebuilding of this Hugo site is triggered by a webhook called by the Git forge (currently GitLab, but we may migrate to Codeberg at some point).</p>
<p>For all this magic to work, Constructor has to commit each newly added DCT specification to the Git repository holding the PsyCoRe.one website. For another project I’m involved in and that uses almost the same back-end infrastructure, <a href="https://opendrawer.org/" class="external" target="_blank">OpenDrawer</a>, <a href="https://mastodon.social/@ajamesgreen" class="external" target="_blank">James Green</a> and <a href="https://sciences.social/@cillianmchugh" class="external" target="_blank">Cillian McHugh</a> added such Git functionality. So, I respectfully, um, <em>borrowed</em> ir for Constructor. However, this broke down at some point (for both Shiny apps). In the process of fixing it, I ended up switching to <a href="https://cran.r-project.org/package=gert" class="external" target="_blank"><code>{gert}</code></a>. However, even there I didn’t get it to work. After trying for an hour or two, I decided to ask on Mastodon whether maybe somebody had solved this already (see <a href="https://mastodon.nl/@matherion/110940761673443777" class="external" target="_blank">this post</a>). <a href="https://mastodon.nl/@gaborcsardi@fosstodon.org" class="external" target="_blank">Gabor Csardi</a>, one of the amazing developers at Posit, responded. And finally, after about four more hours, I got it working.</p>
<p>I wrote this brief blog post to explain how. The thing that was going wrong turned out to be that I set the Personal Access Token (PAT) as an environment variable using:</p>
<div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb1-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">Sys.setenv</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">PSYCORE_PSYCONSTRUCTOR_GITLAB_PAT =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"token"</span>);</span></code></pre></div>
<p>(But then with <code>token</code> replaced with the token.)</p>
<p>However, it turned out (after those four more hours of troubleshooting) that Shiny doesn’t succesfully bundle this environment variable when it pushes the image of the Shiny app to the ShinyApps.io server…</p>
<p>I found out by throwing a message, warning, and error in the Shiny app:</p>
<div class="sourceCode" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb2-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">message</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"PAT:["</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">Sys.getenv</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"PSYCORE_PSYCONSTRUCTOR_GITLAB_PAT"</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"]"</span>));</span>
<span id="cb2-2"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">warning</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"PAT:["</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">Sys.getenv</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"PSYCORE_PSYCONSTRUCTOR_GITLAB_PAT"</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"]"</span>));</span>
<span id="cb2-3"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">stop</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"PAT:["</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">Sys.getenv</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"PSYCORE_PSYCONSTRUCTOR_GITLAB_PAT"</span>), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"]"</span>));</span></code></pre></div>
<p>This showed me in the logs that that environment variable was empty.</p>
<p>Now I use <code>.Renviron</code>, located in the project directory, and added to the <code>.gitignore</code> file since it contains the token. Its contents are simply:</p>
<div class="sourceCode" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode txt code-with-copy"><code class="sourceCode default"><span id="cb3-1">PSYCORE_PSYCONSTRUCTOR_GITLAB_PAT=token</span></code></pre></div>
<p>(Again, with <code>token</code> replaced with the token.)</p>
<p>For a bit more information about this, see <a href="https://support.posit.co/hc/en-us/articles/360047157094-Managing-R-with-Rprofile-Renviron-Rprofile-site-Renviron-site-rsession-conf-and-repos-conf" class="external" target="_blank">this Posit post</a> as well as <a href="https://stackoverflow.com/questions/39084284/how-to-pass-environment-variables-to-shinyapps" class="external" target="_blank">this reply by Hadley</a> to a Stack Overflow question.</p>
<p>The full code fragment (for the entire application, see <a href="https://codeberg.org/explicate/constructor-shiny-app" class="external" target="_blank">this Codeberg repo</a>) for cloning a git repo, adding a file, staging it, committing it, and pushing to the remote git repo is:</p>
<div class="sourceCode" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb4-1"><span class="do" style="color: #5E5E5E;
background-color: null;
font-style: italic;">###-------------------------------------------------------------------------</span></span>
<span id="cb4-2"><span class="do" style="color: #5E5E5E;
background-color: null;
font-style: italic;">### Git repo and credential configuration</span></span>
<span id="cb4-3"><span class="do" style="color: #5E5E5E;
background-color: null;
font-style: italic;">###-------------------------------------------------------------------------</span></span>
<span id="cb4-4"></span>
<span id="cb4-5">userName <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"PsyConstructor"</span>;</span>
<span id="cb4-6">userMail <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"psyconstructor@psycore.one"</span>;</span>
<span id="cb4-7">gitForge <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"https://gitlab.com"</span>;</span>
<span id="cb4-8">repoUrl <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(gitForge, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"/psy-ops/psycore-one.git"</span>);</span>
<span id="cb4-9"></span>
<span id="cb4-10"><span class="do" style="color: #5E5E5E;
background-color: null;
font-style: italic;">###-------------------------------------------------------------------------</span></span>
<span id="cb4-11"><span class="do" style="color: #5E5E5E;
background-color: null;
font-style: italic;">### Clone git repo</span></span>
<span id="cb4-12"><span class="do" style="color: #5E5E5E;
background-color: null;
font-style: italic;">###-------------------------------------------------------------------------</span></span>
<span id="cb4-13"></span>
<span id="cb4-14">tempPath <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tempfile</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">pattern =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"gertTempRepo-"</span>);</span>
<span id="cb4-15"></span>
<span id="cb4-16">tempRepo <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> gert<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">git_clone</span>(</span>
<span id="cb4-17">  repoUrl,</span>
<span id="cb4-18">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">path =</span> tempPath</span>
<span id="cb4-19">);</span>
<span id="cb4-20"></span>
<span id="cb4-21"><span class="do" style="color: #5E5E5E;
background-color: null;
font-style: italic;">### I know it's weird and seems ill-advised, but without this, it doesn't work.</span></span>
<span id="cb4-22"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">setwd</span>(tempPath);</span>
<span id="cb4-23"></span>
<span id="cb4-24"><span class="do" style="color: #5E5E5E;
background-color: null;
font-style: italic;">### New approach: project should create a .gitignored file called</span></span>
<span id="cb4-25"><span class="do" style="color: #5E5E5E;
background-color: null;
font-style: italic;">### ".Renviron" and which should contain a row:</span></span>
<span id="cb4-26"><span class="do" style="color: #5E5E5E;
background-color: null;
font-style: italic;">### PSYCORE_PSYCONSTRUCTOR_GITLAB_PAT=token</span></span>
<span id="cb4-27"><span class="do" style="color: #5E5E5E;
background-color: null;
font-style: italic;">### where "token" is the token. Note that upon a new clone, you will</span></span>
<span id="cb4-28"><span class="do" style="color: #5E5E5E;
background-color: null;
font-style: italic;">### have to create this file again.</span></span>
<span id="cb4-29"></span>
<span id="cb4-30"><span class="do" style="color: #5E5E5E;
background-color: null;
font-style: italic;">### So _don't_ set environment variables with `Sys.setenv()`!</span></span>
<span id="cb4-31"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Sys.getenv("PSYCORE_PSYCONSTRUCTOR_GITLAB_PAT");</span></span>
<span id="cb4-32"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Sys.setenv(PSYCORE_PSYCONSTRUCTOR_GITLAB_PAT = "token");</span></span>
<span id="cb4-33"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Sys.getenv("PSYCORE_CONSTRUCTOR_CODEBERG_PAT");</span></span>
<span id="cb4-34"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Sys.setenv(PSYCORE_CONSTRUCTOR_CODEBERG_PAT = "token");</span></span>
<span id="cb4-35"></span>
<span id="cb4-36"><span class="do" style="color: #5E5E5E;
background-color: null;
font-style: italic;">### https://fosstodon.org/@gaborcsardi/110940818918930959</span></span>
<span id="cb4-37"></span>
<span id="cb4-38"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">system</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"git config --global credential.helper cache"</span>));</span>
<span id="cb4-39"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">system</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"git config --global credential.username "</span>, userName));</span>
<span id="cb4-40"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">system</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"git config --local user.name "</span>, userName));</span>
<span id="cb4-41"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">system</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"git config --local user.email "</span>, userMail));</span>
<span id="cb4-42">gitcreds<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">gitcreds_approve</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">list</span>(</span>
<span id="cb4-43">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">url =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"https://gitlab.com"</span>,</span>
<span id="cb4-44">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#url = "https://codeberg.org",</span></span>
<span id="cb4-45">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">username =</span> userName,</span>
<span id="cb4-46">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#password = Sys.getenv("PSYCORE_CONSTRUCTOR_CODEBERG_PAT")</span></span>
<span id="cb4-47">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">password =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">Sys.getenv</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"PSYCORE_PSYCONSTRUCTOR_GITLAB_PAT"</span>)</span>
<span id="cb4-48">))</span>
<span id="cb4-49"></span>
<span id="cb4-50"><span class="do" style="color: #5E5E5E;
background-color: null;
font-style: italic;">###-------------------------------------------------------------------------</span></span>
<span id="cb4-51"><span class="do" style="color: #5E5E5E;
background-color: null;
font-style: italic;">### Write, stage, and commit file, and push to repo</span></span>
<span id="cb4-52"><span class="do" style="color: #5E5E5E;
background-color: null;
font-style: italic;">###-------------------------------------------------------------------------</span></span>
<span id="cb4-53"></span>
<span id="cb4-54"><span class="do" style="color: #5E5E5E;
background-color: null;
font-style: italic;">### {gert} wants the path relative to the repository root</span></span>
<span id="cb4-55">tempFile <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span></span>
<span id="cb4-56">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"data"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"dctspecs"</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste0</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ucid</span>(), <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">".dct.yaml"</span>));</span>
<span id="cb4-57"></span>
<span id="cb4-58">psyverse<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">save_to_yaml</span>(</span>
<span id="cb4-59">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">dctSpec</span>(),</span>
<span id="cb4-60">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">file =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">file.path</span>(tempPath, tempFile)</span>
<span id="cb4-61">);</span>
<span id="cb4-62"></span>
<span id="cb4-63">gert<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">git_add</span>(</span>
<span id="cb4-64">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">files =</span> tempFile,</span>
<span id="cb4-65">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">repo =</span> tempRepo</span>
<span id="cb4-66">);</span>
<span id="cb4-67"></span>
<span id="cb4-68">gert<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">git_commit</span>(</span>
<span id="cb4-69">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">paste</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Submission of DCT specification with UCID "</span>, <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">ucid</span>()),</span>
<span id="cb4-70">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">repo =</span> tempRepo</span>
<span id="cb4-71">);</span>
<span id="cb4-72"></span>
<span id="cb4-73">gert<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">git_push</span>(</span>
<span id="cb4-74">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">repo =</span> tempRepo</span>
<span id="cb4-75">);</span></code></pre></div>
<p>In my view it’s superweird that the working directory has to be set, but when I remove it, it stops working… That might a a <code>{gert}</code> thing?</p>
<p>In any case, I hope this post can help potential future people who run into the same problem. And otherwise at least James Green and Cillian McHugh, can use it for OpenDrawer. Or future me 😬</p>



 ]]></description>
  <guid>https://behaviorchange.eu/posts/2023-08-Using-Git-in-Shiny-Apps.html</guid>
  <pubDate>Wed, 23 Aug 2023 22:00:00 GMT</pubDate>
</item>
<item>
  <title>Health Psychology in 2023: Transforming Paradigms</title>
  <dc:creator>Gjalt-Jorn Peters</dc:creator>
  <link>https://behaviorchange.eu/posts/2023-08-health-psychology-in-2023--transforming-paradigms.html</link>
  <description><![CDATA[ 





<p>This is a Mastodon thread. <a href="https://mastodon.nl/@matherion/110816078232260588" class="external" target="_blank">The original thread is available here</a>:</p>
<iframe src="https://mastodon.nl/@matherion/110816078232260588/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" allowfullscreen="allowfullscreen">
</iframe>
<script src="https://mastodon.nl/embed.js" async="async"></script>
<hr>
<p>This is a thread for #HealthPsychologists (or others interested in #Psychology) who will be attending EHPS 2023: the 37th Annual Conference of the European Health Psychology Society, which will take place in Bremen, Germany, from 4-8 September 2023 🗓️</p>
<p>Specifically, I’ll briefly describe an awesome symposium we put together 🤩</p>
<p><img src="https://behaviorchange.eu/img/transforming-paradigms-title-slide.png" class="img-fluid" alt="The title slide; showing 'Health Psychology in 2023: transforming paradigms', with a number of transformers and a QR code linking for a ShortDOI linking to https://doi.org/jxkz"></p>
<hr>
<p>The symposium focuses on the paradigms transformations that are impending in #HealthPsychology (and perhaps in #Psychology in general) 💫</p>
<p>Since many of these theoretical and methodological transformations originated in the replication, theory, and measurment crisis, the symposium also covers quite a bit of #OpenScience ⚗️</p>
<p>You could almost say it’s a kind of mini <span class="citation" data-cites="improvingpsych">@improvingpsych</span><span class="citation" data-cites="fediscience.org">@fediscience.org</span> at the EHPS 🙂</p>
<hr>
<p>Oeh, speaking of which - we also created an OSF project for the symposium already, with its own ShortDOI: <a href="https://doi.org/jxkz" class="external" target="_blank">https://doi.org/jxkz</a>. This is where we will post the slides and references to other materials (as well as at <a href="https://osf.io/meetings/EHPS2023" class="external" target="_blank">https://osf.io/meetings/EHPS2023</a>.</p>
<p>This allowed us to include that ShortDOI URL in the abstract itself when we submitted the abstracts. Assuming this will be retained in the abstract book, that means everybody will always easily be able to find the slides 🔍</p>
<p><img src="https://behaviorchange.eu/img/eddy-murphy-think-use-your-head.gif" class="img-fluid" alt="A GIF of Eddy Murphy tapping his forehead with his index finger, expressing 'use your head'"></p>
<hr>
<p>In the first presentation, “The Regression Trap: Why Regression Analyses Are Not Suitable For Pretty Much Anything in Psychology”, Rik Crutzen will explain, well, why regression analyses are not suitable for pretty much anything in psychology 🔥</p>
<p>He will explain this at the hand of a theoretical rationale based on the nature of psychological constructs as well as based on how regression coefficients are computed.</p>
<p>So, we’re off to a nice comforting start 😬</p>
<p><img src="https://behaviorchange.eu/img/transformers-megatron-starscream-no-longer-of-use.gif" class="img-fluid" alt="A GIF of transformer Megatron shooting transformer Starscream saying 'you are no longer of use to me'"></p>
<hr>
<p>Next, in “Knowing What We’re Talking About: Facilitating Decentralized, Unequivocal Reference to Psychological Construct Definitions and Instructions”, I will discuss the mess (health) psychology is in regarding construct definitions.</p>
<p>Briefly: we barely really have them, we don’t use them, and when we comapre them, it turns out that we all have different elaborated definitions in our heads… 🤯</p>
<p>I also present a potential route to start solving this ✅</p>
<p><img src="https://behaviorchange.eu/img/transformers-discord-disorganized.gif" class="img-fluid" alt="A GIF of a transformer saying 'are you implying that we are disorganized?'"></p>
<hr>
<p>Third, in “Towards Improving the Precision of Health Psychology Theories: The Importance of Translating Narrative Theories into Dynamical Systems Models”, Olga Perski will discuss the benefits of formalizing narrative theories, with special emphasis on system approaches.</p>
<p>Where the first 2 talks highlighted problems of current approaches, this contribution shows a path forward - a very promising path at that, that seems more epistemologically defensible.</p>
<p>In other words: exciting! 🤩</p>
<p><img src="https://behaviorchange.eu/img/transformers-soundwave-revolution.gif" class="img-fluid" alt="A GIF of the transformer Soundwave saying 'the revolution begins now'"></p>
<hr>
<p>Fourth, since moving forward will require both quantitative and qualitative approaches, Szilvia Zörgő will present “Qualitative/Unified Exploration of State Transitions (QUEST): taking time into account in qualitative research”.</p>
<p>This will present a way to study state transitions using qualitative data, which also enables exploring system thinking from a qualitative perspective!</p>
<p>For people not so much into math, this ia a great way to take dynamical systems seriously anyway 🎙️</p>
<p><img src="https://behaviorchange.eu/img/transformers-sentinel-prime-dont-sound-so-surprised.gif" class="img-fluid" alt="A GIF of the transformer Sentinel saying 'don't sound to surprised'"></p>
<hr>
<p>Finally, Annick de Paepe will present “Encouraging causal thinking in applied health research with causal Directed Acyclic Graphs (DAGs)”, covering the question of how (health) psychologists can study causality.</p>
<p>DAGs are a great tool, both to become aware of your assumptions &amp; to transparently communicate them to other researchers.</p>
<p>Also, they’re quite easy to use - though supporting your assumptions can be challenging. Which is an asset of the method, not a drawback 🤩</p>
<section id="section" class="level2">
<h2 class="anchored" data-anchor-id="section"><img src="https://behaviorchange.eu/img/transformers-shockwave-this-is-how-you-win-the-war.gif" class="img-fluid" alt="A GIF of the transformer Shockwave saying 'this is how you win the war'"></h2>
<p>Together, these five talks touch on a number of issues that have been highlighted as causes of the replication crisis, and as such, they outline paradigm transformations that can take us further as a field.</p>
<p>We’re really looking forward to this session, and you come to the EHPS this year, we hope you see you there!</p>
<p>Oh, and - it’s at Friday the 8th of September at 9:30, room HS 1010 🙂</p>
<p><img src="https://behaviorchange.eu/img/transformers-knockout-youre-welcome.gif" class="img-fluid" alt="A GIF of the transformer Knockout saying 'you're welcome'"></p>


</section>

 ]]></description>
  <category>mastodon</category>
  <guid>https://behaviorchange.eu/posts/2023-08-health-psychology-in-2023--transforming-paradigms.html</guid>
  <pubDate>Mon, 31 Jul 2023 22:00:00 GMT</pubDate>
</item>
<item>
  <title>The Intervention Mapping Summer Course 2023</title>
  <dc:creator>Gjalt-Jorn Peters</dc:creator>
  <link>https://behaviorchange.eu/posts/2023-07-intervention-mapping-summer-course.html</link>
  <description><![CDATA[ 





<p>This is a Mastodon thread. <a href="https://mastodon.nl/@matherion/110802512271340984" class="external" target="_blank">The original thread is available here</a>:</p>
<iframe src="https://mastodon.nl/@matherion/110802512271340984/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" allowfullscreen="allowfullscreen">
</iframe>
<script src="https://mastodon.nl/embed.js" async="async"></script>
<hr>
<p>Friday the 7th of July 2023, the #InterventionMapping (IM) summer course that trains professionals to systematically design theory- and evidence-based #BehaviorChange interventions ended, certifying around fifty fresh IM-trained professionals.</p>
<p>The closing session beautifully reflected the nature of the Intervention Mapping community. I’ll explain a bit about that here.</p>
<p>(after three more introductory toots with some background info)</p>
<p><img src="https://behaviorchange.eu/img/im-sc-2023.jpg" class="img-fluid" alt="A photograph of the Intervention Mapping Summer Course 2023 participants."></p>
<hr>
<p>Intervention Mapping is around thirty years old, having been conceived in the nineties: the first publication is from 1998 (<a href="https://doi.org/c32mz5" class="external" target="_blank">https://doi.org/c32mz5</a>), and the first book from 2001.</p>
<p>Since then, IM has continuously improved and grown, became integrated in more and more curricula, and is currently seen as a kind of gold standard for systematic intervention development.</p>
<p><img src="https://behaviorchange.eu/img/im-book-fourth-edition.jpg" class="img-fluid" alt="The cover of the fourth edition Intervention Mapping book"></p>
<hr>
<p>The main drawback people report is that it can take a lot of time and effort to do properly (but also see <a href="https://doi.org/jb8k" class="external" target="_blank">https://doi.org/jb8k</a>).</p>
<p>Unfortunately, this is a fact of life: there are no silver bullets. In fact, this is a property of the types of problems IM is applied to, not of IM: by the time IM is involved, all easy solutions have usually been tried (and failed). If a problem is complicated, learning what you need to learn to tackle it will always take a lot of time and effort.</p>
<hr>
<p>For those unfamiliar with Intervention Mapping, I’ve written a super-brief Mastodon thread to introduce it: <a href="https://mastodon.nl/@matherion/110695074850807794" class="external" target="_blank">https://mastodon.nl/<span class="citation" data-cites="matherion/110695074850807794">@matherion/110695074850807794</span></a>. It was tooted with the {quartodon} R package, so you can also read this blog post instead: <a href="https://behaviorchange.eu/posts/2023-07-intervention-mapping-in-a-thread.html">https://behaviorchange.eu/posts/2023-07-intervention-mapping-in-a-thread.html</a></p>
<hr>
<p>Ok, enough intro.</p>
<p>As I said, the closing session highlighted the nature of the Intervention Mapping community.</p>
<p>This community reflects the generous and open attitude of its “founders”. They created IM to support the development of effective health promotion programs, and in the following decades they took the role of facilitators and stewards.</p>
<p>Although this may seem natural, this isn’t always the shift that occurs.</p>
<hr>
<p>For example, sometimes when a method becomes popular, it sort of becomes a means of amassing fame or prestige for its founders. In such situations it becomes more about the persons, rather than about the methods.</p>
<p>Instead of facilitating the further development of the method, their role may even shift to policing who is and who isn’t allowed to contribute to its development.</p>
<p>Fortunately, instead, Intervention Mapping was generously nurtured by its founders.</p>
<hr>
<p>As a consequence, Intervention Mapping has steadily kept improving over time. One testament to these changes are the way the main terms changed over time.</p>
<p>For example, “change objectives” (the very specifically formulated psychological constructs that an intervention targets) were originally called “learning objectives”; and “environmental conditions” were originally called “external determinants”.</p>
<hr>
<p>Now, around thirty years after its inception, the IM protocol is used and taught all over the world - and its founders have retired.</p>
<p>This year, 2023, marked the last time Guy Parcel made the trip from Houston to Maastricht to co-facilitate the Intervention Mapping Summer School.</p>
<p>To celebrate this moment, co-founder Gerjo Kok asked the core group of people involved in IM to ensure we could attend the Summer School’s closing ceremony.</p>
<hr>
<p>Although some of us tutored a group, others (like me) only gave a lecture (for a very old recording of that lecture, see <a href="https://youtu.be/BuOkDTo4vA0" class="external" target="_blank">https://youtu.be/BuOkDTo4vA0</a>), so Sarah (Stutterheim) and me had a ☕ first to ensure we’d be on time, and at 12:00 started awkwardly standing outside the lecture hall, as one does 😬</p>
<p>Mariëlla (Muermans) joined us and Gerjo let us in. We joined while students asked questions about using IM in the real world (very relevant questions; this was clearly an excellent cohort).</p>
<hr>
<p>When all questions had been asked, Gerjo took “the stage”, after having asked me to collect a “fragile” box from outside and bring it to the front of the room.</p>
<p>Gerjo then started his presentation, reminiscing about the stained glass artwork of the IM logo that the IM founders had commissioned years earlier, and then moving on to show and describe the new artwork to commemorate the present occasion.</p>
<hr>
<p><img src="https://behaviorchange.eu/img/im-contributor.jpg" class="img-fluid" alt="A photograph of a merle stone cube with an aluminum red star on it with the text 'esteemed contributor to intervention mapping' on it."></p>
<hr>
<p>This art is special partly because it was created by Nora Oosting. Nora was the partner of Herman Schaalma, a cherished Intervention Mapping expert who passed away in 2009.</p>
<p>In addition, it perfectly symbolizes the joint development of IM. The star figures prominently in both the Texas and the Maastricht flag. Finally, the base is made of merle, a type of stone common in the Maastricht region, and the star is made of aluminum, a metal that has long been produced in Texas.</p>
<hr>
<p>It looked amazing and was very well thought through, so everybody was very impressed.</p>
<p>This is when the twist happened: Gerjo announced that in fact this occassion was where the three authors of the original IM book (2001) that were present, Guy Parcel, Nell Gottlieb, and Gerjo Kok, symbolically “handed the Intervention Mapping keys” to “the next generation”.</p>
<hr>
<p>Us “the next generation” (TNG) people didn’t see this coming, and it took a while to sink in through our baffled states.</p>
<p>This twist nicely reflects the attitude that characterizes the IM founders. Their focus on passing on the method and including others in the community, rather than on themselves, helps Intervention Mapping to flourish.</p>
<table class="table">
<colgroup>
<col style="width: 8%">
</colgroup>
<tbody>
<tr class="odd">
<td>As for us TNG people, I think we were all simultaneously proud and humbled.</td>
</tr>
<tr class="even">
<td>For my part so much so that I decided to write this somewhat awkward toot thread / blog post to memorialize this occasion – but also to take a moment to reflect on how remarkable it is that Gerjo, Guy, and Nell (and Nora) made this moment about others rather than themselves.</td>
</tr>
</tbody>
</table>
<p>This way, the closing ceremony highlighted the community that has grown around Intervention Mapping, and of which we (well, I at least) were hardly aware until that Friday.</p>
<p>It showed the fertile ground for further growth, emphasizing the potential for the future, to work towards more effective health promotion in an ever expanding community.</p>
<p><img src="https://behaviorchange.eu/img/tng-finest-crew.gif" class="img-fluid" alt="A GIF of captain Picard from Star Trek: The Next Generation, raising his glass to toast and saying 'Here's to the finest crew in Starfleet.'"></p>



 ]]></description>
  <category>mastodon</category>
  <guid>https://behaviorchange.eu/posts/2023-07-intervention-mapping-summer-course.html</guid>
  <pubDate>Wed, 26 Jul 2023 22:00:00 GMT</pubDate>
</item>
<item>
  <title>Alcohol of drugs: wat is slechter voor je?</title>
  <dc:creator>Gjalt-Jorn Peters</dc:creator>
  <link>https://behaviorchange.eu/posts/2023-07-alcohol-of-drugs-wat-is-slechter.html</link>
  <description><![CDATA[ 





<p>Dit is een Mastodon draadje. <a href="https://mastodon.nl/@matherion/110782064245732455" class="external" target="_blank">Het originele draadje is hier beschikbaar</a>:</p>
<iframe src="https://mastodon.nl/@matherion/110782064245732455/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" allowfullscreen="allowfullscreen">
</iframe>
<script src="https://mastodon.nl/embed.js" async="async"></script>
<hr>
<p>De Universiteit van Nederland (<a href="https://universiteitvannederland.nl" class="external" target="_blank">https://universiteitvannederland.nl</a>) is een fantastische organisatie die zich hard inzet om wetenschap toegankelijk te maken voor een breed publiek.</p>
<p>Wetenschappers zijn daar niet altijd goed in; maar de mensen van de Universiteit van Nederland kunnen heel goed met wetenschappers samenwerken om dingen uiteindelijk toch duidelijk uit te leggen voor iedereen.</p>
<p>En nog gratis ook! 🤩</p>
<hr>
<p>Ik heb het geluk dat ze met mij wilden samenwerken over een filmpje om de uitgebreide zogenaamde “multi decision multi criteria decision analysis” over MDMA beleid te produceren (<a href="https://www.universiteitvannederland.nl/college/moeten-we-drugs-legaliseren" class="external" target="_blank">https://www.universiteitvannederland.nl/college/moeten-we-drugs-legaliseren</a>).</p>
<p>Onlangs maakten we samen weer een nieuw filmpje, en in deze Mastodon thread en blog post (<a href="https://gjp.one/posts/2023-07-alcohol-of-drugs-wat-is-slechter.html">https://sciencer.eu/posts/2023-07-alcohol-of-drugs-wat-is-slechter.html</a>) geef ik een inkijkje in het proces en wat meer achtergrond informatie.</p>
<p>Eerst het proces en dan de info 🙂</p>
<hr>
<p>Het start met een intake waarin iemand van de Universiteit van Nederland het onderwerp met je doorneemt, en jullie samen de grove lijnen van een script bedenken. Hierna volgen nog een of meer sessies om dit uit te werken.</p>
<p>Hierbij let de Universiteit van Nederland goed op dat er een balans wordt getroffen tussen correctheid en begrijpelijkheid. Als wetenschapper leer je hier onder andere van dat je vooral een hoop niet kunt vertellen 🙂</p>
<hr>
<p>In ons geval wilden we iets doen met de vergelijking van schadelijkheid van drugs. David Nutt heeft in 2010 in de Lancet een bekende ranking van drugs gepubliceerd met de Multi-Criteria Decision Analysis methode <a href="https://doi.org/djcthv" class="external" target="_blank">zie https://doi.org/djcthv</a>.</p>
<p>We wilden deze uitleggen, maar daarvoor moesten we een eenvoudigere utivoering hebben, met minder drugs en maar een paar uitkomsten (‘criteria’).</p>
<p><img src="https://behaviorchange.eu/img/nutt---drug-ranking.png" class="img-fluid" alt="The drug ranking of Nutt (2010), with alcohol (72 points), heroin (55 points), crack cocaine (54 points), methamphetamine (33 points), and cocaine (27 points) in the lead, followed by cannabis (20 points) in the 8th place, and ecstasy (9 points) in the 17th place."></p>
<hr>
<p>We besloten daarom om een versimpelde versie van die oefening uit te voeren om het concept uit te kunnen leggen.</p>
<p>Hiervoor kozen we 5 drugs (alcohol, cocaine, cannabis, ecstasy, en koffie) en 4 uitkomsten of criteria (schade voor de gebruiker zelf, schade voor anderen, verslavingsgevoeligheid, en voordelen van gebruik).</p>
<p>Ik maakte hier een “Nano-MCDA” van die experts hebben ingevuld (preventiewerkers, artsen, wetenschappers, etc).</p>
<p>Je kunt de data bekijken op <a href="https://matherion.gitlab.io/nano-mcda-uvnl" class="external" target="_blank">https://matherion.gitlab.io/nano-mcda-uvnl</a>.</p>
<hr>
<p>Bij deze specifieke rubriek, de Werkplaats, werk je bovendien met ‘props’, als in, je kunt ook echt met objecten werken. Da’s superleuk, maar dan moet je natuurlijk wel bedenken hoe die zinnig in te zetten zijn om het verhaal beter uit te leggen.</p>
<p>In ons geval wilde we de staafdiagram laten zien, dus daar gebruikten we blokjes voor.</p>
<p>We wilden bovendien uitleggen waarom ecstasy niet (psychofarmacologisch) verslavend is, en dat hebben we uiteindelijk met knikkers gedaan.</p>
<hr>
<p>De opnames waren in Amsterdam. Ik was daar om half elf (ik kwam uit Maastricht tenslotte), en we zijn ongeveer bezig geweest vanaf 11:00, en dan dik vier uur tot iets over 15:00.</p>
<p>De Universiteit van Nederland was met z’n vieren, dus in totaal waren we met z’n vijven - dat is al 20 “mens-uur” dus, en dan tellen we de voorbereiding en het editen niet eens mee… 😶</p>
<p><img src="https://behaviorchange.eu/img/uvnl---drugs---timelapse.gif" style="width:25.0%;height:25.0%" alt="Een timelapse video van de opnames: ik sta overwegend achter de werkbank, de cameramensen achter de camera's, en de rest komt zo nu en dan in beeld en verdwijnt dan weer."></p>
<hr>
<p>Het resultaat, “Alcohol of drugs: wat is slechter voor je?” staat op <a href="https://youtu.be/dlCGnS4AyOg" class="external" target="_blank">https://youtu.be/dlCGnS4AyOg</a>.</p>
<p>Als je dit interessant vindt en meer informatie wil, staat op de site van de Jellinek de samenvatting van een uitgebreide studie die in Nederland is gedaan: <a href="https://www.jellinek.nl/vraag-antwoord/welke-drug-is-de-gevaarlijkste" class="external" target="_blank">https://www.jellinek.nl/vraag-antwoord/welke-drug-is-de-gevaarlijkste</a>.</p>
<p>Ik zal nu nog wat extra uitleg geven over vragen die mensen in de comments op YouTube en Nu.nl stelden.</p>
<hr>
<p>Een veel gestelde vraag was of er wel rekening werd gehouden met de standaardinname van de verschillende drugs.</p>
<p>Het is absoluut waar dat dosis bepaalt hoe schadelijk iets is. Als je bijvoorbeeld drie liter water drinkt in een uur, kun je daaraan overlijden. Ook voor alcohol en ecstasy geldt dat als je er te veel van gebruikt, je daar diezelfde dag nog aan kunt overlijden.</p>
<hr>
<p>Het is ook zo dat een biertje (ongeveer 10 gram alcohol) veel minder schadelijk is dan twintig biertjes (ongeveer 200 gram alcohol; zie ook https://en.wikipedia.org/wiki/Standard_drink).</p>
<p>En een kwart pil (zeg 45 milligram MDMA) is minder schadelijk dan een hele pil (zeg 180 milligram MDMA).</p>
<p>Tegelijkertijd is er geen standaardinname van middelen.</p>
<hr>
<p>Er zijn wel suggesties: de WHO adviseert bijvoorbeeld om geen alcohol te drinken, en als je toch drinkt, maximaal 1 eenheid (dus 1 pilsje, of tweederde speciaalbiertje, of een glas wijn, etc).</p>
<p>En voor ecstasy is er een zogenaamd ‘harm reduction’ advies om maximaal 1-1.5 milligram MDMA per kilo lichaamsgewicht te gebruiken (dus als je 70 kilo weegt, maximaal ongeveer 105 gram MDMA; zie ook <a href="https://www.jellinek.nl/informatie-over-alcohol-drugs/drugs/xtc-mdma/risicos/" class="external" target="_blank">https://www.jellinek.nl/informatie-over-alcohol-drugs/drugs/xtc-mdma/risicos/</a>).</p>
<hr>
<p>En dan zijn er nog gemiddelden: je kunt uitrekenen hoeveel alcohol Nederlanders gemiddeld drinken per week of per dag.</p>
<p>Maar op een zaterdag ligt dat gemiddelde een stuk hoger dan op een dinsdag; en de meeste mensen drinken (veel) minder of (veel) meer dan dat gemiddelde: bijna niemand zit precies op het gemiddelde.</p>
<p>Dat geldt altijd voor gemiddelden; er is een gemiddelde leeftijd in Nederland (42 jaar), maar de meeste mensen zijn (veel) jonger of (veel) ouder (<a href="https://www.cbs.nl/nl-nl/visualisaties/dashboard-bevolking/leeftijd/bevolking" class="external" target="_blank">https://www.cbs.nl/nl-nl/visualisaties/dashboard-bevolking/leeftijd/bevolking</a>).</p>
<hr>
<p>Als we naar effecten van drugs kijken, is er geen ‘typische gebruiker’ voorhanden waar we naar kijken, want er bestaat geen typische gebruiker.</p>
<p>Meestal kijk je daarom naar de effecten zoals je ze nu ziet in de maatschappij, gecombineerd met wat je weet over de middelen.</p>
<hr>
<p>Als ecstasy bijvoorbeeld legaal zou zijn, is de verwachting dat gebruik iets toe zou nemen, maar niet veel (daar zijn ook weer allerlei redenen voor).</p>
<p>Dit soort overwegingen kun je ook meenemen, om zo te corrigeren voor de verschillende legale status van de drugs.</p>
<hr>
<p>Een andere vraag die mensen hadden, is of er werd meegenomen in de inschattingen hoeveel de verschillende drugs worden gebruikt.</p>
<p>Dat wordt inderdaad meegenomen. Het is belangrijk om in dit kader stil te staan bij hoe de verschillende drugs werken. Alcohol en koffie worden veel gebruikt, en beide drugs lenen zich daar ook goed voor.</p>
<p>Ecstasy wordt veel minder gebruikt, en die leent zich ook niet voor frequent gebruik, zelfs als het legaal is.</p>
<hr>
<p>Verder werd drugscriminaliteit genoemd in de comments: dat veroorzaakt een hoop slachtoffers, en die criminaliteit bestaat wel voor cocaine en ecstasy, maar niet voor alcohol.</p>
<p>Echter, deze criminaliteit is niet het gevolg van de drug zelf, maar van onze maatschappelijke keuze om die drug illegaal te maken.</p>
<p>Als we de drugs legaliseren verdwijnt die schade door drugscriminaliteit ook.</p>
<hr>
<p>Ik breid deze Mastodon thread en blog post wellicht nog uit met meer uitleg, als er nog iets langskomt dat kort genoeg uitgelegd kan worden.</p>
<p>Dat wil zeggen, ik breid de pot dan uit, en toot de thread dan opnieuw 😬</p>
<hr>
<p>Voor meer achtergrondinfo over hoe schadelijk alcohol is ten opzichte van cocaine, zie dit interessante interview met Tom Bart van Jellinek: <a href="https://www.nu.nl/gezondheid/6251405/zo-schadelijk-is-een-lijntje-coke-ophef-terecht-maar-alcohol-is-ook-slecht.html" class="external" target="_blank">https://www.nu.nl/gezondheid/6251405/zo-schadelijk-is-een-lijntje-coke-ophef-terecht-maar-alcohol-is-ook-slecht.html</a>.</p>
<p>Andere filmpjes van de Universiteit van Nederland over drugs staan hier: <a href="https://www.universiteitvannederland.nl/college?search=drugs#filter" class="external" target="_blank">https://www.universiteitvannederland.nl/college?search=drugs#filter</a>.</p>
<p>Andere filmpjes van de Universiteit van Nederland met collega’s van de Open Universiteit staan hier: <a href="https://www.universiteitvannederland.nl/college?school=open-universiteit#filter" class="external" target="_blank">https://www.universiteitvannederland.nl/college?school=open-universiteit#filter</a>.</p>
<p>En, last en least, mijn andere filmpjes: <a href="https://www.universiteitvannederland.nl/college/waarom-werkt-bangmakerij-niet-ontmoedigend-als-het-gaat-om-drugs" class="external" target="_blank">https://www.universiteitvannederland.nl/college/waarom-werkt-bangmakerij-niet-ontmoedigend-als-het-gaat-om-drugs</a> en <a href="https://www.universiteitvannederland.nl/college/moeten-we-drugs-legaliseren" class="external" target="_blank">https://www.universiteitvannederland.nl/college/moeten-we-drugs-legaliseren</a>.</p>



 ]]></description>
  <category>mastodon</category>
  <guid>https://behaviorchange.eu/posts/2023-07-alcohol-of-drugs-wat-is-slechter.html</guid>
  <pubDate>Fri, 21 Jul 2023 22:00:00 GMT</pubDate>
</item>
<item>
  <title>Intervention Mapping in a thread</title>
  <dc:creator>Gjalt-Jorn Peters</dc:creator>
  <link>https://behaviorchange.eu/posts/2023-07-intervention-mapping-in-a-thread.html</link>
  <description><![CDATA[ 





<p>This is a Mastodon thread. <a href="https://mastodon.nl/@matherion/110695074850807794" class="external" target="_blank">The original thread is available here</a>:</p>
<iframe src="https://mastodon.nl/@matherion/110695074850807794/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" allowfullscreen="allowfullscreen">
</iframe>
<script src="https://mastodon.nl/embed.js" async="async"></script>
<hr>
<p>Ages ago, I wrote a Twitter thread to very briefly introduce the Intervention Mapping protocol.</p>
<p>The Mastodon thread that follows (and the blog post at <a href="https://behaviorchange.eu/posts/2023-07-intervention-mapping-in-a-thread.html" class="external">https://behaviorchange.eu/posts/2023-07-intervention-mapping-in-a-thread.html</a> from which it was posted with the {quartodon} R 📦, see <a href="https://quartodon.opens.science" class="external" target="_blank">https://quartodon.opens.science</a>) is the migration of that thread.</p>
<p><img src="https://behaviorchange.eu/img/this-is-why-we-save-what-we-can.webp" class="img-fluid" alt="A GIF from US reality TV show Good Boned showing Karen Laine telling Mina Starsiak Hawk, 'this is why we save what we can!'."></p>
<hr>
<p>Intervention Mapping is a framework for developing behavior change interventions, achieve knowledge translation, facilitate implementation, address health problems; basically for anything that requires some sort of intervention in the world. This thread ‘nutshells’ IM.</p>
<hr>
<p>1: Establish planning group with stakeholders; create logic model of problem (including environmental factors and personal determinants); analyze population, context, community strengths etc; specify goals.</p>
<hr>
<p>2: Determine desired behavior; specify sub-behaviors (performance objectives); consult literature and do qualitative and quantitative research to map the environmental factors and personal determinants of target behaviors; compile into matrices of change objectives.</p>
<hr>
<p>3: For each environmental factor, identify which agents control it; then for each agent, identify desired behavior to change the environmental condition; again determine sub-behaviors, personal determinants, and (‘next iteration’) environmental factors. Repeat as needed.</p>
<hr>
<p>4: Use literature (both theory and empirical evidence) to identify behavior change principles that can target the personal determinants of the target population individuals as well as the environmental agents.</p>
<hr>
<p>5: Translate these theoretical psychological principles into practical applications while respecting their parameters for use (because behavior change boils down to exploiting an organism’s capacity for learning, this is tricky).</p>
<hr>
<p>6: Compile the applications for each target individual into coherent interventions, establishing a theme, the scope, and sequence of the intervention components.</p>
<hr>
<p>7: Pretest intervention (components) for both effects on determinants and behaviors as well as characteristics such as understandability, usability, and fit with target population.</p>
<hr>
<p>8: Regularly check to make sure you still address all change objectives and that the applications that make up the final intervention still respect the parameters of use for the behavior change principles they embody (i.e.&nbsp;that the logic model of change ‘survives’).</p>
<hr>
<p>9: Throughout the process, use the planning group (from the first tweet 🙂) to make sure that what you end up with is acceptable and feasible to the target population members, implementers, and relevant stakeholders (who should all be in your planning group).</p>
<hr>
<p>10: Throughout the process, anticipate on implementation. This is achieved by repeating (at least) steps 2-6 for implementers (who has to do what to make sure the intervention gets implemented/disseminated/maintained etc?).</p>
<hr>
<p>11: Throughout the process, anticipate on your evaluation, both process and effect. For example, make sure the objectives you formulate in steps 1 &amp; 2 (as well as iterations of those steps for environmental agents and implementers) are measurable.</p>
<hr>
<p>12: Throughout the process, use the Core Processes: pose questions; brainstorm provisional answers; review empirical literature for theory and evidence; derive theoretical additions; collect new data if needed.</p>
<hr>
<p>13: There are more resources at <a href="https://interventionmapping.com" class="external" target="_blank">https://interventionmapping.com</a>, there is a list of papers that describe applications of IM at <a href="https://interventionmapping.com/references" class="external" target="_blank">https://interventionmapping.com/references</a>, and there is a list of free related resources at <a href="https://effectivebehaviorchange.com" class="external" target="_blank">https://effectivebehaviorchange.com</a>.</p>



 ]]></description>
  <category>mastodon</category>
  <guid>https://behaviorchange.eu/posts/2023-07-intervention-mapping-in-a-thread.html</guid>
  <pubDate>Sun, 09 Jul 2023 22:00:00 GMT</pubDate>
</item>
<item>
  <title>Converting a Quarto blog post to a Mastodon thread and posting it</title>
  <dc:creator>Gjalt-Jorn Peters</dc:creator>
  <link>https://behaviorchange.eu/posts/2023-01-converting-a-quarto-blog-post-to-a-mastodon-thread-and-posting-it.html</link>
  <description><![CDATA[ 





<p>This is a Mastodon thread. <a href="https://mastodon.nl/@matherion/109672502000155164" class="external" target="_blank">The original thread is available here</a>:</p>
<iframe src="https://mastodon.nl/@matherion/109672502000155164/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" allowfullscreen="allowfullscreen">
</iframe>
<script src="https://mastodon.nl/embed.js" async="async"></script>
<hr>
<p>This thread explains the {quartodon} R 📦 (see https://quartodon.opens.science).</p>
<p>The #rstats quartodon 📦 allows you to post a Mastodon thread from a plain text file (e.g., a blog post from a Quarto, {blogdown}, or {distill} website, another Quarto or R Markdown file, or just a plain text file).</p>
<p>This effectively allows you to post blog posts to Mastodon in a thread of toots 📑➡️🪄➡️🐘🐘🐘</p>
<p><img src="https://behaviorchange.eu/img/elephant-herd.gif" class="img-fluid" alt="A GIF of an elephant herd (or, an elephant thread, if you will). I tried to find a GIF of a herd of Mastodons, but to no avail."></p>
<hr>
<p>The {quartodon} package comes with an RStudio addin with two commands</p>
<p>🚀 “Extract and preview all toots”</p>
<p>🚀 “Extract and post all toots”</p>
<p>These take the currently active document, extract all toots, add thread counters, and do some preparation and checking (toot lengths, image sizes, and alt texts) 🔍🧐</p>
<p>When previewing, the thread will be shown in the viewer with character counts and showing any errors 🪟</p>
<p>When posting, the thread will be posted to Mastodon 📬</p>
<p><img src="https://behaviorchange.eu/img/quartodon-rstudio-addin.png" alt="A screenshot of RStudio showing the Addins menu, with the cursor hovering over the 'Extract and preview all toots' option, with the Quarto blog post containing the toots in this thread." height="250"></p>
<hr>
<p>The basic use of {quartodon} is very simple.</p>
<p>1️⃣ You set up your credentiasl with {rtoot} in an environment variable 🔐</p>
<p>2️⃣ You structure your blog post as a thread of toots 🧵🐘</p>
<p>3️⃣ You preview the toot thread and double check everything ✅✅</p>
<p>4️⃣ You post your thread, et voila 👌</p>
<p>The first post will be posted as “public” 🌏</p>
<p>The other posts will be replies to each other, and will be posted as “unlisted” 🔓</p>
<p><img src="https://behaviorchange.eu/img/magic-henning.gif" class="img-fluid" alt="A GIF of magician Doug Henning making a flourishing gesture and saying 'Magic' with that text appearing in a sparkly font."></p>
<hr>
<p>Some details about how it works (this describes the default settings, most are customizable):</p>
<p>🤖 Basics 💫</p>
<p>👉 The text is separated into toots by looking for lines containing only “<code>-----</code>” (five dashes).</p>
<p>👉 The first fragment (before the first five dashes) is ignored, allowing you to add stuff to your post that won’t be part of the toot thread.</p>
<p>👉 It automatically adds thread counters to the end of every toot, like this one 👇</p>
<hr>
<p>🤖 Images 💫</p>
<p>👉 It checks whether images can be found, and I didn’t implement a check for URLs yet, so images have to be local for now.</p>
<p>👉 Image alt texts are checked for minimum lenght (currently, 10 characters)</p>
<p>👉 For now, only one image can be included (if multiple are included, only the first one is retained</p>
<hr>
<p>🤖 Cleaning 💫</p>
<p>👉 All headings will be removed (all lines starting with #)</p>
<p>👉 All backticks will also be removed (since Markdown uses that to display code, but Mastodon doens’t).</p>
<p>👉 All strings of more than three consequtive newline characters will be replaced by two newline characters</p>
<hr>
<p>🤖 URLs 💫</p>
<p>👉 {quartodon} replaces all URLs with their title, which means that hyperlinks where the title (the part between the square brackets in Markdown) isn’t the URL will just disappear in the toot.</p>
<p>👉 Note that relative URLs will not work from Mastodon; all URLs have to start with “<code>https?://</code>”, because {quartodon} processes the raw <code>.qmd</code>, <code>.rmd</code>, or <code>.md</code> file, before <code>{Quarto}</code> (or <code>{rmarkdown}</code> or <code>{knitr}</code>) did any replacement work.</p>
<hr>
<p>🤖 Toot character counts 💫</p>
<p>👉 When counting toot lengths, {quartodon} counts all URLs as 23 characters, conform the Mastodon defaults.</p>
<p>👉 When counting toot lengths, it also corrects usernames, stripping the instance information (i.e., the last <code>@</code> and everything following it (see <a href="https://docs.joinmastodon.org/user/posting/" class="external" target="_blank">https://docs.joinmastodon.org/user/posting/</a>).</p>
<p><img src="https://behaviorchange.eu/img/quartodon-toot-preview-example.png" class="img-fluid" alt="A screenshow of a part of the thread preview generated by quartodon, showing the fourth toot in this thread with a character count of 350 characters."></p>
<hr>
<p>You can find the <code>{quartodon}</code> documentation at <a href="https://quartodon.opens.science" class="external" target="_blank">https://quartodon.opens.science</a></p>
<p>The vignette from which this Mastodon thread was extracted and posted is located at <a href="https://quartodon.opens.science/articles/quartodon_intro.html" class="external" target="_blank">https://quartodon.opens.science/articles/quartodon_intro.html</a></p>
<p>If you would like to check out the GitLab repo with the source code, check <a href="https://gitlab.com/r-packages/quartodon" class="external" target="_blank">https://gitlab.com/r-packages/quartodon</a></p>
<p>Finally, you can check out the Quarto blog post with the same information at <a href="https://gjyp.nl/posts/2023-01-converting-a-quarto-blog-post-to-a-mastodon-thread-and-posting-it.html" class="external" target="_blank">https://gjyp.nl/posts/2023-01-converting-a-quarto-blog-post-to-a-mastodon-thread-and-posting-it.html</a></p>
<p>For now - have fun!</p>
<p><img src="https://behaviorchange.eu/img/mastodon---its-nice.gif" class="img-fluid" alt="A GIF of an elephant grinnning and the text 'Mastodon. It's nice'."></p>
<hr>
<p>These are the basics. Of course, this is the first version of the package: who knows what we can add in the future? 🚀</p>
<p>This package was fun to create, and will hopefully be useful. Hopefully many others can use this to let Quarto (or other) blog posts do double duty as threads of toots posted to Mastodon 🐘</p>
<p>At the same time I’m not sure how much time I’ll have to extend and maintain this, so if this seems like a fun project to you, please drop a line!</p>
<p><img src="https://behaviorchange.eu/img/the-rock---we-have-to-do-this-together-team-work.gif" class="img-fluid" alt="A GIF of Dwayne Johnson saying 'We have to do this together'."></p>



 ]]></description>
  <category>mastodon</category>
  <guid>https://behaviorchange.eu/posts/2023-01-converting-a-quarto-blog-post-to-a-mastodon-thread-and-posting-it.html</guid>
  <pubDate>Tue, 10 Jan 2023 23:00:00 GMT</pubDate>
</item>
<item>
  <title>Using the Reproducible Open Coding Kit &amp; Epistemic Network Analysis to model qualitative data</title>
  <dc:creator>Gjalt-Jorn Peters</dc:creator>
  <link>https://behaviorchange.eu/posts/2023-01-rock-and-ena--hpbm-tutorial--mastodon-thread.html</link>
  <description><![CDATA[ 





<p>This is a Mastodon thread. <a href="https://mastodon.nl/@matherion/109624231489342328" class="external" target="_blank">The original thread is available here</a>:</p>
<iframe src="https://mastodon.nl/@matherion/109624231489342328/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" allowfullscreen="allowfullscreen">
</iframe>
<script src="https://mastodon.nl/embed.js" async="async"></script>
<hr>
<p>🚨 Publication alert! 🚨</p>
<p>At EHPS 2021, Szilvia Zörgő presented “Bridging the qualitative and quantitative with Epistemic Network Analysis: a worked example”. 🌉</p>
<p>Based on this, we were invited to write a tutorial for the Advanced Methods section of an EHPS #OpenAccess journal, Health Psychology and Behavioral Medicine.</p>
<p>That tutorial is now out!</p>
<p>Get it at <a href="https://doi.org/jrfb" class="external" target="_blank">https://doi.org/jrfb</a> - main points in this 🧵!</p>
<p>#Psychology #OpenScience #BehaviorChange #QualitativeMethods #RStats <span class="citation" data-cites="rstats">@rstats</span><span class="citation" data-cites="gup.pe">@gup.pe</span></p>
<p>🧵 1/21</p>
<p><img src="https://behaviorchange.eu/img/rock-ena-tutorial-title.png" class="img-fluid" alt="A screenshot of the front page of the article's PDF showing the title and the abstract (see doi.org/jrfb for the text)"></p>
<hr>
<section id="qualitative-quantitative-and-ena" class="level2">
<h2 class="anchored" data-anchor-id="qualitative-quantitative-and-ena">Qualitative, quantitative, and ENA</h2>
<p>Qualitative methods are typically contrasted with quantitative methods – so much so that at EHPS 2012, the Synergy Expert Meeting addressed overcoming the ‘irreconcilable epistemological differences’ between both approaches.</p>
<p>Analyses have described this contrast using terms such as facts vs opinions, objective versus subjective, and masculine versus feminine.</p>
<p>🧵 2/21</p>
<p><img src="https://behaviorchange.eu/img/cats-fighting-light-sabres.gif" class="img-fluid" alt="A GIF of two cats fighting with light sabres."></p>
<hr>
<p><em>If</em> qualitative and quantitative methods are combined within one study (i.e., a mixed-methods study), they often have complementary functions.</p>
<p>Epistemic Network Analysis is a method that instead strives to unify qualitative and quantitative approaches, ultimately producing data visualizations that provide a novel lens to aid understanding the patterns in qualitative datasets.</p>
<p>🧵 3/21</p>
<p><img src="https://behaviorchange.eu/img/ena-1.png" class="img-fluid" style="width:30.0%" alt="An Epistemic Network: nodes representing codes, labelled 'Genetic', Eco', 'Psych', 'Vital', and 'Nutri', and with edges of varying thicknesses connecting the nodes."></p>
<hr>
</section>
<section id="rock-to-ena" class="level2">
<h2 class="anchored" data-anchor-id="rock-to-ena">ROCK to ENA</h2>
<p>In this tutorial, we explain how to create an Epistemic Network for a qualitative dataset.</p>
<p>Because we want to work conform the #OpenScience principles, we use the Reproducible Open Coding Kit (the ROCK 🤘).</p>
<p>The ROCK is an open standard for coded qualitative data, and we also explain a bit about that.</p>
<p>🧵 4/21</p>
<p><img src="https://behaviorchange.eu/img/the-rock---okay-here-we-go.gif" class="img-fluid" style="width:50.0%" alt="A GIF of Dwayne Johnson (A.K.A. the Rock) saying 'Okay! Here we go!'."></p>
<hr>
</section>
<section id="the-example-study" class="level2">
<h2 class="anchored" data-anchor-id="the-example-study">The example study</h2>
<p>As illustration, we use a qualitative study into perceptions of illness etiology, comparing patients who chose complementary or alternative medicine with patients who chose biomedical treatments. This example uses five codes:</p>
<p>1️⃣ ‘psych’: emotion, stress, trauma, nerves</p>
<p>2️⃣ ‘vital’: energy/qi/prana, flow, block</p>
<p>3️⃣ ‘eco’: environmental toxins, chemicals</p>
<p>4️⃣ ‘nutri’: quality or type of food, additives</p>
<p>5️⃣ ‘genetic’: inherited illness or susceptibility, genes</p>
<p>🧵 5/21</p>
<p><img src="https://behaviorchange.eu/img/doctor-house---taking-pills.gif" class="img-fluid" alt="A GIF file of doctor House taking some pills."></p>
<hr>
<p>This figure shows Epistemic Networks from this example. The left (purple) network is for patients who chose biomedicine, the right (green) network is for patients who chose complementary or alternative medicine, and the center network shows the difference between the other two plots.</p>
<p>The edges represent how often codes co-occurred: for example, in the biomedicine group, the “psych” and “genetic” codes co-occurred most frequently. This allows easy visual comparison of such patterns.</p>
<p>🧵 6/21</p>
<p><img src="https://behaviorchange.eu/img/ena-networks-for-rock-tutorial-1.jpg" class="img-fluid" alt="Three ENA networks, as described in the text."></p>
<hr>
<p>But that is not all! With ENA, you can create networks for any subsample of participants! 🤩</p>
<p>For example, these are six networks also split on diagnosis (columns). This shows that there is considerably heterogeneity within each diagnosis group, placing the differences between patients choosing the biomedical route and those choosing alternative of complementary medicine in perspective. 👓</p>
<p>🧵 7/21</p>
<p><img src="https://behaviorchange.eu/img/ena-networks-for-rock-tutorial-2.jpg" class="img-fluid" alt="Six more ENA networks laid out in two rows (biomedicine on the top row and complementary and alternative medicine on the bottom row) and three columns (respectively diabetes, musculoskeletal illnesses, and digestive illnesses)."></p>
<hr>
</section>
<section id="the-cliff" class="level2">
<h2 class="anchored" data-anchor-id="the-cliff">The CLIFF</h2>
<p>So, next we explain how you can obtain those visualizations!</p>
<p>Before we begin: in the tutorial, we follow the Clean Lean Initial Formatted File (CLIFF).</p>
<p>That’s a prestructured set of directories and files meant to help you start a ROCK project. It’s available in a Git repository at <a href="https://rock.science/cliff" class="external" target="_blank">https://rock.science/cliff</a>.</p>
<p>Don’t worry – you don’t need Git to use the CLIFF – you can also download as a .ZIP file!</p>
<p>🧵 8/21</p>
<p><img src="https://behaviorchange.eu/img/cliff---jumping.gif" class="img-fluid" alt="A GIF of somebody jumping off a cliff into a blue sea."></p>
<hr>
</section>
<section id="the-rock-standard" class="level2">
<h2 class="anchored" data-anchor-id="the-rock-standard">The ROCK standard</h2>
<p>The ROCK standard is designed as a human- and machine-readable standard for coded qualitative data. Some terms:</p>
<ul>
<li><p>👉 <code>source</code>: a file containing qualitative data</p></li>
<li><p>👉 <code>utterance</code>: smallest codable unit of data, typically (but not necessarily) a sentence</p></li>
<li><p>👉 <code>identifier</code>: a character string added to the data to represent codes and other things</p></li>
<li><p>👉 <code>code</code>: a concept/construct of interest. Codes are represented by their code identifier in double brackets: <code>[[code]]</code>, <code>[[parent&gt;child]]</code></p></li>
</ul>
<p>🧵 9/21</p>
<p><img src="https://behaviorchange.eu/img/cat---talk-data-to-me.gif" class="img-fluid" alt="A cat wearing sunglasses where symbols and plots appear from the center of each glass and move outwards (as if you're flying through them) and the text 'talk data to me'."></p>
<hr>
<ul>
<li><p>👉 <code>section break</code>: a type of identifier used to segment data, by inserting a line containing e.g.&nbsp;<code>---&lt;&lt;section_break_id&gt;&gt;---</code></p></li>
<li><p>👉 <code>class</code>: a group, e.g.&nbsp;cases (participants) or interview locations</p></li>
<li><p>👉 <code>class instance</code>: a single case or location: <code>[[cid=1]]</code>, <code>[[locationId=library]]</code></p></li>
<li><p>👉 <code>attribute</code>: characteristics of class instances (e.g.&nbsp;age, diagnosis, etc), attached to utterances through class instance identifiers</p></li>
<li><p>👉 <code>utterance identifier</code>: a unique identifier for an utterance</p></li>
</ul>
<p>🧵 10/21</p>
<p><img src="https://behaviorchange.eu/img/rock-ena-tutorial-illustration-1.jpg" class="img-fluid" alt="An example of a source coded with the ROCK."></p>
<hr>
</section>
<section id="the-rock-r" class="level2">
<h2 class="anchored" data-anchor-id="the-rock-r">The <code>{rock}</code> R 📦</h2>
<p>To work with these ROCK files, we will use the <code>{rock}</code> R package. You can get it from CRAN using:</p>
<p><code>install.packages('rock');</code></p>
<p>You can use the ROCK standard without using the <code>{rock}</code> R package, but as yet, the standard hasn’t been implemented in any other software yet that we know of. In addition, the <code>{rock}</code> R package produces a .CSV file that we can import into the rENA tool to create the Epistemic Networks.</p>
<p>🧵 11/21</p>
<hr>
</section>
<section id="step-by-step-tutorial" class="level2">
<h2 class="anchored" data-anchor-id="step-by-step-tutorial">Step-by-step tutorial</h2>
<p>We place our raw data sources as plain text files in a directory named <code>010—raw-sources</code>.</p>
<p>Usually raw sources are a bit messy, and the ROCK requires every utterance to be on a separate line. For this, we use the <code>rock::clean_sources()</code> function.</p>
<p>As its <code>input</code> argument, we specify the directory with the raw sourcs, and as its <code>output</code> argument, the directory where we want to write the clean sources <code>020—cleaned-sources</code>.</p>
<p>🧵 12/21</p>
<p><img src="https://behaviorchange.eu/img/queen---i-want-to-break-free.gif" class="img-fluid" alt="A GIF showing a fragment from the song 'I want to break free' from from Queen with Freddy Mercury vacuum cleaning."></p>
<hr>
<p>Next, we add utterance identifiers before every line. These uniquely identify every utterance, which makes two things possible.</p>
<p>1st, efficient reference to utterances, e.g.&nbsp;to add codes or describe results.</p>
<p>2nd, when multiple coders code the same source independently, utterance identifiers allow determining which codes were attached to each utterance (and merging them).</p>
<p>To prepend utterance identifiers, use <code>rock::prepend_ids_to_sources()</code>, again specifying the input and output paths.</p>
<p>🧵 13/21</p>
<hr>
<p>Attributes are specified for each class instance. The most common type of class is participants (or ‘cases’, following the REFI terms), so each instance or case is a person. In the YAML chunk, for each class instance identifier, attributes can be specified - this enables querying data and codes using those attributes.</p>
<p>Attributes are indicated using YAML fragments. This is a bit hard to explain in a toot, but feel free to peruse the article 😬</p>
<p>🧵 14/21</p>
<p><img src="https://behaviorchange.eu/img/i-ve--gotta--show--every--attribute--i--got.gif" class="img-fluid" alt="A GIF with a scene from a series called Survivor All Stars, of a man saying 'I've gotta show every physical attribute I've got.'"></p>
<hr>
</section>
<section id="coding" class="level2">
<h2 class="anchored" data-anchor-id="coding">Coding</h2>
<p>Coding qualitative data in the ROCK standard just consists of adding code identifiers to the plain text sources.</p>
<p>This can be done with any text editor, but there is also a rudimentary (but GDPR-compliant) javascript/html/css web app available at <a href="https://i.rock.science" class="external" target="_blank">https://i.rock.science</a>.</p>
<p>It’s very simple: just load a source, create some codes (or load those from a file, too) and you can drag and drop the codes to code utterances.</p>
<p>🧵 15/21</p>
<p><img src="https://behaviorchange.eu/img/rock-ena-tutorial-illustration-2.jpg" class="img-fluid" alt="A screenshot of the iROCK app, with a codes source in a left-hand panel, and codes and section breaks in the right-hand panel."></p>
<hr>
</section>
<section id="merging-codes-from-independent-coders" class="level2">
<h2 class="anchored" data-anchor-id="merging-codes-from-independent-coders">Merging codes from independent coders</h2>
<p>If you used independent coders, the utterance identifiers make it possible to merge the codes from all coders into one primary source.</p>
<p>The <code>{rock}</code> R 📦 has a function for this: <code>rock::merge_sources()</code>. You can specify which ones are the primary sources by regular expression or by path.</p>
<p>This writes new sources to disk that contain the codes from all separate sources (using the utterance identifiers).</p>
<p>🧵 16/21</p>
<p><img src="https://behaviorchange.eu/img/rock-ena-tutorial-illustration-3.jpg" class="img-fluid" alt="An illustration showing a progression of sources through four directories ('raw sources', 'cleaned sources', 'sourced with UIDs', and 'coded sources') on the left; with contents of the 'coded sources' directory shown, which are four more directories named 'source 1' to 'source 4'; and finally showing the contents of directory 'source 2', which if four files each marked 'source 2', and respectively marked 'coder 1', 'coder 2', coder 3', and 'merged'."></p>
<hr>
</section>
<section id="parsing-the-coded-sources" class="level2">
<h2 class="anchored" data-anchor-id="parsing-the-coded-sources">Parsing the coded sources</h2>
<p>If you got to this point (in the tutorial in the paper, not this tootorial 😬), you have coded and merged sources, so we’re ready to parse them.</p>
<p>In the <code>{rock}</code> R 📦, there’s <code>rock::parse_sources()</code> function for this. It produces an object with a lot of info, but the only thing we need for ENA is the <code>mergedSourceDf</code> data frame, which we can export with the <code>rock::export_mergedSourceDf_to_csv()</code> function.</p>
<p>That <code>.csv</code> file can then be imported into the ENA web app to produce Epistemic Networks.</p>
<p>🧵 17/21</p>
<hr>
</section>
<section id="epistemic-network-analyses" class="level2">
<h2 class="anchored" data-anchor-id="epistemic-network-analyses">Epistemic Network Analyses</h2>
<p>To create an Epistemic Network, you can use the web app available at <a href="https://app.epistemicnetwork.org" class="external" target="_blank">https://app.epistemicnetwork.org</a>.</p>
<p>You have to specify which column designates ‘units’, which designates ‘conversations’, and which contain the codes you want to see in the network. In ENA, co-occurrences are computed per ‘unit’, and only for codes from the same ‘conversation’. So, ‘conversations’ are usually interviews (e.g., sources), and units are often participants (or groups of participants).</p>
<p>🧵 18/21</p>
<p><img src="https://behaviorchange.eu/img/ena-web-app-1.png" class="img-fluid" style="width:50.0%" alt="A screenshot of the ENA web app, showing the logo and the login form."></p>
<hr>
<p>You also have to specify “stanza window”, which also determines when codes are considered to co-occur. For more details on the meaning of ‘units’, ‘conversations’, and ‘stanzas’, as well as how the networks are created from the coded utterances, please see the tutorial at <a href="https://doi.org/jrfb" class="external" target="_blank">https://doi.org/jrfb</a> 🙂</p>
<p>You should now be rewarded with a pretty visualization as shown here 🤩</p>
<p>Well done! 💪</p>
<p>🧵 19/21</p>
<p><img src="https://behaviorchange.eu/img/ena-1.png" class="img-fluid" style="width:30.0%" alt="An epistemic network - the same one as in the third toot."></p>
<hr>
</section>
<section id="conclusion" class="level2">
<h2 class="anchored" data-anchor-id="conclusion">Conclusion</h2>
<p>In the tutorial, we also discuss a number of strengths and limitations of Epistemic Network Analysis.</p>
<p>ENA offers a unique perspective on your data, helping you see patterns you may otherwise miss. By inspecting the networks in parallel with the coded data, you can use the richness of qualitative data to its fullest, while also benefiting from the visualizations possible by quantification.</p>
<p>🧵 20/21</p>
<hr>
<p>In the process we introduced the Reproducible Open Coding Kit, a human- and machine-readable standard for coded qualitative data. We also showed some functions from the <code>{rock}</code> R 📦 to help you work with <code>.rock</code> files.</p>
<p>We hope this tutorial can help you to answer new, interesting research questions - and in an Open Science way!</p>
<p>Oh, and the tutorial itself was at <a href="https://doi.org/jrfb" class="external" target="_blank">https://doi.org/jrfb</a> 🙂</p>
<p>🧵 21/21</p>
<p><img src="https://behaviorchange.eu/img/the-rock---it-has-been-a-privilege.gif" class="img-fluid" style="width:50.0%" alt="A GIF of Dwayne Johnson, The Rock, saying 'it has been a privilege'."></p>


</section>

 ]]></description>
  <category>mastodon</category>
  <guid>https://behaviorchange.eu/posts/2023-01-rock-and-ena--hpbm-tutorial--mastodon-thread.html</guid>
  <pubDate>Mon, 02 Jan 2023 23:00:00 GMT</pubDate>
</item>
<item>
  <title>Acyclic Behavior Change Diagrams: A Tool to Report and Analyze Interventions</title>
  <dc:creator>Gjalt-Jorn Peters</dc:creator>
  <link>https://behaviorchange.eu/posts/2022-12-acyclic-behavior-change-diagrams--mastodon-thread.html</link>
  <description><![CDATA[ 





<p>This is a Mastodon thread. <a href="https://mastodon.nl/@matherion/109513904958237787" class="external" target="_blank">The original thread is available here</a>:</p>
<iframe src="https://mastodon.nl/@matherion/109513904958237787/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" allowfullscreen="allowfullscreen">
</iframe>
<script src="https://mastodon.nl/embed.js" async="async"></script>
<hr>
<section id="intro" class="level2">
<h2 class="anchored" data-anchor-id="intro">Intro</h2>
<p>🚨 Publication alert! 🚨</p>
<p>Happy to share that “Acyclic Behavior Change Diagrams: A Tool to Report and Analyze Interventions” is now out in Health Psychology &amp; Behavioral Medicine!</p>
<p>You can get it at <a href="https://doi.org/jp9t" class="external" target="_blank">https://doi.org/jp9t</a> - or read this brief thread to get the main points!</p>
<p>#Psychology #OpenScience #BehaviorChange #InterventionDesign #HealthPromotion #PublicHealth #RStats <span class="citation" data-cites="rstats">@rstats</span><span class="citation" data-cites="gup.pe">@gup.pe</span></p>
<p>🧵 1/21</p>
<p><img src="https://behaviorchange.eu/img/abcd-from-manuscript.png" class="img-fluid" alt="An Acyclic Behavior Change Diagram"></p>
<hr>
</section>
<section id="behavior-change-is-hard" class="level2">
<h2 class="anchored" data-anchor-id="behavior-change-is-hard">Behavior change is hard</h2>
<p>We started creating the ABCD because #BehaviorChange is <em>hard</em>.</p>
<p>That’s because behavior is complicated and the result of many psychological constructs or behavioral determinants.</p>
<p>There’s no list of a number of ‘tricks’ you can use for behavior change: instead, interventions often have multiple components, targeting multiple determinants on multiple levels.</p>
<p>🧵 2/21</p>
<p><img src="https://behaviorchange.eu/img/it-s-so-hard.gif" class="img-fluid" alt="A woman saying 'it's so hard'"></p>
<hr>
</section>
<section id="intervention-content-is-inadequately-reported" class="level2">
<h2 class="anchored" data-anchor-id="intervention-content-is-inadequately-reported">Intervention content is inadequately reported</h2>
<p>This complexity means that accurate, comprehensive and transparent communication about what an intervention uses to target which psychological constructs (determinants) is vital.</p>
<p>However, research by De Bruin et al.&nbsp;(2021; <a href="https://doi.org/ggjwbg" class="external" target="_blank">https://doi.org/ggjwbg</a>) has shown that only about a quarter to a third of the behavior change techniques (BCTs) in interventions are reported.</p>
<p>This is a big problem for replication and for evidence synthesis: in short, for cumulative science.</p>
<p>🧵 3/21</p>
<p><img src="https://behaviorchange.eu/img/de-bruin-et-al--2021--underreported-bcts.png" class="img-fluid" alt="Two histograms from De Bruin et al. (2021) showing the extreme underreporting of BCTs."></p>
<hr>
</section>
<section id="causal-structural-chains" class="level2">
<h2 class="anchored" data-anchor-id="causal-structural-chains">Causal-structural chains</h2>
<p>Acyclic Behavior Change Diagrams (ABCDs) aim to address this problem, and in addition, provide a tool to support intervention development.</p>
<p>ABCDs are not an intervention development framework (such as #InterventionMapping, the #BehaviorChangeWheel, or #SocialMarketing), but they complement such frameworks by providing a tool to document and communicate about the assumptions underlying an intervention.</p>
<p>We call these assumptions the causal-structural chains.</p>
<p>🧵 4/21</p>
<p><img src="https://behaviorchange.eu/img/causal-structural-chain-1.png" class="img-fluid" alt="An image showing a causal-structural chain, with seven links showing, from left to right: behavior change principles; parameters for effectiveness; applications; subdeterminants; determinants; sub-behaviors; and the target behavior."></p>
<hr>
<p>Causal-structural chains end with the target behavior. The preceding links are sub-behaviors, because target behaviors are often defined at a generic level (e.g., “healthy diet”, “safe sex”, or “sufficient exercise”).</p>
<p>Sub-behaviors are caused by determinants: psychological constructs such as attitude, habit, or skill, norms (another link). The 4th link is central: sub-determinants, which are concrete, specific, context-dependent ‘sub-constructs’ comprising or causing the determinants.</p>
<p>🧵 5/21</p>
<hr>
<p>Where determinants are defined on the generic level (and are studied across populations, behaviors, and contexts), they are usually assumed to describe representations that are much more specific and concrete, and very by population, context, and behavior (e.g, “If I drink too much, I will get a hangover” or “Nobody I know was vaccinated”).</p>
<p>This distinction is important because intervention content (e.g.&nbsp;messages) necessarily exists on the sub-determinant level.</p>
<p>🧵 6/21</p>
<p><img src="https://behaviorchange.eu/img/visualizing-1.gif" class="img-fluid" alt="A GIF of a man saying 'I'm just having a bit of a hard time visualizing it'"></p>
<hr>
<p>These last four links describe the assumptions about why people do what they do: which parts of their psyche an intervention targets, and so are considered the most important (e.g., habits, attitude, impulse control, self-efficacy, etc).</p>
<p>This is one half of why intervention developers believe that an intervention will change behavior.</p>
<p>🧵 7/21</p>
<p><img src="https://behaviorchange.eu/img/understand-1.gif" class="img-fluid" alt="A GIF of a man saying 'you think you understand it, but you don't'"></p>
<hr>
<p>The other half describes the assumptions about what can change what.</p>
<p>Specifically, which behavior change principles (also known as behavior change techniques, BCTs, or methods of behavior change) will be used to target which sub-determinants (and so, which determinants).</p>
<p>These behavior change principles form the first link of each causal-structural chain: they make change possible in the first place.</p>
<p>🧵 8/21</p>
<p><img src="https://behaviorchange.eu/img/changes-everything-dont-know-why.gif" class="img-fluid" alt="A GIF of a woman saying 'this changes everything, I just don't know why'"></p>
<hr>
<p>The second link of the chain is formed by the so-called “parameters of use” of the behavior change principle. These conditions for effectiveness describe which conditions have to be satisfied for the behavior change principle to “work”.</p>
<p>The why &amp; how of this is more complicated; see the manuscript for details 😬</p>
<p>But they’re very important, and therefore, so is the second link of the causal-structural chains that make up Acyclic Behavior Change Diagrams.</p>
<p>🧵 9/21</p>
<hr>
<p>Then we get to the final link of the causal-structural chain.</p>
<p>This 3rd link connects the behavior change principles (link 1) that aim to target the sub-determinants (link 4), while securing the conditions for effectiveness (link 2), and ultimately changing the determinants (link 5).</p>
<p>The 3rd link are the applications: the tangible, concrete parts that make up the intervention. Any given BCP can be implemented in a (practically infinite) variety of applications.</p>
<p>🧵 10/21</p>
<p><img src="https://behaviorchange.eu/img/causal-structural-chain-2.png" class="img-fluid" alt="An example of the seven links of the causal-structural chain, from the behavior change principle (persuasive communication) to the parameters (relevant message) to an application (infographic) which then targets a subd-determinant (the belief 'if I use a high dose of XTC, time seems to pass faster'), part of determinant Attitude, causing a sub-behavior (decide to use a high dose) and ultimately, the target behavior (dose XTC within the recommendation)."></p>
<hr>
<section id="interventions-as-a-set-of-chains" class="level3">
<h3 class="anchored" data-anchor-id="interventions-as-a-set-of-chains">Interventions as a set of chains</h3>
<p>Each casual-structural chain represents one path through which the intervention could have (a bit of) effect.</p>
<p>Any intervention is based on multiple such chains. The more chains there are, the larger the accumulative effect.</p>
<p>If one of the links in the chain is broken, for example because a sub-determinant isn’t important for a behavior, or because a behavior change principle cannot change the determinant it targets, that chain can no longer contribute to the intervention’s effect.</p>
<p>🧵 11/21</p>
<p><img src="https://behaviorchange.eu/img/weakest-link-1.gif" class="img-fluid" alt="A GIF of a woman saying 'just don't be the weakest link' and winking."></p>
<hr>
</section>
</section>
<section id="acyclic-behavior-change-diagrams-abcds" class="level2">
<h2 class="anchored" data-anchor-id="acyclic-behavior-change-diagrams-abcds">Acyclic Behavior Change Diagrams (ABCDs)</h2>
<p>In other words: it’s important to have a clear idea of these causal-structural chains, to critically reflect on these assumptions, and to communiate them transparently and accessibly.</p>
<p>Acyclic Behavior Change Diagrams help you to achieve both goals.</p>
<p>ABCDs are intuitive visualizations of the causal-structural chains that represent the assumptions about why an intervention would work.</p>
<p>This facilitates communication about an intervention, during development as well as in articles.</p>
<p>🧵 16/21</p>
<p><img src="https://behaviorchange.eu/img/communication-is-the-key.gif" class="img-fluid" alt="A GIF of one person kissing another, with the caption 'communication is the key'"></p>
<hr>
</section>
<section id="abcd-matrices" class="level2">
<h2 class="anchored" data-anchor-id="abcd-matrices">ABCD matrices</h2>
<p>But - ABCDs have a second purpose. They are generated from so-called ABCD matrices.</p>
<p>Especially researchers who have done a #SystematicReview or two about behavior change interventions will appreciate the ABCD matrices, because ABCD matrices are <em>machine-readable</em>.</p>
<p>This means no more coding of BCTs - and guaranteed exhaustive and 100% accurate specification of BCTs!</p>
<p>It also means you know exactly which (sub)behaviors an intervention was designed to target, and which (sub)determinants.</p>
<p>🧵 17/21</p>
<p><img src="https://behaviorchange.eu/img/causal-structural-chain-and-abcd.png" class="img-fluid" alt="An image showing an acyclic behavior change diagram and above it, a causal structural chain."></p>
<hr>
<p>An ABCD matrix is a table with seven columns, where each row represents one causal-structural chain, from a</p>
<ul>
<li><p>1️⃣ behavior change principle (BCT) with its</p></li>
<li><p>2️⃣ corresponding conditions for effectiveness, as implemented in</p></li>
<li><p>3️⃣ a practical, tangible Application, which targets</p></li>
<li><p>4️⃣ a given concrete, contextualize sub-determinant, that is part of</p></li>
<li><p>5️⃣ a determinant (a psychological constructs), which causes</p></li>
<li><p>6️⃣ a sub-behavior, which together with other sub-behaviors forms</p></li>
<li><p>7️⃣ the ultimate target behavior.</p></li>
</ul>
<p>🧵 18/21</p>
<p><img src="https://behaviorchange.eu/img/causal-structural-chain-and-matrix.png" class="img-fluid" alt="An image showing a screenshot from a Google Sheets preadsheet with causal structural chains, and above it, a causal-structural chain with arrows connecting each link to the corresponding column."></p>
<hr>
</section>
<section id="creating-an-abcd-yourself" class="level2">
<h2 class="anchored" data-anchor-id="creating-an-abcd-yourself">Creating an ABCD yourself</h2>
<p>The ABCD matrix is also how you produce an ABCD. We created a function “abcd()” in the {behaviorchange} :rstats: 📦, as well as added a function to the “behaviorchange” jamovi module, but, most importantly, Luke McGuinness (<a href="https://www.lukemcguinness.com/" class="external" target="_blank">https://www.lukemcguinness.com/</a>) created an R Shiny app!!!</p>
<p>It’s at <a href="https://a-bc.eu/apps/abcd" class="external" target="_blank">https://a-bc.eu/apps/abcd</a>, and allows you to upload an .xlsx file or import directly from Google Sheets!</p>
<p>🧵 19/21</p>
<p><img src="https://behaviorchange.eu/img/abcd-app-imported-abcd-matrix.png" class="img-fluid" alt="A screenshot of the ABCD Shiny App showing how the example ABCD matrix was just imported."></p>
<hr>
<p>Once you imported an ABCD matrix, you can produce the Acyclic Behavior Change Diagram itself, and then download it as .PDF, .PNG, or .SVG.</p>
<p>If you download it as .SVG, you can then edit it using, for example, InkScape (<span class="citation" data-cites="inkscape">@inkscape</span><span class="citation" data-cites="mastodon.art">@mastodon.art</span>), to emphasize certain elements.</p>
<p>The defaut colors are based on a color scheme to help students distinguish between these seven central behavior change concepts, by the way (from another project) 🎨</p>
<p>🧵 20/21</p>
<p><img src="https://behaviorchange.eu/img/abcd-app-produced-abcd.png" class="img-fluid" alt="A screenshot of the ABCD Shiny App showing an Acyclic Behavior Change Diagram that was just created."></p>
<hr>
<p>Hopefully, ABCDs can help you maintain an overview of the assumptions in your interventions; help discuss interventions with stakeholders; and help to transparently and machine-readably report intervention contents.</p>
<p>There’s a whole thread just about the Shiny app here: <a href="https://mastodon.nl/@matherion/109338006503804990" class="external" target="_blank">https://mastodon.nl/<span class="citation" data-cites="matherion/109338006503804990">@matherion/109338006503804990</span></a></p>
<p>Also, the manual page for the R function is available at <a href="https://behaviorchange.opens.science/reference/abcd.html" class="external" target="_blank">https://behaviorchange.opens.science/reference/abcd.html</a></p>
<p>Oh, and the article is at <a href="https://doi.org/jp9t" class="external" target="_blank">https://doi.org/jp9t</a></p>
<p>🧵 21/21</p>
<p><img src="https://behaviorchange.eu/img/visually-pleasing-1.gif" class="img-fluid" alt="A GIF of three men with odd conical heads saying 'it's also visually pleasing'"></p>
<hr>
</section>
<section id="example-of-an-abcd-in-the-wild" class="level2">
<h2 class="anchored" data-anchor-id="example-of-an-abcd-in-the-wild">Example of an ABCD in the wild</h2>
<p>Oh, and I forgot, stupid of me: Gido Metz, the amazing first author of this paper, also published an example where the ABCD was applied to an intervention, so check out <a href="https://doi.org/jqmc" class="external" target="_blank">https://doi.org/jqmc</a> for a real-world example.</p>
<p>🧵 22/21</p>
<p><img src="https://behaviorchange.eu/img/check-it-out-1.gif" class="img-fluid" alt="A man with a lively, party-like background, saying 'Check it out!'"></p>


</section>

 ]]></description>
  <category>mastodon</category>
  <guid>https://behaviorchange.eu/posts/2022-12-acyclic-behavior-change-diagrams--mastodon-thread.html</guid>
  <pubDate>Tue, 13 Dec 2022 23:00:00 GMT</pubDate>
</item>
<item>
  <title>Knowing what we’re talking about: a Mastodon thread</title>
  <dc:creator>Gjalt-Jorn Peters</dc:creator>
  <link>https://behaviorchange.eu/posts/2022-12-knowing-what-we-re-talking-about--mastodon-thread.html</link>
  <description><![CDATA[ 





<p>This is a Mastodon thread. <a href="https://mastodon.nl/@matherion/109445312966461935" class="external" target="_blank">The original thread is available here</a>:</p>
<iframe src="https://mastodon.nl/@matherion/109445312966461935/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" allowfullscreen="allowfullscreen">
</iframe>
<script src="https://mastodon.nl/embed.js" async="async"></script>
<hr>
<section id="intro" class="level2">
<h2 class="anchored" data-anchor-id="intro">Intro</h2>
<p>🚨 Preprint alert! 🚨</p>
<p>#Psychology #OpenScience #Measurement #Validity #RStats <span class="citation" data-cites="rstats">@rstats</span><span class="citation" data-cites="gup.pe">@gup.pe</span></p>
<p>Ever had trouble understanding exactly how to interpret a construct’s definition?</p>
<p>Ever wondered why different articles seem to have different definitions of the same construct?</p>
<p>Ever wanted a solution for this?</p>
<p>We address this issue and present a set of #OpenSource tools to deal with it!</p>
<p>🧵 1/15</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://behaviorchange.eu/img/so-i-am-confusion.gif" class="img-fluid figure-img"></p>
<figcaption>A GIF of a woman’s face with lots of equations</figcaption>
</figure>
</div>
<hr>
</section>
<section id="replication-measurement-and-theory-crises" class="level2">
<h2 class="anchored" data-anchor-id="replication-measurement-and-theory-crises">Replication, measurement, and theory crises</h2>
<p>The replication crisis (or credibility revolution) revealed an underlying “measurement crisis” and a “theory crisis”. One symptom of this theory crisis is the “jingle jangle jungle”, both at the conceptual level and in measurement 🤔</p>
<p>On the one hand, sometimes on closer inspection, constructs or measurement instruments that are purportedly different turn out to be practically identical, preventing accumulation of knowledge and hindering evidence syntheses.</p>
<p>🧵 2/15</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://behaviorchange.eu/img/spider-man-clone-identical.gif" class="img-fluid figure-img"></p>
<figcaption>A GIF of two spidermen pointing at each other</figcaption>
</figure>
</div>
<hr>
<p>On the other hand, sometimes measurement instruments supposedly measuring the same thing exhibit substantial differences in content, or in qualitative studies about the same construct, codebooks vary substantially. This means the findings from such studies cannot be compared or aggregated.</p>
<p>🧵 3/15</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://behaviorchange.eu/img/those-are-two-very-different-things-marie.gif" class="img-fluid figure-img"></p>
<figcaption>A GIF of a woman saying “those are two very different things”</figcaption>
</figure>
</div>
<hr>
</section>
<section id="construct-definitions" class="level2">
<h2 class="anchored" data-anchor-id="construct-definitions">Construct Definitions</h2>
<p>One cause of this is the exceptionally brief construct definitions used in psychology. Most construct definitions appear to be about 20 words or less - exceptionally concise for things that cannot be directly observed.</p>
<p>As a consequence, researchers using such concepts must first elaborate those definitions for themselves. Such elaborations, however, often remain hidden.</p>
<p>🧵 4/15</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://behaviorchange.eu/img/construct-definition-lengths.png" class="img-fluid figure-img"></p>
<figcaption>A screenshot of a paragraph from the preprint</figcaption>
</figure>
</div>
<hr>
<p>This heterogeneity in “study-level elaborated construct definitions” is in itself not bad. Epistemic diversity has a number of benefits, and studying multiple variations of construct definitions seems sensible.</p>
<p>However, it <em>is</em> a problem that this heterogeneity is hidden.</p>
<p>So: we want to avoid curation of construct definitions by a central authority, but simultaneously eliminate this hidden heterogeneity.</p>
<p>🧵 5/15</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://behaviorchange.eu/img/both-why-dont-we-have-both.gif" class="img-fluid figure-img"></p>
<figcaption>A GIF of a girl saying “Why don’t we have both?”</figcaption>
</figure>
</div>
<hr>
</section>
<section id="decentralized-construct-taxonomies" class="level2">
<h2 class="anchored" data-anchor-id="decentralized-construct-taxonomies">Decentralized Construct Taxonomies</h2>
<p>Enter: Decentralized Construct Taxonomies 💫</p>
<p>The idea is simple; a way to openly share:</p>
<ul>
<li><p>1️⃣ A unique construct identifier</p></li>
<li><p>2️⃣ A human-readable label</p></li>
<li><p>3️⃣ A comprehensive construct definition</p></li>
<li><p>4️⃣ Instructions for developing measurement instruments</p></li>
<li><p>5️⃣ Instructions for identifying/coding measurement instruments</p></li>
<li><p>6️⃣ Instructions for qualitative research</p></li>
</ul>
<p>These DCT specifications can easily be shared, re-used, or adapted.</p>
<p>🧵 6/15</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://behaviorchange.eu/img/Constructor-Shiny-App.png" class="img-fluid figure-img"></p>
<figcaption>A screenshot from the Constructor Shiny App</figcaption>
</figure>
</div>
<hr>
<p>By combining the comprehensive construct definitions with corresponding instructions for using the construct in quantitative and/or qualitative research, there will hopefully be less need for individual researchers to “fill in the blanks” when they design a study.</p>
<p>In addition, DCT specifications can easily be adapted. This way everybody can redefine constructs if they want to - and through the unique identifiers it’s always clear exactly which construct definition is used.</p>
<p>🧵 7/15</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://behaviorchange.eu/img/we-speak-the-same-language-jade.gif" class="img-fluid figure-img"></p>
<figcaption>A GIF of a woman saying “We speak the same language”</figcaption>
</figure>
</div>
<hr>
</section>
<section id="producing-comprehensive-construct-definitions" class="level2">
<h2 class="anchored" data-anchor-id="producing-comprehensive-construct-definitions">Producing comprehensive construct definitions</h2>
<p>We explain a number of ways to arrive at such comprehensive construct definitions, such as expert consensus, using the Delphi approach, using scoping reviews, and using qualitative and quantitative primary research.</p>
<p>One method is basically documenting the comprehensive, elaborated definitions your research team uses. No extra work, but less ambiguity and more transparency and openness!</p>
<p>🧵 8/15</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://behaviorchange.eu/img/cat-door.gif" class="img-fluid figure-img"></p>
<figcaption>A GIF of a cat opening a door</figcaption>
</figure>
</div>
<hr>
<p>The point is that to decrease the hidden heterogeneity, any effort to explicate construct definitions is helpful.</p>
<p>For example, in your research team, you could try the following.</p>
<p>Get together, take a construct you’re studying, and independently write down comprehensive definitions.</p>
<p>You’ll likely end up with different definitions. In some cases, the differences will be small; in others, larger.</p>
<p>🧵 9/15</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://behaviorchange.eu/img/the-dude-just-like-your-opinion.gif" class="img-fluid figure-img"></p>
<figcaption>A GIF from The Big Lebowski with the main character saying “That’s just, like… your opinion, man.</figcaption>
</figure>
</div>
<hr>
<p>Once you did this, you can start discussing these differences in “implicit elaborated construct definitions”. This will allow you to make sure you’re all on the same page regarding what exactly you’re studying.</p>
<p>Or, alternatively, you could design studies based on where you differ, which can then feed into further theory development.</p>
<p>In any case, this will help you to be more transparent: more Open Science!</p>
<p>🧵 10/15</p>
<hr>
</section>
<section id="five-tools-for-better-construct-definitions" class="level2">
<h2 class="anchored" data-anchor-id="five-tools-for-better-construct-definitions">Five tools for better construct definitions</h2>
<p>We also discuss how to work with decentralized construct taxonomies in practice. First, we introduce five tools we developed:</p>
<p>1️⃣ A YAML standard for DCTs</p>
<p>2️⃣ The {psyverse} #rstats 📦</p>
<p>3️⃣ Unique Construct Identifiers</p>
<p>4️⃣ The Constructor Shiny App 🏗️</p>
<p>5️⃣ The open source Psychological Construct Repository, PsyCoRe.one</p>
<p>🧵 11/15</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://behaviorchange.eu/img/PsyCoRe-one.png" class="img-fluid figure-img"></p>
<figcaption>A screenshot of the PsyCoRe.one repository</figcaption>
</figure>
</div>
<hr>
<p>The Constructor Shiny app, for example (at <a href="https://psycore.one/constructor" class="external" target="_blank">https://psycore.one/constructor</a>) allows you to:</p>
<ul>
<li><p>1️⃣ Type in a DCT specification (a comprehensive construct definition and the corresponding instructions for using it);</p></li>
<li><p>2️⃣ Or import it from a spreadsheet (or a Google Sheets URL);</p></li>
<li><p>3️⃣ And then creates a Unique Construct Identifier;</p></li>
<li><p>4️⃣ Lets you download the .YAML file;</p></li>
<li><p>5️⃣ And/or lets you submit it to PsyCoRe.one.</p></li>
</ul>
<p>🧵 12/15</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://behaviorchange.eu/img/Constructor---human-readable.png" class="img-fluid figure-img"></p>
<figcaption>A screenshot from the Constructor Shiny App</figcaption>
</figure>
</div>
<hr>
</section>
<section id="how-to-use-dct-specifications" class="level2">
<h2 class="anchored" data-anchor-id="how-to-use-dct-specifications">How to use DCT specifications</h2>
<p>Then, we discuss how to use DCT specifications in primary empirical research, both quantitative research and qualitative research; how to use DCT specifications in literature reviews; how to use them in theory development; how to use them in practice; and how to use them in large-scale collaborations.</p>
<p>🧵 13/15</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://behaviorchange.eu/img/using-dcts-for-large-scale-projects.png" class="img-fluid figure-img"></p>
<figcaption>A screenshot from the preprint</figcaption>
</figure>
</div>
<hr>
<p>What I really like about DCTs is that they’re so super-simple, almost trivial.</p>
<p>Mostly, they’re a concrete, tangible tool for better conceptual clarification - but a tool that also helps to share, re-use, and adapt.</p>
<p>They can help a lab to do more consistent research; in teaching, repositories can help students; and they can help knowledge translation towards practitioners.</p>
<p>🧵 14/15</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://behaviorchange.eu/img/negan-easy.gif" class="img-fluid figure-img"></p>
<figcaption>A GIF of the Negan character from the Walking Dead saying “Easy peasy lemon squeezy”</figcaption>
</figure>
</div>
<hr>
</section>
<section id="review-along-at-meta-psychology" class="level2">
<h2 class="anchored" data-anchor-id="review-along-at-meta-psychology">Review along at Meta-Psychology</h2>
<p>Last toot: we submitted this to Meta-Psychology. That means that everybody’s invited to peer review along!</p>
<p>Head over to <a href="https://doi.org/jnjp" class="external" target="_blank">https://doi.org/jnjp</a> and you can annotate using <a href="https://hypothes.is" class="external" target="_blank">https://hypothes.is</a> 🤩</p>
<p>🧵 15/15</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://behaviorchange.eu/img/simpsons-feedback.gif" class="img-fluid figure-img"></p>
<figcaption>A GIF from the Simpsons showing Mr.&nbsp;Burns saying “Thanks for the feedback” and shows disposing of shredded paper</figcaption>
</figure>
</div>


</section>

 ]]></description>
  <category>mastodon</category>
  <guid>https://behaviorchange.eu/posts/2022-12-knowing-what-we-re-talking-about--mastodon-thread.html</guid>
  <pubDate>Thu, 01 Dec 2022 23:00:00 GMT</pubDate>
</item>
</channel>
</rss>
