Description Usage Arguments Details Value Author(s) Examples
Proportion trend test, with Moulton correction for clustering.
1 | prop.trend.test.moulton(binaryResponse, score, cluster=seq_along(binaryResponse),... )
|
binaryResponse |
A vector of |
score |
A numerical vector of the same length as |
cluster |
A vector indicating the cluster identities, of the same length as |
... |
Additional arguments to be passed to the underlying moulton_factor function, particularly a |
.
The function evaluates the proportions from the binary response variable (binaryResponse
) categorized using the score
variable. It then invokes prop.trend.test with these proportions. Then, the Moulton correction is applied, by means of a Moulton factor calculated by moulton_factor based on the cluster
column
An object of class "htest"
, see prop.trend.test. In addition, the Moulton factor used is indicated in a "moulton_factor" field.
Marina + Thomas Braschler
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | # Example 1: Construction of clustered variables and testing
# The primary question about Moulton correction is false positive detection
## Not run:
one_round_simulation<-function(p0=0.3,sd_cluster=1,n_p=3,n_cluster_per_p=2,n_per_cluster=10)
{
x0 = log(p0/(1+p0)) # To scale the interval 0,1 to -inf to +inf
xtot = vector(mode="numeric",length=0)
score = vector(mode="numeric",length=0)
cluster_id = vector(mode="numeric",length=0)
for(ind_score in 1:n_p)
{
score = c(score, rep(ind_score,n_per_cluster*n_cluster_per_p))
for(ind_cluster in 1:n_cluster_per_p)
{
cluster_id = c(cluster_id, rep((ind_score-1)*n_cluster_per_p+ind_cluster,n_per_cluster))
xtot = c(xtot,rep(x0+rnorm(1,sd=sd_cluster),n_per_cluster))
}
}
ptot=exp(xtot)/(1+exp(xtot))
response = vector(mode="numeric",length=0)
for(ind in 1:length(ptot))
{
response=c(response,rbinom(1,1,ptot[ind]))
}
x_prop_trend_test = aggregate(response ~ score, FUN=sum)$response
n_prop_trend_test = aggregate(response ~ score, FUN=length)$response
p_vector=vector(mode="numeric",length=2)
names(p_vector)=c("no.correction","moulton")
# There are occasionally some occurrences where the proportions generate warnings, suppress it here. This happens if a perfect with is possible
# for example if x_prop_trend_test is constant or if makes a regularly ascending or descending series as in (2,5,8) out of (20,20,20). This warning here
# is irrelevant, suppress
p_vector["no.correction"]=suppressWarnings(prop.trend.test(x_prop_trend_test,n_prop_trend_test)$p.value)
p_vector["moulton"]=suppressWarnings(prop.trend.test.moulton(response, score, cluster_id )$p.value)
return(p_vector)
}
p_matrix=matrix(nrow=500,ncol=2)
colnames(p_matrix)=c("no.correction","moulton")
for(ind in 1:(dim(p_matrix)[1]))
{
p_matrix[ind,]=one_round_simulation(p0=0.3,sd_cluster=0.5,n_p=
3,n_cluster_per_p=2,n_per_cluster=40)
}
cat(paste("Fraction of false positives at alpha = 0.05 WITHOUT Moulton correction: ",sum(p_matrix[,1]<0.05)/(dim(p_matrix)[1]),sep=""))
cat(paste("Fraction of false positives at alpha = 0.05 WITH Moulton correction: ",sum(p_matrix[,2]<0.05)/(dim(p_matrix)[1]),sep=""))
## End(Not run)
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.