3

モードを見つける方法を知っている人はいますか (R の単一ケースの変数間で最も頻繁に使用されますか?

たとえば、好きな果物の種類 (x) に関するデータがある場合、調査の回答者 (id) ごとに 9 回 (x1-x9) 尋ねます。最初の 5 回の質問で各被験者のモーダル応答を見つけたい場合、R でどのようにプログラミングすればよいでしょうか?

より簡潔に言えば、以下のサンプル データを使用して、各ケース内で MODE を見つけるにはどうすればよいですか?

 id  x1  x2  x3  x4  x5  MODE(x1-x5)?  
  1  3   5   6   4   5   5   
  2  7   4   7   4   7   7  
  3  3   4   4   4   3   4  
  4  3   2   2   2   3   2 
4

3 に答える 3

4

このmodeestパッケージは、ユニモーダル一変量データのモードの推定器を多数実装しています。

これにはmfv、最も頻度の高い値を返す関数があります。または (?mfv状態として) `mlv(..., method = 'discrete') を使用する方がよいでしょう。

library(modeest)


## assuming your data is in the data.frame dd

apply(dd[,2:6], 1,mfv)
[1] 5 7 4 2
## or
apply(dd[,2:6], 1,mlv, method = 'discrete')
[[1]]
Mode (most frequent value): 5 
Bickel's modal skewness: -0.2 
Call: mlv.integer(x = newX[, i], method = "discrete") 

[[2]]
Mode (most frequent value): 7 
Bickel's modal skewness: -0.4 
Call: mlv.integer(x = newX[, i], method = "discrete") 

[[3]]
Mode (most frequent value): 4 
Bickel's modal skewness: -0.4 
Call: mlv.integer(x = newX[, i], method = "discrete") 

[[4]]
Mode (most frequent value): 2 
Bickel's modal skewness: 0.4 
Call: mlv.integer(x = newX[, i], method = "discrete") 

さて、最も頻繁に関係がある場合は、自分が何を望んでいるのかを考える必要があります。
両方ともmfvmlv.integer最も頻度の高い値に結び付くすべての値を返します。(ただし、print メソッドは単一の値しか表示しません)

于 2013-01-07T01:50:10.470 に答える
1

同点の最小値を選択するソリューションは、次のように与えられます。

modeStat = function(vals) {
  return(as.numeric(names(which.max(table(vals)))))
}
modeStat(c(1,3,5,6,4,5))

これは次を返します:

[1] 5
于 2013-01-07T01:15:40.050 に答える
1

同点で使用meanし、ベクトルを返す:

> x[-7]
##   x v1 v2 v3 v4 v5
## 1 1  3  4  5  4  5
## 2 2  7  4  7  4  7
## 3 3  3  4  4  4  3
## 4 4  3  2  2  2  3

これはあなたの質問とまったく同じデータではありません。最初の行は、ネクタイを導入するために変更されました。

require(functional)
apply(x[2:6], 1, Compose(table,
                         function(i) i==max(i),
                         which,
                         names,
                         as.numeric,
                         mean))

## [1] 4.5 7.0 4.0 2.0

mean必要なタイブレーク機能に置き換えてください。

于 2013-01-07T01:16:35.653 に答える