Front matter

library(knitr)
library(haven)
library(ggplot2)
library(dplyr)
library(tidyr)
library(jtools)
library(summarytools)
library(kableExtra)
library(tm)
library(wordcloud)
library(skimr)
library(purrr)
library(labelled)
library(stargazer)
library(broom)
library(writexl)
library(modelsummary)
library(openxlsx)
library(readxl)
library(tibble)

Load and merge data

# Load data
data_nor <- read_excel("merge_data_norway.xlsx")
data_ger <- read_excel("Merging Data_Germany.xlsx")
data_nl <- read_excel("comparative_data_netherlands.xlsx")
data_gr <- read_excel("comparative v2_Greece.xlsx")

# Need to convert to numeric for German data
exclude_vars <- c("country")

data_ger <- data_ger %>%
  mutate(across(-all_of(exclude_vars), 
                ~ as.numeric(gsub(",", ".", .))))

# Need to recode liberal concervative and left right in Germany
data_ger$leftright <- ifelse(data_ger$leftright >= 1 & data_ger$leftright <= 11,
                        data_ger$leftright - 1,
                        data_ger$leftright)

data_ger$liberalconservative <- ifelse(data_ger$liberalconservative >= 1 & data_ger$liberalconservative <= 11,
                        data_ger$liberalconservative - 1,
                        data_ger$liberalconservative)

# Reverse perception scale in Germany
data_ger$ccs_perception <- ifelse(data_ger$ccs_perception %in% 1:5, 6 - data_ger$ccs_perception, data_ger$ccs_perception)

# Reverse statement (battery) scale in Norway and Germany
data_nor <- data_nor %>%
  mutate(across(c(addition:import_export), 
                ~ ifelse(.x %in% 1:5, 6 - .x, .x)))
data_ger <- data_ger %>%
  mutate(across(c(addition:import_export), 
                ~ ifelse(.x %in% 1:5, 6 - .x, .x)))

# Convert knowledge to numeric in Norwegian data
data_nor <- data_nor %>%
  mutate(across(c(knowledge), ~ as.numeric(as.character(.))))

# Merge data
data_ger <- data_ger[, names(data_nor)]
data_nl <- data_nl[, names(data_nor)]
data_gr <- data_gr[, names(data_nor)]

combined_data <- rbind(data_nor, data_ger, data_nl, data_gr)

Clean data

# Recode gender
combined_data <- combined_data %>%
  mutate(gender = recode(
    gender,
    "Men" = "Men",
    "Women" = "Women",
    "1" = "Men",
    "2" = "Women",
    "3" = NA_character_
  ))

# similar values on age group
combined_data <- combined_data %>%
  mutate(
    agegroup = recode(
      agegroup,
      "1" = 1,
      "2" = 2,
      "3" = 3,
      "4" = 4,
      "5" = 5,
      "6" = 6,
      "7" = 7,
      "18-29" = 1,
      "30-39" = 2,
      "40-49" = 3,
      "50-59" = 4,
      "60-69" = 5,
      "70-79" = 6,
      "80-89" = 7,
      "80+" = 7
    )
  )

# define missing and don't know as missing (99 is missing and 98 is don't know)
combined_data[combined_data == 99] <- NA
combined_data[combined_data == 97] <- NA
combined_data[combined_data == 98] <- NA


# combined_data <- combined_data %>%
#   mutate(
#     ccs_perception = ifelse(ccs_perception == 98, NA, ccs_perception), 
#     proximity = ifelse(proximity == 98, NA, proximity), 
#     concern_climate = ifelse(concern_climate == 98, NA, concern_climate), 
#     leftright = ifelse(leftright == 98, NA, leftright), 
#     leftright = ifelse(leftright == 96, NA, leftright), 
#     liberalconservative = ifelse(liberalconservative == 98, NA, liberalconservative), 
#     liberalconservative = ifelse(liberalconservative == 96, NA, liberalconservative),
#     technofix = ifelse(technofix == 98, NA, technofix), 
#     ccs_concern = ifelse(ccs_concern == 98, NA, ccs_concern), 
#     concern_capture = ifelse(concern_capture == 98, NA, concern_capture), 
#     concern_transport = ifelse(concern_transport == 98, NA, concern_transport),
#     concern_storage_onshore = ifelse(concern_storage_onshore == 98, NA, concern_storage_onshore), 
#     concern_storage_offshore = ifelse(concern_storage_offshore == 98, NA, concern_storage_offshore), 
#     concern_monitoring_onshore = ifelse(concern_monitoring_onshore == 98, NA, concern_monitoring_onshore), 
#     concern_monitoring_offshore = ifelse(concern_monitoring_offshore == 98, NA, concern_monitoring_offshore), 
#     ccs_implementation = ifelse(ccs_implementation == 98, NA, ccs_implementation) 
# )

# Some variables need to be factor (need to include gender later)
combined_data <- combined_data %>%
  mutate(across(c(knowledge, agegroup), as.factor))


# Some variables need to be numeric
combined_data <- combined_data %>%
  mutate(across(c(leftright, liberalconservative, proximity), as.numeric))

Regressions

Model: CCS perception

model1 <-
  lm(
    ccs_perception ~ gender + agegroup + workexperience + proximity + concern_climate +
      leftright + liberalconservative + technofix + knowledge + country,
    data = combined_data
  )

summary(model1)
## 
## Call:
## lm(formula = ccs_perception ~ gender + agegroup + workexperience + 
##     proximity + concern_climate + leftright + liberalconservative + 
##     technofix + knowledge + country, data = combined_data)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2.73640 -0.45389 -0.03786  0.59518  2.26530 
## 
## Coefficients:
##                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          2.4588659  0.1155635  21.277  < 2e-16 ***
## genderWomen         -0.1234055  0.0356323  -3.463 0.000542 ***
## agegroup2            0.0830010  0.0618286   1.342 0.179565    
## agegroup3           -0.0443197  0.0616627  -0.719 0.472360    
## agegroup4           -0.0930850  0.0570190  -1.633 0.102683    
## agegroup5           -0.0470763  0.0596157  -0.790 0.429792    
## agegroup6            0.0451931  0.0627460   0.720 0.471429    
## agegroup7           -0.0205687  0.1095563  -0.188 0.851090    
## workexperience      -0.0021061  0.0360061  -0.058 0.953360    
## proximity           -0.0121349  0.0133859  -0.907 0.364726    
## concern_climate      0.1317464  0.0139854   9.420  < 2e-16 ***
## leftright            0.0008056  0.0023622   0.341 0.733107    
## liberalconservative -0.0020329  0.0024773  -0.821 0.411939    
## technofix            0.1223544  0.0174271   7.021 2.77e-12 ***
## knowledge2           0.0910026  0.0544638   1.671 0.094859 .  
## knowledge3          -0.0983775  0.0586063  -1.679 0.093340 .  
## countryGreece        0.1767386  0.0542492   3.258 0.001136 ** 
## countryNetherlands   0.2010269  0.0505230   3.979 7.10e-05 ***
## countryNorway        0.2070559  0.0493595   4.195 2.82e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.8525 on 2752 degrees of freedom
##   (1334 observations deleted due to missingness)
## Multiple R-squared:  0.07367,    Adjusted R-squared:  0.06761 
## F-statistic: 12.16 on 18 and 2752 DF,  p-value: < 2.2e-16
# Plot coefficients
plot_summs(
  model1,
  scale = TRUE,
  coefs = c(
    "Women" = "genderWomen",
    "Age 30-39" = "agegroup2",
    "Age 40-49" = "agegroup3",
    "Age 50-59" = "agegroup4",
    "Age 60-69" = "agegroup5",
    "Age 70-79" = "agegroup6",
    "Age 80+" = "agegroup7",
    "Work experience" = "workexperience",
    "Industrial area" = "proximity",
    "Concerned about climate change" = "concern_climate",
    "Left - right" = "leftright",
    "Liberal - conservative" = "liberalconservative",
    "Climate solved by technology" = "technofix",
    "CCS Knowledge medium" = "knowledge2",
    "CCS knowledge high" = "knowledge3",
    "Norway" = "countryNorway",
    "Netherlands" = "countryNetherlands",
    "Greece" = "countryGreece"
  )
)

model1_noknowledge <- lm(
  ccs_perception ~ gender + agegroup + workexperience + proximity +
    concern_climate + leftright + liberalconservative +
    technofix + knowledge + country,
  data = combined_data %>%
    dplyr::filter(knowledge != 1)
)

summary(model1_noknowledge)
## 
## Call:
## lm(formula = ccs_perception ~ gender + agegroup + workexperience + 
##     proximity + concern_climate + leftright + liberalconservative + 
##     technofix + knowledge + country, data = combined_data %>% 
##     dplyr::filter(knowledge != 1))
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2.75632 -0.48369  0.03003  0.60176  2.30769 
## 
## Coefficients:
##                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          2.4522238  0.1207779  20.304  < 2e-16 ***
## genderWomen         -0.1123256  0.0392354  -2.863  0.00423 ** 
## agegroup2            0.0913443  0.0685034   1.333  0.18252    
## agegroup3           -0.0369223  0.0677828  -0.545  0.58600    
## agegroup4           -0.0835450  0.0623385  -1.340  0.18031    
## agegroup5           -0.0407571  0.0649131  -0.628  0.53015    
## agegroup6            0.0574357  0.0684302   0.839  0.40136    
## agegroup7           -0.0221030  0.1178169  -0.188  0.85120    
## workexperience       0.0040182  0.0392294   0.102  0.91843    
## proximity           -0.0105118  0.0146137  -0.719  0.47202    
## concern_climate      0.1356848  0.0153200   8.857  < 2e-16 ***
## leftright            0.0004487  0.0027859   0.161  0.87205    
## liberalconservative -0.0010115  0.0029815  -0.339  0.73446    
## technofix            0.1426226  0.0189790   7.515 7.97e-14 ***
## knowledge3          -0.1885707  0.0389720  -4.839 1.39e-06 ***
## countryGreece        0.1716862  0.0573520   2.994  0.00279 ** 
## countryNetherlands   0.1780894  0.0562566   3.166  0.00157 ** 
## countryNorway        0.2178508  0.0542679   4.014 6.14e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.8766 on 2429 degrees of freedom
##   (585 observations deleted due to missingness)
## Multiple R-squared:  0.07514,    Adjusted R-squared:  0.06866 
## F-statistic: 11.61 on 17 and 2429 DF,  p-value: < 2.2e-16
# Plot coefficients
plot_summs(
  model1_noknowledge,
  scale = TRUE,
  coefs = c(
    "Women" = "genderWomen",
    "Age 30-39" = "agegroup2",
    "Age 40-49" = "agegroup3",
    "Age 50-59" = "agegroup4",
    "Age 60-69" = "agegroup5",
    "Age 70-79" = "agegroup6",
    "Age 80+" = "agegroup7",
    "Work experience" = "workexperience",
    "Industrial area" = "proximity",
    "Concerned about climate change" = "concern_climate",
    "Left - right" = "leftright",
    "Liberal - conservative" = "liberalconservative",
    "Climate solved by technology" = "technofix",
    "CCS Knowledge medium" = "knowledge2",
    "CCS knowledge high" = "knowledge3",
    "Norway" = "countryNorway",
    "Netherlands" = "countryNetherlands",
    "Greece" = "countryGreece"
  )
)

Model: CCS concern

model2 <-
  lm(ccs_concern ~ gender + agegroup + workexperience + proximity + concern_climate +
       leftright + liberalconservative + technofix + knowledge + country,
     data = combined_data)

summary(model2)
## 
## Call:
## lm(formula = ccs_concern ~ gender + agegroup + workexperience + 
##     proximity + concern_climate + leftright + liberalconservative + 
##     technofix + knowledge + country, data = combined_data)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2.45314 -0.77918  0.00468  0.68380  3.02951 
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          2.248131   0.128329  17.519  < 2e-16 ***
## genderWomen          0.241281   0.040132   6.012 2.04e-09 ***
## agegroup2            0.075439   0.069346   1.088  0.27674    
## agegroup3            0.088707   0.068924   1.287  0.19818    
## agegroup4            0.192567   0.064293   2.995  0.00276 ** 
## agegroup5            0.170273   0.068334   2.492  0.01276 *  
## agegroup6            0.114367   0.072827   1.570  0.11642    
## agegroup7            0.309543   0.132392   2.338  0.01944 *  
## workexperience       0.050419   0.041468   1.216  0.22413    
## proximity            0.003220   0.015089   0.213  0.83101    
## concern_climate      0.150912   0.016069   9.391  < 2e-16 ***
## leftright           -0.004479   0.003032  -1.477  0.13974    
## liberalconservative  0.004719   0.003186   1.481  0.13868    
## technofix           -0.060539   0.020067  -3.017  0.00257 ** 
## knowledge2           0.012166   0.049270   0.247  0.80499    
## knowledge3           0.029676   0.058344   0.509  0.61104    
## countryGreece        0.226946   0.057681   3.934 8.52e-05 ***
## countryNetherlands  -0.044243   0.059526  -0.743  0.45738    
## countryNorway       -0.277543   0.057995  -4.786 1.78e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.043 on 3179 degrees of freedom
##   (907 observations deleted due to missingness)
## Multiple R-squared:  0.09415,    Adjusted R-squared:  0.08902 
## F-statistic: 18.36 on 18 and 3179 DF,  p-value: < 2.2e-16
# Plot coefficients
plot_summs(
  model2,
  scale = TRUE,
  coefs = c(
    "Women" = "genderWomen",
    "Age 30-39" = "agegroup2",
    "Age 40-49" = "agegroup3",
    "Age 50-59" = "agegroup4",
    "Age 60-69" = "agegroup5",
    "Age 70-79" = "agegroup6",
    "Age 80+" = "agegroup7",
    "Work experience" = "workexperience",
    "Industrial area" = "proximity",
    "Concerned about climate change" = "concern_climate",
    "Left - right" = "leftright",
    "Liberal - conservative" = "liberalconservative",
    "Climate solved by technology" = "technofix",
    "CCS Knowledge medium" = "knowledge2",
    "CCS knowledge high" = "knowledge3",
    "Norway" = "countryNorway",
    "Netherlands" = "countryNetherlands",
    "Greece" = "countryGreece"
  )
)

Model: CCS implementation

model3 <-
  lm(ccs_implementation ~ gender + agegroup + workexperience + proximity + concern_climate +
       leftright + liberalconservative + technofix + knowledge + country,
     data = combined_data)

summary(model3)
## 
## Call:
## lm(formula = ccs_implementation ~ gender + agegroup + workexperience + 
##     proximity + concern_climate + leftright + liberalconservative + 
##     technofix + knowledge + country, data = combined_data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2.3192 -0.7706  0.1031  0.6210  3.2631 
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          1.820275   0.130468  13.952  < 2e-16 ***
## genderWomen         -0.225444   0.040727  -5.536 3.36e-08 ***
## agegroup2           -0.022738   0.069015  -0.329 0.741826    
## agegroup3           -0.235630   0.069546  -3.388 0.000712 ***
## agegroup4           -0.335275   0.064405  -5.206 2.06e-07 ***
## agegroup5           -0.223356   0.068818  -3.246 0.001184 ** 
## agegroup6           -0.187221   0.074027  -2.529 0.011484 *  
## agegroup7           -0.158858   0.134822  -1.178 0.238773    
## workexperience       0.084779   0.041821   2.027 0.042725 *  
## proximity           -0.017544   0.015353  -1.143 0.253255    
## concern_climate      0.149933   0.016139   9.290  < 2e-16 ***
## leftright            0.008273   0.003390   2.441 0.014717 *  
## liberalconservative -0.011253   0.003702  -3.040 0.002385 ** 
## technofix            0.117917   0.020325   5.801 7.22e-09 ***
## knowledge2           0.226770   0.050062   4.530 6.12e-06 ***
## knowledge3           0.246100   0.059077   4.166 3.19e-05 ***
## countryGreece       -0.081570   0.059351  -1.374 0.169431    
## countryNetherlands   0.035309   0.061890   0.571 0.568376    
## countryNorway        0.179887   0.057175   3.146 0.001669 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.052 on 3155 degrees of freedom
##   (931 observations deleted due to missingness)
## Multiple R-squared:  0.08093,    Adjusted R-squared:  0.07569 
## F-statistic: 15.43 on 18 and 3155 DF,  p-value: < 2.2e-16
# Plot coefficients
plot_summs(
  model3,
  scale = TRUE,
  coefs = c(
    "Women" = "genderWomen",
    "Age 30-39" = "agegroup2",
    "Age 40-49" = "agegroup3",
    "Age 50-59" = "agegroup4",
    "Age 60-69" = "agegroup5",
    "Age 70-79" = "agegroup6",
    "Age 80+" = "agegroup7",
    "Work experience" = "workexperience",
    "Industrial area" = "proximity",
    "Concerned about climate change" = "concern_climate",
    "Left - right" = "leftright",
    "Liberal - conservative" = "liberalconservative",
    "Climate solved by technology" = "technofix",
    "CCS Knowledge medium" = "knowledge2",
    "CCS knowledge high" = "knowledge3",
    "Norway" = "countryNorway",
    "Netherlands" = "countryNetherlands",
    "Greece" = "countryGreece"
  )
)

Model: Concern capture

model4 <-
  lm(concern_capture ~ gender + agegroup + workexperience + proximity + concern_climate +
       leftright + liberalconservative + technofix + knowledge + country,
     data = combined_data)

summary(model4)
## 
## Call:
## lm(formula = concern_capture ~ gender + agegroup + workexperience + 
##     proximity + concern_climate + leftright + liberalconservative + 
##     technofix + knowledge + country, data = combined_data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2.3668 -0.8170 -0.0847  0.6789  3.1720 
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          2.085615   0.130345  16.001  < 2e-16 ***
## genderWomen          0.246654   0.040781   6.048 1.63e-09 ***
## agegroup2           -0.027573   0.070150  -0.393  0.69431    
## agegroup3            0.012729   0.070169   0.181  0.85606    
## agegroup4            0.144582   0.065210   2.217  0.02668 *  
## agegroup5            0.188362   0.069283   2.719  0.00659 ** 
## agegroup6            0.138150   0.074216   1.861  0.06277 .  
## agegroup7            0.383373   0.135074   2.838  0.00456 ** 
## workexperience       0.044787   0.042155   1.062  0.28812    
## proximity            0.026875   0.015350   1.751  0.08006 .  
## concern_climate      0.134497   0.016306   8.248 2.32e-16 ***
## leftright           -0.003368   0.003135  -1.074  0.28270    
## liberalconservative  0.002351   0.003211   0.732  0.46405    
## technofix           -0.050608   0.020485  -2.471  0.01354 *  
## knowledge2          -0.051531   0.049775  -1.035  0.30062    
## knowledge3          -0.057312   0.058997  -0.971  0.33140    
## countryGreece        0.233888   0.058451   4.001 6.44e-05 ***
## countryNetherlands  -0.125309   0.060799  -2.061  0.03938 *  
## countryNorway       -0.268546   0.058765  -4.570 5.07e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.065 on 3211 degrees of freedom
##   (875 observations deleted due to missingness)
## Multiple R-squared:  0.09406,    Adjusted R-squared:  0.08898 
## F-statistic: 18.52 on 18 and 3211 DF,  p-value: < 2.2e-16
# Plot coefficients
plot_summs(
  model4,
  scale = TRUE,
  coefs = c(
    "Women" = "genderWomen",
    "Age 30-39" = "agegroup2",
    "Age 40-49" = "agegroup3",
    "Age 50-59" = "agegroup4",
    "Age 60-69" = "agegroup5",
    "Age 70-79" = "agegroup6",
    "Age 80+" = "agegroup7",
    "Work experience" = "workexperience",
    "Industrial area" = "proximity",
    "Concerned about climate change" = "concern_climate",
    "Left - right" = "leftright",
    "Liberal - conservative" = "liberalconservative",
    "Climate solved by technology" = "technofix",
    "CCS Knowledge medium" = "knowledge2",
    "CCS knowledge high" = "knowledge3",
    "Norway" = "countryNorway",
    "Netherlands" = "countryNetherlands",
    "Greece" = "countryGreece"
  )
)

Model: Concern transport

model5 <-
  lm(concern_transport ~ gender + agegroup + workexperience + proximity + concern_climate +
       leftright + liberalconservative + technofix + knowledge + country,
     data = combined_data)

summary(model5)
## 
## Call:
## lm(formula = concern_transport ~ gender + agegroup + workexperience + 
##     proximity + concern_climate + leftright + liberalconservative + 
##     technofix + knowledge + country, data = combined_data)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2.52478 -0.80841 -0.07302  0.70159  3.06625 
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          2.261184   0.132407  17.078  < 2e-16 ***
## genderWomen          0.292381   0.041410   7.061 2.02e-12 ***
## agegroup2           -0.118810   0.071331  -1.666 0.095886 .  
## agegroup3           -0.200274   0.071346  -2.807 0.005028 ** 
## agegroup4           -0.013056   0.066270  -0.197 0.843827    
## agegroup5           -0.015295   0.070329  -0.217 0.827848    
## agegroup6            0.029759   0.075465   0.394 0.693352    
## agegroup7            0.224444   0.135973   1.651 0.098907 .  
## workexperience       0.054587   0.042887   1.273 0.203184    
## proximity            0.019251   0.015594   1.235 0.217088    
## concern_climate      0.142893   0.016568   8.624  < 2e-16 ***
## leftright           -0.003815   0.002996  -1.274 0.202882    
## liberalconservative  0.004262   0.003138   1.358 0.174420    
## technofix           -0.038593   0.020777  -1.857 0.063332 .  
## knowledge2          -0.039767   0.050246  -0.791 0.428735    
## knowledge3          -0.160578   0.059858  -2.683 0.007341 ** 
## countryGreece        0.343033   0.059597   5.756 9.41e-09 ***
## countryNetherlands  -0.214266   0.061778  -3.468 0.000531 ***
## countryNorway       -0.145641   0.059674  -2.441 0.014715 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.092 on 3274 degrees of freedom
##   (812 observations deleted due to missingness)
## Multiple R-squared:  0.1049, Adjusted R-squared:    0.1 
## F-statistic: 21.32 on 18 and 3274 DF,  p-value: < 2.2e-16
# Plot coefficients
plot_summs(
  model5,
  scale = TRUE,
  coefs = c(
    "Women" = "genderWomen",
    "Age 30-39" = "agegroup2",
    "Age 40-49" = "agegroup3",
    "Age 50-59" = "agegroup4",
    "Age 60-69" = "agegroup5",
    "Age 70-79" = "agegroup6",
    "Age 80+" = "agegroup7",
    "Work experience" = "workexperience",
    "Industrial area" = "proximity",
    "Concerned about climate change" = "concern_climate",
    "Left - right" = "leftright",
    "Liberal - conservative" = "liberalconservative",
    "Climate solved by technology" = "technofix",
    "CCS Knowledge medium" = "knowledge2",
    "CCS knowledge high" = "knowledge3",
    "Norway" = "countryNorway",
    "Netherlands" = "countryNetherlands",
    "Greece" = "countryGreece"
  )
)

Model: Concern storage onshore

model6 <-
  lm(concern_storage_onshore ~ gender + agegroup + workexperience + proximity + concern_climate +
       leftright + liberalconservative + technofix + knowledge + country,
     data = combined_data)

summary(model6)
## 
## Call:
## lm(formula = concern_storage_onshore ~ gender + agegroup + workexperience + 
##     proximity + concern_climate + leftright + liberalconservative + 
##     technofix + knowledge + country, data = combined_data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -3.0803 -0.9027 -0.0195  0.8759  3.0696 
## 
## Coefficients:
##                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          2.7776523  0.1426689  19.469  < 2e-16 ***
## genderWomen          0.3669311  0.0444940   8.247 2.33e-16 ***
## agegroup2            0.0065875  0.0765469   0.086  0.93143    
## agegroup3            0.0999446  0.0765054   1.306  0.19152    
## agegroup4            0.1948296  0.0712163   2.736  0.00626 ** 
## agegroup5            0.1327931  0.0757232   1.754  0.07958 .  
## agegroup6            0.0030935  0.0810548   0.038  0.96956    
## agegroup7            0.2474876  0.1476996   1.676  0.09391 .  
## workexperience       0.0623551  0.0460531   1.354  0.17583    
## proximity           -0.0007824  0.0167814  -0.047  0.96282    
## concern_climate      0.1587083  0.0177856   8.923  < 2e-16 ***
## leftright           -0.0062717  0.0033313  -1.883  0.05984 .  
## liberalconservative  0.0050948  0.0034553   1.474  0.14045    
## technofix           -0.0678223  0.0222670  -3.046  0.00234 ** 
## knowledge2          -0.0159274  0.0540438  -0.295  0.76823    
## knowledge3          -0.0576771  0.0644480  -0.895  0.37088    
## countryGreece       -0.1123308  0.0639528  -1.756  0.07910 .  
## countryNetherlands  -0.3511975  0.0661545  -5.309 1.18e-07 ***
## countryNorway       -0.6048126  0.0642830  -9.409  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.172 on 3274 degrees of freedom
##   (812 observations deleted due to missingness)
## Multiple R-squared:  0.119,  Adjusted R-squared:  0.1142 
## F-statistic: 24.58 on 18 and 3274 DF,  p-value: < 2.2e-16
# Plot coefficients
plot_summs(
  model6,
  scale = TRUE,
  coefs = c(
    "Women" = "genderWomen",
    "Age 30-39" = "agegroup2",
    "Age 40-49" = "agegroup3",
    "Age 50-59" = "agegroup4",
    "Age 60-69" = "agegroup5",
    "Age 70-79" = "agegroup6",
    "Age 80+" = "agegroup7",
    "Work experience" = "workexperience",
    "Industrial area" = "proximity",
    "Concerned about climate change" = "concern_climate",
    "Left - right" = "leftright",
    "Liberal - conservative" = "liberalconservative",
    "Climate solved by technology" = "technofix",
    "CCS Knowledge medium" = "knowledge2",
    "CCS knowledge high" = "knowledge3",
    "Norway" = "countryNorway",
    "Netherlands" = "countryNetherlands",
    "Greece" = "countryGreece"
  )
)

Model: Concern storage offshore

model7 <-
  lm(concern_storage_offshore ~ gender + agegroup + workexperience + proximity + concern_climate +
       leftright + liberalconservative + technofix + knowledge + country,
     data = combined_data)

summary(model7)
## 
## Call:
## lm(formula = concern_storage_offshore ~ gender + agegroup + workexperience + 
##     proximity + concern_climate + leftright + liberalconservative + 
##     technofix + knowledge + country, data = combined_data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2.8343 -0.9709 -0.0075  0.9643  3.1410 
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          2.767692   0.148108  18.687  < 2e-16 ***
## genderWomen          0.374806   0.046220   8.109 7.12e-16 ***
## agegroup2            0.072782   0.079423   0.916 0.359532    
## agegroup3            0.180347   0.079506   2.268 0.023372 *  
## agegroup4            0.218544   0.073994   2.954 0.003164 ** 
## agegroup5            0.078979   0.078418   1.007 0.313935    
## agegroup6           -0.053670   0.084134  -0.638 0.523572    
## agegroup7           -0.092137   0.152952  -0.602 0.546955    
## workexperience       0.060320   0.047831   1.261 0.207354    
## proximity            0.006097   0.017436   0.350 0.726594    
## concern_climate      0.170970   0.018469   9.257  < 2e-16 ***
## leftright            0.001627   0.003359   0.484 0.628243    
## liberalconservative -0.002323   0.003530  -0.658 0.510580    
## technofix           -0.082028   0.023174  -3.540 0.000406 ***
## knowledge2           0.004185   0.056186   0.074 0.940633    
## knowledge3          -0.011477   0.067055  -0.171 0.864105    
## countryGreece       -0.184104   0.066613  -2.764 0.005746 ** 
## countryNetherlands  -0.498789   0.068881  -7.241 5.51e-13 ***
## countryNorway       -0.613050   0.066768  -9.182  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.221 on 3286 degrees of freedom
##   (800 observations deleted due to missingness)
## Multiple R-squared:  0.122,  Adjusted R-squared:  0.1172 
## F-statistic: 25.38 on 18 and 3286 DF,  p-value: < 2.2e-16
# Plot coefficients
plot_summs(
  model7,
  scale = TRUE,
  coefs = c(
    "Women" = "genderWomen",
    "Age 30-39" = "agegroup2",
    "Age 40-49" = "agegroup3",
    "Age 50-59" = "agegroup4",
    "Age 60-69" = "agegroup5",
    "Age 70-79" = "agegroup6",
    "Age 80+" = "agegroup7",
    "Work experience" = "workexperience",
    "Industrial area" = "proximity",
    "Concerned about climate change" = "concern_climate",
    "Left - right" = "leftright",
    "Liberal - conservative" = "liberalconservative",
    "Climate solved by technology" = "technofix",
    "CCS Knowledge medium" = "knowledge2",
    "CCS knowledge high" = "knowledge3",
    "Norway" = "countryNorway",
    "Netherlands" = "countryNetherlands",
    "Greece" = "countryGreece"
  )
)

Model: Concern monitoring onshore

model8 <-
  lm(concern_monitoring_offshore ~ gender + agegroup + workexperience + proximity + concern_climate +
       leftright + liberalconservative + technofix + knowledge + country,
     data = combined_data)

summary(model8)
## 
## Call:
## lm(formula = concern_monitoring_offshore ~ gender + agegroup + 
##     workexperience + proximity + concern_climate + leftright + 
##     liberalconservative + technofix + knowledge + country, data = combined_data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2.7637 -1.0339 -0.0833  0.8851  3.1988 
## 
## Coefficients:
##                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          2.5171707  0.1502721  16.751  < 2e-16 ***
## genderWomen          0.3331177  0.0470176   7.085 1.70e-12 ***
## agegroup2           -0.0152265  0.0811974  -0.188 0.851262    
## agegroup3            0.1543177  0.0808777   1.908 0.056474 .  
## agegroup4            0.2853189  0.0755193   3.778 0.000161 ***
## agegroup5            0.0933850  0.0799203   1.168 0.242700    
## agegroup6            0.0593880  0.0855994   0.694 0.487863    
## agegroup7            0.1216916  0.1558140   0.781 0.434856    
## workexperience       0.1293406  0.0485290   2.665 0.007732 ** 
## proximity           -0.0013807  0.0177156  -0.078 0.937884    
## concern_climate      0.1445799  0.0187975   7.691 1.92e-14 ***
## leftright           -0.0057152  0.0035871  -1.593 0.111198    
## liberalconservative  0.0074250  0.0037694   1.970 0.048947 *  
## technofix           -0.0405541  0.0235573  -1.722 0.085254 .  
## knowledge2           0.0246869  0.0569828   0.433 0.664873    
## knowledge3           0.0003873  0.0679205   0.006 0.995450    
## countryGreece       -0.1547970  0.0672942  -2.300 0.021494 *  
## countryNetherlands  -0.5801068  0.0699690  -8.291  < 2e-16 ***
## countryNorway       -0.6685717  0.0677252  -9.872  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.235 on 3245 degrees of freedom
##   (841 observations deleted due to missingness)
## Multiple R-squared:  0.1191, Adjusted R-squared:  0.1142 
## F-statistic: 24.37 on 18 and 3245 DF,  p-value: < 2.2e-16
# Plot coefficients
plot_summs(
  model8,
  scale = TRUE,
  coefs = c(
    "Women" = "genderWomen",
    "Age 30-39" = "agegroup2",
    "Age 40-49" = "agegroup3",
    "Age 50-59" = "agegroup4",
    "Age 60-69" = "agegroup5",
    "Age 70-79" = "agegroup6",
    "Age 80+" = "agegroup7",
    "Work experience" = "workexperience",
    "Industrial area" = "proximity",
    "Concerned about climate change" = "concern_climate",
    "Left - right" = "leftright",
    "Liberal - conservative" = "liberalconservative",
    "Climate solved by technology" = "technofix",
    "CCS Knowledge medium" = "knowledge2",
    "CCS knowledge high" = "knowledge3",
    "Norway" = "countryNorway",
    "Netherlands" = "countryNetherlands",
    "Greece" = "countryGreece"
  )
)

Model: Concern monitoring offshore

model9 <-
  lm(concern_monitoring_offshore ~ gender + agegroup + workexperience + proximity + concern_climate +
       leftright + liberalconservative + technofix + knowledge + country,
     data = combined_data)

summary(model9)
## 
## Call:
## lm(formula = concern_monitoring_offshore ~ gender + agegroup + 
##     workexperience + proximity + concern_climate + leftright + 
##     liberalconservative + technofix + knowledge + country, data = combined_data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2.7637 -1.0339 -0.0833  0.8851  3.1988 
## 
## Coefficients:
##                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          2.5171707  0.1502721  16.751  < 2e-16 ***
## genderWomen          0.3331177  0.0470176   7.085 1.70e-12 ***
## agegroup2           -0.0152265  0.0811974  -0.188 0.851262    
## agegroup3            0.1543177  0.0808777   1.908 0.056474 .  
## agegroup4            0.2853189  0.0755193   3.778 0.000161 ***
## agegroup5            0.0933850  0.0799203   1.168 0.242700    
## agegroup6            0.0593880  0.0855994   0.694 0.487863    
## agegroup7            0.1216916  0.1558140   0.781 0.434856    
## workexperience       0.1293406  0.0485290   2.665 0.007732 ** 
## proximity           -0.0013807  0.0177156  -0.078 0.937884    
## concern_climate      0.1445799  0.0187975   7.691 1.92e-14 ***
## leftright           -0.0057152  0.0035871  -1.593 0.111198    
## liberalconservative  0.0074250  0.0037694   1.970 0.048947 *  
## technofix           -0.0405541  0.0235573  -1.722 0.085254 .  
## knowledge2           0.0246869  0.0569828   0.433 0.664873    
## knowledge3           0.0003873  0.0679205   0.006 0.995450    
## countryGreece       -0.1547970  0.0672942  -2.300 0.021494 *  
## countryNetherlands  -0.5801068  0.0699690  -8.291  < 2e-16 ***
## countryNorway       -0.6685717  0.0677252  -9.872  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.235 on 3245 degrees of freedom
##   (841 observations deleted due to missingness)
## Multiple R-squared:  0.1191, Adjusted R-squared:  0.1142 
## F-statistic: 24.37 on 18 and 3245 DF,  p-value: < 2.2e-16
# Plot coefficients
plot_summs(
  model9,
  scale = TRUE,
  coefs = c(
    "Women" = "genderWomen",
    "Age 30-39" = "agegroup2",
    "Age 40-49" = "agegroup3",
    "Age 50-59" = "agegroup4",
    "Age 60-69" = "agegroup5",
    "Age 70-79" = "agegroup6",
    "Age 80+" = "agegroup7",
    "Work experience" = "workexperience",
    "Industrial area" = "proximity",
    "Concerned about climate change" = "concern_climate",
    "Left - right" = "leftright",
    "Liberal - conservative" = "liberalconservative",
    "Climate solved by technology" = "technofix",
    "CCS Knowledge medium" = "knowledge2",
    "CCS knowledge high" = "knowledge3",
    "Norway" = "countryNorway",
    "Netherlands" = "countryNetherlands",
    "Greece" = "countryGreece"
  )
)

A plot comparing country effects from the regression models

models <- list(model2, model4, model5, model6, model7, model8, model9)

# Create a data frame of country effects
country_effects <- lapply(seq_along(models), function(i) {
  tidy(models[[i]]) %>%
    filter(term %in% c("countryNorway", "countryNetherlands", "countryGreece")) %>%
    mutate(model = paste0("Model ", i))
}) %>%
  bind_rows()

# Labels for each model
new_labels <- c("Concern about CCS", "Concern about capture", "Concern about transport", 
                "Concern about storage onshore", "Concern about storage offshore", 
                "Concern about monitoring onshore","Concern about monitoring offshore")

# Assign factor levels in reversed order so Model 1 is on top
country_effects$model <- factor(country_effects$model, 
                                levels = rev(paste0("Model ", 1:7)),
                                labels = rev(new_labels))

# Plot country differences across models
ggplot(
  country_effects,
  aes(
    x = estimate,
    y = model,
    xmin = estimate - 1.96 * std.error,
    xmax = estimate + 1.96 * std.error,
    color = term
  )
) +
  geom_pointrange(position = position_dodge(width = 0.5)) +
  geom_vline(xintercept = 0, linetype = "dashed", color = "gray40") +
  labs(
    x = "Coefficient (Germany is the reference category)",
    y = NULL,
    color = "Country",
    title = "Concerns: Country effects across models"
  ) +
  scale_color_brewer(
    palette = "Dark2",
    labels = c(
      countryNorway = "Norway",
      countryNetherlands = "Netherlands",
      countryGreece = "Greece"
    )
  ) +
  theme_minimal()

Battery questions - comparativ plots

A plot comparing CCS statements

battery <- combined_data %>% select(addition:import_export, country)

df_long <- battery %>%
  pivot_longer(
    cols = -country, 
    names_to = "statement",
    values_to = "response"
  )

# With confidence intervals
df_means_ci <- df_long %>%
  mutate(response = ifelse(response %in% c(6, 98), NA, response)) %>%  # Exclude "Don't know"
  group_by(statement, country) %>%
  summarise(
    mean_response = mean(response, na.rm = TRUE),
    sd = sd(response, na.rm = TRUE),
    n = sum(!is.na(response)),
    se = sd / sqrt(n),
    ci_low = mean_response - 1.96 * se,
    ci_high = mean_response + 1.96 * se,
    .groups = "drop"
  )

battery_response_labels <- c(
  "1" = "Completely disagree",
  "2" = "Disagree",
  "3" = "Neither agree nor disagree",
  "4" = "Agree",
  "5" = "Completely Agree"
)

# Labels
battery_labels <- c(
  "addition" = "Only addition to emissions reduction efforts",
  "reduce_co2" = "Important to reduce CO2-levels in the atmosphere",
  "climate_goals" = "Needed to achieve internationally agreed climate goals",
  "hard_to_abate" = "Necessary to offset hard to abate CO2 emissions",
  "compensation" = "Compensation for people living near CCS",
  "hydrogen" = "Important to capture emissions from blue hydrogen",
  "new_jobs" = "CCS projects will lead to new jobs",
  "industry_activities" = "Important to sustain European industrial activities",
  "store_country_captured" = "Only store in the country it is captured in",
  "store_less_storage" = "Store CO2 from countries with less storage",
  "import_export" = "CO2 market should be open to import and export"
)

ggplot(df_means_ci, aes(y = reorder(statement, mean_response), x = mean_response, color = country)) +
  geom_point(size = 2) +
  #geom_errorbarh(aes(xmin = ci_low, xmax = ci_high), height = 0.3) +
  #scale_color_manual(values = c("Norway" = "blue", "Germany" = "red", "Netherlands" = "green", "Greece" = "yellow")) +
  scale_color_brewer(palette = "Dark2") +
  scale_x_continuous(limits = c(1, 5), breaks = 1:5, labels = battery_response_labels) +
  #scale_x_reverse(limits = c(5, 1), breaks = 1:5, labels = battery_response_labels) +
  scale_y_discrete(labels = battery_labels) +
  labs(title = "Public perceptions of CCS",
       x = "", y = NULL, color = "Country") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

### Benefits and applications

battery_benefits_applications <- combined_data %>% select(reduce_co2, climate_goals,
                                                          new_jobs, hard_to_abate,
                                                          hydrogen, industry_activities, 
                                                          country)

df_long_benefits_applications <- battery_benefits_applications %>%
  pivot_longer(
    cols = -country, 
    names_to = "statement",
    values_to = "response"
  )

# With confidence intervals
df_means_ci_benefits_applications <- df_long_benefits_applications %>%
  mutate(response = ifelse(response %in% c(6, 98), NA, response)) %>%  # Exclude "Don't know"
  group_by(statement, country) %>%
  summarise(
    mean_response = mean(response, na.rm = TRUE),
    sd = sd(response, na.rm = TRUE),
    n = sum(!is.na(response)),
    se = sd / sqrt(n),
    ci_low = mean_response - 1.96 * se,
    ci_high = mean_response + 1.96 * se,
    .groups = "drop"
  )

battery_response_labels <- c(
  "1" = "Completely disagree",
  "2" = "Disagree",
  "3" = "Neither agree nor disagree",
  "4" = "Agree",
  "5" = "Completely Agree"
)

# Labels
battery__benefits_applications_labels <- c(
  "reduce_co2" = "Important to reduce CO2-levels in the atmosphere",
  "climate_goals" = "Needed to achieve internationally agreed climate goals",
  "hard_to_abate" = "Necessary to offset hard to abate CO2 emissions",
  "hydrogen" = "Important to capture emissions from blue hydrogen",
  "new_jobs" = "CCS projects will lead to new jobs",
  "industry_activities" = "Important to sustain European industrial activities"
)

ggplot(df_means_ci_benefits_applications, aes(y = reorder(statement, mean_response), x = mean_response, color = country)) +
  geom_point(size = 2) +
  #geom_errorbarh(aes(xmin = ci_low, xmax = ci_high), height = 0.3) +
  #scale_color_manual(values = c("Norway" = "blue", "Germany" = "red", "Netherlands" = "green", "Greece" = "yellow")) +
  scale_color_brewer(palette = "Dark2") +
  scale_x_continuous(limits = c(1, 5), breaks = 1:5, labels = battery_response_labels) +
  #scale_x_reverse(limits = c(5, 1), breaks = 1:5, labels = battery_response_labels) +
  scale_y_discrete(labels = battery__benefits_applications_labels) +
  labs(title = "Benefits and applications of CCS",
       x = "", y = NULL, color = "Country") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Policy and governance

battery_policy_governance <- combined_data %>% select(addition, store_country_captured, 
                                                      import_export, store_less_storage,
                                                      compensation, country)

df_long_policy_governance <- battery_policy_governance %>%
  pivot_longer(
    cols = -country, 
    names_to = "statement",
    values_to = "response"
  )

# With confidence intervals
df_means_ci_policy_governance <- df_long_policy_governance %>%
  mutate(response = ifelse(response %in% c(6, 98), NA, response)) %>%  # Exclude "Don't know"
  group_by(statement, country) %>%
  summarise(
    mean_response = mean(response, na.rm = TRUE),
    sd = sd(response, na.rm = TRUE),
    n = sum(!is.na(response)),
    se = sd / sqrt(n),
    ci_low = mean_response - 1.96 * se,
    ci_high = mean_response + 1.96 * se,
    .groups = "drop"
  )

battery_response_labels <- c(
  "1" = "Completely disagree",
  "2" = "Disagree",
  "3" = "Neither agree nor disagree",
  "4" = "Agree",
  "5" = "Completely Agree"
)

# Labels
battery_labelsdf_policy_governance <- c(
  "addition" = "Only addition to emissions reduction efforts",
  "compensation" = "Compensation for people living near CCS",
  "store_country_captured" = "Only store in the country it is captured in",
  "store_less_storage" = "Store CO2 from countries with less storage",
  "import_export" = "CO2 market should be open to import and export"
)

ggplot(df_means_ci_policy_governance, aes(y = reorder(statement, mean_response), x = mean_response, color = country)) +
  geom_point(size = 2) +
  #geom_errorbarh(aes(xmin = ci_low, xmax = ci_high), height = 0.3) +
  #scale_color_manual(values = c("Norway" = "blue", "Germany" = "red", "Netherlands" = "green", "Greece" = "yellow")) +
  scale_color_brewer(palette = "Dark2") +
  scale_x_continuous(limits = c(1, 5), breaks = 1:5, labels = battery_response_labels) +
  #scale_x_reverse(limits = c(5, 1), breaks = 1:5, labels = battery_response_labels) +
  scale_y_discrete(labels = battery_labels) +
  labs(title = "Policy and governance",
       x = "", y = NULL, color = "Country") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

A plot comparing CCS concerns

battery2 <- combined_data %>% select(expense_renewable:tremors, country)

df_long2 <- battery2 %>%
  pivot_longer(
    cols = -country, 
    names_to = "statement",
    values_to = "response"
  )

# With confidence intervals
df_means_ci2 <- df_long2 %>%
  mutate(response = ifelse(response %in% c(6, 98), NA, response)) %>%  # Exclude "Don't know"
  group_by(statement, country) %>%
  summarise(
    mean_response = mean(response, na.rm = TRUE),
    sd = sd(response, na.rm = TRUE),
    n = sum(!is.na(response)),
    se = sd / sqrt(n),
    ci_low = mean_response - 1.96 * se,
    ci_high = mean_response + 1.96 * se,
    .groups = "drop"
  )

battery2_response_labels <- c(
  "1" = "Not concerned at all",
  "2" = "Slightly concerned",
  "3" = "Somewhat concerned",
  "4" = "Moderately concerned",
  "5" = "Very concerned"
)

# Labels
battery2_labels <- c(
  "expense_renewable" = "Comes at the expense of renewable energies",
  "prolonged_fossil" = "Leads to prolonged use of fossil energy sources",
  "emission_reduction" = "Will not deliver the envisioned emissions reduction",
  "econ_beneficial" = "Will not be economically beneficial",
  "leakage_capture" = "Leakage from the capture process",
  "leakage_transport" = "Leakage during transport ",
  "leakage_injection" = "Leakage during injection for underground storage",
  "leakage_storage" = "Leakage from the storage site",
  "leakage_goundwater" = "Leakage contaminating groundwater",
  "tremors" = "Tremors because of CO2 storage activities"
)

ggplot(df_means_ci2, aes(y = reorder(statement, mean_response), x = mean_response, color = country)) +
  geom_point(size = 2) +
  #geom_errorbarh(aes(xmin = ci_low, xmax = ci_high), height = 0.3) +
  #scale_color_manual(values = c("Norway" = "blue", "Germany" = "red", "Netherlands" = "green", "Greece" = "yellow")) +
  scale_color_brewer(palette = "Dark2") +
  scale_x_continuous(limits = c(1, 5), breaks = 1:5, labels = battery2_response_labels) +
  scale_y_discrete(labels = battery2_labels) +
  labs(title = "CCS concerns",
       x = "", y = NULL, color = "Country") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Leakage and tremors

battery_leakage_tremors <- combined_data %>% select(leakage_capture, leakage_transport, leakage_injection,
                                                    leakage_storage, leakage_goundwater, tremors, country)

df_long_battery_leakage_tremors <- battery_leakage_tremors %>%
  pivot_longer(
    cols = -country, 
    names_to = "statement",
    values_to = "response"
  )

# With confidence intervals
df_means_ci_leakage_tremors <- df_long_battery_leakage_tremors %>%
  mutate(response = ifelse(response %in% c(6, 98), NA, response)) %>%  # Exclude "Don't know"
  group_by(statement, country) %>%
  summarise(
    mean_response = mean(response, na.rm = TRUE),
    sd = sd(response, na.rm = TRUE),
    n = sum(!is.na(response)),
    se = sd / sqrt(n),
    ci_low = mean_response - 1.96 * se,
    ci_high = mean_response + 1.96 * se,
    .groups = "drop"
  )

battery2_response_labels <- c(
  "1" = "Not concerned at all",
  "2" = "Slightly concerned",
  "3" = "Somewhat concerned",
  "4" = "Moderately concerned",
  "5" = "Very concerned"
)

# Labels
battery_leakage_tremors_labels <- c(
  "expense_renewable" = "Comes at the expense of renewable energies",
  "prolonged_fossil" = "Leads to prolonged use of fossil energy sources",
  "emission_reduction" = "Will not deliver the envisioned emissions reduction",
  "econ_beneficial" = "Will not be economically beneficial",
  "leakage_capture" = "Leakage from the capture process",
  "leakage_transport" = "Leakage during transport ",
  "leakage_injection" = "Leakage during injection for underground storage",
  "leakage_storage" = "Leakage from the storage site",
  "leakage_goundwater" = "Leakage contaminating groundwater",
  "tremors" = "Tremors because of CO2 storage activities"
)

ggplot(df_means_ci_leakage_tremors, aes(y = reorder(statement, mean_response), x = mean_response, color = country)) +
  geom_point(size = 2) +
  #geom_errorbarh(aes(xmin = ci_low, xmax = ci_high), height = 0.3) +
  #scale_color_manual(values = c("Norway" = "blue", "Germany" = "red", "Netherlands" = "green", "Greece" = "yellow")) +
  scale_color_brewer(palette = "Dark2") +
  scale_x_continuous(limits = c(1, 5), breaks = 1:5, labels = battery2_response_labels) +
  scale_y_discrete(labels = battery_leakage_tremors_labels) +
  labs(title = "Concerns about leakage and tremors",
       x = "", y = NULL, color = "Country") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Social, political and economic concerns

battery_spe <- combined_data %>% select(expense_renewable, prolonged_fossil,
                                        emission_reduction, econ_beneficial, country)

df_long_battery_spe <- battery_spe %>%
  pivot_longer(
    cols = -country, 
    names_to = "statement",
    values_to = "response"
  )

# With confidence intervals
df_means_ci_spe <- df_long_battery_spe %>%
  mutate(response = ifelse(response %in% c(6, 98), NA, response)) %>%  # Exclude "Don't know"
  group_by(statement, country) %>%
  summarise(
    mean_response = mean(response, na.rm = TRUE),
    sd = sd(response, na.rm = TRUE),
    n = sum(!is.na(response)),
    se = sd / sqrt(n),
    ci_low = mean_response - 1.96 * se,
    ci_high = mean_response + 1.96 * se,
    .groups = "drop"
  )

battery2_response_labels <- c(
  "1" = "Not concerned at all",
  "2" = "Slightly concerned",
  "3" = "Somewhat concerned",
  "4" = "Moderately concerned",
  "5" = "Very concerned"
)

# Labels
battery_spe_labels <- c(
  "expense_renewable" = "Comes at the expense of renewable energies",
  "prolonged_fossil" = "Leads to prolonged use of fossil energy sources",
  "emission_reduction" = "Will not deliver the envisioned emissions reduction",
  "econ_beneficial" = "Will not be economically beneficial",
  "leakage_capture" = "Leakage from the capture process",
  "leakage_transport" = "Leakage during transport ",
  "leakage_injection" = "Leakage during injection for underground storage",
  "leakage_storage" = "Leakage from the storage site",
  "leakage_goundwater" = "Leakage contaminating groundwater",
  "tremors" = "Tremors because of CO2 storage activities"
)

ggplot(df_means_ci_spe, aes(y = reorder(statement, mean_response), x = mean_response, color = country)) +
  geom_point(size = 2) +
  #geom_errorbarh(aes(xmin = ci_low, xmax = ci_high), height = 0.3) +
  #scale_color_manual(values = c("Norway" = "blue", "Germany" = "red", "Netherlands" = "green", "Greece" = "yellow")) +
  scale_color_brewer(palette = "Dark2") +
  scale_x_continuous(limits = c(1, 5), breaks = 1:5, labels = battery2_response_labels) +
  scale_y_discrete(labels = battery_spe_labels) +
  labs(title = "Social, political, and economic concerns",
       x = "", y = NULL, color = "Country") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

A plot comparing CCS concerns along the value chain

battery3 <- combined_data %>% select(ccs_concern:concern_monitoring_offshore, country)

df_long3 <- battery3 %>%
  pivot_longer(
    cols = -country, 
    names_to = "statement",
    values_to = "response"
  )

# With confidence intervals
df_means_ci3 <- df_long3 %>%
  mutate(response = ifelse(response %in% c(6, 98), NA, response)) %>%  # Exclude "Don't know"
  group_by(statement, country) %>%
  summarise(
    mean_response = mean(response, na.rm = TRUE),
    sd = sd(response, na.rm = TRUE),
    n = sum(!is.na(response)),
    se = sd / sqrt(n),
    ci_low = mean_response - 1.96 * se,
    ci_high = mean_response + 1.96 * se,
    .groups = "drop"
  )

battery3_response_labels <- c(
  "1" = "Not concerned at all",
  "2" = "Slightly concerned",
  "3" = "Somewhat concerned",
  "4" = "Moderately concerned",
  "5" = "Very concerned"
)

# Labels
battery3_labels <- c(
  "concern_transport" = "Concern about transport",
  "concern_storage_onshore" = "Concern about onshore storage",
  "concern_storage_offshore" = "Concern about offshore storage",
  "concern_monitoring_onshore" = "Concenrn about onshore monitoring",
  "concern_monitoring_offshore" = "Concern about offshore monitoring",
  "concern_capture" = "Concern about capture",
  "ccs_concern" = "Overall concern toward CCS"
)

ggplot(df_means_ci3, aes(y = reorder(statement, mean_response), x = mean_response, color = country)) +
  geom_point(size = 2) +
  #geom_errorbarh(aes(xmin = ci_low, xmax = ci_high), height = 0.3) +
  #scale_color_manual(values = c("Norway" = "blue", "Germany" = "red", "Netherlands" = "green", "Greece" = "yellow")) +
  scale_color_brewer(palette = "Dark2") +
  scale_x_continuous(limits = c(1, 5), breaks = 1:5, labels = battery3_response_labels) +
  scale_y_discrete(labels = battery3_labels) +
  labs(title = "CCS concern along the value chain",
       x = "", y = NULL, color = "Country") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

A plot comparing knowledge levels

knowledge_response_labels <- c(
  "1" = "No, I have never heard of it",
  "2" = "Yes, but I don't really know what it is",
  "3" = "Yes, I have heard of it at know what it is"
)

# Dodged bar plot
combined_data %>%
  filter(knowledge %in% 1:3) %>%
  count(country, knowledge) %>%
  group_by(country) %>%
  mutate(prop = n / sum(n)) %>%
  ggplot(aes(x = factor(knowledge), y = prop, fill = country)) +
  geom_bar(stat = "identity", position = "dodge", color = "black") +
  scale_x_discrete(labels = knowledge_response_labels) +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
  labs(
    title = "Knowledge about CCS by country",
    x = "",
    y = ""
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Plots showing whether citizens are positive or negative toward CCS by country

perception_response_labels <- c(
  "1" = "Very negative",
  "2" = "Negative",
  "3" = "Neutral",
  "4" = "Positive",
  "5" = "Very positive"
)

combined_data %>%
  filter(ccs_perception %in% 1:5) %>%
  group_by(country) %>%
  summarise(mean_attitude = mean(ccs_perception),
            se = sd(ccs_perception) / sqrt(n())) %>%
  ggplot(aes(x = country, y = mean_attitude, fill = country)) +
  geom_col() +
  geom_errorbar(aes(ymin = mean_attitude - se, ymax = mean_attitude + se), width = 0.2) +
  coord_cartesian(ylim = c(1, 5)) + 
  scale_y_continuous(breaks = 1:5, labels = perception_response_labels) +
  labs(title = "Positive or negative toward CCS",
       y = "",
       x = "Country") +
  theme_minimal()

# Dodged bar plot
combined_data %>%
  filter(ccs_perception %in% 1:5) %>%
  count(country, ccs_perception) %>%
  group_by(country) %>%
  mutate(prop = n / sum(n)) %>%
  ggplot(aes(x = factor(ccs_perception), y = prop, fill = country)) +
  geom_bar(stat = "identity", position = "dodge", color = "black") +
  scale_x_discrete(labels = perception_response_labels) +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
  labs(
    title = "Positive or negative toward CCS by country",
    x = "",
    y = ""
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Plot of positive/negative where we filter out no knowledge for comparison

combined_data %>%
  filter(
    ccs_perception %in% 1:5,
    knowledge != 1     # remove knowledge = 1
  ) %>%
  count(country, ccs_perception) %>%
  group_by(country) %>%
  mutate(prop = n / sum(n)) %>%
  ggplot(aes(x = factor(ccs_perception), y = prop, fill = country)) +
  geom_bar(stat = "identity", position = "dodge", color = "black") +
  scale_x_discrete(labels = perception_response_labels) +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
  labs(
    title = "Positive or negative toward CCS by country",
    x = "",
    y = ""
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Plots showing support for implementation of CCS by country

implementation_response_labels <- c(
  "1" = "I do not support it at all",
  "2" = "I support it to a small extent",
  "3" = "I support it to some extent",
  "4" = "I support it to a great extent",
  "5" = "I fully support it"
)

combined_data %>%
  filter(ccs_implementation %in% 1:5) %>%  # remove special codes like 98/99
  group_by(country) %>%
  summarise(mean_attitude = mean(ccs_implementation),
            se = sd(ccs_implementation)/sqrt(n())) %>%
  ggplot(aes(x = country, y = mean_attitude, fill = country)) +
  geom_col() +
  geom_errorbar(aes(ymin = mean_attitude - se, ymax = mean_attitude + se), width = 0.2) +
  coord_cartesian(ylim = c(1, 5)) + 
  scale_y_continuous(breaks = 1:5, labels = implementation_response_labels) +
  labs(title = "Support for implementation of CCS",
       y = "",
       x = "") +
  theme_minimal()

# Dodged bar plot
combined_data %>%
  filter(ccs_implementation %in% 1:5) %>%
  count(country, ccs_implementation) %>%
  group_by(country) %>%
  mutate(prop = n / sum(n)) %>%
  ggplot(aes(x = factor(ccs_implementation), y = prop, fill = country)) +
  geom_bar(stat = "identity", position = "dodge", color = "black") +
  scale_x_discrete(labels = implementation_response_labels) +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
  labs(
    title = "Support for implementation of CCS (by country)",
    x = "",
    y = ""
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

## Export comparative dataset

write_xlsx(combined_data, "comparative_data.xlsx")