Overview

This file contains descriptive statistics of the perception and concern questions in the survey, as well as some regression analyses of how background information and attitudes influences perceptions/concerns. We have also started analyzing the open ended survey questions using word clouds.

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(psych)
library(scales)
library(readxl)

Load and clean data

These data are used for descriptive statistics as they include the “Don’t know” option. We have also re-coded some variables so that they are easier to interpret.

# Load data
data <- read_sav("data.sav")

# Create a dummy variable for work experience
data <- data %>%
  mutate(across(starts_with("Q5_"), as.character)) %>%
  mutate(
    workexperience = if_else(
      Q5_1 == "1" | Q5_2 == "1" | Q5_3 == "1" | Q5_4 == "1" |
        Q5_5 == "1" | Q5_6 == "1" | Q5_7 == "1" | Q5_8 == "1" |
        Q5_9 == "1" | Q5_10 == "1" | Q5_11 == "1" | Q5_12 == "1" |
        Q5_13 == "1" | Q5_14 == "1",
      1,
      0
    )
  )

# Recode the gender variable
data <- data %>%
  mutate(resp_gender = ifelse(resp_gender == 1, 0, 1))
data <- data %>%
  mutate(resp_gender = factor(resp_gender, labels = c("Men", "Women"))) 

# Make variable with age groups
data <- data %>%
  mutate(AgeGroup = cut(Age_1, 
                        breaks = c(18, 29, 39, 49, 59, 69, 79, Inf), 
                        labels = c("18-29", "30-39", "40-49", "50-59", "60-69", "70-79", "80+"),
                        right = TRUE))  

data <- data %>%
  mutate(education_recode = case_when(
    NO01EDU %in% c(1, 2) ~ 1,
    NO01EDU == 3 ~ 2,
    NO01EDU == 6 ~ 3,
    NO01EDU == 7 ~ 4,
    TRUE ~ NA_real_  # Keeps other values as NA
  ))

Descritive stats

data %>%
  select(resp_gender, AgeGroup, education_recode, Q10) %>%
  dfSummary()
## Data Frame Summary  
## data  
## Dimensions: 1032 x 4  
## Duplicates: 906  
## 
## ------------------------------------------------------------------------------------------------------------------------------------------------------
## No   Variable           Label                                 Stats / Values                 Freqs (% of Valid)   Graph           Valid      Missing  
## ---- ------------------ ------------------------------------- ------------------------------ -------------------- --------------- ---------- ---------
## 1    resp_gender                                              1. Men                         527 (51.1%)          IIIIIIIIII      1032       0        
##      [factor]                                                 2. Women                       505 (48.9%)          IIIIIIIII       (100.0%)   (0.0%)   
## 
## 2    AgeGroup                                                 1. 18-29                       199 (19.4%)          III             1025       7        
##      [factor]                                                 2. 30-39                       185 (18.0%)          III             (99.3%)    (0.7%)   
##                                                               3. 40-49                       146 (14.2%)          II                                  
##                                                               4. 50-59                       220 (21.5%)          IIII                                
##                                                               5. 60-69                       149 (14.5%)          II                                  
##                                                               6. 70-79                       109 (10.6%)          II                                  
##                                                               7. 80+                          17 ( 1.7%)                                              
## 
## 3    education_recode                                         Mean (sd) : 2.8 (0.9)          1 :  42 ( 4.1%)                      1032       0        
##      [numeric]                                                min < med < max:               2 : 351 (34.0%)      IIIIII          (100.0%)   (0.0%)   
##                                                               1 < 3 < 4                      3 : 375 (36.3%)      IIIIIII                             
##                                                               IQR (CV) : 2 (0.3)             4 : 264 (25.6%)      IIIII                               
## 
## 4    Q10                Q10. Har du hørt om teknologier for   1. [1] Nei, jeg har aldri hø   174 (16.9%)          III             1032       0        
##      [haven_labelled,   CO2-fangst og -lagring?               2. [2] Ja, men jeg vet ikke    587 (56.9%)          IIIIIIIIIII     (100.0%)   (0.0%)   
##      vctrs_vctr,                                              3. [3] Ja, jeg har hørt om d   271 (26.3%)          IIIII                               
##      double]                                                                                                                                          
## ------------------------------------------------------------------------------------------------------------------------------------------------------
describe(data[, c("resp_gender", "AgeGroup", "education_recode")])
##                  vars    n mean   sd median trimmed  mad min max range  skew
## resp_gender*        1 1032 1.49 0.50      1    1.49 0.00   1   2     1  0.04
## AgeGroup*           2 1025 3.32 1.70      3    3.26 1.48   1   7     6  0.16
## education_recode    3 1032 2.83 0.86      3    2.84 1.48   1   4     3 -0.07
##                  kurtosis   se
## resp_gender*        -2.00 0.02
## AgeGroup*           -1.08 0.05
## education_recode    -0.95 0.03

Table of proportions and frequencies

char_vars <- names(data)[sapply(data, is.character)]

manual_exclude <- c("Age_1", "NO01EDU", "Q4", "Q5_1", "Q5_2", "Q5_3", "Q5_4", "Q5_5",
                    "Q5_6", "Q5_7", "Q5_8", "Q5_9", "Q5_10", "Q5_11", "Q5_12",
                    "Q5_13", "Q5_14", "Q5_15" )

exclude_vars <- union(char_vars, manual_exclude)

# Function to calculate proportions and counts
summarize_proportions <- function(data, exclude_vars = NULL) {
  data <- data %>% select(-all_of(exclude_vars))
  
# Summarize proportions
  result <- bind_rows(lapply(names(data), function(var) {
    data %>%
      count(!!sym(var)) %>%
      mutate(
        Proportion = n / sum(n),
        Variable = var,
        Category = as.character(!!sym(var))
      ) %>%
      select(Variable, Category, n, Proportion)
  }))
  
  return(result)
}

# Apply function to dataset
summary_table <- summarize_proportions(data, exclude_vars)
summary_table <- summary_table %>%
  mutate(Proportion = round(Proportion * 100, 1)) 

# Print result
kable(summary_table)
Variable Category n Proportion
resp_gender Men 527 51.1
resp_gender Women 505 48.9
Q6 1 114 11.0
Q6 2 241 23.4
Q6 3 274 26.6
Q6 4 269 26.1
Q6 5 134 13.0
Q7 0 24 2.3
Q7 1 31 3.0
Q7 2 75 7.3
Q7 3 96 9.3
Q7 4 97 9.4
Q7 5 251 24.3
Q7 6 102 9.9
Q7 7 145 14.1
Q7 8 109 10.6
Q7 9 51 4.9
Q7 10 51 4.9
Q8 0 25 2.4
Q8 1 38 3.7
Q8 2 91 8.8
Q8 3 134 13.0
Q8 4 109 10.6
Q8 5 315 30.5
Q8 6 109 10.6
Q8 7 97 9.4
Q8 8 62 6.0
Q8 9 29 2.8
Q8 10 23 2.2
Q9 1 50 4.8
Q9 2 339 32.8
Q9 3 465 45.1
Q9 4 140 13.6
Q9 5 38 3.7
Q10 1 174 16.9
Q10 2 587 56.9
Q10 3 271 26.3
Q11 1 57 5.5
Q11 2 350 33.9
Q11 3 324 31.4
Q11 4 56 5.4
Q11 5 42 4.1
Q11 6 203 19.7
Q13 1 168 16.3
Q13 2 262 25.4
Q13 3 328 31.8
Q13 4 73 7.1
Q13 5 42 4.1
Q13 6 159 15.4
Q14 1 256 24.8
Q14 2 257 24.9
Q14 3 275 26.6
Q14 4 71 6.9
Q14 5 32 3.1
Q14 6 141 13.7
Q15 1 185 17.9
Q15 2 275 26.6
Q15 3 291 28.2
Q15 4 119 11.5
Q15 5 44 4.3
Q15 6 118 11.4
Q16_1 1 44 4.3
Q16_1 2 204 19.8
Q16_1 3 246 23.8
Q16_1 4 153 14.8
Q16_1 5 53 5.1
Q16_1 6 29 2.8
Q16_1 NA 303 29.4
Q16_2 1 39 3.8
Q16_2 2 221 21.4
Q16_2 3 257 24.9
Q16_2 4 140 13.6
Q16_2 5 50 4.8
Q16_2 6 22 2.1
Q16_2 NA 303 29.4
Q16_3 1 84 8.1
Q16_3 2 234 22.7
Q16_3 3 231 22.4
Q16_3 4 105 10.2
Q16_3 5 54 5.2
Q16_3 6 21 2.0
Q16_3 NA 303 29.4
Q16_4 1 60 5.8
Q16_4 2 236 22.9
Q16_4 3 245 23.7
Q16_4 4 115 11.1
Q16_4 5 50 4.8
Q16_4 6 23 2.2
Q16_4 NA 303 29.4
Q16_5 1 20 1.9
Q16_5 2 172 16.7
Q16_5 3 226 21.9
Q16_5 4 211 20.4
Q16_5 5 80 7.8
Q16_5 6 20 1.9
Q16_5 NA 303 29.4
Q17 1 168 16.3
Q17 2 248 24.0
Q17 3 276 26.7
Q17 4 153 14.8
Q17 5 67 6.5
Q17 6 120 11.6
Q18 1 181 17.5
Q18 2 245 23.7
Q18 3 247 23.9
Q18 4 163 15.8
Q18 5 87 8.4
Q18 6 109 10.6
Q19 1 235 22.8
Q19 2 245 23.7
Q19 3 241 23.4
Q19 4 114 11.0
Q19 5 52 5.0
Q19 6 145 14.1
Q20 1 233 22.6
Q20 2 242 23.4
Q20 3 232 22.5
Q20 4 132 12.8
Q20 5 56 5.4
Q20 6 137 13.3
Q21_1 1 166 16.1
Q21_1 2 191 18.5
Q21_1 3 233 22.6
Q21_1 4 178 17.2
Q21_1 5 102 9.9
Q21_1 6 162 15.7
Q21_2 1 242 23.4
Q21_2 2 186 18.0
Q21_2 3 223 21.6
Q21_2 4 148 14.3
Q21_2 5 80 7.8
Q21_2 6 153 14.8
Q21_3 1 105 10.2
Q21_3 2 186 18.0
Q21_3 3 268 26.0
Q21_3 4 183 17.7
Q21_3 5 116 11.2
Q21_3 6 174 16.9
Q21_4 1 110 10.7
Q21_4 2 174 16.9
Q21_4 3 231 22.4
Q21_4 4 173 16.8
Q21_4 5 148 14.3
Q21_4 6 196 19.0
Q21_10 1 129 12.5
Q21_10 2 211 20.4
Q21_10 3 247 23.9
Q21_10 4 173 16.8
Q21_10 5 87 8.4
Q21_10 6 185 17.9
Q21_5 1 145 14.1
Q21_5 2 219 21.2
Q21_5 3 266 25.8
Q21_5 4 176 17.1
Q21_5 5 114 11.0
Q21_5 6 112 10.9
Q21_6 1 140 13.6
Q21_6 2 220 21.3
Q21_6 3 233 22.6
Q21_6 4 225 21.8
Q21_6 5 112 10.9
Q21_6 6 102 9.9
Q21_7 1 121 11.7
Q21_7 2 215 20.8
Q21_7 3 260 25.2
Q21_7 4 197 19.1
Q21_7 5 126 12.2
Q21_7 6 113 10.9
Q21_8 1 109 10.6
Q21_8 2 205 19.9
Q21_8 3 236 22.9
Q21_8 4 214 20.7
Q21_8 5 161 15.6
Q21_8 6 107 10.4
Q21_9 1 112 10.9
Q21_9 2 184 17.8
Q21_9 3 235 22.8
Q21_9 4 208 20.2
Q21_9 5 191 18.5
Q21_9 6 102 9.9
Q22_1 1 172 16.7
Q22_1 2 318 30.8
Q22_1 3 256 24.8
Q22_1 4 83 8.0
Q22_1 5 34 3.3
Q22_1 6 169 16.4
Q22_2 1 90 8.7
Q22_2 2 353 34.2
Q22_2 3 259 25.1
Q22_2 4 91 8.8
Q22_2 5 65 6.3
Q22_2 6 174 16.9
Q22_3 1 75 7.3
Q22_3 2 317 30.7
Q22_3 3 293 28.4
Q22_3 4 83 8.0
Q22_3 5 75 7.3
Q22_3 6 189 18.3
Q22_4 1 85 8.2
Q22_4 2 343 33.2
Q22_4 3 293 28.4
Q22_4 4 71 6.9
Q22_4 5 53 5.1
Q22_4 6 187 18.1
Q22_5 1 91 8.8
Q22_5 2 251 24.3
Q22_5 3 322 31.2
Q22_5 4 85 8.2
Q22_5 5 57 5.5
Q22_5 6 226 21.9
Q22_6 1 58 5.6
Q22_6 2 274 26.6
Q22_6 3 309 29.9
Q22_6 4 47 4.6
Q22_6 5 48 4.7
Q22_6 6 296 28.7
Q22_7 1 87 8.4
Q22_7 2 411 39.8
Q22_7 3 257 24.9
Q22_7 4 77 7.5
Q22_7 5 42 4.1
Q22_7 6 158 15.3
Q22_8 1 64 6.2
Q22_8 2 291 28.2
Q22_8 3 344 33.3
Q22_8 4 81 7.8
Q22_8 5 62 6.0
Q22_8 6 190 18.4
Q22_9 1 101 9.8
Q22_9 2 240 23.3
Q22_9 3 307 29.7
Q22_9 4 171 16.6
Q22_9 5 50 4.8
Q22_9 6 163 15.8
Q22_10 1 76 7.4
Q22_10 2 298 28.9
Q22_10 3 310 30.0
Q22_10 4 122 11.8
Q22_10 5 67 6.5
Q22_10 6 159 15.4
Q22_11 1 59 5.7
Q22_11 2 218 21.1
Q22_11 3 293 28.4
Q22_11 4 156 15.1
Q22_11 5 97 9.4
Q22_11 6 209 20.3
Q23_1 1 440 42.6
Q23_1 2 356 34.5
Q23_1 3 236 22.9
Q23_2 1 243 23.5
Q23_2 2 113 10.9
Q23_2 NA 676 65.5
Q24_1 1 464 45.0
Q24_1 2 299 29.0
Q24_1 3 269 26.1
Q24_2 1 184 17.8
Q24_2 2 115 11.1
Q24_2 NA 733 71.0
Q25 1 521 50.5
Q25 2 342 33.1
Q25 3 169 16.4
Q27 1 144 14.0
Q27 2 248 24.0
Q27 3 438 42.4
Q27 4 142 13.8
Q27 5 60 5.8
workexperience 0 719 69.7
workexperience 1 313 30.3
AgeGroup 18-29 199 19.3
AgeGroup 30-39 185 17.9
AgeGroup 40-49 146 14.1
AgeGroup 50-59 220 21.3
AgeGroup 60-69 149 14.4
AgeGroup 70-79 109 10.6
AgeGroup 80+ 17 1.6
AgeGroup NA 7 0.7
education_recode 1 42 4.1
education_recode 2 351 34.0
education_recode 3 375 36.3
education_recode 4 264 25.6

Prepare data for regression analyses

These data are meant for regression analyses. Here, we define “Don’t know” as missing, we reverse scales so that our results are easier to interpret, and we prepare data for different types of models (linear and logistic regressions etc.).

# Define 'don't know' as missing
data_clean <- data %>%
  mutate(
    Q4 = ifelse(Q4 == 6, NA, Q4),
    Q6 = ifelse(Q6 == 6, NA, Q6),
    Q9 = ifelse(Q9 == 6, NA, Q9),
    Q10 = ifelse(Q10 == 6, NA, Q10),
    Q11 = ifelse(Q11 == 6, NA, Q11),
    Q13 = ifelse(Q13 == 6, NA, Q13),
    Q14 = ifelse(Q14 == 6, NA, Q14),
    Q15 = ifelse(Q15 == 6, NA, Q15),
    Q17 = ifelse(Q17 == 6, NA, Q17),
    Q18 = ifelse(Q18 == 6, NA, Q18),
    Q19 = ifelse(Q19 == 6, NA, Q19),
    Q20 = ifelse(Q20 == 6, NA, Q20),
    Q27 = ifelse(Q27 == 6, NA, Q27)
  )

## Reverse scales on certain variables
data_clean$reversed_technology <- max(data_clean$Q9) + 1 - data_clean$Q9
# data_clean$reversed_industry <- max(data_clean$Q4) + 1 - data_clean$Q4
data_clean$Q10 <- as.factor(data_clean$Q10)
data_clean <- data_clean %>%
  mutate(
    Q11 = ifelse(is.na(Q11), NA, Q11),
    reversed_perception1 = 5 + 1 - Q11
  )


data_clean$AgeGroup <- as.factor(data_clean$AgeGroup) 
data_clean$education_recode <- as.factor(data_clean$education_recode) 
data_clean$Q10 <- as.factor(data_clean$Q10)

# Subset the data to only include women
women_df <- subset(data_clean, data_clean$resp_gender == "Women")

Export data for comparative analysis

# Export data for comparative analysis
# merge_data <- data_clean %>% 
#   select(reversed_perception1, resp_gender, AgeGroup, workexperience, 
#          Q4, Q6, Q7, Q8, reversed_technology, Q10, Q13, 
#          Q14, Q15, Q17, Q18, Q19, Q20, Q27, Q22_1, Q22_2, Q22_3, Q22_4, 
#          Q22_5, Q22_6, Q22_7, Q22_8, Q22_9, Q22_10, Q22_11, Q21_1, Q21_2, 
#          Q21_3,  Q21_4,  Q21_5, Q21_6, Q21_7,  Q21_8, Q21_9,  Q21_10) 
# 
# # Export data set to excel
# write_xlsx(merge_data, "merge_data_norway.xlsx")

Export data for coding of open ended questions

# # Add unique id
# data$id <- 1:nrow(data)
# 
# # Select variables
# data_benefits <- data %>%
#   select(id, Q12_1)
# 
# data_concerns <- data %>%
#   select(id, Q12_2)
# 
# # Export data set to excel
# write_xlsx(data_benefits, "data_benefits.xlsx")
# write_xlsx(data_concerns, "data_concerns.xlsx")

Some descriptives on gender, age, and knowledge

Gender and knowlegde

##  Table showing knowledge by gender
prop.table(table(data$resp_gender, data$Q10), margin = 1)
##        
##                  1          2          3
##   Men   0.05882353 0.55028463 0.39089184
##   Women 0.28316832 0.58811881 0.12871287
## Plot
ggplot(data, aes(x = as.factor(resp_gender), fill = as.factor(Q10))) +
  geom_bar(position = "fill") +  # Normalize to proportions
  scale_fill_manual(
    values = c("blue", "orange", "red"),
    labels = c(
      "Never heard of CCS",
      "Heard of, but know little",
      "Heard of and know about"
    )
  ) +
  labs(x = "Gender", y = "Proportion", fill = "Knowledge Level") +
  theme_minimal()

ggplot(data, aes(x = as.factor(Q10), fill = as.factor(Q10))) +
  geom_bar(aes(y = after_stat(count / sum(count))), position = "dodge") +
  facet_wrap( ~ resp_gender) +  # Separate plots for each gender
  scale_fill_manual(
    values = c("blue", "orange", "red"),
    labels = c("Low", "Medium", "High")
  ) +
  labs(x = "Knowledge Level", y = "Proportion", fill = "Knowledge Level") +
  theme_minimal()

Gender and “don’t know”

# First perception question
## Create a binary variable: 1 if "Don't know", 0 otherwise 
data <- data %>%
  mutate(dont_know_Q11 = ifelse(Q11 == 6, 1, 0)) 

##  Table showing knowledge by don't know
prop.table(table(data$resp_gender, data$dont_know_Q11), margin = 1)
##        
##                  0          1
##   Men   0.91840607 0.08159393
##   Women 0.68316832 0.31683168
## Plot
ggplot(data, aes(x = as.factor(resp_gender), fill = as.factor(dont_know_Q11))) +
  geom_bar(position = "dodge") +  
  scale_fill_manual(values = c("blue", "red"), labels = c("Other", "Don't know")) + 
  labs(x = "Gender", y = "proportion", fill = "Response") +
  theme_minimal()

Age, gender, and knowledge

# Age distribution
#age <- ggplot(data, aes(x = Age_1)) +
#  geom_histogram(binwidth = 5, fill = "skyblue", color = "black") +
#  labs(title = "Age Distribution", x = "Age", y = "Count") +
#  theme_minimal()
#age

ggplot(data, aes(x = as.factor(AgeGroup), fill = as.factor(Q10))) +
  geom_bar(position = "fill") +  
  scale_fill_manual(
    values = c("blue", "orange", "red"),
    labels = c(
      "Never heard of CCS",
      "Heard of, but know little",
      "Heard of and know about"
    )
  ) +
  labs(x = "Age", y = "Proportion", fill = "Knowledge Level") +
  theme_minimal()

# By gender and age
ggplot(data, aes(x = as.factor(Q10), fill = as.factor(resp_gender))) +
  geom_bar(aes(y = after_stat(count / sum(count))), position = "dodge") +
  facet_wrap( ~ AgeGroup) +
  labs(x = "Knowledge Level", y = "Proportion", fill = "Gender") +
  theme_minimal()

Descriptive statistics

Perceptions and concerns

# First perception question
perception1 <- ggplot(data, aes(
  x = factor(Q11),
  y = after_stat(prop),
  group = 1
)) +
  geom_bar(fill = "skyblue", color = "black") +
  scale_x_discrete(
    labels = c(
      "1" = "Very positive",
      "2" = "Positive",
      "3" = "Neutral",
      "4" = "Negative",
      "5" = "Very negative",
      "6" = "Don't know"
    )
  ) +
  labs(title = "CCS perception", x = "", y = "Proportion") +
  theme_minimal() + 
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

perception1

# Concerned about CCS
concern1 <- ggplot(data, aes(
  x = factor(Q13),
  y = after_stat(prop),
  group = 1
)) +
  geom_bar(fill = "skyblue", color = "black") +
  scale_x_discrete(
    labels = c(
      "1" = "Not concerned at all",
      "2" = "Slightly concerned",
      "3" = "Somewhat concerned",
      "4" = "Moderately concerned",
      "5" = "very concerned",
      "6" = "Don't know"
    )
  ) +
  geom_bar(fill = "skyblue", color = "black") +
  labs(title = "Concern about CCS", x = "", y = "Proportion") +
  theme_minimal() + 
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

concern1

# Concerned about capture
concerncapture <- ggplot(data, aes(
  x = factor(Q14),
  y = after_stat(prop),
  group = 1
)) +
  geom_bar(fill = "skyblue", color = "black") +
  scale_x_discrete(
    labels = c(
      "1" = "Not concerned at all",
      "2" = "Slightly concerned",
      "3" = "Somewhat concerned",
      "4" = "Moderately concerned",
      "5" = "very concerned",
      "6" = "Don't know"
    )
  ) +
  labs(title = "Concern about capture", x = "", y = "Proportion") +
  theme_minimal() + 
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

concerncapture

# Concerned about transport
concerntransport <- ggplot(data, aes(
  x = factor(Q15),
  y = after_stat(prop),
  group = 1
)) +
  geom_bar(fill = "skyblue", color = "black") +
  scale_x_discrete(
    labels = c(
      "1" = "Not concerned at all",
      "2" = "Slightly concerned",
      "3" = "Somewhat concerned",
      "4" = "Moderately concerned",
      "5" = "very concerned",
      "6" = "Don't know"
    )
  ) +
  labs(title = "Concern about transport", x = "", y = "Proportion") +
  theme_minimal() + 
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

concerntransport

# Concerned about transport by train
concerntransporttrain <- ggplot(data %>% filter(!is.na(Q16_1)), aes(
  x = factor(Q16_1),
  y = after_stat(prop),
  group = 1
)) +
  geom_bar(fill = "skyblue", color = "black") +
  scale_x_discrete(
    labels = c(
      "1" = "Not concerned at all",
      "2" = "Slightly concerned",
      "3" = "Somewhat concerned",
      "4" = "Moderately concerned",
      "5" = "very concerned",
      "6" = "Don't know"
    )
  ) +
  labs(title = "Concern about transport by train", x = "", y = "Proportion") +
  theme_minimal() + 
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

concerntransporttrain

# Concerned about transport by ship
concerntransportship <- ggplot(data %>% filter(!is.na(Q16_2)), aes(
  x = factor(Q16_2),
  y = after_stat(prop),
  group = 1
)) +
  geom_bar(fill = "skyblue", color = "black") +
  scale_x_discrete(
    labels = c(
      "1" = "Not concerned at all",
      "2" = "Slightly concerned",
      "3" = "Somewhat concerned",
      "4" = "Moderately concerned",
      "5" = "very concerned",
      "6" = "Don't know"
    )
  ) +
  labs(title = "Concern about transport by ship", x = "", y = "Proportion") +
  theme_minimal() + 
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

concerntransportship

# Concerned about transport by offshore pipeline
concerntransportoffhorepipeline <- ggplot(data %>% filter(!is.na(Q16_3)), aes(
  x = factor(Q16_3),
  y = after_stat(prop),
  group = 1
)) +
  geom_bar(fill = "skyblue", color = "black") +
  scale_x_discrete(
    labels = c(
      "1" = "Not concerned at all",
      "2" = "Slightly concerned",
      "3" = "Somewhat concerned",
      "4" = "Moderately concerned",
      "5" = "very concerned",
      "6" = "Don't know"
    )
  ) +
  labs(title = "Concern about transport by offshore pipeline", x = "", y = "Proportion") +
  theme_minimal() + 
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

concerntransportoffhorepipeline

# Concerned about transport by onshore pipeline
concerntransportonhorepipeline <- ggplot(data %>% filter(!is.na(Q16_4)), aes(
  x = factor(Q16_4),
  y = after_stat(prop),
  group = 1
)) +
  geom_bar(fill = "skyblue", color = "black") +
  scale_x_discrete(
    labels = c(
      "1" = "Not concerned at all",
      "2" = "Slightly concerned",
      "3" = "Somewhat concerned",
      "4" = "Moderately concerned",
      "5" = "very concerned",
      "6" = "Don't know"
    )
  ) +
  labs(title = "Concern about transport by onshore pipeline", x = "", y = "Proportion") +
  theme_minimal() + 
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

concerntransportonhorepipeline

# Concerned about transport by truck/tanker
concerntransporttruck <- ggplot(data %>% filter(!is.na(Q16_5)), aes(
  x = factor(Q16_5),
  y = after_stat(prop),
  group = 1
)) +
  geom_bar(fill = "skyblue", color = "black") +
  scale_x_discrete(
    labels = c(
      "1" = "Not concerned at all",
      "2" = "Slightly concerned",
      "3" = "Somewhat concerned",
      "4" = "Moderately concerned",
      "5" = "very concerned",
      "6" = "Don't know"
    )
  ) +
  labs(title = "Concern about transport by truck/tanker", x = "", y = "Proportion") +
  theme_minimal() + 
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

concerntransporttruck

# concerned about storage (onshore)
concernstorageonshore <- ggplot(data, aes(
  x = factor(Q17),
  y = after_stat(prop),
  group = 1
)) +
  geom_bar(fill = "skyblue", color = "black") +
  scale_x_discrete(
    labels = c(
      "1" = "Not concerned at all",
      "2" = "Slightly concerned",
      "3" = "Somewhat concerned",
      "4" = "Moderately concerned",
      "5" = "very concerned",
      "6" = "Don't know"
    )
  ) +
  labs(title = "Concern about onshore storage", x = "", y = "Proportion") +
  theme_minimal() + 
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

concernstorageonshore

# concerned about storage (offshore) 
concernstorageoffshore <- ggplot(data, aes(
  x = factor(Q18),
  y = after_stat(prop),
  group = 1
)) +
  geom_bar(fill = "skyblue", color = "black") +
  scale_x_discrete(
    labels = c(
      "1" = "Not concerned at all",
      "2" = "Slightly concerned",
      "3" = "Somewhat concerned",
      "4" = "Moderately concerned",
      "5" = "very concerned",
      "6" = "Don't know"
    )
  ) +
  labs(title = "Concern about offshore storage", x = "", y = "Proportion") +
  theme_minimal() + 
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

concernstorageoffshore

# concerned about monitoring (onshore)
concernmonitoringonshore <- ggplot(data, aes(
  x = factor(Q19),
  y = after_stat(prop),
  group = 1
)) +
  geom_bar(fill = "skyblue", color = "black") +
  scale_x_discrete(
    labels = c(
      "1" = "Not concerned at all",
      "2" = "Slightly concerned",
      "3" = "Somewhat concerned",
      "4" = "Moderately concerned",
      "5" = "very concerned",
      "6" = "Don't know"
    )
  ) +
  labs(title = "Concern about onshore monitoring", x = "", y = "Proportion") +
  theme_minimal() + 
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

concernmonitoringonshore

# concerned about monitoring (offshore)
concernmonitoringoffshore <- ggplot(data, aes(
  x = factor(Q20),
  y = after_stat(prop),
  group = 1
)) +
  geom_bar(fill = "skyblue", color = "black") +
  scale_x_discrete(
    labels = c(
      "1" = "Not concerned at all",
      "2" = "Slightly concerned",
      "3" = "Somewhat concerned",
      "4" = "Moderately concerned",
      "5" = "very concerned",
      "6" = "Don't know"
    )
  ) +
  labs(title = "Concern about offshore monitoring", x = "", y = "Proportion") +
  theme_minimal() + 
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

concernmonitoringoffshore

# Final support question
support <- ggplot(data, aes(
  x = factor(Q27),
  y = after_stat(prop),
  group = 1
)) +
  geom_bar(fill = "skyblue", color = "black") +
  scale_x_discrete(
    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"
    )
  ) +
  labs(title = "Support for implementing CCS in Norway", x = "", y = "Proportion") +
  theme_minimal() + 
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

support

Figure concerns

battery <- data %>% select(Q14:Q15, Q17:Q20)

battery <- data %>%
  select(Q14:Q15, Q17:Q20) %>%
  mutate(across(everything(), as.factor))

battery_long <- battery %>%
  pivot_longer(cols = everything(), 
               names_to = "Question",  
               values_to = "Response") 



battery_labels <- c(
  "Q13" = "Concern CCS",
  "Q14" = "Concern capture",
  "Q15" = "Concern transport",
  "Q17" = "Concern storage onshore",
  "Q18" = "Concern storage offshore",
  "Q19" = "Concern monitoring onshore",
  "Q20" = "Concern monitoring offshore"
)

battery_response_labels <- c(
  "1" = "Not concerned at all",
  "2" = "Slightly concerned",
  "3" = "Somewhat concerned",
  "4" = "Moderately concerned",
  "5" = "Very concerned",
  "6" = "Don't know"
)


 # Stacked bar plot
# ggplot(battery_long, aes(x = Question, fill = as.factor(Response))) +
#  geom_bar(position = "fill") + 
#  scale_fill_brewer(palette = "Set2", name = "Response", labels = battery_response_labels) + 
#  scale_x_discrete(labels = battery_labels) +  
#  labs(title = "CCS concerns", x = "", y = "Proportion") +
#  theme_minimal() +
#  coord_flip() +
#  theme(axis.text.y = element_text(angle = 0, hjust = 1))



## counts + percent
battery_plotdata <- battery_long %>%
  count(Question, Response) %>%          # n = count
  group_by(Question) %>%
  mutate(percent = 100 * n / sum(n)) %>% # percent (0-100)
  ungroup()


# Plot
ggplot(battery_plotdata, aes(x = Question, y = n, fill = Response)) +
  geom_col(position = "fill", width = 0.8) +
  geom_text(aes(label = paste0(round(percent), "%")),
            position = position_fill(vjust = 0.5),
            size = 3) +
  scale_y_continuous(labels = percent_format(accuracy = 1)) +
  scale_fill_brewer(palette = "Set2", name = "Response",
                    labels = battery_response_labels) +
  scale_x_discrete(labels = battery_labels) +
  labs(title = "CCS concerns", x = "", y = "Percentage") +
  theme_minimal() +
  coord_flip() +
  theme(axis.text.y = element_text(angle = 0, hjust = 1))

Transport figure

battery_transport <- data %>%
  select(Q16_1:Q16_5) %>%
  mutate(across(everything(), as.factor))

battery_transport_long <- battery_transport %>%
  pivot_longer(cols = everything(),
               names_to = "Question",
               values_to = "Response")


battery_transport_labels <- c(
  "Q16_1" = "Train",
  "Q16_2" = "Ship",
  "Q16_3" = "Offshore pipeline",
  "Q16_4" = "Onshore pipeline",
  "Q16_5" = "Truck/tanker truck"
)

battery_response_labels <- c(
  "1" = "Not concerned at all",
  "2" = "Slightly concerned",
  "3" = "Somewhat concerned",
  "4" = "Moderately concerned",
  "5" = "Very concerned",
  "6" = "Don't know"
)


## counts + percent
battery_transport_plotdata <- battery_transport_long %>%
  count(Question, Response) %>%          # n = count
  group_by(Question) %>%
  mutate(percent = 100 * n / sum(n)) %>% # percent (0-100)
  ungroup()


## plot
battery_transport_plotdata %>%
  filter(!is.na(Response)) %>%
  ggplot(aes(x = Question, y = n, fill = Response)) +
  geom_col(position = "fill", width = 0.8) +
  geom_text(aes(label = paste0(round(percent), "%")),
            position = position_fill(vjust = 0.5),
            size = 3) +
  scale_y_continuous(labels = percent_format(accuracy = 1)) +
  scale_fill_brewer(palette = "Set2", name = "Response",
                    labels = battery_response_labels) +
  scale_x_discrete(labels = battery_transport_labels) +
  labs(title = "Concerns about modes of CO2 transport", x = "", y = "Percentage") +
  theme_minimal() +
  coord_flip() +
  theme(axis.text.y = element_text(angle = 0, hjust = 1))

Battery questions: CCS concerns

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ lubridate 1.9.4     ✔ tibble    3.2.1
## ✔ readr     2.1.5     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ psych::%+%()             masks ggplot2::%+%()
## ✖ scales::alpha()          masks psych::alpha(), ggplot2::alpha()
## ✖ NLP::annotate()          masks ggplot2::annotate()
## ✖ readr::col_factor()      masks scales::col_factor()
## ✖ scales::discard()        masks purrr::discard()
## ✖ dplyr::filter()          masks stats::filter()
## ✖ kableExtra::group_rows() masks dplyr::group_rows()
## ✖ dplyr::lag()             masks stats::lag()
## ✖ tibble::view()           masks summarytools::view()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(scales)

# Select battery questions
battery1 <- data %>% 
  select(c("Q21_1","Q21_2","Q21_3","Q21_4","Q21_5",
           "Q21_6","Q21_7","Q21_8","Q21_9","Q21_10"))

# Convert to long format
battery1_long <- battery1 %>%
  pivot_longer(
    cols = everything(),
    names_to = "Question",
    values_to = "Response"
  )

 battery1_response_labels <- c(
   "1" = "Not concerned at all",
   "2" = "Slightly concerned",
   "3" = "Somewhat concerned",
   "4" = "Moderately concerned",
   "5" = "Very concerned",
   "6" = "Don't know"
 )

 # Labels
battery1_labels <- c(
  "Q21_1" = "Comes at the expense of renewable energies",
  "Q21_2" = "Leads to prolonged use of fossil energy sources",
  "Q21_3" = "Will not deliver the envisioned emissions reduction",
  "Q21_4" = "Will not be economically beneficial",
  "Q21_5" = "Leakage from the capture process",
  "Q21_6" = "Leakage during transport ",
  "Q21_7" = "Leakage during injection for underground storage",
  "Q21_8" = "Leakage from the storage site",
  "Q21_9" = "Leakage contaminating groundwater",
  "Q21_10" = "Tremors because of CO2 storage activities"
)
 
# Clean + label responses
battery1_long <- battery1_long %>%
  filter(!is.na(Response)) %>%
  mutate(
    Question = factor(Question, levels = names(battery1_labels)),
    Response = recode(as.character(Response), !!!battery1_response_labels),
    Response = factor(
      Response,
      levels = unname(battery1_response_labels)
    )
  )

# Calculate counts and percentages
battery1_plotdata <- battery1_long %>%
  count(Question, Response) %>%
  group_by(Question) %>%
  mutate(percent = n / sum(n)) %>%
  ungroup()

# Calculate counts and percentages
battery1_plotdata <- battery1_plotdata %>%
  group_by(Question) %>%
  arrange(Response) %>%
  mutate(label_pos = cumsum(percent) - percent/2) %>%
  ungroup()

# Plot
ggplot(battery1_plotdata, aes(x = Question, y = percent, fill = Response)) +
  geom_col(width = 0.8) +
  geom_text(
    aes(label = paste0(round(percent * 100), "%")),
    position = position_stack(vjust = 0.5),
    size = 2.5
  ) +
  scale_y_continuous(labels = percent_format()) +
  scale_fill_brewer(palette = "Set2", name = "Response") +
  scale_x_discrete(labels = battery1_labels) +
  labs(
    title = "CCS Concerns",
    x = "",
    y = "Percentage"
  ) +
  coord_flip() +
  theme_minimal() +
  theme(axis.text.y = element_text(hjust = 1))

Battery questions: CCS statements

library(tidyverse)
library(scales)

# Select battery questions
battery2 <- data %>% 
  select(c("Q22_1", "Q22_2", "Q22_3", "Q22_4", "Q22_5", "Q22_6",
                     "Q22_7", "Q22_8", "Q22_9", "Q22_10", "Q22_11"))

# Convert to long format
battery2_long <- battery2 %>%
  pivot_longer(
    cols = everything(),
    names_to = "Question",
    values_to = "Response"
  )

battery2_response_labels <- c(
  "1" = "Completely agree",
  "2" = "Agree",
  "3" = "Neither agree nor disagree",
  "4" = "Disagree",
  "5" = "Completely disagree",
  "6" = "Don't know"
)

# Labels
battery2_labels <- c(
  "Q22_1" = "Only addition to emissions reduction efforts",
  "Q22_2" = "Important to reduce CO2-levels in the atmosphere",
  "Q22_3" = "Needed to achieve internationally agreed climate goals",
  "Q22_4" = "Necessary to offset hard to abate CO2 emissions",
  "Q22_5" = "Compensation for people living near CCS",
  "Q22_6" = "Important to capture emissions from blue hydrogen",
  "Q22_7" = "CCS projects will lead to new jobs",
  "Q22_8" = "Important to sustain European industrial activities",
  "Q22_9" = "Only store in the country it is captured in",
  "Q22_10" = "Store CO2 from countries with less storage",
  "Q22_11" = "CO2 market should be open to import and export"
)
 
# Clean + label responses
battery2_long <- battery2_long %>%
  filter(!is.na(Response)) %>%
  mutate(
    Question = factor(Question, levels = names(battery2_labels)),
    Response = recode(as.character(Response), !!!battery2_response_labels),
    Response = factor(
      Response,
      levels = unname(battery2_response_labels)
    )
  )

# Calculate counts and percentages
battery2_plotdata <- battery2_long %>%
  count(Question, Response) %>%
  group_by(Question) %>%
  mutate(percent = n / sum(n)) %>%
  ungroup()

# Calculate counts and percentages
battery2_plotdata <- battery2_plotdata %>%
  group_by(Question) %>%
  arrange(Response) %>%
  mutate(label_pos = cumsum(percent) - percent/2) %>%
  ungroup()

# Plot
ggplot(battery2_plotdata, aes(x = Question, y = percent, fill = Response)) +
  geom_col(width = 0.8) +
  geom_text(
    aes(label = paste0(round(percent * 100), "%")),
    position = position_stack(vjust = 0.5),
    size = 2
  ) +
  scale_y_continuous(labels = percent_format()) +
  scale_fill_brewer(palette = "Set2", name = "Response") +
  scale_x_discrete(labels = battery2_labels) +
  labs(
    title = "CCS statements",
    x = "",
    y = "Percentage"
  ) +
  coord_flip() +
  theme_minimal() +
  theme(axis.text.y = element_text(hjust = 1))

Regressions

Are you mainly positive or negative about carbon capture and storage (CCS)?

model1 <-
  lm(reversed_perception1 ~ resp_gender + AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = data_clean)

# View the summary of the regression model
summary(model1)
## 
## Call:
## lm(formula = reversed_perception1 ~ resp_gender + AgeGroup + 
##     education_recode + workexperience + Q4 + Q6 + Q7 + Q8 + reversed_technology + 
##     Q10, data = data_clean)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2.8160 -0.4571  0.1148  0.5257  2.6128 
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          1.739043   0.247164   7.036 4.24e-12 ***
## resp_genderWomen    -0.174867   0.062987  -2.776  0.00563 ** 
## AgeGroup30-39        0.135812   0.097106   1.399  0.16232    
## AgeGroup40-49       -0.015714   0.102333  -0.154  0.87800    
## AgeGroup50-59        0.109090   0.089208   1.223  0.22174    
## AgeGroup60-69        0.007155   0.100357   0.071  0.94318    
## AgeGroup70-79        0.133616   0.107853   1.239  0.21575    
## AgeGroup80+         -0.243251   0.211089  -1.152  0.24952    
## education_recode2   -0.075975   0.145788  -0.521  0.60242    
## education_recode3    0.100053   0.145263   0.689  0.49117    
## education_recode4    0.134323   0.149057   0.901  0.36778    
## workexperience       0.128194   0.062432   2.053  0.04036 *  
## Q4                   0.002663   0.025110   0.106  0.91555    
## Q6                   0.235032   0.025363   9.267  < 2e-16 ***
## Q7                  -0.030226   0.014501  -2.084  0.03744 *  
## Q8                  -0.009932   0.015720  -0.632  0.52767    
## reversed_technology  0.299709   0.032742   9.154  < 2e-16 ***
## Q102                 0.128238   0.098878   1.297  0.19503    
## Q103                -0.003001   0.108762  -0.028  0.97799    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.7948 on 803 degrees of freedom
##   (210 observations deleted due to missingness)
## Multiple R-squared:  0.2443, Adjusted R-squared:  0.2274 
## F-statistic: 14.42 on 18 and 803 DF,  p-value: < 2.2e-16
# Plot coefficients
plot_summs(
  model1,
  scale = TRUE,
  coefs = c(
    "Women" = "resp_genderWomen",
    "Age 30-39" = "AgeGroup30-39",
    "Age 40-49" = "AgeGroup40-49",
    "Age 50-59" = "AgeGroup50-59",
    "Age 60-69" = "AgeGroup60-69",
    "Age 70-79" = "AgeGroup70-79",
    "Age 80+" = "AgeGroup80+",
    "Upper secondary schoool" = "education_recode2",
    "Undergraduate degree" = "education_recode3",
    "Higher degree" = "education_recode4",
    "Work experience" = "workexperience",
    "Industrial area" = "Q4",
    "Concerned about climate change" = "Q6",
    "Left - right" = "Q7",
    "Liberal - conservative" = "Q8",
    "Climate solved by technology" = "reversed_technology",
    "CCS Knowledge medium" = "Q102",
    "CCS knowledge high" = "Q103"
  )
)

# Women only
model1W <-
  lm(reversed_perception1 ~  AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = women_df)

summary(model1W)
## 
## Call:
## lm(formula = reversed_perception1 ~ AgeGroup + education_recode + 
##     workexperience + Q4 + Q6 + Q7 + Q8 + reversed_technology + 
##     Q10, data = women_df)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2.59627 -0.37715  0.01425  0.49302  1.72754 
## 
## Coefficients:
##                     Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          1.94722    0.31602   6.162 2.15e-09 ***
## AgeGroup30-39       -0.01930    0.11026  -0.175 0.861190    
## AgeGroup40-49       -0.24030    0.12868  -1.867 0.062747 .  
## AgeGroup50-59       -0.07871    0.11020  -0.714 0.475613    
## AgeGroup60-69        0.20141    0.16017   1.257 0.209508    
## AgeGroup70-79        0.27162    0.17053   1.593 0.112190    
## AgeGroup80+         -0.90224    0.41500  -2.174 0.030426 *  
## education_recode2   -0.22031    0.23572  -0.935 0.350681    
## education_recode3    0.04665    0.23428   0.199 0.842283    
## education_recode4   -0.01177    0.23765  -0.050 0.960547    
## workexperience       0.15055    0.09133   1.648 0.100243    
## Q4                  -0.01556    0.03610  -0.431 0.666814    
## Q6                   0.12148    0.03627   3.349 0.000907 ***
## Q7                  -0.02779    0.02119  -1.312 0.190604    
## Q8                   0.01510    0.02396   0.630 0.529202    
## reversed_technology  0.29647    0.04611   6.430 4.62e-10 ***
## Q102                 0.26477    0.10507   2.520 0.012223 *  
## Q103                 0.25039    0.13492   1.856 0.064383 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.6868 on 322 degrees of freedom
##   (165 observations deleted due to missingness)
## Multiple R-squared:  0.252,  Adjusted R-squared:  0.2126 
## F-statistic: 6.383 on 17 and 322 DF,  p-value: 5.704e-13

Concern about CCS

# Run the linear regression model
model2 <-
  lm(Q13 ~ resp_gender + AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = data_clean)

# View the summary of the regression model
summary(model2)
## 
## Call:
## lm(formula = Q13 ~ resp_gender + AgeGroup + education_recode + 
##     workexperience + Q4 + Q6 + Q7 + Q8 + reversed_technology + 
##     Q10, data = data_clean)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2.1327 -0.6673 -0.0043  0.5896  3.2130 
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          2.612853   0.307822   8.488  < 2e-16 ***
## resp_genderWomen     0.199465   0.079425   2.511  0.01221 *  
## AgeGroup30-39       -0.094236   0.119160  -0.791  0.42926    
## AgeGroup40-49       -0.044588   0.123845  -0.360  0.71891    
## AgeGroup50-59       -0.198715   0.113034  -1.758  0.07911 .  
## AgeGroup60-69       -0.118479   0.126963  -0.933  0.35100    
## AgeGroup70-79       -0.143112   0.134889  -1.061  0.28901    
## AgeGroup80+          0.691949   0.270051   2.562  0.01057 *  
## education_recode2    0.108012   0.189306   0.571  0.56844    
## education_recode3   -0.042103   0.188089  -0.224  0.82293    
## education_recode4   -0.004550   0.193344  -0.024  0.98123    
## workexperience      -0.038903   0.078723  -0.494  0.62132    
## Q4                  -0.003354   0.031033  -0.108  0.91395    
## Q6                   0.103258   0.031892   3.238  0.00125 ** 
## Q7                   0.008557   0.017935   0.477  0.63340    
## Q8                   0.010884   0.019113   0.569  0.56921    
## reversed_technology -0.193199   0.040691  -4.748 2.41e-06 ***
## Q102                 0.045465   0.112981   0.402  0.68748    
## Q103                 0.235179   0.130494   1.802  0.07187 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.022 on 847 degrees of freedom
##   (166 observations deleted due to missingness)
## Multiple R-squared:  0.06542,    Adjusted R-squared:  0.04555 
## F-statistic: 3.294 on 18 and 847 DF,  p-value: 4.549e-06
# Plot coefficients
plot_summs(
  model2,
  coefs = c(
    "Women" = "resp_genderWomen",
    "Age 30-39" = "AgeGroup30-39",
    "Age 40-49" = "AgeGroup40-49",
    "Age 50-59" = "AgeGroup50-59",
    "Age 60-69" = "AgeGroup60-69",
    "Age 70-79" = "AgeGroup70-79",
    "Age 80+" = "AgeGroup80+",
    "Upper secondary schoool" = "education_recode2",
    "Undergraduate degree" = "education_recode3",
    "Higher degree" = "education_recode4",
    "Work experience" = "workexperience",
    "Industrial area" = "Q4",
    "Concerned about climate change" = "Q6",
    "Left - right" = "Q7",
    "Liberal - conservative" = "Q8",
    "Climate solved by technology" = "reversed_technology",
    "CCS Knowledge medium" = "Q102",
    "CCS knowledge high" = "Q103"
  )
)

# Women only
model2W <-
  lm(Q13 ~  AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = women_df)

summary(model2W)
## 
## Call:
## lm(formula = Q13 ~ AgeGroup + education_recode + workexperience + 
##     Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10, data = women_df)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.91375 -0.63184  0.09749  0.56204  2.67309 
## 
## Coefficients:
##                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          2.4162357  0.3979661   6.071 3.10e-09 ***
## AgeGroup30-39        0.1261377  0.1365273   0.924  0.35613    
## AgeGroup40-49        0.1384184  0.1497492   0.924  0.35590    
## AgeGroup50-59        0.0996115  0.1411986   0.705  0.48095    
## AgeGroup60-69        0.1732812  0.2074517   0.835  0.40409    
## AgeGroup70-79       -0.2043851  0.2169947  -0.942  0.34685    
## AgeGroup80+          1.5357132  0.5523584   2.780  0.00570 ** 
## education_recode2   -0.1603505  0.2953144  -0.543  0.58746    
## education_recode3   -0.2587441  0.2930646  -0.883  0.37786    
## education_recode4   -0.1518724  0.2980436  -0.510  0.61066    
## workexperience       0.0402852  0.1162773   0.346  0.72919    
## Q4                   0.0314377  0.0431813   0.728  0.46704    
## Q6                   0.2244142  0.0447227   5.018 8.07e-07 ***
## Q7                  -0.0004145  0.0253495  -0.016  0.98696    
## Q8                  -0.0028056  0.0272606  -0.103  0.91808    
## reversed_technology -0.1702560  0.0582133  -2.925  0.00366 ** 
## Q102                 0.0158463  0.1226341   0.129  0.89726    
## Q103                -0.0733328  0.1696008  -0.432  0.66571    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.9196 on 376 degrees of freedom
##   (111 observations deleted due to missingness)
## Multiple R-squared:  0.1125, Adjusted R-squared:  0.07234 
## F-statistic: 2.803 on 17 and 376 DF,  p-value: 0.0001886

Concern about capture

# Run the linear regression model
model3 <-
  lm(Q14 ~ resp_gender + AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = data_clean)

# View the summary of the regression model
summary(model3)
## 
## Call:
## lm(formula = Q14 ~ resp_gender + AgeGroup + education_recode + 
##     workexperience + Q4 + Q6 + Q7 + Q8 + reversed_technology + 
##     Q10, data = data_clean)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -1.9434 -0.8998 -0.0959  0.7219  3.3031 
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          2.696383   0.310413   8.686  < 2e-16 ***
## resp_genderWomen     0.175761   0.080709   2.178 0.029697 *  
## AgeGroup30-39       -0.283663   0.119071  -2.382 0.017420 *  
## AgeGroup40-49       -0.214622   0.124784  -1.720 0.085801 .  
## AgeGroup50-59       -0.432121   0.114495  -3.774 0.000172 ***
## AgeGroup60-69       -0.201500   0.128851  -1.564 0.118224    
## AgeGroup70-79       -0.276979   0.137545  -2.014 0.044347 *  
## AgeGroup80+          0.266414   0.285154   0.934 0.350419    
## education_recode2    0.022687   0.194209   0.117 0.907032    
## education_recode3   -0.094934   0.193084  -0.492 0.623077    
## education_recode4    0.026943   0.198424   0.136 0.892021    
## workexperience       0.045319   0.080171   0.565 0.572028    
## Q4                  -0.027561   0.031569  -0.873 0.382878    
## Q6                   0.083018   0.032182   2.580 0.010053 *  
## Q7                   0.007768   0.018232   0.426 0.670165    
## Q8                   0.050025   0.019537   2.560 0.010622 *  
## reversed_technology -0.185783   0.041320  -4.496 7.86e-06 ***
## Q102                -0.131697   0.112282  -1.173 0.241151    
## Q103                -0.082289   0.130108  -0.632 0.527252    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.049 on 865 degrees of freedom
##   (148 observations deleted due to missingness)
## Multiple R-squared:  0.0689, Adjusted R-squared:  0.04953 
## F-statistic: 3.556 on 18 and 865 DF,  p-value: 8.58e-07
# Plot coefficients
plot_summs(
  model3,
  coefs = c(
    "Women" = "resp_genderWomen",
    "Age 30-39" = "AgeGroup30-39",
    "Age 40-49" = "AgeGroup40-49",
    "Age 50-59" = "AgeGroup50-59",
    "Age 60-69" = "AgeGroup60-69",
    "Age 70-79" = "AgeGroup70-79",
    "Age 80+" = "AgeGroup80+",
    "Upper secondary schoool" = "education_recode2",
    "Undergraduate degree" = "education_recode3",
    "Higher degree" = "education_recode4",
    "Work experience" = "workexperience",
    "Industrial area" = "Q4",
    "Concerned about climate change" = "Q6",
    "Left - right" = "Q7",
    "Liberal - conservative" = "Q8",
    "Climate solved by technology" = "reversed_technology",
    "CCS Knowledge medium" = "Q102",
    "CCS knowledge high" = "Q103"
  )
)

# Women only
model3W <-
  lm(Q14 ~ AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = women_df)

summary(model3W)
## 
## Call:
## lm(formula = Q14 ~ AgeGroup + education_recode + workexperience + 
##     Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10, data = women_df)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.99635 -0.66900  0.04172  0.67642  2.98392 
## 
## Coefficients:
##                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          2.1721191  0.4208567   5.161 3.92e-07 ***
## AgeGroup30-39        0.0279361  0.1414714   0.197  0.84356    
## AgeGroup40-49        0.0963380  0.1560945   0.617  0.53748    
## AgeGroup50-59       -0.0839014  0.1471792  -0.570  0.56896    
## AgeGroup60-69       -0.0656511  0.2115321  -0.310  0.75645    
## AgeGroup70-79       -0.3754619  0.2278801  -1.648  0.10023    
## AgeGroup80+          1.1075128  0.7102084   1.559  0.11971    
## education_recode2    0.0916475  0.3275792   0.280  0.77980    
## education_recode3   -0.0773178  0.3247148  -0.238  0.81192    
## education_recode4    0.0351285  0.3297705   0.107  0.91522    
## workexperience       0.0895396  0.1211994   0.739  0.46049    
## Q4                  -0.0060302  0.0453775  -0.133  0.89435    
## Q6                   0.1831053  0.0460116   3.980 8.23e-05 ***
## Q7                   0.0008891  0.0261298   0.034  0.97287    
## Q8                   0.0555353  0.0282428   1.966  0.04997 *  
## reversed_technology -0.1891286  0.0590227  -3.204  0.00147 ** 
## Q102                -0.0256282  0.1251488  -0.205  0.83785    
## Q103                -0.0583819  0.1740794  -0.335  0.73752    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.9751 on 390 degrees of freedom
##   (97 observations deleted due to missingness)
## Multiple R-squared:  0.08131,    Adjusted R-squared:  0.04126 
## F-statistic:  2.03 on 17 and 390 DF,  p-value: 0.009173

Concern about transport

# Run the linear regression model
model4 <-
  lm(Q15 ~ resp_gender + AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = data_clean)

# View the summary of the regression model
summary(model4)
## 
## Call:
## lm(formula = Q15 ~ resp_gender + AgeGroup + education_recode + 
##     workexperience + Q4 + Q6 + Q7 + Q8 + reversed_technology + 
##     Q10, data = data_clean)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2.17448 -0.77457 -0.07267  0.64156  3.03775 
## 
## Coefficients:
##                     Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          2.76565    0.31558   8.764  < 2e-16 ***
## resp_genderWomen     0.21695    0.08138   2.666 0.007815 ** 
## AgeGroup30-39       -0.37017    0.12050  -3.072 0.002191 ** 
## AgeGroup40-49       -0.39049    0.12692  -3.077 0.002158 ** 
## AgeGroup50-59       -0.59354    0.11526  -5.150 3.22e-07 ***
## AgeGroup60-69       -0.36884    0.12895  -2.860 0.004331 ** 
## AgeGroup70-79       -0.29736    0.13937  -2.134 0.033144 *  
## AgeGroup80+          0.14615    0.28158   0.519 0.603869    
## education_recode2   -0.09696    0.19725  -0.492 0.623152    
## education_recode3   -0.13656    0.19618  -0.696 0.486565    
## education_recode4   -0.07907    0.20168  -0.392 0.695132    
## workexperience      -0.01820    0.08063  -0.226 0.821514    
## Q4                   0.01873    0.03174   0.590 0.555287    
## Q6                   0.12239    0.03239   3.778 0.000168 ***
## Q7                   0.01630    0.01842   0.885 0.376459    
## Q8                   0.01426    0.01971   0.723 0.469568    
## reversed_technology -0.14629    0.04163  -3.514 0.000464 ***
## Q102                -0.03550    0.11227  -0.316 0.751952    
## Q103                -0.04563    0.13069  -0.349 0.727073    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.068 on 888 degrees of freedom
##   (125 observations deleted due to missingness)
## Multiple R-squared:  0.07668,    Adjusted R-squared:  0.05797 
## F-statistic: 4.097 on 18 and 888 DF,  p-value: 2.534e-08
# Plot coefficients
plot_summs(
  model4,
  coefs = c(
    "Women" = "resp_genderWomen",
    "Age 30-39" = "AgeGroup30-39",
    "Age 40-49" = "AgeGroup40-49",
    "Age 50-59" = "AgeGroup50-59",
    "Age 60-69" = "AgeGroup60-69",
    "Age 70-79" = "AgeGroup70-79",
    "Age 80+" = "AgeGroup80+",
    "Upper secondary schoool" = "education_recode2",
    "Undergraduate degree" = "education_recode3",
    "Higher degree" = "education_recode4",
    "Work experience" = "workexperience",
    "Industrial area" = "Q4",
    "Concerned about climate change" = "Q6",
    "Left - right" = "Q7",
    "Liberal - conservative" = "Q8",
    "Climate solved by technology" = "reversed_technology",
    "CCS Knowledge medium" = "Q102",
    "CCS knowledge high" = "Q103"
  )
)

# Women only
model4W <-
  lm(Q15 ~ AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = women_df)

summary(model4W)
## 
## Call:
## lm(formula = Q15 ~ AgeGroup + education_recode + workexperience + 
##     Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10, data = women_df)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2.18132 -0.69758  0.06998  0.62470  2.73031 
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          2.103989   0.432191   4.868 1.61e-06 ***
## AgeGroup30-39       -0.060875   0.141164  -0.431 0.666528    
## AgeGroup40-49       -0.047000   0.159085  -0.295 0.767812    
## AgeGroup50-59       -0.162090   0.147440  -1.099 0.272259    
## AgeGroup60-69       -0.152980   0.204714  -0.747 0.455322    
## AgeGroup70-79       -0.186716   0.227862  -0.819 0.413024    
## AgeGroup80+          0.977974   0.593756   1.647 0.100310    
## education_recode2    0.203425   0.331258   0.614 0.539493    
## education_recode3    0.200422   0.329421   0.608 0.543258    
## education_recode4    0.273028   0.334027   0.817 0.414187    
## workexperience       0.065929   0.120032   0.549 0.583125    
## Q4                   0.027402   0.044888   0.610 0.541896    
## Q6                   0.256817   0.046285   5.549 5.20e-08 ***
## Q7                  -0.008159   0.025835  -0.316 0.752309    
## Q8                   0.059432   0.027980   2.124 0.034266 *  
## reversed_technology -0.219318   0.059309  -3.698 0.000247 ***
## Q102                -0.066705   0.123891  -0.538 0.590583    
## Q103                -0.172845   0.175507  -0.985 0.325293    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.9901 on 407 degrees of freedom
##   (80 observations deleted due to missingness)
## Multiple R-squared:  0.1092, Adjusted R-squared:  0.07201 
## F-statistic: 2.935 on 17 and 407 DF,  p-value: 8.805e-05

Concern about onshore storage

# Run the linear regression model
model5 <-
  lm(Q17 ~ resp_gender + AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = data_clean)

# View the summary of the regression model
summary(model5)
## 
## Call:
## lm(formula = Q17 ~ resp_gender + AgeGroup + education_recode + 
##     workexperience + Q4 + Q6 + Q7 + Q8 + reversed_technology + 
##     Q10, data = data_clean)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2.39431 -0.86117 -0.04978  0.76084  3.02488 
## 
## Coefficients:
##                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          2.8064443  0.3392512   8.272 4.79e-16 ***
## resp_genderWomen     0.3046092  0.0869467   3.503 0.000482 ***
## AgeGroup30-39       -0.2201017  0.1271055  -1.732 0.083685 .  
## AgeGroup40-49       -0.2042773  0.1339494  -1.525 0.127608    
## AgeGroup50-59       -0.2626896  0.1221602  -2.150 0.031796 *  
## AgeGroup60-69       -0.1989100  0.1388211  -1.433 0.152253    
## AgeGroup70-79       -0.3181053  0.1489057  -2.136 0.032929 *  
## AgeGroup80+          0.3789062  0.3084154   1.229 0.219564    
## education_recode2   -0.1088798  0.2126255  -0.512 0.608728    
## education_recode3   -0.2089833  0.2118221  -0.987 0.324109    
## education_recode4   -0.0246768  0.2174519  -0.113 0.909675    
## workexperience      -0.0380480  0.0865410  -0.440 0.660296    
## Q4                   0.0118907  0.0339112   0.351 0.725940    
## Q6                   0.1439775  0.0346809   4.151 3.62e-05 ***
## Q7                  -0.0004981  0.0195692  -0.025 0.979699    
## Q8                   0.0127916  0.0207611   0.616 0.537964    
## reversed_technology -0.1795075  0.0446239  -4.023 6.24e-05 ***
## Q102                 0.0609793  0.1193119   0.511 0.609415    
## Q103                 0.1559851  0.1403152   1.112 0.266579    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.136 on 886 degrees of freedom
##   (127 observations deleted due to missingness)
## Multiple R-squared:  0.07493,    Adjusted R-squared:  0.05614 
## F-statistic: 3.987 on 18 and 886 DF,  p-value: 5.227e-08
# Plot coefficients
plot_summs(
  model5,
  coefs = c(
    "Women" = "resp_genderWomen",
    "Age 30-39" = "AgeGroup30-39",
    "Age 40-49" = "AgeGroup40-49",
    "Age 50-59" = "AgeGroup50-59",
    "Age 60-69" = "AgeGroup60-69",
    "Age 70-79" = "AgeGroup70-79",
    "Age 80+" = "AgeGroup80+",
    "Upper secondary schoool" = "education_recode2",
    "Undergraduate degree" = "education_recode3",
    "Higher degree" = "education_recode4",
    "Work experience" = "workexperience",
    "Industrial area" = "Q4",
    "Concerned about climate change" = "Q6",
    "Left - right" = "Q7",
    "Liberal - conservative" = "Q8",
    "Climate solved by technology" = "reversed_technology",
    "CCS Knowledge medium" = "Q102",
    "CCS knowledge high" = "Q103"
  )
)

# Women only
model5W <-
  lm(Q17 ~ AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = women_df)

summary(model5W)
## 
## Call:
## lm(formula = Q17 ~ AgeGroup + education_recode + workexperience + 
##     Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10, data = women_df)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2.37257 -0.72332  0.05684  0.69933  2.81468 
## 
## Coefficients:
##                     Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          2.20407    0.44981   4.900 1.38e-06 ***
## AgeGroup30-39        0.04379    0.14553   0.301   0.7637    
## AgeGroup40-49        0.22383    0.16323   1.371   0.1711    
## AgeGroup50-59        0.11447    0.15399   0.743   0.4577    
## AgeGroup60-69        0.19597    0.22105   0.887   0.3758    
## AgeGroup70-79       -0.29567    0.23781  -1.243   0.2145    
## AgeGroup80+          1.32028    0.62071   2.127   0.0340 *  
## education_recode2    0.14375    0.34585   0.416   0.6779    
## education_recode3   -0.01123    0.34373  -0.033   0.9740    
## education_recode4    0.19420    0.34888   0.557   0.5781    
## workexperience      -0.01041    0.12690  -0.082   0.9347    
## Q4                   0.05593    0.04701   1.190   0.2349    
## Q6                   0.24441    0.04811   5.081 5.73e-07 ***
## Q7                  -0.03407    0.02728  -1.249   0.2124    
## Q8                   0.01337    0.02920   0.458   0.6473    
## reversed_technology -0.14433    0.06263  -2.305   0.0217 *  
## Q102                 0.10185    0.12580   0.810   0.4186    
## Q103                 0.07619    0.18176   0.419   0.6753    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.035 on 409 degrees of freedom
##   (78 observations deleted due to missingness)
## Multiple R-squared:  0.1166, Adjusted R-squared:  0.0799 
## F-statistic: 3.176 on 17 and 409 DF,  p-value: 2.347e-05

Concern about offshore storage

# Run the linear regression model
model6 <-
  lm(Q18 ~ resp_gender + AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = data_clean)

# View the summary of the regression model
summary(model6)
## 
## Call:
## lm(formula = Q18 ~ resp_gender + AgeGroup + education_recode + 
##     workexperience + Q4 + Q6 + Q7 + Q8 + reversed_technology + 
##     Q10, data = data_clean)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2.34290 -0.90453 -0.07957  0.83512  3.14479 
## 
## Coefficients:
##                     Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          2.86698    0.35167   8.153 1.19e-15 ***
## resp_genderWomen     0.33620    0.09035   3.721 0.000211 ***
## AgeGroup30-39       -0.15449    0.13162  -1.174 0.240794    
## AgeGroup40-49       -0.12583    0.14023  -0.897 0.369801    
## AgeGroup50-59       -0.30146    0.12753  -2.364 0.018299 *  
## AgeGroup60-69       -0.23373    0.14336  -1.630 0.103359    
## AgeGroup70-79       -0.40150    0.15473  -2.595 0.009618 ** 
## AgeGroup80+          0.08642    0.32267   0.268 0.788886    
## education_recode2    0.01768    0.22258   0.079 0.936715    
## education_recode3   -0.09522    0.22135  -0.430 0.667185    
## education_recode4    0.14726    0.22771   0.647 0.517981    
## workexperience      -0.04665    0.08981  -0.519 0.603597    
## Q4                  -0.03342    0.03515  -0.951 0.342006    
## Q6                   0.14366    0.03602   3.988 7.19e-05 ***
## Q7                  -0.01749    0.02032  -0.861 0.389643    
## Q8                   0.04212    0.02166   1.945 0.052127 .  
## reversed_technology -0.21194    0.04632  -4.575 5.43e-06 ***
## Q102                 0.13935    0.12387   1.125 0.260908    
## Q103                 0.16902    0.14543   1.162 0.245466    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.189 on 897 degrees of freedom
##   (116 observations deleted due to missingness)
## Multiple R-squared:  0.08823,    Adjusted R-squared:  0.06994 
## F-statistic: 4.823 on 18 and 897 DF,  p-value: 2.003e-10
# Plot coefficients
plot_summs(
  model6,
  coefs = c(
    "Women" = "resp_genderWomen",
    "Age 30-39" = "AgeGroup30-39",
    "Age 40-49" = "AgeGroup40-49",
    "Age 50-59" = "AgeGroup50-59",
    "Age 60-69" = "AgeGroup60-69",
    "Age 70-79" = "AgeGroup70-79",
    "Age 80+" = "AgeGroup80+",
    "Upper secondary schoool" = "education_recode2",
    "Undergraduate degree" = "education_recode3",
    "Higher degree" = "education_recode4",
    "Work experience" = "workexperience",
    "Industrial area" = "Q4",
    "Concerned about climate change" = "Q6",
    "Left - right" = "Q7",
    "Liberal - conservative" = "Q8",
    "Climate solved by technology" = "reversed_technology",
    "CCS Knowledge medium" = "Q102",
    "CCS knowledge high" = "Q103"
  )
)

# Women only
model6W <-
  lm(Q18 ~ AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = women_df)

summary(model6W)
## 
## Call:
## lm(formula = Q18 ~ AgeGroup + education_recode + workexperience + 
##     Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10, data = women_df)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2.5695 -0.7872  0.0028  0.8089  3.3639 
## 
## Coefficients:
##                     Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          2.25373    0.48810   4.617 5.20e-06 ***
## AgeGroup30-39        0.13710    0.15365   0.892   0.3727    
## AgeGroup40-49        0.23374    0.17361   1.346   0.1789    
## AgeGroup50-59        0.00397    0.16257   0.024   0.9805    
## AgeGroup60-69        0.21759    0.23382   0.931   0.3526    
## AgeGroup70-79       -0.61174    0.25183  -2.429   0.0156 *  
## AgeGroup80+          1.30202    0.65797   1.979   0.0485 *  
## education_recode2    0.24519    0.38473   0.637   0.5243    
## education_recode3    0.05878    0.38241   0.154   0.8779    
## education_recode4    0.32062    0.38773   0.827   0.4088    
## workexperience       0.01781    0.13439   0.133   0.8946    
## Q4                  -0.00161    0.04962  -0.032   0.9741    
## Q6                   0.27241    0.05098   5.343 1.52e-07 ***
## Q7                  -0.06564    0.02870  -2.287   0.0227 *  
## Q8                   0.06345    0.03097   2.049   0.0411 *  
## reversed_technology -0.15772    0.06597  -2.391   0.0173 *  
## Q102                 0.15199    0.13331   1.140   0.2549    
## Q103                -0.03159    0.19150  -0.165   0.8691    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.098 on 411 degrees of freedom
##   (76 observations deleted due to missingness)
## Multiple R-squared:  0.1389, Adjusted R-squared:  0.1033 
## F-statistic: 3.901 on 17 and 411 DF,  p-value: 3.916e-07

Concern about monitoring onshore

# Run the linear regression model
model7 <-
  lm(Q19 ~ resp_gender + AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = data_clean)

# View the summary of the regression model
summary(model7)
## 
## Call:
## lm(formula = Q19 ~ resp_gender + AgeGroup + education_recode + 
##     workexperience + Q4 + Q6 + Q7 + Q8 + reversed_technology + 
##     Q10, data = data_clean)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2.3532 -0.9242 -0.1800  0.7152  3.2536 
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          2.816107   0.344514   8.174 1.06e-15 ***
## resp_genderWomen     0.236981   0.089255   2.655  0.00807 ** 
## AgeGroup30-39       -0.372318   0.132098  -2.818  0.00494 ** 
## AgeGroup40-49       -0.212656   0.136406  -1.559  0.11937    
## AgeGroup50-59       -0.330771   0.126964  -2.605  0.00934 ** 
## AgeGroup60-69       -0.241912   0.140878  -1.717  0.08631 .  
## AgeGroup70-79       -0.374299   0.153468  -2.439  0.01493 *  
## AgeGroup80+          0.024926   0.313083   0.080  0.93656    
## education_recode2   -0.105710   0.215833  -0.490  0.62442    
## education_recode3   -0.038447   0.214675  -0.179  0.85790    
## education_recode4    0.096158   0.220934   0.435  0.66350    
## workexperience       0.129159   0.088508   1.459  0.14485    
## Q4                   0.018705   0.034505   0.542  0.58789    
## Q6                   0.096541   0.035396   2.727  0.00651 ** 
## Q7                  -0.005571   0.020214  -0.276  0.78294    
## Q8                   0.028886   0.021803   1.325  0.18556    
## reversed_technology -0.212220   0.045527  -4.661 3.64e-06 ***
## Q102                -0.074683   0.122464  -0.610  0.54213    
## Q103                -0.018388   0.143491  -0.128  0.89806    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.151 on 861 degrees of freedom
##   (152 observations deleted due to missingness)
## Multiple R-squared:  0.06461,    Adjusted R-squared:  0.04505 
## F-statistic: 3.304 on 18 and 861 DF,  p-value: 4.23e-06
# Plot coefficients
plot_summs(
  model7,
  coefs = c(
    "Women" = "resp_genderWomen",
    "Age 30-39" = "AgeGroup30-39",
    "Age 40-49" = "AgeGroup40-49",
    "Age 50-59" = "AgeGroup50-59",
    "Age 60-69" = "AgeGroup60-69",
    "Age 70-79" = "AgeGroup70-79",
    "Age 80+" = "AgeGroup80+",
    "Upper secondary schoool" = "education_recode2",
    "Undergraduate degree" = "education_recode3",
    "Higher degree" = "education_recode4",
    "Work experience" = "workexperience",
    "Industrial area" = "Q4",
    "Concerned about climate change" = "Q6",
    "Left - right" = "Q7",
    "Liberal - conservative" = "Q8",
    "Climate solved by technology" = "reversed_technology",
    "CCS Knowledge medium" = "Q102",
    "CCS knowledge high" = "Q103"
  )
)

# Women only
model7W <-
  lm(Q19 ~ AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = women_df)

summary(model7W)
## 
## Call:
## lm(formula = Q19 ~ AgeGroup + education_recode + workexperience + 
##     Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10, data = women_df)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2.03829 -0.80993  0.01264  0.67655  2.65063 
## 
## Coefficients:
##                     Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          1.97961    0.47972   4.127 4.49e-05 ***
## AgeGroup30-39       -0.03530    0.15923  -0.222  0.82468    
## AgeGroup40-49        0.19727    0.17379   1.135  0.25701    
## AgeGroup50-59        0.07835    0.16683   0.470  0.63889    
## AgeGroup60-69        0.04921    0.23576   0.209  0.83477    
## AgeGroup70-79       -0.27944    0.25807  -1.083  0.27956    
## AgeGroup80+          1.40985    0.65895   2.140  0.03300 *  
## education_recode2    0.30514    0.36815   0.829  0.40769    
## education_recode3    0.31591    0.36488   0.866  0.38712    
## education_recode4    0.28511    0.37065   0.769  0.44222    
## workexperience       0.14528    0.13632   1.066  0.28720    
## Q4                   0.02499    0.05026   0.497  0.61931    
## Q6                   0.21663    0.05215   4.154 4.01e-05 ***
## Q7                  -0.03113    0.02978  -1.045  0.29646    
## Q8                   0.04926    0.03247   1.517  0.12999    
## reversed_technology -0.18725    0.06795  -2.756  0.00612 ** 
## Q102                -0.03372    0.13653  -0.247  0.80506    
## Q103                -0.05816    0.19535  -0.298  0.76608    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.098 on 395 degrees of freedom
##   (92 observations deleted due to missingness)
## Multiple R-squared:  0.08399,    Adjusted R-squared:  0.04457 
## F-statistic:  2.13 on 17 and 395 DF,  p-value: 0.005676

Concern about monitoring offshore

# Run the linear regression model
model8 <-
  lm(Q20 ~ resp_gender + AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = data_clean)

# View the summary of the regression model
summary(model8)
## 
## Call:
## lm(formula = Q20 ~ resp_gender + AgeGroup + education_recode + 
##     workexperience + Q4 + Q6 + Q7 + Q8 + reversed_technology + 
##     Q10, data = data_clean)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2.3065 -0.9767 -0.1389  0.7992  3.4138 
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          2.490449   0.349548   7.125 2.19e-12 ***
## resp_genderWomen     0.303794   0.090392   3.361 0.000811 ***
## AgeGroup30-39       -0.435212   0.132578  -3.283 0.001069 ** 
## AgeGroup40-49       -0.172028   0.138792  -1.239 0.215506    
## AgeGroup50-59       -0.343384   0.127595  -2.691 0.007256 ** 
## AgeGroup60-69       -0.347586   0.142345  -2.442 0.014810 *  
## AgeGroup70-79       -0.320407   0.154493  -2.074 0.038381 *  
## AgeGroup80+         -0.083376   0.317794  -0.262 0.793106    
## education_recode2    0.146836   0.219194   0.670 0.503107    
## education_recode3    0.126741   0.218137   0.581 0.561380    
## education_recode4    0.307878   0.224428   1.372 0.170469    
## workexperience      -0.010958   0.089441  -0.123 0.902522    
## Q4                   0.008670   0.035012   0.248 0.804484    
## Q6                   0.100643   0.035763   2.814 0.005001 ** 
## Q7                  -0.006168   0.020423  -0.302 0.762704    
## Q8                   0.031954   0.021893   1.460 0.144782    
## reversed_technology -0.193678   0.046063  -4.205 2.89e-05 ***
## Q102                 0.098446   0.124156   0.793 0.428041    
## Q103                 0.143606   0.145011   0.990 0.322296    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.169 on 869 degrees of freedom
##   (144 observations deleted due to missingness)
## Multiple R-squared:  0.06882,    Adjusted R-squared:  0.04953 
## F-statistic: 3.568 on 18 and 869 DF,  p-value: 7.947e-07
# Plot coefficients
plot_summs(
  model8,
  coefs = c(
    "Women" = "resp_genderWomen",
    "Age 30-39" = "AgeGroup30-39",
    "Age 40-49" = "AgeGroup40-49",
    "Age 50-59" = "AgeGroup50-59",
    "Age 60-69" = "AgeGroup60-69",
    "Age 70-79" = "AgeGroup70-79",
    "Age 80+" = "AgeGroup80+",
    "Upper secondary schoool" = "education_recode2",
    "Undergraduate degree" = "education_recode3",
    "Higher degree" = "education_recode4",
    "Work experience" = "workexperience",
    "Industrial area" = "Q4",
    "Concerned about climate change" = "Q6",
    "Left - right" = "Q7",
    "Liberal - conservative" = "Q8",
    "Climate solved by technology" = "reversed_technology",
    "CCS Knowledge medium" = "Q102",
    "CCS knowledge high" = "Q103"
  )
)

# Women only
model8W <-
  lm(Q20 ~ AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = women_df)

summary(model8W)
## 
## Call:
## lm(formula = Q20 ~ AgeGroup + education_recode + workexperience + 
##     Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10, data = women_df)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2.13094 -0.85974  0.01441  0.82752  2.70281 
## 
## Coefficients:
##                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          1.7715758  0.4932808   3.591  0.00037 ***
## AgeGroup30-39       -0.1155017  0.1575138  -0.733  0.46382    
## AgeGroup40-49        0.2366054  0.1750091   1.352  0.17715    
## AgeGroup50-59        0.0302986  0.1662163   0.182  0.85545    
## AgeGroup60-69        0.0008664  0.2356986   0.004  0.99707    
## AgeGroup70-79       -0.2608936  0.2542105  -1.026  0.30538    
## AgeGroup80+          1.3602999  0.6615909   2.056  0.04042 *  
## education_recode2    0.4512070  0.3875834   1.164  0.24506    
## education_recode3    0.3216572  0.3849040   0.836  0.40383    
## education_recode4    0.3798613  0.3902608   0.973  0.33097    
## workexperience       0.1000767  0.1363757   0.734  0.46348    
## Q4                   0.0346652  0.0504943   0.687  0.49279    
## Q6                   0.2442078  0.0520167   4.695 3.68e-06 ***
## Q7                  -0.0139406  0.0297195  -0.469  0.63927    
## Q8                   0.0466329  0.0321880   1.449  0.14819    
## reversed_technology -0.2186696  0.0672677  -3.251  0.00125 ** 
## Q102                 0.1781157  0.1359530   1.310  0.19091    
## Q103                 0.0737587  0.1929845   0.382  0.70252    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.104 on 399 degrees of freedom
##   (88 observations deleted due to missingness)
## Multiple R-squared:  0.1093, Adjusted R-squared:  0.0714 
## F-statistic: 2.881 on 17 and 399 DF,  p-value: 0.0001194

To what extent do you support the implementation of CCS in Norway?

# Run the linear regression model
model9 <-
  lm(Q27 ~ resp_gender + AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = data_clean)

# View the summary of the regression model
summary(model9)
## 
## Call:
## lm(formula = Q27 ~ resp_gender + AgeGroup + education_recode + 
##     workexperience + Q4 + Q6 + Q7 + Q8 + reversed_technology + 
##     Q10, data = data_clean)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -2.43634 -0.68665  0.05835  0.60144  2.82897 
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          0.988307   0.257820   3.833 0.000134 ***
## resp_genderWomen    -0.195061   0.068118  -2.864 0.004276 ** 
## AgeGroup30-39        0.061955   0.099980   0.620 0.535614    
## AgeGroup40-49       -0.081592   0.105955  -0.770 0.441444    
## AgeGroup50-59        0.110187   0.096347   1.144 0.253043    
## AgeGroup60-69        0.047093   0.110054   0.428 0.668811    
## AgeGroup70-79       -0.047950   0.120812  -0.397 0.691529    
## AgeGroup80+         -0.337058   0.243686  -1.383 0.166920    
## education_recode2    0.056430   0.158403   0.356 0.721733    
## education_recode3    0.130646   0.158396   0.825 0.409675    
## education_recode4    0.212177   0.163295   1.299 0.194122    
## workexperience       0.227939   0.069122   3.298 0.001009 ** 
## Q4                   0.016518   0.026754   0.617 0.537110    
## Q6                   0.235017   0.027098   8.673  < 2e-16 ***
## Q7                  -0.008396   0.015628  -0.537 0.591207    
## Q8                  -0.032076   0.016743  -1.916 0.055672 .  
## reversed_technology  0.271490   0.035434   7.662  4.3e-14 ***
## Q102                 0.198871   0.087688   2.268 0.023545 *  
## Q103                 0.237648   0.106064   2.241 0.025269 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.9527 on 1006 degrees of freedom
##   (7 observations deleted due to missingness)
## Multiple R-squared:  0.1852, Adjusted R-squared:  0.1706 
## F-statistic:  12.7 on 18 and 1006 DF,  p-value: < 2.2e-16
# Plot coefficients
plot_summs(
  model9,
  coefs = c(
    "Women" = "resp_genderWomen",
    "Age 30-39" = "AgeGroup30-39",
    "Age 40-49" = "AgeGroup40-49",
    "Age 50-59" = "AgeGroup50-59",
    "Age 60-69" = "AgeGroup60-69",
    "Age 70-79" = "AgeGroup70-79",
    "Age 80+" = "AgeGroup80+",
    "Upper secondary schoool" = "education_recode2",
    "Undergraduate degree" = "education_recode3",
    "Higher degree" = "education_recode4",
    "Work experience" = "workexperience",
    "Industrial area" = "Q4",
    "Concerned about climate change" = "Q6",
    "Left - right" = "Q7",
    "Liberal - conservative" = "Q8",
    "Climate solved by technology" = "reversed_technology",
    "CCS Knowledge medium" = "Q102",
    "CCS knowledge high" = "Q103"
  )
)

# Women only
model9W <-
  lm(Q27 ~ AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = women_df)

summary(model9W)
## 
## Call:
## lm(formula = Q27 ~ AgeGroup + education_recode + workexperience + 
##     Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10, data = women_df)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2.0042 -0.5922  0.1255  0.4825  2.8667 
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          1.407026   0.326836   4.305 2.02e-05 ***
## AgeGroup30-39        0.008026   0.112763   0.071 0.943288    
## AgeGroup40-49       -0.168561   0.125712  -1.341 0.180601    
## AgeGroup50-59       -0.064425   0.117057  -0.550 0.582321    
## AgeGroup60-69       -0.272079   0.164815  -1.651 0.099427 .  
## AgeGroup70-79       -0.090708   0.194121  -0.467 0.640515    
## AgeGroup80+         -0.592118   0.510717  -1.159 0.246873    
## education_recode2   -0.051809   0.234542  -0.221 0.825269    
## education_recode3    0.041901   0.234513   0.179 0.858270    
## education_recode4    0.122608   0.239257   0.512 0.608567    
## workexperience       0.299854   0.098512   3.044 0.002464 ** 
## Q4                   0.068063   0.035818   1.900 0.057999 .  
## Q6                   0.131755   0.036284   3.631 0.000312 ***
## Q7                  -0.008184   0.021102  -0.388 0.698327    
## Q8                  -0.023460   0.023161  -1.013 0.311602    
## reversed_technology  0.170453   0.048257   3.532 0.000452 ***
## Q102                 0.195742   0.092058   2.126 0.033987 *  
## Q103                 0.229688   0.139299   1.649 0.099822 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.8556 on 482 degrees of freedom
##   (5 observations deleted due to missingness)
## Multiple R-squared:  0.1343, Adjusted R-squared:  0.1037 
## F-statistic: 4.397 on 17 and 482 DF,  p-value: 1.73e-08

Export regression tables to Excel

# code for html table that can be imported to excel
reg_results <- capture.output(
  stargazer(
    model1,
    model2,
    model3,
    model4,
    model5,
    model6,
    model7,
    model8,
    model9,
    type = "html",
    out ="output.html",
    star.cutoffs = c(0.1, 0.05, 0.01)
  )
)

Regressions: Concern for modes of transport

# Run the linear regression model
model_truck <-
  lm(Q16_5 ~ resp_gender + AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = data_clean)

# View the summary of the regression model
summary(model_truck)
## 
## Call:
## lm(formula = Q16_5 ~ resp_gender + AgeGroup + education_recode + 
##     workexperience + Q4 + Q6 + Q7 + Q8 + reversed_technology + 
##     Q10, data = data_clean)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2.6307 -0.8823 -0.0820  0.7510  3.3100 
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          3.996294   0.351153  11.381  < 2e-16 ***
## resp_genderWomen     0.202022   0.092395   2.186 0.029108 *  
## AgeGroup30-39       -0.506864   0.134394  -3.771 0.000176 ***
## AgeGroup40-49       -0.137665   0.145351  -0.947 0.343903    
## AgeGroup50-59       -0.296218   0.130893  -2.263 0.023936 *  
## AgeGroup60-69       -0.234152   0.147169  -1.591 0.112048    
## AgeGroup70-79       -0.049218   0.157511  -0.312 0.754773    
## AgeGroup80+          0.319880   0.307791   1.039 0.299033    
## education_recode2   -0.114627   0.220120  -0.521 0.602706    
## education_recode3   -0.243506   0.218404  -1.115 0.265259    
## education_recode4   -0.138576   0.224894  -0.616 0.537973    
## workexperience       0.058558   0.093645   0.625 0.531964    
## Q4                   0.048135   0.036927   1.304 0.192824    
## Q6                   0.023301   0.038135   0.611 0.541393    
## Q7                   0.006556   0.021496   0.305 0.760460    
## Q8                  -0.045565   0.023520  -1.937 0.053103 .  
## reversed_technology -0.135434   0.048531  -2.791 0.005402 ** 
## Q102                -0.115763   0.125488  -0.923 0.356583    
## Q103                -0.008841   0.147545  -0.060 0.952236    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.09 on 704 degrees of freedom
##   (309 observations deleted due to missingness)
## Multiple R-squared:  0.05746,    Adjusted R-squared:  0.03337 
## F-statistic: 2.385 on 18 and 704 DF,  p-value: 0.001059
# Run the linear regression model
model_onshore_pipe <-
  lm(Q16_4 ~ resp_gender + AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = data_clean)

# View the summary of the regression model
summary(model_onshore_pipe)
## 
## Call:
## lm(formula = Q16_4 ~ resp_gender + AgeGroup + education_recode + 
##     workexperience + Q4 + Q6 + Q7 + Q8 + reversed_technology + 
##     Q10, data = data_clean)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2.3085 -0.8376 -0.0434  0.6699  3.4018 
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          3.046838   0.369746   8.240 8.38e-16 ***
## resp_genderWomen     0.261721   0.097288   2.690 0.007311 ** 
## AgeGroup30-39       -0.302020   0.141511  -2.134 0.033166 *  
## AgeGroup40-49       -0.070172   0.153048  -0.459 0.646735    
## AgeGroup50-59       -0.345321   0.137823  -2.506 0.012451 *  
## AgeGroup60-69       -0.085151   0.154961  -0.549 0.582838    
## AgeGroup70-79       -0.222578   0.165851  -1.342 0.180017    
## AgeGroup80+          0.046275   0.324089   0.143 0.886500    
## education_recode2    0.153390   0.231776   0.662 0.508315    
## education_recode3   -0.038594   0.229968  -0.168 0.866770    
## education_recode4    0.064981   0.236802   0.274 0.783850    
## workexperience       0.108048   0.098604   1.096 0.273549    
## Q4                   0.066824   0.038882   1.719 0.086119 .  
## Q6                   0.021073   0.040154   0.525 0.599891    
## Q7                   0.012696   0.022634   0.561 0.575022    
## Q8                   0.007405   0.024765   0.299 0.765020    
## reversed_technology -0.177748   0.051101  -3.478 0.000535 ***
## Q102                -0.043017   0.132133  -0.326 0.744853    
## Q103                 0.015171   0.155357   0.098 0.922234    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.148 on 704 degrees of freedom
##   (309 observations deleted due to missingness)
## Multiple R-squared:  0.04944,    Adjusted R-squared:  0.02513 
## F-statistic: 2.034 on 18 and 704 DF,  p-value: 0.006859
# Run the linear regression model
model_offshore_pipe <-
  lm(Q16_3 ~ resp_gender + AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = data_clean)

# View the summary of the regression model
summary(model_offshore_pipe)
## 
## Call:
## lm(formula = Q16_3 ~ resp_gender + AgeGroup + education_recode + 
##     workexperience + Q4 + Q6 + Q7 + Q8 + reversed_technology + 
##     Q10, data = data_clean)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2.3221 -0.8281 -0.1148  0.6822  3.5262 
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          2.930354   0.376241   7.788 2.43e-14 ***
## resp_genderWomen     0.293525   0.098997   2.965  0.00313 ** 
## AgeGroup30-39       -0.263355   0.143997  -1.829  0.06784 .  
## AgeGroup40-49        0.030504   0.155736   0.196  0.84477    
## AgeGroup50-59       -0.379538   0.140245  -2.706  0.00697 ** 
## AgeGroup60-69       -0.127018   0.157683  -0.806  0.42079    
## AgeGroup70-79       -0.224937   0.168765  -1.333  0.18301    
## AgeGroup80+          0.004658   0.329782   0.014  0.98873    
## education_recode2    0.497560   0.235847   2.110  0.03524 *  
## education_recode3    0.153977   0.234008   0.658  0.51075    
## education_recode4    0.421734   0.240962   1.750  0.08052 .  
## workexperience       0.113248   0.100336   1.129  0.25942    
## Q4                   0.056336   0.039565   1.424  0.15492    
## Q6                   0.034525   0.040860   0.845  0.39843    
## Q7                  -0.010138   0.023032  -0.440  0.65994    
## Q8                   0.005850   0.025200   0.232  0.81649    
## reversed_technology -0.230762   0.051998  -4.438 1.05e-05 ***
## Q102                 0.035480   0.134454   0.264  0.79195    
## Q103                -0.021420   0.158086  -0.135  0.89226    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.168 on 704 degrees of freedom
##   (309 observations deleted due to missingness)
## Multiple R-squared:  0.07905,    Adjusted R-squared:  0.0555 
## F-statistic: 3.357 on 18 and 704 DF,  p-value: 3.405e-06
# Run the linear regression model
model_ship <-
  lm(Q16_2 ~ resp_gender + AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = data_clean)

# View the summary of the regression model
summary(model_ship)
## 
## Call:
## lm(formula = Q16_2 ~ resp_gender + AgeGroup + education_recode + 
##     workexperience + Q4 + Q6 + Q7 + Q8 + reversed_technology + 
##     Q10, data = data_clean)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2.5244 -0.8120 -0.0574  0.6427  3.2090 
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          3.231614   0.352586   9.165  < 2e-16 ***
## resp_genderWomen     0.264190   0.092773   2.848 0.004532 ** 
## AgeGroup30-39       -0.434483   0.134943  -3.220 0.001342 ** 
## AgeGroup40-49       -0.309400   0.145945  -2.120 0.034357 *  
## AgeGroup50-59       -0.377348   0.131427  -2.871 0.004212 ** 
## AgeGroup60-69       -0.277459   0.147769  -1.878 0.060842 .  
## AgeGroup70-79       -0.421915   0.158154  -2.668 0.007812 ** 
## AgeGroup80+         -0.091148   0.309048  -0.295 0.768132    
## education_recode2    0.338348   0.221019   1.531 0.126255    
## education_recode3    0.156045   0.219295   0.712 0.476964    
## education_recode4    0.341999   0.225812   1.515 0.130341    
## workexperience       0.029590   0.094028   0.315 0.753083    
## Q4                   0.035092   0.037078   0.946 0.344244    
## Q6                   0.044928   0.038291   1.173 0.241059    
## Q7                   0.011821   0.021584   0.548 0.584099    
## Q8                  -0.002147   0.023616  -0.091 0.927596    
## reversed_technology -0.187681   0.048729  -3.852 0.000128 ***
## Q102                -0.112641   0.126000  -0.894 0.371643    
## Q103                 0.044941   0.148147   0.303 0.761712    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.094 on 704 degrees of freedom
##   (309 observations deleted due to missingness)
## Multiple R-squared:  0.06504,    Adjusted R-squared:  0.04113 
## F-statistic: 2.721 on 18 and 704 DF,  p-value: 0.000157
# Run the linear regression model
model_train <-
  lm(Q16_1 ~ resp_gender + AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = data_clean)

# View the summary of the regression model
summary(model_train)
## 
## Call:
## lm(formula = Q16_1 ~ resp_gender + AgeGroup + education_recode + 
##     workexperience + Q4 + Q6 + Q7 + Q8 + reversed_technology + 
##     Q10, data = data_clean)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2.4171 -0.9412 -0.0806  0.8311  3.3808 
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          3.135248   0.375261   8.355 3.48e-16 ***
## resp_genderWomen     0.245869   0.098739   2.490    0.013 *  
## AgeGroup30-39       -0.204771   0.143621  -1.426    0.154    
## AgeGroup40-49       -0.018960   0.155330  -0.122    0.903    
## AgeGroup50-59       -0.080412   0.139879  -0.575    0.566    
## AgeGroup60-69        0.065993   0.157272   0.420    0.675    
## AgeGroup70-79        0.178380   0.168325   1.060    0.290    
## AgeGroup80+         -0.117513   0.328922  -0.357    0.721    
## education_recode2    0.073799   0.235232   0.314    0.754    
## education_recode3   -0.082026   0.233398  -0.351    0.725    
## education_recode4    0.024095   0.240334   0.100    0.920    
## workexperience       0.068291   0.100074   0.682    0.495    
## Q4                   0.030145   0.039462   0.764    0.445    
## Q6                   0.027232   0.040753   0.668    0.504    
## Q7                   0.012486   0.022972   0.544    0.587    
## Q8                   0.002243   0.025134   0.089    0.929    
## reversed_technology -0.100523   0.051863  -1.938    0.053 .  
## Q102                -0.174276   0.134103  -1.300    0.194    
## Q103                -0.091508   0.157674  -0.580    0.562    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.165 on 704 degrees of freedom
##   (309 observations deleted due to missingness)
## Multiple R-squared:  0.02776,    Adjusted R-squared:  0.0029 
## F-statistic: 1.117 on 18 and 704 DF,  p-value: 0.3304
# code for html table that can be imported to excel
transport_reg_results <- capture.output(
  stargazer(
    model_train,
    model_truck,
    model_onshore_pipe,
    model_offshore_pipe,
    model_ship,
    type = "html",
    out ="output_transport.html",
    star.cutoffs = c(0.1, 0.05, 0.01)
  )
)

Regressions: Battery concerns

model_battery_expense <-
  lm(Q21_1 ~ resp_gender + AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = data_clean)

model_battery_prolonged <-
  lm(Q21_2 ~ resp_gender + AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = data_clean)

model_battery_emissionreduction <-
  lm(Q21_3 ~ resp_gender + AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = data_clean)

model_battery_econbeneficial <-
  lm(Q21_4 ~ resp_gender + AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = data_clean)

model_battery_leakagecapture <-
  lm(Q21_5 ~ resp_gender + AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = data_clean)

model_battery_leakagetransport <-
  lm(Q21_6 ~ resp_gender + AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = data_clean)

model_battery_lekageinjection <-
  lm(Q21_7 ~ resp_gender + AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = data_clean)

model_battery_leakagestorage <-
  lm(Q21_8 ~ resp_gender + AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = data_clean)

model_battery_leakagecontamination <-
  lm(Q21_9 ~ resp_gender + AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = data_clean)

model_battery_tremors <-
  lm(Q21_10 ~ resp_gender + AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = data_clean)

# code for html table that can be imported to excel
batteryconcerns_reg_results <- capture.output(
  stargazer(
    model_battery_expense,
    model_battery_prolonged,
    model_battery_emissionreduction,
    model_battery_econbeneficial,
    model_battery_leakagecapture,
    model_battery_leakagetransport,
    model_battery_lekageinjection,
    model_battery_leakagestorage,
    model_battery_leakagecontamination,
    model_battery_tremors,
    type = "html",
    out ="output_batteryconcerns.html",
    star.cutoffs = c(0.1, 0.05, 0.01)
  )
)

Regressions: Battery statements

# For the regressions, we want to reverse the scale of these statements
data_clean <- data_clean %>%
  mutate(across(c(Q22_1, Q22_2, Q22_3, Q22_4, Q22_5, Q22_6, Q22_7, Q22_8,
                  Q22_9, Q22_10, Q22_11),
                ~ 6 - .))

# Then we run the regresions
model_addition <-
  lm(Q22_1 ~ resp_gender + AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = data_clean)

model_reduceco2 <-
  lm(Q22_2 ~ resp_gender + AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = data_clean)

model_climategoals <-
  lm(Q22_3 ~ resp_gender + AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = data_clean)

model_hardtoabate <-
  lm(Q22_4 ~ resp_gender + AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = data_clean)

model_compensation <-
  lm(Q22_5 ~ resp_gender + AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = data_clean)

model_hydrogen <-
  lm(Q22_6 ~ resp_gender + AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = data_clean)

model_jobs <-
  lm(Q22_7 ~ resp_gender + AgeGroup + education_recode + workexperience + 
       Q4+ Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = data_clean)

model_industrialeurope <-
  lm(Q22_8 ~ resp_gender + AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = data_clean)

model_storeincountry <-
  lm(Q22_9 ~ resp_gender + AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = data_clean)

model_lesscapacity <-
  lm(Q22_10 ~ resp_gender + AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = data_clean)

model_importexport <-
  lm(Q22_11 ~ resp_gender + AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = data_clean)

# code for html table that can be imported to excel
batterystatements_reg_results <- capture.output(
  stargazer(
    model_addition,
    model_reduceco2,
    model_climategoals,
    model_hardtoabate,
    model_compensation,
    model_hydrogen,
    model_jobs,
    model_industrialeurope,
    model_storeincountry,
    model_lesscapacity,
    model_importexport,
    type = "html",
    out ="output_batterystatements.html",
    star.cutoffs = c(0.1, 0.05, 0.01)
  )
)

Referendum pipeline

# Subset
pipline_data_subset <- subset(data_clean, Q23_1 %in% c(1, 2))

# Recode
pipline_data_subset$Q23_1_bin <- ifelse(pipline_data_subset$Q23_1 == 2, 1, 0)

# Run logistic regression
model_vote_pipeline <- glm(
  Q23_1_bin ~ resp_gender + AgeGroup + education_recode + workexperience +
    Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
  data = pipline_data_subset,
  family = binomial(link = "logit")
)


vote_pipeline_results <- capture.output(
  stargazer(
    model_vote_pipeline,
    type = "html",
    out ="output_vote_pipeline.html",
    star.cutoffs = c(0.1, 0.05, 0.01)
  )
)

Referendum offshore storage

model_vote_offshore <-
  lm(Q24_1 ~ resp_gender + AgeGroup + education_recode + workexperience + 
       Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
     data = data_clean)

summary(model_vote_offshore)
## 
## Call:
## lm(formula = Q24_1 ~ resp_gender + AgeGroup + education_recode + 
##     workexperience + Q4 + Q6 + Q7 + Q8 + reversed_technology + 
##     Q10, data = data_clean)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.52326 -0.60835 -0.07872  0.58139  1.73859 
## 
## Coefficients:
##                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          2.7843025  0.2046293  13.607  < 2e-16 ***
## resp_genderWomen     0.2908942  0.0540643   5.381 9.24e-08 ***
## AgeGroup30-39       -0.0516736  0.0793529  -0.651  0.51507    
## AgeGroup40-49        0.0361219  0.0840954   0.430  0.66763    
## AgeGroup50-59       -0.0327387  0.0764697  -0.428  0.66865    
## AgeGroup60-69       -0.0121245  0.0873485  -0.139  0.88963    
## AgeGroup70-79        0.0218393  0.0958872   0.228  0.81988    
## AgeGroup80+          0.1472833  0.1934109   0.762  0.44653    
## education_recode2   -0.0878090  0.1257229  -0.698  0.48507    
## education_recode3   -0.2598642  0.1257171  -2.067  0.03898 *  
## education_recode4   -0.2505768  0.1296053  -1.933  0.05347 .  
## workexperience      -0.1030012  0.0548612  -1.877  0.06074 .  
## Q4                   0.0348494  0.0212341   1.641  0.10107    
## Q6                  -0.1037107  0.0215074  -4.822 1.64e-06 ***
## Q7                  -0.0005819  0.0124037  -0.047  0.96259    
## Q8                  -0.0145321  0.0132885  -1.094  0.27440    
## reversed_technology -0.0839258  0.0281236  -2.984  0.00291 ** 
## Q102                -0.3479824  0.0695974  -5.000 6.76e-07 ***
## Q103                -0.5484462  0.0841820  -6.515 1.15e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.7562 on 1006 degrees of freedom
##   (7 observations deleted due to missingness)
## Multiple R-squared:  0.1697, Adjusted R-squared:  0.1549 
## F-statistic: 11.42 on 18 and 1006 DF,  p-value: < 2.2e-16
vote_offshore_results <- capture.output(
  stargazer(
    model_vote_offshore,
    type = "html",
    out ="output_vote_offshore.html",
    star.cutoffs = c(0.1, 0.05, 0.01)
  )
)



# Subset
storage_data_subset <- subset(data_clean, Q24_1 %in% c(1, 2))

# Recode
storage_data_subset$Q24_1_bin <- ifelse(storage_data_subset$Q24_1 == 2, 1, 0)

# Run logistic regression
model_vote_storage <- glm(
  Q24_1_bin ~ resp_gender + AgeGroup + education_recode + workexperience +
    Q4 + Q6 + Q7 + Q8 + reversed_technology + Q10,
  data = storage_data_subset,
  family = binomial(link = "logit")
)


vote_storage_results <- capture.output(
  stargazer(
    model_vote_storage,
    type = "html",
    out ="output_vote_storage.html",
    star.cutoffs = c(0.1, 0.05, 0.01)
  )
)

Open ended answers

# Dataset on benefits
open_benefits <- read_excel("openquestions.xlsx", sheet = "Benefits")

# Datset on concerns
open_concerns <- read_excel("openquestions.xlsx", sheet = "Concerns")

# Figure  benefits
open_benefits <- open_benefits %>%
  mutate(Category = reorder(Category, N))

ggplot(open_benefits, aes(x = N, y = Category)) +
  geom_col(fill = "steelblue") +
  labs(x = "Number of responses", y = "Category") +
  theme_minimal()

# Figure concerns
open_concerns <- open_concerns %>%
  mutate(Category = reorder(Category, N))

ggplot(open_concerns, aes(x = N, y = Category)) +
  geom_col(fill = "steelblue") +
  labs(x = "Number of responses", y = "Category") +
  theme_minimal()