3

有谁知道如何找到模式(R中单个案例的变量最常见?

例如,如果我有关于最喜欢的水果类型 (x) 的数据,则在调查中对每个受访者 (id) 询问九次 (x1-x9)。如果我想在前五次询问中找到每个测试对象的模态响应,我将如何在 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在 tie 上使用,并返回一个向量:

> 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 回答