我有两个变量(x和y)彼此之间有一些S形关系,我需要找到某种预测方程,这将使我能够在给定任何x值的情况下预测y的值.我的预测方程需要显示两个变量之间的某种S形关系.因此,我不能满足于产生线的线性回归方程.我需要看到两个变量图的右侧和左侧出现的斜率的逐渐曲线变化.
我在googling曲线回归和python之后开始使用numpy.polyfit,但是如果你运行下面的代码,这给了我可怕的结果. 任何人都可以告诉我如何重新编写下面的代码,以获得我想要的S形回归方程式吗?
如果你运行下面的代码,你可以看到它给出了一个向下的抛物线,这不是我的变量之间的关系应该是什么样子.相反,我的两个变量之间应该存在更多的S形关系,但是与我在下面的代码中使用的数据紧密相符.下面代码中的数据来自大样本研究的手段,因此它们包含的统计功效比五个数据点所暗示的要多.我没有大样本研究的实际数据,但我确实有下面的方法和他们的标准偏差(我没有显示).我更愿意用下面列出的平均数据绘制一个简单的函数,但如果复杂性会带来实质性的改进,代码可能会变得更加复杂.
如何更改我的代码以显示最适合的sigmoidal函数,最好使用scipy,numpy和python? 这是我的代码的当前版本,需要修复:
import numpy as np
import matplotlib.pyplot as plt
# Create numpy data arrays
x = np.array([821,576,473,377,326])
y = np.array([255,235,208,166,157])
# Use polyfit and poly1d to create the regression equation
z = np.polyfit(x, y, 3)
p = np.poly1d(z)
xp = np.linspace(100, 1600, 1500)
pxp=p(xp)
# Plot the results
plt.plot(x, y, '.', xp, pxp, '-')
plt.ylim(140,310)
plt.xlabel('x')
plt.ylabel('y')
plt.grid(True)
plt.show()
Run Code Online (Sandbox Code Playgroud)
您的反应及其速度令人印象深刻.谢谢你,unutbu.但是,为了产生更有效的结果,我需要重新构建我的数据值.这意味着将x值重新转换为max x值的百分比,同时将y值重新转换为原始数据中x值的百分比.我尝试使用您的代码执行此操作,并提出以下内容:
import numpy as np
import matplotlib.pyplot as plt
import scipy.optimize
# Create numpy …Run Code Online (Sandbox Code Playgroud)