rm(list=ls())
set.seed(1234)
getwd()
## [1] "C:/Users/ASUS/Desktop/_pk_live/1.DataAnalysis/0.Code"
library(dplyr)
##
## 载入程序包:'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(plm)
##
## 载入程序包:'plm'
## The following objects are masked from 'package:dplyr':
##
## between, lag, lead
library(fixest)
library(did)
library(ggplot2)
library(dplyr)
library("tidyverse")
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ lubridate 1.9.3 ✔ tibble 3.2.1
## ✔ purrr 1.0.2 ✔ tidyr 1.3.1
## ✔ readr 2.1.5
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ plm::between() masks dplyr::between()
## ✖ dplyr::filter() masks stats::filter()
## ✖ plm::lag() masks dplyr::lag(), stats::lag()
## ✖ plm::lead() masks dplyr::lead()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library("arrow")
##
## 载入程序包:'arrow'
##
## The following object is masked from 'package:lubridate':
##
## duration
##
## The following object is masked from 'package:utils':
##
## timestamp
library(data.table)
##
## 载入程序包:'data.table'
##
## The following objects are masked from 'package:lubridate':
##
## hour, isoweek, mday, minute, month, quarter, second, wday, week,
## yday, year
##
## The following object is masked from 'package:purrr':
##
## transpose
##
## The following object is masked from 'package:plm':
##
## between
##
## The following objects are masked from 'package:dplyr':
##
## between, first, last
library(modelsummary)
## `modelsummary` 2.0.0 now uses `tinytable` as its default table-drawing
## backend. Learn more at: https://vincentarelbundock.github.io/tinytable/
##
## Revert to `kableExtra` for one session:
##
## options(modelsummary_factory_default = 'kableExtra')
## options(modelsummary_factory_latex = 'kableExtra')
## options(modelsummary_factory_html = 'kableExtra')
##
## Silence this message forever:
##
## config_modelsummary(startup_message = FALSE)
library(tinytable)
setwd("C:/Users/ASUS/Desktop/_pk_live/1.DataAnalysis")
数据:2022.01.01–2024.09.01 全部的random PK pair
df = read.csv("../1.Input/Within_Random_Pk_data.csv")
cols <- c(
# 自变量 (Independent Variables)
"is_same_category",
"fan_size_pair",
# 控制变量 (Control Variables)
"gender_number",
"age_range_number",
# "author_type_number",
"fre_country_region_number",
"fre_city_level_number",
# 因变量 (Dependent Variables)
"log_avg_viewer_total_cost_amt",
"log_already_follow_other_fans_count",
"log_other_already_follow_other_fans_count",
"log_follow_author_fans_count",
"log_unfollow_author_fans_count",
"log_net_follow_fans"
)
crs <- c(
# 自变量 (Independent Variables)
"is_same_category" = "Same Category in PK",
"fan_size_pair" = "Fan Size Pair in PK",
# 控制变量 (Control Variables)
"gender_number" = "Gender",
"age_range_number" = "Age Category",
# "author_type_number" = "Streamer Type",
"fre_country_region_number" = "Region",
"fre_city_level_number" = "City Level",
# 因变量 (Dependent Variables)
"log_avg_viewer_total_cost_amt" = "Avg Gifting per Viewer (log)",
"log_already_follow_other_fans_count" = "Opponent Followers Attracted by Focal (log)",
"log_other_already_follow_other_fans_count" = "Focal Followers Attracted by Opponent (log)",
"log_follow_author_fans_count" = "New Followers Gained (log)",
"log_unfollow_author_fans_count" = "Followers Lost (log)",
"log_net_follow_fans" = "Net Follower Gain (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/Within_Random_PK_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.
df = df %>%mutate(fan_size_pair = case_when(
(before_fans_count>=10000) & (other_before_fans_count>=10000)~ 3,
(before_fans_count>=10000) & (other_before_fans_count<10000)~ 2,
(before_fans_count<10000) & (other_before_fans_count>= 10000)~ 1,
(before_fans_count<10000) & (other_before_fans_count<10000)~ 0
))
df <- df %>%
mutate(fan_size_pair = factor(fan_size_pair, level = c(0,1,2,3), labels = c("Small vs Small ", "Small vs Big", "Big vs Small", "Big vs Big")))
source("Plot_CI_function.R")
# Call the functions with your data and formula
plot_pct_change(df)
savesave <- function(p, var) {
ggsave(paste0("../2.Output/RANDOM_PK_", var, ".pdf"), plot = p, device = "pdf", width = 16, height = 9, units = "in")
ggsave(paste0("../2.Output/RANDOM_PK_", var, ".png"), plot = p, device = "png", width = 16, height = 9, dpi = 300, units = "in")
}
crs <- c(
# Independent Variables
"is_same_category" = "Same Category in PK",
"fan_size_pair" = "Fan Size Pair in PK",
# Control Variables
"gender" = "Gender",
"age_range" = "Age Category",
"author_type" = "Streamer Type",
"fre_country_region" = "Region",
"fre_city_level" = "City Level",
"log_fans_num" = "Follower 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_avg_fan_total_cost_amt" = "Avg Gifting per Follower (log)",
"log_avg_viewer_total_cost_amt" = "Avg Gifting per Viewer (log)",
"log_already_follow_other_fans_count" = "Opponent Followers Attracted by Focal (log)",
"log_other_already_follow_other_fans_count" = "Focal Followers Attracted by Opponent (log)",
"log_follow_author_fans_count" = "New Followers Gained (log)",
"log_unfollow_author_fans_count" = "Followers Lost (log)",
"log_net_follow_fans" = "Net Follower Gain (log)"
)
library(fixest)
model1 <- feols(log_avg_viewer_total_cost_amt ~ factor(fan_size_pair)*is_same_category, data = df,vcov = ~ author_id)
model1_with_ctrls <- feols(log_avg_viewer_total_cost_amt ~ factor(fan_size_pair)*is_same_category + factor(gender) + factor(age_range) +
factor(fre_country_region) + factor(fre_city_level) + factor(year) + factor(month) + factor(day),
data = df, vcov = ~ author_id)
summary(model1)
## OLS estimation, Dep. Var.: log_avg_viewer_total_cost_amt
## Observations: 187,126
## Standard-errors: Clustered (author_id)
## Estimate Std. Error
## (Intercept) 0.102593 0.001198
## factor(fan_size_pair)Small vs Big 0.189591 0.007837
## factor(fan_size_pair)Big vs Small 0.173918 0.007724
## factor(fan_size_pair)Big vs Big 0.209492 0.006955
## is_same_category 0.030984 0.002218
## factor(fan_size_pair)Small vs Big:is_same_category 0.033079 0.013099
## factor(fan_size_pair)Big vs Small:is_same_category 0.004540 0.012272
## factor(fan_size_pair)Big vs Big:is_same_category -0.026354 0.010313
## t value Pr(>|t|)
## (Intercept) 85.620070 < 2.2e-16 ***
## factor(fan_size_pair)Small vs Big 24.190809 < 2.2e-16 ***
## factor(fan_size_pair)Big vs Small 22.517194 < 2.2e-16 ***
## factor(fan_size_pair)Big vs Big 30.122494 < 2.2e-16 ***
## is_same_category 13.971806 < 2.2e-16 ***
## factor(fan_size_pair)Small vs Big:is_same_category 2.525314 0.011560 *
## factor(fan_size_pair)Big vs Small:is_same_category 0.369919 0.711443
## factor(fan_size_pair)Big vs Big:is_same_category -2.555456 0.010606 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## RMSE: 0.441278 Adj. R2: 0.031388
summary(model1_with_ctrls)
## OLS estimation, Dep. Var.: log_avg_viewer_total_cost_amt
## Observations: 187,126
## Standard-errors: Clustered (author_id)
## Estimate Std. Error
## (Intercept) 0.138408 0.029030
## factor(fan_size_pair)Small vs Big 0.139634 0.007644
## factor(fan_size_pair)Big vs Small 0.120432 0.007697
## factor(fan_size_pair)Big vs Big 0.140952 0.006996
## is_same_category 0.022379 0.002202
## factor(gender)M -0.100360 0.002077
## factor(gender)U -0.199254 0.085551
## factor(age_range)12-17 0.086268 0.010792
## factor(age_range)18-23 0.115591 0.010634
## factor(age_range)24-30 0.112304 0.010944
## factor(age_range)31-40 0.080253 0.010471
## factor(age_range)41-49 0.036146 0.010428
## factor(age_range)50+ 0.004964 0.010340
## factor(age_range)UNKNOWN 0.260665 0.013099
## factor(fre_country_region)北方 -0.066165 0.029631
## factor(fre_country_region)南方 -0.072203 0.029666
## factor(fre_city_level)二线城市 0.063810 0.013928
## factor(fre_city_level)三线城市 0.058506 0.013775
## factor(fre_city_level)四线城市 0.046747 0.013688
## factor(fre_city_level)五线城市 0.018727 0.013581
## factor(fre_city_level)新一线城市 0.078088 0.014266
## factor(fre_city_level)一线城市 0.066807 0.015195
## factor(year)2023 -0.008258 0.002662
## factor(year)2024 0.005291 0.002788
## factor(month)2 -0.011242 0.004164
## factor(month)3 -0.010680 0.004215
## factor(month)4 -0.015820 0.004246
## factor(month)5 -0.004667 0.004481
## factor(month)6 0.008091 0.005012
## factor(month)7 0.006981 0.004782
## factor(month)8 0.017130 0.004914
## factor(month)9 0.018626 0.005771
## factor(month)10 0.011181 0.005574
## factor(month)11 0.011785 0.005637
## factor(month)12 0.000608 0.005291
## factor(day)2 -0.014348 0.007968
## factor(day)3 -0.016704 0.007900
## factor(day)4 -0.012001 0.007840
## factor(day)5 -0.014832 0.007787
## factor(day)6 -0.017961 0.007908
## factor(day)7 -0.014949 0.007792
## factor(day)8 -0.011518 0.007870
## factor(day)9 -0.011219 0.008151
## factor(day)10 -0.002268 0.008117
## factor(day)11 -0.016023 0.007791
## factor(day)12 -0.014128 0.007804
## factor(day)13 -0.015629 0.007761
## factor(day)14 -0.017464 0.007845
## factor(day)15 -0.021870 0.007804
## factor(day)16 -0.012391 0.007855
## factor(day)17 -0.007735 0.007992
## factor(day)18 -0.019945 0.008054
## factor(day)19 -0.011045 0.008096
## factor(day)20 -0.003274 0.008168
## factor(day)21 -0.016592 0.008014
## factor(day)22 -0.004949 0.008144
## factor(day)23 -0.008010 0.008010
## factor(day)24 -0.007540 0.008284
## factor(day)25 -0.009744 0.008257
## factor(day)26 -0.011702 0.008033
## factor(day)27 -0.008287 0.008015
## factor(day)28 -0.004038 0.008036
## factor(day)29 -0.002727 0.008451
## factor(day)30 -0.006230 0.008426
## factor(day)31 -0.008277 0.009504
## factor(fan_size_pair)Small vs Big:is_same_category 0.023488 0.012930
## factor(fan_size_pair)Big vs Small:is_same_category -0.001104 0.012172
## factor(fan_size_pair)Big vs Big:is_same_category -0.025883 0.010223
## t value Pr(>|t|)
## (Intercept) 4.767709 1.8650e-06 ***
## factor(fan_size_pair)Small vs Big 18.266419 < 2.2e-16 ***
## factor(fan_size_pair)Big vs Small 15.646227 < 2.2e-16 ***
## factor(fan_size_pair)Big vs Big 20.148652 < 2.2e-16 ***
## is_same_category 10.163614 < 2.2e-16 ***
## factor(gender)M -48.310318 < 2.2e-16 ***
## factor(gender)U -2.329076 1.9856e-02 *
## factor(age_range)12-17 7.993476 1.3207e-15 ***
## factor(age_range)18-23 10.870305 < 2.2e-16 ***
## factor(age_range)24-30 10.261591 < 2.2e-16 ***
## factor(age_range)31-40 7.664503 1.8054e-14 ***
## factor(age_range)41-49 3.466339 5.2774e-04 ***
## factor(age_range)50+ 0.480037 6.3120e-01
## factor(age_range)UNKNOWN 19.900253 < 2.2e-16 ***
## factor(fre_country_region)北方 -2.232985 2.5551e-02 *
## factor(fre_country_region)南方 -2.433904 1.4938e-02 *
## factor(fre_city_level)二线城市 4.581256 4.6254e-06 ***
## factor(fre_city_level)三线城市 4.247075 2.1670e-05 ***
## factor(fre_city_level)四线城市 3.415288 6.3731e-04 ***
## factor(fre_city_level)五线城市 1.378968 1.6791e-01
## factor(fre_city_level)新一线城市 5.473864 4.4100e-08 ***
## factor(fre_city_level)一线城市 4.396582 1.1004e-05 ***
## factor(year)2023 -3.102094 1.9219e-03 **
## factor(year)2024 1.897862 5.7716e-02 .
## factor(month)2 -2.699582 6.9434e-03 **
## factor(month)3 -2.533562 1.1292e-02 *
## factor(month)4 -3.726071 1.9456e-04 ***
## factor(month)5 -1.041569 2.9761e-01
## factor(month)6 1.614262 1.0647e-01
## factor(month)7 1.459942 1.4431e-01
## factor(month)8 3.485849 4.9071e-04 ***
## factor(month)9 3.227481 1.2491e-03 **
## factor(month)10 2.005999 4.4858e-02 *
## factor(month)11 2.090653 3.6561e-02 *
## factor(month)12 0.114930 9.0850e-01
## factor(day)2 -1.800702 7.1752e-02 .
## factor(day)3 -2.114454 3.4478e-02 *
## factor(day)4 -1.530774 1.2583e-01
## factor(day)5 -1.904802 5.6808e-02 .
## factor(day)6 -2.271240 2.3134e-02 *
## factor(day)7 -1.918497 5.5050e-02 .
## factor(day)8 -1.463538 1.4332e-01
## factor(day)9 -1.376481 1.6867e-01
## factor(day)10 -0.279363 7.7997e-01
## factor(day)11 -2.056601 3.9726e-02 *
## factor(day)12 -1.810335 7.0246e-02 .
## factor(day)13 -2.013719 4.4041e-02 *
## factor(day)14 -2.226001 2.6016e-02 *
## factor(day)15 -2.802403 5.0730e-03 **
## factor(day)16 -1.577577 1.1466e-01
## factor(day)17 -0.967915 3.3309e-01
## factor(day)18 -2.476417 1.3272e-02 *
## factor(day)19 -1.364169 1.7252e-01
## factor(day)20 -0.400750 6.8860e-01
## factor(day)21 -2.070442 3.8413e-02 *
## factor(day)22 -0.607697 5.4339e-01
## factor(day)23 -1.000010 3.1731e-01
## factor(day)24 -0.910171 3.6273e-01
## factor(day)25 -1.179996 2.3800e-01
## factor(day)26 -1.456635 1.4522e-01
## factor(day)27 -1.033881 3.0119e-01
## factor(day)28 -0.502483 6.1533e-01
## factor(day)29 -0.322685 7.4693e-01
## factor(day)30 -0.739378 4.5968e-01
## factor(day)31 -0.870862 3.8383e-01
## factor(fan_size_pair)Small vs Big:is_same_category 1.816528 6.9291e-02 .
## factor(fan_size_pair)Big vs Small:is_same_category -0.090721 9.2771e-01
## factor(fan_size_pair)Big vs Big:is_same_category -2.531740 1.1351e-02 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## RMSE: 0.43532 Adj. R2: 0.057066
savesave(plot_predictions_with_ci(model1, df, "log_avg_viewer_total_cost_amt"), "log_avg_viewer_total_cost_amt")
# fan_size
model <- feols(log_avg_viewer_total_cost_amt ~ factor(fan_size_pair), data = df, vcov = ~author_id)
summary(model)
## OLS estimation, Dep. Var.: log_avg_viewer_total_cost_amt
## Observations: 187,126
## Standard-errors: Clustered (author_id)
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.113025 0.001037 108.9989 < 2.2e-16 ***
## factor(fan_size_pair)Small vs Big 0.203451 0.006593 30.8575 < 2.2e-16 ***
## factor(fan_size_pair)Big vs Small 0.176910 0.006384 27.7094 < 2.2e-16 ***
## factor(fan_size_pair)Big vs Big 0.201003 0.005573 36.0645 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## RMSE: 0.441556 Adj. R2: 0.030188
savesave(plot_predictions_fans(model, df, "log_avg_viewer_total_cost_amt"), "log_avg_viewer_total_cost_amt_fan_size_pair")
# category
model <- feols(log_avg_viewer_total_cost_amt ~ is_same_category, data = df,vcov = ~author_id)
summary(model)
## OLS estimation, Dep. Var.: log_avg_viewer_total_cost_amt
## Observations: 187,126
## Standard-errors: Clustered (author_id)
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.138194 0.001308 105.6180 < 2.2e-16 ***
## is_same_category 0.038982 0.002283 17.0749 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## RMSE: 0.447995 Adj. R2: 0.001711
savesave(plot_predictions_cate(model, df, "log_avg_viewer_total_cost_amt"), "log_avg_viewer_total_cost_amt_is_same_category")
# plot_coefficients(data, "log_avg_viewer_total_cost_amt")
savesave(plot_coefficients(df, "log_avg_viewer_total_cost_amt"), "log_avg_viewer_total_cost_amt_evolution")
summary(df$log_avg_viewer_total_cost_amt)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.00000 0.00000 0.00000 0.15178 0.03774 8.29425
# Call the functions with your data and formula
heatmap_plot <- plot_heatmap(
data = df,
y_var = log_avg_viewer_total_cost_amt, # Column name as a symbol
crs = crs,
limits = c(0,0.5)
)
## `summarise()` has grouped output by 'fans_new_range'. You can override using
## the `.groups` argument.
savesave(heatmap_plot, "log_avg_viewer_total_cost_amt_heatmap")
print(heatmap_plot)
# 存储OLS 结果到latex
modelsummary(list("Avg Gifting per Viewer (log)" = model1, "Avg Gifting per Viewer (log)" = model1_with_ctrls),
stars = c('+' = .1, '*' = .05, '**' = .01, '***' = .001),
coef_omit = 'gender|age_range|fre_country_region|fre_city_level|year|month|day', # Omit the specified variables
add_rows = data.frame("Control" = "Control:", "Model 1" = "No", "Model 2" = "Yes"), # Add custom row for control variables
# coef_map = crs,
title = "The Impact on Avg Gifting per Viewer (log)",
output = "latex") |>
theme_tt("resize") |>
save_tt("../2.Output/ols_avg_viewer_total_cost_amt.tex", overwrite = TRUE)
model2 <- feols(log_already_follow_other_fans_count ~ factor(fan_size_pair)*is_same_category, data = df,vcov = ~ author_id)
model2_with_ctrls <- feols(log_already_follow_other_fans_count ~ factor(fan_size_pair)*is_same_category + factor(gender) + factor(age_range) +
factor(fre_country_region) + factor(fre_city_level) + factor(year) + factor(month) + factor(day),
data = df, vcov = ~ author_id)
summary(model2)
## OLS estimation, Dep. Var.: log_already_follow_other_fans_count
## Observations: 187,126
## Standard-errors: Clustered (author_id)
## Estimate Std. Error
## (Intercept) 0.002521 0.000140
## factor(fan_size_pair)Small vs Big 0.010836 0.001431
## factor(fan_size_pair)Big vs Small 0.004956 0.000927
## factor(fan_size_pair)Big vs Big 0.032031 0.002134
## is_same_category 0.001063 0.000271
## factor(fan_size_pair)Small vs Big:is_same_category 0.003174 0.002440
## factor(fan_size_pair)Big vs Small:is_same_category -0.000312 0.001606
## factor(fan_size_pair)Big vs Big:is_same_category 0.017504 0.003920
## t value Pr(>|t|)
## (Intercept) 18.053466 < 2.2e-16 ***
## factor(fan_size_pair)Small vs Big 7.570511 3.7377e-14 ***
## factor(fan_size_pair)Big vs Small 5.347891 8.9109e-08 ***
## factor(fan_size_pair)Big vs Big 15.008200 < 2.2e-16 ***
## is_same_category 3.919948 8.8605e-05 ***
## factor(fan_size_pair)Small vs Big:is_same_category 1.301019 1.9325e-01
## factor(fan_size_pair)Big vs Small:is_same_category -0.194050 8.4614e-01
## factor(fan_size_pair)Big vs Big:is_same_category 4.465170 8.0061e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## RMSE: 0.084923 Adj. R2: 0.017542
summary(model2_with_ctrls)
## OLS estimation, Dep. Var.: log_already_follow_other_fans_count
## Observations: 187,126
## Standard-errors: Clustered (author_id)
## Estimate Std. Error
## (Intercept) 0.014668 0.010341
## factor(fan_size_pair)Small vs Big 0.009294 0.001419
## factor(fan_size_pair)Big vs Small 0.003135 0.000948
## factor(fan_size_pair)Big vs Big 0.029757 0.002143
## is_same_category 0.000756 0.000278
## factor(gender)M -0.003561 0.000372
## factor(gender)U -0.011759 0.010501
## factor(age_range)12-17 0.000490 0.001115
## factor(age_range)18-23 0.001466 0.001152
## factor(age_range)24-30 0.000264 0.001242
## factor(age_range)31-40 0.000657 0.001145
## factor(age_range)41-49 0.001595 0.001157
## factor(age_range)50+ 0.001754 0.001131
## factor(age_range)UNKNOWN -0.007637 0.002017
## factor(fre_country_region)北方 -0.012245 0.011033
## factor(fre_country_region)南方 -0.013995 0.011021
## factor(fre_city_level)二线城市 -0.000224 0.003994
## factor(fre_city_level)三线城市 -0.002057 0.003967
## factor(fre_city_level)四线城市 -0.003312 0.003955
## factor(fre_city_level)五线城市 -0.003307 0.003947
## factor(fre_city_level)新一线城市 -0.000685 0.004012
## factor(fre_city_level)一线城市 0.001233 0.004278
## factor(year)2023 0.002822 0.000478
## factor(year)2024 0.004515 0.000490
## factor(month)2 0.000723 0.000712
## factor(month)3 -0.000015 0.000724
## factor(month)4 -0.000246 0.000695
## factor(month)5 0.000885 0.000853
## factor(month)6 0.001869 0.001051
## factor(month)7 -0.000193 0.000765
## factor(month)8 0.001200 0.000827
## factor(month)9 0.001174 0.000965
## factor(month)10 0.001706 0.001025
## factor(month)11 0.002208 0.001049
## factor(month)12 0.003332 0.001173
## factor(day)2 0.001988 0.001378
## factor(day)3 0.002312 0.001422
## factor(day)4 0.000781 0.001310
## factor(day)5 0.002959 0.001551
## factor(day)6 0.002437 0.001470
## factor(day)7 -0.000367 0.001219
## factor(day)8 0.001924 0.001451
## factor(day)9 0.000792 0.001231
## factor(day)10 0.000573 0.001282
## factor(day)11 -0.000137 0.001247
## factor(day)12 0.001840 0.001410
## factor(day)13 -0.000064 0.001252
## factor(day)14 -0.000658 0.001293
## factor(day)15 0.002944 0.001714
## factor(day)16 -0.001109 0.001122
## factor(day)17 0.003414 0.001593
## factor(day)18 0.001970 0.001612
## factor(day)19 0.001171 0.001396
## factor(day)20 0.000057 0.001322
## factor(day)21 0.000892 0.001381
## factor(day)22 0.000137 0.001224
## factor(day)23 -0.000645 0.001133
## factor(day)24 -0.000470 0.001186
## factor(day)25 0.003184 0.001424
## factor(day)26 0.002147 0.001348
## factor(day)27 0.002492 0.001417
## factor(day)28 -0.000348 0.001308
## factor(day)29 -0.000639 0.001195
## factor(day)30 -0.000350 0.001238
## factor(day)31 0.000949 0.001582
## factor(fan_size_pair)Small vs Big:is_same_category 0.002965 0.002439
## factor(fan_size_pair)Big vs Small:is_same_category -0.000374 0.001613
## factor(fan_size_pair)Big vs Big:is_same_category 0.017543 0.003917
## t value Pr(>|t|)
## (Intercept) 1.418358 1.5609e-01
## factor(fan_size_pair)Small vs Big 6.550814 5.7399e-11 ***
## factor(fan_size_pair)Big vs Small 3.307445 9.4172e-04 ***
## factor(fan_size_pair)Big vs Big 13.888610 < 2.2e-16 ***
## is_same_category 2.717461 6.5792e-03 **
## factor(gender)M -9.566927 < 2.2e-16 ***
## factor(gender)U -1.119858 2.6278e-01
## factor(age_range)12-17 0.439282 6.6046e-01
## factor(age_range)18-23 1.273041 2.0301e-01
## factor(age_range)24-30 0.212525 8.3170e-01
## factor(age_range)31-40 0.573900 5.6604e-01
## factor(age_range)41-49 1.378278 1.6812e-01
## factor(age_range)50+ 1.551124 1.2087e-01
## factor(age_range)UNKNOWN -3.786696 1.5272e-04 ***
## factor(fre_country_region)北方 -1.109844 2.6707e-01
## factor(fre_country_region)南方 -1.269851 2.0414e-01
## factor(fre_city_level)二线城市 -0.056119 9.5525e-01
## factor(fre_city_level)三线城市 -0.518634 6.0402e-01
## factor(fre_city_level)四线城市 -0.837356 4.0239e-01
## factor(fre_city_level)五线城市 -0.837831 4.0213e-01
## factor(fre_city_level)新一线城市 -0.170749 8.6442e-01
## factor(fre_city_level)一线城市 0.288291 7.7312e-01
## factor(year)2023 5.901693 3.6052e-09 ***
## factor(year)2024 9.212588 < 2.2e-16 ***
## factor(month)2 1.015446 3.0990e-01
## factor(month)3 -0.021070 9.8319e-01
## factor(month)4 -0.354198 7.2319e-01
## factor(month)5 1.037078 2.9970e-01
## factor(month)6 1.779133 7.5220e-02 .
## factor(month)7 -0.251839 8.0117e-01
## factor(month)8 1.451960 1.4651e-01
## factor(month)9 1.216740 2.2371e-01
## factor(month)10 1.665366 9.5842e-02 .
## factor(month)11 2.103861 3.5392e-02 *
## factor(month)12 2.840608 4.5033e-03 **
## factor(day)2 1.442892 1.4905e-01
## factor(day)3 1.626031 1.0395e-01
## factor(day)4 0.596114 5.5110e-01
## factor(day)5 1.907205 5.6496e-02 .
## factor(day)6 1.657570 9.7406e-02 .
## factor(day)7 -0.300978 7.6343e-01
## factor(day)8 1.325862 1.8489e-01
## factor(day)9 0.643531 5.1988e-01
## factor(day)10 0.447234 6.5471e-01
## factor(day)11 -0.109606 9.1272e-01
## factor(day)12 1.304595 1.9203e-01
## factor(day)13 -0.050796 9.5949e-01
## factor(day)14 -0.508598 6.1103e-01
## factor(day)15 1.717775 8.5840e-02 .
## factor(day)16 -0.988661 3.2283e-01
## factor(day)17 2.143276 3.2092e-02 *
## factor(day)18 1.221729 2.2181e-01
## factor(day)19 0.838737 4.0162e-01
## factor(day)20 0.043141 9.6559e-01
## factor(day)21 0.645946 5.1832e-01
## factor(day)22 0.112197 9.1067e-01
## factor(day)23 -0.569359 5.6911e-01
## factor(day)24 -0.396520 6.9172e-01
## factor(day)25 2.235639 2.5377e-02 *
## factor(day)26 1.592216 1.1134e-01
## factor(day)27 1.759024 7.8575e-02 .
## factor(day)28 -0.266076 7.9018e-01
## factor(day)29 -0.534520 5.9298e-01
## factor(day)30 -0.282612 7.7747e-01
## factor(day)31 0.600045 5.4848e-01
## factor(fan_size_pair)Small vs Big:is_same_category 1.215893 2.2403e-01
## factor(fan_size_pair)Big vs Small:is_same_category -0.232040 8.1651e-01
## factor(fan_size_pair)Big vs Big:is_same_category 4.478907 7.5079e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## RMSE: 0.084856 Adj. R2: 0.018784
savesave(plot_predictions_with_ci(model2,df, "log_already_follow_other_fans_count"), "log_already_follow_other_fans_count")
#
model <- feols(log_already_follow_other_fans_count ~ factor(fan_size_pair), data = df, vcov = ~author_id)
summary(model)
## OLS estimation, Dep. Var.: log_already_follow_other_fans_count
## Observations: 187,126
## Standard-errors: Clustered (author_id)
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.002879 0.000122 23.61571 < 2.2e-16 ***
## factor(fan_size_pair)Small vs Big 0.012085 0.001167 10.35895 < 2.2e-16 ***
## factor(fan_size_pair)Big vs Small 0.004882 0.000758 6.43631 1.2277e-10 ***
## factor(fan_size_pair)Big vs Big 0.039464 0.001878 21.01515 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## RMSE: 0.084967 Adj. R2: 0.016546
savesave(plot_predictions_fans(model, df, "log_already_follow_other_fans_count"), "log_already_follow_other_fans_count_fan_size_pair")
#
model <- feols(log_already_follow_other_fans_count ~ is_same_category, data = df,vcov = ~author_id)
summary(model)
## OLS estimation, Dep. Var.: log_already_follow_other_fans_count
## Observations: 187,126
## Standard-errors: Clustered (author_id)
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.005774 0.000218 26.53756 < 2.2e-16 ***
## is_same_category 0.003965 0.000463 8.56617 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## RMSE: 0.085658 Adj. R2: 4.809e-4
savesave(plot_predictions_cate(model, df, "log_already_follow_other_fans_count"), "log_already_follow_other_fans_count_is_same_category")
# plot_coefficients(data, "log_already_follow_other_fans_count")
savesave(plot_coefficients(df, "log_already_follow_other_fans_count"), "log_already_follow_other_fans_count_evolution")
# Call the functions with your data and formula
heatmap_plot <- plot_heatmap(
data = df,
y_var = log_already_follow_other_fans_count, # Column name as a symbol
crs = crs,
limits = c(0,0.5)
)
## `summarise()` has grouped output by 'fans_new_range'. You can override using
## the `.groups` argument.
savesave(heatmap_plot, "log_already_follow_other_fans_count_heatmap")
print(heatmap_plot)
modelsummary(
list(
"Opponent Followers Attracted by Focal (log)" = model2,
"Opponent Followers Attracted by Focal (log)" = model2_with_ctrls
),
stars = c('+' = .1, '*' = .05, '**' = .01, '***' = .001),
coef_omit = 'gender|age_range|fre_country_region|fre_city_level|year|month|day', # Omit the specified variables
add_rows = data.frame("Control" = "Control:", "Model 1" = "No", "Model 2" = "Yes"), # Add custom row for control variables
title = "The Impact on Opponent Followers Attracted by Focal (log)",
output = "latex"
) |>
theme_tt("resize") |>
save_tt("../2.Output/ols_already_follow_other_fans_count.tex", overwrite = TRUE)
# 存储OLS 结果到latex
modelsummary(list("Opponent Followers Attracted by Focal (log)" = model2, "Opponent Followers Attracted by Focal (log)" = model2_with_ctrls),
stars = c('+' = .1, '*' = .05, '**' = .01, '***' = .001),
# coef_map = crs,
coef_omit = 'gender|age_range|fre_country_region|fre_city_level|year|month|day', # Omit the specified variables
add_rows = data.frame("Control" = "Control:", "Model 1" = "No", "Model 2" = "Yes"), # Add custom row for control variables
title = "The Impact on Opponent Followers Attracted by Focal (log)",
output = "latex") |>
theme_tt("resize") |>
save_tt("../2.Output/ols_already_follow_other_fans_count.tex", overwrite = TRUE)
model3 <- feols(log_other_already_follow_other_fans_count ~ factor(fan_size_pair)*is_same_category, data = df,vcov = ~ author_id)
model3_with_ctrls <- feols(log_other_already_follow_other_fans_count ~ factor(fan_size_pair)*is_same_category + factor(gender) + factor(age_range) +
factor(fre_country_region) + factor(fre_city_level) + factor(year) + factor(month) + factor(day),
data = df, vcov = ~ author_id)
summary(model3)
## OLS estimation, Dep. Var.: log_other_already_follow_other_fans_count
## Observations: 187,126
## Standard-errors: Clustered (author_id)
## Estimate Std. Error
## (Intercept) 0.002605 0.000139
## factor(fan_size_pair)Small vs Big 0.005623 0.000989
## factor(fan_size_pair)Big vs Small 0.008615 0.001276
## factor(fan_size_pair)Big vs Big 0.033566 0.002336
## is_same_category 0.000924 0.000270
## factor(fan_size_pair)Small vs Big:is_same_category 0.001306 0.001820
## factor(fan_size_pair)Big vs Small:is_same_category 0.006098 0.002285
## factor(fan_size_pair)Big vs Big:is_same_category 0.016606 0.003999
## t value Pr(>|t|)
## (Intercept) 18.754614 < 2.2e-16 ***
## factor(fan_size_pair)Small vs Big 5.685753 1.3047e-08 ***
## factor(fan_size_pair)Big vs Small 6.750289 1.4806e-11 ***
## factor(fan_size_pair)Big vs Big 14.371513 < 2.2e-16 ***
## is_same_category 3.424468 6.1616e-04 ***
## factor(fan_size_pair)Small vs Big:is_same_category 0.717307 4.7319e-01
## factor(fan_size_pair)Big vs Small:is_same_category 2.668675 7.6159e-03 **
## factor(fan_size_pair)Big vs Big:is_same_category 4.152754 3.2867e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## RMSE: 0.086662 Adj. R2: 0.017588
summary(model3_with_ctrls)
## OLS estimation, Dep. Var.: log_other_already_follow_other_fans_count
## Observations: 187,126
## Standard-errors: Clustered (author_id)
## Estimate Std. Error
## (Intercept) 0.001024 0.006692
## factor(fan_size_pair)Small vs Big 0.004685 0.000996
## factor(fan_size_pair)Big vs Small 0.007665 0.001294
## factor(fan_size_pair)Big vs Big 0.032212 0.002339
## is_same_category 0.000637 0.000276
## factor(gender)M -0.000854 0.000390
## factor(gender)U -0.003478 0.006871
## factor(age_range)12-17 0.000640 0.000376
## factor(age_range)18-23 0.001887 0.000481
## factor(age_range)24-30 0.002803 0.000754
## factor(age_range)31-40 0.001216 0.000480
## factor(age_range)41-49 0.000936 0.000477
## factor(age_range)50+ 0.001878 0.000439
## factor(age_range)UNKNOWN -0.003022 0.001587
## factor(fre_country_region)北方 -0.007685 0.006649
## factor(fre_country_region)南方 -0.008771 0.006640
## factor(fre_city_level)二线城市 0.004414 0.000779
## factor(fre_city_level)三线城市 0.003399 0.000666
## factor(fre_city_level)四线城市 0.003122 0.000600
## factor(fre_city_level)五线城市 0.003074 0.000530
## factor(fre_city_level)新一线城市 0.004607 0.000873
## factor(fre_city_level)一线城市 0.009075 0.002000
## factor(year)2023 0.003908 0.000482
## factor(year)2024 0.005123 0.000493
## factor(month)2 0.001192 0.000774
## factor(month)3 0.000266 0.000774
## factor(month)4 0.001100 0.000794
## factor(month)5 0.001023 0.000894
## factor(month)6 0.000396 0.001008
## factor(month)7 -0.000360 0.000871
## factor(month)8 -0.000192 0.000847
## factor(month)9 0.000513 0.000998
## factor(month)10 0.003120 0.001104
## factor(month)11 0.004260 0.001209
## factor(month)12 0.003426 0.001236
## factor(day)2 0.001972 0.001493
## factor(day)3 0.001363 0.001267
## factor(day)4 -0.000181 0.001299
## factor(day)5 0.002585 0.001484
## factor(day)6 0.001296 0.001429
## factor(day)7 0.000290 0.001333
## factor(day)8 0.000408 0.001367
## factor(day)9 0.001269 0.001321
## factor(day)10 0.001832 0.001366
## factor(day)11 0.001754 0.001395
## factor(day)12 0.002408 0.001405
## factor(day)13 -0.000505 0.001245
## factor(day)14 0.001259 0.001391
## factor(day)15 0.002884 0.001734
## factor(day)16 0.001331 0.001301
## factor(day)17 0.001254 0.001565
## factor(day)18 0.001864 0.001544
## factor(day)19 0.002194 0.001454
## factor(day)20 0.000440 0.001371
## factor(day)21 0.000487 0.001342
## factor(day)22 0.001827 0.001425
## factor(day)23 0.001330 0.001373
## factor(day)24 0.002107 0.001482
## factor(day)25 0.000516 0.001350
## factor(day)26 0.001286 0.001339
## factor(day)27 0.001564 0.001400
## factor(day)28 0.000998 0.001397
## factor(day)29 0.002541 0.001628
## factor(day)30 0.002313 0.001470
## factor(day)31 0.002295 0.001598
## factor(fan_size_pair)Small vs Big:is_same_category 0.001354 0.001826
## factor(fan_size_pair)Big vs Small:is_same_category 0.006163 0.002281
## factor(fan_size_pair)Big vs Big:is_same_category 0.016715 0.003998
## t value Pr(>|t|)
## (Intercept) 0.153090 8.7833e-01
## factor(fan_size_pair)Small vs Big 4.705562 2.5338e-06 ***
## factor(fan_size_pair)Big vs Small 5.923936 3.1498e-09 ***
## factor(fan_size_pair)Big vs Big 13.770113 < 2.2e-16 ***
## is_same_category 2.311239 2.0821e-02 *
## factor(gender)M -2.188602 2.8627e-02 *
## factor(gender)U -0.506241 6.1269e-01
## factor(age_range)12-17 1.704134 8.8358e-02 .
## factor(age_range)18-23 3.925004 8.6765e-05 ***
## factor(age_range)24-30 3.719284 1.9986e-04 ***
## factor(age_range)31-40 2.535959 1.1215e-02 *
## factor(age_range)41-49 1.961047 4.9875e-02 *
## factor(age_range)50+ 4.281989 1.8534e-05 ***
## factor(age_range)UNKNOWN -1.904440 5.6855e-02 .
## factor(fre_country_region)北方 -1.155862 2.4774e-01
## factor(fre_country_region)南方 -1.320867 1.8655e-01
## factor(fre_city_level)二线城市 5.668051 1.4468e-08 ***
## factor(fre_city_level)三线城市 5.106457 3.2864e-07 ***
## factor(fre_city_level)四线城市 5.204449 1.9482e-07 ***
## factor(fre_city_level)五线城市 5.797283 6.7526e-09 ***
## factor(fre_city_level)新一线城市 5.277927 1.3083e-07 ***
## factor(fre_city_level)一线城市 4.538004 5.6831e-06 ***
## factor(year)2023 8.108298 5.1698e-16 ***
## factor(year)2024 10.390225 < 2.2e-16 ***
## factor(month)2 1.540964 1.2333e-01
## factor(month)3 0.343730 7.3105e-01
## factor(month)4 1.385911 1.6578e-01
## factor(month)5 1.144452 2.5244e-01
## factor(month)6 0.392762 6.9450e-01
## factor(month)7 -0.412917 6.7967e-01
## factor(month)8 -0.227059 8.2038e-01
## factor(month)9 0.514251 6.0708e-01
## factor(month)10 2.826222 4.7106e-03 **
## factor(month)11 3.522779 4.2717e-04 ***
## factor(month)12 2.771803 5.5753e-03 **
## factor(day)2 1.320537 1.8666e-01
## factor(day)3 1.075714 2.8206e-01
## factor(day)4 -0.139317 8.8920e-01
## factor(day)5 1.741738 8.1556e-02 .
## factor(day)6 0.907356 3.6422e-01
## factor(day)7 0.217588 8.2775e-01
## factor(day)8 0.298468 7.6535e-01
## factor(day)9 0.960702 3.3670e-01
## factor(day)10 1.341355 1.7981e-01
## factor(day)11 1.256814 2.0882e-01
## factor(day)12 1.713932 8.6543e-02 .
## factor(day)13 -0.405155 6.8536e-01
## factor(day)14 0.905393 3.6526e-01
## factor(day)15 1.663245 9.6265e-02 .
## factor(day)16 1.022769 3.0642e-01
## factor(day)17 0.801606 4.2278e-01
## factor(day)18 1.207420 2.2727e-01
## factor(day)19 1.509237 1.3124e-01
## factor(day)20 0.320944 7.4825e-01
## factor(day)21 0.363207 7.1645e-01
## factor(day)22 1.282305 1.9974e-01
## factor(day)23 0.968872 3.3261e-01
## factor(day)24 1.421631 1.5514e-01
## factor(day)25 0.382325 7.0222e-01
## factor(day)26 0.960994 3.3656e-01
## factor(day)27 1.117185 2.6392e-01
## factor(day)28 0.714312 4.7504e-01
## factor(day)29 1.560816 1.1857e-01
## factor(day)30 1.573452 1.1562e-01
## factor(day)31 1.435810 1.5106e-01
## factor(fan_size_pair)Small vs Big:is_same_category 0.741860 4.5817e-01
## factor(fan_size_pair)Big vs Small:is_same_category 2.701467 6.9042e-03 **
## factor(fan_size_pair)Big vs Big:is_same_category 4.180666 2.9081e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## RMSE: 0.086613 Adj. R2: 0.018395
savesave(plot_predictions_with_ci(model3, df, "log_other_already_follow_other_fans_count"), "log_other_already_follow_other_fans_count")
#
model <- feols(log_other_already_follow_other_fans_count ~ factor(fan_size_pair), data = df, vcov = ~author_id)
summary(model)
## OLS estimation, Dep. Var.: log_other_already_follow_other_fans_count
## Observations: 187,126
## Standard-errors: Clustered (author_id)
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.002916 0.000121 24.13329 < 2.2e-16 ***
## factor(fan_size_pair)Small vs Big 0.006158 0.000845 7.28617 3.2038e-13 ***
## factor(fan_size_pair)Big vs Small 0.010958 0.001085 10.09931 < 2.2e-16 ***
## factor(fan_size_pair)Big vs Big 0.040611 0.001966 20.65299 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## RMSE: 0.086703 Adj. R2: 0.016676
savesave(plot_predictions_fans(model, df, "log_other_already_follow_other_fans_count"), "log_other_already_follow_other_fans_count_fan_size_pair")
#
model <- feols(log_other_already_follow_other_fans_count ~ is_same_category, data = df,vcov = ~author_id)
summary(model)
## OLS estimation, Dep. Var.: log_other_already_follow_other_fans_count
## Observations: 187,126
## Standard-errors: Clustered (author_id)
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.005884 0.000227 25.95738 < 2.2e-16 ***
## is_same_category 0.004042 0.000466 8.67741 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## RMSE: 0.087415 Adj. R2: 4.797e-4
savesave(plot_predictions_cate(model, df, "log_other_already_follow_other_fans_count"), "log_other_already_follow_other_fans_count_is_same_category")
# plot_coefficients(data, "log_other_already_follow_other_fans_count")
savesave(plot_coefficients(df, "log_other_already_follow_other_fans_count"), "log_other_already_follow_other_fans_count_evolution")
# Call the functions with your data and formula
heatmap_plot <- plot_heatmap(
data = df,
y_var = log_other_already_follow_other_fans_count, # Column name as a symbol
crs = crs,
limits = c(0,0.5)
)
## `summarise()` has grouped output by 'fans_new_range'. You can override using
## the `.groups` argument.
savesave(heatmap_plot, "log_other_already_follow_other_fans_count_heatmap")
# Display the plot
print(heatmap_plot)
# 存储OLS 结果到latex
modelsummary(list("Focal Followers Attracted by Opponent (log)" = model3, "Focal Followers Attracted by Opponent (log)" = model3_with_ctrls),
stars = c('+' = .1, '*' = .05, '**' = .01, '***' = .001),
# coef_map = crs,
coef_omit = 'gender|age_range|fre_country_region|fre_city_level|year|month|day', # Omit the specified variables
add_rows = data.frame("Control" = "Control:", "Model 1" = "No", "Model 2" = "Yes"), # Add custom row for control variables
title = "The Impact on Focal Followers Attracted by Opponent (log)",
output = "latex") |>
theme_tt("resize") |>
save_tt("../2.Output/ols_other_already_follow_other_fans_count.tex", overwrite = TRUE)
modelsummary(
list(
"Opponent Followers Attracted by Focal (log)" = model2,
"Opponent Followers Attracted by Focal (log)" = model2_with_ctrls,
"Focal Followers Attracted by Opponent (log)" = model3,
"Focal Followers Attracted by Opponent (log)" = model3_with_ctrls
),
stars = c('+' = .1, '*' = .05, '**' = .01, '***' = .001),
coef_omit = 'gender|age_range|fre_country_region|fre_city_level|year|month|day', # Omit the specified variables
add_rows = data.frame(
"Control" = "Control:",
"Model 1" = "No",
"Model 2" = "Yes",
"Model 3" = "No",
"Model 4" = "Yes"
), # Add custom row for control variables
title = "The Impact on Followers Change between Streamers (log)",
output = "latex"
) |>
theme_tt("resize") |>
save_tt("../2.Output/ols_fans_change_between_streamer.tex", overwrite = TRUE)
model6 <- feols(log_net_follow_fans ~ factor(fan_size_pair)*is_same_category, data = df,vcov = ~ author_id)
model6_with_ctrls <- feols(log_net_follow_fans ~ factor(fan_size_pair)*is_same_category + factor(gender) + factor(age_range) +
factor(fre_country_region) + factor(fre_city_level) + factor(year) + factor(month) + factor(day),
data = df, vcov = ~ author_id)
summary(model6)
## OLS estimation, Dep. Var.: log_net_follow_fans
## Observations: 187,126
## Standard-errors: Clustered (author_id)
## Estimate Std. Error
## (Intercept) 6.427059 0.000025
## factor(fan_size_pair)Small vs Big 0.001704 0.000344
## factor(fan_size_pair)Big vs Small 0.002958 0.000374
## factor(fan_size_pair)Big vs Big 0.003373 0.000886
## is_same_category -0.000128 0.000036
## factor(fan_size_pair)Small vs Big:is_same_category 0.000134 0.000451
## factor(fan_size_pair)Big vs Small:is_same_category -0.001601 0.000443
## factor(fan_size_pair)Big vs Big:is_same_category 0.001992 0.001266
## t value Pr(>|t|)
## (Intercept) 260660.968018 < 2.2e-16 ***
## factor(fan_size_pair)Small vs Big 4.957315 7.1548e-07 ***
## factor(fan_size_pair)Big vs Small 7.901519 2.7729e-15 ***
## factor(fan_size_pair)Big vs Big 3.806110 1.4122e-04 ***
## is_same_category -3.539554 4.0092e-04 ***
## factor(fan_size_pair)Small vs Big:is_same_category 0.296478 7.6687e-01
## factor(fan_size_pair)Big vs Small:is_same_category -3.613976 3.0163e-04 ***
## factor(fan_size_pair)Big vs Big:is_same_category 1.573231 1.1567e-01
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## RMSE: 0.025394 Adj. R2: 0.002646
summary(model6_with_ctrls)
## OLS estimation, Dep. Var.: log_net_follow_fans
## Observations: 187,126
## Standard-errors: Clustered (author_id)
## Estimate Std. Error
## (Intercept) 6.430924 0.003565
## factor(fan_size_pair)Small vs Big 0.001488 0.000354
## factor(fan_size_pair)Big vs Small 0.002701 0.000375
## factor(fan_size_pair)Big vs Big 0.002999 0.000894
## is_same_category -0.000134 0.000039
## factor(gender)M -0.000057 0.000155
## factor(gender)U -0.004254 0.003633
## factor(age_range)12-17 -0.000092 0.000114
## factor(age_range)18-23 0.000175 0.000136
## factor(age_range)24-30 0.000411 0.000206
## factor(age_range)31-40 0.000443 0.000140
## factor(age_range)41-49 0.000190 0.000168
## factor(age_range)50+ -0.000126 0.000155
## factor(age_range)UNKNOWN -0.000313 0.000464
## factor(fre_country_region)北方 -0.004368 0.003592
## factor(fre_country_region)南方 -0.004928 0.003586
## factor(fre_city_level)二线城市 0.000154 0.000349
## factor(fre_city_level)三线城市 0.000525 0.000233
## factor(fre_city_level)四线城市 0.000169 0.000216
## factor(fre_city_level)五线城市 0.000074 0.000214
## factor(fre_city_level)新一线城市 0.000826 0.000285
## factor(fre_city_level)一线城市 0.001006 0.000375
## factor(year)2023 0.000613 0.000111
## factor(year)2024 0.000630 0.000125
## factor(month)2 -0.000367 0.000267
## factor(month)3 -0.000151 0.000189
## factor(month)4 -0.000250 0.000174
## factor(month)5 -0.000251 0.000211
## factor(month)6 -0.000079 0.000226
## factor(month)7 -0.000231 0.000210
## factor(month)8 0.000022 0.000226
## factor(month)9 -0.000040 0.000219
## factor(month)10 -0.000211 0.000213
## factor(month)11 -0.000110 0.000236
## factor(month)12 -0.000575 0.000660
## factor(day)2 -0.000064 0.000222
## factor(day)3 0.000217 0.000291
## factor(day)4 -0.000231 0.000212
## factor(day)5 0.000601 0.000334
## factor(day)6 0.000211 0.000393
## factor(day)7 -0.000269 0.000215
## factor(day)8 0.000203 0.000304
## factor(day)9 -0.000238 0.000223
## factor(day)10 -0.000099 0.000234
## factor(day)11 0.000047 0.000257
## factor(day)12 0.000084 0.000294
## factor(day)13 -0.000176 0.000212
## factor(day)14 -0.000066 0.000226
## factor(day)15 0.000535 0.000397
## factor(day)16 -0.000071 0.000227
## factor(day)17 0.000144 0.000262
## factor(day)18 -0.000066 0.000229
## factor(day)19 0.000310 0.000288
## factor(day)20 0.000113 0.000352
## factor(day)21 -0.001490 0.001289
## factor(day)22 -0.000054 0.000211
## factor(day)23 0.000272 0.000362
## factor(day)24 0.000028 0.000256
## factor(day)25 0.000577 0.000387
## factor(day)26 0.000578 0.000325
## factor(day)27 0.000301 0.000317
## factor(day)28 0.000303 0.000355
## factor(day)29 -0.000234 0.000281
## factor(day)30 0.000180 0.000266
## factor(day)31 0.000816 0.000545
## factor(fan_size_pair)Small vs Big:is_same_category 0.000112 0.000448
## factor(fan_size_pair)Big vs Small:is_same_category -0.001645 0.000443
## factor(fan_size_pair)Big vs Big:is_same_category 0.001996 0.001266
## t value Pr(>|t|)
## (Intercept) 1803.859709 < 2.2e-16 ***
## factor(fan_size_pair)Small vs Big 4.204264 2.6208e-05 ***
## factor(fan_size_pair)Big vs Small 7.210300 5.6078e-13 ***
## factor(fan_size_pair)Big vs Big 3.353884 7.9705e-04 ***
## is_same_category -3.452381 5.5581e-04 ***
## factor(gender)M -0.364325 7.1562e-01
## factor(gender)U -1.170808 2.4168e-01
## factor(age_range)12-17 -0.807078 4.1962e-01
## factor(age_range)18-23 1.287294 1.9799e-01
## factor(age_range)24-30 1.994299 4.6121e-02 *
## factor(age_range)31-40 3.161707 1.5688e-03 **
## factor(age_range)41-49 1.129966 2.5849e-01
## factor(age_range)50+ -0.810499 4.1765e-01
## factor(age_range)UNKNOWN -0.673966 5.0033e-01
## factor(fre_country_region)北方 -1.215910 2.2402e-01
## factor(fre_country_region)南方 -1.374081 1.6942e-01
## factor(fre_city_level)二线城市 0.441851 6.5860e-01
## factor(fre_city_level)三线城市 2.251692 2.4343e-02 *
## factor(fre_city_level)四线城市 0.783708 4.3321e-01
## factor(fre_city_level)五线城市 0.347212 7.2843e-01
## factor(fre_city_level)新一线城市 2.897994 3.7561e-03 **
## factor(fre_city_level)一线城市 2.686207 7.2276e-03 **
## factor(year)2023 5.516986 3.4540e-08 ***
## factor(year)2024 5.060655 4.1829e-07 ***
## factor(month)2 -1.373688 1.6954e-01
## factor(month)3 -0.799690 4.2389e-01
## factor(month)4 -1.438450 1.5031e-01
## factor(month)5 -1.190412 2.3389e-01
## factor(month)6 -0.350286 7.2612e-01
## factor(month)7 -1.101107 2.7085e-01
## factor(month)8 0.096310 9.2327e-01
## factor(month)9 -0.183758 8.5420e-01
## factor(month)10 -0.989451 3.2244e-01
## factor(month)11 -0.465102 6.4186e-01
## factor(month)12 -0.871715 3.8337e-01
## factor(day)2 -0.286402 7.7457e-01
## factor(day)3 0.745730 4.5583e-01
## factor(day)4 -1.092169 2.7476e-01
## factor(day)5 1.800471 7.1788e-02 .
## factor(day)6 0.537179 5.9114e-01
## factor(day)7 -1.251600 2.1072e-01
## factor(day)8 0.666425 5.0514e-01
## factor(day)9 -1.066248 2.8631e-01
## factor(day)10 -0.423957 6.7160e-01
## factor(day)11 0.180934 8.5642e-01
## factor(day)12 0.284929 7.7570e-01
## factor(day)13 -0.829223 4.0698e-01
## factor(day)14 -0.292544 7.6987e-01
## factor(day)15 1.346695 1.7808e-01
## factor(day)16 -0.311335 7.5555e-01
## factor(day)17 0.548857 5.8310e-01
## factor(day)18 -0.287049 7.7408e-01
## factor(day)19 1.075782 2.8203e-01
## factor(day)20 0.320973 7.4823e-01
## factor(day)21 -1.155953 2.4770e-01
## factor(day)22 -0.256276 7.9774e-01
## factor(day)23 0.752572 4.5171e-01
## factor(day)24 0.109042 9.1317e-01
## factor(day)25 1.490685 1.3605e-01
## factor(day)26 1.779456 7.5167e-02 .
## factor(day)27 0.951417 3.4139e-01
## factor(day)28 0.854526 3.9282e-01
## factor(day)29 -0.831068 4.0594e-01
## factor(day)30 0.676984 4.9842e-01
## factor(day)31 1.496503 1.3452e-01
## factor(fan_size_pair)Small vs Big:is_same_category 0.249264 8.0316e-01
## factor(fan_size_pair)Big vs Small:is_same_category -3.713456 2.0452e-04 ***
## factor(fan_size_pair)Big vs Big:is_same_category 1.577017 1.1479e-01
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## RMSE: 0.025385 Adj. R2: 0.003003
savesave(plot_predictions_with_ci(model6, df, "log_net_follow_fans"), "log_net_follow_fans")
#
model <- feols(log_net_follow_fans ~ factor(fan_size_pair), data = df, vcov = ~author_id)
summary(model)
## OLS estimation, Dep. Var.: log_net_follow_fans
## Observations: 187,126
## Standard-errors: Clustered (author_id)
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 6.427016 0.000019 344554.58703 < 2.2e-16
## factor(fan_size_pair)Small vs Big 0.001749 0.000241 7.24468 4.3544e-13
## factor(fan_size_pair)Big vs Small 0.002348 0.000254 9.24193 < 2.2e-16
## factor(fan_size_pair)Big vs Big 0.004198 0.000642 6.54471 5.9794e-11
##
## (Intercept) ***
## factor(fan_size_pair)Small vs Big ***
## factor(fan_size_pair)Big vs Small ***
## factor(fan_size_pair)Big vs Big ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## RMSE: 0.025396 Adj. R2: 0.002491
savesave(plot_predictions_fans(model, df, "log_net_follow_fans"), "log_net_follow_fans_fan_size_pair")
#
model <- feols(log_net_follow_fans ~ is_same_category, data = df,vcov = ~author_id)
summary(model)
## OLS estimation, Dep. Var.: log_net_follow_fans
## Observations: 187,126
## Standard-errors: Clustered (author_id)
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 6.427566 0.000074 86407.955603 < 2.2e-16 ***
## is_same_category 0.000105 0.000122 0.861757 0.38882
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## RMSE: 0.025428 Adj. R2: -1.485e-6
savesave(plot_predictions_cate(model, df, "log_net_follow_fans"), "log_net_follow_fans_is_same_category")
# plot_coefficients(data, "log_net_follow_fans")
savesave(plot_coefficients(df, "log_net_follow_fans"), "log_net_follow_fans_evolution")
summary(df$log_net_follow_fans)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.000 6.426 6.426 6.428 6.426 8.005
# Call the functions with your data and formula
heatmap_plot <- plot_heatmap(
data = df,
y_var = log_net_follow_fans, # Column name as a symbol
crs = crs,
limits = c(6,8)
)
## `summarise()` has grouped output by 'fans_new_range'. You can override using
## the `.groups` argument.
savesave(heatmap_plot, "log_net_follow_fans_heatmap")
# Display the plot
print(heatmap_plot)
# 存储OLS 结果到latex
modelsummary(list("Net Follower Gain (log)" = model6, "Net Follower Gain (log)" = model6_with_ctrls),
stars = c('+' = .1, '*' = .05, '**' = .01, '***' = .001),
coef_omit = 'gender|age_range|fre_country_region|fre_city_level|year|month|day', # Omit the specified variables
add_rows = data.frame("Control" = "Control:", "Model 1" = "No", "Model 2" = "Yes"), # Add custom row for control variables
# coef_map = crs,
title = "The Impact on Net Follower Gain (log)",
output = "latex") |>
theme_tt("resize") |>
save_tt("../2.Output/ols_net_follow_fans.tex", overwrite = TRUE)
modelsummary(
list(
"New Followers Gained (log)" = model4,
"New Followers Gained (log)" = model4_with_ctrls,
"Followers Lost (log)" = model5,
"Followers Lost (log)" = model5_with_ctrls,
"Net Follower Gain (log)" = model6,
"Net Follower Gain (log)" = model6_with_ctrls
),
coef_omit = 'gender|age_range|fre_country_region|fre_city_level|year|month|day', # Omit specified variables
add_rows = data.frame(
"Control" = "Control:",
"Model 1" = "No",
"Model 2" = "Yes",
"Model 3" = "No",
"Model 4" = "Yes",
"Model 5" = "No",
"Model 6" = "Yes"
), # Add custom row for control variables
stars = c('+' = .1, '*' = .05, '**' = .01, '***' = .001),
title = "The Impact on Follower Change (log)",
output = "latex"
) |>
theme_tt("resize") |>
save_tt("../2.Output/ols_fans_change.tex", overwrite = TRUE)