如何计算Julia中每个bin中两个不同组的数据占比?



我有两组人,每个人的大小为n,具有不同的属性值,例如年龄。我已经绘制了两组的直方图,并看到了数据是如何分布的,给定k个箱子(大小相同)。但是,现在我想计算第1组和第2组的人在第1组中的比例,所以我可以计算比例之差。

只是为了清楚,我不想计算箱子的频率,我已经用"权重"做过了。

我的数据结构是:两个具有属性的矩阵(每个组一个)。每一行代表一个不同的属性(年龄代表ex),每一列代表一个人。

您想要的实现方式取决于您正在使用的数据结构。

对于DataFrames.jl,您可以按照以下步骤进行操作。数据在df

julia> df
120×3 DataFrame
│ Row │ age   │ groups │ bins             │
│     │ Int64 │ String │ Categorical…     │
├─────┼───────┼────────┼──────────────────┤
│ 1   │ 7     │ Group1 │ Q1: [0.0, 16.8)  │
│ 2   │ 2     │ Group1 │ Q1: [0.0, 16.8)  │
│ 3   │ 8     │ Group1 │ Q1: [0.0, 16.8)  │
│ 4   │ 4     │ Group1 │ Q1: [0.0, 16.8)  │
│ 5   │ 9     │ Group1 │ Q1: [0.0, 16.8)  │
│ 6   │ 12    │ Group1 │ Q1: [0.0, 16.8)  │
│ 7   │ 5     │ Group2 │ Q1: [0.0, 16.8)  │
│ 8   │ 1     │ Group2 │ Q1: [0.0, 16.8)  │
│ 9   │ 16    │ Group2 │ Q1: [0.0, 16.8)  │
│ 10  │ 13    │ Group2 │ Q1: [0.0, 16.8)  │
│ 11  │ 1     │ Group2 │ Q1: [0.0, 16.8)  │
⋮
│ 109 │ 75    │ Group2 │ Q5: [71.4, 89.0] │
│ 110 │ 82    │ Group2 │ Q5: [71.4, 89.0] │
│ 111 │ 80    │ Group2 │ Q5: [71.4, 89.0] │
│ 112 │ 80    │ Group2 │ Q5: [71.4, 89.0] │
│ 113 │ 86    │ Group2 │ Q5: [71.4, 89.0] │
│ 114 │ 77    │ Group2 │ Q5: [71.4, 89.0] │
│ 115 │ 88    │ Group2 │ Q5: [71.4, 89.0] │
│ 116 │ 75    │ Group2 │ Q5: [71.4, 89.0] │
│ 117 │ 87    │ Group2 │ Q5: [71.4, 89.0] │
│ 118 │ 79    │ Group2 │ Q5: [71.4, 89.0] │
│ 119 │ 83    │ Group2 │ Q5: [71.4, 89.0] │
│ 120 │ 74    │ Group2 │ Q5: [71.4, 89.0] │
  1. 我们首先计算各组/bin cell的观察数
df2 = combine(groupby(df, [:groups, :bins]), :age => length => :num)

:num表示每个cell中obs的个数。

  1. 我们计算每组的观测数,然后将带有此信息的数据帧加入df2。我们计算比例并按bin/group
  2. 排序
df3 = combine(groupby(df, :groups), :age => length => :den)
df4 = join(df3, df2, on = :groups)
df4[:proportion] = df4.num./df4.den
sort!(df4, [:bins, :groups])
julia> df4
10×5 DataFrame
│ Row │ groups │ den   │ bins             │ num   │ proportion │
│     │ String │ Int64 │ Categorical…     │ Int64 │ Float64    │
├─────┼────────┼───────┼──────────────────┼───────┼────────────┤
│ 1   │ Group1 │ 43    │ Q1: [0.0, 16.8)  │ 6     │ 0.139535   │
│ 2   │ Group2 │ 77    │ Q1: [0.0, 16.8)  │ 18    │ 0.233766   │
│ 3   │ Group1 │ 43    │ Q2: [16.8, 36.6) │ 10    │ 0.232558   │
│ 4   │ Group2 │ 77    │ Q2: [16.8, 36.6) │ 14    │ 0.181818   │
│ 5   │ Group1 │ 43    │ Q3: [36.6, 52.4) │ 8     │ 0.186047   │
│ 6   │ Group2 │ 77    │ Q3: [36.6, 52.4) │ 16    │ 0.207792   │
│ 7   │ Group1 │ 43    │ Q4: [52.4, 71.4) │ 11    │ 0.255814   │
│ 8   │ Group2 │ 77    │ Q4: [52.4, 71.4) │ 13    │ 0.168831   │
│ 9   │ Group1 │ 43    │ Q5: [71.4, 89.0] │ 8     │ 0.186047   │
│ 10  │ Group2 │ 77    │ Q5: [71.4, 89.0] │ 16    │ 0.207792   │

最新更新