rm(list=ls())
set.seed(1234)
getwd()
## [1] "D:/Projects/Live-PK/1.DataAnalysis/0.Code"
library("tidyverse")
library("arrow")
library(data.table)
library(modelsummary)
library(tinytable)

source("DoubleML_function.R")

log_with_mean_offset <- function(x) {
  offset <- mean(x, na.rm = TRUE) / 10
  log(x + offset)
}

log_with_001 <- function(x) {
  log(x + 0.01)
}

df <- read_parquet("../../0.DataCleaning/1.Input/synthetic_data.parquet") %>%
  mutate(
    p_date = as_date(p_date),              # Convert to Date format
    day = format(p_date, "%Y-%m-%d"),      # Extract day in "YYYY-MM-DD" format
    month = format(p_date, "%Y-%m"),       # Extract month in "YYYY-MM" format
    year = format(p_date, "%Y"),           # Extract year in "YYYY" format
    quarter = paste0(year(p_date), "-Q", quarter(p_date))  # Extract quarter in "YYYY-QN" format
  ) %>%
  mutate(
    reference_date = as_date("2022-12-31"),
    relative_day = as.integer(difftime(as_date(day), reference_date, units = "days"))  # Difference in days
  ) %>%
  mutate(
    gender = as.factor(gender),
    author_type = as.factor(author_type),
    author_income_range = as.factor(author_income_range),
    age_range = as.factor(age_range),
    fre_country_region = as.factor(fre_country_region),
    fre_city_level = as.factor(fre_city_level),
    is_big_v = as.factor(is_big_v),
    relative_day = as.factor(relative_day)
  )

df <- df %>% 
  mutate(
    log_fans_num = log(fans_user_num+1), #TODO: check
    log_history_total_cost = log(history_total_cost+1),
    log_history_valid_play_duration = log(history_valid_play_duration+1),
    log_history_comment_cnt = log(history_comment_cnt+1),
    log_history_like_cnt = log(history_like_cnt+1),
    log_total_cost_amt = log(total_cost_amt+1),
    log_avg_valid_play_duration = log(avg_valid_play_duration+1),
    log_follow_author_cnt = log(follow_author_cnt+1),
    log_cancel_follow_author_cnt = log(cancel_follow_author_cnt+1),
    log_follow_user_cnt = log(follow_user_cnt+1),
    log_join_fans_group_cnt = log(join_fans_group_cnt+1)
  ) %>%
  mutate(across(
    c(fans_user_num, history_total_cost, history_valid_play_duration, 
      history_comment_cnt, history_like_cnt, total_cost_amt, 
      avg_valid_play_duration, follow_author_cnt, cancel_follow_author_cnt, 
      follow_user_cnt, join_fans_group_cnt),
    ~ log_with_mean_offset(.),
    .names = "log10m_{.col}"
  )) %>%
  mutate(across(
    c(fans_user_num, history_total_cost, history_valid_play_duration, 
      history_comment_cnt, history_like_cnt, total_cost_amt, 
      avg_valid_play_duration, follow_author_cnt, cancel_follow_author_cnt, 
      follow_user_cnt, join_fans_group_cnt),
    ~ log_with_001(.),
    .names = "log001_{.col}"
  ))

df <- df %>% sample_frac(0.1)
#建议:20万样本,可以先只取2K来测试数据和代码,如果可以跑通再还原代码
# gc()
cols <- c(
  "is_pk_live",
  # Control Variables
  "gender",
  "age_range",
  "author_type",
  "fre_country_region",
  "fre_city_level",
  "log_fans_num",
  "log_history_total_cost",
  "log_history_valid_play_duration",
  "log_history_comment_cnt",
  "log_history_like_cnt",
  # Dependent Variables
  "log_total_cost_amt",
  "log_avg_valid_play_duration",
  "log_follow_author_cnt",
  "log_cancel_follow_author_cnt",
  "log_follow_user_cnt",
  "log_join_fans_group_cnt"
)

crs <- c(
  # PK in Session
  "is_pk_live" = "PK in Session",

  # Control Variables
  "gender" = "Gender",
  "age_range" = "Age Category",
  "author_type" = "Streamer Type",
  "fre_country_region" = "Region",
  "fre_city_level" = "City Level",
  "log_fans_num" = "Fan Count (log)",
  "log_history_total_cost" = "Historical Gifting (log)",
  "log_history_valid_play_duration" = "Historical View Time (log)",
  "log_history_comment_cnt" = "Historical Comment Count (log)",
  "log_history_like_cnt" = "Historical Like Count (log)",

  # Dependent Variables
  "log_total_cost_amt" = "Total Gifting (log)",
  "log_avg_valid_play_duration" = "Avg Play Duration Per Viewer (log)",
  "log_follow_author_cnt" = "New Followers (log)",
  "log_cancel_follow_author_cnt" = "Lost Followers (log)",
  "log_follow_user_cnt" = "Viewer-to-Viewer Follows (log)",
  "log_join_fans_group_cnt" = "New Fans (log)"
)

reversed_coef_rename <- setNames(names(crs), crs)

df_summary <- df %>% 
  select(cols) %>% 
  rename(all_of(reversed_coef_rename))
## Warning: Using an external vector in selections was deprecated in tidyselect 1.1.0.
## ℹ Please use `all_of()` or `any_of()` instead.
##   # Was:
##   data %>% select(cols)
## 
##   # Now:
##   data %>% select(all_of(cols))
## 
## See <https://tidyselect.r-lib.org/reference/faq-external-vector.html>.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
Obs = function(x) sum(!is.na(x))
datasummary(All(df_summary) ~ Obs + Mean + SD + Min + Max,
            data = df_summary,
            title = 'Summary Statistics \\label{tab:summary}', escape=FALSE,
            fmt = 2, output = "../2.Output/summary.tex")
## Warning: To compile a LaTeX document with this table, the following commands must be placed in the document preamble:
## 
## \usepackage{tabularray}
## \usepackage{float}
## \usepackage{graphicx}
## \usepackage{codehigh}
## \usepackage[normalem]{ulem}
## \UseTblrLibrary{booktabs}
## \UseTblrLibrary{siunitx}
## \newcommand{\tinytableTabularrayUnderline}[1]{\underline{#1}}
## \newcommand{\tinytableTabularrayStrikeout}[1]{\sout{#1}}
## \NewTableCommand{\tinytableDefineColor}[3]{\definecolor{#1}{#2}{#3}}
## 
## To disable `siunitx` and prevent `modelsummary` from wrapping numeric entries in `\num{}`, call:
## 
## options("modelsummary_format_numeric_latex" = "plain")
##  This warning appears once per session.

这一步非常重要

#直接把这些categorical变量变成one-hot vectors,这样会省去后面ML的麻烦
dummy_vars <- model.matrix(~ gender + age_range + author_type + fre_country_region + fre_city_level,  # + relative_day
                                  data = df)[, -1]
dummy_vars <- as.data.table(dummy_vars)

# Replace non-ASCII characters with valid ASCII names
clean_column_names <- function(names) {
  # Replace specific Chinese characters with their English equivalents
  names <- gsub("电商", "Commerce", names)  # Replace '电商' with 'Commerce'
  names <- gsub("秀场", "Showcase", names)  # Replace '秀场' with 'Showcase'
  # 因为一些ML模型里R的变量名不可以是中文,所以变成dummy后一些变量名要改
  # Optionally, if there are other Chinese characters, you can continue to add more replacements here
  
  # Additionally, ensure names comply with general naming conventions
  names <- make.names(names)  # This replaces any other special characters with valid R names
  
  return(names)
}

# Apply the function to clean the column names in dummy_vars
setnames(dummy_vars, old = colnames(dummy_vars), new = clean_column_names(colnames(dummy_vars)))
df_with_dummies <- cbind(df, dummy_vars)

这一步非常重要

#把dummies和continuous covariates结合起来
features_base <- c("log_fans_num", "log_history_total_cost",
                   "log_history_valid_play_duration", "log_history_comment_cnt",
                   "log_history_like_cnt",
                   colnames(dummy_vars))
#把date format改成numeric,数据转换为data.table
df_with_dummies <- df_with_dummies %>% mutate(across(where(is.Date), as.numeric)) %>% 
  as.data.table()
category <- c("log_total_cost_amt", "log_avg_valid_play_duration", "log_follow_author_cnt", 
              "log_cancel_follow_author_cnt", "log_follow_user_cnt", "log_join_fans_group_cnt")
crs <- c(
  "log_total_cost_amt" = "Total Gifting (log)",
  "log_avg_valid_play_duration" = "Avg Play Duration Per Viewer (log)",
  "log_follow_author_cnt" = "New Followers (log)",
  "log_cancel_follow_author_cnt" = "Lost Followers (log)",
  "log_follow_user_cnt" = "Viewer-to-Viewer Follows (log)",
  "log_join_fans_group_cnt" = "New Fans (log)"
)

Partially Linear Regression Model (PLR)

Here, PLR is the most suitable one for causal analysis.

Log (actually it is log(1+x))

log_total_cost_amt_result = run_dml_plr_models(df_with_dummies, Y = "log_total_cost_amt", D = "is_pk_live", Xs = features_base, crs=crs)
## INFO  [09:25:08.908] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 1/3)
## INFO  [09:25:09.804] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 2/3)
## INFO  [09:25:10.028] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 3/3)
## INFO  [09:25:10.167] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 1/3)
## INFO  [09:25:10.413] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 2/3)
## INFO  [09:25:10.658] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 3/3)
## INFO  [09:25:11.000] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 1/3)
## INFO  [09:25:11.935] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 2/3)
## INFO  [09:25:12.810] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 3/3)
## INFO  [09:25:13.777] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 1/3)
## INFO  [09:25:14.647] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 2/3)
## INFO  [09:25:15.676] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 3/3)
## INFO  [09:25:16.740] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 1/3)
## INFO  [09:25:16.780] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 2/3)
## INFO  [09:25:16.814] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 3/3)
## INFO  [09:25:16.900] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 1/3)
## INFO  [09:25:16.947] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 2/3)
## INFO  [09:25:17.008] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 3/3)
## INFO  [09:25:17.134] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 1/3)
## INFO  [09:25:17.394] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 2/3)
## INFO  [09:25:17.618] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 3/3)
## INFO  [09:25:17.892] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 1/3)
## INFO  [09:25:18.169] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 2/3)
## INFO  [09:25:18.423] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 3/3)
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning: The `size` argument of `element_rect()` is deprecated as of ggplot2 3.4.0.
## ℹ Please use the `linewidth` argument instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
log_total_cost_amt_result = run_dml_plr_models(df_with_dummies, Y = "log_total_cost_amt", D = "is_pk_live", Xs = features_base, crs=crs)
## INFO  [09:25:19.391] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 1/3)
## INFO  [09:25:19.480] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 2/3)
## INFO  [09:25:19.727] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 3/3)
## INFO  [09:25:19.854] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 1/3)
## INFO  [09:25:20.098] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 2/3)
## INFO  [09:25:20.333] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 3/3)
## INFO  [09:25:20.675] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 1/3)
## INFO  [09:25:21.555] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 2/3)
## INFO  [09:25:22.445] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 3/3)
## INFO  [09:25:23.392] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 1/3)
## INFO  [09:25:24.250] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 2/3)
## INFO  [09:25:25.111] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 3/3)
## INFO  [09:25:26.147] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 1/3)
## INFO  [09:25:26.185] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 2/3)
## INFO  [09:25:26.236] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 3/3)
## INFO  [09:25:26.322] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 1/3)
## INFO  [09:25:26.371] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 2/3)
## INFO  [09:25:26.418] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 3/3)
## INFO  [09:25:26.709] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 1/3)
## INFO  [09:25:26.947] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 2/3)
## INFO  [09:25:27.169] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 3/3)
## INFO  [09:25:27.441] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 1/3)
## INFO  [09:25:27.695] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 2/3)
## INFO  [09:25:27.968] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 3/3)
log_avg_valid_play_duration_result = run_dml_plr_models(df_with_dummies, Y = "log_avg_valid_play_duration", D = "is_pk_live", Xs = features_base, crs=crs)
## INFO  [09:25:28.634] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 1/3)
## INFO  [09:25:28.712] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 2/3)
## INFO  [09:25:28.788] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 3/3)
## INFO  [09:25:28.913] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 1/3)
## INFO  [09:25:29.309] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 2/3)
## INFO  [09:25:29.550] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 3/3)
## INFO  [09:25:29.890] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 1/3)
## INFO  [09:25:30.779] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 2/3)
## INFO  [09:25:31.661] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 3/3)
## INFO  [09:25:32.603] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 1/3)
## INFO  [09:25:33.479] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 2/3)
## INFO  [09:25:34.319] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 3/3)
## INFO  [09:25:35.350] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 1/3)
## INFO  [09:25:35.383] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 2/3)
## INFO  [09:25:35.434] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 3/3)
## INFO  [09:25:35.521] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 1/3)
## INFO  [09:25:35.567] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 2/3)
## INFO  [09:25:35.617] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 3/3)
## INFO  [09:25:35.757] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 1/3)
## INFO  [09:25:36.008] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 2/3)
## INFO  [09:25:36.262] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 3/3)
## INFO  [09:25:36.572] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 1/3)
## INFO  [09:25:36.844] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 2/3)
## INFO  [09:25:37.111] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 3/3)
log_follow_author_cnt_result = run_dml_plr_models(df_with_dummies, Y = "log_follow_author_cnt", D = "is_pk_live", Xs = features_base, crs=crs)
## INFO  [09:25:37.793] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 1/3)
## INFO  [09:25:37.875] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 2/3)
## INFO  [09:25:37.962] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 3/3)
## INFO  [09:25:38.104] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 1/3)
## INFO  [09:25:38.343] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 2/3)
## INFO  [09:25:38.584] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 3/3)
## INFO  [09:25:38.935] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 1/3)
## INFO  [09:25:39.842] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 2/3)
## INFO  [09:25:40.749] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 3/3)
## INFO  [09:25:41.703] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 1/3)
## INFO  [09:25:42.584] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 2/3)
## INFO  [09:25:43.467] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 3/3)
## INFO  [09:25:44.490] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 1/3)
## INFO  [09:25:44.521] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 2/3)
## INFO  [09:25:44.559] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 3/3)
## INFO  [09:25:44.645] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 1/3)
## INFO  [09:25:44.702] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 2/3)
## INFO  [09:25:44.762] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 3/3)
## INFO  [09:25:44.897] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 1/3)
## INFO  [09:25:45.121] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 2/3)
## INFO  [09:25:45.335] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 3/3)
## INFO  [09:25:45.768] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 1/3)
## INFO  [09:25:46.038] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 2/3)
## INFO  [09:25:46.293] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 3/3)
log_cancel_follow_author_cnt_result = run_dml_plr_models(df_with_dummies, Y = "log_cancel_follow_author_cnt", D = "is_pk_live", Xs = features_base, crs=crs)
## INFO  [09:25:46.946] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 1/3)
## INFO  [09:25:47.025] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 2/3)
## INFO  [09:25:47.096] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 3/3)
## INFO  [09:25:47.235] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 1/3)
## INFO  [09:25:47.484] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 2/3)
## INFO  [09:25:47.731] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 3/3)
## INFO  [09:25:48.079] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 1/3)
## INFO  [09:25:48.944] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 2/3)
## INFO  [09:25:49.798] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 3/3)
## INFO  [09:25:50.766] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 1/3)
## INFO  [09:25:51.638] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 2/3)
## INFO  [09:25:52.498] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 3/3)
## INFO  [09:25:53.540] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 1/3)
## INFO  [09:25:53.574] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 2/3)
## INFO  [09:25:53.607] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 3/3)
## INFO  [09:25:53.697] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 1/3)
## INFO  [09:25:53.757] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 2/3)
## INFO  [09:25:53.802] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 3/3)
## INFO  [09:25:53.938] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 1/3)
## INFO  [09:25:54.244] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 2/3)
## INFO  [09:25:54.520] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 3/3)
## INFO  [09:25:54.830] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 1/3)
## INFO  [09:25:55.092] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 2/3)
## INFO  [09:25:55.390] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 3/3)
log_follow_user_cnt_result = run_dml_plr_models(df_with_dummies, Y = "log_follow_user_cnt", D = "is_pk_live", Xs = features_base, crs=crs)
## INFO  [09:25:56.087] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 1/3)
## INFO  [09:25:56.197] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 2/3)
## INFO  [09:25:56.281] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 3/3)
## INFO  [09:25:56.426] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 1/3)
## INFO  [09:25:56.681] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 2/3)
## INFO  [09:25:56.932] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 3/3)
## INFO  [09:25:57.275] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 1/3)
## INFO  [09:25:58.204] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 2/3)
## INFO  [09:25:59.109] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 3/3)
## INFO  [09:26:00.086] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 1/3)
## INFO  [09:26:00.997] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 2/3)
## INFO  [09:26:01.859] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 3/3)
## INFO  [09:26:03.076] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 1/3)
## INFO  [09:26:03.115] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 2/3)
## INFO  [09:26:03.147] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 3/3)
## INFO  [09:26:03.234] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 1/3)
## INFO  [09:26:03.289] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 2/3)
## INFO  [09:26:03.337] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 3/3)
## INFO  [09:26:03.469] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 1/3)
## INFO  [09:26:03.692] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 2/3)
## INFO  [09:26:03.911] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 3/3)
## INFO  [09:26:04.182] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 1/3)
## INFO  [09:26:04.432] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 2/3)
## INFO  [09:26:04.704] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 3/3)
log_join_fans_group_cnt_result = run_dml_plr_models(df_with_dummies, Y = "log_join_fans_group_cnt", D = "is_pk_live", Xs = features_base, crs=crs)
## INFO  [09:26:05.366] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 1/3)
## INFO  [09:26:05.461] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 2/3)
## INFO  [09:26:05.543] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 3/3)
## INFO  [09:26:05.695] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 1/3)
## INFO  [09:26:05.940] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 2/3)
## INFO  [09:26:06.184] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 3/3)
## INFO  [09:26:06.530] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 1/3)
## INFO  [09:26:07.422] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 2/3)
## INFO  [09:26:08.325] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 3/3)
## INFO  [09:26:09.284] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 1/3)
## INFO  [09:26:10.145] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 2/3)
## INFO  [09:26:10.991] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 3/3)
## INFO  [09:26:12.026] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 1/3)
## INFO  [09:26:12.057] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 2/3)
## INFO  [09:26:12.091] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 3/3)
## INFO  [09:26:12.344] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 1/3)
## INFO  [09:26:12.391] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 2/3)
## INFO  [09:26:12.438] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 3/3)
## INFO  [09:26:12.577] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 1/3)
## INFO  [09:26:12.800] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 2/3)
## INFO  [09:26:13.032] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 3/3)
## INFO  [09:26:13.320] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 1/3)
## INFO  [09:26:13.576] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 2/3)
## INFO  [09:26:13.857] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 3/3)
MS_list <- list()
for (var in category) {
  new_var <- crs[[var]]
  MS_list[[new_var]] <- get(paste0(var, "_result"))[['mod']]
  
  ggsave(paste0("../2.Output/DML_PK_vs_NonPK_", var, ".pdf"), plot = get(paste0(var, "_result"))[['plot']], device = "pdf", width = 16, height = 9, units = "in")
  ggsave(paste0("../2.Output/DML_PK_vs_NonPK_", var, ".png"), plot = get(paste0(var, "_result"))[['plot']], device = "png", width = 16, height = 9, dpi = 300, units = "in")
  
}
modelsummary(MS_list)
Total Gifting (log) Avg Play Duration Per Viewer (log) New Followers (log) Lost Followers (log) Viewer-to-Viewer Follows (log) New Fans (log)
LASSO -0.013 0.003 -0.023 0.028 0.025 -0.018
(0.021) (0.013) (0.022) (0.021) (0.021) (0.021)
Random Forest -0.011 0.004 -0.025 0.027 0.027 -0.017
(0.021) (0.013) (0.022) (0.021) (0.021) (0.021)
Regression Tree -0.012 0.003 -0.022 0.027 0.025 -0.018
(0.021) (0.013) (0.022) (0.021) (0.021) (0.021)
Boosted Trees -0.016 0.004 -0.028 0.028 0.021 -0.025
(0.022) (0.013) (0.022) (0.021) (0.021) (0.021)
Obs 10000 10000 10000 10000 10000 10000
save_model_summaries <- function(list, new_cate_name) {
modelsummary(list, stars = c('+' = .1, '*' = .05, '**' = .01, '***' = .001), 
             output = paste0("../2.Output/", new_cate_name, ".docx"))

title = paste0('The Impact of PK Event',
                            '\\label{tab:', new_cate_name, '}')

modelsummary(list, output = "latex", stars = c('+' = .1, '*' = .05, '**' = .01, '***' = .001),
              title = title, escape = FALSE) |>
theme_tt("resize") |>
save_tt(paste0("../2.Output/", new_cate_name, ".tex"), overwrite = TRUE)
}
save_model_summaries(MS_list, "DML_PK_vs_NonPK_log")

Raw (Unscaled)

total_cost_amt_result = run_dml_plr_models(df_with_dummies, Y = "total_cost_amt", D = "is_pk_live", Xs = features_base)
## INFO  [09:26:18.648] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 1/3)
## INFO  [09:26:18.732] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 2/3)
## INFO  [09:26:18.802] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 3/3)
## INFO  [09:26:19.130] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 1/3)
## INFO  [09:26:19.375] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 2/3)
## INFO  [09:26:19.613] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 3/3)
## INFO  [09:26:19.958] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 1/3)
## INFO  [09:26:20.901] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 2/3)
## INFO  [09:26:21.768] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 3/3)
## INFO  [09:26:22.720] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 1/3)
## INFO  [09:26:23.597] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 2/3)
## INFO  [09:26:24.429] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 3/3)
## INFO  [09:26:25.424] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 1/3)
## INFO  [09:26:25.458] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 2/3)
## INFO  [09:26:25.489] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 3/3)
## INFO  [09:26:25.593] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 1/3)
## INFO  [09:26:25.638] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 2/3)
## INFO  [09:26:25.689] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 3/3)
## INFO  [09:26:25.824] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 1/3)
## INFO  [09:26:26.077] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 2/3)
## INFO  [09:26:26.324] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 3/3)
## INFO  [09:26:26.634] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 1/3)
## INFO  [09:26:26.895] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 2/3)
## INFO  [09:26:27.173] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 3/3)
avg_valid_play_duration_result = run_dml_plr_models(df_with_dummies, Y = "avg_valid_play_duration", D = "is_pk_live", Xs = features_base)
## INFO  [09:26:27.856] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 1/3)
## INFO  [09:26:27.940] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 2/3)
## INFO  [09:26:28.030] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 3/3)
## INFO  [09:26:28.339] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 1/3)
## INFO  [09:26:28.579] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 2/3)
## INFO  [09:26:28.812] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 3/3)
## INFO  [09:26:29.150] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 1/3)
## INFO  [09:26:30.044] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 2/3)
## INFO  [09:26:30.938] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 3/3)
## INFO  [09:26:31.877] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 1/3)
## INFO  [09:26:32.739] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 2/3)
## INFO  [09:26:33.733] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 3/3)
## INFO  [09:26:34.755] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 1/3)
## INFO  [09:26:34.793] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 2/3)
## INFO  [09:26:34.827] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 3/3)
## INFO  [09:26:34.917] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 1/3)
## INFO  [09:26:34.981] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 2/3)
## INFO  [09:26:35.028] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 3/3)
## INFO  [09:26:35.152] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 1/3)
## INFO  [09:26:35.422] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 2/3)
## INFO  [09:26:35.673] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 3/3)
## INFO  [09:26:35.988] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 1/3)
## INFO  [09:26:36.291] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 2/3)
## INFO  [09:26:36.555] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 3/3)
follow_author_cnt_result = run_dml_plr_models(df_with_dummies, Y = "follow_author_cnt", D = "is_pk_live", Xs = features_base)
## INFO  [09:26:37.204] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 1/3)
## INFO  [09:26:37.284] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 2/3)
## INFO  [09:26:37.355] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 3/3)
## INFO  [09:26:37.482] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 1/3)
## INFO  [09:26:37.740] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 2/3)
## INFO  [09:26:38.000] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 3/3)
## INFO  [09:26:38.347] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 1/3)
## INFO  [09:26:39.225] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 2/3)
## INFO  [09:26:40.129] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 3/3)
## INFO  [09:26:41.090] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 1/3)
## INFO  [09:26:41.974] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 2/3)
## INFO  [09:26:42.813] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 3/3)
## INFO  [09:26:43.848] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 1/3)
## INFO  [09:26:43.888] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 2/3)
## INFO  [09:26:43.923] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 3/3)
## INFO  [09:26:44.016] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 1/3)
## INFO  [09:26:44.085] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 2/3)
## INFO  [09:26:44.134] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 3/3)
## INFO  [09:26:44.279] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 1/3)
## INFO  [09:26:44.523] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 2/3)
## INFO  [09:26:44.792] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 3/3)
## INFO  [09:26:45.091] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 1/3)
## INFO  [09:26:45.356] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 2/3)
## INFO  [09:26:45.605] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 3/3)
cancel_follow_author_cnt_result = run_dml_plr_models(df_with_dummies, Y = "cancel_follow_author_cnt", D = "is_pk_live", Xs = features_base)
## INFO  [09:26:46.271] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 1/3)
## INFO  [09:26:46.359] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 2/3)
## INFO  [09:26:46.432] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 3/3)
## INFO  [09:26:46.757] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 1/3)
## INFO  [09:26:47.036] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 2/3)
## INFO  [09:26:47.428] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 3/3)
## INFO  [09:26:47.768] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 1/3)
## INFO  [09:26:48.681] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 2/3)
## INFO  [09:26:49.550] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 3/3)
## INFO  [09:26:50.521] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 1/3)
## INFO  [09:26:51.342] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 2/3)
## INFO  [09:26:52.168] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 3/3)
## INFO  [09:26:53.179] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 1/3)
## INFO  [09:26:53.209] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 2/3)
## INFO  [09:26:53.241] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 3/3)
## INFO  [09:26:53.334] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 1/3)
## INFO  [09:26:53.380] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 2/3)
## INFO  [09:26:53.427] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 3/3)
## INFO  [09:26:53.560] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 1/3)
## INFO  [09:26:53.825] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 2/3)
## INFO  [09:26:54.066] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 3/3)
## INFO  [09:26:54.361] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 1/3)
## INFO  [09:26:54.634] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 2/3)
## INFO  [09:26:54.884] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 3/3)
follow_user_cnt_result = run_dml_plr_models(df_with_dummies, Y = "follow_user_cnt", D = "is_pk_live", Xs = features_base)
## INFO  [09:26:55.581] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 1/3)
## INFO  [09:26:55.655] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 2/3)
## INFO  [09:26:55.730] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 3/3)
## INFO  [09:26:55.877] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 1/3)
## INFO  [09:26:56.291] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 2/3)
## INFO  [09:26:56.532] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 3/3)
## INFO  [09:26:56.876] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 1/3)
## INFO  [09:26:57.794] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 2/3)
## INFO  [09:26:58.687] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 3/3)
## INFO  [09:26:59.636] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 1/3)
## INFO  [09:27:00.505] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 2/3)
## INFO  [09:27:01.398] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 3/3)
## INFO  [09:27:02.484] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 1/3)
## INFO  [09:27:02.542] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 2/3)
## INFO  [09:27:02.573] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 3/3)
## INFO  [09:27:02.661] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 1/3)
## INFO  [09:27:02.715] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 2/3)
## INFO  [09:27:02.760] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 3/3)
## INFO  [09:27:02.895] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 1/3)
## INFO  [09:27:03.146] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 2/3)
## INFO  [09:27:03.398] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 3/3)
## INFO  [09:27:03.722] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 1/3)
## INFO  [09:27:03.983] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 2/3)
## INFO  [09:27:04.241] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 3/3)
join_fans_group_cnt_result = run_dml_plr_models(df_with_dummies, Y = "join_fans_group_cnt", D = "is_pk_live", Xs = features_base)
## INFO  [09:27:04.915] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 1/3)
## INFO  [09:27:05.001] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 2/3)
## INFO  [09:27:05.079] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 3/3)
## INFO  [09:27:05.204] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 1/3)
## INFO  [09:27:05.455] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 2/3)
## INFO  [09:27:05.718] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 3/3)
## INFO  [09:27:06.061] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 1/3)
## INFO  [09:27:06.944] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 2/3)
## INFO  [09:27:07.820] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 3/3)
## INFO  [09:27:08.824] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 1/3)
## INFO  [09:27:09.682] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 2/3)
## INFO  [09:27:10.531] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 3/3)
## INFO  [09:27:11.583] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 1/3)
## INFO  [09:27:11.615] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 2/3)
## INFO  [09:27:11.648] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 3/3)
## INFO  [09:27:11.749] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 1/3)
## INFO  [09:27:11.794] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 2/3)
## INFO  [09:27:11.844] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 3/3)
## INFO  [09:27:11.977] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 1/3)
## INFO  [09:27:12.230] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 2/3)
## INFO  [09:27:12.498] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 3/3)
## INFO  [09:27:12.807] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 1/3)
## INFO  [09:27:13.075] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 2/3)
## INFO  [09:27:13.338] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 3/3)
category <- c("total_cost_amt", "avg_valid_play_duration", "follow_author_cnt", 
              "cancel_follow_author_cnt", "follow_user_cnt", "join_fans_group_cnt")
crs <- c(
  "total_cost_amt" = "Total Gifting",
  "avg_valid_play_duration" = "Avg Play Duration Per Viewer",
  "follow_author_cnt" = "New Followers",
  "cancel_follow_author_cnt" = "Lost Followers",
  "follow_user_cnt" = "Viewer-to-Viewer Follows",
  "join_fans_group_cnt" = "New Fans"
)

MS_list <- list()
for (var in category) {
  new_var <- crs[[var]]
  MS_list[[new_var]] <- get(paste0(var, "_result"))[['mod']]
  
    
  ggsave(paste0("../2.Output/DML_PK_vs_NonPK_", var, ".pdf"), plot = get(paste0(var, "_result"))[['plot']], device = "pdf", width = 16, height = 9, units = "in")
  ggsave(paste0("../2.Output/DML_PK_vs_NonPK_", var, ".png"), plot = get(paste0(var, "_result"))[['plot']], device = "png", width = 16, height = 9, dpi = 300, units = "in")
}
modelsummary(MS_list)
Total Gifting Avg Play Duration Per Viewer New Followers Lost Followers Viewer-to-Viewer Follows New Fans
LASSO -7.156 0.006 -2.306 1.360 10.021 -3.316
(6.241) (0.062) (6.248) (0.630) (6.238) (3.101)
Random Forest -6.223 0.013 -3.153 1.310 10.541 -3.148
(6.237) (0.062) (6.253) (0.631) (6.240) (3.102)
Regression Tree -7.001 0.007 -2.130 1.333 10.239 -3.333
(6.243) (0.062) (6.249) (0.630) (6.236) (3.102)
Boosted Trees -6.636 0.015 -2.487 1.402 9.164 -3.701
(6.266) (0.063) (6.250) (0.633) (6.253) (3.106)
Obs 10000 10000 10000 10000 10000 10000
save_model_summaries <- function(list, new_cate_name) {
modelsummary(list, stars = c('+' = .1, '*' = .05, '**' = .01, '***' = .001), 
             output = paste0("../2.Output/", new_cate_name, ".docx"))

title = paste0('The Impact of PK Event',
                            '\\label{tab:', new_cate_name, '}')

modelsummary(list, output = "latex", stars = c('+' = .1, '*' = .05, '**' = .01, '***' = .001),
              title = title, escape = FALSE) |>
theme_tt("resize") |>
save_tt(paste0("../2.Output/", new_cate_name, ".tex"), overwrite = TRUE)
}
save_model_summaries(MS_list, "DML_PK_vs_NonPK")

log001 (actually it is log(0.01+x))

log001_total_cost_amt_result = run_dml_plr_models(df_with_dummies, Y = "log001_total_cost_amt", D = "is_pk_live", Xs = features_base)
## INFO  [09:27:17.947] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 1/3)
## INFO  [09:27:18.027] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 2/3)
## INFO  [09:27:18.117] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 3/3)
## INFO  [09:27:18.257] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 1/3)
## INFO  [09:27:18.482] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 2/3)
## INFO  [09:27:18.734] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 3/3)
## INFO  [09:27:19.081] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 1/3)
## INFO  [09:27:19.960] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 2/3)
## INFO  [09:27:20.846] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 3/3)
## INFO  [09:27:21.817] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 1/3)
## INFO  [09:27:22.724] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 2/3)
## INFO  [09:27:23.596] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 3/3)
## INFO  [09:27:24.617] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 1/3)
## INFO  [09:27:24.656] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 2/3)
## INFO  [09:27:24.686] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 3/3)
## INFO  [09:27:24.776] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 1/3)
## INFO  [09:27:24.845] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 2/3)
## INFO  [09:27:24.900] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 3/3)
## INFO  [09:27:25.042] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 1/3)
## INFO  [09:27:25.272] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 2/3)
## INFO  [09:27:25.490] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 3/3)
## INFO  [09:27:25.773] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 1/3)
## INFO  [09:27:26.048] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 2/3)
## INFO  [09:27:26.298] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 3/3)
log001_avg_valid_play_duration_result = run_dml_plr_models(df_with_dummies, Y = "log001_avg_valid_play_duration", D = "is_pk_live", Xs = features_base)
## INFO  [09:27:26.956] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 1/3)
## INFO  [09:27:27.043] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 2/3)
## INFO  [09:27:27.123] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 3/3)
## INFO  [09:27:27.250] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 1/3)
## INFO  [09:27:27.490] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 2/3)
## INFO  [09:27:27.747] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 3/3)
## INFO  [09:27:28.094] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 1/3)
## INFO  [09:27:28.999] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 2/3)
## INFO  [09:27:30.043] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 3/3)
## INFO  [09:27:30.990] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 1/3)
## INFO  [09:27:31.868] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 2/3)
## INFO  [09:27:32.726] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 3/3)
## INFO  [09:27:33.744] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 1/3)
## INFO  [09:27:33.779] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 2/3)
## INFO  [09:27:33.812] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 3/3)
## INFO  [09:27:33.899] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 1/3)
## INFO  [09:27:33.944] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 2/3)
## INFO  [09:27:33.990] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 3/3)
## INFO  [09:27:34.121] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 1/3)
## INFO  [09:27:34.358] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 2/3)
## INFO  [09:27:34.600] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 3/3)
## INFO  [09:27:34.919] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 1/3)
## INFO  [09:27:35.185] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 2/3)
## INFO  [09:27:35.446] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 3/3)
log001_follow_author_cnt_result = run_dml_plr_models(df_with_dummies, Y = "log001_follow_author_cnt", D = "is_pk_live", Xs = features_base)
## INFO  [09:27:36.119] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 1/3)
## INFO  [09:27:36.192] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 2/3)
## INFO  [09:27:36.288] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 3/3)
## INFO  [09:27:36.420] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 1/3)
## INFO  [09:27:36.662] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 2/3)
## INFO  [09:27:36.900] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 3/3)
## INFO  [09:27:37.239] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 1/3)
## INFO  [09:27:38.157] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 2/3)
## INFO  [09:27:39.017] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 3/3)
## INFO  [09:27:39.969] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 1/3)
## INFO  [09:27:40.814] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 2/3)
## INFO  [09:27:41.720] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 3/3)
## INFO  [09:27:42.886] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 1/3)
## INFO  [09:27:42.920] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 2/3)
## INFO  [09:27:42.951] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 3/3)
## INFO  [09:27:43.047] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 1/3)
## INFO  [09:27:43.091] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 2/3)
## INFO  [09:27:43.144] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 3/3)
## INFO  [09:27:43.283] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 1/3)
## INFO  [09:27:43.551] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 2/3)
## INFO  [09:27:43.800] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 3/3)
## INFO  [09:27:44.099] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 1/3)
## INFO  [09:27:44.396] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 2/3)
## INFO  [09:27:44.686] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 3/3)
log001_cancel_follow_author_cnt_result = run_dml_plr_models(df_with_dummies, Y = "log001_cancel_follow_author_cnt", D = "is_pk_live", Xs = features_base)
## INFO  [09:27:45.429] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 1/3)
## INFO  [09:27:45.516] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 2/3)
## INFO  [09:27:45.610] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 3/3)
## INFO  [09:27:45.730] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 1/3)
## INFO  [09:27:45.979] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 2/3)
## INFO  [09:27:46.211] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 3/3)
## INFO  [09:27:46.573] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 1/3)
## INFO  [09:27:47.431] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 2/3)
## INFO  [09:27:48.325] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 3/3)
## INFO  [09:27:49.282] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 1/3)
## INFO  [09:27:50.142] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 2/3)
## INFO  [09:27:50.984] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 3/3)
## INFO  [09:27:51.996] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 1/3)
## INFO  [09:27:52.029] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 2/3)
## INFO  [09:27:52.061] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 3/3)
## INFO  [09:27:52.155] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 1/3)
## INFO  [09:27:52.199] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 2/3)
## INFO  [09:27:52.245] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 3/3)
## INFO  [09:27:52.376] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 1/3)
## INFO  [09:27:52.628] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 2/3)
## INFO  [09:27:52.878] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 3/3)
## INFO  [09:27:53.189] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 1/3)
## INFO  [09:27:53.448] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 2/3)
## INFO  [09:27:53.897] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 3/3)
log001_follow_user_cnt_result = run_dml_plr_models(df_with_dummies, Y = "log001_follow_user_cnt", D = "is_pk_live", Xs = features_base)
## INFO  [09:27:54.538] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 1/3)
## INFO  [09:27:54.613] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 2/3)
## INFO  [09:27:54.690] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 3/3)
## INFO  [09:27:54.822] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 1/3)
## INFO  [09:27:55.057] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 2/3)
## INFO  [09:27:55.288] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 3/3)
## INFO  [09:27:55.646] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 1/3)
## INFO  [09:27:56.539] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 2/3)
## INFO  [09:27:57.434] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 3/3)
## INFO  [09:27:58.401] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 1/3)
## INFO  [09:27:59.279] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 2/3)
## INFO  [09:28:00.148] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 3/3)
## INFO  [09:28:01.167] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 1/3)
## INFO  [09:28:01.203] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 2/3)
## INFO  [09:28:01.235] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 3/3)
## INFO  [09:28:01.327] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 1/3)
## INFO  [09:28:01.386] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 2/3)
## INFO  [09:28:01.432] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 3/3)
## INFO  [09:28:01.561] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 1/3)
## INFO  [09:28:01.774] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 2/3)
## INFO  [09:28:02.039] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 3/3)
## INFO  [09:28:02.313] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 1/3)
## INFO  [09:28:02.583] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 2/3)
## INFO  [09:28:02.839] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 3/3)
log001_join_fans_group_cnt_result = run_dml_plr_models(df_with_dummies, Y = "log001_join_fans_group_cnt", D = "is_pk_live", Xs = features_base)
## INFO  [09:28:03.491] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 1/3)
## INFO  [09:28:03.581] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 2/3)
## INFO  [09:28:03.673] [mlr3] Applying learner 'regr.cv_glmnet' on task 'nuis_l' (iter 3/3)
## INFO  [09:28:03.796] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 1/3)
## INFO  [09:28:04.047] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 2/3)
## INFO  [09:28:04.292] [mlr3] Applying learner 'classif.cv_glmnet' on task 'nuis_m' (iter 3/3)
## INFO  [09:28:04.659] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 1/3)
## INFO  [09:28:05.547] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 2/3)
## INFO  [09:28:06.423] [mlr3] Applying learner 'regr.ranger' on task 'nuis_l' (iter 3/3)
## INFO  [09:28:07.388] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 1/3)
## INFO  [09:28:08.267] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 2/3)
## INFO  [09:28:09.131] [mlr3] Applying learner 'classif.ranger' on task 'nuis_m' (iter 3/3)
## INFO  [09:28:10.184] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 1/3)
## INFO  [09:28:10.218] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 2/3)
## INFO  [09:28:10.251] [mlr3] Applying learner 'regr.rpart' on task 'nuis_l' (iter 3/3)
## INFO  [09:28:10.336] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 1/3)
## INFO  [09:28:10.390] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 2/3)
## INFO  [09:28:10.442] [mlr3] Applying learner 'classif.rpart' on task 'nuis_m' (iter 3/3)
## INFO  [09:28:10.580] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 1/3)
## INFO  [09:28:10.804] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 2/3)
## INFO  [09:28:11.035] [mlr3] Applying learner 'regr.xgboost' on task 'nuis_l' (iter 3/3)
## INFO  [09:28:11.316] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 1/3)
## INFO  [09:28:11.589] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 2/3)
## INFO  [09:28:11.840] [mlr3] Applying learner 'classif.xgboost' on task 'nuis_m' (iter 3/3)
category <- c("log001_total_cost_amt", "log001_avg_valid_play_duration", "log001_follow_author_cnt", 
              "log001_cancel_follow_author_cnt", "log001_follow_user_cnt", "log001_join_fans_group_cnt")
crs <- c(
  "log001_total_cost_amt" = "Total Gifting (log001)",
  "log001_avg_valid_play_duration" = "Avg Play Duration Per Viewer (log001)",
  "log001_follow_author_cnt" = "New Followers (log001)",
  "log001_cancel_follow_author_cnt" = "Lost Followers (log001)",
  "log001_follow_user_cnt" = "Viewer-to-Viewer Follows (log001)",
  "log001_join_fans_group_cnt" = "New Fans (log001)"
)

MS_list <- list()
for (var in category) {
  new_var <- crs[[var]]
  MS_list[[new_var]] <- get(paste0(var, "_result"))[['mod']]
  
    
  ggsave(paste0("../2.Output/DML_PK_vs_NonPK_", var, ".pdf"), plot = get(paste0(var, "_result"))[['plot']], device = "pdf", width = 16, height = 9, units = "in")
  ggsave(paste0("../2.Output/DML_PK_vs_NonPK_", var, ".png"), plot = get(paste0(var, "_result"))[['plot']], device = "png", width = 16, height = 9, dpi = 300, units = "in")
}
modelsummary(MS_list)
Total Gifting (log001) Avg Play Duration Per Viewer (log001) New Followers (log001) Lost Followers (log001) Viewer-to-Viewer Follows (log001) New Fans (log001)
LASSO -0.014 0.003 -0.029 0.027 0.026 -0.011
(0.022) (0.021) (0.023) (0.028) (0.022) (0.023)
Random Forest -0.011 0.004 -0.032 0.026 0.028 -0.011
(0.022) (0.021) (0.023) (0.028) (0.022) (0.023)
Regression Tree -0.013 0.003 -0.028 0.026 0.026 -0.012
(0.022) (0.021) (0.023) (0.028) (0.022) (0.023)
Boosted Trees -0.015 0.003 -0.036 0.027 0.024 -0.019
(0.022) (0.021) (0.023) (0.028) (0.022) (0.023)
Obs 10000 10000 10000 10000 10000 10000
save_model_summaries <- function(list, new_cate_name) {
modelsummary(list, stars = c('+' = .1, '*' = .05, '**' = .01, '***' = .001), 
             output = paste0("../2.Output/", new_cate_name, ".docx"))

title = paste0('The Impact of PK Event',
                            '\\label{tab:', new_cate_name, '}')

modelsummary(list, output = "latex", stars = c('+' = .1, '*' = .05, '**' = .01, '***' = .001),
              title = title, escape = FALSE) |>
theme_tt("resize") |>
save_tt(paste0("../2.Output/", new_cate_name, ".tex"), overwrite = TRUE)
}
save_model_summaries(MS_list, "DML_PK_vs_NonPK_log001")