利用以下数据,我试图计算卡方和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
非常感谢您的帮助。