Skip to content

Commit e7d3be7

Browse files
committed
last bugfix in dco
1 parent c59d825 commit e7d3be7

File tree

4 files changed

+37
-75
lines changed

4 files changed

+37
-75
lines changed

DESCRIPTION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
Package: ClustIRR
22
Type: Package
33
Title: Clustering of immune receptor repertoires
4-
Version: 1.7.5
4+
Version: 1.7.6
55
Authors@R: c(
66
person("Simo", "Kitanovski", email = "simokitanovski@gmail.com",
77
role = c("aut", "cre"), comment=c(ORCID="0000-0003-2909-5376")),

R/dco.R

Lines changed: 15 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -306,36 +306,21 @@ get_posterior_summaries <- function(cm,
306306

307307
post_beta <- function(f, samples) {
308308

309-
if(length(samples) == 2) {
310-
s <- data.frame(summary(f, par = "beta")$summary)
311-
s <- s[, c("mean", "X50.", "X2.5.", "X97.5.", "n_eff", "Rhat")]
312-
colnames(s) <- c("mean", "median", "L95", "H95", "n_eff", "Rhat")
313-
314-
s$i <- 1:nrow(s)
315-
m <- rownames(s)
316-
m <- gsub(pattern = paste0("beta\\[|\\]"), replacement = '', x = m)
317-
m <- do.call(rbind, strsplit(x = m, split = "\\,"))
318-
s$s <- as.numeric(m[,1])
319-
s$community <- as.numeric(m[,2])
320-
s <- s[order(s$i, decreasing = FALSE),]
321-
}
322-
else {
323-
s <- data.frame(summary(f, par = "beta")$summary)
324-
s <- s[, c("mean", "X50.", "X2.5.", "X97.5.", "n_eff", "Rhat")]
325-
colnames(s) <- c("mean", "median", "L95", "H95", "n_eff", "Rhat")
326-
327-
# maintain original index order
328-
s$i <- 1:nrow(s)
329-
m <- rownames(s)
330-
m <- gsub(pattern = "beta\\[|\\]", replacement = '', x = m)
331-
332-
m <- do.call(rbind, strsplit(x = m, split = "\\,"))
333-
s$s <- as.numeric(m[,1])
334-
s$community <- as.numeric(m[,2])
335-
meta <- data.frame(s = 1:length(samples), sample = samples)
336-
s <- merge(x = s, y = meta, by.x = "s", by.y = "s", all.x = TRUE)
337-
s <- s[order(s$i, decreasing = FALSE),]
338-
}
309+
s <- data.frame(summary(f, par = "beta")$summary)
310+
s <- s[, c("mean", "X50.", "X2.5.", "X97.5.", "n_eff", "Rhat")]
311+
colnames(s) <- c("mean", "median", "L95", "H95", "n_eff", "Rhat")
312+
313+
# maintain original index order
314+
s$i <- 1:nrow(s)
315+
m <- rownames(s)
316+
m <- gsub(pattern = "beta\\[|\\]", replacement = '', x = m)
317+
318+
m <- do.call(rbind, strsplit(x = m, split = "\\,"))
319+
s$s <- as.numeric(m[,1])
320+
s$community <- as.numeric(m[,2])
321+
meta <- data.frame(s = 1:length(samples), sample = samples)
322+
s <- merge(x = s, y = meta, by.x = "s", by.y = "s", all.x = TRUE)
323+
s <- s[order(s$i, decreasing = FALSE),]
339324

340325
return(s)
341326
}

inst/stan/dm.stan

Lines changed: 18 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ data {
1616

1717

1818
transformed data {
19-
int N_beta;
2019
int N_delta;
2120
int K_delta;
2221
K_delta = 0;
@@ -25,34 +24,22 @@ transformed data {
2524
K_delta = K;
2625
N_delta = N*(N-1)/2;
2726
}
28-
if(N==2) {
29-
N_beta = 1;
30-
} else {
31-
N_beta = N;
32-
}
3327
}
3428

3529

3630
parameters {
3731
real <lower=0> kappa;
3832
vector [K] alpha;
39-
vector [K] beta [N_beta];
33+
vector [K] beta [N];
4034
}
4135

4236
model {
4337
target += exponential_lpdf(2+kappa|0.01);
4438
target += normal_lpdf(alpha|0,3);
4539

46-
if(N==2) {
47-
target += normal_lpdf(beta[1]|0, 1);
48-
target += dm_lpmf(y[1]|kappa*softmax(alpha + beta[1]*1));
49-
target += dm_lpmf(y[2]|kappa*softmax(alpha + beta[1]*-1));
50-
}
51-
else {
52-
for(i in 1:N) {
53-
target += normal_lpdf(beta[i]|0, 1);
54-
target += dm_lpmf(y[i]|kappa*softmax(alpha + beta[i]));
55-
}
40+
for(i in 1:N) {
41+
target += normal_lpdf(beta[i]|0, 1);
42+
target += dm_lpmf(y[i]|kappa*softmax(alpha + beta[i]));
5643
}
5744
}
5845

@@ -64,32 +51,20 @@ generated quantities {
6451
vector [K_delta] epsilon [N_delta];
6552
int k;
6653

67-
if(N==2) {
68-
p[1] = dirichlet_rng(kappa*softmax(alpha + beta[1]*1));
69-
p[2] = dirichlet_rng(kappa*softmax(alpha + beta[1]*-1));
70-
delta[1] = beta[1];
71-
epsilon[1] = softmax(alpha+beta[1])-softmax(alpha-beta[1]);
72-
log_lik[1] = dm_lpmf(y[1]|kappa*softmax(alpha + beta[1]));
73-
log_lik[2] = dm_lpmf(y[2]|kappa*softmax(alpha - beta[1]));
74-
y_hat[1] = multinomial_rng(p[1], sum(y[1]));
75-
y_hat[2] = multinomial_rng(p[2], sum(y[2]));
76-
}
77-
else {
78-
for(i in 1:N) {
79-
p[i] = dirichlet_rng(kappa*softmax(alpha + beta[i]));
80-
y_hat[i] = multinomial_rng(p[i], sum(y[i]));
81-
log_lik[i] = dm_lpmf(y[i]|kappa*softmax(alpha + beta[i]));
82-
}
83-
84-
k = 1;
85-
for(i in 1:N) {
86-
if(compute_delta==1) {
87-
if(i != N) {
88-
for(j in (i+1):N) {
89-
delta[k] = beta[i]-beta[j];
90-
epsilon[k] = softmax(alpha+beta[i])-softmax(alpha+beta[j]);
91-
k = k + 1;
92-
}
54+
for(i in 1:N) {
55+
p[i] = dirichlet_rng(kappa*softmax(alpha + beta[i]));
56+
y_hat[i] = multinomial_rng(p[i], sum(y[i]));
57+
log_lik[i] = dm_lpmf(y[i]|kappa*softmax(alpha + beta[i]));
58+
}
59+
60+
k = 1;
61+
for(i in 1:N) {
62+
if(compute_delta==1) {
63+
if(i != N) {
64+
for(j in (i+1):N) {
65+
delta[k] = beta[i]-beta[j];
66+
epsilon[k] = softmax(alpha+beta[i])-softmax(alpha+beta[j]);
67+
k = k + 1;
9368
}
9469
}
9570
}

man/get_beta_scatterplot.Rd

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,9 @@ gcd <- detect_communities(graph = c$graph,
8080
chains = c("CDR3a", "CDR3b"))
8181

8282
# differential community occupancy analysis
83-
dco <- dco(community_occupancy_matrix = gcd$community_occupancy_matrix)
83+
dco <- dco(community_occupancy_matrix = gcd$community_occupancy_matrix,
84+
mcmc_control = list(mcmc_chains = 2,
85+
mcmc_cores = 2))
8486

8587
# generate beta violin plots
8688
beta_scatterplot <- get_beta_scatterplot(beta = dco$posterior_summary$beta,

0 commit comments

Comments
 (0)