1. ホーム
  2. r

[解決済み] [解答】幾何平均:組み込みはあるのか?

2022-04-14 11:56:31

質問

geometric meanの組み込みを探したが、見つからなかった。

(スクリプトの場合、私はできるだけ頻繁にビルトインを使用するようにしています。

ない場合のために(ないとは思いますが)、私のはこちらです。

gm_mean = function(a){prod(a)^(1/length(a))}

解決方法は?

Rで幾何平均を計算するための、ベクトル化された、ゼロおよびNAトレラントな関数です。 mean を含む計算を行います。 length(x) が必要な場合は x は正でない値を含む。

gm_mean = function(x, na.rm=TRUE){
  exp(sum(log(x[x > 0]), na.rm=na.rm) / length(x))
}

を指摘してくれた@ben-bolkerに感謝します。 na.rm パススルーと、それが正しく動作することを確認してくれた @Gregor に感謝します。

の誤った等価性に関連するコメントもあると思います。 NA の値とゼロの値があります。私が考えていたアプリケーションでは、それらは同じものですが、もちろん一般的にはそうではありません。したがって、もしゼロの伝搬を任意で行いたいのであれば、データ中の length(x) の場合は異なる。 NA を削除する場合、上記の関数に代わる少し長い代替案として、次のようなものがあります。

gm_mean = function(x, na.rm=TRUE, zero.propagate = FALSE){
  if(any(x < 0, na.rm = TRUE)){
    return(NaN)
  }
  if(zero.propagate){
    if(any(x == 0, na.rm = TRUE)){
      return(0)
    }
    exp(mean(log(x), na.rm = na.rm))
  } else {
    exp(sum(log(x[x > 0]), na.rm=na.rm) / length(x))
  }
}

また、負の値もチェックし、より情報量の多い、適切な NaN 幾何平均が負の値に対して定義されていない(ゼロに対しては定義されている)ことを尊重する。この件に関して、私のケースに留まったコメンターに感謝します。