The functions d.diff.binom (probability mass) and p.diff.binom (cumulative distribution) are functions for calculating the distribution of the differences for equal sample sizes N and equal "succes" probability. The arguments of the functions are the quantiles k of the distribution of the differences, the number of trials N and the probability of succes p.
The functions d.diff.binom.un (probability mass) and p.diff.binom.un (cumulative distribution) are functions for calculating the distribution of the differences for sample sizes and succes probabilities that may (or may not) differ between the two populations. The arguments of the functions are the quantiles k of the distribution of the differences, the number of trials N.1 and N.2 for the two groups and the probability of succes p.1 and p.2 for each group.
#equal N and p: #probability mass: d.diff.bin = function(k, N, p) { diff = outer(0:N, 0:N, "-") prob = outer(dbinom(0:N, N, p, log=TRUE), dbinom(0:N, N, p, log=TRUE), "+") p = sum(exp(prob[diff == k])) return(p) } #cumulative probability: p.diff.bin = function(k, N, p) { diff = outer(0:N, 0:N, "-") prob = outer(dbinom(0:N, N, p, log=TRUE), dbinom(0:N, N, p, log=TRUE), "+") p = sum(exp(prob[diff <= k])) return(p) } #examples d.diff.bin(0, 30, .50)
## [1] 0.1025782
p.diff.bin(0, 30, .50)
## [1] 0.5512891
#mean of distribution: N = 30 m = sum(sapply(-N:N, d.diff.bin, N = 30, p= .50)*(-N:N)) m
## [1] -3.084642e-20
all.equal(0, m)
## [1] TRUE
#(un)equal N and p: #probability mass: d.diff.bin.un = function(k, N.1, N.2, p.1, p.2) { diff = outer(0:N.1, 0:N.2, "-") prob = outer(dbinom(0:N.1, N.1, p.1, log=TRUE), dbinom(0:N.2, N.2, p.2, log=TRUE), "+") p = sum(exp(prob[diff == k])) return(p) } #cumulative distribion: p.diff.bin.un = function(k, N.1, N.2, p.1, p.2) { diff = outer(0:N.1, 0:N.2, "-") prob = outer(dbinom(0:N.1, N.1, p.1, log=TRUE), dbinom(0:N.2, N.2, p.2, log=TRUE), "+") p = sum(exp(prob[diff <= k])) return(p) } #examples d.diff.bin.un(0, 30, 20, .60, .70)
## [1] 0.05896135
p.diff.bin.un(0, 30, 20, .60, .70)
## [1] 0.1497043
No comments:
Post a Comment