Init and read data

# select suffix with C
df <- dat |> 
  select(FZ2,rid,B18__1,H20,
         H2性别,教育程度,党员,H14家庭收入,
         C1a,C1b,C1c,C1d,C1e,C1f,
         C2a,C2b,C2c,C2d,C2e,C2f,
         C3a,C3b,C3c,C3d,C3e,C3f
  )
df <- df |> 
  mutate(
    PolicyA = rowSums(across(c(C1a, C2a, C3a)), na.rm = TRUE),
    PolicyB = rowSums(across(c(C1b, C2b, C3b)), na.rm = TRUE),
    PolicyC = rowSums(across(c(C1c, C2c, C3c)), na.rm = TRUE),
    PolicyD = rowSums(across(c(C1d, C2d, C3d)), na.rm = TRUE),
    PolicyE = rowSums(across(c(C1e, C2e, C3e)), na.rm = TRUE),
    PolicyF = rowSums(across(c(C1f, C2f, C3f)), na.rm = TRUE)
  )
df <- df |> 
  select(rid,FZ2,B18__1,H20,
         H2性别,教育程度,党员,H14家庭收入,
         PolicyA,PolicyB,PolicyC,PolicyD,PolicyE,PolicyF)
df <- df |> 
  rename(treatment = FZ2,
         trust = B18__1,
         fear = H20)
# case trust-mean trust
df <- df |> 
  mutate(trust = trust- mean(trust, na.rm = TRUE))
df_long <- df |> 
  pivot_longer(
    cols = PolicyA:PolicyF,
    names_to = "policy",
    values_to = "alttitude"
  )
df_long <- df_long |> 
  select(rid,policy,treatment,alttitude,trust,fear,
         H2性别,教育程度,党员,H14家庭收入)
df_long <- df_long |> 
  mutate(
    rid = as.factor(rid),
    treatment  = as.factor(treatment)
  )

Base Regression

library(lmtest)
library(sandwich)
library(modelsummary)
fe_model <- lm(alttitude ~ 0 + policy + treatment +  + H2性别 + 教育程度 + 党员 + H14家庭收入, data = df_long)
cluster_se <- vcovCL(fe_model, cluster = df_long$rid)
modelsummary(
  fe_model,
  coef_map = c(
    "treatment2" = "Group2",
    "treatment3" = "Group3",
    "policyPolicyA" = "政策A",
    "policyPolicyB" = "政策B",
    "policyPolicyC" = "政策C",
    "policyPolicyD" = "政策D",
    "policyPolicyE" = "政策E",
    "policyPolicyF" = "政策F",
    "H2性别" = "性别",
    "教育程度" = "教育程度",
    "党员" = "党员",
    "H14家庭收入" = "家庭收入"
  ),
  stars = TRUE,
  gof_omit = "AIC|BIC|Log.Lik.",
  vcov = cluster_se
)
(1)
+ p < 0.1, * p < 0.05, ** p < 0.01, *** p < 0.001
Group2 0.006
(0.014)
Group3 0.073***
(0.015)
政策A 1.343***
(0.050)
政策B 1.447***
(0.050)
政策C 1.276***
(0.050)
政策D 1.379***
(0.050)
政策E 1.409***
(0.050)
政策F 1.347***
(0.049)
性别 -0.014
(0.012)
教育程度 0.004
(0.007)
党员 -0.027+
(0.017)
家庭收入 0.010
(0.007)
Num.Obs. 13404
R2 0.891
R2 Adj. 0.891
RMSE 0.48
Std.Errors Custom

interaction

term: trust

m_trust <- lm(alttitude ~ 0 + policy + treatment*trust + H2性别+教育程度 + 党员+H14家庭收入, data = df_long)
cluster_se <- vcovCL(m_trust, cluster = df_long$rid)
modelsummary(
  m_trust,
  coef_map = c(
    "treatment2" = "Group2",
    "treatment3" = "Group3", 
    "trust" = "信任",
    "treatment2:trust" = "Group2:信任",
    "treatment3:trust" = "Group3:信任",
    "policyPolicyA" = "政策A",
    "policyPolicyB" = "政策B",
    "policyPolicyC" = "政策C",
    "policyPolicyD" = "政策D",
    "policyPolicyE" = "政策E",
    "policyPolicyF" = "政策F",
    "H2性别" = "性别",
    "教育程度" = "教育程度",
    "党员" = "党员",
    "H14家庭收入" = "家庭收入"
  ),
  stars = TRUE,
  gof_omit = "AIC|BIC|Log.Lik.",
  vcov = cluster_se
)
(1)
+ p < 0.1, * p < 0.05, ** p < 0.01, *** p < 0.001
Group2 0.006
(0.014)
Group3 0.073***
(0.015)
信任 -0.038**
(0.014)
Group2:信任 0.035+
(0.021)
Group3:信任 0.069**
(0.022)
政策A 1.341***
(0.050)
政策B 1.445***
(0.050)
政策C 1.274***
(0.050)
政策D 1.377***
(0.050)
政策E 1.407***
(0.050)
政策F 1.345***
(0.049)
性别 -0.013
(0.012)
教育程度 0.004
(0.007)
党员 -0.028+
(0.017)
家庭收入 0.010
(0.007)
Num.Obs. 13404
R2 0.892
R2 Adj. 0.891
RMSE 0.48
Std.Errors Custom

term: fear

# PolicyC 高 对日赔偿
# PolicyF 高 印度
# PolicyB 低 非援
# PolicyE 低 澳大利亚

# 生成sensitivity变量
df_long$sensitivity <- NA
df_long$sensitivity[df_long$policy == "PolicyC" | df_long$policy == "PolicyF"] <- 1
df_long$sensitivity[df_long$policy == "PolicyB" | df_long$policy == "PolicyE"] <- 0

m_fear_alt <- lm(alttitude ~ 0  + treatment*sensitivity + H2性别+教育程度 + 党员+H14家庭收入,
data = df_long)
cluster_se <- vcovCL(m_fear_alt, cluster = df_long$rid)
modelsummary(
  m_fear_alt,
  coef_map = c(
    "treatment2" = "Group2",
    "treatment3" = "Group3",
    "sensitivity" = "敏感性",
    "treatment2:sensitivity" = "Group2:敏感性",
    "treatment3:sensitivity" = "Group3:敏感性",
    "policyPolicyA" = "政策A",
    "policyPolicyB" = "政策B",
    "policyPolicyC" = "政策C",
    "policyPolicyD" = "政策D",
    "policyPolicyE" = "政策E",
    "policyPolicyF" = "政策F",
    "H2性别" = "性别",
    "教育程度" = "教育程度",
    "党员" = "党员",
    "H14家庭收入" = "家庭收入"
  ),
  stars = TRUE,
  gof_omit = "AIC|BIC|Log.Lik.",
  vcov = cluster_se
)
(1)
+ p < 0.1, * p < 0.05, ** p < 0.01, *** p < 0.001
Group2 1.427***
(0.055)
Group3 1.481***
(0.055)
敏感性 -0.182***
(0.015)
Group2:敏感性 0.074***
(0.021)
Group3:敏感性 0.128***
(0.022)
性别 -0.003
(0.013)
教育程度 0.006
(0.007)
党员 -0.042*
(0.019)
家庭收入 0.011
(0.008)
Num.Obs. 8936
R2 0.892
R2 Adj. 0.892
RMSE 0.48
Std.Errors Custom

term: trust and fear

# 创建交互模型,包含trust和fear的交互效应
m_trust_fear_alt <- lm(alttitude ~ 0  + treatment*sensitivity + treatment*trust + H2性别 + 教育程度 + 党员 + H14家庭收入,
                    data = df_long)
cluster_se <- vcovCL(m_trust_fear_alt, cluster = df_long$rid)
modelsummary(
  m_trust_fear_alt,
  coef_map = c(
    "treatment2" = "Group2",
    "treatment3" = "Group3",
    "sensitivity" = "敏感性",
    "trust" = "信任",
    "treatment2:sensitivity" = "Group2:敏感性",
    "treatment3:sensitivity" = "Group3:敏感性",
    "treatment2:trust" = "Group2:信任",
    "treatment3:trust" = "Group3:信任",
    "policyPolicyA" = "政策A",
    "policyPolicyB" = "政策B",
    "policyPolicyC" = "政策C",
    "policyPolicyD" = "政策D",
    "policyPolicyE" = "政策E",
    "policyPolicyF" = "政策F",
    "H2性别" = "性别",
    "教育程度" = "教育程度",
    "党员" = "党员",
    "H14家庭收入" = "家庭收入"
  ),
  stars = TRUE,
  gof_omit = "AIC|BIC|Log.Lik.",
  vcov = cluster_se
)
(1)
+ p < 0.1, * p < 0.05, ** p < 0.01, *** p < 0.001
Group2 1.425***
(0.055)
Group3 1.478***
(0.055)
敏感性 -0.182***
(0.015)
信任 -0.024
(0.016)
Group2:敏感性 0.074***
(0.021)
Group3:敏感性 0.128***
(0.022)
Group2:信任 0.015
(0.023)
Group3:信任 0.060*
(0.026)
性别 -0.002
(0.013)
教育程度 0.006
(0.007)
党员 -0.043*
(0.019)
家庭收入 0.012
(0.008)
Num.Obs. 8936
R2 0.892
R2 Adj. 0.892
RMSE 0.48
Std.Errors Custom

补充调查

# 读入补充调查数据
supp_data <- read_sav("./data/补充调查数据.sav")

# select suffix with C
supp_data <- supp_data |> 
  select(FZ2,rid,B8__1,
         F2, # 性别
         F6, # 教育程度
         F7, # 党员
         F11,
         C1a,C1b,C1c,C1d,C1e,C1f,
         C2a,C2b,C2c,C2d,C2e,C2f,
         C3a,C3b,C3c,C3d,C3e,C3f
  )
supp_data <- supp_data |> 
  mutate(
    PolicyA = rowSums(across(c(C1a, C2a, C3a)), na.rm = TRUE),
    PolicyB = rowSums(across(c(C1b, C2b, C3b)), na.rm = TRUE),
    PolicyC = rowSums(across(c(C1c, C2c, C3c)), na.rm = TRUE),
    PolicyD = rowSums(across(c(C1d, C2d, C3d)), na.rm = TRUE),
    PolicyE = rowSums(across(c(C1e, C2e, C3e)), na.rm = TRUE),
    PolicyF = rowSums(across(c(C1f, C2f, C3f)), na.rm = TRUE)
  )
supp_data <- supp_data |> 
  select(rid,FZ2,B8__1,
         F2,F6,F7,F11,
         PolicyA,PolicyB,PolicyC,PolicyD,PolicyE,PolicyF)
supp_data <- supp_data |> 
  rename(treatment = FZ2,
         trust = B8__1)
# case trust-mean trust
supp_data <- supp_data |> 
  mutate(trust = trust- mean(trust, na.rm = TRUE))
supp_data_long <- supp_data |> 
  pivot_longer(
    cols = PolicyA:PolicyF,
    names_to = "policy",
    values_to = "alttitude"
  )
supp_data_long <- supp_data_long |> 
  select(rid,policy,treatment,alttitude,trust,
         F2,F6,F7,F11)
supp_data_long <- supp_data_long |> 
  mutate(
    rid = as.factor(rid),
    treatment  = as.factor(treatment)
  )

Base Regression

fe_model <- lm(alttitude ~ 0 + policy + treatment +  + F2 + F6 + F7 + F11, data = supp_data_long)
cluster_se <- vcovCL(fe_model, cluster = supp_data_long$rid)
modelsummary(
  fe_model,
  coef_map = c(
    "treatment2" = "Group2",
    "treatment3" = "Group3",
    "policyPolicyA" = "政策A",
    "policyPolicyB" = "政策B",
    "policyPolicyC" = "政策C",
    "policyPolicyD" = "政策D",
    "policyPolicyE" = "政策E",
    "policyPolicyF" = "政策F",
    "F2" = "性别",
    "F6" = "教育程度",
    "F7" = "党员",
    "F11" = "家庭收入"
  ),
  stars = TRUE,
  gof_omit = "AIC|BIC|Log.Lik.",
  vcov = cluster_se
)
(1)
+ p < 0.1, * p < 0.05, ** p < 0.01, *** p < 0.001
Group2 -0.016
(0.017)
Group3 0.040*
(0.018)
政策A 1.096***
(0.062)
政策B 1.554***
(0.062)
政策C 1.058***
(0.061)
政策D 1.328***
(0.063)
政策E 1.182***
(0.062)
政策F 1.111***
(0.061)
性别 0.014
(0.014)
教育程度 0.022*
(0.009)
党员 0.032
(0.021)
家庭收入 -0.007
(0.010)
Num.Obs. 6426
R2 0.904
R2 Adj. 0.904
RMSE 0.45
Std.Errors Custom

interaction

term: trust

m_trust <- lm(alttitude ~ 0 + policy + treatment*trust + F2 + F6 + F7 + F11, data = supp_data_long)
cluster_se <- vcovCL(m_trust, cluster = supp_data_long$rid)
modelsummary(
  m_trust,
  coef_map = c(
    "treatment2" = "Group2",
    "treatment3" = "Group3", 
    "trust" = "信任",
    "treatment2:trust" = "Group2:信任",
    "treatment3:trust" = "Group3:信任",
    "policyPolicyA" = "政策A",
    "policyPolicyB" = "政策B",
    "policyPolicyC" = "政策C",
    "policyPolicyD" = "政策D",
    "policyPolicyE" = "政策E",
    "policyPolicyF" = "政策F",
    "F2" = "性别",
    "F6" = "教育程度",
    "F7" = "党员",
    "F11" = "家庭收入"
  ),
  stars = TRUE,
  gof_omit = "AIC|BIC|Log.Lik.",
  vcov = cluster_se
)
(1)
+ p < 0.1, * p < 0.05, ** p < 0.01, *** p < 0.001
Group2 -0.015
(0.017)
Group3 0.039*
(0.018)
信任 0.081***
(0.018)
Group2:信任 -0.042
(0.029)
Group3:信任 -0.002
(0.028)
政策A 1.119***
(0.062)
政策B 1.577***
(0.062)
政策C 1.081***
(0.061)
政策D 1.351***
(0.063)
政策E 1.206***
(0.062)
政策F 1.135***
(0.061)
性别 0.010
(0.014)
教育程度 0.021*
(0.008)
党员 0.022
(0.021)
家庭收入 -0.005
(0.010)
Num.Obs. 6426
R2 0.905
R2 Adj. 0.905
RMSE 0.44
Std.Errors Custom

term: fear

# PolicyC 高 对日赔偿
# PolicyF 高 印度
# PolicyB 低 非援
# PolicyE 低 澳大利亚

# 生成sensitivity变量
supp_data_long$sensitivity <- NA
supp_data_long$sensitivity[supp_data_long$policy == "PolicyC" | supp_data_long$policy == "PolicyF"] <- 1
supp_data_long$sensitivity[supp_data_long$policy == "PolicyB" | supp_data_long$policy == "PolicyE"] <- 0

m_fear_alt <- lm(alttitude ~ 0  + treatment*sensitivity + F2 + F6 + F7 + F11,
data = supp_data_long)
cluster_se <- vcovCL(m_fear_alt, cluster = supp_data_long$rid)
modelsummary(
  m_fear_alt,
  coef_map = c(
    "treatment2" = "Group2",
    "treatment3" = "Group3",
    "sensitivity" = "敏感性",
    "treatment2:sensitivity" = "Group2:敏感性",
    "treatment3:sensitivity" = "Group3:敏感性",
    "policyPolicyA" = "政策A",
    "policyPolicyB" = "政策B",
    "policyPolicyC" = "政策C",
    "policyPolicyD" = "政策D",
    "policyPolicyE" = "政策E",
    "policyPolicyF" = "政策F",
    "F2" = "性别",
    "F6" = "教育程度",
    "F7" = "党员",
    "F11" = "家庭收入"
  ),
  stars = TRUE,
  gof_omit = "AIC|BIC|Log.Lik.",
  vcov = cluster_se
)
(1)
+ p < 0.1, * p < 0.05, ** p < 0.01, *** p < 0.001
Group2 1.366***
(0.064)
Group3 1.359***
(0.066)
敏感性 -0.321***
(0.021)
Group2:敏感性 -0.009
(0.030)
Group3:敏感性 0.122***
(0.031)
性别 -0.004
(0.016)
教育程度 0.019*
(0.009)
党员 0.050*
(0.021)
家庭收入 -0.003
(0.010)
Num.Obs. 4284
R2 0.900
R2 Adj. 0.900
RMSE 0.46
Std.Errors Custom

term: trust and fear

# 创建交互模型,包含trust和fear的交互效应
m_trust_fear_alt <- lm(alttitude ~ 0  + treatment*sensitivity + treatment*trust + F2 + F6 + F7 + F11,
                    data = supp_data_long)
cluster_se <- vcovCL(m_trust_fear_alt, cluster = supp_data_long$rid)
modelsummary(
  m_trust_fear_alt,
  coef_map = c(
    "treatment2" = "Group2",
    "treatment3" = "Group3",
    "sensitivity" = "敏感性",
    "trust" = "信任",
    "treatment2:sensitivity" = "Group2:敏感性",
    "treatment3:sensitivity" = "Group3:敏感性",
    "treatment2:trust" = "Group2:信任",
    "treatment3:trust" = "Group3:信任",
    "policyPolicyA" = "政策A",
    "policyPolicyB" = "政策B",
    "policyPolicyC" = "政策C",
    "policyPolicyD" = "政策D",
    "policyPolicyE" = "政策E",
    "policyPolicyF" = "政策F",
    "F2" = "性别",
    "F6" = "教育程度",
    "F7" = "党员",
    "F11" = "家庭收入"
  ),
  stars = TRUE,
  gof_omit = "AIC|BIC|Log.Lik.",
  vcov = cluster_se
)
(1)
+ p < 0.1, * p < 0.05, ** p < 0.01, *** p < 0.001
Group2 1.387***
(0.064)
Group3 1.378***
(0.066)
敏感性 -0.321***
(0.021)
信任 0.072***
(0.019)
Group2:敏感性 -0.009
(0.030)
Group3:敏感性 0.122***
(0.031)
Group2:信任 -0.042
(0.029)
Group3:信任 -0.002
(0.030)
性别 -0.008
(0.015)
教育程度 0.018*
(0.009)
党员 0.041*
(0.020)
家庭收入 -0.001
(0.010)
Num.Obs. 4284
R2 0.901
R2 Adj. 0.900
RMSE 0.46
Std.Errors Custom