title: “EFT-training_2” output: html_document date: “2025-09-23”

fixed_d_from_fit <- function(fit){
  sig <- sigma(fit)
  co  <- as.data.frame(coef(summary(fit)))
  tibble::rownames_to_column(co, "term") %>%
    transmute(
      term,
      estimate  = Estimate,
      std.error = `Std. Error`,
      df,
      t         = `t value`,
      p         = `Pr(>|t|)`,
      d         = estimate / sig,
      SE_d      = std.error / sig,
      d_low     = d + qt(0.025, df) * SE_d,
      d_high    = d + qt(0.975, df) * SE_d
    )
}

# 组内简单效应 d(post−pre / fu−pre)
within_d_from_fit <- function(fit, window){
  emm <- emmeans(fit, ~ time | group)
  sig <- sigma(fit)
  if (identical(window, c("pre","post"))) {
    w <- summary(contrast(emm, list(post_minus_pre = c(-1, 1)),
                          by = "group", adjust = "none"))
  } else if (identical(window, c("pre","fu"))) {
    w <- summary(contrast(emm, list(fu_minus_pre = c(-1, 1)),
                          by = "group", adjust = "none"))
  } else {
    return(NULL)  # post–fu 不做组内
  }
  as.data.frame(w) %>%
    mutate(
      d     = estimate / sig,
      SE_d  = SE / sig,
      d_low = d + qt(0.025, df) * SE_d,
      d_high= d + qt(0.975, df) * SE_d
    )
}

# 窗口 
win_list <- list(
  pre_post = c("pre","post"),
  pre_fu   = c("pre","fu"),
  post_fu  = c("post","fu")
)

# 只取“积极条件”的 7 个指标 
metrics_posi <- dat_long %>%
  filter(cond == "posi") %>%
  distinct(metric) %>%
  pull() %>% as.character()


# 主循环:对每个指标 × 窗口建立模型并计算指标
res_fixed  <- list()
res_within <- list()

for (m in metrics_posi) {
  d_metric <- dat_long %>% filter(cond=="posi", metric==m)

  for (wname in names(win_list)) {
    win <- win_list[[wname]]

    dsub <- d_metric %>%
      filter(time %in% win) %>%
      droplevels() %>%
      mutate(
        time  = fct_relevel(time, win),
        group = fct_relevel(group, "control","training")
      )

    # 1) 建模
    fit <- lmer(score ~ group * time + (1 | ID), data = dsub, REML = TRUE)

    # 2) 固定效应 d
    fx <- fixed_d_from_fit(fit) %>%
      mutate(cond="posi", metric=m, window=wname, .before=1)
    res_fixed[[length(res_fixed)+1]] <- fx

    # 3) 组内简单效应 d(仅 pre_post / pre_fu)
    wx <- within_d_from_fit(fit, win)
    if (!is.null(wx)) {
      wx <- wx %>% mutate(cond="posi", metric=m, window=wname, .before=1)
      res_within[[length(res_within)+1]] <- wx
    }
  }
}

# 汇总结果表 
fixed_posi_tbl  <- bind_rows(res_fixed)  %>% select(cond, metric, window, everything())
within_posi_tbl <- bind_rows(res_within) %>% 
  select(cond, metric, window, group, contrast, estimate, SE, df, t.ratio, p.value,
         d, SE_d, d_low, d_high)

# 查看前几行
print(head(fixed_posi_tbl, 84),  row.names = FALSE)
##  cond     metric   window                   term     estimate std.error
##  posi 表象清晰度 pre_post            (Intercept)  6.276206897 0.1821231
##  posi 表象清晰度 pre_post          grouptraining  0.285126437 0.2554056
##  posi 表象清晰度 pre_post               timepost  0.172068966 0.1716713
##  posi 表象清晰度 pre_post grouptraining:timepost  0.135597701 0.2407482
##  posi 表象清晰度   pre_fu            (Intercept)  6.276206897 0.1933178
##  posi 表象清晰度   pre_fu          grouptraining  0.285126437 0.2711049
##  posi 表象清晰度   pre_fu                 timefu  0.023103448 0.1882192
##  posi 表象清晰度   pre_fu   grouptraining:timefu  0.165712837 0.2656560
##  posi 表象清晰度  post_fu            (Intercept)  6.448275862 0.1657034
##  posi 表象清晰度  post_fu          grouptraining  0.420724138 0.2323789
##  posi 表象清晰度  post_fu                 timefu -0.148965517 0.1498033
##  posi 表象清晰度  post_fu   grouptraining:timefu  0.025572861 0.2114928
##  posi 发生时快感 pre_post            (Intercept)  7.149655172 0.1489717
##  posi 发生时快感 pre_post          grouptraining  0.126344828 0.2089147
##  posi 发生时快感 pre_post               timepost -0.046206897 0.1662067
##  posi 发生时快感 pre_post grouptraining:timepost  0.402540230 0.2330848
##  posi 发生时快感   pre_fu            (Intercept)  7.149655172 0.1735111
##  posi 发生时快感   pre_fu          grouptraining  0.126344828 0.2433283
##  posi 发生时快感   pre_fu                 timefu  0.038965517 0.1770071
##  posi 发生时快感   pre_fu   grouptraining:timefu  0.305974677 0.2497825
##  posi 发生时快感  post_fu            (Intercept)  7.103448276 0.1588790
##  posi 发生时快感  post_fu          grouptraining  0.528885057 0.2228085
##  posi 发生时快感  post_fu                 timefu  0.085172414 0.1847312
##  posi 发生时快感  post_fu   grouptraining:timefu -0.106331505 0.2605125
##  posi     具体性 pre_post            (Intercept)  2.931034483 0.2759811
##  posi     具体性 pre_post          grouptraining  0.168965517 0.3870301
##  posi     具体性 pre_post               timepost  0.586206897 0.2969236
##  posi     具体性 pre_post grouptraining:timepost  1.313793103 0.4163994
##  posi     具体性   pre_fu            (Intercept)  2.931034483 0.2761323
##  posi     具体性   pre_fu          grouptraining  0.168965517 0.3872422
##  posi     具体性   pre_fu                 timefu  0.965517241 0.3021992
##  posi     具体性   pre_fu   grouptraining:timefu  0.555482759 0.4237978
##  posi     具体性  post_fu            (Intercept)  3.517241379 0.2476500
##  posi     具体性  post_fu          grouptraining  1.482758621 0.3472991
##  posi     具体性  post_fu                 timefu  0.379310345 0.2598981
##  posi     具体性  post_fu   grouptraining:timefu -0.758310345 0.3644757
##  posi     可能性 pre_post            (Intercept)  6.970344828 0.1562494
##  posi     可能性 pre_post          grouptraining -0.339344828 0.2191209
##  posi     可能性 pre_post               timepost -0.107931034 0.1912152
##  posi     可能性 pre_post grouptraining:timepost  0.748597701 0.2681562
##  posi     可能性   pre_fu            (Intercept)  6.970344828 0.1569712
##  posi     可能性   pre_fu          grouptraining -0.339344828 0.2201331
##  posi     可能性   pre_fu                 timefu -0.160000000 0.1851685
##  posi     可能性   pre_fu   grouptraining:timefu  0.778057181 0.2611075
##  posi     可能性  post_fu            (Intercept)  6.862413793 0.1490842
##  posi     可能性  post_fu          grouptraining  0.409252874 0.2090725
##  posi     可能性  post_fu                 timefu -0.052068966 0.1768461
##  posi     可能性  post_fu   grouptraining:timefu  0.022722736 0.2493639
##  posi     详细度 pre_post            (Intercept)  5.729655172 0.2132435
##  posi     详细度 pre_post          grouptraining  0.119011494 0.2990482
##  posi     详细度 pre_post               timepost  0.166551724 0.2107245
##  posi     详细度 pre_post grouptraining:timepost  0.322448276 0.2955155
##  posi     详细度   pre_fu            (Intercept)  5.729655172 0.2247681
##  posi     详细度   pre_fu          grouptraining  0.119011494 0.3152100
##  posi     详细度   pre_fu                 timefu  0.245172414 0.1716116
##  posi     详细度   pre_fu   grouptraining:timefu  0.190842096 0.2424005
##  posi     详细度  post_fu            (Intercept)  5.896206897 0.2026103
##  posi     详细度  post_fu          grouptraining  0.441459770 0.2841364
##  posi     详细度  post_fu                 timefu  0.078620690 0.1700191
##  posi     详细度  post_fu   grouptraining:timefu -0.148735903 0.2400904
##  posi 想象时快感 pre_post            (Intercept)  6.729655172 0.1519363
##  posi 想象时快感 pre_post          grouptraining  0.117011494 0.2130723
##  posi 想象时快感 pre_post               timepost  0.080689655 0.1876753
##  posi 想象时快感 pre_post grouptraining:timepost  0.361977011 0.2631918
##  posi 想象时快感   pre_fu            (Intercept)  6.729655172 0.1835295
##  posi 想象时快感   pre_fu          grouptraining  0.117011494 0.2573778
##  posi 想象时快感   pre_fu                 timefu  0.092758621 0.1887559
##  posi 想象时快感   pre_fu   grouptraining:timefu  0.380843553 0.2663523
##  posi 想象时快感  post_fu            (Intercept)  6.810344828 0.1668115
##  posi 想象时快感  post_fu          grouptraining  0.478988506 0.2339330
##  posi 想象时快感  post_fu                 timefu  0.012068966 0.1948217
##  posi 想象时快感  post_fu   grouptraining:timefu  0.005080311 0.2747354
##  posi   知觉控制 pre_post            (Intercept)  6.660000000 0.1759823
##  posi   知觉控制 pre_post          grouptraining -0.499333333 0.2467939
##  posi   知觉控制 pre_post               timepost  0.092758621 0.1827225
##  posi   知觉控制 pre_post grouptraining:timepost  0.782241379 0.2562461
##  posi   知觉控制   pre_fu            (Intercept)  6.660000000 0.1793498
##  posi   知觉控制   pre_fu          grouptraining -0.499333333 0.2515164
##  posi   知觉控制   pre_fu                 timefu  0.046206897 0.1997563
##  posi   知觉控制   pre_fu   grouptraining:timefu  0.982737958 0.2817671
##  posi   知觉控制  post_fu            (Intercept)  6.752758621 0.1531167
##  posi   知觉控制  post_fu          grouptraining  0.282908046 0.2147276
##  posi   知觉控制  post_fu                 timefu -0.046551724 0.1868175
##  posi   知觉控制  post_fu   grouptraining:timefu  0.190690100 0.2633792
##         df           t            p            d      SE_d        d_low
##   87.09942 34.46134714 1.561070e-52  9.600980702 0.2786014  9.047239098
##   87.09942  1.11636730 2.673353e-01  0.436170041 0.3907048 -0.340385518
##   57.00000  1.00231653 3.204269e-01  0.263221217 0.2626129 -0.262651976
##   57.00000  0.56323456 5.754842e-01  0.207429572 0.3682827 -0.530043914
##   88.83252 32.46574166 4.648583e-51  8.756877002 0.2697267  8.220921893
##   88.83252  1.05172013 2.957805e-01  0.397822630 0.3782590 -0.353789523
##   56.21384  0.12274754 9.027448e-01  0.032235084 0.2626129 -0.493797543
##   56.55519  0.62378731 5.352753e-01  0.231210819 0.3706565 -0.511142547
##   84.16124 38.91457187 1.397010e-55 11.304158350 0.2904865 10.726510228
##   84.16124  1.81050905 7.378559e-02  0.737550995 0.4073722 -0.072530562
##   56.27703 -0.99440746 3.242811e-01 -0.261144193 0.2626129 -0.787163837
##   56.58349  0.12091598 9.041860e-01  0.044830538 0.3707578 -0.697717546
##   99.77310 47.99338475 9.524995e-71 11.296724743 0.2353809 10.829722793
##   99.77310  0.60476740 5.467065e-01  0.199629591 0.3300932 -0.455284105
##   57.00000 -0.27800861 7.820117e-01 -0.073008639 0.2626129 -0.598881831
##   57.00000  1.72701203 8.958153e-02  0.636028741 0.3682827 -0.101444745
##   92.14060 41.20574595 3.733262e-61 10.607436689 0.2574262 10.096176522
##   92.14060  0.51923597 6.048412e-01  0.187448867 0.3610090 -0.529531619
##   56.21353  0.22013536 8.265632e-01  0.057810376 0.2626129 -0.468222316
##   56.57724  1.22496448 2.256642e-01  0.453952944 0.3705846 -0.288250065
##  102.50042 44.70980254 4.745642e-69 10.098226012 0.2258616  9.650256918
##  102.50042  2.37371978 1.947272e-02  0.751860313 0.3167435  0.123637894
##   56.53632  0.46106146 6.465234e-01  0.121080671 0.2626129 -0.404886009
##   56.96047 -0.40816284 6.846844e-01 -0.151160327 0.3703432 -0.892770921
##   96.82016 10.62041569 6.300729e-18  2.592341381 0.2440904  2.107878165
##   96.82016  0.43656940 6.633957e-01  0.149440856 0.3423072 -0.529960151
##   57.00000  1.97426838 5.320382e-02  0.518468276 0.2626129 -0.007404917
##   57.00000  3.15512714 2.561600e-03  1.161978901 0.3682827  0.424505415
##   98.19826 10.61460113 5.506083e-18  2.547085829 0.2399606  2.070903886
##   98.19826  0.43633038 6.635549e-01  0.146832007 0.3365157 -0.520955518
##   57.00000  3.19496928 2.280038e-03  0.839040038 0.2626129  0.313166845
##   57.00000  1.31072583 1.952070e-01  0.482717713 0.3682827 -0.254755773
##   94.85076 14.20246882 3.272323e-25  3.553980280 0.2502368  3.057187349
##   94.85076  4.26939906 4.648586e-05  1.498246588 0.3509268  0.801554650
##   57.00000  1.45945775 1.499286e-01  0.383272383 0.2626129 -0.142600810
##   57.00000 -2.08055137 4.198049e-02 -0.766231180 0.3682827 -1.503704666
##  107.23447 44.61036618 4.564472e-71  9.572994938 0.2145913  9.147603418
##  107.23447 -1.54866463 1.244087e-01 -0.466052455 0.3009383 -1.062612559
##   57.00000 -0.56444796 5.746639e-01 -0.148231296 0.2626129 -0.674104489
##   57.00000  2.79164813 7.123765e-03  1.028115851 0.3682827  0.290642365
##  103.55280 44.40525167 3.123705e-69  9.885602609 0.2226224  9.444111645
##  103.55280 -1.54154401 1.262349e-01 -0.481271472 0.3122009 -1.100409098
##   56.25364 -0.86407784 3.912147e-01 -0.226917958 0.2626129 -0.752942404
##   56.68387  2.97983421 4.241489e-03  1.103469669 0.3703124  0.361842164
##  104.08527 46.03045714 5.131623e-71 10.190546259 0.2213870  9.751531701
##  104.08527  1.95746833 5.297012e-02  0.607732274 0.3104685 -0.007932493
##   56.57642 -0.29443099 7.695062e-01 -0.077321365 0.2626129 -0.603279898
##   57.00892  0.09112280 9.277144e-01  0.033742805 0.3703004 -0.707768348
##   90.34131 26.86907133 7.293989e-45  7.140515322 0.2657522  6.612579328
##   90.34131  0.39796759 6.915930e-01  0.148316674 0.3726853 -0.592049641
##   57.00000  0.79037684 4.325838e-01  0.207563126 0.2626129 -0.318310067
##   57.00000  1.09113818 2.798030e-01  0.401847369 0.3682827 -0.335626117
##   75.58070 25.49140760 7.383951e-39  8.767945161 0.3439569  8.082834188
##   75.58070  0.37756251 7.068138e-01  0.182120254 0.4823579 -0.778664940
##   56.03698  1.42864703 1.586563e-01  0.375181091 0.2626129 -0.150888034
##   56.27103  0.78730062 4.344096e-01  0.292040791 0.3709394 -0.450961075
##   80.07406 29.10122040 2.431646e-44  9.107327451 0.3129535  8.484539072
##   80.07406  1.55368954 1.242022e-01  0.681882226 0.4388793 -0.191503076
##   56.25986  0.46242264 6.455618e-01  0.121438134 0.2626129 -0.404585034
##   56.53294 -0.61949970 5.380761e-01 -0.229738643 0.3708454 -0.972476824
##  107.93185 44.29260087 4.675322e-71  9.416765987 0.2126036  8.995345773
##  107.93185  0.54916332 5.840278e-01  0.163733480 0.2981508 -0.427257350
##   57.00000  0.42994295 6.688582e-01  0.112908549 0.2626129 -0.412964644
##   57.00000  1.37533527 1.744090e-01  0.506512254 0.3682827 -0.230961232
##   92.78265 36.66798385 5.265744e-57  9.362852585 0.2553414  8.855779610
##   92.78265  0.45462924 6.504379e-01  0.162796064 0.3580853 -0.548312393
##   56.28309  0.49142094 6.250397e-01  0.129053461 0.2626129 -0.396964940
##   56.65071  1.42984890 1.582525e-01  0.529861034 0.3705713 -0.212294459
##  102.84712 40.82658651 2.309915e-65  9.180108987 0.2248561  8.734151972
##  102.84712  2.04754607 4.315331e-02  0.645659919 0.3153335  0.020259196
##   56.51695  0.06194878 9.508222e-01  0.016268548 0.2626129 -0.509702073
##   56.94299  0.01849165 9.853113e-01  0.006848083 0.3703338 -0.734748620
##   94.02138 37.84470702 1.061889e-58  9.571903484 0.2529258  9.069714831
##   94.02138 -2.02328051 4.588329e-02 -0.717653224 0.3546978 -1.421912010
##   57.00000  0.50764763 6.136592e-01  0.133314799 0.2626129 -0.392558393
##   57.00000  3.05269552 3.442398e-03  1.124255103 0.3682827  0.386781617
##   98.92545 37.13412670 6.799362e-60  8.755676358 0.2357852  8.287823066
##   98.92545 -1.98529096 4.988060e-02 -0.656456616 0.3306602 -1.312564215
##   56.18952  0.23131632 8.179093e-01  0.060746641 0.2626129 -0.465290990
##   56.59464  3.48776730 9.495733e-04  1.291972298 0.3704296  0.550084628
##  106.23075 44.10205081 4.030629e-70  9.492480091 0.2152390  9.065758594
##  106.23075  1.31752080 1.904986e-01  0.397689173 0.3018466 -0.200736062
##   56.59213 -0.24918290 8.041215e-01 -0.065438636 0.2626129 -0.591393982
##   57.03565  0.72401357 4.720168e-01  0.268056668 0.3702371 -0.473320248
##         d_high
##  10.1547223057
##   1.2127255990
##   0.7890944096
##   0.9449030581
##   9.2928321109
##   1.1494347834
##   0.5582677109
##   0.9735641849
##  11.8818064722
##   1.5476325512
##   0.2648754507
##   0.7873786214
##  11.7637266939
##   0.8545432877
##   0.4528645540
##   1.3735022266
##  11.1186968553
##   0.9044293526
##   0.5838430689
##   1.1961559541
##  10.5461951066
##   1.3800827326
##   0.6470473514
##   0.5904502662
##   3.0768045967
##   0.8288418632
##   1.0443414689
##   1.8994523872
##   3.0232677723
##   0.8146195309
##   1.3649132306
##   1.2201911992
##   4.0507732097
##   2.1949385269
##   0.9091455758
##  -0.0287576937
##   9.9983864570
##   0.1305076497
##   0.3776418969
##   1.7655893369
##  10.3270935736
##   0.1378661550
##   0.2991064876
##   1.8450971736
##  10.6295608173
##   1.2233970407
##   0.4486371682
##   0.7752539568
##   7.6684513159
##   0.8886829890
##   0.7334363186
##   1.1393208545
##   9.4530561340
##   1.1429054483
##   0.9012502166
##   1.0350426570
##   9.7301158308
##   1.5552675280
##   0.6474613029
##   0.5129995382
##   9.8381862020
##   0.7547243100
##   0.6387817417
##   1.2439857401
##   9.8699255606
##   0.8739045205
##   0.6550718618
##   1.2720165259
##   9.6260660026
##   1.2710606411
##   0.5422391681
##   0.7484447859
##  10.0740921361
##  -0.0133944386
##   0.6591879922
##   1.8617285886
##   9.2235296495
##  -0.0003490168
##   0.5867842733
##   2.0338599693
##   9.9192015865
##   0.9961144089
##   0.4605167093
##   1.0094335843
print(head(within_posi_tbl, 72), row.names = FALSE)
##  cond     metric   window    group       contrast    estimate        SE
##  posi 表象清晰度 pre_post  control post_minus_pre  0.17206897 0.1716713
##  posi 表象清晰度 pre_post training post_minus_pre  0.30766667 0.1687858
##  posi 表象清晰度   pre_fu  control   fu_minus_pre  0.02310345 0.1882192
##  posi 表象清晰度   pre_fu training   fu_minus_pre  0.18881629 0.1875362
##  posi 发生时快感 pre_post  control post_minus_pre -0.04620690 0.1662067
##  posi 发生时快感 pre_post training post_minus_pre  0.35633333 0.1634131
##  posi 发生时快感   pre_fu  control   fu_minus_pre  0.03896552 0.1770071
##  posi 发生时快感   pre_fu training   fu_minus_pre  0.34494019 0.1762980
##  posi     具体性 pre_post  control post_minus_pre  0.58620690 0.2969236
##  posi     具体性 pre_post training post_minus_pre  1.90000000 0.2919329
##  posi     具体性   pre_fu  control   fu_minus_pre  0.96551724 0.3021992
##  posi     具体性   pre_fu training   fu_minus_pre  1.52100000 0.2971199
##  posi     可能性 pre_post  control post_minus_pre -0.10793103 0.1912152
##  posi     可能性 pre_post training post_minus_pre  0.64066667 0.1880013
##  posi     可能性   pre_fu  control   fu_minus_pre -0.16000000 0.1851685
##  posi     可能性   pre_fu training   fu_minus_pre  0.61805718 0.1841573
##  posi     详细度 pre_post  control post_minus_pre  0.16655172 0.2107245
##  posi     详细度 pre_post training post_minus_pre  0.48900000 0.2071826
##  posi     详细度   pre_fu  control   fu_minus_pre  0.24517241 0.1716116
##  posi     详细度   pre_fu training   fu_minus_pre  0.43601451 0.1712376
##  posi 想象时快感 pre_post  control post_minus_pre  0.08068966 0.1876753
##  posi 想象时快感 pre_post training post_minus_pre  0.44266667 0.1845208
##  posi 想象时快感   pre_fu  control   fu_minus_pre  0.09275862 0.1887559
##  posi 想象时快感   pre_fu training   fu_minus_pre  0.47360217 0.1879866
##  posi   知觉控制 pre_post  control post_minus_pre  0.09275862 0.1827225
##  posi   知觉控制 pre_post training post_minus_pre  0.87500000 0.1796513
##  posi   知觉控制   pre_fu  control   fu_minus_pre  0.04620690 0.1997563
##  posi   知觉控制   pre_fu training   fu_minus_pre  1.02894485 0.1987916
##        df    t.ratio      p.value           d      SE_d        d_low    d_high
##  57.00000  1.0023165 3.204269e-01  0.26322122 0.2626129 -0.262651976 0.7890944
##  57.00000  1.8228227 7.357637e-02  0.47065079 0.2581989 -0.046383569 0.9876851
##  56.05558  0.1227475 9.027460e-01  0.03223508 0.2626129 -0.493830191 0.5583004
##  56.74309  1.0068255 3.182929e-01  0.26344590 0.2616599 -0.260570493 0.7874623
##  57.00000 -0.2780086 7.820117e-01 -0.07300864 0.2626129 -0.598881832 0.4528646
##  57.00000  2.1805675 3.335787e-02  0.56302010 0.2581989  0.045985744 1.0800545
##  56.06704  0.2201354 8.265653e-01  0.05781038 0.2626129 -0.468252529 0.5838733
##  56.80003  1.9565745 5.532023e-02  0.51176332 0.2615609 -0.012043234 1.0355699
##  57.00000  1.9742684 5.320382e-02  0.51846828 0.2626129 -0.007404917 1.0443415
##  57.00000  6.5083439 2.088828e-08  1.68044718 0.2581989  1.163412819 2.1974815
##  57.00000  3.1949693 2.280038e-03  0.83904004 0.2626129  0.313166845 1.3649132
##  57.00000  5.1191458 3.769345e-06  1.32175775 0.2581989  0.804723393 1.8387921
##  57.00000 -0.5644480 5.746639e-01 -0.14823130 0.2626129 -0.674104489 0.3776419
##  57.00000  3.4077782 1.207626e-03  0.87988455 0.2581989  0.362850197 1.3969189
##  56.12011 -0.8640778 3.912234e-01 -0.22691796 0.2626129 -0.752969899 0.2991340
##  56.98895  3.3561374 1.412041e-03  0.87655171 0.2611787  0.353548129 1.3995553
##  57.00000  0.7903768 4.325838e-01  0.20756313 0.2626129 -0.318310067 0.7334363
##  57.00000  2.3602367 2.170880e-02  0.60941049 0.2581989  0.092376136 1.1264449
##  56.02097  1.4286470 1.586579e-01  0.37518109 0.2626129 -0.150891350 0.9012535
##  56.49119  2.5462540 1.364119e-02  0.66722188 0.2620406  0.142392222 1.1920515
##  57.00000  0.4299429 6.688582e-01  0.11290855 0.2626129 -0.412964644 0.6387817
##  57.00000  2.3990065 1.973289e-02  0.61942080 0.2581989  0.102386445 1.1364552
##  56.06926  0.4914209 6.250470e-01  0.12905346 0.2626129 -0.397008985 0.6551159
##  56.81020  2.5193397 1.459562e-02  0.65891449 0.2615425  0.135146666 1.1826823
##  57.00000  0.5076476 6.136592e-01  0.13331480 0.2626129 -0.392558393 0.6591880
##  57.00000  4.8705473 9.224219e-06  1.25756990 0.2581989  0.740535544 1.7746043
##  56.09537  0.2313163 8.179108e-01  0.06074664 0.2626129 -0.465310408 0.5868037
##  56.91280  5.1759976 3.075220e-06  1.35271894 0.2613446  0.829368055 1.8760698
# neg条件 同上 
metrics_neg <- dat_long %>%
  filter(cond == "neg") %>%
  distinct(metric) %>% pull() %>% as.character()

neg_fixed  <- list()
neg_within <- list()

for (m in metrics_neg) {
  d_m <- dat_long %>% filter(cond == "neg", metric == m)

  for (wname in names(win_list)) {
    win <- win_list[[wname]]

    dsub <- d_m %>%
      filter(time %in% win) %>%
      droplevels() %>%
      mutate(
        time  = fct_relevel(time, win),
        group = fct_relevel(group, "control","training")
      )
    if (nrow(dsub) == 0) next

    # 1) LMM
    fit <- lmer(score ~ group * time + (1 | ID), data = dsub, REML = TRUE)

    # 2) 固定效应 d
    sig <- sigma(fit)
    co  <- as.data.frame(coef(summary(fit)))
    fx  <- tibble(
      cond = "neg", metric = m, window = wname,
      term = rownames(co),
      estimate  = co[, "Estimate"],
      std.error = co[, "Std. Error"],
      df        = co[, "df"],
      t         = co[, "t value"],
      p         = co[, "Pr(>|t|)"],
      d    = estimate / sig,
      SE_d = std.error / sig
    ) %>%
      mutate(d_low = d + qt(0.025, df) * SE_d,
             d_high= d + qt(0.975, df) * SE_d)
    neg_fixed[[length(neg_fixed)+1]] <- fx

    # 3) 组内简单效应 d(pre_post / pre_fu)
    if (wname != "post_fu") {
      emm <- emmeans(fit, ~ time | group)
      con <- if (wname == "pre_post") list(post_minus_pre = c(-1, 1))
             else                       list(fu_minus_pre   = c(-1, 1))
      w   <- summary(contrast(emm, con, by = "group", adjust = "none"))
      wx  <- as.data.frame(w) %>%
        mutate(
          cond = "neg", metric = m, window = wname,
          d    = estimate / sig,
          SE_d = SE / sig,
          d_low  = d + qt(0.025, df) * SE_d,
          d_high = d + qt(0.975, df) * SE_d
        ) %>%
        select(cond, metric, window, group, contrast, estimate, SE, df, t.ratio, p.value,
               d, SE_d, d_low, d_high)
      neg_within[[length(neg_within)+1]] <- wx
    }
  }
}

fixed_neg_tbl  <- bind_rows(neg_fixed)
within_neg_tbl <- bind_rows(neg_within)
## # A tibble: 84 × 13
##    cond  metric window term  estimate std.error    df        t        p        d
##    <chr> <chr>  <chr>  <chr>    <dbl>     <dbl> <dbl>    <dbl>    <dbl>    <dbl>
##  1 neg   表象…  pre_p… (Int…  6.34        0.199  89.9 31.8     1.11e-50  8.49   
##  2 neg   表象…  pre_p… grou…  0.245       0.280  89.9  0.877   3.83e- 1  0.329  
##  3 neg   表象…  pre_p… time…  0.0407      0.196  57.0  0.208   8.36e- 1  0.0545 
##  4 neg   表象…  pre_p… grou… -0.232       0.275  57.0 -0.843   4.03e- 1 -0.310  
##  5 neg   表象…  pre_fu (Int…  6.34        0.202  94.7 31.3     8.53e-52  7.79   
##  6 neg   表象…  pre_fu grou…  0.245       0.284  94.7  0.865   3.89e- 1  0.302  
##  7 neg   表象…  pre_fu time… -0.0734      0.214  56.2 -0.344   7.32e- 1 -0.0903 
##  8 neg   表象…  pre_fu grou… -0.0300      0.301  56.6 -0.0997  9.21e- 1 -0.0369 
##  9 neg   表象…  post_… (Int…  6.38        0.188  70.0 34.0     3.20e-45 13.8    
## 10 neg   表象…  post_… grou…  0.0137      0.263  70.0  0.0521  9.59e- 1  0.0297 
## 11 neg   表象…  post_… time… -0.114       0.121  56.1 -0.940   3.51e- 1 -0.247  
## 12 neg   表象…  post_… grou…  0.204       0.171  56.3  1.19    2.39e- 1  0.442  
## 13 neg   发生…  pre_p… (Int…  2.52        0.205 112.  12.3     1.98e-22  2.45   
## 14 neg   发生…  pre_p… grou… -0.401       0.288 112.  -1.39    1.67e- 1 -0.390  
## 15 neg   发生…  pre_p… time…  0.490       0.269  57.0  1.82    7.45e- 2  0.477  
## 16 neg   发生…  pre_p… grou…  0.988       0.378  57.0  2.61    1.14e- 2  0.962  
## 17 neg   发生…  pre_fu (Int…  2.52        0.207 107.  12.2     6.68e-22  2.58   
## 18 neg   发生…  pre_fu grou… -0.401       0.290 107.  -1.38    1.71e- 1 -0.410  
## 19 neg   发生…  pre_fu time…  0.810       0.256  56.6  3.16    2.52e- 3  0.830  
## 20 neg   发生…  pre_fu grou…  0.704       0.361  57.1  1.95    5.62e- 2  0.722  
## 21 neg   发生…  post_… (Int…  3.01        0.242  83.3 12.4     1.30e-20  3.65   
## 22 neg   发生…  post_… grou…  0.587       0.340  83.3  1.73    8.80e- 2  0.714  
## 23 neg   发生…  post_… time…  0.321       0.216  56.3  1.48    1.43e- 1  0.390  
## 24 neg   发生…  post_… grou… -0.270       0.305  56.6 -0.886   3.79e- 1 -0.329  
## 25 neg   具体性 pre_p… (Int…  1.93        0.262 105.   7.37    4.07e-11  1.63   
## 26 neg   具体性 pre_p… grou…  0.269       0.367 105.   0.732   4.66e- 1  0.228  
## 27 neg   具体性 pre_p… time…  0.276       0.310  57.0  0.889   3.78e- 1  0.233  
## 28 neg   具体性 pre_p… grou…  1.96        0.435  57.0  4.50    3.42e- 5  1.66   
## 29 neg   具体性 pre_fu (Int…  1.93        0.301 109.   6.41    3.80e- 9  1.34   
## 30 neg   具体性 pre_fu grou…  0.269       0.422 109.   0.637   5.26e- 1  0.186  
## 31 neg   具体性 pre_fu time…  0.552       0.379  57.0  1.46    1.51e- 1  0.382  
## 32 neg   具体性 pre_fu grou…  1.42        0.532  57.0  2.67    9.78e- 3  0.985  
## 33 neg   具体性 post_… (Int…  2.21        0.279 101.   7.91    3.48e-12  1.84   
## 34 neg   具体性 post_… grou…  2.23        0.391 101.   5.69    1.26e- 7  1.86   
## 35 neg   具体性 post_… time…  0.276       0.314  57.0  0.877   3.84e- 1  0.230  
## 36 neg   具体性 post_… grou… -0.537       0.441  57.0 -1.22    2.29e- 1 -0.448  
## 37 neg   可能性 pre_p… (Int…  6.83        0.193  92.9 35.4     1.10e-55  9.08   
## 38 neg   可能性 pre_p… grou… -0.328       0.271  92.9 -1.21    2.29e- 1 -0.436  
## 39 neg   可能性 pre_p… time… -0.156       0.198  57.0 -0.787   4.34e- 1 -0.207  
## 40 neg   可能性 pre_p… grou…  0.200       0.277  57.0  0.722   4.74e- 1  0.266  
## 41 neg   可能性 pre_fu (Int…  6.83        0.179  85.0 38.1     3.22e-55 10.9    
## 42 neg   可能性 pre_fu grou… -0.328       0.251  85.0 -1.30    1.96e- 1 -0.521  
## 43 neg   可能性 pre_fu time… -0.333       0.165  55.7 -2.02    4.83e- 2 -0.530  
## 44 neg   可能性 pre_fu grou…  0.520       0.233  56.0  2.23    2.97e- 2  0.827  
## 45 neg   可能性 post_… (Int…  6.67        0.201  78.6 33.2     4.81e-48 10.7    
## 46 neg   可能性 post_… grou… -0.128       0.282  78.6 -0.454   6.51e- 1 -0.205  
## 47 neg   可能性 post_… time… -0.178       0.163  56.3 -1.09    2.81e- 1 -0.286  
## 48 neg   可能性 post_… grou…  0.289       0.231  56.6  1.25    2.16e- 1  0.465  
## 49 neg   详细度 pre_p… (Int…  5.83        0.222  82.5 26.2     8.21e-42  7.88   
## 50 neg   详细度 pre_p… grou…  0.161       0.312  82.5  0.517   6.06e- 1  0.218  
## 51 neg   详细度 pre_p… time…  0.143       0.194  57.0  0.734   4.66e- 1  0.193  
## 52 neg   详细度 pre_p… grou… -0.235       0.273  57.0 -0.864   3.91e- 1 -0.318  
## 53 neg   详细度 pre_fu (Int…  5.83        0.223  83.8 26.2     4.31e-42  7.63   
## 54 neg   详细度 pre_fu grou…  0.161       0.313  83.8  0.516   6.07e- 1  0.211  
## 55 neg   详细度 pre_fu time…  0.0686      0.201  56.0  0.342   7.34e- 1  0.0898 
## 56 neg   详细度 pre_fu grou…  0.0229      0.283  56.3  0.0807  9.36e- 1  0.0299 
## 57 neg   详细度 post_… (Int…  5.98        0.225  67.7 26.5     1.68e-37 11.8    
## 58 neg   详细度 post_… grou… -0.0742      0.316  67.7 -0.235   8.15e- 1 -0.146  
## 59 neg   详细度 post_… time… -0.0741      0.133  56.1 -0.557   5.80e- 1 -0.146  
## 60 neg   详细度 post_… grou…  0.251       0.188  56.3  1.34    1.87e- 1  0.495  
## 61 neg   想象…  pre_p… (Int…  2.91        0.198 107.  14.7     2.04e-27  3.15   
## 62 neg   想象…  pre_p… grou… -0.335       0.278 107.  -1.20    2.32e- 1 -0.362  
## 63 neg   想象…  pre_p… time…  0.548       0.243  57.0  2.25    2.81e- 2  0.592  
## 64 neg   想象…  pre_p… grou…  0.968       0.341  57.0  2.84    6.24e- 3  1.05   
## 65 neg   想象…  pre_fu (Int…  2.91        0.212 106.  13.7     2.73e-25  2.97   
## 66 neg   想象…  pre_fu grou… -0.335       0.297 106.  -1.13    2.62e- 1 -0.342  
## 67 neg   想象…  pre_fu time…  0.811       0.257  56.5  3.15    2.59e- 3  0.828  
## 68 neg   想象…  pre_fu grou…  0.842       0.363  57.0  2.32    2.38e- 2  0.860  
## 69 neg   想象…  post_… (Int…  3.46        0.230  76.7 15.0     1.45e-24  5.06   
## 70 neg   想象…  post_… grou…  0.634       0.323  76.7  1.96    5.33e- 2  0.927  
## 71 neg   想象…  post_… time…  0.263       0.180  56.3  1.47    1.48e- 1  0.385  
## 72 neg   想象…  post_… grou… -0.129       0.254  56.5 -0.507   6.14e- 1 -0.188  
## 73 neg   知觉…  pre_p… (Int…  6.25        0.207  87.6 30.2     4.18e-48  8.36   
## 74 neg   知觉…  pre_p… grou… -0.297       0.290  87.6 -1.02    3.09e- 1 -0.397  
## 75 neg   知觉…  pre_p… time… -0.0797      0.196  57.0 -0.406   6.86e- 1 -0.107  
## 76 neg   知觉…  pre_p… grou…  0.300       0.275  57.0  1.09    2.80e- 1  0.401  
## 77 neg   知觉…  pre_fu (Int…  6.25        0.226  94.3 27.7     4.48e-47  6.90   
## 78 neg   知觉…  pre_fu grou… -0.297       0.317  94.3 -0.938   3.51e- 1 -0.328  
## 79 neg   知觉…  pre_fu time… -0.0579      0.238  55.6 -0.243   8.09e- 1 -0.0639 
## 80 neg   知觉…  pre_fu grou…  0.369       0.336  56.0  1.10    2.76e- 1  0.407  
## 81 neg   知觉…  post_… (Int…  6.17        0.220  75.2 28.0     1.57e-41  9.75   
## 82 neg   知觉…  post_… grou…  0.00289     0.309  75.2  0.00933 9.93e- 1  0.00456
## 83 neg   知觉…  post_… time…  0.0217      0.166  56.2  0.131   8.97e- 1  0.0343 
## 84 neg   知觉…  post_… grou…  0.0591      0.235  56.4  0.252   8.02e- 1  0.0934 
## # ℹ 3 more variables: SE_d <dbl>, d_low <dbl>, d_high <dbl>
## # A tibble: 28 × 14
##    cond  metric     window  group contrast estimate    SE    df t.ratio  p.value
##    <chr> <chr>      <chr>   <fct> <fct>       <dbl> <dbl> <dbl>   <dbl>    <dbl>
##  1 neg   表象清晰度 pre_po… cont… post_mi…   0.0407 0.196  57.0   0.208 8.36e- 1
##  2 neg   表象清晰度 pre_po… trai… post_mi…  -0.191  0.193  57    -0.991 3.26e- 1
##  3 neg   表象清晰度 pre_fu  cont… fu_minu…  -0.0734 0.214  56.1  -0.344 7.32e- 1
##  4 neg   表象清晰度 pre_fu  trai… fu_minu…  -0.103  0.213  56.8  -0.487 6.28e- 1
##  5 neg   发生时快感 pre_po… cont… post_mi…   0.490  0.269  57     1.82  7.45e- 2
##  6 neg   发生时快感 pre_po… trai… post_mi…   1.48   0.265  57     5.58  7.05e- 7
##  7 neg   发生时快感 pre_fu  cont… fu_minu…   0.810  0.256  56.1   3.16  2.53e- 3
##  8 neg   发生时快感 pre_fu  trai… fu_minu…   1.51   0.255  57.1   5.95  1.76e- 7
##  9 neg   具体性     pre_po… cont… post_mi…   0.276  0.310  57     0.889 3.78e- 1
## 10 neg   具体性     pre_po… trai… post_mi…   2.23   0.305  57     7.32  9.30e-10
## 11 neg   具体性     pre_fu  cont… fu_minu…   0.552  0.379  57.0   1.46  1.51e- 1
## 12 neg   具体性     pre_fu  trai… fu_minu…   1.97   0.373  57     5.29  1.99e- 6
## 13 neg   可能性     pre_po… cont… post_mi…  -0.156  0.198  57.0  -0.787 4.34e- 1
## 14 neg   可能性     pre_po… trai… post_mi…   0.0443 0.194  57     0.228 8.20e- 1
## 15 neg   可能性     pre_fu  cont… fu_minu…  -0.333  0.165  56.0  -2.02  4.83e- 2
## 16 neg   可能性     pre_fu  trai… fu_minu…   0.187  0.165  56.7   1.13  2.62e- 1
## 17 neg   详细度     pre_po… cont… post_mi…   0.143  0.194  57.0   0.734 4.66e- 1
## 18 neg   详细度     pre_po… trai… post_mi…  -0.0927 0.191  57    -0.485 6.30e- 1
## 19 neg   详细度     pre_fu  cont… fu_minu…   0.0686 0.201  56.0   0.342 7.34e- 1
## 20 neg   详细度     pre_fu  trai… fu_minu…   0.0915 0.200  56.7   0.457 6.49e- 1
## 21 neg   想象时快感 pre_po… cont… post_mi…   0.548  0.243  57     2.25  2.81e- 2
## 22 neg   想象时快感 pre_po… trai… post_mi…   1.52   0.239  57     6.34  3.91e- 8
## 23 neg   想象时快感 pre_fu  cont… fu_minu…   0.811  0.257  56.1   3.15  2.60e- 3
## 24 neg   想象时快感 pre_fu  trai… fu_minu…   1.65   0.256  57.0   6.46  2.47e- 8
## 25 neg   知觉控制   pre_po… cont… post_mi…  -0.0797 0.196  57.0  -0.406 6.86e- 1
## 26 neg   知觉控制   pre_po… trai… post_mi…   0.220  0.193  57.0   1.14  2.58e- 1
## 27 neg   知觉控制   pre_fu  cont… fu_minu…  -0.0579 0.238  56.1  -0.243 8.09e- 1
## 28 neg   知觉控制   pre_fu  trai… fu_minu…   0.311  0.237  56.8   1.31  1.94e- 1
## # ℹ 4 more variables: d <dbl>, SE_d <dbl>, d_low <dbl>, d_high <dbl>