Подтвердить что ты не робот

Почему функция var() дает мне другой ответ, чем моя расчетная дисперсия?

Я не был уверен, что это должно произойти в SO или какой-либо другой .SE, поэтому я удалю, если это считается не по теме.

У меня есть вектор, и я пытаюсь вычислить дисперсию "вручную" (что означает основанное на определении дисперсии, но все еще выполняющее вычисления в R) с использованием уравнения: V[X] = E[X^2] - E[X]^2 где E[X] = sum (x * f(x)) и E[X^2] = sum (x^2 * f(x))

Однако моя рассчитанная дисперсия отличается от функции var(), которую имеет R (которую я использовал для проверки моей работы). Почему функция var() отличается? Как он вычисляет отклонение? Я проверил свои расчеты несколько раз, поэтому я достаточно уверен в ценности, которую я вычислил. Мой код приведен ниже.

vec <- c(3, 5, 4, 3, 6, 7, 3, 6, 4, 6, 3, 4, 1, 3, 4, 4)
range(vec)
counts <- hist(vec + .01, breaks = 7)$counts
fx <- counts / (sum(counts)) #the pmf f(x)
x <- c(min(vec): max(vec)) #the values of x
exp <- sum(x * fx) ; exp #expected value of x
exp.square <- sum(x^2 * fx) #expected value of x^2
var <- exp.square - (exp)^2 ; var #calculated variance
var(vec)

Это дает мне расчетную дисперсию 2.234, но функция var() говорит, что дисперсия равна 2.383.

4b9b3361

Ответ 1

В то время как V [X] = E [X ^ 2] - E [X] ^ 2 - дисперсия совокупности (когда значения в векторе представляют собой всю совокупность, а не только образец), функция var вычисляет оценщик для дисперсии совокупности (дисперсия выборки).

Ответ 2

Хотя на это уже был дан ответ, я боюсь, что некоторые из них все еще могут быть спутаны между дисперсией населения и ее оценкой из выборки, и это может быть связано с примером.

Если вектор vec представляет полную совокупность, то vec - это просто способ представления функции распределения, которая может быть суммирована более кратко в pmf, которую вы получили из нее. Реально, элементы vec в этом случае не являются случайными величинами. В этом случае ваши вычисления E [X] и var [X] из pmf верны.

В большинстве случаев, когда у вас есть данные (например, в виде вектора), это случайная выборка из основной совокупности. Каждый элемент вектора представляет собой наблюдаемое значение случайной величины: это "ничья" из популяции. Для этого примера справедливо предположить, что каждый элемент создается независимо от одного и того же дистрибутива ( "iid" ). На практике эта случайная выборка означает, что вы не можете вычислить истинный pmf, поскольку у вас могут быть некоторые вариации из-за случайности. Аналогично, вы не можете получить истинное значение E [X], E [X ^ 2] и, следовательно, Var [X], из образца. Эти значения должны быть оценены. Среднее значение выборки обычно является хорошей оценкой для E [X] (в частности, оно непредвзято), но оказывается, что выборочная дисперсия является предвзятой оценкой дисперсии совокупности. Чтобы исправить это смещение, вам нужно умножить его на коэффициент n/(n-1).

Поскольку этот последний случай наиболее известен на практике (помимо упражнений с учебниками), это то, что вычисляется, когда вы вызываете функцию var() в R. Поэтому, если вас попросят найти "оценочную дисперсию", это скорее всего означает, что ваш вектор vec является случайным образцом и что вы попадаете в этот последний случай. Если это был исходный вопрос, тогда у вас есть свой ответ, и я надеюсь, что станет ясно, что выбор имени переменных и комментарий в вашем коде могут привести к путанице: действительно, вы не можете вычислить pmf, ожидаемое значение или дисперсия популяции из случайной выборки: то, что вы можете получить, это их оценки, а одна из них - дисперсия - является предвзятой.

Я хотел прояснить это, так как эта путаница, как видно из кодирования, очень распространена, когда она впервые знакомится с этими понятиями. В частности, принятый ответ может вводить в заблуждение: V [X] = E [X ^ 2] - E [X] ^ 2 не является дисперсией выборки; это действительно дисперсия населения, которую вы не можете получить из случайной выборки. Если вы замените значения в этом уравнении оценкой их выборок (как средние), вы получите sample.V [X] = средний [X ^ 2] - средний [X] ^ 2, который является выборочной дисперсией, и смещен.

Некоторые могут сказать, что я придирчив к семантике; однако "злоупотребление нотацией" в принятом ответе приемлемо только тогда, когда все его признают таковым. Однако для тех, кто пытается понять эти концептуальные различия, я считаю, что лучше оставаться точным.

Ответ 3

Здесь один из способов вычисления "оценочной дисперсии населения", который соответствует выходу функции var в пакете статистики:

vec <- c(3, 5, 4, 3, 6, 7, 3, 6, 4, 6, 3, 4, 1, 3, 4, 4)
n <- length(vec)
average <- mean(vec)
differences <- vec - average
squared.differences <- differences^2
sum.of.squared.differences <-  sum(squared.differences)
estimator <- 1/(n - 1)
estimated.variance <- estimator * sum.of.squared.differences
estimated.variance
[1] 2.383333
var(vec) == estimated.variance # The "hand calculated" variance equals the variance in the stats package.
[1] TRUE

Интересно, что люди думают о маркировке термина "оценщик".

В функции (которая вряд ли справится с ошибками и аномалиями, а также с функцией var в пакете статистики):

estimated.variance.by.hand <- function (x){
  n <- length(x)
  average <- mean(x)
  differences <- x - average
  squared.differences <- differences^2
  sum.of.squared.differences <-  sum(squared.differences)
  estimator <- 1/(n - 1)
  est.variance <- estimator * sum.of.squared.differences
  est.variance
}
estimated.variance.by.hand(vec)
estimated.variance.by.hand(1:10)
var(1:10)
estimated.variance.by.hand(1:100)
var(1:100)