计算多个数据集的Bonferroni上下置信区间

时间:2019-07-23 07:41:40

标签: r

利用以下数据,我试图计算卡方和Bonferroni的置信区间上下限。列“ Data_No”标识数据集(因为需要针对每个数据集分别进行计算)。

Data_No    Area    Observed
   1        3353    31
   1        2297    2
   1        1590    15
   1        1087    16
   1        817     2
   1        847     10
   1        1014    28
   1        872     29
   1        1026    29
   1        1215    21
   2        3353    31
   2        2297    2
   2        1590    15
   3        1087    16
   3        817     2

我使用的代码是:

library(dplyr) 
   setwd("F:/GIS/July 2019/") 
   total_data <- read.csv("test.csv") 
   result_data <- NULL 
   for(i in unique(total_data$Data_No)){ 
   data <- total_data[which(total_data$Data_No == i),] 
   data <- data %>%
           mutate(RelativeArea = Area/sum(Area), Expected = RelativeArea*sum(Observed), OminusE = Observed-Expected, O2 = OminusE^2, O2divE = O2/Expected, APU = Observed/sum(Observed), Alpha = 0.05/2*(unique(data$Data_No)), 
Zvalue = qnorm(Alpha,lower.tail=FALSE), lower = APU-Zvalue*sqrt(APU*(1-APU)/sum(Observed)), upper = APU+Zvalue*sqrt(APU*(1-APU)/sum(Observed)))
result_data <- rbind(result_data,data) }
write.csv(result_data,file='final_result.csv')

Alpha = 0.05/2*K列,其中K是类别的数量(类别的数目由“ Data_No”列标识,因此第一个为10,第二个为3,第三个为2)。因此,例如,对于由十行组成的第一个数据集,alpha值为0.05 / 2 * 10,对于由三行组成的第二个数据集,alpha值应为0.05 / 2 * 3,依此类推,< / p>

Alpha = 0.05/2*(length(unique(total_data$Data_No)))”列的代码不知道需要对Data_No(也标识“数据集”)中的数字进行计数。该计数是指类别数。现在,“ Alpha”列会生成一个数字,并且不会不对每个数据集分别计数,这是不对的。因此,我猜想需要修改代码以说出有多少行在Data_No中具有相同的数字,然后将该计数值(或0.05 / 2 *类别数)乘以2?如果alpha列正确,它将生成正确的Z值。

预期结果:

Data_No Area Observed RelativeArea  O2divE  Alpha   Z value lower   upper
1       3353    31        0.237     3.573   0.003   2.807   0.092   0.247
1       2297    2         0.163     25.908  0.003   2.807   -0.011  0.033
1       1590    15        0.113     1.527   0.003   2.807   0.025   0.139
1       1087    16        0.077     0.259   0.003   2.807   0.029   0.146
1       817     2         0.058     6.968   0.003   2.807   -0.011  0.033
1       847     10        0.060     0.087   0.003   2.807   0.007   0.102
1       1014    28        0.072     16.792  0.003   2.807   0.078   0.228
1       872     29        0.062     27.708  0.003   2.807   0.083   0.234
1       1026    29         0.073    18.536  0.003   2.807   0.083   0.234
1       1215    21         0.086    1.751   0.003   2.807   0.049   0.181
                                    103.110             
2       3353    31        0.463     3.460   0.008   2.394   0.481   0.811
2       2297    2         0.317     11.491  0.008   2.394   -0.027  0.111
2       1590    15        0.220     1.886   0.008   2.394   0.152   0.473
                                    16.837              
3       1087    16        0.571     3.188   0.013   2.241   0.723   1.055
3       817     2         0.429     4.242   0.013   2.241   -0.055  0.277
                                    7.430       

我也想对“ O2divE”列的值求和

实际结果(错误结果):

Data_No Area    Observed    Alpha   Zvalue  lower   upper
1       3353    31          0.075   1.440   0.129   0.209
1       2297    2           0.075   1.440   0.000   0.022
1       1590    15          0.075   1.440   0.053   0.111
1       1087    16          0.075   1.440   0.057   0.117
1       817     2           0.075   1.440   0.000   0.022
1       847     10          0.075   1.440   0.030   0.079
1       1014    28          0.075   1.440   0.115   0.191
1       872     29          0.075   1.440   0.120   0.197
1       1026    29          0.075   1.440   0.120   0.197
1       1215    21          0.075   1.440   0.081   0.149
2       3353    31          0.075   1.440   0.546   0.745
2       2297    2           0.075   1.440   0.000   0.083
2       1590    15          0.075   1.440   0.216   0.409
3       1087    16          0.075   1.440   0.782   0.996
3       817     2           0.075   1.440   0.004   0.218

非常感谢您的帮助。

0 个答案:

没有答案