From 4da8713ebbba2ba47300837cb795f7d77384f137 Mon Sep 17 00:00:00 2001 From: Mason Garrison Date: Sun, 6 Apr 2025 10:37:26 -0400 Subject: [PATCH 01/11] cop editing --- DESCRIPTION | 4 ++-- NEWS.md | 8 ++++--- data/data_flu_ses.rda | Bin 163710 -> 163763 bytes vignettes/categorical_predictors.Rmd | 34 ++++++++++++++------------- 4 files changed, 25 insertions(+), 21 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index a096b2b..1a7b76c 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,8 +1,8 @@ Package: discord Type: Package Title: Functions for Discordant Kinship Modeling -Version: 1.2.3 -Date: 2025-04-03 +Version: 1.2.3.1 +Date: 2025-04-06 Authors@R: c(person("S. Mason", "Garrison", email = "garrissm@wfu.edu", role = c("aut", "cre", "cph"), comment = c(ORCID = "0000-0002-4804-6003")), diff --git a/NEWS.md b/NEWS.md index 7a1249c..fc7dcc1 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,6 @@ +# discord 1.2.3.1 +* More mild improvements to documentation + # discord 1.2.3 * improved documentation * allow for kin to not share their common environment @@ -5,11 +8,10 @@ * increased test coverage to 82.39 from 47ish. # discord 1.2.2 -* Added kinship link demonstration using potter dataset from BGmisc package -* Copy edited vignettes +* Added a new vignette demonstrating the use of the potter dataset from the `BGmisc` package to create and use other kinship links. +* Copy edited existing vignettes # discord 1.2.1 - * Enhanced categorical variable handling ## Bug Fixes diff --git a/data/data_flu_ses.rda b/data/data_flu_ses.rda index e9a43bb4b36a88b6aa83f65ae482376d7a355712..a4bdd6388d9c18d5c012f3ff0ba74659961fd4f8 100644 GIT binary patch literal 163763 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 z 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�eka}NyS7yF#j{ro} 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 AiU0rr diff --git a/vignettes/categorical_predictors.Rmd b/vignettes/categorical_predictors.Rmd index 1eec4b6..c6458e0 100644 --- a/vignettes/categorical_predictors.Rmd +++ b/vignettes/categorical_predictors.Rmd @@ -170,7 +170,7 @@ df_link <- df_link %>% ## Handling Categorical Predictors -##@ Mixed Variables: Gender as an Example +### Mixed Variables: Sex as an Example Sex is a classic example of a mixed variable in sibling studies because it can vary both within and between dyads. Siblings can be of the same or different sexes, and the pattern varies across families. @@ -245,7 +245,7 @@ Researchers can choose between these options based on their research question: - Use SEX_binarymatch when focusing on differences between same-sex and mixed-sex pairs - Use SEX_multimatch when interested in comparing male-male, female-female, and mixed-sex pairs -## Between-dyad variable: Race as an Example +### Between-dyad variable: Race as an Example For demonstration purposes, we've already filtered our dataset to include only same-race pairs, making race a between-dyads variable. Let's prepare the data specifically for race analysis: @@ -374,7 +374,7 @@ discord_sex_binary %>% kableExtra::column_spec(1:5, extra_css = "text-align: center;") ``` -Interpretation: +####Interpretation: - The mean SES score for the siblings (`S00_H40_diff`) is a significant control variable (p =`r round(summary(discord_sex_binary)[["coefficients"]]["S00_H40_mean", "Pr(>|t|)"],3)`). `S00_H40_mean` is negatively associated with the difference in SES score between siblings at age 40, `S00_H40_diff`, controlling for another variable (in this case, `SEX_binarymatch`). It is estimated that for one unit increase of `S00_H40_mean`, `S00_H40_diff`is expected to decrease approximately `r round(discord_sex_binary[["coefficients"]][["S00_H40_mean"]],3)`. @@ -416,12 +416,11 @@ discord_sex_multi %>% kableExtra::column_spec(1:5, extra_css = "text-align: center;") ``` -### Interpretation: +#### Interpretation: - The term `S00_H40_mean` was a significant control variable (p = `r round(summary(discord_sex_multi)[["coefficients"]]["S00_H40_mean","Pr(>|t|)"],3)`). This means that the mean SES score for the sibling pairs (`S00_H40_mean`) is negatively associated with the difference in SES between siblings (`S00_H40_diff`), controlling for other variables (in this case, `SEX_multimatch`). It is estimated that for one unit increase of `S00_H40_mean`, `S00_H40_diff` is expected to decrease approximately `r abs(round(discord_sex_multi[["coefficients"]][["S00_H40_mean"]],3))`. - - There was no significant difference between female-female pairs and male-male pairs (p=`r round(summary(discord_sex_multi)[["coefficients"]]["SEX_multimatchMALE", "Pr(>|t|)"],3)`) to predict `S00_H40_diff`. Similarly, there were no significant differences between mixed-sex pairs and female-female pairs (p = `r round(summary(discord_sex_multi)[["coefficients"]]["SEX_multimatchmixed", "Pr(>|t|)"],3)`). - The coefficient `r abs(round(discord_sex_multi[["coefficients"]][["SEX_multimatchMALE"]],3))` is the difference between the expected `S00_H40_diff` for the reference group (in this case, the female-female pairs) and the male-male pairs. @@ -455,7 +454,7 @@ discord_cat_mean %>% kableExtra::column_spec(1:5, extra_css = "text-align: center;") ``` -## Interpretation: +#### Interpretation: In this regression model, the mean SES score for the siblings (`S00_H40_mean`) was regressed on the SEX-composition variable (`SEX_binarymatch`). @@ -488,7 +487,7 @@ discord_cat_mean2 %>% kableExtra::column_spec(1:5, extra_css = "text-align: center;") ``` -### Interpretation: +#### Interpretation: There is a significant difference between female-female pairs and male-male pairs (`r round(summary(discord_cat_mean2)[["coefficients"]]["SEX_multimatchMALE", "Pr(>|t|)"],3)`) to predict the `S00_H40_mean`. However, there is no significant difference between mixed-sex pairs and female-female pairs (p = `r round(summary(discord_cat_mean2)[["coefficients"]]["SEX_multimatchmixed", "Pr(>|t|)"],3)`). @@ -500,6 +499,8 @@ The coefficient `r abs(round(discord_cat_mean2[["coefficients"]]["SEX_multimatch For race variables, we use the multi-match coding to examine differences between minority and non-minority pairs: +### Multimatch + The regression model with a multi-match race variable as a predictor can be conducted as such: ```{r} @@ -535,7 +536,7 @@ cat_race_reg %>% kableExtra::column_spec(1:5, extra_css = "text-align: center;") ``` -### Interpretation: +#### Interpretation: The mean SES score for the siblings (`S00_H40_mean`) is a significant control variable (p =`r round(summary(cat_race_reg)[["coefficients"]]["S00_H40_mean","Pr(>|t|)"],3)`. The term `S00_H40_mean` is negatively associated with the difference score of SES between siblings (`S00_H40_diff`), controlling for another variable (in this case, `RACE_multimatchNONMINORITY`). It is estimated that for one unit increase of `S00_H40_mean`, the DV (`S00_H40_diff`) is expected to decrease by approximately `r abs(round(cat_race_reg[["coefficients"]][["S00_H40_mean"]],3))`. @@ -570,7 +571,7 @@ discord_cat_mean %>% kableExtra::column_spec(1:5, extra_css = "text-align: center;") ``` -### Interpretation: +#### Interpretation: There is significant difference between "minority" pairs and "nonminority" pairs in `S00_H40_mean` (p =`r round(summary(discord_cat_mean)[["coefficients"]]["RACE_multimatchNONMINORITY","Pr(>|t|)"],3)`). @@ -582,8 +583,9 @@ It is estimated that, compared to the reference group (minority pairs), the nonm We can include both sex and race as predictors in the same model: -First, we restructure the data for the kinship-discordant regression using the `discord_data()` function. +Like before we restructure the data for the kinship-discordant regression, but this time we using the `discord_regression()` function, which calls the `discord_data()` function internally. +### Multimatch ```{r} both_multi <- discord_regression( @@ -615,7 +617,7 @@ both_multi %>% kableExtra::column_spec(1:5, extra_css = "text-align: center;") ``` -### Interpretation +#### Interpretation The mean SES score for the siblings (`S00_H40_mean`) is a significant control variable (p = `r round(summary(both_multi)[["coefficients"]]["S00_H40_mean","Pr(>|t|)"],3)` ). `S00_H40_mean` is negatively associated with the difference score of SES between the siblings (`S00_H40_diff`), controlling for other variables (in this case, the `SEX_multimatchMALE`, `SEX_multimatchmixed` and `RACE_multimatchNONMINORITY`). It is estimated that for one unit increase of the mean SES score for the sibling pairs( `S00_H40_mean`), the difference score of SES between siblings(`S00_H40_diff`) is expected to decrease approximately `r round(both_multi[["coefficients"]][["S00_H40_mean"]],3)`. @@ -657,7 +659,7 @@ discord_cat_diff %>% kableExtra::column_spec(1:5, extra_css = "text-align: center;") ``` -### Interpretation: +#### Interpretation: The mean SES score for the siblings at 40 (`S00_H40_mean`) is a significant control variable (p = `r round(summary(discord_cat_diff)[["coefficients"]]["S00_H40_mean","Pr(>|t|)"],3)`. The mean SES score for the siblings (`S00_H40_mean`) is negatively associated with the difference score of SES between the siblings (`S00_H40_diff`), controlling for other variables (in this case, `SEX_binarymatchsame-sex` and `RACE_multimatchNONMINORITY`). It is estimated that for one unit increase of `S00_H40_mean`, the DV (`S00_H40_diff`) is expected to decrease approximately `r abs(round(discord_cat_diff[["coefficients"]][["S00_H40_mean"]],3))`. @@ -668,7 +670,7 @@ The term `RACE_multimatchNONMINORITY`is a significant predictor (p = `r round(su -## Mean SES Models with Both Variables +### Mean SES Models with Both Variables Finally, we examine how sex and race together predict mean SES levels: @@ -697,7 +699,7 @@ discord_cat_mean %>% kableExtra::column_spec(1:5, extra_css = "text-align: center;") ``` -### Interpretation: +#### Interpretation: The term `SEX_multimatchMALE` is a significant predictor (p = `r round(summary(discord_cat_mean)[["coefficients"]]["SEX_multimatchMALE","Pr(>|t|)"],3)`) when controlling for other variables (i.e., `SEX_multimatchmixed`and `RACEe_multimatchNONMINORITY`). This means that the difference between female-female pairs and male-male pairs significantly predicted the mean SES score for the siblings when controlling for race-composition of the pairs. Compared to the female-female pairs, it is estimated that the male-male pairs have approximately `r abs(round(discord_cat_mean[["coefficients"]][["SEX_multimatchMALE"]],3))` higher mean SES score for the siblings when controlling for and race-composition of the pairs. @@ -708,7 +710,7 @@ The term `SEX_multimatchmixed` was not a significant predictor (p = `r round(sum The term `RACE_multimatchNONMINORITY` is a significant predictor (p = `r round(summary(discord_cat_mean)[["coefficients"]]["RACE_multimatchNONMINORITY","Pr(>|t|)"],3)`). This means that there is a significant difference between minority race pairs and nonminority race pairs in the mean SES score for the sibling pairs (`S00_H40_mean`) when controlling for the other variables (i.e., `SEX_multimatchmixed` and `SEX_multimatchMALE`). Specifically, compared to the minority race pairs, nonminority race pairs were expected to have approximately `r abs(round(discord_cat_mean[["coefficients"]][["RACE_multimatchNONMINORITY"]],3))` higher mean SES score for siblings -## Mean SES Models with Combining multimatch and binarymatch +### Mean SES Models with Combining multimatch and binarymatch ```{r} @@ -735,7 +737,7 @@ discord_cat_mean2 %>% ``` -### Interpretation: +#### Interpretation: The term `SEX_binarymatchsame-sex` is not a significant predictor (p = `r round(summary(discord_cat_mean2)[["coefficients"]]["SEX_binarymatchsame-sex","Pr(>|t|)"],3)`) when controlling for the race-composition variable (i.e., `RACE_multimatchNONMINORITY`). This means that the difference between mixed-sex pairs and same sex pairs does not significantly predict the mean SES score for the siblings when controlling for race-composition of the pairs. Compared to the mixed-sex pairs, it is estimated that the same-sex pairs have approximately `r abs(round(discord_cat_mean2[["coefficients"]][["SEX_binarymatchsame-sex"]],3))` higher mean SES score for the sibling pairs (`S00_H40_mean`) when controlling for and race-composition of the pairs (`RACE_multimatchNONMINORITY`). However, this variable is not significant, so it is not advisable to interpret the coefficient. From 796fe1aa4bcdff1a8d670efc854f6c7776533846 Mon Sep 17 00:00:00 2001 From: Mason Garrison Date: Sat, 3 May 2025 12:43:19 -0400 Subject: [PATCH 02/11] adding fast versions --- R/func_discord_data.R | 139 ++++++++++++++++++++++++++++++++++++++++- R/helpers_regression.R | 25 +++++++- 2 files changed, 162 insertions(+), 2 deletions(-) diff --git a/R/func_discord_data.R b/R/func_discord_data.R index bb08cfa..12a97d0 100644 --- a/R/func_discord_data.R +++ b/R/func_discord_data.R @@ -16,6 +16,7 @@ #' be "both". Other options include "sex", "race", or "none". #' @param coding_method A character string that indicates what kind of #' additional coding schemes should be used. Default is none. Other options include "binary" and "multi". +#' @param fast Logical. If TRUE, uses a faster method for data processing. #' @return A data frame that contains analyzable, paired data for performing #' kinship regressions. #' @@ -33,7 +34,23 @@ #' demographics = "none" #' ) #' -discord_data <- function(data, + +discord_data <- function(..., fast = FALSE) { + if (fast) { + discord_data_fast(...) + } else { + discord_data_ram_optimized(...) + } +} + +#' @title Discord Data RAM Optimized +#' +#' @description This function restructures data to determine kinship differences. +#' +#' @inheritParams discord_data +#' keywords internal + +discord_data_ram_optimized <- function(data, outcome, predictors, id = NULL, @@ -134,5 +151,125 @@ discord_data <- function(data, } + return(output) +} + +#' @title Discord Data Fast +#' +#' @description This function restructures data to determine kinship differences. +#' +#' @inheritParams discord_data +#' @keywords internal + +discord_data_fast <- function(data, + outcome, + predictors, + id = NULL, + sex = "sex", + race = "race", + pair_identifiers, + demographics = "both", + coding_method = "none") { + + # combine outcome and predictors for manipulating the data + variables <- c(outcome, predictors) + + #------------------------------------------- + # Step 1: order the data on outcome + #------------------------------------------- + orderedOnOutcome <- check_sibling_order( + data = data, + outcome = outcome, + pair_identifiers = pair_identifiers, + id = id, + sex = sex, + race = race, + demographics = demographics, + coding_method = coding_method, + fast = TRUE + ) + + if (!valid_ids(orderedOnOutcome, + id = id + )) { + id <- "rowwise_id" + orderedOnOutcome <- cbind(orderedOnOutcome, rowwise_id = 1:nrow(data)) + } + + #------------------------------------------- + # Step 3: Differencing (using original helper, fast = TRUE) + #------------------------------------------- + out <- vector(mode = "list", length = length(variables)) + + for (i in seq_along(variables)) { + out[[i]] <- make_mean_diffs( + data = orderedOnOutcome, + variable = variables[i], + id = id, + sex = sex, + race = race, + pair_identifiers = pair_identifiers, + demographics = demographics, + coding_method = coding_method, + fast = TRUE + ) + } + + if (demographics == "none") { + mrg <- function(x, y) { + merge( + x = x, + y = y, + by = c("id"), + all.x = TRUE + ) + } + + output <- Reduce(mrg, out) + } else if (demographics == "race") { + mrg <- function(x, y) { + merge( + x = x, + y = y, + by = c( + "id", paste0(race, "_1"), + paste0(race, "_2") + ), + all.x = TRUE + ) + } + + output <- Reduce(mrg, out) + } else if (demographics == "sex") { + mrg <- function(x, y) { + merge( + x = x, + y = y, + by = c( + "id", paste0(sex, "_1"), + paste0(sex, "_2") + ), + all.x = TRUE + ) + } + + output <- Reduce(mrg, out) + } else if (demographics == "both") { + mrg <- function(x, y) { + merge( + x = x, + y = y, + by = c( + "id", paste0(sex, "_1"), paste0(sex, "_2"), + paste0(race, "_1"), paste0(race, "_2") + ), + all.x = TRUE + ) + } + + output <- Reduce(mrg, out) + } + + return(output) } diff --git a/R/helpers_regression.R b/R/helpers_regression.R index e6a193f..11745eb 100644 --- a/R/helpers_regression.R +++ b/R/helpers_regression.R @@ -11,7 +11,30 @@ #' @return A one-row data frame with a new column order indicating which familial member (1, 2, or #' neither) has more of the outcome. #' -check_sibling_order <- function(data, outcome, pair_identifiers, row) { + +check_sibling_order <- function(..., fast = FALSE) { + if (fast) { + check_sibling_order_fast(...) + } else { + check_sibling_order_ram_optimized(...) + } +} + +#' @title Check Sibling Order RAM Optimized +#' +#' @description This function determines the order of sibling pairs based on an outcome variable. +#' The function checks which of the two kinship pairs has more of a specified outcome variable. +#' It adds a new column named `order` to the dataset, indicating which sibling (identified as "s1" or "s2") has more of the outcome. +#' If the two siblings have the same amount of the outcome, it randomly assigns one as having more. +#' +#' @inheritParams discord_data +#' @inheritParams check_sibling_order +#' +#' @return A one-row data frame with a new column order indicating which familial member (1, 2, or +#' neither) has more of the outcome. +#' @keywords internal + +check_sibling_order_ram_optimized <- function(data, outcome, pair_identifiers, row) { # Select the row of interest from the data frame data <- data[row, ] From ab2af138a724a94dbfedf9e434ca4a22d63ad354 Mon Sep 17 00:00:00 2001 From: Mason Garrison Date: Sat, 3 May 2025 17:14:18 -0400 Subject: [PATCH 03/11] faster --- NEWS.md | 1 + R/func_discord_data.R | 47 +++--- R/func_discord_regression.R | 8 +- R/helpers_regression.R | 159 +++++++++++++++++- man/check_sibling_order.Rd | 14 +- man/check_sibling_order_ram_optimized.Rd | 30 ++++ man/discord_data.Rd | 14 +- man/discord_data_fast.Rd | 48 ++++++ man/discord_data_ram_optimized.Rd | 21 +++ man/make_mean_diffs.Rd | 33 +--- .../test-discord_regression_arguments.R | 3 +- tests/testthat/test-new-legacy.R | 30 ++++ 12 files changed, 325 insertions(+), 83 deletions(-) create mode 100644 man/check_sibling_order_ram_optimized.Rd create mode 100644 man/discord_data_fast.Rd create mode 100644 man/discord_data_ram_optimized.Rd diff --git a/NEWS.md b/NEWS.md index c332bf3..1cb77ce 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,6 +1,7 @@ # discord 1.2.4 * Added a new vignette demonstrating ways to visualize discordant kinship data using the `ggplot2` package. * Added a new vignette demonstrating how to conduct a power analysis. +* Vectorizing `discord_data()` to improve performance. # discord 1.2.3.1 * More mild improvements to documentation diff --git a/R/func_discord_data.R b/R/func_discord_data.R index 12a97d0..c767898 100644 --- a/R/func_discord_data.R +++ b/R/func_discord_data.R @@ -153,7 +153,10 @@ discord_data_ram_optimized <- function(data, return(output) } - +.clean_names <- function(df) { + names(df) <- sub(".*\\.", "", names(df)) # If name has "prefix.name", keep only "name" + return(df) +} #' @title Discord Data Fast #' #' @description This function restructures data to determine kinship differences. @@ -162,10 +165,10 @@ discord_data_ram_optimized <- function(data, #' @keywords internal discord_data_fast <- function(data, - outcome, - predictors, - id = NULL, - sex = "sex", + outcome, + predictors, + id = NULL, + sex = "sex", race = "race", pair_identifiers, demographics = "both", @@ -181,11 +184,6 @@ discord_data_fast <- function(data, data = data, outcome = outcome, pair_identifiers = pair_identifiers, - id = id, - sex = sex, - race = race, - demographics = demographics, - coding_method = coding_method, fast = TRUE ) @@ -199,12 +197,11 @@ discord_data_fast <- function(data, #------------------------------------------- # Step 3: Differencing (using original helper, fast = TRUE) #------------------------------------------- - out <- vector(mode = "list", length = length(variables)) - for (i in seq_along(variables)) { - out[[i]] <- make_mean_diffs( + # out <- vector(mode = "list", length = length(variables)) + out <- make_mean_diffs( data = orderedOnOutcome, - variable = variables[i], + variables = variables, id = id, sex = sex, race = race, @@ -213,13 +210,14 @@ discord_data_fast <- function(data, coding_method = coding_method, fast = TRUE ) - } + + if (demographics == "none") { mrg <- function(x, y) { merge( - x = x, - y = y, + x = .clean_names(x), + y = .clean_names(y), by = c("id"), all.x = TRUE ) @@ -229,8 +227,8 @@ discord_data_fast <- function(data, } else if (demographics == "race") { mrg <- function(x, y) { merge( - x = x, - y = y, + x = .clean_names(x), + y = .clean_names(y), by = c( "id", paste0(race, "_1"), paste0(race, "_2") @@ -243,8 +241,8 @@ discord_data_fast <- function(data, } else if (demographics == "sex") { mrg <- function(x, y) { merge( - x = x, - y = y, + x = .clean_names(x), + y = .clean_names(y), by = c( "id", paste0(sex, "_1"), paste0(sex, "_2") @@ -257,8 +255,8 @@ discord_data_fast <- function(data, } else if (demographics == "both") { mrg <- function(x, y) { merge( - x = x, - y = y, + x = .clean_names(x), + y = .clean_names(y), by = c( "id", paste0(sex, "_1"), paste0(sex, "_2"), paste0(race, "_1"), paste0(race, "_2") @@ -266,6 +264,9 @@ discord_data_fast <- function(data, all.x = TRUE ) } + # remove names of lists that get concatenated by Reduce + #the variable name repeats to look like var.var_1, instead of var_1 + # how do we fix this? it breaks inside Reduce output <- Reduce(mrg, out) } diff --git a/R/func_discord_regression.R b/R/func_discord_regression.R index 4312d46..176318f 100644 --- a/R/func_discord_regression.R +++ b/R/func_discord_regression.R @@ -26,7 +26,8 @@ discord_regression <- function(data, race = "race", pair_identifiers = c("_s1", "_s2"), data_processed = FALSE, - coding_method = "none") { + coding_method = "none", + fast = TRUE) { check_discord_errors(data = data, id = id, sex = sex, race = race, pair_identifiers = pair_identifiers) # if no demographics provided @@ -52,7 +53,8 @@ discord_regression <- function(data, race = race, pair_identifiers = pair_identifiers, demographics = demographics, - coding_method = coding_method + coding_method = coding_method, + fast = fast ) } else { preppedData <- data @@ -70,6 +72,8 @@ discord_regression <- function(data, pred_mean <- NULL } # coding method + + if (coding_method %in% c("binary", "binarymatch")) { race_match <- base::paste0(race, "_binarymatch") sex_match <- base::paste0(sex, "_binarymatch") diff --git a/R/helpers_regression.R b/R/helpers_regression.R index 11745eb..a55d89d 100644 --- a/R/helpers_regression.R +++ b/R/helpers_regression.R @@ -63,6 +63,37 @@ check_sibling_order_ram_optimized <- function(data, outcome, pair_identifiers, r return(data) } + +check_sibling_order_fast <- function(data, outcome, pair_identifiers) { + + + #------------------------- + # 1. VECTORIZE ORDER ASSIGNMENT + #------------------------- + outcome1 <- data[[paste0(outcome, pair_identifiers[1])]] + outcome2 <- data[[paste0(outcome, pair_identifiers[2])]] + + # Check for missing outcome data + if (any(is.na(outcome1) | is.na(outcome2))) { + stop(paste0("There are missing data, encoded as `NA`, for at least one kinship pair in the '", outcome, "' variable and data cannot be prepped properly.\n Please remove or impute missing data.")) + } + + order <- ifelse(outcome1 > outcome2, "s1", + ifelse(outcome1 < outcome2, "s2", NA)) + + # Random tie breaking + ties <- which(is.na(order)) + if (length(ties) > 0) { + tie_assignment <- ifelse(stats::rbinom(length(ties), 1, 0.5) == 1, "s1", "s2") + order[ties] <- tie_assignment + } + + data$order <- order + return(data) +} + + + #' @title Make Mean Differences #' #' @description This function calculates differences and means of a given variable for each kinship pair. The order of subtraction and the variables' names in the output dataframe depend on the order column set by check_sibling_order(). @@ -72,7 +103,17 @@ check_sibling_order_ram_optimized <- function(data, outcome, pair_identifiers, r #' @inheritParams check_sibling_order #' @param variable outcomes and predictors for manipulating the data #' -make_mean_diffs <- function(data, id, sex, race, demographics, +make_mean_diffs <- function(..., fast = FALSE) { + if (fast) { + make_mean_diffs_fast(...) + } else { + make_mean_diffs_ram_optimized(...) + } +} + + + +make_mean_diffs_ram_optimized <- function(data, id, sex, race, demographics, variable, pair_identifiers, row, coding_method = "none") { S1 <- base::paste0(variable, pair_identifiers[1]) @@ -123,6 +164,59 @@ make_mean_diffs <- function(data, id, sex, race, demographics, # check for whether or not race and sex are defined + output <- recode_demographics(demographics = demographics, + data = data, + raceS1 = raceS1, + raceS2 = raceS2, + race = race, + sexS1 = sexS1, + sexS2 = sexS2, + sex =sex, + coding_method = coding_method, + output = output, + fast = FALSE) + + + return(output) +} + + +recode_demographics <- function(demographics, data, raceS1, raceS2, + race, sexS1, sexS2, sex, coding_method, output,fast=FALSE) { + + # check for whether or not race and sex are defined +if (fast) { + if (demographics == "race") { + output_demographics <- data.frame( + race_1 = data[[raceS1]], + race_2 = data[[raceS2]] + ) + output_demographics$race_1[data$order == "s2"] <- data[[raceS2]][data$order == "s2"] + output_demographics$race_2[data$order == "s2"] <- data[[raceS1]][data$order == "s2"] + names(output_demographics) <- paste0(race, c("_1", "_2")) +} else if (demographics == "sex") { + output_demographics <- data.frame( + sex_1 = data[[sexS1]], + sex_2 = data[[sexS2]] + ) + output_demographics$sex_1[data$order == "s2"] <- data[[sexS2]][data$order == "s2"] + output_demographics$sex_2[data$order == "s2"] <- data[[sexS1]][data$order == "s2"] + + names(output_demographics) <- paste0(sex, c("_1", "_2")) +} else if (demographics == "both") { + output_demographics <- data.frame( + sex_1 = data[[sexS1]], + sex_2 = data[[sexS2]], + race_1 = data[[raceS1]], + race_2 = data[[raceS2]] + ) + output_demographics$race_1[data$order == "s2"] <- data[[raceS2]][data$order == "s2"] + output_demographics$race_2[data$order == "s2"] <- data[[raceS1]][data$order == "s2"] + output_demographics$sex_1[data$order == "s2"] <- data[[sexS2]][data$order == "s2"] + output_demographics$sex_2[data$order == "s2"] <- data[[sexS1]][data$order == "s2"] + names(output_demographics) <- c(paste0(sex, c("_1", "_2")), paste0(race, c("_1", "_2"))) +} + } else { if (demographics == "race") { if (data[, "order"] == "s1") { output_demographics <- data.frame( @@ -170,35 +264,90 @@ make_mean_diffs <- function(data, id, sex, race, demographics, names(output_demographics) <- c(paste0(sex, c("_1", "_2")), paste0(race, c("_1", "_2"))) } + } +# both methods if (coding_method != "none") { # New logic to handle race and sex as categorical variables if (demographics == "both" || demographics == "race") { race_1_name <- paste0(race, "_1") race_2_name <- paste0(race, "_2") output_demographics[[paste0(race, "_binarymatch")]] <- ifelse(output_demographics[[race_1_name]] == output_demographics[[race_2_name]], - 1, 0 + 1, 0 ) output_demographics[[paste0(race, "_multimatch")]] <- ifelse(output_demographics[[race_1_name]] == output_demographics[[race_2_name]], - as.character(output_demographics[[race_2_name]]), "mixed" + as.character(output_demographics[[race_2_name]]), "mixed" ) } if (demographics == "both" || demographics == "sex") { sex_1_name <- paste0(sex, "_1") sex_2_name <- paste0(sex, "_2") output_demographics[[paste0(sex, "_binarymatch")]] <- ifelse(output_demographics[[sex_1_name]] == output_demographics[[sex_2_name]], - 1, 0 + 1, 0 ) output_demographics[[paste0(sex, "_multimatch")]] <- ifelse(output_demographics[[sex_1_name]] == output_demographics[[sex_2_name]], as.character(output_demographics[[sex_2_name]]), "mixed") } } + if (exists("output_demographics")) { output <- base::cbind(output, output_demographics) } - return(output) } + + +make_mean_diffs_fast <- function(data, id, sex, race, demographics, + variables= variable, + variable=NULL, + pair_identifiers, + coding_method = "none" + ) { + # S1 <- base::paste0(variable, pair_identifiers[1]) + # S2 <- base::paste0(variable, pair_identifiers[2]) + sexS1 <- base::paste0(sex, pair_identifiers[1]) + sexS2 <- base::paste0(sex, pair_identifiers[2]) + raceS1 <- base::paste0(race, pair_identifiers[1]) + raceS2 <- base::paste0(race, pair_identifiers[2]) + + +diff_list <- list() + for (var in variables) { + var1 <- ifelse(data$order == "s1", + data[[paste0(var, pair_identifiers[1])]], + data[[paste0(var, pair_identifiers[2])]]) + var2 <- ifelse(data$order == "s1", + data[[paste0(var, pair_identifiers[2])]], + data[[paste0(var, pair_identifiers[1])]]) + + diff <- var1 - var2 + mean_ <- (var1 + var2) / 2 + + tmp <- data.frame( + id = data[[id]], + setNames(list(var1), paste0(var, "_1")), + setNames(list(var2), paste0(var, "_2")), + setNames(list(diff), paste0(var, "_diff")), + setNames(list(mean_), paste0(var, "_mean")) + ) + +# obvious inefficiency + tmp <- recode_demographics(demographics = demographics, + data = data, + raceS1 = raceS1, + raceS2 = raceS2, + race = race, + sexS1 = sexS1, + sexS2 = sexS2, + sex =sex, + coding_method = coding_method, + output = tmp, + fast = TRUE) + diff_list[[var]] <- tmp + } +return(diff_list) +} + #' @title Check Discord Errors #' #' @description This function checks for common errors in the provided data, including the correct specification of identifiers (ID, sex, race) and their existence in the data. diff --git a/man/check_sibling_order.Rd b/man/check_sibling_order.Rd index 84743f0..9921cd8 100644 --- a/man/check_sibling_order.Rd +++ b/man/check_sibling_order.Rd @@ -4,26 +4,20 @@ \alias{check_sibling_order} \title{Check Sibling Order} \usage{ -check_sibling_order(data, outcome, pair_identifiers, row) +check_sibling_order(..., fast = FALSE) } \arguments{ -\item{data}{The data set with kinship pairs} - -\item{outcome}{A character string containing the outcome variable of -interest.} - -\item{pair_identifiers}{A character vector of length two that contains the -variable identifier for each kinship pair} +\item{fast}{Logical. If TRUE, uses a faster method for data processing.} \item{row}{The row number of the data frame} } \value{ -A character string signifying which familial member (1, 2, or +A one-row data frame with a new column order indicating which familial member (1, 2, or neither) has more of the outcome. } \description{ This function determines the order of sibling pairs based on an outcome variable. -It function checks which of the two kinship pairs has more of a specified outcome variable. +The function checks which of the two kinship pairs has more of a specified outcome variable. It adds a new column named `order` to the dataset, indicating which sibling (identified as "s1" or "s2") has more of the outcome. If the two siblings have the same amount of the outcome, it randomly assigns one as having more. } diff --git a/man/check_sibling_order_ram_optimized.Rd b/man/check_sibling_order_ram_optimized.Rd new file mode 100644 index 0000000..518ec55 --- /dev/null +++ b/man/check_sibling_order_ram_optimized.Rd @@ -0,0 +1,30 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/helpers_regression.R +\name{check_sibling_order_ram_optimized} +\alias{check_sibling_order_ram_optimized} +\title{Check Sibling Order RAM Optimized} +\usage{ +check_sibling_order_ram_optimized(data, outcome, pair_identifiers, row) +} +\arguments{ +\item{data}{The data set with kinship pairs} + +\item{outcome}{A character string containing the outcome variable of +interest.} + +\item{pair_identifiers}{A character vector of length two that contains the +variable identifier for each kinship pair} + +\item{row}{The row number of the data frame} +} +\value{ +A one-row data frame with a new column order indicating which familial member (1, 2, or + neither) has more of the outcome. +} +\description{ +This function determines the order of sibling pairs based on an outcome variable. +The function checks which of the two kinship pairs has more of a specified outcome variable. +It adds a new column named `order` to the dataset, indicating which sibling (identified as "s1" or "s2") has more of the outcome. +If the two siblings have the same amount of the outcome, it randomly assigns one as having more. +} +\keyword{internal} diff --git a/man/discord_data.Rd b/man/discord_data.Rd index d157f72..0665711 100644 --- a/man/discord_data.Rd +++ b/man/discord_data.Rd @@ -4,19 +4,11 @@ \alias{discord_data} \title{Restructure Data to Determine Kinship Differences} \usage{ -discord_data( - data, - outcome, - predictors, - id = NULL, - sex = "sex", - race = "race", - pair_identifiers, - demographics = "both", - coding_method = "none" -) +discord_data(..., fast = FALSE) } \arguments{ +\item{fast}{Logical. If TRUE, uses a faster method for data processing.} + \item{data}{The data set with kinship pairs} \item{outcome}{A character string containing the outcome variable of diff --git a/man/discord_data_fast.Rd b/man/discord_data_fast.Rd new file mode 100644 index 0000000..4bc1d86 --- /dev/null +++ b/man/discord_data_fast.Rd @@ -0,0 +1,48 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/func_discord_data.R +\name{discord_data_fast} +\alias{discord_data_fast} +\title{Discord Data Fast} +\usage{ +discord_data_fast( + data, + outcome, + predictors, + id = NULL, + sex = "sex", + race = "race", + pair_identifiers, + demographics = "both", + coding_method = "none" +) +} +\arguments{ +\item{data}{The data set with kinship pairs} + +\item{outcome}{A character string containing the outcome variable of +interest.} + +\item{predictors}{A character vector containing the column names for +predicting the outcome.} + +\item{id}{Default's to NULL. If supplied, must specify the column name +corresponding to unique kinship pair identifiers.} + +\item{sex}{A character string for the sex column name.} + +\item{race}{A character string for the race column name.} + +\item{pair_identifiers}{A character vector of length two that contains the +variable identifier for each kinship pair} + +\item{demographics}{Indicator variable for if the data has the sex and race +demographics. If both are present (default, and recommended), value should +be "both". Other options include "sex", "race", or "none".} + +\item{coding_method}{A character string that indicates what kind of +additional coding schemes should be used. Default is none. Other options include "binary" and "multi".} +} +\description{ +This function restructures data to determine kinship differences. +} +\keyword{internal} diff --git a/man/discord_data_ram_optimized.Rd b/man/discord_data_ram_optimized.Rd new file mode 100644 index 0000000..d2ddb4f --- /dev/null +++ b/man/discord_data_ram_optimized.Rd @@ -0,0 +1,21 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/func_discord_data.R +\name{discord_data_ram_optimized} +\alias{discord_data_ram_optimized} +\title{Discord Data RAM Optimized} +\usage{ +discord_data_ram_optimized( + data, + outcome, + predictors, + id = NULL, + sex = "sex", + race = "race", + pair_identifiers, + demographics = "both", + coding_method = "none" +) +} +\description{ +This function restructures data to determine kinship differences. +} diff --git a/man/make_mean_diffs.Rd b/man/make_mean_diffs.Rd index 4b513f2..8cec7fb 100644 --- a/man/make_mean_diffs.Rd +++ b/man/make_mean_diffs.Rd @@ -4,41 +4,12 @@ \alias{make_mean_diffs} \title{Make Mean Differences} \usage{ -make_mean_diffs( - data, - id, - sex, - race, - demographics, - variable, - pair_identifiers, - row, - coding_method = "none" -) +make_mean_diffs(..., fast = FALSE) } \arguments{ -\item{data}{The data set with kinship pairs} - -\item{id}{Default's to NULL. If supplied, must specify the column name -corresponding to unique kinship pair identifiers.} - -\item{sex}{A character string for the sex column name.} - -\item{race}{A character string for the race column name.} - -\item{demographics}{Indicator variable for if the data has the sex and race -demographics. If both are present (default, and recommended), value should -be "both". Other options include "sex", "race", or "none".} +\item{fast}{Logical. If TRUE, uses a faster method for data processing.} \item{variable}{outcomes and predictors for manipulating the data} - -\item{pair_identifiers}{A character vector of length two that contains the -variable identifier for each kinship pair} - -\item{row}{The row number of the data frame} - -\item{coding_method}{A character string that indicates what kind of -additional coding schemes should be used. Default is none. Other options include "binary" and "multi".} } \description{ This function calculates differences and means of a given variable for each kinship pair. The order of subtraction and the variables' names in the output dataframe depend on the order column set by check_sibling_order(). diff --git a/tests/testthat/test-discord_regression_arguments.R b/tests/testthat/test-discord_regression_arguments.R index a0b84bc..d9334f6 100644 --- a/tests/testthat/test-discord_regression_arguments.R +++ b/tests/testthat/test-discord_regression_arguments.R @@ -32,7 +32,8 @@ test_that("flu_2008 ~ edu_2008 + ses_2008 + race + sex", { set.seed(18) new <- discord_regression(uniqueExtendedIDs, outcome = "flu_2008", - predictors = c("edu_2008", "ses_2008") + predictors = c("edu_2008", "ses_2008"), + fast=TRUE ) new <- summarize_results(new) diff --git a/tests/testthat/test-new-legacy.R b/tests/testthat/test-new-legacy.R index 5597ef7..53d9e58 100644 --- a/tests/testthat/test-new-legacy.R +++ b/tests/testthat/test-new-legacy.R @@ -372,6 +372,36 @@ test_that("half-siblings nonsignificant: new & legacy data prep code results are }) +test_that("half-siblings nonsignificant: new & legacy data prep code results are equal", { + set.seed(18) + new_data <- discord_data(half_sibs_nonsignif, + outcome = "y1", + predictors = "y2", + id = "id", + sex = NULL, + race = NULL, + pair_identifiers = c("_1", "_2"), + demographics = "none", + fast = TRUE + ) + rownames(new_data) <- NULL + + set.seed(18) + old_data <- discord_data_legacy( + df = make_double_entered(half_sibs_nonsignif), + outcome = "y1", + predictors = "y2", + id = "id", + sep = "_", + doubleentered = TRUE + ) + rownames(old_data) <- NULL + + expect_equal(new_data, old_data) +}) + + + test_that("discord_data_legacy returns scaled values when scale = TRUE", { set.seed(18) tolerance <- .1 From 0071afcff7cf16857671865f20cf4a305856f143 Mon Sep 17 00:00:00 2001 From: Mason Garrison Date: Sat, 3 May 2025 17:17:58 -0400 Subject: [PATCH 04/11] reknit --- R/func_discord_data.R | 4 ++-- man/discord_data.Rd | 2 +- man/discord_data_ram_optimized.Rd | 27 +++++++++++++++++++++++++++ man/discord_regression.Rd | 5 ++++- vignettes/links.Rmd | 2 +- 5 files changed, 35 insertions(+), 5 deletions(-) diff --git a/R/func_discord_data.R b/R/func_discord_data.R index c767898..c2f04c7 100644 --- a/R/func_discord_data.R +++ b/R/func_discord_data.R @@ -35,7 +35,7 @@ #' ) #' -discord_data <- function(..., fast = FALSE) { +discord_data <- function(..., fast = TRUE) { if (fast) { discord_data_fast(...) } else { @@ -48,7 +48,7 @@ discord_data <- function(..., fast = FALSE) { #' @description This function restructures data to determine kinship differences. #' #' @inheritParams discord_data -#' keywords internal +#' @keywords internal discord_data_ram_optimized <- function(data, outcome, diff --git a/man/discord_data.Rd b/man/discord_data.Rd index 0665711..29e0f58 100644 --- a/man/discord_data.Rd +++ b/man/discord_data.Rd @@ -4,7 +4,7 @@ \alias{discord_data} \title{Restructure Data to Determine Kinship Differences} \usage{ -discord_data(..., fast = FALSE) +discord_data(..., fast = TRUE) } \arguments{ \item{fast}{Logical. If TRUE, uses a faster method for data processing.} diff --git a/man/discord_data_ram_optimized.Rd b/man/discord_data_ram_optimized.Rd index d2ddb4f..278f5f3 100644 --- a/man/discord_data_ram_optimized.Rd +++ b/man/discord_data_ram_optimized.Rd @@ -16,6 +16,33 @@ discord_data_ram_optimized( coding_method = "none" ) } +\arguments{ +\item{data}{The data set with kinship pairs} + +\item{outcome}{A character string containing the outcome variable of +interest.} + +\item{predictors}{A character vector containing the column names for +predicting the outcome.} + +\item{id}{Default's to NULL. If supplied, must specify the column name +corresponding to unique kinship pair identifiers.} + +\item{sex}{A character string for the sex column name.} + +\item{race}{A character string for the race column name.} + +\item{pair_identifiers}{A character vector of length two that contains the +variable identifier for each kinship pair} + +\item{demographics}{Indicator variable for if the data has the sex and race +demographics. If both are present (default, and recommended), value should +be "both". Other options include "sex", "race", or "none".} + +\item{coding_method}{A character string that indicates what kind of +additional coding schemes should be used. Default is none. Other options include "binary" and "multi".} +} \description{ This function restructures data to determine kinship differences. } +\keyword{internal} diff --git a/man/discord_regression.Rd b/man/discord_regression.Rd index 8420f3e..0e14d78 100644 --- a/man/discord_regression.Rd +++ b/man/discord_regression.Rd @@ -14,7 +14,8 @@ discord_regression( race = "race", pair_identifiers = c("_s1", "_s2"), data_processed = FALSE, - coding_method = "none" + coding_method = "none", + fast = TRUE ) } \arguments{ @@ -44,6 +45,8 @@ variable identifier for each kinship pair} \item{coding_method}{A character string that indicates what kind of additional coding schemes should be used. Default is none. Other options include "binary" and "multi".} + +\item{fast}{Logical. If TRUE, uses a faster method for data processing.} } \value{ Resulting `lm` object from performing the discordant regression. diff --git a/vignettes/links.Rmd b/vignettes/links.Rmd index 4f306f4..62bbe63 100644 --- a/vignettes/links.Rmd +++ b/vignettes/links.Rmd @@ -43,7 +43,7 @@ We begin by loading the required packages and a built-in dataset from {BGmisc}. library(BGmisc) library(tidyverse) library(discord) -library(stargazer) + data(potter) ``` From 27caacd65d733e16a46f46cbabd642a70083164d Mon Sep 17 00:00:00 2001 From: Mason Garrison Date: Sat, 3 May 2025 22:01:29 -0400 Subject: [PATCH 05/11] fixed defs --- DESCRIPTION | 1 + R/func_discord_data.R | 35 +++++++++++++++++++++++++++++--- R/helpers_regression.R | 16 +++++++-------- man/check_sibling_order.Rd | 4 ++-- man/discord_data.Rd | 20 +++++++++++++++--- man/discord_regression_legacy.Rd | 2 ++ man/make_mean_diffs.Rd | 4 ++-- vignettes/Power.Rmd | 13 +++++++----- vignettes/plots.Rmd | 8 +++----- 9 files changed, 75 insertions(+), 28 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index f348eff..364ff63 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -29,6 +29,7 @@ Suggests: dplyr, grid, gridExtra, + ggplot2, janitor, kableExtra, knitr, diff --git a/R/func_discord_data.R b/R/func_discord_data.R index c2f04c7..19b7824 100644 --- a/R/func_discord_data.R +++ b/R/func_discord_data.R @@ -17,6 +17,7 @@ #' @param coding_method A character string that indicates what kind of #' additional coding schemes should be used. Default is none. Other options include "binary" and "multi". #' @param fast Logical. If TRUE, uses a faster method for data processing. +#' @param ... Additional arguments to be passed to the function. #' @return A data frame that contains analyzable, paired data for performing #' kinship regressions. #' @@ -35,11 +36,39 @@ #' ) #' -discord_data <- function(..., fast = TRUE) { +discord_data <- function(data, + outcome, + predictors, + id = NULL, + sex = "sex", + race = "race", + pair_identifiers, + demographics = "both", + coding_method = "none", + fast = TRUE, + ...) { if (fast) { - discord_data_fast(...) + discord_data_fast(data = data, + outcome = outcome, + id = id, + sex = sex, + race = race, + pair_identifiers = pair_identifiers, + demographics = demographics, + predictors = predictors, + coding_method = coding_method, + ...) } else { - discord_data_ram_optimized(...) + discord_data_ram_optimized(data = data, + outcome = outcome, + id = id, + sex = sex, + race = race, + pair_identifiers = pair_identifiers, + demographics = demographics, + predictors = predictors, + coding_method = coding_method, + ...) } } diff --git a/R/helpers_regression.R b/R/helpers_regression.R index a55d89d..9c15bcb 100644 --- a/R/helpers_regression.R +++ b/R/helpers_regression.R @@ -6,14 +6,14 @@ #' If the two siblings have the same amount of the outcome, it randomly assigns one as having more. # #' @inheritParams discord_data -#' @param row The row number of the data frame +#' @param ... Additional arguments to be passed to the function. #' #' @return A one-row data frame with a new column order indicating which familial member (1, 2, or #' neither) has more of the outcome. #' check_sibling_order <- function(..., fast = FALSE) { - if (fast) { + if (fast==TRUE) { check_sibling_order_fast(...) } else { check_sibling_order_ram_optimized(...) @@ -29,6 +29,8 @@ check_sibling_order <- function(..., fast = FALSE) { #' #' @inheritParams discord_data #' @inheritParams check_sibling_order +#' @param row The row number of the data frame +#' #' #' @return A one-row data frame with a new column order indicating which familial member (1, 2, or #' neither) has more of the outcome. @@ -101,7 +103,6 @@ check_sibling_order_fast <- function(data, outcome, pair_identifiers) { #' swapping the order of demographics as per the order column. #' @inheritParams discord_data #' @inheritParams check_sibling_order -#' @param variable outcomes and predictors for manipulating the data #' make_mean_diffs <- function(..., fast = FALSE) { if (fast) { @@ -112,7 +113,6 @@ make_mean_diffs <- function(..., fast = FALSE) { } - make_mean_diffs_ram_optimized <- function(data, id, sex, race, demographics, variable, pair_identifiers, row, coding_method = "none") { @@ -325,10 +325,10 @@ diff_list <- list() tmp <- data.frame( id = data[[id]], - setNames(list(var1), paste0(var, "_1")), - setNames(list(var2), paste0(var, "_2")), - setNames(list(diff), paste0(var, "_diff")), - setNames(list(mean_), paste0(var, "_mean")) + stats::setNames(list(var1), paste0(var, "_1")), + stats::setNames(list(var2), paste0(var, "_2")), + stats::setNames(list(diff), paste0(var, "_diff")), + stats::setNames(list(mean_), paste0(var, "_mean")) ) # obvious inefficiency diff --git a/man/check_sibling_order.Rd b/man/check_sibling_order.Rd index 9921cd8..fe1688a 100644 --- a/man/check_sibling_order.Rd +++ b/man/check_sibling_order.Rd @@ -7,9 +7,9 @@ check_sibling_order(..., fast = FALSE) } \arguments{ -\item{fast}{Logical. If TRUE, uses a faster method for data processing.} +\item{...}{Additional arguments to be passed to the function.} -\item{row}{The row number of the data frame} +\item{fast}{Logical. If TRUE, uses a faster method for data processing.} } \value{ A one-row data frame with a new column order indicating which familial member (1, 2, or diff --git a/man/discord_data.Rd b/man/discord_data.Rd index 29e0f58..0bf0e67 100644 --- a/man/discord_data.Rd +++ b/man/discord_data.Rd @@ -4,11 +4,21 @@ \alias{discord_data} \title{Restructure Data to Determine Kinship Differences} \usage{ -discord_data(..., fast = TRUE) +discord_data( + data, + outcome, + predictors, + id = NULL, + sex = "sex", + race = "race", + pair_identifiers, + demographics = "both", + coding_method = "none", + fast = TRUE, + ... +) } \arguments{ -\item{fast}{Logical. If TRUE, uses a faster method for data processing.} - \item{data}{The data set with kinship pairs} \item{outcome}{A character string containing the outcome variable of @@ -33,6 +43,10 @@ be "both". Other options include "sex", "race", or "none".} \item{coding_method}{A character string that indicates what kind of additional coding schemes should be used. Default is none. Other options include "binary" and "multi".} + +\item{fast}{Logical. If TRUE, uses a faster method for data processing.} + +\item{...}{Additional arguments to be passed to the function.} } \value{ A data frame that contains analyzable, paired data for performing diff --git a/man/discord_regression_legacy.Rd b/man/discord_regression_legacy.Rd index b15493c..3d909f3 100644 --- a/man/discord_regression_legacy.Rd +++ b/man/discord_regression_legacy.Rd @@ -23,6 +23,8 @@ predicting the outcome.} \item{more_args}{Optional string to add additional inputs to formula} \item{additional_formula}{Deprecated} + +\item{...}{Additional arguments to be passed to the function.} } \value{ Resulting `lm` object from performing the discordant regression. diff --git a/man/make_mean_diffs.Rd b/man/make_mean_diffs.Rd index 8cec7fb..a6ac8cf 100644 --- a/man/make_mean_diffs.Rd +++ b/man/make_mean_diffs.Rd @@ -7,9 +7,9 @@ make_mean_diffs(..., fast = FALSE) } \arguments{ -\item{fast}{Logical. If TRUE, uses a faster method for data processing.} +\item{...}{Additional arguments to be passed to the function.} -\item{variable}{outcomes and predictors for manipulating the data} +\item{fast}{Logical. If TRUE, uses a faster method for data processing.} } \description{ This function calculates differences and means of a given variable for each kinship pair. The order of subtraction and the variables' names in the output dataframe depend on the order column set by check_sibling_order(). diff --git a/vignettes/Power.Rmd b/vignettes/Power.Rmd index 7fc5910..1d26f5a 100644 --- a/vignettes/Power.Rmd +++ b/vignettes/Power.Rmd @@ -56,9 +56,7 @@ A data.frame with: # Example Usage - - -# Step 1: Define Simulation Grid +## Step 1: Define Simulation Grid We define a grid of simulation conditions, varying genetic relatedness, ACE variance components, and genetic correlations. @@ -69,6 +67,7 @@ We define a grid of simulation conditions, varying genetic relatedness, ACE vari library(NlsyLinks) library(discord) library(utils) +library(tidyverse) library(ggplot2) # Set random seed for reproducibility set.seed(1492) @@ -95,7 +94,7 @@ conditions <- expand.grid( -# Step 2: Run Simulations +## Step 2: Run Simulations For each condition, we simulate 100 replications of fitting discordant sibling models. We have kept the number of trials low for demonstration purposes, but you can increase `n_trials` for more robust power estimates. @@ -155,7 +154,8 @@ for (cond in 1:nrow(conditions)) { discord_regression(data = extract, outcome = "y", predictors = "x", id = "id", sex = NULL, - race = NULL), + race = NULL, + fast=TRUE), error = function(e) return(NULL) ) } @@ -262,6 +262,9 @@ p_noa ``` + + + ```{r, echo=FALSE, message=FALSE} knitr::kable(final_results) ``` diff --git a/vignettes/plots.Rmd b/vignettes/plots.Rmd index b579780..4895be4 100644 --- a/vignettes/plots.Rmd +++ b/vignettes/plots.Rmd @@ -17,8 +17,6 @@ This vignette walks through the steps needed to recreate a figure from Garrison ## Data Cleaning -## Data Cleaning - This section reuses the data preparation pipeline developed in the regression vignette.\ That vignette demonstrated how to set up data for discordant regression analysis by using discord data processing tools. Those tools facilitate the construction of kinship links, including identifying sibling pairs, merging sibling characteristics, and calculating pair-level variables. @@ -89,7 +87,7 @@ flu_modeling_data <- semi_join(df_link, With the data prepared, we restructure it using `discord_data()`. -```{r} +```{r, warning=FALSE} discord_flu <- discord_data( data = flu_modeling_data, outcome = "flu_total", @@ -141,7 +139,7 @@ individual_plot <- ggplot(flu_modeling_data, aes(x = s00_h40_s1, y = flu_total_s1, color = s00_h40_s1 - s00_h40_s2)) + geom_point(size = 0.8, alpha = 0.8, na.rm = TRUE, - position = position_jitter(w = 0.2, h = 0.2)) + + position = position_jitter(width = 0.2, height = 0.2)) + geom_smooth(method = "lm", se = FALSE, color = "black") + # added sibling 2 to the plot geom_point(size = 0.8, alpha = 0.8, na.rm = TRUE, @@ -177,7 +175,7 @@ This scatter plot shows mean SES at age 40 against mean flu vaccinations, with p main_plot <- ggplot(discord_flu, aes(x = s00_h40_mean, y = flu_total_mean, colour = s00_h40_diff)) + geom_point(size = 0.8, alpha = 0.8, na.rm = TRUE, - position = position_jitter(w = 0.2, h = 0.2)) + + position = position_jitter(width = 0.2, height = 0.2)) + geom_smooth(method = "lm", se = FALSE, color = "black") + scale_colour_gradientn( name = "Sibling\nDifferences\nin SES", From da7b6921ccd33e59b8834c07bd935934846e2f4f Mon Sep 17 00:00:00 2001 From: Mason Garrison Date: Sun, 4 May 2025 15:15:22 -0400 Subject: [PATCH 06/11] now the regression formula is smarter now the regression formula is smarter --- NAMESPACE | 2 + NEWS.md | 3 + R/func_discord_data.R | 2 +- R/func_discord_regression.R | 133 ++++++++++++++++++++++++++++++++++- man/discord_between_model.Rd | 68 ++++++++++++++++++ man/discord_regression.Rd | 15 ++++ 6 files changed, 221 insertions(+), 2 deletions(-) create mode 100644 man/discord_between_model.Rd diff --git a/NAMESPACE b/NAMESPACE index c7b8024..08faad3 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,7 +1,9 @@ # Generated by roxygen2: do not edit by hand +export(discord_between_model) export(discord_data) export(discord_regression) +export(discord_within_model) export(kinsim) importFrom(stats,formula) importFrom(stats,lm) diff --git a/NEWS.md b/NEWS.md index 1cb77ce..cb8cc2e 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,7 +1,10 @@ + + # discord 1.2.4 * Added a new vignette demonstrating ways to visualize discordant kinship data using the `ggplot2` package. * Added a new vignette demonstrating how to conduct a power analysis. * Vectorizing `discord_data()` to improve performance. +* Adding `discord_between_model()` to get the between-family model # discord 1.2.3.1 * More mild improvements to documentation diff --git a/R/func_discord_data.R b/R/func_discord_data.R index 19b7824..16061c7 100644 --- a/R/func_discord_data.R +++ b/R/func_discord_data.R @@ -155,7 +155,7 @@ discord_data_ram_optimized <- function(data, x = x, y = y, by = c( - "id", paste0(sex, "_1"), + "id", base::paste0(sex, "_1"), paste0(sex, "_2") ), all.x = TRUE diff --git a/R/func_discord_regression.R b/R/func_discord_regression.R index 176318f..347d768 100644 --- a/R/func_discord_regression.R +++ b/R/func_discord_regression.R @@ -105,7 +105,138 @@ discord_regression <- function(data, } - model <- stats::lm(stats::as.formula(paste(realOutcome, preds, sep = " ~ ")), data = preppedData) + formula_ <- stats::as.formula(base::paste(realOutcome, preds, sep = " ~ ")) + + model <- eval(substitute( + stats::lm(formula = F, data = preppedData), + list(F = formula_) + )) + + return(model) +} + +# alias +#' @rdname discord_regression +#' @export + +discord_within_model <- discord_regression + + + +#' Perform a Between-Family Linear Regression within the Discordant Kinship Framework +#' +#' @inheritParams discord_data +#' @inheritParams discord_regression +#' @return Resulting `lm` object from performing the between-family regression. +#' +#' @export +#' +#' @examples +#' +#' discord_between_model( +#' data = data_sample, +#' outcome = "height", +#' predictors = "weight", +#' pair_identifiers = c("_s1", "_s2"), +#' sex = NULL, +#' race = NULL +#' ) +#' + +discord_between_model <- function(data, + outcome, + predictors, + demographics = NULL, + id = NULL, + sex = "sex", + race = "race", + pair_identifiers = c("_s1", "_s2"), + data_processed = FALSE, + coding_method = "none", + fast = TRUE) { + + check_discord_errors(data = data, id = id, sex = sex, race = race, pair_identifiers = pair_identifiers) + + # if no demographics provided + if (is.null(demographics)) { + if (is.null(sex) & is.null(race)) { + demographics <- "none" + } else if (is.null(sex) & !is.null(race)) { + demographics <- "race" + } else if (!is.null(sex) & is.null(race)) { + demographics <- "sex" + } else if (!is.null(sex) & !is.null(race)) { + demographics <- "both" + } + } + + # If data not already processed, run through discord_data + if (!data_processed) { + preppedData <- discord_data( + data = data, + outcome = outcome, + predictors = predictors, + id = id, + sex = sex, + race = race, + pair_identifiers = pair_identifiers, + demographics = demographics, + coding_method = coding_method, + fast = fast + ) + } else { + preppedData <- data + } + + # Build formula + realOutcome <- base::paste0(outcome, "_mean") + + # predictors provided? + + if (!is.null(predictors)) { + pred_mean <- base::paste0(predictors, "_mean", collapse = " + ") + } else { + pred_mean <- NULL + } + + if (coding_method %in% c("binary", "binarymatch")) { + race_match <- base::paste0(race, "_binarymatch") + sex_match <- base::paste0(sex, "_binarymatch") + } else if (coding_method %in% c("multi", "multimatch")) { + race_match <- base::paste0(race, "_multimatch") + sex_match <- base::paste0(sex, "_multimatch") + } + + coding_method_list <- c("binary", "binarymatch", "multi", "multimatch") + + if (demographics == "none") { + preds <- pred_mean + } else if (demographics == "race") { + demographic_controls <- base::paste0(race, "_1") + if (coding_method %in% coding_method_list) { + demographic_controls <- race_match + } + preds <- paste(pred_mean, demographic_controls, sep = " + ") + } else if (demographics == "sex") { + demographic_controls <- base::paste0(sex, "_1 + ", sex, "_2") + if (coding_method %in% coding_method_list) { + demographic_controls <- sex_match + } + preds <- paste(pred_mean, demographic_controls, sep = " + ") + } else if (demographics == "both") { + demographic_controls <- base::paste0(sex, "_1 + ", race, "_1 + ", sex, "_2") + if (coding_method %in% coding_method_list) { + demographic_controls <- base::paste0(sex_match, " + ", race_match) + } + preds <- base::paste(pred_mean, demographic_controls, sep = " + ") + } + + formula_ <- stats::as.formula(base::paste(realOutcome, preds, sep = " ~ ")) + + model <- eval(substitute( + stats::lm(formula = F, data = preppedData), + list(F = formula_) + )) return(model) } diff --git a/man/discord_between_model.Rd b/man/discord_between_model.Rd new file mode 100644 index 0000000..2f39cd9 --- /dev/null +++ b/man/discord_between_model.Rd @@ -0,0 +1,68 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/func_discord_regression.R +\name{discord_between_model} +\alias{discord_between_model} +\title{Perform a Between-Family Linear Regression within the Discordant Kinship Framework} +\usage{ +discord_between_model( + data, + outcome, + predictors, + demographics = NULL, + id = NULL, + sex = "sex", + race = "race", + pair_identifiers = c("_s1", "_s2"), + data_processed = FALSE, + coding_method = "none", + fast = TRUE +) +} +\arguments{ +\item{data}{The data set with kinship pairs} + +\item{outcome}{A character string containing the outcome variable of +interest.} + +\item{predictors}{A character vector containing the column names for +predicting the outcome.} + +\item{demographics}{Indicator variable for if the data has the sex and race +demographics. If both are present (default, and recommended), value should +be "both". Other options include "sex", "race", or "none".} + +\item{id}{Default's to NULL. If supplied, must specify the column name +corresponding to unique kinship pair identifiers.} + +\item{sex}{A character string for the sex column name.} + +\item{race}{A character string for the race column name.} + +\item{pair_identifiers}{A character vector of length two that contains the +variable identifier for each kinship pair} + +\item{data_processed}{Logical operator if data are already preprocessed by discord_data , default is FALSE} + +\item{coding_method}{A character string that indicates what kind of +additional coding schemes should be used. Default is none. Other options include "binary" and "multi".} + +\item{fast}{Logical. If TRUE, uses a faster method for data processing.} +} +\value{ +Resulting `lm` object from performing the between-family regression. +} +\description{ +Perform a Between-Family Linear Regression within the Discordant Kinship Framework +} +\examples{ + +discord_between_model( + data = data_sample, + outcome = "height", + predictors = "weight", + pair_identifiers = c("_s1", "_s2"), + sex = NULL, + race = NULL +) + +} diff --git a/man/discord_regression.Rd b/man/discord_regression.Rd index 0e14d78..08aea2f 100644 --- a/man/discord_regression.Rd +++ b/man/discord_regression.Rd @@ -2,6 +2,7 @@ % Please edit documentation in R/func_discord_regression.R \name{discord_regression} \alias{discord_regression} +\alias{discord_within_model} \title{Perform a Linear Regression within the Discordant Kinship Framework} \usage{ discord_regression( @@ -17,6 +18,20 @@ discord_regression( coding_method = "none", fast = TRUE ) + +discord_within_model( + data, + outcome, + predictors, + demographics = NULL, + id = NULL, + sex = "sex", + race = "race", + pair_identifiers = c("_s1", "_s2"), + data_processed = FALSE, + coding_method = "none", + fast = TRUE +) } \arguments{ \item{data}{The data set with kinship pairs} From da201647adf12ff0bf55eee90fb344b85cf3b323 Mon Sep 17 00:00:00 2001 From: Mason Garrison Date: Sun, 4 May 2025 15:19:57 -0400 Subject: [PATCH 07/11] stylyr --- R/func_discord_data.R | 84 +++---- R/func_discord_regression.R | 4 +- R/helpers_regression.R | 229 +++++++++--------- .../test-discord_regression_arguments.R | 2 +- tests/testthat/test-new-legacy.R | 16 +- vignettes/Power.Rmd | 145 ++++++----- vignettes/plots.Rmd | 141 ++++++----- 7 files changed, 328 insertions(+), 293 deletions(-) diff --git a/R/func_discord_data.R b/R/func_discord_data.R index 16061c7..6b3adb2 100644 --- a/R/func_discord_data.R +++ b/R/func_discord_data.R @@ -35,7 +35,6 @@ #' demographics = "none" #' ) #' - discord_data <- function(data, outcome, predictors, @@ -48,7 +47,8 @@ discord_data <- function(data, fast = TRUE, ...) { if (fast) { - discord_data_fast(data = data, + discord_data_fast( + data = data, outcome = outcome, id = id, sex = sex, @@ -57,18 +57,21 @@ discord_data <- function(data, demographics = demographics, predictors = predictors, coding_method = coding_method, - ...) + ... + ) } else { - discord_data_ram_optimized(data = data, - outcome = outcome, - id = id, - sex = sex, - race = race, - pair_identifiers = pair_identifiers, - demographics = demographics, - predictors = predictors, - coding_method = coding_method, - ...) + discord_data_ram_optimized( + data = data, + outcome = outcome, + id = id, + sex = sex, + race = race, + pair_identifiers = pair_identifiers, + demographics = demographics, + predictors = predictors, + coding_method = coding_method, + ... + ) } } @@ -80,14 +83,14 @@ discord_data <- function(data, #' @keywords internal discord_data_ram_optimized <- function(data, - outcome, - predictors, - id = NULL, - sex = "sex", - race = "race", - pair_identifiers, - demographics = "both", - coding_method = "none") { + outcome, + predictors, + id = NULL, + sex = "sex", + race = "race", + pair_identifiers, + demographics = "both", + coding_method = "none") { # combine outcome and predictors for manipulating the data variables <- c(outcome, predictors) @@ -183,7 +186,7 @@ discord_data_ram_optimized <- function(data, return(output) } .clean_names <- function(df) { - names(df) <- sub(".*\\.", "", names(df)) # If name has "prefix.name", keep only "name" + names(df) <- sub(".*\\.", "", names(df)) # If name has "prefix.name", keep only "name" return(df) } #' @title Discord Data Fast @@ -198,11 +201,10 @@ discord_data_fast <- function(data, predictors, id = NULL, sex = "sex", - race = "race", - pair_identifiers, - demographics = "both", - coding_method = "none") { - + race = "race", + pair_identifiers, + demographics = "both", + coding_method = "none") { # combine outcome and predictors for manipulating the data variables <- c(outcome, predictors) @@ -217,7 +219,7 @@ discord_data_fast <- function(data, ) if (!valid_ids(orderedOnOutcome, - id = id + id = id )) { id <- "rowwise_id" orderedOnOutcome <- cbind(orderedOnOutcome, rowwise_id = 1:nrow(data)) @@ -227,18 +229,18 @@ discord_data_fast <- function(data, # Step 3: Differencing (using original helper, fast = TRUE) #------------------------------------------- - # out <- vector(mode = "list", length = length(variables)) - out <- make_mean_diffs( - data = orderedOnOutcome, - variables = variables, - id = id, - sex = sex, - race = race, - pair_identifiers = pair_identifiers, - demographics = demographics, - coding_method = coding_method, - fast = TRUE - ) + # out <- vector(mode = "list", length = length(variables)) + out <- make_mean_diffs( + data = orderedOnOutcome, + variables = variables, + id = id, + sex = sex, + race = race, + pair_identifiers = pair_identifiers, + demographics = demographics, + coding_method = coding_method, + fast = TRUE + ) @@ -294,7 +296,7 @@ discord_data_fast <- function(data, ) } # remove names of lists that get concatenated by Reduce - #the variable name repeats to look like var.var_1, instead of var_1 + # the variable name repeats to look like var.var_1, instead of var_1 # how do we fix this? it breaks inside Reduce output <- Reduce(mrg, out) diff --git a/R/func_discord_regression.R b/R/func_discord_regression.R index 347d768..f4e94d6 100644 --- a/R/func_discord_regression.R +++ b/R/func_discord_regression.R @@ -142,7 +142,6 @@ discord_within_model <- discord_regression #' race = NULL #' ) #' - discord_between_model <- function(data, outcome, predictors, @@ -154,7 +153,6 @@ discord_between_model <- function(data, data_processed = FALSE, coding_method = "none", fast = TRUE) { - check_discord_errors(data = data, id = id, sex = sex, race = race, pair_identifiers = pair_identifiers) # if no demographics provided @@ -231,7 +229,7 @@ discord_between_model <- function(data, preds <- base::paste(pred_mean, demographic_controls, sep = " + ") } - formula_ <- stats::as.formula(base::paste(realOutcome, preds, sep = " ~ ")) + formula_ <- stats::as.formula(base::paste(realOutcome, preds, sep = " ~ ")) model <- eval(substitute( stats::lm(formula = F, data = preppedData), diff --git a/R/helpers_regression.R b/R/helpers_regression.R index 9c15bcb..b92746e 100644 --- a/R/helpers_regression.R +++ b/R/helpers_regression.R @@ -13,7 +13,7 @@ #' check_sibling_order <- function(..., fast = FALSE) { - if (fast==TRUE) { + if (fast == TRUE) { check_sibling_order_fast(...) } else { check_sibling_order_ram_optimized(...) @@ -67,8 +67,6 @@ check_sibling_order_ram_optimized <- function(data, outcome, pair_identifiers, r } check_sibling_order_fast <- function(data, outcome, pair_identifiers) { - - #------------------------- # 1. VECTORIZE ORDER ASSIGNMENT #------------------------- @@ -81,7 +79,8 @@ check_sibling_order_fast <- function(data, outcome, pair_identifiers) { } order <- ifelse(outcome1 > outcome2, "s1", - ifelse(outcome1 < outcome2, "s2", NA)) + ifelse(outcome1 < outcome2, "s2", NA) + ) # Random tie breaking ties <- which(is.na(order)) @@ -113,9 +112,9 @@ make_mean_diffs <- function(..., fast = FALSE) { } -make_mean_diffs_ram_optimized <- function(data, id, sex, race, demographics, - variable, pair_identifiers, row, - coding_method = "none") { +make_mean_diffs_ram_optimized <- function(data, id, sex, race, demographics, + variable, pair_identifiers, row, + coding_method = "none") { S1 <- base::paste0(variable, pair_identifiers[1]) S2 <- base::paste0(variable, pair_identifiers[2]) sexS1 <- base::paste0(sex, pair_identifiers[1]) @@ -164,17 +163,19 @@ make_mean_diffs_ram_optimized <- function(data, id, sex, race, demographics, # check for whether or not race and sex are defined - output <- recode_demographics(demographics = demographics, - data = data, - raceS1 = raceS1, - raceS2 = raceS2, - race = race, - sexS1 = sexS1, - sexS2 = sexS2, - sex =sex, - coding_method = coding_method, - output = output, - fast = FALSE) + output <- recode_demographics( + demographics = demographics, + data = data, + raceS1 = raceS1, + raceS2 = raceS2, + race = race, + sexS1 = sexS1, + sexS2 = sexS2, + sex = sex, + coding_method = coding_method, + output = output, + fast = FALSE + ) return(output) @@ -182,107 +183,106 @@ make_mean_diffs_ram_optimized <- function(data, id, sex, race, demographics, recode_demographics <- function(demographics, data, raceS1, raceS2, - race, sexS1, sexS2, sex, coding_method, output,fast=FALSE) { - + race, sexS1, sexS2, sex, coding_method, output, fast = FALSE) { # check for whether or not race and sex are defined -if (fast) { - if (demographics == "race") { - output_demographics <- data.frame( - race_1 = data[[raceS1]], - race_2 = data[[raceS2]] - ) - output_demographics$race_1[data$order == "s2"] <- data[[raceS2]][data$order == "s2"] - output_demographics$race_2[data$order == "s2"] <- data[[raceS1]][data$order == "s2"] - names(output_demographics) <- paste0(race, c("_1", "_2")) -} else if (demographics == "sex") { - output_demographics <- data.frame( - sex_1 = data[[sexS1]], - sex_2 = data[[sexS2]] - ) - output_demographics$sex_1[data$order == "s2"] <- data[[sexS2]][data$order == "s2"] - output_demographics$sex_2[data$order == "s2"] <- data[[sexS1]][data$order == "s2"] - - names(output_demographics) <- paste0(sex, c("_1", "_2")) -} else if (demographics == "both") { - output_demographics <- data.frame( - sex_1 = data[[sexS1]], - sex_2 = data[[sexS2]], - race_1 = data[[raceS1]], - race_2 = data[[raceS2]] - ) - output_demographics$race_1[data$order == "s2"] <- data[[raceS2]][data$order == "s2"] - output_demographics$race_2[data$order == "s2"] <- data[[raceS1]][data$order == "s2"] - output_demographics$sex_1[data$order == "s2"] <- data[[sexS2]][data$order == "s2"] - output_demographics$sex_2[data$order == "s2"] <- data[[sexS1]][data$order == "s2"] - names(output_demographics) <- c(paste0(sex, c("_1", "_2")), paste0(race, c("_1", "_2"))) -} - } else { - if (demographics == "race") { - if (data[, "order"] == "s1") { + if (fast) { + if (demographics == "race") { output_demographics <- data.frame( race_1 = data[[raceS1]], race_2 = data[[raceS2]] ) - } else if (data[, "order"] == "s2") { - output_demographics <- data.frame( - race_1 = data[[raceS2]], - race_2 = data[[raceS1]] - ) - } - - names(output_demographics) <- paste0(race, c("_1", "_2")) - } else if (demographics == "sex") { - if (data[, "order"] == "s1") { + output_demographics$race_1[data$order == "s2"] <- data[[raceS2]][data$order == "s2"] + output_demographics$race_2[data$order == "s2"] <- data[[raceS1]][data$order == "s2"] + names(output_demographics) <- paste0(race, c("_1", "_2")) + } else if (demographics == "sex") { output_demographics <- data.frame( sex_1 = data[[sexS1]], sex_2 = data[[sexS2]] ) - } else if (data[, "order"] == "s2") { - output_demographics <- data.frame( - sex_1 = data[[sexS2]], - sex_2 = data[[sexS1]] - ) - } + output_demographics$sex_1[data$order == "s2"] <- data[[sexS2]][data$order == "s2"] + output_demographics$sex_2[data$order == "s2"] <- data[[sexS1]][data$order == "s2"] - names(output_demographics) <- paste0(sex, c("_1", "_2")) - } else if (demographics == "both") { - if (data[, "order"] == "s1") { + names(output_demographics) <- paste0(sex, c("_1", "_2")) + } else if (demographics == "both") { output_demographics <- data.frame( sex_1 = data[[sexS1]], sex_2 = data[[sexS2]], race_1 = data[[raceS1]], race_2 = data[[raceS2]] ) - } else if (data[, "order"] == "s2") { - output_demographics <- data.frame( - sex_1 = data[[sexS2]], - sex_2 = data[[sexS1]], - race_1 = data[[raceS2]], - race_2 = data[[raceS1]] - ) + output_demographics$race_1[data$order == "s2"] <- data[[raceS2]][data$order == "s2"] + output_demographics$race_2[data$order == "s2"] <- data[[raceS1]][data$order == "s2"] + output_demographics$sex_1[data$order == "s2"] <- data[[sexS2]][data$order == "s2"] + output_demographics$sex_2[data$order == "s2"] <- data[[sexS1]][data$order == "s2"] + names(output_demographics) <- c(paste0(sex, c("_1", "_2")), paste0(race, c("_1", "_2"))) + } + } else { + if (demographics == "race") { + if (data[, "order"] == "s1") { + output_demographics <- data.frame( + race_1 = data[[raceS1]], + race_2 = data[[raceS2]] + ) + } else if (data[, "order"] == "s2") { + output_demographics <- data.frame( + race_1 = data[[raceS2]], + race_2 = data[[raceS1]] + ) + } + + names(output_demographics) <- paste0(race, c("_1", "_2")) + } else if (demographics == "sex") { + if (data[, "order"] == "s1") { + output_demographics <- data.frame( + sex_1 = data[[sexS1]], + sex_2 = data[[sexS2]] + ) + } else if (data[, "order"] == "s2") { + output_demographics <- data.frame( + sex_1 = data[[sexS2]], + sex_2 = data[[sexS1]] + ) + } + + names(output_demographics) <- paste0(sex, c("_1", "_2")) + } else if (demographics == "both") { + if (data[, "order"] == "s1") { + output_demographics <- data.frame( + sex_1 = data[[sexS1]], + sex_2 = data[[sexS2]], + race_1 = data[[raceS1]], + race_2 = data[[raceS2]] + ) + } else if (data[, "order"] == "s2") { + output_demographics <- data.frame( + sex_1 = data[[sexS2]], + sex_2 = data[[sexS1]], + race_1 = data[[raceS2]], + race_2 = data[[raceS1]] + ) + } + + names(output_demographics) <- c(paste0(sex, c("_1", "_2")), paste0(race, c("_1", "_2"))) } - - names(output_demographics) <- c(paste0(sex, c("_1", "_2")), paste0(race, c("_1", "_2"))) - } } -# both methods + # both methods if (coding_method != "none") { # New logic to handle race and sex as categorical variables if (demographics == "both" || demographics == "race") { race_1_name <- paste0(race, "_1") race_2_name <- paste0(race, "_2") output_demographics[[paste0(race, "_binarymatch")]] <- ifelse(output_demographics[[race_1_name]] == output_demographics[[race_2_name]], - 1, 0 + 1, 0 ) output_demographics[[paste0(race, "_multimatch")]] <- ifelse(output_demographics[[race_1_name]] == output_demographics[[race_2_name]], - as.character(output_demographics[[race_2_name]]), "mixed" + as.character(output_demographics[[race_2_name]]), "mixed" ) } if (demographics == "both" || demographics == "sex") { sex_1_name <- paste0(sex, "_1") sex_2_name <- paste0(sex, "_2") output_demographics[[paste0(sex, "_binarymatch")]] <- ifelse(output_demographics[[sex_1_name]] == output_demographics[[sex_2_name]], - 1, 0 + 1, 0 ) output_demographics[[paste0(sex, "_multimatch")]] <- ifelse(output_demographics[[sex_1_name]] == output_demographics[[sex_2_name]], as.character(output_demographics[[sex_2_name]]), "mixed") } @@ -297,28 +297,29 @@ if (fast) { -make_mean_diffs_fast <- function(data, id, sex, race, demographics, - variables= variable, - variable=NULL, - pair_identifiers, - coding_method = "none" - ) { - # S1 <- base::paste0(variable, pair_identifiers[1]) - # S2 <- base::paste0(variable, pair_identifiers[2]) +make_mean_diffs_fast <- function(data, id, sex, race, demographics, + variables = variable, + variable = NULL, + pair_identifiers, + coding_method = "none") { + # S1 <- base::paste0(variable, pair_identifiers[1]) + # S2 <- base::paste0(variable, pair_identifiers[2]) sexS1 <- base::paste0(sex, pair_identifiers[1]) sexS2 <- base::paste0(sex, pair_identifiers[2]) raceS1 <- base::paste0(race, pair_identifiers[1]) raceS2 <- base::paste0(race, pair_identifiers[2]) -diff_list <- list() + diff_list <- list() for (var in variables) { var1 <- ifelse(data$order == "s1", - data[[paste0(var, pair_identifiers[1])]], - data[[paste0(var, pair_identifiers[2])]]) + data[[paste0(var, pair_identifiers[1])]], + data[[paste0(var, pair_identifiers[2])]] + ) var2 <- ifelse(data$order == "s1", - data[[paste0(var, pair_identifiers[2])]], - data[[paste0(var, pair_identifiers[1])]]) + data[[paste0(var, pair_identifiers[2])]], + data[[paste0(var, pair_identifiers[1])]] + ) diff <- var1 - var2 mean_ <- (var1 + var2) / 2 @@ -331,21 +332,23 @@ diff_list <- list() stats::setNames(list(mean_), paste0(var, "_mean")) ) -# obvious inefficiency - tmp <- recode_demographics(demographics = demographics, - data = data, - raceS1 = raceS1, - raceS2 = raceS2, - race = race, - sexS1 = sexS1, - sexS2 = sexS2, - sex =sex, - coding_method = coding_method, - output = tmp, - fast = TRUE) + # obvious inefficiency + tmp <- recode_demographics( + demographics = demographics, + data = data, + raceS1 = raceS1, + raceS2 = raceS2, + race = race, + sexS1 = sexS1, + sexS2 = sexS2, + sex = sex, + coding_method = coding_method, + output = tmp, + fast = TRUE + ) diff_list[[var]] <- tmp } -return(diff_list) + return(diff_list) } #' @title Check Discord Errors diff --git a/tests/testthat/test-discord_regression_arguments.R b/tests/testthat/test-discord_regression_arguments.R index d9334f6..fc68063 100644 --- a/tests/testthat/test-discord_regression_arguments.R +++ b/tests/testthat/test-discord_regression_arguments.R @@ -33,7 +33,7 @@ test_that("flu_2008 ~ edu_2008 + ses_2008 + race + sex", { new <- discord_regression(uniqueExtendedIDs, outcome = "flu_2008", predictors = c("edu_2008", "ses_2008"), - fast=TRUE + fast = TRUE ) new <- summarize_results(new) diff --git a/tests/testthat/test-new-legacy.R b/tests/testthat/test-new-legacy.R index 53d9e58..8dad3e8 100644 --- a/tests/testthat/test-new-legacy.R +++ b/tests/testthat/test-new-legacy.R @@ -375,14 +375,14 @@ test_that("half-siblings nonsignificant: new & legacy data prep code results are test_that("half-siblings nonsignificant: new & legacy data prep code results are equal", { set.seed(18) new_data <- discord_data(half_sibs_nonsignif, - outcome = "y1", - predictors = "y2", - id = "id", - sex = NULL, - race = NULL, - pair_identifiers = c("_1", "_2"), - demographics = "none", - fast = TRUE + outcome = "y1", + predictors = "y2", + id = "id", + sex = NULL, + race = NULL, + pair_identifiers = c("_1", "_2"), + demographics = "none", + fast = TRUE ) rownames(new_data) <- NULL diff --git a/vignettes/Power.Rmd b/vignettes/Power.Rmd index 1d26f5a..761a130 100644 --- a/vignettes/Power.Rmd +++ b/vignettes/Power.Rmd @@ -18,7 +18,6 @@ knitr::opts_chunk$set( fig.width = 7, fig.height = 5 ) - ``` @@ -73,23 +72,20 @@ library(ggplot2) set.seed(1492) # Disable scientific notation for clarity -options(scipen=999) +options(scipen = 999) conditions <- expand.grid( - total_pairs = c(100,250,500,750,1000), - relatedness = c(1,.5), + total_pairs = c(100, 250, 500, 750, 1000), + relatedness = c(1, .5), cov_a = c(0, 0.25), cov_c = c(0, 0.25), - cov_e = c(0,0.25), + cov_e = c(0, 0.25), ace_a = c(1), ace_c = c(1), ace_e = c(1) ) - - - ``` @@ -99,7 +95,6 @@ conditions <- expand.grid( For each condition, we simulate 100 replications of fitting discordant sibling models. We have kept the number of trials low for demonstration purposes, but you can increase `n_trials` for more robust power estimates. ```{r} - n_trials <- 100 FAST <- TRUE # Set to FALSE for slower, more detailed analysis results_list <- list() @@ -113,7 +108,7 @@ for (cond in 1:nrow(conditions)) { for (i in 1:n_trials) { trial <- kinsim( r_vector = rep(current$relatedness, each = current$total_pairs), - npg_all = current$total_pairs, + npg_all = current$total_pairs, ace_all = c(current$ace_a, current$ace_c, current$ace_e), cov_a = current$cov_a, cov_c = current$cov_c, @@ -127,43 +122,51 @@ for (cond in 1:nrow(conditions)) { x_s1 = trial$y2_1, x_s2 = trial$y2_2 ) - if(FAST==TRUE){ - # faster + if (FAST == TRUE) { + # faster # double enter the data - extract2 <- rbind( - transform(extract, y_s1 = y_s2, y_s2 = y_s1, - x_s1 = x_s2, x_s2 = x_s1), - extract - ) - extract2$y_diff <- extract2$y_s1 - extract2$y_s2 - extract2$x_diff <- extract2$x_s1 - extract2$x_s2 - extract2$x_bar <- (extract2$x_s1 + extract2$x_s2) / 2 - extract2$y_bar <- (extract2$y_s1 + extract2$y_s2) / 2 - # select pair with ydiff > 0 - extract3 <- extract2[extract2$y_diff>0,] - - - fit <- tryCatch( - lm(y_diff ~ x_bar + y_bar + x_diff, data = extract3), - error = function(e) return(NULL) - ) + extract2 <- rbind( + transform(extract, + y_s1 = y_s2, y_s2 = y_s1, + x_s1 = x_s2, x_s2 = x_s1 + ), + extract + ) + extract2$y_diff <- extract2$y_s1 - extract2$y_s2 + extract2$x_diff <- extract2$x_s1 - extract2$x_s2 + extract2$x_bar <- (extract2$x_s1 + extract2$x_s2) / 2 + extract2$y_bar <- (extract2$y_s1 + extract2$y_s2) / 2 + # select pair with ydiff > 0 + extract3 <- extract2[extract2$y_diff > 0, ] + + + fit <- tryCatch( + lm(y_diff ~ x_bar + y_bar + x_diff, data = extract3), + error = function(e) { + return(NULL) + } + ) } # slower - if(FAST==FALSE){ - fit <- tryCatch( - discord_regression(data = extract, outcome = "y", predictors = "x", - id = "id", - sex = NULL, - race = NULL, - fast=TRUE), - error = function(e) return(NULL) - ) -} + if (FAST == FALSE) { + fit <- tryCatch( + discord_regression( + data = extract, outcome = "y", predictors = "x", + id = "id", + sex = NULL, + race = NULL, + fast = TRUE + ), + error = function(e) { + return(NULL) + } + ) + } if (!is.null(fit)) { sm <- summary(fit) temp_results[i, "coef_xdiff"] <- coef(sm)["x_diff", "Estimate"] - temp_results[i, "p_xdiff"] <- coef(sm)["x_diff", "Pr(>|t|)"] - temp_results[i, "r.squared"] <- sm$r.squared + temp_results[i, "p_xdiff"] <- coef(sm)["x_diff", "Pr(>|t|)"] + temp_results[i, "r.squared"] <- sm$r.squared } } @@ -177,7 +180,6 @@ for (cond in 1:nrow(conditions)) { Our final step is to summarize the power across all conditions. We calculate the proportion of trials where the p-value for the difference in means (`p_xdiff`) is less than 0.05, and we also report the median R-squared value from the regression models. Note that we've limited the number of trials to 10 for demonstration purposes, but you can (and should) increase this for more robust estimates. ```{r summarize-power} - power_summary <- lapply(results_list, function(res) { data.frame( power_xdiff = mean(res$p_xdiff < 0.05, na.rm = TRUE), @@ -208,12 +210,13 @@ final_results$cov_e <- factor(final_results$cov_e, levels = c(0, 0.25), labels = ```{r plot-power, echo=FALSE} - final_results_noc <- final_results[final_results$cov_c == "No Covariate C", ] -p_noc <- ggplot(final_results_noc, aes(x = total_pairs, y = power_xdiff, - fill= factor(relatedness), - color = factor(relatedness))) + +p_noc <- ggplot(final_results_noc, aes( + x = total_pairs, y = power_xdiff, + fill = factor(relatedness), + color = factor(relatedness) +)) + geom_bar(stat = "identity", position = "dodge") + labs( title = "Power Analysis for Discordant Sibling Designs", @@ -222,23 +225,29 @@ p_noc <- ggplot(final_results_noc, aes(x = total_pairs, y = power_xdiff, color = "Relatedness", fill = "Relatedness" ) + - theme_minimal() + # Manual, per-facet annotations with explicit facet-mapped data - geom_text( x = 600, y = 0.55, label = "False Positive Rate", - data = data.frame(cov_a = "No Covariate A", cov_e = "No Covariate E"), - fontface = "italic", size = 3.5, inherit.aes = FALSE) + - geom_text( x = 600, y = 0.85, label = "Genetic Confounding", - data = data.frame(cov_a ="Covariate A (0.25)", cov_e = "No Covariate E"), - fontface = "italic", size = 3.5, inherit.aes = FALSE) + - facet_grid(cov_e ~ cov_a, labeller = labeller(facet_labels)) + theme_minimal() + # Manual, per-facet annotations with explicit facet-mapped data + geom_text( + x = 600, y = 0.55, label = "False Positive Rate", + data = data.frame(cov_a = "No Covariate A", cov_e = "No Covariate E"), + fontface = "italic", size = 3.5, inherit.aes = FALSE + ) + + geom_text( + x = 600, y = 0.85, label = "Genetic Confounding", + data = data.frame(cov_a = "Covariate A (0.25)", cov_e = "No Covariate E"), + fontface = "italic", size = 3.5, inherit.aes = FALSE + ) + + facet_grid(cov_e ~ cov_a, labeller = labeller(facet_labels)) p_noc final_results_noa <- final_results[final_results$cov_a == "No Covariate A", ] -p_noa <- ggplot(final_results_noa, aes(x = total_pairs, y = power_xdiff, - fill= factor(relatedness), - color = factor(relatedness))) + +p_noa <- ggplot(final_results_noa, aes( + x = total_pairs, y = power_xdiff, + fill = factor(relatedness), + color = factor(relatedness) +)) + geom_bar(stat = "identity", position = "dodge") + labs( title = "Power Analysis for Discordant Sibling Designs", @@ -247,18 +256,20 @@ p_noa <- ggplot(final_results_noa, aes(x = total_pairs, y = power_xdiff, color = "Relatedness", fill = "Relatedness" ) + - theme_minimal() + # Manual, per-facet annotations with explicit facet-mapped data - geom_text( x = 600, y = 0.55, label = "False Positive Rate", - data = data.frame(cov_c = "No Covariate C", cov_e = "No Covariate E"), - fontface = "italic", size = 3.5, inherit.aes = FALSE) + - geom_text( x = 600, y = 0.85, label = "Shared-Environmental Confounding", - data = data.frame(cov_c ="Covariate C (0.25)", cov_e = "No Covariate E"), - fontface = "italic", size = 3.5, inherit.aes = FALSE) + - facet_grid(cov_e ~ cov_c, labeller = labeller(facet_labels)) + theme_minimal() + # Manual, per-facet annotations with explicit facet-mapped data + geom_text( + x = 600, y = 0.55, label = "False Positive Rate", + data = data.frame(cov_c = "No Covariate C", cov_e = "No Covariate E"), + fontface = "italic", size = 3.5, inherit.aes = FALSE + ) + + geom_text( + x = 600, y = 0.85, label = "Shared-Environmental Confounding", + data = data.frame(cov_c = "Covariate C (0.25)", cov_e = "No Covariate E"), + fontface = "italic", size = 3.5, inherit.aes = FALSE + ) + + facet_grid(cov_e ~ cov_c, labeller = labeller(facet_labels)) p_noa - - ``` diff --git a/vignettes/plots.Rmd b/vignettes/plots.Rmd index 4895be4..b0eaa56 100644 --- a/vignettes/plots.Rmd +++ b/vignettes/plots.Rmd @@ -104,23 +104,27 @@ discord_flu <- discord_data( Because we are interested in differences between kin, we create a new variable, `ses_diff_group`, that classifies SES differences into three categories: "More Advantage", "Equally Advantage", and "Less Advantage". This variable is later used to group observations in the marginal density plots. ```{r} - discord_flu <- discord_flu %>% mutate( # # Classify Difference Grouping - ses_diff_group = factor(case_when(scale(s00_h40_diff) > 0.33 ~ "More Advantage", - scale(s00_h40_diff) < -0.33 ~ "Less Advantage", - abs(scale(s00_h40_diff)) <= 0.33 ~ "Equally Advantage"), - levels = c("Less Advantage", - "Equally Advantage", - "More Advantage")) + ses_diff_group = factor( + case_when( + scale(s00_h40_diff) > 0.33 ~ "More Advantage", + scale(s00_h40_diff) < -0.33 ~ "Less Advantage", + abs(scale(s00_h40_diff)) <= 0.33 ~ "Equally Advantage" + ), + levels = c( + "Less Advantage", + "Equally Advantage", + "More Advantage" + ) + ) ) # Create a color palette for the shading shading <- c("firebrick4", "firebrick1", "dodgerblue1", "dodgerblue4") max_val <- max(abs(discord_flu$s00_h40_diff), na.rm = TRUE) values <- seq(-max_val, max_val, length = length(shading)) - ``` # Plotting the Data @@ -133,36 +137,43 @@ values <- seq(-max_val, max_val, length = length(shading)) This scatter plot shows individual SES at age 40 against individual flu vaccinations. ```{r individual, echo=TRUE, message=FALSE} - # Individual level plot -individual_plot <- ggplot(flu_modeling_data, aes(x = s00_h40_s1, - y = flu_total_s1, - color = s00_h40_s1 - s00_h40_s2)) + - geom_point(size = 0.8, alpha = 0.8, na.rm = TRUE, - position = position_jitter(width = 0.2, height = 0.2)) + +individual_plot <- ggplot(flu_modeling_data, aes( + x = s00_h40_s1, + y = flu_total_s1, + color = s00_h40_s1 - s00_h40_s2 +)) + + geom_point( + size = 0.8, alpha = 0.8, na.rm = TRUE, + position = position_jitter(width = 0.2, height = 0.2) + ) + geom_smooth(method = "lm", se = FALSE, color = "black") + # added sibling 2 to the plot - geom_point(size = 0.8, alpha = 0.8, na.rm = TRUE, - position = position_jitter(w = 0.2, h = 0.2), - aes( - x = s00_h40_s2, - y = flu_total_s2, - color = s00_h40_s2 - s00_h40_s1)) + + geom_point( + size = 0.8, alpha = 0.8, na.rm = TRUE, + position = position_jitter(w = 0.2, h = 0.2), + aes( + x = s00_h40_s2, + y = flu_total_s2, + color = s00_h40_s2 - s00_h40_s1 + ) + ) + scale_colour_gradientn( name = "Sibling\nDifferences\nin SES", colours = shading, na.value = "#AD78B6", values = scales::rescale(c(-max_val, max_val)) ) + - labs(x = "SES at Age 40", - y = "Flu Vaccination Count") + + labs( + x = "SES at Age 40", + y = "Flu Vaccination Count" + ) + theme_minimal() #+ # theme(legend.position = "none") individual_plot + ggtitle("Individual Level Plot") + theme(plot.title = element_text(hjust = 0.5)) - ``` @@ -172,23 +183,28 @@ This scatter plot shows mean SES at age 40 against mean flu vaccinations, with p ```{r scatter, message=FALSE, include=FALSE, echo=TRUE} # Main scatter plot -main_plot <- ggplot(discord_flu, aes(x = s00_h40_mean, - y = flu_total_mean, colour = s00_h40_diff)) + - geom_point(size = 0.8, alpha = 0.8, na.rm = TRUE, - position = position_jitter(width = 0.2, height = 0.2)) + +main_plot <- ggplot(discord_flu, aes( + x = s00_h40_mean, + y = flu_total_mean, colour = s00_h40_diff +)) + + geom_point( + size = 0.8, alpha = 0.8, na.rm = TRUE, + position = position_jitter(width = 0.2, height = 0.2) + ) + geom_smooth(method = "lm", se = FALSE, color = "black") + scale_colour_gradientn( name = "Sibling\nDifferences\nin SES", colours = shading, na.value = "#AD78B6", - values = scales::rescale(c(min(discord_flu$flu_total_diff, na.rm = TRUE), - mean(discord_flu$flu_total_diff, na.rm = TRUE), - max(discord_flu$flu_total_diff, na.rm = TRUE))) + values = scales::rescale(c( + min(discord_flu$flu_total_diff, na.rm = TRUE), + mean(discord_flu$flu_total_diff, na.rm = TRUE), + max(discord_flu$flu_total_diff, na.rm = TRUE) + )) ) + theme_minimal() + - theme( legend.position = "left")+ + theme(legend.position = "left") + labs(x = "Mean SES at Age 40", y = "Mean Flu Vaccinations (2006–2016)") - ``` ```{r echo=FALSE, message=FALSE} @@ -200,7 +216,6 @@ main_plot We overlay marginal density plots for SES and flu vaccinations, grouped by SES difference category. ```{r plot-raw-data, message=FALSE} - # Marginal X density (SES mean) xdensity <- ggplot(discord_flu, aes(x = s00_h40_mean, group = ses_diff_group, color = ses_diff_group)) + geom_density(adjust = 2, linewidth = 1, fill = NA) + @@ -209,12 +224,13 @@ xdensity <- ggplot(discord_flu, aes(x = s00_h40_mean, group = ses_diff_group, co values = c("firebrick1", "#AD78B6", "dodgerblue1") ) + theme_minimal() + - theme(legend.position = "left", - axis.title.y = element_blank(), - axis.text.y = element_blank(), - legend.title = element_text(size = 8), - legend.text = element_text(size = 6) - ) + + theme( + legend.position = "left", + axis.title.y = element_blank(), + axis.text.y = element_blank(), + legend.title = element_text(size = 8), + legend.text = element_text(size = 6) + ) + labs(x = NULL, y = NULL) # Marginal Y density (Flu mean) @@ -225,9 +241,11 @@ ydensity <- ggplot(discord_flu, aes(x = flu_total_mean, group = ses_diff_group, ) + coord_flip() + theme_minimal() + - theme(legend.position = "none", - axis.title.x = element_blank(), - axis.text.x = element_blank()) + + theme( + legend.position = "none", + axis.title.x = element_blank(), + axis.text.x = element_blank() + ) + labs(x = NULL, y = NULL) ``` @@ -245,28 +263,28 @@ ydensity + theme_bw() + theme( plot.title = element_text(hjust = 0.5, size = 12), axis.title.x = element_text(size = 12) ) + labs(title = "Mean Flu Vaccinations (2006–2016)") - ``` ```{r} # Blank placeholder plot blankPlot <- ggplot() + theme_void() - + # Final layout (true layout you originally had: AB above CC) grid.arrange( arrangeGrob(xdensity, blankPlot, ncol = 2, widths = c(4, 1)), arrangeGrob(main_plot, ydensity, ncol = 2, widths = c(4, 1)), heights = c(1.5, 4), top = textGrob("Sibling Differences in SES and Flu Vaccinations", - gp=gpar(fontsize=20,font=3))) - + gp = gpar(fontsize = 20, font = 3) + ) +) ``` Other ways to plot this data include using `facet_wrap` to create separate panels for each SES difference group. This can help visualize the differences in flu vaccinations across different SES categories. ```{r echo=FALSE, message=FALSE} -main_plot + facet_wrap(~ ses_diff_group, ncol = 1) + +main_plot + facet_wrap(~ses_diff_group, ncol = 1) + theme(legend.position = "none") + labs(title = "Within Family Differences in SES and Flu Vaccinations") ``` @@ -280,35 +298,38 @@ This plot compares differences in SES at age 40 to differences in flu vaccinatio ## Setup: Use discord_data # Main scatter plot -main_plot_within <- ggplot(discord_flu, aes(x = s00_h40_diff, - y = flu_total_diff, colour = s00_h40_diff)) + - geom_point(size = 0.8, alpha = 0.8, na.rm = TRUE, - position = position_jitter(w = 0.2, h = 0.2)) + +main_plot_within <- ggplot(discord_flu, aes( + x = s00_h40_diff, + y = flu_total_diff, colour = s00_h40_diff +)) + + geom_point( + size = 0.8, alpha = 0.8, na.rm = TRUE, + position = position_jitter(w = 0.2, h = 0.2) + ) + geom_smooth(method = "lm", se = FALSE, color = "black") + scale_colour_gradientn( name = "Sibling\nDifferences\nin SES", colours = shading, na.value = "#AD78B6", - values = scales::rescale(c(min(discord_flu$s00_h40_diff, na.rm = TRUE), - mean(discord_flu$s00_h40_diff, na.rm = TRUE), - max(discord_flu$s00_h40_diff, na.rm = TRUE))) + values = scales::rescale(c( + min(discord_flu$s00_h40_diff, na.rm = TRUE), + mean(discord_flu$s00_h40_diff, na.rm = TRUE), + max(discord_flu$s00_h40_diff, na.rm = TRUE) + )) ) + theme_minimal() + - theme( legend.position = "left")+ + theme(legend.position = "left") + labs(x = "Diff SES at Age 40", y = "Diff Flu Vaccinations (2006–2016)") main_plot_within - ``` You can further facet this plot by the difference in SES between kin to see how the relationship varies across different groups. The following code does this and adds a title to the plot. ```{r echo=TRUE, message=FALSE} - -main_plot_within + facet_wrap(~ ses_diff_group, ncol = 1) + - theme(legend.position = "bottom") + +main_plot_within + facet_wrap(~ses_diff_group, ncol = 1) + + theme(legend.position = "bottom") + labs(title = "Within Family Differences in SES and Flu Vaccinations") - ``` ## Conclusion From 5e922ca57b56814bf71ca1bd33629972b7ce2576 Mon Sep 17 00:00:00 2001 From: Mason Garrison Date: Sun, 4 May 2025 16:29:09 -0400 Subject: [PATCH 08/11] added between tests --- DESCRIPTION | 1 - NEWS.md | 1 + R/func_discord_data.R | 37 ++-- tests/testthat/test-discord_between.R | 172 ++++++++++++++++++ tests/testthat/test-discord_regression.R | 111 +++++++++-- .../test-discord_regression_arguments.R | 82 +++++++-- tests/testthat/test-new-legacy.R | 2 +- vignettes/Power.Rmd | 20 +- 8 files changed, 364 insertions(+), 62 deletions(-) create mode 100644 tests/testthat/test-discord_between.R diff --git a/DESCRIPTION b/DESCRIPTION index 364ff63..0940ef8 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -2,7 +2,6 @@ Package: discord Type: Package Title: Functions for Discordant Kinship Modeling Version: 1.2.4 -Date: 2025-04-29 Authors@R: c(person("S. Mason", "Garrison", email = "garrissm@wfu.edu", role = c("aut", "cre", "cph"), comment = c(ORCID = "0000-0002-4804-6003")), diff --git a/NEWS.md b/NEWS.md index cb8cc2e..b20376e 100644 --- a/NEWS.md +++ b/NEWS.md @@ -4,6 +4,7 @@ * Added a new vignette demonstrating ways to visualize discordant kinship data using the `ggplot2` package. * Added a new vignette demonstrating how to conduct a power analysis. * Vectorizing `discord_data()` to improve performance. +* Adding tests to ensure comparability between optimized and non-optimized versions of `discord_data()`. * Adding `discord_between_model()` to get the between-family model # discord 1.2.3.1 diff --git a/R/func_discord_data.R b/R/func_discord_data.R index 6b3adb2..7cc6da0 100644 --- a/R/func_discord_data.R +++ b/R/func_discord_data.R @@ -137,21 +137,22 @@ discord_data_ram_optimized <- function(data, ) } - output <- Reduce(mrg, out) + output <- base::Reduce(mrg, out) } else if (demographics == "race") { mrg <- function(x, y) { merge( x = x, y = y, by = c( - "id", paste0(race, "_1"), - paste0(race, "_2") + "id", + base::paste0(race, "_1"), + base::paste0(race, "_2") ), all.x = TRUE ) } - output <- Reduce(mrg, out) + output <- base::Reduce(mrg, out) } else if (demographics == "sex") { mrg <- function(x, y) { merge( @@ -159,21 +160,21 @@ discord_data_ram_optimized <- function(data, y = y, by = c( "id", base::paste0(sex, "_1"), - paste0(sex, "_2") + base::paste0(sex, "_2") ), all.x = TRUE ) } - output <- Reduce(mrg, out) + output <- base::Reduce(mrg, out) } else if (demographics == "both") { mrg <- function(x, y) { merge( x = x, y = y, by = c( - "id", paste0(sex, "_1"), paste0(sex, "_2"), - paste0(race, "_1"), paste0(race, "_2") + "id", base::paste0(sex, "_1"), base::paste0(sex, "_2"), + base::paste0(race, "_1"), base::paste0(race, "_2") ), all.x = TRUE ) @@ -254,43 +255,43 @@ discord_data_fast <- function(data, ) } - output <- Reduce(mrg, out) + output <- base::Reduce(mrg, out) } else if (demographics == "race") { mrg <- function(x, y) { merge( x = .clean_names(x), y = .clean_names(y), by = c( - "id", paste0(race, "_1"), - paste0(race, "_2") + "id", base::paste0(race, "_1"), + base::paste0(race, "_2") ), all.x = TRUE ) } - output <- Reduce(mrg, out) + output <- base::Reduce(mrg, out) } else if (demographics == "sex") { mrg <- function(x, y) { merge( x = .clean_names(x), y = .clean_names(y), by = c( - "id", paste0(sex, "_1"), - paste0(sex, "_2") + "id", base::paste0(sex, "_1"), + base::paste0(sex, "_2") ), all.x = TRUE ) } - output <- Reduce(mrg, out) + output <- base::Reduce(mrg, out) } else if (demographics == "both") { mrg <- function(x, y) { merge( x = .clean_names(x), y = .clean_names(y), by = c( - "id", paste0(sex, "_1"), paste0(sex, "_2"), - paste0(race, "_1"), paste0(race, "_2") + "id", base::paste0(sex, "_1"), base::paste0(sex, "_2"), + base::paste0(race, "_1"), base::paste0(race, "_2") ), all.x = TRUE ) @@ -299,7 +300,7 @@ discord_data_fast <- function(data, # the variable name repeats to look like var.var_1, instead of var_1 # how do we fix this? it breaks inside Reduce - output <- Reduce(mrg, out) + output <- base::Reduce(mrg, out) } diff --git a/tests/testthat/test-discord_between.R b/tests/testthat/test-discord_between.R new file mode 100644 index 0000000..f724ffd --- /dev/null +++ b/tests/testthat/test-discord_between.R @@ -0,0 +1,172 @@ +get_p_value_between <- function(.results) { + results_df <- summary(.results) + results_df <- as.data.frame(results_df$coefficients) + results_df <- cbind(names = rownames(results_df), results_df) + rownames(results_df) <- NULL + results_df[which(results_df$names == "y2_mean"), "Pr(>|t|)"] +} + +# note that all of these models should be significant because all have between +# variance > 0 + +signif_threshold <- 0.05 + +test_that("monozygotic significant between-model is as expected", { + set.seed(18) + results_fast <- discord_between_model(mz_signif, + outcome = "y1", + predictors = "y2", + id = "id", + sex = NULL, + race = NULL, + pair_identifiers = c("_1", "_2"), + fast = TRUE + ) + + set.seed(18) + results_ram <- discord_between_model(mz_signif, + outcome = "y1", + predictors = "y2", + id = "id", + sex = NULL, + race = NULL, + pair_identifiers = c("_1", "_2"), + fast = FALSE + ) + + expect_equal(results_fast, results_ram, tolerance = 0.005) + + expect_lt(object = get_p_value_between(results_fast), expected = signif_threshold) + expect_lt(object = get_p_value_between(results_ram), expected = signif_threshold) +}) + +test_that("monozygotic nonsignificant between-model is as expected", { + set.seed(18) + results_fast <- discord_between_model(mz_nonsignif, + outcome = "y1", + predictors = "y2", + id = "id", + sex = NULL, + race = NULL, + pair_identifiers = c("_1", "_2"), + fast = TRUE + ) + set.seed(18) + results_ram <- discord_between_model(mz_nonsignif, + outcome = "y1", + predictors = "y2", + id = "id", + sex = NULL, + race = NULL, + pair_identifiers = c("_1", "_2"), + fast = FALSE + ) + expect_equal(results_fast, results_ram, tolerance = 0.005) + expect_lt(object = get_p_value_between(results_fast), expected = signif_threshold) + expect_lt(object = get_p_value_between(results_ram), expected = signif_threshold) +}) + +test_that("dizygotic significant between-model is as expected", { + set.seed(18) + results_fast <- discord_between_model(dz_signif, + outcome = "y1", + predictors = "y2", + id = "id", + sex = NULL, + race = NULL, + pair_identifiers = c("_1", "_2"), + fast = TRUE + ) + set.seed(18) + results_ram <- discord_between_model(dz_signif, + outcome = "y1", + predictors = "y2", + id = "id", + sex = NULL, + race = NULL, + pair_identifiers = c("_1", "_2"), + fast = FALSE + ) + expect_lt(object = get_p_value_between(results_fast), expected = signif_threshold) + expect_lt(object = get_p_value_between(results_ram), expected = signif_threshold) + expect_equal(results_fast, results_ram, tolerance = 0.005) + + }) + +test_that("dizygotic nonsignificant between-model is as expected", { + set.seed(18) + results_fast <- discord_between_model(dz_nonsignif, + outcome = "y1", + predictors = "y2", + id = "id", + sex = NULL, + race = NULL, + pair_identifiers = c("_1", "_2"), + fast = TRUE + ) + set.seed(18) + results_ram <- discord_between_model(dz_nonsignif, + outcome = "y1", + predictors = "y2", + id = "id", + sex = NULL, + race = NULL, + pair_identifiers = c("_1", "_2"), + fast = FALSE + ) + expect_lt(object = get_p_value_between(results_fast), expected = signif_threshold) + expect_lt(object = get_p_value_between(results_ram), expected = signif_threshold) + expect_equal(results_fast, results_ram, tolerance = 0.005) + }) + +test_that("half siblings significant between-model is as expected", { + set.seed(18) + results_fast <- discord_between_model(half_sibs_signif, + outcome = "y1", + predictors = "y2", + id = "id", + sex = NULL, + race = NULL, + pair_identifiers = c("_1", "_2"), + fast = TRUE + ) + set.seed(18) + results_ram <- discord_between_model(half_sibs_signif, + outcome = "y1", + predictors = "y2", + id = "id", + sex = NULL, + race = NULL, + pair_identifiers = c("_1", "_2"), + fast = FALSE + ) + expect_lt(object = get_p_value_between(results_fast), expected = signif_threshold) + expect_lt(object = get_p_value_between(results_ram), expected = signif_threshold) + expect_equal(results_fast, results_ram, tolerance = 0.005) + }) + +test_that("half siblings nonsignificant between-model is as expected", { + set.seed(18) + results_fast <- discord_between_model(half_sibs_nonsignif, + outcome = "y1", + predictors = "y2", + id = "id", + sex = NULL, + race = NULL, + pair_identifiers = c("_1", "_2"), + fast = TRUE + ) + set.seed(18) + results_ram <- discord_between_model(half_sibs_nonsignif, + outcome = "y1", + predictors = "y2", + id = "id", + sex = NULL, + race = NULL, + pair_identifiers = c("_1", "_2"), + fast = FALSE + ) + expect_lt(object = get_p_value_between(results_fast), expected = signif_threshold) + expect_lt(object = get_p_value_between(results_ram), expected = signif_threshold) + expect_equal(results_fast, results_ram, tolerance = 0.005) + }) diff --git a/tests/testthat/test-discord_regression.R b/tests/testthat/test-discord_regression.R index 8dbe01f..e52e24e 100644 --- a/tests/testthat/test-discord_regression.R +++ b/tests/testthat/test-discord_regression.R @@ -10,85 +10,156 @@ signif_threshold <- 0.05 test_that("monozygotic significant is as expected", { set.seed(18) - results <- discord_regression(mz_signif, + results_fast <- discord_regression(mz_signif, outcome = "y1", predictors = "y2", id = "id", sex = NULL, race = NULL, - pair_identifiers = c("_1", "_2") + pair_identifiers = c("_1", "_2"), + fast = TRUE ) + results_ram <- discord_regression(mz_signif, + outcome = "y1", + predictors = "y2", + id = "id", + sex = NULL, + race = NULL, + pair_identifiers = c("_1", "_2"), + fast = FALSE + ) + expect_lt(object = get_p_value(results_fast), expected = signif_threshold) + expect_lt(object = get_p_value(results_ram), expected = signif_threshold) + expect_equal(get_p_value(results_fast), get_p_value(results_ram), tolerance = 0.005) - expect_lt(object = get_p_value(results), expected = signif_threshold) }) test_that("monozygotic nonsignificant is as expected", { set.seed(18) - results <- discord_regression(mz_nonsignif, + results_fast <- discord_regression(mz_nonsignif, outcome = "y1", predictors = "y2", id = "id", sex = NULL, race = NULL, - pair_identifiers = c("_1", "_2") + pair_identifiers = c("_1", "_2"), + fast = TRUE ) - - expect_gt(object = get_p_value(results), expected = signif_threshold) + results_ram <- discord_regression(mz_nonsignif, + outcome = "y1", + predictors = "y2", + id = "id", + sex = NULL, + race = NULL, + pair_identifiers = c("_1", "_2"), + fast = FALSE + ) + expect_gt(object = get_p_value(results_fast), expected = signif_threshold) + expect_gt(object = get_p_value(results_ram), expected = signif_threshold) + expect_equal(get_p_value(results_fast), get_p_value(results_ram), tolerance = 0.005) }) test_that("dizygotic significant is as expected", { set.seed(18) - results <- discord_regression(dz_signif, + results_fast <- discord_regression(dz_signif, outcome = "y1", predictors = "y2", id = "id", sex = NULL, race = NULL, - pair_identifiers = c("_1", "_2") + pair_identifiers = c("_1", "_2"), + fast = TRUE ) - - expect_lt(object = get_p_value(results), expected = signif_threshold) + results_ram <- discord_regression(dz_signif, + outcome = "y1", + predictors = "y2", + id = "id", + sex = NULL, + race = NULL, + pair_identifiers = c("_1", "_2"), + fast = FALSE + ) + expect_lt(object = get_p_value(results_fast), expected = signif_threshold) + expect_lt(object = get_p_value(results_ram), expected = signif_threshold) + expect_equal(get_p_value(results_fast), get_p_value(results_ram), tolerance = 0.005) }) test_that("dizygotic nonsignificant is as expected", { set.seed(18) - results <- discord_regression(dz_nonsignif, + results_fast <- discord_regression(dz_nonsignif, outcome = "y1", predictors = "y2", id = "id", sex = NULL, race = NULL, - pair_identifiers = c("_1", "_2") + pair_identifiers = c("_1", "_2"), + fast = TRUE ) - expect_gt(object = get_p_value(results), expected = signif_threshold) + results_ram <- discord_regression(dz_nonsignif, + outcome = "y1", + predictors = "y2", + id = "id", + sex = NULL, + race = NULL, + pair_identifiers = c("_1", "_2"), + fast = FALSE + ) + + expect_gt(object = get_p_value(results_fast), expected = signif_threshold) + expect_gt(object = get_p_value(results_ram), expected = signif_threshold) + expect_equal(get_p_value(results_fast), get_p_value(results_ram), tolerance = 0.005) }) test_that("half siblings significant is as expected", { set.seed(18) - results <- discord_regression(half_sibs_signif, + results_fast <- discord_regression(half_sibs_signif, outcome = "y1", predictors = "y2", id = "id", sex = NULL, race = NULL, - pair_identifiers = c("_1", "_2") + pair_identifiers = c("_1", "_2"), + fast = TRUE + ) + results_ram <- discord_regression(half_sibs_signif, + outcome = "y1", + predictors = "y2", + id = "id", + sex = NULL, + race = NULL, + pair_identifiers = c("_1", "_2"), + fast = FALSE ) - expect_lt(object = get_p_value(results), expected = signif_threshold) + expect_lt(object = get_p_value(results_fast), expected = signif_threshold) + expect_lt(object = get_p_value(results_ram), expected = signif_threshold) + expect_equal(get_p_value(results_fast), get_p_value(results_ram), tolerance = 0.005) }) test_that("half siblings nonsignificant is as expected", { set.seed(18) - results <- discord_regression(half_sibs_nonsignif, + results_fast <- discord_regression(half_sibs_nonsignif, outcome = "y1", predictors = "y2", id = "id", sex = NULL, race = NULL, - pair_identifiers = c("_1", "_2") + pair_identifiers = c("_1", "_2"), + fast= TRUE + ) + results_ram <- discord_regression(half_sibs_nonsignif, + outcome = "y1", + predictors = "y2", + id = "id", + sex = NULL, + race = NULL, + pair_identifiers = c("_1", "_2"), + fast= FALSE ) - expect_gt(object = get_p_value(results), expected = signif_threshold) + expect_gt(object = get_p_value(results_fast), expected = signif_threshold) + expect_gt(object = get_p_value(results_ram), expected = signif_threshold) + expect_equal(get_p_value(results_fast), get_p_value(results_ram), tolerance = 0.005) }) diff --git a/tests/testthat/test-discord_regression_arguments.R b/tests/testthat/test-discord_regression_arguments.R index fc68063..0b7d071 100644 --- a/tests/testthat/test-discord_regression_arguments.R +++ b/tests/testthat/test-discord_regression_arguments.R @@ -30,14 +30,27 @@ test_that("flu_2008 ~ edu_2008 + ses_2008 + race + sex", { )) set.seed(18) - new <- discord_regression(uniqueExtendedIDs, + new_fast <- discord_regression(uniqueExtendedIDs, outcome = "flu_2008", predictors = c("edu_2008", "ses_2008"), fast = TRUE ) - new <- summarize_results(new) + new_fast <- summarize_results(new_fast) - expect_equal(control, new, tolerance = 0.005) + expect_equal(control, new_fast, tolerance = 0.005) + + set.seed(18) + new_ram <- discord_regression(uniqueExtendedIDs, + outcome = "flu_2008", + predictors = c("edu_2008", "ses_2008"), + fast = FALSE + ) + + new_ram <- summarize_results(new_ram) + + expect_equal(control, new_ram, tolerance = 0.005) + + expect_equal(new_fast, new_ram, tolerance = 0.005) }) @@ -64,15 +77,29 @@ test_that("flu_2008 ~ edu_2008 + ses_2008 + race", { "ses_2008_mean", "race_1BLACK" )) set.seed(18) - new <- discord_regression(uniqueExtendedIDs, + new_fast <- discord_regression(uniqueExtendedIDs, outcome = "flu_2008", id = "extended_id", predictors = c("edu_2008", "ses_2008"), - sex = NULL + sex = NULL, + fast= TRUE + ) + + set.seed(18) + new_ram <- discord_regression(uniqueExtendedIDs, + outcome = "flu_2008", + id = "extended_id", + predictors = c("edu_2008", "ses_2008"), + sex = NULL, + fast= FALSE ) - new <- summarize_results(new) + new_fast <- summarize_results(new_fast) + new_ram <- summarize_results(new_ram) - expect_equal(control, new, tolerance = 0.005) + expect_equal(control, new_fast, tolerance = 0.005) + expect_equal(control, new_ram, tolerance = 0.005) + + expect_equal(new_fast, new_ram, tolerance = 0.005) }) test_that("flu_2008 ~ edu_2008 + ses_2008", { @@ -97,16 +124,30 @@ test_that("flu_2008 ~ edu_2008 + ses_2008", { )) set.seed(18) - new <- discord_regression(uniqueExtendedIDs, + new_fast <- discord_regression(uniqueExtendedIDs, outcome = "flu_2008", id = "extended_id", predictors = c("edu_2008", "ses_2008"), sex = NULL, - race = NULL + race = NULL, + fast = TRUE ) - new <- summarize_results(new) + set.seed(18) + new_ram <- discord_regression(uniqueExtendedIDs, + outcome = "flu_2008", + id = "extended_id", + predictors = c("edu_2008", "ses_2008"), + sex = NULL, + race = NULL, + fast = FALSE + ) + + new_fast <- summarize_results(new_fast) + new_ram <- summarize_results(new_ram) - expect_equal(control, new, tolerance = 0.005) + expect_equal(control, new_fast, tolerance = 0.005) + expect_equal(control, new_ram, tolerance = 0.005) + expect_equal(new_fast, new_ram, tolerance = 0.005) }) @@ -135,11 +176,22 @@ test_that("flu_2008 ~ edu_2008 + ses_2008 + race + sex", { "race_1BLACK", "sex_2FEMALE" )) set.seed(18) - new <- discord_regression(uniqueExtendedIDs, + new_fast <- discord_regression(uniqueExtendedIDs, outcome = "flu_2008", - predictors = "edu_2008" + predictors = "edu_2008", + fast = TRUE + ) + set.seed(18) + new_ram <- discord_regression(uniqueExtendedIDs, + outcome = "flu_2008", + predictors = "edu_2008", + fast = FALSE ) - new <- summarize_results(new) - expect_equal(control, new, tolerance = 0.005) +new_fast <- summarize_results(new_fast) +new_ram <- summarize_results(new_ram) + +expect_equal(control, new_fast, tolerance = 0.005) +expect_equal(control, new_ram, tolerance = 0.005) +expect_equal(new_fast, new_ram, tolerance = 0.005) }) diff --git a/tests/testthat/test-new-legacy.R b/tests/testthat/test-new-legacy.R index 8dad3e8..9b4f367 100644 --- a/tests/testthat/test-new-legacy.R +++ b/tests/testthat/test-new-legacy.R @@ -382,7 +382,7 @@ test_that("half-siblings nonsignificant: new & legacy data prep code results are race = NULL, pair_identifiers = c("_1", "_2"), demographics = "none", - fast = TRUE + fast = FALSE ) rownames(new_data) <- NULL diff --git a/vignettes/Power.Rmd b/vignettes/Power.Rmd index 761a130..021d9fb 100644 --- a/vignettes/Power.Rmd +++ b/vignettes/Power.Rmd @@ -44,6 +44,7 @@ The `kinsim()` function is designed to simulate data for kinship studies. It gen | `r_vector` | Optional: pairwise relatedness at the observation level | ## Output + A data.frame with: - Latent variables: A, C, E for each phenotype and sibling @@ -60,7 +61,6 @@ A data.frame with: We define a grid of simulation conditions, varying genetic relatedness, ACE variance components, and genetic correlations. - ```{r load-packages, message=FALSE} # Libraries library(NlsyLinks) @@ -100,7 +100,7 @@ FAST <- TRUE # Set to FALSE for slower, more detailed analysis results_list <- list() name.results <- c("coef_xdiff", "p_xdiff", "r.squared") -for (cond in 1:nrow(conditions)) { +for (cond in seq_along(conditions)) { current <- conditions[cond, ] temp_results <- matrix(NA, nrow = n_trials, ncol = length(name.results)) colnames(temp_results) <- name.results @@ -202,9 +202,15 @@ facet_labels <- list( cov_e = c("0" = "No Cov_E", "1" = "With Cov_E") ) # Ensure factors with exact string levels -final_results$cov_a <- factor(final_results$cov_a, levels = c(0, 0.25), labels = c("No Covariate A", "Covariate A (0.25)")) -final_results$cov_c <- factor(final_results$cov_c, levels = c(0, 0.25), labels = c("No Covariate C", "Covariate C (0.25)")) -final_results$cov_e <- factor(final_results$cov_e, levels = c(0, 0.25), labels = c("No Covariate E", "Covariate E (0.25)")) +final_results$cov_a <- factor(final_results$cov_a, levels = c(0, 0.25), + labels = c("No Covariate A", + "Covariate A (0.25)")) +final_results$cov_c <- factor(final_results$cov_c, levels = c(0, 0.25), + labels = c("No Covariate C", + "Covariate C (0.25)")) +final_results$cov_e <- factor(final_results$cov_e, levels = c(0, 0.25), + labels = c("No Covariate E", + "Covariate E (0.25)")) ``` @@ -225,7 +231,7 @@ p_noc <- ggplot(final_results_noc, aes( color = "Relatedness", fill = "Relatedness" ) + - theme_minimal() + # Manual, per-facet annotations with explicit facet-mapped data + theme_minimal() + geom_text( x = 600, y = 0.55, label = "False Positive Rate", data = data.frame(cov_a = "No Covariate A", cov_e = "No Covariate E"), @@ -256,7 +262,7 @@ p_noa <- ggplot(final_results_noa, aes( color = "Relatedness", fill = "Relatedness" ) + - theme_minimal() + # Manual, per-facet annotations with explicit facet-mapped data + theme_minimal() + geom_text( x = 600, y = 0.55, label = "False Positive Rate", data = data.frame(cov_c = "No Covariate C", cov_e = "No Covariate E"), From a026f2a065c01d07c6bc5bd01769ce8d1d56a2b9 Mon Sep 17 00:00:00 2001 From: Mason Garrison Date: Sun, 4 May 2025 21:52:52 -0400 Subject: [PATCH 09/11] workflow --- .github/workflows/R-CMD-dev_check.yaml | 54 +++++++++++++++++++++++ .github/workflows/codecov.yaml | 36 +++++++++++++++ .github/workflows/test-coverage.yaml | 61 ++++++++++++++++++++++++++ 3 files changed, 151 insertions(+) create mode 100644 .github/workflows/R-CMD-dev_check.yaml create mode 100644 .github/workflows/codecov.yaml create mode 100644 .github/workflows/test-coverage.yaml diff --git a/.github/workflows/R-CMD-dev_check.yaml b/.github/workflows/R-CMD-dev_check.yaml new file mode 100644 index 0000000..b7d4ce9 --- /dev/null +++ b/.github/workflows/R-CMD-dev_check.yaml @@ -0,0 +1,54 @@ +on: + push: + branches: [dev] + paths: + - '**.Rmd' + - '**.Rd' + - '**.R' + pull_request: + branches: [dev] + +name: Dev Branch + +jobs: + R-CMD-check: + runs-on: ${{ matrix.config.os }} + + name: ${{ matrix.config.os }} (${{ matrix.config.r }}) + + strategy: + fail-fast: false + matrix: + config: + - {os: macOS-latest, r: 'release', rtools: ''} + - {os: windows-latest, r: 'release', rtools: '42'} + - {os: ubuntu-latest, r: 'devel', rtools: '', http-user-agent: 'release'} + - {os: ubuntu-latest, r: 'release', rtools: ''} + - {os: ubuntu-latest, r: 'oldrel-1', rtools: ''} + + env: + GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + R_KEEP_PKG_SOURCE: yes + + steps: + - uses: actions/checkout@v3 + + - uses: r-lib/actions/setup-pandoc@v2 + + - uses: r-lib/actions/setup-r@v2 + with: + r-version: ${{ matrix.config.r }} + rtools-version: ${{ matrix.config.rtools }} + http-user-agent: ${{ matrix.config.http-user-agent }} + use-public-rspm: true + + - uses: r-lib/actions/setup-r-dependencies@v2 + with: + cache-version: 3 + extra-packages: | + any::rcmdcheck + upgrade: 'TRUE' + needs: check + - uses: r-lib/actions/check-r-package@v2 + with: + upload-snapshots: true diff --git a/.github/workflows/codecov.yaml b/.github/workflows/codecov.yaml new file mode 100644 index 0000000..0ebd87e --- /dev/null +++ b/.github/workflows/codecov.yaml @@ -0,0 +1,36 @@ +# For more configuration details: +# https://docs.codecov.com/docs/codecov-yaml + +# Check if this file is valid by running in bash: +# curl -X POST --data-binary @.codecov.yml https://codecov.io/validate + +# Settings related to codecov job +codecov: + require_ci_to_pass: yes # Only report if CI runs successfully + notify: + wait_for_ci: yes # Wait for other jobs to finish + manual_trigger: true # Notify when manually triggered + +# Settings related to code coverage analysis +coverage: + status: + # Checks how the PR changes overall coverage. + project: + default: + # For each PR, auto compare coverage to previous commit. + target: auto # Desired coverage + base: auto # Compares against the base branch + threshold: 2% # Allows slight drops before failing + # Checks the relative coverage of the new PR code only. + patch: + default: + target: auto + base: auto + threshold: 2% + +# Settings related to the comment that Codecov posts on the PR +comment: + layout: "diff, flags, files" + behavior: default # Uses default commenting behavior + require_changes: false # Always post the comment, even if coverage did not change + hide_project_coverage: false # Always show coverage for both project and patch diff --git a/.github/workflows/test-coverage.yaml b/.github/workflows/test-coverage.yaml new file mode 100644 index 0000000..2883e2c --- /dev/null +++ b/.github/workflows/test-coverage.yaml @@ -0,0 +1,61 @@ +# Workflow derived from https://github.com/r-lib/actions/tree/v2/examples +# Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help +on: + push: + branches: [main, master,dev] + pull_request: + +name: test-coverage.yaml + +permissions: read-all + +jobs: + test-coverage: + runs-on: ubuntu-latest + env: + GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + + steps: + - uses: actions/checkout@v4 + + - uses: r-lib/actions/setup-r@v2 + with: + use-public-rspm: true + + - uses: r-lib/actions/setup-r-dependencies@v2 + with: + extra-packages: any::covr, any::xml2 + needs: coverage + + - name: Test coverage + run: | + cov <- covr::package_coverage( + quiet = FALSE, + clean = FALSE, + install_path = file.path(normalizePath(Sys.getenv("RUNNER_TEMP"), winslash = "/"), "package") + ) + covr::to_cobertura(cov) + shell: Rscript {0} + + - uses: codecov/codecov-action@v4 + with: + # Fail if error if not on PR, or if on PR and token is given + fail_ci_if_error: ${{ github.event_name != 'pull_request' || secrets.CODECOV_TOKEN }} + file: ./cobertura.xml + plugin: noop + disable_search: true + token: ${{ secrets.CODECOV_TOKEN }} + + - name: Show testthat output + if: always() + run: | + ## -------------------------------------------------------------------- + find '${{ runner.temp }}/package' -name 'testthat.Rout*' -exec cat '{}' \; || true + shell: bash + + - name: Upload test results + if: failure() + uses: actions/upload-artifact@v4 + with: + name: coverage-test-failures + path: ${{ runner.temp }}/package From 833986802ef8b5ff9ce966abb151229d16ea6137 Mon Sep 17 00:00:00 2001 From: Mason Garrison Date: Sun, 4 May 2025 22:08:59 -0400 Subject: [PATCH 10/11] power vignette --- vignettes/Power.Rmd | 13 ++++++++++--- vignettes/regression.Rmd | 2 +- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/vignettes/Power.Rmd b/vignettes/Power.Rmd index 021d9fb..ff5fc2f 100644 --- a/vignettes/Power.Rmd +++ b/vignettes/Power.Rmd @@ -95,6 +95,8 @@ conditions <- expand.grid( For each condition, we simulate 100 replications of fitting discordant sibling models. We have kept the number of trials low for demonstration purposes, but you can increase `n_trials` for more robust power estimates. ```{r} + +set.seed(1492) # Set seed for reproducibility n_trials <- 100 FAST <- TRUE # Set to FALSE for slower, more detailed analysis results_list <- list() @@ -190,8 +192,9 @@ power_summary <- lapply(results_list, function(res) { final_results <- cbind(conditions, do.call(rbind, power_summary)) ``` +## Step 4: Visualize Power -As shown in the table (at the end of the vignette), we have the power estimates for each condition, including the total number of pairs, relatedness level, covariate settings, and the median R-squared value from the regression models. As expected, power increases with the number of pairs and is influenced by the relatedness level and covariate settings. In the plots below, we visualize the power estimates across different conditions, focusing on the impact of covariates and relatedness levels. +We can visualize the power estimates across different conditions. The plots below show the power estimates for each condition, including the total number of pairs, relatedness level, covariate settings, and the median R-squared value from the regression models. As expected, power increases with the number of pairs and is influenced by the relatedness level and covariate settings. In the plots below, we visualize the power estimates across different conditions, focusing on the impact of covariates and relatedness levels. ```{r, echo=FALSE, message=FALSE} @@ -278,10 +281,14 @@ p_noa <- ggplot(final_results_noa, aes( p_noa ``` +### Power Table - - +The table below summarizes the power estimates across different conditions. The `power_xdiff` column indicates the proportion of trials where the p-value for the difference in means (`p_xdiff`) is less than 0.05, and the `median_r2` column reports the median R-squared value from the regression models. ```{r, echo=FALSE, message=FALSE} knitr::kable(final_results) ``` + +## Conclusion +This vignette demonstrates how to conduct a simulation-based power analysis for discordant sibling designs using the `discord` package. By varying genetic relatedness, ACE variance components, and covariate settings, we can assess the power of our designs to detect causal effects. The results highlight the importance of sample size and relatedness level in achieving sufficient power for these analyses. + diff --git a/vignettes/regression.Rmd b/vignettes/regression.Rmd index 7d9fc55..5440d48 100644 --- a/vignettes/regression.Rmd +++ b/vignettes/regression.Rmd @@ -35,7 +35,7 @@ The original analysis examined whether socioeconomic status (SES) at age 40 pred ## Data Cleaning -For this example, we will load the following packages. +For this example, we will load the following packages: ```{r discord-setup, message = FALSE} # For easy data manipulation From 3f66090f963ae1e3b68367a2233c8763560e6715 Mon Sep 17 00:00:00 2001 From: Mason Garrison Date: Sun, 4 May 2025 22:14:46 -0400 Subject: [PATCH 11/11] Update Power.Rmd --- vignettes/Power.Rmd | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/vignettes/Power.Rmd b/vignettes/Power.Rmd index ff5fc2f..befc235 100644 --- a/vignettes/Power.Rmd +++ b/vignettes/Power.Rmd @@ -98,7 +98,7 @@ For each condition, we simulate 100 replications of fitting discordant sibling m set.seed(1492) # Set seed for reproducibility n_trials <- 100 -FAST <- TRUE # Set to FALSE for slower, more detailed analysis +FAST <- FALSE # Set to FALSE for slower, more detailed analysis results_list <- list() name.results <- c("coef_xdiff", "p_xdiff", "r.squared") @@ -138,6 +138,7 @@ for (cond in seq_along(conditions)) { extract2$x_diff <- extract2$x_s1 - extract2$x_s2 extract2$x_bar <- (extract2$x_s1 + extract2$x_s2) / 2 extract2$y_bar <- (extract2$y_s1 + extract2$y_s2) / 2 + # select pair with ydiff > 0 extract3 <- extract2[extract2$y_diff > 0, ]