裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

Julia で統計学分布関数と仮説検定

2020年12月30日 | ブログラミング

(@v1.5) pkg> add Distributions, Random, HypothesisTests
julia> using Distributions, Random, HypothesisTests

分布関数

標準正規分布において,R の rnorm, pnorm, qnorm, dnorm に相当するもの

Julia の場合は,「オブジェクト」を操作する。

まず,標準正規分布のオブジェクトを作る。

julia> obj = Normal()
Normal{Float64}(μ=0.0, σ=1.0)

乱数生成

正規乱数 500 個を生成する。

R では

> d = rnorm(500)

Julia では

julia> d = rand(obj, 500);

生成された乱数データについて,平均値,不偏分散,標準偏差を計算してみる。

julia> println("mean = $(mean(d)), var = $(var(d)), sd = $(std(d))")
mean = -0.025412744391597998, var = 0.9232796228593824, sd = 0.9608744053513875

下側確率

R では

> pnorm(1.96)
[1] 0.9750021

Julia では

julia> cdf(obj, 1.96)
0.9750021048517795

複数の引数(ベクトル)において,各要素についての結果は,ドット記法 'cdf.(' を使って書ける。

R では

> pnorm(c(-1.96, 0, 1.96))
[1] 0.0249979 0.5000000 0.9750021

Julia では

julia> cdf.(obj, [-1.96, 0, 1.96])
3-element Array{Float64,1}:
 0.024997895148220435
 0.5
 0.9750021048517795

パーセント点

R では

> qnorm(c(0.025, 0.5, 0.975))
[1] -1.959964  0.000000  1.959964

Julia では

julia> quantile(obj, [0.025, 0.5, 0.975])
3-element Array{Float64,1}:
 -1.9599639845400592
  0.0
  1.9599639845400583

確率密度

R では

> dnorm(c(-1.96, 0, 1.96))
[1] 0.05844094 0.39894228 0.05844094

Julia では

julia> pdf.(obj, [-1.96, 0, 1.96])
3-element Array{Float64,1}:
 0.05844094433345147
 0.3989422804014327
 0.05844094433345147

等分散を仮定した独立 2 標本の平均値の差の検定

両側検定

R では

> x = c(3,2,1,2,3,2,1,2,3,4,3,2,2,3,4)
> y = c(3,2,1,2,3,2,3,4,4,3,3,3,2,2,3,3,4,5)
> t.test(x, y,  var.equal=TRUE)

 Two Sample t-test

data:  x and y
t = -1.282, df = 31, p-value = 0.2093
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -1.0939215  0.2494771
sample estimates:
mean of x mean of y 
 2.466667  2.888889 

Julia では

julia> x = [3,2,1,2,3,2,1,2,3,4,3,2,2,3,4];
julia> y = [3,2,1,2,3,2,3,4,4,3,3,3,2,2,3,3,4,5];
julia> obj = EqualVarianceTTest(x, y)
Two sample t-test (equal variance)
----------------------------------
Population details:
    parameter of interest:   Mean difference
    value under h_0:         0
    point estimate:          -0.422222
    95% confidence interval: (-1.0939, 0.2495)

Test summary:
    outcome with 95% confidence: fail to reject h_0
    two-sided p-value:           0.2093

Details:
    number of observations:   [15,18]
    t-statistic:              -1.2820140381935845
    degrees of freedom:       31
    empirical standard error: 0.32934290081343587

片側検定

R で,alternative="less"

> t.test(x, y,  var.equal=TRUE, alternative="less")

 Two Sample t-test

data:  x and y
t = -1.282, df = 31, p-value = 0.1047
alternative hypothesis: true difference in means is less than 0
95 percent confidence interval:
      -Inf 0.1361849
sample estimates:
mean of x mean of y 
 2.466667  2.888889 

Julia では

julia> println(pvalue(obj, tail=:left))
0.10467146197969886

R で,alternative="greater"

> t.test(x, y,  var.equal=TRUE, alternative="greater")

 Two Sample t-test

data:  x and y
t = -1.282, df = 31, p-value = 0.8953
alternative hypothesis: true difference in means is greater than 0
95 percent confidence interval:
 -0.9806293        Inf
sample estimates:
mean of x mean of y 
 2.466667  2.888889 

Julia では

julia> println(pvalue(obj, tail=:right))
0.8953285380203011

その他の検定手法

OneSampleTTest(x)
EqualVarianceTTest(x, y)
UnequalVarianceTTest(x, y)
ChisqTest(matrix)

これ以外は,GitHub にあったりするが,最悪,自分で書かねばならない。かな?

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« Julia でデータフレームを操... | トップ | Julia のカイ二乗分布関数 »
最新の画像もっと見る

コメントを投稿

ブログラミング」カテゴリの最新記事