Загрузка данных
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)