裏 RjpWiki

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

Julia に翻訳--038 同値のある場合の中央値

2021年03月09日 | ブログラミング

#==========
Julia の修行をするときに,いろいろなプログラムを書き換えるのは有効な方法だ。
以下のプログラムを Julia に翻訳してみる。

同値のある場合の中央値
http://aoki2.si.gunma-u.ac.jp/R/median.html

ファイル名: mymedian.jl  関数名: mymedian

翻訳するときに書いたメモ

return 文の中の accu は accuracy

==========#

using Statistics

mymedian = function (x; y=[], accuracy=0)
    if length(y) == 0
        med = median(x)
        ntie = sum(x .== med)
        if ntie != 1 && accuracy > 0
            x = vcat(x[x .!= med], (med-(ntie+1)*accuracy/2/ntie) .+ (1:ntie)/ntie)
            med = median(x)
        end
        return med
    else
        k = length(y)
        length(x)-1 == k || error("length(x) - 1 ≠ length(y)")
        csum = cumsum(y)
        n = csum[k]
        for i in 1:k
            if csum[i] >= n/2
                return x[i]-accuracy/2+(n/2-csum[i-1])/y[i]*(x[i+1]-x[i])
            end
        end    
    end
end

x = [1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5]
mymedian(x, accuracy=1) # 3.125

x = 1:6
f = [2, 4, 8, 6, 2]
mymedian(x, y=f, accuracy=1) # 3.125

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« Julia に翻訳--037 度数分布... | トップ | Julia に翻訳--039 ホッジス... »
最新の画像もっと見る

コメントを投稿

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