DAPR3 Lab Exercises
  • Multi-level Models
    • W1: Regression Refresher
    • W2 Exercises: Introducing MLM
    • W3 Exercises: Nested and Crossed Structures
    • W4 Exercises: Centering
    • W5 Exercises: Bringing it all together
  • Measurement & Factor Analysis
    • W7 Exercises: Scale Scores & PCA
    • W8 Exercises: EFA
    • W9 Exercises: CFA
    • W10 Exercises: Reliability & Validity
    • W11 Exercises

On this page

  • Measuring pro-environmental orientation
  • Where now?

W10 Exercises: Reliability & Validity

Measuring pro-environmental orientation

Dataset: Sparks, Ehret, Brick, 2022

These data come from a 2022 Study that aimed to develop a new measure of environmental attitudes. Specifically, the data we are working with are from “Study 2” (It starts on page 6 of the article, but it’s very similar to Study 1, so the whole thing is relevant).

To get the data, go to https://osf.io/d4ume/files/tyj27?view_only=05d5cfb5a76a4f11b339290913da96f6 and click on the download button. You’ll then have to point R to where it is located on your computer.

It contains lots and lots of variables. It seems like they have already reverse coded any of the necessary individual items (and renamed them with _r after them). They’ve also calculated and included the mean scores for each measure.

Table 1: Overview of ssi_clean.csv variables
what variables
Demographics educ, hhincome, Dem, Rep, female, Ideology, age, urban, environmentalist, enviro.move, age.1
Connectedness to Nature Scale (CNS) Items cns1, cns2, cns3, cns4_r, cns5, cns6, cns7, cns8, cns9, cns10, cns11, cns12_r, cns13, cns14_r
CNS Mean Score CNS
New Ecological Paradigm (NEP) Items nep1, nep2_r, nep3, nep4_r, nep5, nep6_r, nep7, nep8_r, nep9, nep10_r, nep11, nep12_r, nep13, nep14_r, nep15
NEP Mean Score NEP
Moral Environmentalism Scale (MES) Items mes1_r, mes_2, mes_3, mes_4, mes_5, mes_6, mes_7, mes8_r, mes_9, mes10_r, mes_11, mes_12, mes_13, mes_14, mes_15, mes_16, mes_17, mes_18, mes_19, mes_20, mes_21, mes22_r, mes23_r, mes_24, mes_25, mes_26, mes27_r
MES Mean Score MES
2000 Gallup Earth Day Poll Behaviours act.org, cand, money.org, cont.off, cont.bus, petition, meeting, product, water, buycott, recycle, energy, stocks
Number of private pro-environmental behaviours (Gallup Poll) private
Number of public pro-environmental behaviours (Gallup Poll) public
Number of all pro-environmental behaviours (Gallup Poll) PEB
Question 1

The paper is reporting a new measure of environmental orientation. Which one is the new one?
What benefits do they think it has over the existing measures?

Take a look at the wordings of the items for their new measure, and for the existing measures (these are near the end of the paper). Do you agree?

Solution 1. Their new measure is the “Moral Environmentalism Scale” (MES). They suggest it may be an improvement over other measures because they tend to have a politically left-leaning ideology to the statements, whereas the MES is based on “moral foundations theory” (I’m not sure what that is, but they do go on to explain it somewhere I think).

Some of the item wordings of the MES are clearly specific to the US, which makes it less generalisable to other contexts. I’ll be honest - I can’t fully see the political ideology in the wordings of the CNS and NEP scales! But then a) I’m not from the US, and b) there’s the possibility depending on our own ideological leanings, it may be easier/harder to see the biases in the questions?

Question 2

What did the authors report for the reliability of the three main measures?

Can you get these out from the data?
note: I could get the same numbers for only 2 of the 3!

Solution 2. The authors reported Cronbach’s alpha,

“MES had high internal reliability with a Cronbach’s alpha of .92. Cronbach’s alpha for the NEP was .82 and .78 for the CNS.”

Let’s try!

library(tidyverse)
library(psych)
mes <- read_csv("data/ssi_clean.csv")

alpha( mes |> select(mes1_r:mes27_r) )$total
 raw_alpha std.alpha G6(smc) average_r  S/N     ase mean    sd median_r
     0.916     0.923   0.939     0.307 11.9 0.00381 3.96 0.561    0.301
alpha( mes |> select(nep1:nep15) )$total
 raw_alpha std.alpha G6(smc) average_r  S/N    ase mean    sd median_r
     0.817     0.814   0.836     0.226 4.37 0.0083 2.57 0.622    0.229
alpha( mes |> select(cns1:cns14_r) )$total
Some items ( cns12_r cns14_r ) were negatively correlated with the first principal component and 
probably should be reversed.  
To do this, run the function again with the 'check.keys=TRUE' option
 raw_alpha std.alpha G6(smc) average_r  S/N     ase mean    sd median_r
     0.811     0.823   0.848     0.249 4.65 0.00838 2.46 0.533    0.343

Hmm.. things are matching up with the MES and the NEP, but not the CNS. We also seem to get a message suggesting that some of the items are possibly reverse coded.

But even if we let alpha() take care of that we still don’t get the 0.78..
ah well.

alpha( mes |> select(cns1:cns14_r), check.keys = TRUE)$total
 raw_alpha std.alpha G6(smc) average_r S/N     ase mean    sd median_r
     0.847     0.855   0.868     0.297 5.9 0.00692  2.4 0.573    0.343

Question 3

How did the authors assess convergent validity of the MES?

Can you do the same?

Solution 3.

“Convergent validity was assessed through the zero-order correlations between the MES, CNS, and NEP.”
…
“The MES correlated strongly with the NEP, r(497) = 0.70, p< .001, and with the CNS, r(497) = 0.55, p < .001. CNS and NEP correlated moderately, r(998) = 0.46, p < .001. This overlap suggests that all three scales tapped into shared aspects of pro-environmental orientation.”

I think “zero order” here means “without considering any other variables”. So… just cor()?

I am going to assume these are between the mean scores for the scales. And we’ll use the pairwise complete observations - i.e., all observations that have both CNS and NEP will be used to calculate the correlation between those two, and all that have both MES and CNS for those, and so on..

mes |>
  select(MES,CNS,NEP) |>
  cor(use = "pairwise.complete.obs")
      MES   CNS   NEP
MES 1.000 0.549 0.701
CNS 0.549 1.000 0.447
NEP 0.701 0.447 1.000

We’re close, but the correlation between CNS and NEP isn’t quite the same (0.45 but it’s reported as 0.46).

Let’s check the numbers of observations:

mes |> select(MES,CNS) |> na.omit() |> nrow()
[1] 499
mes |> select(NEP,CNS) |> na.omit() |> nrow()
[1] 1000

Hmm… this all looks fine. The degrees of freedom reported for each of the correlations is \(n-2\).

Question 4

How did they assess predictive validity?

Can you do the same?

Solution 4.

“Predictive validity was assessed by examining how predictive they were of pro-environmental behavior in regression.”
…
“MES moderately correlated with pro-environmental behavior frequency, r(497) = 0.40, p < .001. The NEP had a weaker correlation with behavior r(998) = 0.26, p < .001. The CNS had the strongest correlation with behavior at r(998) = 0.46, p < .001.”

But then they initially produce some correlations…
These all seem to match:

mes |>
  select(MES,CNS,NEP,PEB) |>
  cor(use = "pairwise") |> 
  round(2)
     MES  CNS  NEP  PEB
MES 1.00 0.55 0.70 0.40
CNS 0.55 1.00 0.45 0.46
NEP 0.70 0.45 1.00 0.26
PEB 0.40 0.46 0.26 1.00

Their regressions take this form:

mod1 <- lm(PEB ~ MES + NEP + CNS + hhincome + Rep + age + female + Ideology + 
     educ, data = mes)

sjPlot::tab_model(mod1)
  PEB
Predictors Estimates CI p
(Intercept) -2.54 -4.76 – -0.33 0.025
MES 1.22 0.61 – 1.83 <0.001
NEP -0.67 -1.19 – -0.16 0.010
CNS 1.86 1.37 – 2.34 <0.001
hhincome 0.03 -0.07 – 0.13 0.518
Rep -0.29 -0.84 – 0.26 0.296
age -0.01 -0.02 – 0.00 0.141
female 0.07 -0.40 – 0.53 0.773
Ideology -0.28 -0.45 – -0.11 0.001
educ 0.13 -0.05 – 0.31 0.154
Observations 499
R2 / R2 adjusted 0.287 / 0.273
optional - issues with their conclusions

Note that the authors also calculate something called “partial omega squared” for their regressions. We haven’t actually seen these in DAPR, and they’re nothing to do with McDonald’s Omega - nothing to do with reliability.

These are essentially measures of “effect size” that are used to reflect “how much outcome variance is explained by a predictor”.

The authors note:

“The CNS had a larger effect on behavior than the MES (b=2.00 and b=1.41) … … The MES explained 18% of the variance in behavior while the CNS explained 9%. The NEP had no unique effect.”

We can get these out using:

library(effectsize)
omega_squared(mod1, partial=TRUE)
# Effect Size for ANOVA (Type I)

Parameter | Omega2 (partial) |       95% CI
-------------------------------------------
MES       |             0.18 | [0.13, 1.00]
NEP       |             0.00 | [0.00, 1.00]
CNS       |             0.10 | [0.06, 1.00]
hhincome  |         3.01e-04 | [0.00, 1.00]
Rep       |             0.02 | [0.00, 1.00]
age       |         4.72e-03 | [0.00, 1.00]
female    |             0.00 | [0.00, 1.00]
Ideology  |             0.02 | [0.01, 1.00]
educ      |         2.07e-03 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].

Their main conclusion for Study 2 says:

The main takeaway of Study 2 is the convergent and predictive validity of the MES. While the CNS more strongly predicted behavior demonstrated by its scaled coefficient, the partial omega squared value of MES indicated that it explained more of the variance in behavior than the CNS or NEP.

This is actually a mistake on their part. In their calculation of omega-squared, they have used “Type 1 sums of squares”. In essence, this means order matters.

So their results show that:

  1. not accounting for anything else, MES explains 18% of the variance in pro-environmental behaviours
  2. on top of the variance explained by MES, NEP explains 0%,
  3. on top of the variance explained by both MES and NEP, CNS explains 9%.

The issue is that they have interpreted them all as if they were showing “unique” variance explained (i.e., they’ve interpreted them all like number 3 above), and are saying that MES explains more. But it only explains more here because they put it in at the start.
Order them differently and we’ll get a different picture:

mod1a <- lm(PEB ~ CNS + NEP + MES + hhincome + Rep + age + female + Ideology + educ, data = mes)

omega_squared(mod1a, partial = TRUE)
# Effect Size for ANOVA (Type I)

Parameter | Omega2 (partial) |       95% CI
-------------------------------------------
CNS       |             0.22 | [0.17, 1.00]
NEP       |         1.78e-03 | [0.00, 1.00]
MES       |             0.04 | [0.02, 1.00]
hhincome  |         3.01e-04 | [0.00, 1.00]
Rep       |             0.02 | [0.00, 1.00]
age       |         4.72e-03 | [0.00, 1.00]
female    |             0.00 | [0.00, 1.00]
Ideology  |             0.02 | [0.01, 1.00]
educ      |         2.07e-03 | [0.00, 1.00]

- One-sided CIs: upper bound fixed at [1.00].

Or if we wanted to ask “does MES explain anything else beyond what demographics, CNS, NEP explain?”

mod1b <- lm(PEB ~ hhincome + Rep + age + female + Ideology + educ + CNS + NEP + MES, data = mes)

omega_squared(mod1b, partial = TRUE)
# Effect Size for ANOVA (Type I)

Parameter | Omega2 (partial) |       95% CI
-------------------------------------------
hhincome  |         8.76e-05 | [0.00, 1.00]
Rep       |             0.06 | [0.03, 1.00]
age       |         7.44e-03 | [0.00, 1.00]
female    |         4.81e-03 | [0.00, 1.00]
Ideology  |             0.05 | [0.03, 1.00]
educ      |         4.06e-03 | [0.00, 1.00]
CNS       |             0.17 | [0.12, 1.00]
NEP       |             0.00 | [0.00, 1.00]
MES       |             0.03 | [0.01, 1.00]

- One-sided CIs: upper bound fixed at [1.00].

Question 5

Do each of the 3 main scales look unidimensional to you?

Solution 5. For this, let’s just go back to scree plots!

mes |> select(mes1_r:mes27_r) |> scree()

mes |> select(nep1:nep15) |> scree()

mes |> select(cns1:cns14_r) |> scree()

Where now?

Question 6

If you’re at this point, then here’s some options for where to direct your energy:

  1. Find a paper from one of your other courses that uses a questionnaire to measure something. Anything. Find the paper that initially presented the measure and see how they approach assessing the validity and reliability of their measure.
  2. Go back over the labs from the course and ask us any outstanding questions!
  3. Write your own flashcards! Flashcards are great, but it’s really act of writing them that gets us thinking and helps us to consolidate understanding.
For some suggestions of what flashcards to make
  • PCA in a nutshell
  • How to read a screeplot
  • EFA in a nutshell
  • What is rotation in EFA?
  • How to interpret the output of fa()
  • What makes a good EFA solution?
  • PCA & EFA: differences and similarities
  • CFA in a nutshell
  • How to specify CFA models in lavaan
  • How is model fit defined for CFA?
  • EFA & CFA: differences and similarities
  • PCA, EFA, CFA in diagrams
  • What is reliability?
  • What is construct validity? What different ways can we assess it?
  • What are the different types of reliability? How are they calculated?