Как рассчитать стандартное отклонение произвольного распределения по r? - PullRequest
0 голосов
/ 27 февраля 2020
x    Px
134  .5
565  .25
65   .125
563  .125

Предположим, что выше - data.frame. Есть ли функция, в которую я могу ввести ее для вычисления стандартного отклонения?

Ответы [ 3 ]

1 голос
/ 27 февраля 2020

Вы можете рассчитать SD аналитически ( больше информации ):

enter image description here

Или численно:

samp = sample(x = x, n = 1e6, replace = TRUE, prob = Px)
sd(samp)
0 голосов
/ 28 февраля 2020

1) лм Если предположить, что в конце указано примечание P, мы можем использовать lm

fm <- lm(x ~ 1, P, weight = Px)
sqrt(deviance(fm))
## [1] 216.1202

или заменить последнюю строку на:

sqrt(nobs(fm) - 1) * sigma(fm)
## [1] 216.1202

2) прямой или сделать это напрямую:

m <- with(P, sum(x * Px))
with(P, sqrt(sum((x - m)^2 * Px)))
## [1] 216.1202

или

with(P, sqrt(sum(x^2*Px)-sum(x*Px)^2))
## [1] 216.1202

3) In конкретный пример в вопросе: если мы умножим вероятности на 8, все результаты будут целыми числами, поэтому, если мы повторим каждый элемент такое количество раз, мы можем просто взять стандартное отклонение этих чисел, используя sd, за исключением того, что sd дает выборочное стандартное отклонение, поэтому нам необходимо исправить его, чтобы получить стандартное отклонение совокупности.

xx <- with(P, rep(x, 8 * Px))
n <- length(xx)
with(P, sqrt((n-1)/n) * sd(xx))
## [1] 216.1202

Примечание

Предполагается, что входной кадр данных в воспроизводимой форме:

Lines <- "x    Px
134  .5
565  .25
65   .125
563  .125"
P <- read.table(text = Lines, header = TRUE)
0 голосов
/ 27 февраля 2020

Вы можете использовать функцию sd из пакета статистики (https://www.rdocumentation.org/packages/stats/versions/3.6.2/topics/sd).

Примерно так:

result = sd(your_data_frame$Px)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...