首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对朱莉娅的一组数据进行统计测试?(适用同等)

如何对朱莉娅的一组数据进行统计测试?(适用同等)
EN

Stack Overflow用户
提问于 2022-09-09 20:02:09
回答 2查看 59关注 0票数 2

在Julia中,我想测试在dataframe的另一列中定义的每个组的变量的正态性。

让我们说:

代码语言:javascript
复制
df = DataFrame(x = rand(Normal(),30), group = repeat(["A", "B"],15))

我知道我可以用以下方法测试x的正态性:

代码语言:javascript
复制
using HypothesisTests
using Distributions
OneSampleADTest(x, Normal())

所以问题是如何检验x对每个组的正态性?在R中,我会使用tapply(),但我在Julia中找不到相应的.

EN

回答 2

Stack Overflow用户

发布于 2022-09-09 20:22:55

这取决于您期望的输出。我建议您将结果存储在数据框架中(这不是tapply所做的):

代码语言:javascript
复制
julia> gdf = groupby(df, :group, sort=true) # group by :group and keep groups sorted
GroupedDataFrame with 2 groups based on key: group
First Group (15 rows): group = "A"
 Row │ x          group
     │ Float64    String
─────┼───────────────────
   1 │ -0.869008  A
   2 │  0.190041  A
   3 │  0.369881  A
   4 │  0.445092  A
  ⋮  │     ⋮        ⋮
  13 │ -0.599266  A
  14 │  0.696132  A
  15 │  0.788465  A
           8 rows omitted
⋮
Last Group (15 rows): group = "B"
 Row │ x          group
     │ Float64    String
─────┼───────────────────
   1 │ -1.19973   B
   2 │  0.557241  B
   3 │ -0.425667  B
   4 │  0.787917  B
  ⋮  │     ⋮        ⋮
  13 │  1.96912   B
  14 │  0.567594  B
  15 │  1.39739   B
           8 rows omitted

julia> res = combine(gdf, :x => (x -> OneSampleADTest(x, Normal())) => :ADTest)
2×2 DataFrame
 Row │ group   ADTest
     │ String  OneSampl…
─────┼───────────────────────────────────────────
   1 │ A       One sample Anderson-Darling test…
   2 │ B       One sample Anderson-Darling test…

现在,在res中,您有了组名和测试结果(一个完整的测试结果对象,您可以在以后使用)。

如果您只对p值感兴趣,请执行以下操作:

代码语言:javascript
复制
julia> res = combine(gdf, :x => (x -> pvalue(OneSampleADTest(x, Normal()))) => :ADTest_pvalue)
2×2 DataFrame
 Row │ group   ADTest_pvalue
     │ String  Float64
─────┼───────────────────────
   1 │ A            0.469626
   2 │ B            0.750134

如果您习惯使用dplyr样式,请使用DataFramesMeta.jl:

代码语言:javascript
复制
julia> using DataFramesMeta

julia> @combine(gdf, :ADTest = OneSampleADTest(:x, Normal()))
2×2 DataFrame
 Row │ group   ADTest
     │ String  OneSampl…
─────┼───────────────────────────────────────────
   1 │ A       One sample Anderson-Darling test…
   2 │ B       One sample Anderson-Darling test…

julia> @combine(gdf, :ADTest_pvalue = pvalue(OneSampleADTest(:x, Normal())))
2×2 DataFrame
 Row │ group   ADTest_pvalue
     │ String  Float64
─────┼───────────────────────
   1 │ A            0.469626
   2 │ B            0.750134
票数 3
EN

Stack Overflow用户

发布于 2022-09-09 20:23:32

如果您只想为数据帧中的每个组获取pvalue,

代码语言:javascript
复制
julia> combine(groupby(df, :group), :x => (x -> pvalue(OneSampleADTest(x, Normal()))) => :onesampleAD_pvalue)
2×2 DataFrame
 Row │ group   onesampleAD_pvalue 
     │ String  Float64            
─────┼────────────────────────────
   1 │ A                 0.275653
   2 │ B                 0.544317

如果您想要打印每个组的测试细节(或进行更复杂的操作),您也可以循环遍历组:

代码语言:javascript
复制
julia> for (key, sdf) in pairs(groupby(df, :group))
         println("Group $(key.group)")
         display(OneSampleADTest(sdf.x, Normal()))
       end
Group A
One sample Anderson-Darling test
--------------------------------
...

Group B
One sample Anderson-Darling test
--------------------------------
...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73666985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档