我有这种数据集
B_dong A_dong count mean count2
14 1118053 1118053 15 129.7333 15
16 1118053 1118055 18 171.8333 33
19 1118053 1118060 4 270.7500 37
13 1118053 1118052 13 374.8462 50
17 1118053 1118057 21 389.9524 71
20 1118053 1118061 9 418.0000 80
15 1118053 1118054 10 435.1000 90
1 1118053 1102054 2 3066.0000 237
44 1118053 1122060 2 3080.0000 239
2 1118053 1102059 1 4867.0000 240
test2 <- structure(list(B_dong = c(1118053L, 1118053L, 1118053L, 1118053L,1118053L, 1118053L, 1118053L, 1118053L, 1118053L, 1118053L),A_dong = c(1118053L, 1118055L, 1118060L, 1118052L, 1118057L,1118061L, 1118054L, 1102054L, 1122060L, 1102059L), count = c(15L,18L, 4L, 13L, 21L, 9L, 10L, 2L, 2L, 1L), mean = c(129.733333333333,171.833333333333, 270.75, 374.846153846154, 389.952380952381,418, 435.1, 3066, 3080, 4867), count2 = c(15L, 33L, 37L,50L, 71L, 80L, 90L, 237L, 239L, 240L)), row.names = c(14L,16L, 19L, 13L, 17L, 20L, 15L, 1L, 44L, 2L), class = "data.frame")
然后我使用此数据集绘制了一个ecdf
plot(ecdf(test2$mean), ylab="Fn(x)", verticals = FALSE,
col.01line = "gray70", pch = 19)
有没有办法计算R中ecdf图的面积(积分)?
答案 0 :(得分:3)
好的。如果您查看该图,它实际上是一系列矩形(添加了红线):
segments(sort(unique(test2$mean)), 0,
sort(unique(test2$mean)), ecdf(test2$mean)(sort(unique(test2$mean))),
col = "red")
每个“台阶”下的面积仅仅是每个矩形的宽度和高度。
宽度只是每个唯一值(已排序)之间的差:
diff(sort(unique(test2$mean)))
# [1] 42.10000 98.91667 104.09615 15.10623 28.04762 17.10000 2630.90000 14.00000 1787.00000
从ecdf
调用的返回值函数中根据以下值凭经验找到高度:
ecdf(test2$mean)(sort(unique(test2$mean)))
# [1] 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
由于宽度 少(最右边总是一个点,而且我们都知道单个点的面积为零),所以我们可以舍弃最后一个高度
因此,我们将高度乘以宽度,然后求和:
sum(
head(ecdf(test2$mean)(sort(unique(test2$mean))), n = -1) *
diff(sort(unique(test2$mean)))
)
# [1] 3546.678