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

Я не был уверен, что это должно идти так или иначе .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 (которую я использовал для проверки своей работы). Зачем быть the

4 ответов


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


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

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

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

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

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

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


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


R-base var() принимает N-1 в знаменателе, чтобы получить более надежный (менее предвзятым) оценка дисперсии. К сожалению нет возможности сказать var(), чтобы забрать N вместо этого я написал свою собственную функцию дисперсии для этого случая.

var_N = function(x){var(x)*(length(x)-1)/length(x)}

и некоторый код, чтобы проиллюстрировать функцию выше, базовую функцию, ручной способ и @dca estimated.variance.by.hand() функция:

## Data
x = c(4,5,6,7,8,2,4,6,6)
mean_x = mean(x)


## Variance with N-1 in denominator
var(x)
sum((x - mean_x) ^2) / (length(x) - 1)
estimated.variance.by.hand(x)


## Variance with N in denominator
sum((x - mean_x) ^2) / length(x)
var(x) * (length(x) - 1) / length(x)
var_N = function(x){var(x)*(length(x)-1)/length(x)}
var_N(x)