如何从分布中计算均值、中位数、众数、标准差

机器算法验证 r 分布 意思是
2022-03-31 05:19:51

如何从分布中计算均值、方差、中位数、标准差和模态?如果我随机生成形成正态分布的数字,我将平均值指定为m=24.2标准偏差sd=2.2

> dist = rnorm(n=1000, m=24.2, sd=2.2)

然后我可以执行以下操作:

意思是:

> mean(dist)
[1] 24.17485

方差:

> var(dist)
[1] 4.863573

中位数:

> median(dist)
[1] 24.12578

标准偏差:

> sqrt(var(dist))
[1] 2.205351

模式又名 Modus(取自此处):

> names(sort(-table(dist)))[1]
[1] "17.5788181686221"
  1. 这是全部的魔法,还是还有其他我没有意识到的东西?
  2. 我可以用代表(平均值,中位数......)的垂直线以某种方式可视化我的钟形正态分布吗?
  3. 这些属性对分布有何影响?

PS:代码在R中

3个回答

首先对模式进行一般性评论:

您不应该使用这种方法来获得(至少在理论上)连续分布数据的模式;你不太可能有任何重复的值(除非你有真正巨大的样本,这将是一个小奇迹,即使这样,各种数字问题也可能使它以某种意想不到的方式表现),你通常只会得到最小值方式。这将是在离散或分类数据中找到一种全局模式的一种方法,但即使在那时我也可能不会那样做。以下是获取离散或分类数据模式的其他几种方法:

x = rpois(30,12.3)

tail(sort(table(x)),1)   #1: category and count; if multimodal this only gives one

w=table(x); w[max(w)==w] #2: category and count; this can find more than one mode

which.max(table(x))      #3: category and *position in table*; only finds one mode

如果您只想要价值而不是数量或位置,names()将从那些

要以基本方式识别连续数据的模式(可以有多个本地模式),您可以对数据进行分箱(如使用直方图),也可以对其进行平滑处理(density例如使用)并尝试找到一种或多种模式那样。

更少的直方图 bin 将使您对模式的估计更少受噪声影响,但该位置不会被固定到比 bin-width 更好的位置(即您只能得到一个间隔)。更多的 bin 可能会在 bin 内提​​供更高的精度,但噪声可能会使它在许多这样的 bin 中跳跃;bin-origin 或 bin 宽度的微小变化可能会产生相对较大的模式变化。(在统计数据中存在相同的偏差-方差权衡。)

请注意,这summary将为您提供几个基本统计信息。

[你应该使用sd(x)而不是sqrt(var(x)); 一件事更清楚]

--

关于 q.2 是的;您当然可以在直方图或箱线图等显示器上显示数据的平均值和中位数。请参阅此处以获取一些示例和代码,您应该能够将其推广到您需要的任何情况。

一些额外的但不是很知名的描述性统计数据。

x<-rnorm(10)

sd(x) #Standard deviation

fivenum(x) #Tukey's five number summary, usefull for boxplots

IQR(x) #Interquartile range

quantile(x) #Compute sample quantiles

range(x) # Get minimum and maximum

我相信您可以在其中一本免费获得的手册中找到许多其他R手册。

正如@Glen_b 所描述的,连续分布的模式并不像整数向量那样简单。

此 R 代码将使用来自基本 R 的非常有用的函数获得连续分布的模式hist()。正如@Glen_b 所描述的,这涉及将观察结果放入箱中 - 离散类别,如果观察落在箱间隔内,则将其计为该 bin 解决了在连续分布中极不可能两次观察到完全相同的值的问题。

set.seed(123)
dist <- rnorm(n=1000, m=24.2, sd=2.2)
h <- hist(dist, # vector
          plot = F, # stops hist() from automatically plotting histogram
          breaks = 40) # number of bins

现在我们将在其中具有最大计数的 bin 间隔的中点视为模式

h$mids[which.max(h$counts)] 

# [1] 23.75

瞧!模式。

ps您也可以将间隔的开始h$breaks[which.max(h$counts)]视为模式,通过. 正如所讨论的连续分布模式并不简单,需要做出决定,因此为什么没有像 withmean()median()