Apathy is lack of motivation towards goal-directed behaviours. It is pervasive in a majority of psychiatric and neurological diseases, and impacts everyday life. Traditionally, apathy has been measured as a one-dimensional construct but is in fact composed of different types of demotivation.
The Dimensional Apathy Scale (DAS) is a multidimensional assessment for demotivation, in which 3 subtypes of apathy are assessed:
Executive: lack of motivation for planning, attention or organisation
Emotional: lack of emotional motivation (indifference, affective or emotional neutrality, flatness or blunting)
Initiation: lack of motivation for self-generation of thoughts and/or actions
The DAS measures these subtypes of apathy and allows for quick and easy assessment, through self-assessment, observations by informants/carers or administration by researchers or healthcare professionals.
All items are measured on a 6-point Likert scale of Always (0), Almost Always (1), Often (2), Occasionally (3), Hardly Ever (4), and Never (5). Certain items (indicated in the table below with a - direction) are reverse scored to ensure that higher scores indicate greater levels of apathy.
item
direction
dimension
question
1
+
Executive
I need a bit of encouragement to get things started
2
-
Initiation
I contact my friends
3
-
Emotional
I express my emotions
4
-
Initiation
I think of new things to do during the day
5
-
Emotional
I am concerned about how my family feel
6
+
Executive
I find myself staring in to space
7
-
Emotional
Before I do something I think about how others would feel about it
8
-
Initiation
I plan my days activities in advance
9
-
Emotional
When I receive bad news I feel bad about it
10
-
Executive
I am unable to focus on a task until it is finished
11
+
Executive
I lack motivation
12
+
Emotional
I struggle to empathise with other people
13
-
Initiation
I set goals for myself
14
-
Initiation
I try new things
15
+
Emotional
I am unconcerned about how others feel about my behaviour
16
-
Initiation
I act on things I have thought about during the day
17
+
Executive
When doing a demanding task, I have difficulty working out what I have to do
18
-
Initiation
I keep myself busy
19
+
Executive
I get easily confused when doing several things at once
20
-
Emotional
I become emotional easily when watching something happy or sad on TV
21
+
Executive
I find it difficult to keep my mind on things
22
-
Initiation
I am spontaneous
23
+
Executive
I am easily distracted
24
+
Emotional
I feel indifferent to what is going on around me
Here are the item numbers that correspond to each dimension.
Executive: 1, 6, 10, 11, 17, 19, 21, 23
Emotional: 3, 5, 7, 9, 12, 15, 20, 24
Initiation: 2, 4, 8, 13, 14, 16, 18, 22
Question 1
Read in the data. It will need a little bit of tidying before we can get to fitting a CFA.
By the looks of things, this is what I would consider doing:
Rename the variables to easy-to-read strings like q1, q2, q3, etc.
Set up a data dictionary that records the text of the item q1 corresponds to, the text that q2 corresponds to, etc.
Recode the Likert scale labels to numbers.
Reverse-code the questions with a negative direction. Note, you don’t need to this, as they’ll just end up with loadings in the opposite direction, but I would strongly recommend it for interpretation purposes.
Check if there is missing data and if there is, removing those observations.
# A tibble: 6 × 24
I need a bit of encouragement …¹ `I contact my friends` I express my emotion…²
<chr> <chr> <chr>
1 Often Almost Always Almost Always
2 Almost Always Hardly Ever Occasionally
3 Often Occasionally Occasionally
4 Hardly Ever Occasionally Almost Always
5 Occasionally Hardly Ever Occasionally
6 Occasionally Occasionally Almost Always
# ℹ abbreviated names: ¹`I need a bit of encouragement to get things started`,
# ²`I express my emotions`
# ℹ 21 more variables: `I think of new things to do during the day` <chr>,
# `I am concerned about how my family feel` <chr>,
# `I find myself staring in to space` <chr>,
# `Before I do something I think about how others would feel about it` <chr>,
# `I plan my days activities in advance` <chr>, …
The names we’re getting are useful in that they show the items, but they’re horrible to have to use in R, so we will ideally replace them with easy to use names. Note also that the data is being read in as the actual response option - e.g., “Almost Always” - and we want to treat these as a numeric scale. So those will have to change too.
Solution 2. I like to make a “data dictionary” whenever I get data like this. While I want to rename the variables to make it easier for me to use, I also want to keep track of what the questions were.
Here I make a “tibble” (the function data.frame() would work too, tibble is just tidyverse version). I indicate what I am going to rename things as (“q1”,“q2”, …, “q24”), and then I have the current names of the variables
Doing this is really useful because I can’t keep track in my head of what “q5” was.
If I want to know, then I can just do:
rdas_dict[5,]
# A tibble: 1 × 2
variable item
<chr> <chr>
1 q5 I am concerned about how my family feel
Now let’s actually change the names in our data to what we said we would:
names(rdas) <-paste0("q", 1:24)
Solution 3. Okay, so we have all our data in words, not numbers. Views on how to treat Likert data are mixed, but it’s very common to treat it as continuous in Psychology.
Let’s check the response values we have. Just in question 1 for now:
A little trick that we can use to find the unique values in an entire dataset is to quickly convert the dataframe into one big long vector. Technically, a dataframe is a “list of vectors”, and the function unlist() will remove this structure.
So we can find all the unique values in all the questions with:
Perfect. So we know we have uniformity of spelling. It happens less often these days as questionnaire software is improving, but you might occasionally encounter typos in some of the questions, or things with and without capital letters (R is a bit thick, and doesn’t recognise that “Often” and “often” are the same thing).
Note that we have the 6 responses that we would expect given the description of the scale, but we also have some NA values, and some [NO ENTRY] values. Not sure how those got there.
We want to turn each “Always” in to 1, each “Almost Always” in to 2, “Often” in to 3, and so on. If we simply leave out the “[NO ENTRY]”, then this will be turned into a missing value NA, which is handy.
Solution 4. According to the table of items, the ones which need to be reverse scored are:
reversed <-c(2,3,4,5,7,8,9,10,13,14,16,18,20,22)
For these items, we want 6s to become 1s, 5s become 2s, and so on.
The tidyverse solution shown in the readings and solutions to previous labs will work just fine, but if you’re curious, here’s a different way to accomplish the same thing using functions from base R:
Note: The above code works nicely because our dataset is currently ordered such that the first column is item 1, 2nd column is item 2, and so on. This means we can use numbers to index the appropriate variables, rather than names. It would need adjusting if, for instance, our first column contained “participant ID”, and our items only began later.
Solution 5. We haven’t learned about more sophisticated methods of handling missing data, so for now we will just remove any rows in which there is missingness - i.e., we’ll do “listwise deletion”:
compl_rdas <-na.omit(rdas)
Question 2
Specify the theoretical model proposed by Radakovic et al.
Challenge: Before you estimate the model, how many degrees of freedom do you think the model will have? (The readings will help here!)
Hints
You’ll have to use the data dictionary to see which items are associated with which dimensions.
Solution 6. Here is the model structure, according to the list of items in the dictionary.
I’m calling my factors “Em”, “Ex”, and “BCI” for “emotional”, “executive” and “behavioural/cognitive initiation” respectively. The factor correlations will be estimated by default, but I like to write things explicitly.
Solution 7. Degrees of freedom is computed as the number of “knowns” minus the number of “unknowns”.
Let’s start with figuring out the number of “knowns”: the number of values in the dataset. This number comes from the observed covariance matrix. Let’s imagine a smaller dataset with only five items. It’ll create a covariance matrix like this:
var
covar var
covar covar var
covar covar covar var
covar covar covar covar var
How many values are in this matrix? In the first row, there’s 1, plus the second row with 2, plus the third row with 3, plus the fourth row with 4, plus the fifth row with 5. In other words, there are
sum(1:5)
[1] 15
values in this covariance matrix.
For the present scenario with 24 items, we will have
sum(1:24)
[1] 300
values in the covariance matrix. (Twenty-four of these will be each item’s own variance, and the other 276 will be covariances between items.)
The alternative formula to calculate this is \(\frac{k \cdot (k+1)}{2}\), and we get the same number by plugging in the number of variables for \(k\): \(\frac{24 \cdot (24+1)}{2} = \frac{600}{2} = 300\)
Now let’s look at the number of “unknowns”: the number of parameters the model has to estimate. This number comes from the number of latent variables and how they relate to each item.
Each latent variable has its own variance, and there are three latent variables, so the model will have three latent factor variances.
Each item will load onto one latent variable, and there are 24 items, so the model will have 24 factor loadings.
Each item will have residual factor variances, and there are 24 items, so the model will have 24 residual factor variances.
Adding these up, we get
3+24+24
[1] 51
unknown parameters.
Finally, let’s subtract the knowns from the unknowns to get the degrees of freedom:
300-51
[1] 249
Question 3
Estimate the model using cfa().
You can choose whether you want to standardise the latent factors or fix the first loading of each factor to be 1 (it’s the same model, just scaled differently).
Examine the model fit - does it fit well?
What modifications do the modification indices suggest? Are the top three suggestions theoretically reasonable, in your opinion?
Remember, we don’t really want to have to make modifications to our models. If you don’t need to (if the model fits well) then don’t bother! (It’s still worth looking at the modification indices though).
Hints
There’s a whole section on “model fit” in the CFA chapter!
The standard test of model fit is a chi-squared test which compares the observed covariance matrix to the model-implied covariance matrix. Ideally, these two matrices will be fairly similar, so we want a non-significant result.
We can get the test statistic and p-value from the model’s chi-squared test as follows:
So a chi-squared test with 249 degrees of freedom results in a test statistic of 274.8, associated with a p-value of 0.125. The take-away is that our observed covariance matrix is not significantly different from the model-implied covariance matrix—yay!
Next, let’s check the additional measures of global fit:
All looks pretty good! Cut-offs for SRMR tend to vary, with some using <0.08, or <0.09, and some being stricter with <0.05. Remember, these criteria are somewhat arbitrary.
Modification indices suggest a whole bunch of items that could have some associations beyond that modelled in the factors, but these are all weak correlations at around 0.2.
These are the top 3 being suggested. I can’t see any obvious link between any of these that would make me think they are related beyond their measuring of ‘apathy’.
rdas_dict[c(3,6),]
# A tibble: 2 × 2
variable item
<chr> <chr>
1 q3 I express my emotions
2 q6 I find myself staring in to space
rdas_dict[c(1,9),]
# A tibble: 2 × 2
variable item
<chr> <chr>
1 q1 I need a bit of encouragement to get things started
2 q9 When I receive bad news I feel bad about it
rdas_dict[c(19,20),]
# A tibble: 2 × 2
variable item
<chr> <chr>
1 q19 I get easily confused when doing several things at once
2 q20 I become emotional easily when watching something happy or sad on TV
Question 4
Are the (standardised) loadings all “big enough”?
There’s no clear threshold that people use here - it depends a lot on the field, and on the wordings of specific items. Ideally, the same value we used in EFA (\(\geq|0.3|\)) would be nice, but not crucial.
Hints
To get out standardised loadings, we can do:
mod.est <-cfa(model_syntax, data = ...)summary(mod.est, std=TRUE)
And you’ll get out an extra 2 columns in the summary output.
Pay attention to the Estimate, Std.lv and Std.all columns in your output. The way I think of these columns is just to think of how we scale things in regression models:
Estimate column : item ~ Factor
Std.lv column : item ~ scale(Factor)
Std.all column: scale(item) ~ scale(Factor)
So if, when we fitted the model, we had specified cfa(model, data, std.lv = TRUE), then the factor already has a variance of 1, so Scale(Factor) doesn’t do anything.
Solution 9. I’m not going to print all of this right now because there’s so much output, but here’s how we would find standardised loadings. We can find them in the Std.all column.
The standardised loadings are all (just) greater than \(|0.3|\). Questions 13 and 15 are very close…
rdas_dict[c(13,15),]
# A tibble: 2 × 2
variable item
<chr> <chr>
1 q13 I set goals for myself
2 q15 I am unconcerned about how others feel about my behaviour
Question 5
Do the factors correlate in the way you would expect?
Is more emotional apathy associated with more executive apathy? and with more initiation apathy?
Hints
If you didn’t reverse code the appropriate items, then this might get confusing, because we’d have to look at factor loadings to know in which direction the factor is going (i.e., are higher numbers “more apathy” or “less apathy”?).
If you did reverse code the appropriate items, then you’re golden, because you made them all point towards “more” apathy.
Solution 10. Here are the correlations we’re interested in. Note that what we are seeing is that the three factors are all positively correlated, but for Em and Ex this is only weak (and not significant).
This isn’t necessary a problem, it just means that these two factors are fairly distinct/orthogonal. We might want to check back in the original paper to see what they proposed!
summary(dasmod.est, std =TRUE)
...
Covariances:
Estimate Std.Err z-value P(>|z|) Std.lv Std.all
Ex ~~
Em 0.051 0.028 1.807 0.071 0.159 0.159
Em ~~
BCI 0.043 0.018 2.369 0.018 0.263 0.263
Ex ~~
BCI 0.151 0.040 3.746 0.000 0.642 0.642
Question 6
Make a diagram of the model.
Hints
For a quick look at the structure of the model, try the semPaths() function from the semPlot package Chapter 4 CFA#making diagrams.
If you were going to use this sort of diagram in a proper write-up, though, it’d be better to make a nicer graphic manually (e.g., in Powerpoint, your favourite graphics software, or semdiag).
There are lots of options in semPaths(), so if you can make your graphic more elaborate than this one, then be our guest!
Optional Question 7
Imagine that you’re a clinician administering the DAS to a patient. In clinical settings, it’s common practice to skip the complex factor analysis we’ve been doing here and just create a sum score or a mean score that describe a patient’s responses. Then clinicians can check whether the score is above some threshold to see whether there’s cause for concern.
For each of the dimensions of apathy in the data, calculate sum scores for each of the 250 participants.
Hints
Good ol’ rowSums() to the rescue!
Solution 12. Here are the sets of items associated with each dimension:
Again, because the item numbers correspond to the column positions in our data, we can just do rowSums indexing on those column numbers to get our scores:
How might you think about a sum/mean score in terms of a diagram?
Hints
What does a sum or mean score imply about how each item is weighted compared to the others? How is this different from what a more sophisticated method like EFA or CFA can do?
Solution 13. Computing sum scores can feel like a ‘model free’ calculation, but actually it does pre-suppose a factor structure, and a much more constrained one than those we have been estimating. Specifically, we’re assuming that all items contribute equally to an underlying factor, rather than being weighted differently, and that all items also have the same variance as one another.
The “Domains of Online Obsession Measure” (DOOM) is a fictitious scale that aims to assess the sub types of addictions to online content. It was developed to measure 2 separate domains of online obsession: items 1 to 9 are representative of the “emotional” relationships people have with their internet usage (i.e. how it makes them feel), and items 10 to 15 reflect “practical” relationship (i.e., how it connects or interferes with their day-to-day life). Each item is measured on a 7-point likert scale from “strongly disagree” to “strongly agree”.
We administered this scale to 476 participants in order to assess the validity of the 2 domain structure of the online obsession measure that we obtained during scale development.
i spend hours scrolling through tutorials but never actually attempt any projects.
item_3
cats are my main source of entertainment.
item_4
life without the internet would be boring, empty, and joyless
item_5
i try to hide how long i’ve been online
item_6
i avoid thinking about things by scrolling on the internet
item_7
everything i see online is either sad or terrifying
item_8
all the negative stuff online makes me feel better about my own life
item_9
i feel better the more 'likes' i receive
item_10
most of my time online is spent communicating with others
item_11
my work suffers because of the amount of time i spend online
item_12
i spend a lot of time online for work
item_13
i check my emails very regularly
item_14
others in my life complain about the amount of time i spend online
item_15
i neglect household chores to spend more time online
Question 9
Assess whether the 2 domain model of online obsession provides a good fit to the validation sample of 476 participants.
Solution 14. From the visual of the correlation matrix, you can see the vague outline of two groups of items correlations. Note there’s a little overlap..
Are there any areas of local misfit (certain parameters that are not in the model (and are therefore fixed to zero) but that could improve model fit if they were estimated?).
Solution 15. I’m printing out just the head(), so that I can look at the few parameters with the greatest modification indices.
The top three parameters jump out immediately to me. item_1 and item_3 have a suggested correlation of c0.5, as do item_7 and item_8. In addition, it’s suggested that including a loading (estimated to be about 0.6) from item_10 to the emot factor would improve the model fit.
Beware: there’s a slightly blurred line here that we’re about to step over, and move from confirmatory back to ‘exploratory’.
Look carefully at the item wordings,do any of the suggested modifications make theoretical sense? Add them to the model and re-fit it. Does this new model fit well?
As a general heuristics:
Less contentious use of modification indices:
residual covariances for items within a factor (essentially asserts that the two observed variables share some of their specific variance)
More contentious uses of modification indices:
adding cross-loadings (could argue that an item loading on two factors is not a clean indicator, and so should be removed)
residual covariances for items on different factors - often harder to defend
changing paths between the latent variables - very definitely changing your theory!
Solution 16. There are three main proposed adjustments from our initial model:
item_1 ~~ item_3. These questions are both about animals. It would make sense that these are related over and above the underlying “emotional internet usage” factor.
item_7 ~~ item_8. These are both about viewing negative content online, so it makes sense here that they would be related beyond the ‘emotional’ factor.
emot =~ item_10. This item is about communicating with others. It currently loads highly on the pract factor too. It maybe makes sense here that “communicating with others” will capture both a practical element of internet useage and an emotional one.
Putting them all in at once could be a mistake - if we added in emot =~ item_10, then we change slightly the underlying construct of the emot factor, meaning it might make other suggested modifications (item_7 ~~ item_8) less important. It’s a bit like Whac-A-Mole - you make one modification and then a whole new area of misfits appears!
Let’s adjust our model, putting in the covariance between item_1 and item_3 in.
Whoop! It fits well! It may well be that if we inspect modification indices again, we still see that emot =~ item_10 would improve our model fit. The thing to remember however, is that we could simply keep adding parameters until we run out of degrees of freedom, and our model would “fit better”. But such a model would not be useful. It would not generalise well, because it runs the risk of being overfitted to the nuances of this specific sample.
Based on our analysis of the DOOM measure, which of the following statements accurately reflect our current position? (you can choose multiple!)
A The theoretical measurement model is now confirmed. Because our final fit indices (CFI/RMSEA) meet the thresholds, the initial theory of DOOM scrolling is validated.
B We have confirmed our theoretical measurement model, but with some caveats
C Our analysis has shifted from confirmatory to exploratory; while the model now fits the data, it requires validation on an independent sample.
D The measure of doom scrolling is fundamentally flawed and should be discarded/updated due to the initial lack of fit.
E The measure of doom scrolling is likely suffers from poor content validity. The need for correlated errors suggests item wordings are redundant or overlapping, meaning the scale likely needs redesigning.
Solution 17. I would probably opt for C and E here. The suggested factor loading of emot =~ item_10 to me is a bit of a red flag. Ideally we don’t want to have measures that have cross-loadings (items loading on to multiple factors), because it blurs the meaning of the factors.
Similarly, just looking at the wordings of the items - some of them (item_3) don’t actually ask anything specific to being online!
In this case, the likely reason for the initial poor fit of the “DOOM” scale, is that the person who made the items (ahem, me) doesn’t really know anything about the construct they are talking about, and didn’t put much care into constructing the items!
More Conduct Problems
Data: conduct_problems_2.csv
Last week we conducted an exploratory factor analysis of a dataset to try and identify an optimal factor structure for a new measure of conduct (i.e., antisocial behavioural) problems.
This week, we’ll conduct some confirmatory factor analyses (CFA) of the same inventory to assess the extent to which this 2-factor structure fits an independent sample. To do this, we have administered our measure to a new sample of n=600 adolescents.
We have re-ordered the questionnaire items to be grouped into the two types of behaviours:
Read in the data, and take a quick look around (e.g., cor matrix, quick pairs.panels plots etc).
Fit the proposed 2 factor model
Examine the fit of the 2-factor model of conduct problems to this new sample of 600 adolescents.
Evaluate the fit, and make any model modifications if necessary (and only if you feel that there is substantive support for the modification given the items).
Make a diagram of your model, using the standardised factor loadings as labels.
Make a bullet point list of everything you have done so far, and the resulting conclusions. Then, if you feel like it, turn the bulleted list into written paragraphs, and you’ll have a write-up of your analyses!
It maybe makes sense that there is some residual covariance between item6 (“threatening others”) and item10 (“fighting”), but it’s only a weak correlation (0.14). Not worth adding.
So let’s get on with making a diagram. We can rotate this however you like. Convention is typically to have it downwards but I like it left to right (not sure why!)
A two-factor model was tested. Items 1-5 loaded on a ‘non-aggressive conduct problems’ factor and items 6-10 loaded on an ‘aggression’ factor and these factors were allowed to correlate. Scaling and identification were achieved by fixing the loading of item 1 on the non-aggressive conduct problems factor and item 6 on the aggression factor to 1. The model was estimated using maximum likelihood estimation. The model fit well with CFI=.99, TLI=0.99, RMSEA=.04, and SRMR=.04 (Hu & Bentler, 1999). All loadings were statistically significant and >|.3| on the standardised scale. Overall, therefore, a two-factor oblique model was supported for the conduct problems items. The correlation between the factors was \(r=.38\,\, (p<.001)\).