24_deb_pkg_gov/R/popRDDAnalyssis.R

101 lines
4.9 KiB
R
Raw Normal View History

2024-05-07 23:40:38 +00:00
library(tidyverse)
library(plyr)
library(stringr)
try(setwd(dirname(rstudioapi::getActiveDocumentContext()$path)))
#load in data
2024-06-24 14:06:30 +00:00
full_df <- read_csv("../final_data/deb_full_data.csv")
2024-05-07 23:40:38 +00:00
contrib_df <- read_csv("../final_data/deb_contrib_pop_change.csv")
readme_df <- read_csv("../final_data/deb_readme_pop_change.csv")
2024-06-24 14:06:30 +00:00
contrib_df <- merge(full_df, contrib_df, by="upstream_vcs_link")
readme_df <- merge(full_df, readme_df, by="upstream_vcs_link")
# age is calculated against December 11, 2023
contrib_df <- contrib_df |>
mutate(start_date = as.Date("2023-12-11") - age_of_project) |>
mutate(event_date_days =
as.numeric(
difftime(as.POSIXct("2024-06-24 00:00:00", format = "%Y-%m-%d %H:%M:%S"),
as.POSIXct(event_date, format = "%Y-%m-%d %H:%M:%S"),
units = "days")))
readme_df <- readme_df |>
mutate(start_date = as.Date("2023-12-11") - age_of_project) |>
mutate(event_date_days =
as.numeric(
difftime(as.POSIXct("2024-06-24 00:00:00", format = "%Y-%m-%d %H:%M:%S"),
as.POSIXct(event_date, format = "%Y-%m-%d %H:%M:%S"),
units = "days")))
2024-05-07 23:40:38 +00:00
#some expansion needs to happens for each project
expand_timeseries <- function(project_row) {
longer <- project_row |>
pivot_longer(cols = ends_with("new"),
names_to = "window",
values_to = "count") |>
unnest(count) |>
mutate(after_doc = as.numeric(str_detect(window, "after"))) |>
mutate(is_collab = as.numeric(str_detect(window, "collab")))
return(longer)
}
expanded_readme_data <- expand_timeseries(readme_df[1,])
for (i in 2:nrow(readme_df)){
expanded_readme_data <- rbind(expanded_readme_data, expand_timeseries(readme_df[i,]))
}
expanded_contrib_data <- expand_timeseries(contrib_df[1,])
for (i in 2:nrow(contrib_df)){
expanded_contrib_data <- rbind(expanded_contrib_data, expand_timeseries(contrib_df[i,]))
}
expanded_readme_data$log1pcount <- log1p(expanded_readme_data$count)
expanded_contrib_data$log1pcount <- log1p(expanded_contrib_data$count)
expanded_readme_data$logcount <- log(expanded_readme_data$count)
expanded_contrib_data$logcount <- log(expanded_contrib_data$count)
#breaking out the types of population counts
collab_pop_readme <- expanded_readme_data[which(expanded_readme_data$is_collab == 1),]
contrib_pop_readme <- expanded_readme_data[which(expanded_readme_data$is_collab == 0),]
collab_pop_contrib <- expanded_contrib_data[which(expanded_contrib_data$is_collab == 1),]
contrib_pop_contrib <- expanded_contrib_data[which(expanded_contrib_data$is_collab == 0),]
#import models
library(lme4)
library(optimx)
2024-06-24 03:10:17 +00:00
library(MASS)
simple_collab_readme_model <- glm.nb(count ~ as.factor(after_doc), data=collab_pop_readme)
summary(simple_collab_readme_model)
qqnorm(residuals(simple_collab_readme_model))
# I don't think MLM is the right one
2024-06-24 14:06:30 +00:00
collab_readme_model <- glmer.nb(log1pcount ~ as.factor(after_doc) + (after_doc| upstream_vcs_link), data=collab_pop_readme)
collab_readme_model_plus <- glmer.nb(log1pcount ~ as.factor(after_doc) + event_date_days + (after_doc| upstream_vcs_link), data=collab_pop_readme)
collab_readme_model <- readRDS("final_models/0623_pop_rm_collab.rda")
2024-05-07 23:40:38 +00:00
summary(collab_readme_model)
2024-06-24 14:06:30 +00:00
saveRDS(collab_readme_model, "final_models/0623_pop_rm_collab_better.rda")
2024-05-10 20:12:32 +00:00
contrib_readme_model <- glmer.nb(log1pcount ~ after_doc + (after_doc| upstream_vcs_link), data=contrib_pop_readme)
2024-06-24 14:06:30 +00:00
contrib_readme_model_plus <- glmer.nb(log1pcount ~ after_doc + event_date_days+ (after_doc| upstream_vcs_link), data=contrib_pop_readme)
2024-05-07 23:40:38 +00:00
summary(contrib_readme_model)
2024-06-24 03:10:17 +00:00
saveRDS(contrib_readme_model, "final_models/0623_pop_rm_contrib.rda")
2024-06-24 14:06:30 +00:00
contrib_readme_model <- readRDS("final_models/0623_pop_rm_contrib.rda")
2024-05-10 20:12:32 +00:00
conrm_residuals <- residuals(contrib_readme_model)
qqnorm(conrm_residuals)
collab_contrib_model <- glmer.nb(log1pcount ~ after_doc + (after_doc| upstream_vcs_link), data=collab_pop_contrib)
2024-05-07 23:40:38 +00:00
summary(collab_contrib_model)
2024-06-24 03:10:17 +00:00
saveRDS(collab_contrib_model, "final_models/0623_pop_contrib_collab.rda")
2024-06-24 14:06:30 +00:00
contrib_readme_model <- readRDS("final_models/0623_pop_contrib_collab.rda")
2024-05-10 20:12:32 +00:00
contrib_contrib_model <- glmer.nb(log1pcount ~ after_doc + (after_doc| upstream_vcs_link), data=contrib_pop_contrib)
2024-05-07 23:40:38 +00:00
summary(contrib_contrib_model)
2024-06-24 03:10:17 +00:00
saveRDS(contrib_contrib_model, "final_models/0623_pop_contrib_contrib.rda")
2024-05-07 23:40:38 +00:00
2024-06-24 03:53:19 +00:00
library(texreg)
texreg(list(collab_readme_model, contrib_readme_model), stars=NULL, digits=2,
custom.model.names=c( 'collab','contrib.' ),
2024-06-24 14:06:30 +00:00
custom.coef.names=c('(Intercept)', 'after_introduction', 'etc'),
2024-06-24 03:53:19 +00:00
use.packages=FALSE, table=FALSE, ci.force = TRUE)
2024-05-07 23:40:38 +00:00
library(ggplot2)
2024-06-24 03:10:17 +00:00
contrib_pop_readme |>
2024-06-24 03:54:03 +00:00
ggplot(aes(x = after_doc, y = log1pcount, col = as.factor(after_doc))) +
geom_violin()
2024-06-24 03:10:17 +00:00
2024-05-07 23:40:38 +00:00
expanded_readme_data |>
2024-06-24 03:54:03 +00:00
ggplot(aes(x = after_doc, y = count, col = as.factor(after_doc))) +
2024-06-24 03:10:17 +00:00
geom_violin()
2024-05-07 23:40:38 +00:00
expanded_contrib_data |>
2024-06-24 03:10:17 +00:00
ggplot(aes(x = after_doc, y = count, col = as.factor(after_doc))) +
geom_violin()