如何在 R 中向量化一对明智的命令?

How to vectorized a pair wise command in R?

我正在研究一个连续分布,我需要测试其正态性。作为该过程的一部分,我正在创建存储桶以创建类别。 我需要测试我的数据是否正常,平均值为 24.9,标准差为 7.5。

我需要测试以下值范围的正态性 range <- c('<8', '12', '16', '20', '24', '28', '32', '36', '40', '44', '>44')

我为了找到观测值,我需要在 R 中执行以下计算,以获得符合正态分布的值。

obs <- c()
# total number of observed value = 62
obs <- append(obs, pnorm(8, 24.9, 7.5) * 62) # for bucket <8
obs <- append(obs, (pnorm(12, 24.9, 7.5) - pnorm(8, 24.9, 7.5)) * 62) # for bucket 12
# ...
# for bucket 16
# for bucket 20 etc.

有没有办法使这个逻辑矢量化,这样我就不需要为每个桶都制定一个公式?

您可以使用 hist()。

# Create sample data
x <- rnorm(100, mean = 24.9, sd = 7.5)

# View histogram
hist(x, breaks = c(0,8,12,16,20,24,28,32,36,40,44,60))

# View histogram details
details <- hist(x, breaks = c(0,8,12,16,20,24,28,32,36,40,44,60))
details

这是一个基于 diff 的想法 - 我不确定第三个范围会是什么样子,但这总是 p_norm[i] - p_norm[i-1]:

range_x <- c(8,12,16,20,24,28,32,36,40,44,100)
p_norm <- pnorm(range_x, 24.9, 7.5)

c(p_norm[1], diff(p_norm))*62

 [1]  0.7513823  1.8970234  4.6477273  8.6236507 12.1191940
 [6] 12.9007877 10.4021663  6.3529978  2.9386039  1.0293193
[11]  0.3371475