Загрузка данных


import math

data = [

(193.53,200.1356), (230.71,None), (189.21,210.6736), (223.44,199.9892),

(None,None), (233.17,None), (205.06,206.8264), (None,None), (222.28,207.3576),

(194.49,205.6496), (176.11,211.2632), (233.43,211.9296), (None,None),

(244.12,203.8148), (201.22,203.3636), (188.63,204.132), (206.51,211.8828),

(186.3,204.4148), (None,None), (177.55,197.5048), (None,None),

(209.48,202.396), (202.35,208.836), (220.14,204.3712), (None,None),

(None,None), (184.99,190.8044), (197.03,210.416), (179.9,200.1216),

(201.16,203.8832), (182.84,208.4068), (None,None), (174.02,None),

(207.88,209.766), (208.46,219.3068), (237.82,210.1188), (193.76,206.18),

(204.7,218.6196), (209.83,210.3636), (168.36,202.3632), (197.21,199.5284),

(207.02,213.0092), (None,None), (163.2,None), (223.33,199.1064),

(217.54,206.0124), (None,None), (175.66,205.192), (166.37,193.74),

(None,None), (216.78,216.3384), (253.69,200.3852), (199.38,199.4996),

(225.31,204.3708), (225.19,202.8524), (248.6,217.3568), (184.04,None),

(206.62,203.1792), (199.65,None), (200.26,200.4992), (198.16,212.7788),

(212.12,205.5328), (216.65,219.9436), (238.19,216.0456), (201.4,208.9624),

(182.18,199.6048), (215.64,212.7788), (209.33,None), (201.48,207.1564),

(185.24,217.0076), (218.74,211.3984), (None,None), (220.08,213.088),

(201.92,211.718), (218.98,222.8072), (192.71,204.5872), (175.42,205.5132),

(244.33,211.5228), (200.41,209.3616), (216.24,209.7724), (251.18,218.3544),

(255.48,210.4), (203.16,None), (253.31,206.3348), (234.21,None),

(None,None), (209.21,200.0652), (211.19,208.338), (178.38,207.9948),

(164.51,205.1004), (236.53,215.4252), (None,None), (199.72,211.8088),

(None,None), (175.47,202.7204), (206.2,223.91), (181.74,204.6664),

(214.81,None), (214.48,215.3172), (185.66,201.714), (204.9,213.824),

(196.74,214.9284), (None,None), (None,None), (None,None), (None,None),

(209.83,211.4492), (None,None), (162.24,196.4456), (238.92,221.6148),

(194.15,198.2808), (203.4,194.3656), (188.81,203.9164), (168.05,208.1344),

(200.84,201.1436), (184.23,210.68), (173.32,207.1576), (198.5,210.4324),

(196.27,205.24), (192.93,194.5216), (201.7,205.7572), (None,None),

(None,None), (199.97,211.4056), (220.12,211.0304), (None,None),

(179.97,203.5864), (185.25,209.2344), (185.44,220.5656), (None,None),

(205.1,204.2996), (197.21,202.0676), (192.81,209.6368), (216.92,None),

(201.48,209.0884), (None,None), (216.3,None), (223.98,206.1228),

(172.28,209.8436), (153.03,211.174), (161.52,215.3584), (None,None),

(199.85,206.198), (223.34,215.0324), (220.3,206.6656), (225.47,203.1692),

(185.95,192.988), (None,None), (170.63,209.638), (199.79,200.1304),

(None,None), (207.7,217.636), (191.21,200.1892), (200.13,None),

(187.65,208.2856), (177.72,201.5204), (195.91,207.4468), (None,None),

(234.22,209.9964), (211.02,213.3016), (245.24,226.4444), (236.84,None),

(220.66,212.978), (None,None), (245.33,198.7872), (212,212.0552),

(180,202.678), (197.18,210.2532), (205.21,203.416), (195.19,198.3456),

(None,None), (168.09,208.5792), (184.21,206.3452), (232.21,212.798),

(206.69,204.942), (225.23,204.4748), (239.97,208.782), (183.44,211.1504),

(190.32,None), (195.22,212.194), (212.74,208.5172), (188.99,206.1756),

(226.87,217.302)

]



a = 0.06

d = []
for x, y in data:
    if x != None and y != None:
        d.append((x, y))

n = len(d)

xs = []
ys = []

for x, y in d:
    xs.append(x)
    ys.append(y)

mx = sum(xs) / n
my = sum(ys) / n

sxy = 0
sx = 0
sy = 0

for i in range(n):
    sxy += (xs[i] - mx) * (ys[i] - my)
    sx += (xs[i] - mx) ** 2
    sy += (ys[i] - my) ** 2

r = sxy / math.sqrt(sx * sy)

tn = abs(r) * math.sqrt(n - 2) / math.sqrt(1 - r ** 2)


def f(x, k):
    c = math.gamma((k + 1) / 2) / (math.sqrt(k * math.pi) * math.gamma(k / 2))
    return c * (1 + x * x / k) ** (-(k + 1) / 2)


def integral(b, k):
    m = 10000
    h = b / m
    s = 0

    for i in range(m + 1):
        x = i * h

        if i == 0 or i == m:
            s += f(x, k)
        elif i % 2 == 0:
            s += 2 * f(x, k)
        else:
            s += 4 * f(x, k)

    return s * h / 3


def cdf(x, k):
    if x >= 0:
        return 0.5 + integral(x, k)
    else:
        return 0.5 - integral(-x, k)


def ppf(q, k):
    l = 0
    r = 10

    for i in range(100):
        m = (l + r) / 2

        if cdf(m, k) < q:
            l = m
        else:
            r = m

    return (l + r) / 2


k = n - 2

tk = ppf(1 - a / 2, k)

p = 2 * (1 - cdf(tn, k))

if p < a:
    ans = 1
else:
    ans = 0

print(n)
print("%.8f" % r)
print("%.8f" % tn)
print("%.8f" % tk)
print("%.8f" % p)
print(ans)