在[R]中计算标称和连续变量的模式

时间:2011-02-16 11:55:17

标签: r

任何人都可以帮我吗?

如果我跑:

> mode(iris$Species)
[1] "numeric"
> mode(iris$Sepal.Width)
[1] "numeric"

然后我得到"numeric"作为答案

干杯

中号

2 个答案:

答案 0 :(得分:9)

函数mode()用于查找对象的 storage 模式,在这种情况下,存储为模式"numeric"。该函数不用于在数据集中找到最“频繁”的观察值,即它不用于找到统计模式。有关此函数在R中的作用以及它对您的问题没有用处的原因,请参阅?mode

对于离散数据,模式是集合中最常见的观察值:

> set.seed(1) ## reproducible example
> dat <- sample(1:5, 100, replace = TRUE) ## dummy data
> (tab <- table(dat)) ## tabulate the frequencies
dat
 1  2  3  4  5 
13 25 19 26 17 
> which.max(tab) ## which is the mode?
4 
4 
> tab[which.max(tab)] ## what is the frequency of the mode?
 4 
26

对于连续数据,模式是概率密度函数(PDF)达到最大值的数据的值。由于您的数据通常是来自某些连续概率分布的样本,我们不知道PDF,但我们可以通过直方图或通过核密度估计更好地估计它。

返回虹膜数据,这是从连续数据确定模式的示例:

> sepalwd <- with(iris, density(Sepal.Width)) ## kernel density estimate
> plot(sepalwd)
> str(sepalwd)
List of 7
 $ x        : num [1:512] 1.63 1.64 1.64 1.65 1.65 ...
 $ y        : num [1:512] 0.000244 0.000283 0.000329 0.000379 0.000436 ...
 $ bw       : num 0.123
 $ n        : int 150
 $ call     : language density.default(x = Sepal.Width)
 $ data.name: chr "Sepal.Width"
 $ has.na   : logi FALSE
 - attr(*, "class")= chr "density"
> with(sepalwd, which.max(y)) ## which value has maximal density?
[1] 224
> with(sepalwd, x[which.max(y)]) ## use the above to find the mode
[1] 3.000314

有关详细信息,请参阅?density。默认情况下,density()评估n = 512等距位置的核密度估计值。如果这对您来说太粗糙,请增加评估和返回的位置数量:

> sepalwd2 <- with(iris, density(Sepal.Width, n = 2048))
> with(sepalwd, x[which.max(y)])
[1] 3.000314

在这种情况下,它不会改变结果。

答案 1 :(得分:2)

请参阅?modemode为您提供存储模式。如果您想要具有最大计数的值,请使用表。

> Sample <- sample(letters[1:5],50,replace=T)
> tmp <- table(Sample)
> tmp
Sample
 a  b  c  d  e 
 9 12  9  7 13 
> tmp[which(tmp==max(tmp))]
 e 
13 

如果函数没有按照您的想法进行操作,请阅读帮助文件。

一些额外的解释:

max(tmp)tmp

的最大值

tmp == max(tmp)给出一个长度为tmp的逻辑向量,指示值是否等于max(tmp)。

which(tmp == max(tmp))返回向量中TRUE的值的索引。这些索引用于选择tmp中的值,即最大值。

请参阅帮助文件?which?max以及R的介绍手册。