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 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)
# 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))
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"
)
)
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"
)
)
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"
)
)
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"
)
)
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"
)
)
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"
)
)
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"
)
)
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"
)
)
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"
)
)
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 <- 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))
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))
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))
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))
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))
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))
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))
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))
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")
Social, political and economic concerns