如何根据R中的密度进行分组汇总统计

问题描述 投票:0回答:1

目标:我想为每个组(hrzn)生成分组的百分位数

我有以下数据

# A tibble: 3,500 x 3
    hrzn parameter density
   <dbl>     <dbl>   <dbl>
 1     1    0.0183 0.00914
 2     1    0.0185 0.00905
 3     1    0.0187 0.00897
 4     1    0.0189 0.00888
 5     1    0.0191 0.00880
 6     1    0.0193 0.00872
 7     1    0.0194 0.00864
 8     1    0.0196 0.00855
 9     1    0.0198 0.00847
10     1    0.0200 0.00839

hrzn是组,parameter是参数空间的网格,densityparameter列中值的密度。

我想通过hrzn生成统计数据百分位数10到90 x 10的摘要。我试图保持这种计算效率。我知道我可以使用密度作为权重对参数进行采样,但是我很好奇,有一种无需进行采样就可以从密度生成百分位数的更快方法。

可以通过以下方式获得数据

df <- readr::read_csv("https://raw.githubusercontent.com/alexhallam/density_data/master/data.csv")
r dplyr probability-density
1个回答
0
投票

当我从您的csv加载数据时,这10个组中的每个参数和密度值都相同:

df
#># A tibble: 3,500 x 3
#>    hrzn parameter density
#>   <int>     <dbl>   <dbl>
#> 1     1    0.0183 0.00914
#> 2     1    0.0185 0.00905
#> 3     1    0.0187 0.00897
#> 4     1    0.0189 0.00888
#> 5     1    0.0191 0.00880
#> 6     1    0.0193 0.00872
#> 7     1    0.0194 0.00864
#> 8     1    0.0196 0.00855
#> 9     1    0.0198 0.00847
#>10     1    0.0200 0.00839
#># ... with 3,490 more rows
sapply(1:10, function(x) all(df$parameter[df$hrzn == x] == df$parameter[df$hrzn == 1]))
# [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
sapply(1:10, function(x) all(df$density[df$hrzn == x] == df$density[df$hrzn == 1]))
# [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE

我不确定这是否是一个错误,但是很明显,如果您担心计算的话,只需在单个组中进行操作,就可以将所有组中的所有操作快十倍。] >

无论如何,要获得每个hrzn的第10和90个百分位数,您只需要查看累积分布函数上哪个参数与0.1和0.9相邻即可。让我们概括一下,对所有组进行计算,以防数据出现问题或您想用其他数据重复它:

df %>% 
  mutate(hrzn = factor(hrzn)) %>%
  group_by(hrzn) %>% 
  summarise(centile_10 = parameter[which(cumsum(density) > .1)[1]],
            centile_90 = parameter[which(cumsum(density) > .9)[1]] )
#># A tibble: 5 x 3
#>  hrzn  centile_10 centile_90
#>  <fct>      <dbl>      <dbl>
#>1 1         0.0204      0.200
#>2 2         0.0204      0.200
#>3 3         0.0204      0.200
#>4 4         0.0204      0.200
#>5 5         0.0204      0.200
© www.soinside.com 2019 - 2024. All rights reserved.