Онлайн статистика Python: дисперсия не рассчитывается правильно - PullRequest
0 голосов
/ 10 сентября 2018

SOF, Я новичок в Python, я нашел много информации в Интернете, однако он требует использования списка при расчете среднего значения, дисперсии и т. Д., Что я не могу сделать. У меня нет проблем с вычислением среднего значения для пользовательских входных данных, но отклонение отключено.

Из моего понимания дисперсии - это разница между «числом» и его «средним» «квадратом». Может проблема в этом? Я не уверен, если честно, это мое последнее средство, если вы могли бы помочь любым способом, который был бы очень признателен, я также открыт для любых советов относительно того, как я пишу свой код.

Спасибо!

Пока мой код:

n = input("Enter Number ")
n = int (n)
average = 0

sum = 0

for num in range(0,n+1,1):
        sum = sum + num;

mean = (sum *1.0/ n)

variance = 0

for num in range(n+1):
     sum = (num- mean)**2         

variance = (sum*1.0) 

print("Mean is: ",mean , "Variance is: ",variance)

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Во-первых, дисперсия - это не просто квадрат среднего числа, это сумма всех квадратов среднего числа, деленная на n (или n-1)

Диапазон для расчета дисперсии должен начинаться с 1: range(1,n+1)

var=0
for num in range(1,n+1):
     var = var +(num- mean)**2         

Теперь дисперсию можно рассчитать двумя способами : путем деления на n или n-1, что дает два разных ответа

variance1 = (var*1.0) /n
variance2 = (var*1.0) /(n-1)

Например: для n = 10, дисперсия 1 = 8,25 и дисперсия 2 = 9,166666666666666

n используется при расчете дисперсии совокупности и n-1 при расчете дисперсии выборки.

Дополнительные детали: Кроме того, при использовании range, если значение шага равно 1, его указывать не нужно. Используйте range(0,n+1) вместо range(0,n+1,1)

Старайтесь не использовать одну и ту же переменную sum как для среднего значения, так и для дисперсии, поскольку это приведет только к путанице с формулой.

0 голосов
/ 10 сентября 2018

range(n+1) дает вам список, начиная с 0 - n. но то, что вам нужно от 1 - n, так что используйте range(1, n+1)

sum = 0
for num in range(1,n+1):
 sum += (num- mean)**2 
variance = sum/n

примечание: для них есть встроенная библиотека statistics.

...