python 中的总平方和 (TSS)

Total Sum of Squares (TSS) in python

我正在尝试使用 python 计算总平方和。 我知道TSS的公式是: [在此处输入图片描述][1]

我创建了一个代码来做到这一点:

from statistics import mean

x = ([3,1,3,1,3,13])

def tss(a):
    m = mean(a)
    for i in a:
        i += ((i-m)**2)
    return (i) 

print(tss(x))

问题是:它一直返回 94,但我知道正确答案是 102。我不知道我做错了什么。有谁能够帮助我? [1]: https://i.stack.imgur.com/Alx6r.png

i 每次通过循环时都会重置。因此,在最后一个循环中,您的函数会擦除之前的所有总和,将 i 设置为 13,然后将 13 与均值之差的平方与 i(现在为 13)相加,返回 94。您需要一个不同的变量来跟踪总和,因此它不会在每个循环中丢失。你想要:

from statistics import mean

x = ([3,1,3,1,3,13])

def tss(a):
    m = mean(a)
    n = 0
    for i in a:
        n += ((i-m)**2)
    return (n)

print(tss(x))
'''

@mateen's answer is more pythonic and will perform better than a loop, but I don't think you'll get the understanding from it. Welcome to python!

没有 numpy:

def tss(xs):
    m = sum(xs) / len(xs)
    return sum((x - m)**2 for x in xs)

使用 numpy:

import numpy as np

def tss(x):
    return ((x - np.mean(x))**2).sum()

如果您想保留初始脚本,只需执行以下操作:

from statistics import mean

x = ([3, 1, 3, 1, 3, 13])

def tss(a):
    total = 0
    for i in a:
        total = total + ((i-mean(a))**2)
    return total