1

次のRコードを取得しました。それをpythonに変換してpython環境で実行する必要があります。基本的にはrpy2モジュールでこれを実行しましたが、pythonが同じことをしていると少し退屈に見えるので、誰かがより良い方法を見つけることができますrpy2 モジュールを使用して、次の R コードを同等の python スクリプトに書き換えるには?

mymad <- function (x) 
{
    center <- median(x)
    y <- abs(x - center)
    n <- length(y)
    if (n == 0) 
        return(NA)
    half <- (n + 1)/2
    1.4826 * if (n%%2 == 1) {
        sort(y, partial = half)[half]
    }
    else {
        sum(sort(y, partial = c(half, half + 1))[c(half, half + 
            1)])/2
    }
}
4

3 に答える 3

7

関数の目的、つまりMedian Absolute Deviationを指定することもできます。あなたが呼ぶものmymadは、正規分布変数の大きなサンプルの仮定に基づく、母集団の標準偏差の近似値です。

このウェブサイトによると:

def median(pool):
    copy = sorted(pool)
    size = len(copy)
    if size % 2 == 1:
        return copy[(size - 1) / 2]
    else:
        return (copy[size/2 - 1] + copy[size/2]) / 2

したがって、次のことmadを確認する関数が必要です。

mad(x) == median(abs(x-median(x)))

Elenaher に感謝します (コメントのクレジットを提供してください)。コードは次のとおりです。

def mad(x):
    return median([abs(val-median(x)) for val in x])

そして、あなたが計算していると思います:

def mymad(x):
    return 1.4826*mad(x)
于 2010-08-05T16:11:30.383 に答える
3

おそらくnumpy/Pythonで書かれたものよりも少し遅いですが、実装するのは確かに高速です(車輪が再発明されないため):

# requires rpy2 >= 2.1
from rpy2.robjects.packages import importr
stats = importr('stats')

stats.mad(x)
于 2010-08-06T20:34:48.600 に答える
2
import numpy
# x is the input array
x = numpy.array( [1,2,4,3,1,6,7,5,4,6,7], float ) }
# mad = median( | x - median(x) | )
mad =  numpy.median( numpy.abs( ( x - numpy.median( x ) ) )
于 2014-03-18T13:23:45.467 に答える