2

我正在执行 marascuilio 程序以比较比例之间的差异。我正在使用以下代码(从本教程复制和改编:

## Set the proportions of interest.
p = c(0.3481, 0.1730, 0.4788)
N = length(p)
value = critical.range = c()

## Compute critical values.
for (i in 1:(N-1))
{ for (j in (i+1):N)
{
  value = c(value,(abs(p[i]-p[j])))
  critical.range = c(critical.range,
                     sqrt(qchisq(.95,3))*sqrt(p[i]*(1-p[i])/12000 + p[j]*(1-p[j])/12000))
}
}
round(cbind(value,critical.range),3)

我需要输出也打印类别的标签(例如,哪些类别正在被比较)。

因此,如果类别列在一个单独的向量中,例如categories <- c("cat1", "cat2", cat"3),则比较是cat1-cat2cat1-cat3cat2-cat3

如何将这些标签附加到我的输出中?

    value critical.range
[1,] 0.175          0.016
[2,] 0.131          0.018
[3,] 0.306          0.016
4

2 回答 2

2

尝试这个:

## Set the proportions of interest.
p = c(0.3481, 0.1730, 0.4788)
N = length(p)
value = critical.range = tag = c()
categories <- c("cat1", "cat2", "cat3")

## Compute critical values.
for (i in 1:(N-1)){ 
    for (j in (i+1):N){

    value <- c(value,(abs(p[i]-p[j])))
    critical.range = c(critical.range,
                       sqrt(qchisq(.95,N-1))*sqrt(p[i]*(1-p[i])/12000 + p[j]*(1-p[j])/12000))
    tag = c(tag, paste(categories[i], categories[j], sep = "-"))

    }
}
df <- as.data.frame(cbind(value,critical.range, tag), stringsAsFactors = F)
df$value <- round(as.numeric(df$value),3)
df$critical.range <- round(as.numeric(df$critical.range),3)

输出:

 value critical.range       tag
1 0.175          0.016 cat1-cat2
2 0.131          0.018 cat1-cat3
3 0.306          0.016 cat2-cat3
于 2016-08-23T11:39:07.680 回答
0

在计算critical.range(12000)时要小心分母......这是基于每个类别的样本量 - 如果每个类别没有12000个观察值,那么需要调整 - 如果您的观察次数远少于 12000,您的临界值可能远低于该函数给您的值(因此,您应该有更少的符号。差异)。

于 2018-04-05T18:50:28.587 回答