added assignment II
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
source("/home/ion606/Desktop/Homework/Data Analytics/Assignments/Assignment II/R/00_utils.R")
|
||||
ctx <- jsonlite::fromJSON("/home/ion606/Desktop/Homework/Data Analytics/Assignments/Assignment II/output/ctx.json")
|
||||
df <- suppressMessages(readr::read_csv(ctx$data, show_col_types = FALSE))
|
||||
|
||||
fit_ols <- function(data, y_col, x_cols, name_tag, fig_dir, stats_dir) {
|
||||
d <- data |> dplyr::select(all_of(c(y_col, x_cols))) |> tidyr::drop_na()
|
||||
for (xc in x_cols) d[[xc]] <- tf_pos(d[[xc]])
|
||||
f <- as.formula(paste(y_col, "~", paste(x_cols, collapse = " + ")))
|
||||
m <- lm(f, data = d)
|
||||
|
||||
# residuals vs fitted
|
||||
res_path <- file.path(fig_dir, paste0("residuals_", sanitize(name_tag), ".png"))
|
||||
p_res <- tibble(fitted = fitted(m), resid = resid(m)) |>
|
||||
ggplot(aes(fitted, resid)) +
|
||||
geom_point(size = 1.6) +
|
||||
geom_hline(yintercept = 0) +
|
||||
labs(title = paste("residuals vs fitted:", name_tag),
|
||||
x = "fitted", y = "residuals") +
|
||||
theme_minimal()
|
||||
save_plot(p_res, res_path)
|
||||
|
||||
# scatter first predictor vs response
|
||||
first <- x_cols[1]
|
||||
sc_path <- file.path(fig_dir, paste0("scatter_", sanitize(name_tag), "_", sanitize(first), ".png"))
|
||||
p_sc <- d |>
|
||||
ggplot(aes(.data[[first]], .data[[y_col]])) +
|
||||
geom_point(size = 1.6) +
|
||||
labs(title = paste(first, "vs", y_col), x = first, y = y_col) +
|
||||
theme_minimal()
|
||||
save_plot(p_sc, sc_path)
|
||||
|
||||
# summary to text
|
||||
summ_path <- file.path(stats_dir, paste0("ols_", sanitize(name_tag), ".txt"))
|
||||
capture.output(summary(m), file = summ_path)
|
||||
|
||||
gl <- broom::glance(m)
|
||||
list(
|
||||
name = name_tag,
|
||||
rsq = unname(gl$r.squared),
|
||||
aic = unname(gl$AIC),
|
||||
bic = unname(gl$BIC),
|
||||
nobs = stats::nobs(m),
|
||||
summary_file = summ_path,
|
||||
residuals_fig = res_path,
|
||||
scatter_fig = sc_path
|
||||
)
|
||||
}
|
||||
|
||||
ols <- list()
|
||||
if (length(ctx$predictors)) {
|
||||
for (p in ctx$predictors) {
|
||||
tag <- paste0("full: ", ctx$response, " ~ ", paste(p, collapse = " + "))
|
||||
ols <- append(ols, list(fit_ols(df, ctx$response, p, tag, ctx$fig_dir, ctx$stats_dir)))
|
||||
}
|
||||
}
|
||||
|
||||
ctx$ols <- ols
|
||||
writeLines(jsonlite::toJSON(ctx, pretty = TRUE, auto_unbox = TRUE), "/home/ion606/Desktop/Homework/Data Analytics/Assignments/Assignment II/output/ctx.json")
|
||||
message("ols (full) done")
|
||||
Reference in New Issue
Block a user