Подгонять нормальное распределение к сгруппированным данным, давая ожидаемые частоты

У меня есть частотное распределение наблюдений, сгруппированных по подсчетам в интервалах классов. Я хочу подобрать нормальное (или другое непрерывное) распределение и найти ожидаемые частоты в каждом интервале в соответствии с этим распределением.

Например, предположим следующее, где я хочу вычислить другой столбец, expected дающий ожидаемое количество солдат с окружностью груди в интервале, указанном chest, где эти предполагаются центрированными относительно номинального значения. Например, 35 = 34.5 <= y < 35.5. Один анализ, который я видел, дает ожидаемую частоту в этой ячейке как 72,5 против наблюдаемой 81.

> data(ChestSizes, package = "HistData")
> 
> ChestSizes
   chest count
1     33     3
2     34    18
3     35    81
4     36   185
5     37   420
6     38   749
7     39  1073
8     40  1079
9     41   934
10    42   658
11    43   370
12    44    92
13    45    50
14    46    21
15    47     4
16    48     1
> 

> # ungroup to a vector of values
> chests <- vcdExtra::expand.dft(ChestSizes, freq = "count")

Существует довольно много вариантов этого вопроса, большинство из которых связаны с построением графика нормальной плотности поверх гистограммы, масштабированной для представления количества, а не плотности. Но никто явно не показывает расчет ожидаемых частот. Один близкий вопрос: R: добавьте нормальные аппроксимации к сгруппированным гистограммам в ggplot2

Я вполне могу построить стандартный график (ниже), но для других вещей, таких как критерий хи-квадрат или график vcd::rootogram, мне нужны ожидаемые частоты в тех же интервалах классов.

> bw <- 1
n_obs <- nrow(chests)
xbar <- mean(chests$chest)
std <- sd(chests$chest)

plt <-
ggplot(chests, aes(chest))  + 
  geom_histogram(color = "black", fill = "lightblue",  binwidth = bw) + 
  stat_function(fun = function(x) 
    dnorm(x, mean = xbar, sd = std) * bw * n_obs,
    color = "darkred", size = 1)

plt

Почему в Python есть оператор &quot;pass&quot;?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
2
0
796
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот как вы можете рассчитать ожидаемые частоты для каждой группы, предполагая нормальность.

xbar <- with(ChestSizes, weighted.mean(chest, count))
sdx <- with(ChestSizes, sd(rep(chest, count)))
transform(ChestSizes, Expected = diff(pnorm(c(32, chest) + .5, xbar, sdx)) * sum(count))

   chest count     Expected
1     33     3    4.7600583
2     34    18   20.8822328
3     35    81   72.5129162
4     36   185  199.3338028
5     37   420  433.8292832
6     38   749  747.5926687
7     39  1073 1020.1058521
8     40  1079 1102.2356155
9     41   934  943.0970605
10    42   658  638.9745241
11    43   370  342.7971793
12    44    92  145.6089948
13    45    50   48.9662992
14    46    21   13.0351612
15    47     4    2.7465640
16    48     1    0.4579888

Другие вопросы по теме