Skip to content

Commit 6918cf7

Browse files
authored
Merge pull request #97 from NSAPH-Software/release_ver0.2.3
Release ver0.2.3
2 parents 324519b + 1cd2e7f commit 6918cf7

File tree

127 files changed

+3124
-939
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

127 files changed

+3124
-939
lines changed

.Rbuildignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,5 @@ index.md
2020
^CRAN-RELEASE$
2121
^cran-comments\.md$
2222
^CRAN-SUBMISSION$
23+
^CODE_OF_CONDUCT\.md$
24+
^paper/*$

.github/workflows/R-CMD-check.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ jobs:
2323
matrix:
2424
config:
2525
- {os: windows-latest, r: 'release'}
26-
#- {os: macOS-latest, r: 'release'} #deactivate until snprintf issue resolves.
26+
- {os: macOS-latest, r: 'release'}
2727
- {os: ubuntu-20.04, r: 'release', rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"}
2828
#- {os: ubuntu-20.04, r: 'devel', rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"}
2929

.github/workflows/draft-pdf.yml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
on: [push]
2+
3+
jobs:
4+
paper:
5+
runs-on: ubuntu-latest
6+
name: Paper Draft
7+
steps:
8+
- name: Checkout
9+
uses: actions/checkout@v3
10+
- name: Build draft PDF
11+
uses: openjournals/openjournals-draft-action@master
12+
with:
13+
journal: joss
14+
# This should be the path to the paper within your repo.
15+
paper-path: paper/paper.md
16+
- name: Upload
17+
uses: actions/upload-artifact@v1
18+
with:
19+
name: paper
20+
# This is the output path where Pandoc will write the compiled
21+
# PDF. Note, this should be the same directory as the input
22+
# paper.md
23+
path: paper/paper.pdf

CODE_OF_CONDUCT.md

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
# Contributor Covenant Code of Conduct
2+
3+
## Our Pledge
4+
5+
We as members, contributors, and leaders pledge to make participation in our
6+
community a harassment-free experience for everyone, regardless of age, body
7+
size, visible or invisible disability, ethnicity, sex characteristics, gender
8+
identity and expression, level of experience, education, socio-economic status,
9+
nationality, personal appearance, race, caste, color, religion, or sexual
10+
identity and orientation.
11+
12+
We pledge to act and interact in ways that contribute to an open, welcoming,
13+
diverse, inclusive, and healthy community.
14+
15+
## Our Standards
16+
17+
Examples of behavior that contributes to a positive environment for our
18+
community include:
19+
20+
* Demonstrating empathy and kindness toward other people
21+
* Being respectful of differing opinions, viewpoints, and experiences
22+
* Giving and gracefully accepting constructive feedback
23+
* Accepting responsibility and apologizing to those affected by our mistakes,
24+
and learning from the experience
25+
* Focusing on what is best not just for us as individuals, but for the overall
26+
community
27+
28+
Examples of unacceptable behavior include:
29+
30+
* The use of sexualized language or imagery, and sexual attention or advances of
31+
any kind
32+
* Trolling, insulting or derogatory comments, and personal or political attacks
33+
* Public or private harassment
34+
* Publishing others' private information, such as a physical or email address,
35+
without their explicit permission
36+
* Other conduct which could reasonably be considered inappropriate in a
37+
professional setting
38+
39+
## Enforcement Responsibilities
40+
41+
Community leaders are responsible for clarifying and enforcing our standards of
42+
acceptable behavior and will take appropriate and fair corrective action in
43+
response to any behavior that they deem inappropriate, threatening, offensive,
44+
or harmful.
45+
46+
Community leaders have the right and responsibility to remove, edit, or reject
47+
comments, commits, code, wiki edits, issues, and other contributions that are
48+
not aligned to this Code of Conduct, and will communicate reasons for moderation
49+
decisions when appropriate.
50+
51+
## Scope
52+
53+
This Code of Conduct applies within all community spaces, and also applies when
54+
an individual is officially representing the community in public spaces.
55+
Examples of representing our community include using an official e-mail address,
56+
posting via an official social media account, or acting as an appointed
57+
representative at an online or offline event.
58+
59+
## Enforcement
60+
61+
Instances of abusive, harassing, or otherwise unacceptable behavior may be
62+
reported to the community leaders responsible for enforcement at nkhoshnevis@g.harvard.edu.
63+
All complaints will be reviewed and investigated promptly and fairly.
64+
65+
All community leaders are obligated to respect the privacy and security of the
66+
reporter of any incident.
67+
68+
## Enforcement Guidelines
69+
70+
Community leaders will follow these Community Impact Guidelines in determining
71+
the consequences for any action they deem in violation of this Code of Conduct:
72+
73+
### 1. Correction
74+
75+
**Community Impact**: Use of inappropriate language or other behavior deemed
76+
unprofessional or unwelcome in the community.
77+
78+
**Consequence**: A private, written warning from community leaders, providing
79+
clarity around the nature of the violation and an explanation of why the
80+
behavior was inappropriate. A public apology may be requested.
81+
82+
### 2. Warning
83+
84+
**Community Impact**: A violation through a single incident or series of
85+
actions.
86+
87+
**Consequence**: A warning with consequences for continued behavior. No
88+
interaction with the people involved, including unsolicited interaction with
89+
those enforcing the Code of Conduct, for a specified period of time. This
90+
includes avoiding interactions in community spaces as well as external channels
91+
like social media. Violating these terms may lead to a temporary or permanent
92+
ban.
93+
94+
### 3. Temporary Ban
95+
96+
**Community Impact**: A serious violation of community standards, including
97+
sustained inappropriate behavior.
98+
99+
**Consequence**: A temporary ban from any sort of interaction or public
100+
communication with the community for a specified period of time. No public or
101+
private interaction with the people involved, including unsolicited interaction
102+
with those enforcing the Code of Conduct, is allowed during this period.
103+
Violating these terms may lead to a permanent ban.
104+
105+
### 4. Permanent Ban
106+
107+
**Community Impact**: Demonstrating a pattern of violation of community
108+
standards, including sustained inappropriate behavior, harassment of an
109+
individual, or aggression toward or disparagement of classes of individuals.
110+
111+
**Consequence**: A permanent ban from any sort of public interaction within the
112+
community.
113+
114+
## Attribution
115+
116+
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
117+
version 2.1, available at
118+
<https://www.contributor-covenant.org/version/2/1/code_of_conduct.html>.
119+
120+
Community Impact Guidelines were inspired by
121+
[Mozilla's code of conduct enforcement ladder][https://github.com/mozilla/inclusion].
122+
123+
For answers to common questions about this code of conduct, see the FAQ at
124+
<https://www.contributor-covenant.org/faq>. Translations are available at <https://www.contributor-covenant.org/translations>.
125+
126+
[homepage]: https://www.contributor-covenant.org

DESCRIPTION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Package: GPCERF
22
Title: Gaussian Processes for Estimating Causal Exposure Response Curves
3-
Version: 0.2.2
3+
Version: 0.2.3
44
Authors@R: c(
55
person("Naeem", "Khoshnevis", email = "nkhoshnevis@g.harvard.edu",
66
role=c("aut","cre"),

NEWS.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,16 @@
1+
# GPCERF 0.2.3 (2024-03-02)
2+
3+
## Changed
4+
5+
- `estimate_cerf_nngp` takes `outcome_col`, `treatment_col`, and `covariates_col` names as inputs.
6+
- `estimate_cerf_gp` takes `outcome_col`, `treatment_col`, and `covariates_col` names as inputs.
7+
8+
## Added
9+
10+
- `estimate_cerf_gp` and `estimate_cerf_nngp` have notes on selecting `w`.
11+
12+
13+
114
# GPCERF 0.2.2 (2024-02-16)
215

316
## Changed

R/compute_deriv_weights_gp.R

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
#' (e_gps_pred).
1515
#' - Column 3: Standard deviation of e_gps (e_gps_std)
1616
#' used_params:
17-
#' - dnorm_log: TRUE or FLASE
17+
#' - dnorm_log: TRUE or FALSE
1818
#' @param hyperparam A vector of hyper-parameters in the GP model.
1919
#' @param kernel_fn The covariance function.
2020
#' @param kernel_deriv_fn The partial derivative of the covariance function.

R/compute_m_sigma.R

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,9 @@
1010
#' - First element: alpha
1111
#' - Second element: beta
1212
#' - Third element: g_sigma (gamma / sigma)
13-
#' @param data A data.frame containing all data including outcome, exposure
14-
#' and covariates. In the following order:
15-
#' - Column 1: Outcome (Y)
16-
#' - Column 2: Exposure or treatment (w)
17-
#' - Column 3~m: Confounders (C)
13+
#' @param outcome_data A vector of outcome data.
14+
#' @param treatment_data A vector of treatment data.
15+
#' @param covariates_data A data frame of covariates data.
1816
#' @param w A vector of exposure levels at which the CERF is estimated.
1917
#' @param gps_m An S3 gps object including:
2018
#' gps: A data.frame of GPS vectors.
@@ -37,7 +35,8 @@
3735
#'
3836
#' @keywords internal
3937
#'
40-
compute_m_sigma <- function(hyperparam, data, w, gps_m, tuning,
38+
compute_m_sigma <- function(hyperparam, outcome_data, treatment_data,
39+
covariates_data, w, gps_m, tuning,
4140
kernel_fn = function(x) exp(-x ^ 2)) {
4241

4342
param <- unlist(hyperparam)
@@ -57,7 +56,7 @@ compute_m_sigma <- function(hyperparam, data, w, gps_m, tuning,
5756
logger::log_trace("Running for tune parameters: ",
5857
"alpha: {alpha}, beta: {beta}, g_sigma: {g_sigma} ...")
5958

60-
w_obs <- data[[2]]
59+
w_obs <- treatment_data
6160

6261
#TODO: Following the paper and alpha beta convention, first column should be
6362
# GPS scaled with alpha, and second column should be w scaled with beta.
@@ -80,7 +79,7 @@ compute_m_sigma <- function(hyperparam, data, w, gps_m, tuning,
8079

8180
# Estimate noise
8281
if (!tuning) {
83-
noise_est <- estimate_noise_gp(data = data,
82+
noise_est <- estimate_noise_gp(data = outcome_data,
8483
sigma_obs = sigma_obs,
8584
inv_sigma_obs = inv_sigma_obs)
8685
logger::log_debug("Estimated noise: {noise_est} ")
@@ -112,16 +111,16 @@ compute_m_sigma <- function(hyperparam, data, w, gps_m, tuning,
112111
# est is the same as m in the paper.
113112

114113
if (!tuning) {
115-
est <- data$Y %*% weights_final
114+
est <- outcome_data %*% weights_final
116115
pst_sd <- noise_est * weights_res$sd_scaled
117116
logger::log_trace("Posterior for w = {w_instance} ==> ",
118117
"mu: {est}, var:{pst_sd}")
119118
} else {
120119
est <- NA
121120
pst_sd <- NA
122121
}
123-
cov_balance_obj <- compute_w_corr(w = data[[2]],
124-
covariate = data[, 3:ncol(data)],
122+
cov_balance_obj <- compute_w_corr(w = treatment_data,
123+
covariate = covariates_data,
125124
weight = weights_final)
126125
covariate_balance <- as.vector(cov_balance_obj$absolute_corr)
127126
c(covariate_balance, est, pst_sd)
@@ -141,17 +140,28 @@ compute_m_sigma <- function(hyperparam, data, w, gps_m, tuning,
141140

142141
# compute original covariate balance of data
143142
if (!tuning) {
144-
cov_balance_obj_org <- compute_w_corr(w = data[[2]],
145-
covariate = data[, 3:ncol(data)],
146-
weight = rep(1, nrow(data)))
143+
cov_balance_obj_org <- compute_w_corr(w = treatment_data,
144+
covariate = covariates_data,
145+
weight = rep(1, nrow(covariates_data)))
147146
cb_org <- cov_balance_obj_org$absolute_corr
148147
} else {
149148
cb_org <- NA
150149
}
151150

151+
if (!is.matrix(col_all)){
152+
# in case of one covariate col_all returns vector instead of matrix
153+
row_name <- names(col_all)[1]
154+
col_all <- matrix(col_all, nrow = 1)
155+
rownames(col_all) <- row_name
156+
}
152157

153-
col_all_w_average <- rowMeans(col_all, na.rm = TRUE)
154158

159+
if (nrow(col_all) == 1){
160+
col_all_w_average <- mean(col_all, na.rm = TRUE)
161+
names(col_all_w_average) <- rownames(col_all)
162+
} else {
163+
col_all_w_average <- rowMeans(col_all, na.rm = TRUE)
164+
}
155165

156166
list(cb = col_all_w_average,
157167
cb_org = cb_org,

0 commit comments

Comments
 (0)