#wolfram-mathematica
#wolfram-mathematica
Вопрос:
Когда я пытаюсь выполнить
StandardDeviation[{1}]
Я получаю сообщение об ошибке
StandardDeviation::shlen: "The argument {1} should have at least two elements"
Но std одного элемента равен 0, не так ли?
Ответ №1:
Стандартное отклонение обычно определяется как квадратный корень из несмещенной оценки дисперсии:
Вы можете легко увидеть это для одного образца, N=1
и вы получите 0/0
, который не определен. Следовательно, ваше стандартное отклонение не определено для одного образца в Mathematica.
Теперь, в зависимости от ваших соглашений, вы можете захотеть определить стандартное отклонение для одного образца (либо возвращаемого значения Null
, либо некоторого значения или 0
). Вот пример, который показывает вам, как определить его для одного образца.
std[x_List] := Which[(Length[x] == 1), 0, True, StandardDeviation[x]]
std[{1}]
Out[1]= 0
Комментарии:
1. Стандартное отклонение совокупности размером 1 равно 0 (используйте $ sigma $ и деление на $ N $ в формуле), в то время как стандартное отклонение выборки размером 1 бесконечно (используйте $ s $ и деление на $ N-1 $ в формуле).
Ответ №2:
Стандартное отклонение константы равно нулю.
Расчетное стандартное отклонение одного образца не определено.
Комментарии:
1. Я согласен с вами, но предлагаю вам сделать свои рассуждения более четкими, показав формулы для s.d. совокупности и s.d. выборки. Ваш комментарий к moodywoody — отличное начало.
2. Это верно для stddev выборки (
1/(N-1)
), но для stddev совокупности существует1 / N
, поэтому stddev будет равен нулю. Это было упомянуто в комментарии в принятом ответе.
Ответ №3:
Если вам нужна некоторая формальность:
p[x_] := DiracDelta[x - mu];
expValue = Integrate[x p[x] , {x, -Infinity, Infinity}]
stdDev = Sqrt[Integrate[(x - expValue)^2 p[x] , {x, -Infinity, Infinity}]]
(*
-> ConditionalExpression[mu, mu [Element] Reals]
-> ConditionalExpression[0, mu [Element] Reals]
*)
Редактировать
Или лучше, используя Mathematica ProbabilityDistribution[]
:
dist = ProbabilityDistribution[DiracDelta[x - mu], {x, -Infinity, Infinity}];
{Mean[dist], StandardDeviation[dist]}
(*
-> { mu, ConditionalExpression[0, mu [Element] Reals]}
*)
Ответ №4:
Если размер вашей совокупности составляет один элемент, то да, стандартное отклонение вашей совокупности будет равно 0. Однако обычно стандартные отклонения используются для выборок, а не для всей совокупности, поэтому вместо деления на количество элементов в выборке вы делите на количество элементов минус один. Это связано с ошибкой, присущей выполнению вычислений на выборке, а не на совокупности.
Выполнение вычисления стандартного отклонения по совокупности размером 1 не имеет абсолютно никакого смысла, и я думаю, что именно отсюда возникает путаница. Если вы знаете, что ваша совокупность содержит только один элемент, то определение стандартного отклонения этого элемента бессмысленно, поэтому обычно вы увидите стандартное отклонение одного элемента, записанное как неопределенное.
Ответ №5:
Стандартное отклонение — которое является мерой отклонения фактического значения от среднего значения для данного набора — для списка из одного элемента не имеет никакого смысла (вы можете установить его равным 0, если хотите).
Комментарии:
1. Я этого не понимаю. Среднее значение для набора из одного элемента равно этому элементу, поэтому отклонение равно 0. Это вырожденный случай, но все же для этого случая есть значение.
2. Нет, вы получаете
sqrt( (1 - 1) * (1 - 1) / ( 1 - 1) )
=sqrt( 0 / 0 )
=undefined
. Если вы не знаете среднее значение, вам нужно разделить наn - 1
.3. Согласно документу, Mathematica вычисляет StdDev как sqrt (var), который определен в ( ссылке. wolfram.com/mathematica/ref/Variance.html ) .. обратите внимание на разделенную на (Длина [список]-1) часть … так что, я думаю, это выбор реализации
4. @moodywoody Это не выбор реализации. Деление на n-1 обычно выполняется для вычисления несмещенного стандартного отклонения выборки. Смотрите: en.wikipedia.org/wiki/Unbiased_estimation_of_standard_deviation