标准化单调递增函数并计算std

问题描述 投票:0回答:1

我有一个像这样的递增函数:

我计划将其分成间隔(红线之间)。 我想水平旋转线段并计算标准差。

我知道这可能看起来很愚蠢,但我本质上想在标准化每段增加的斜坡后计算变化。 我可以用什么方法来实现这个目标?

我最初的想法是计算坡度并用该坡度从线段的起点到终点画一条线。然后,计算每个数据点相对于 线。

python statistics analytics
1个回答
0
投票

刚刚快速编写了一些代码。我使用 https://apps.automeris.io/wpd/ 从你绘制的函数中获取了一些数字,给了我:

csvdata = """\
x,y
22937.2,1822.1
22942.9,1822.2
22950.0,1822.4
22959.6,1822.5
22967.8,1822.5
22976.8,1822.6
22987.1,1822.6
22995.5,1822.7
23004.7,1822.7
23014.1,1822.7
23025.1,1822.7
23034.2,1822.8
23043.1,1822.9
23049.8,1823.0
23057.9,1823.2
23064.0,1823.3
23070.0,1823.5
23078.7,1823.6
23086.6,1823.7
23096.3,1823.9
23104.0,1824.0
23112.9,1824.1
23122.6,1824.1
23131.5,1824.1
23141.3,1824.1
23153.3,1824.0
23164.6,1824.1
"""

然后我使用 Pandas 将数据输入 Python,执行我建议的回归并使用以下方法绘制输出:

from io import StringIO

import numpy as np
import scipy.stats
import pandas as pd
import matplotlib.pyplot as plt

# get data
df = pd.read_csv(StringIO(csvdata))

# basic univariate linear regression
res = scipy.stats.linregress(df.x, df.y)
print(res)

# estimate y at each x
yp = res.intercept + df.x * res.slope
# calculate standard error
sd = np.std(yp - df.y)

plt.plot(df.x, df.y, label="function")
plt.plot(df.x, yp, label="slope that minimises residual")
plt.title(f"SD of residual = {sd:.2f}")
plt.legend()

给我:

© www.soinside.com 2019 - 2024. All rights reserved.