python 中对数对数图的外推
Extrapolation in loglog plot in python
我正在尝试在 python 中的对数对数图中进行推断。我做了线性回归以用最佳拟合曲线拟合数据。现在我想延长最佳拟合线以查看斜率如何随扩展范围变化。
我的数据真的很大,所以这是我的link数据:my_data
我的代码如下所示:
import numpy as np
import scipy as sp
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
import numpy as np
from scipy.interpolate import InterpolatedUnivariateSpline
from scipy.optimize import curve_fit
import scipy as sp
import scipy.stats
#########################################################
motl = 'motl.txt'
mx, my = np.loadtxt(motl, unpack=True)
print mx
print my
# now do general curve fit for all data
# Regression Function
def regress(x, y):
#Return a tuple of predicted y values and parameters for linear regression
p = sp.stats.linregress(x, y)
b1, b0, r, p_val, stderr = p
y_pred = sp.polyval([b1, b0], x)
return y_pred, p
# plotting z
allx, ally = mx, my # data, non-transformed
y_pred, _ = regress(np.log(allx), np.log(ally)) # change here # transformed input
plt.loglog(allx, ally, marker='p',color ='g', markersize=3,linestyle='None')
plt.loglog(allx, np.exp(y_pred), "k:") # transformed output
#################################################
# positions to inter/extrapolate
x = np.linspace(12, 14, 1000)
# spline order: 1linear, 2 quadratic, 3 cubic ...
order = 1
# do inter/extrapolation
s = InterpolatedUnivariateSpline(np.log10(mx), np.log10(my), k=order)
y = s(x)
plt.loglog(10**x, 10**y, 'g:')
#######################################################
plt.show()
通过回归,情节如下所示:
但是我如何推断将直线从 10^12 延长到 10^14?
感谢您的帮助。
这肯定不是 Minimal, Complete and Verifiable example,既不是最小的,也不能用抛出错误消息的代码验证。对于您的问题,您只需延长用于计算回归线的 x 轴。我假设这是
x = np.linspace(12, 14, 1000)
但是由于您的代码在第
行产生错误消息
s = InterpolatedUnivariateSpline(np.log10(mx), np.log10(my), k=order)
我无法测试。相反,我只是向您展示一个实现所需输出的最小示例:
import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as stats
motl = 'motl.txt'
mx, my = np.loadtxt(motl, unpack=True)
#log-log plot of original data
plt.loglog(mx, my, marker = 'o', color = 'g', markersize = 3, linestyle = 'None')
#x values for predicted line
x_pred = np.linspace(13, 16, 1000)
#linear regression on log-log data using base 10 like for log-log graph
b1, b0, _r, _p_val, _stderr = stats.linregress(np.log10(mx), np.log10(my))
#corresponding y values using regression data
y_pred = b1 * x_pred + b0
#log-log plot of linear regression curve
plt.loglog(10 ** x_pred, 10 ** y_pred, color = 'b', linestyle = "-")
plt.show()
我正在尝试在 python 中的对数对数图中进行推断。我做了线性回归以用最佳拟合曲线拟合数据。现在我想延长最佳拟合线以查看斜率如何随扩展范围变化。
我的数据真的很大,所以这是我的link数据:my_data
我的代码如下所示:
import numpy as np
import scipy as sp
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
import numpy as np
from scipy.interpolate import InterpolatedUnivariateSpline
from scipy.optimize import curve_fit
import scipy as sp
import scipy.stats
#########################################################
motl = 'motl.txt'
mx, my = np.loadtxt(motl, unpack=True)
print mx
print my
# now do general curve fit for all data
# Regression Function
def regress(x, y):
#Return a tuple of predicted y values and parameters for linear regression
p = sp.stats.linregress(x, y)
b1, b0, r, p_val, stderr = p
y_pred = sp.polyval([b1, b0], x)
return y_pred, p
# plotting z
allx, ally = mx, my # data, non-transformed
y_pred, _ = regress(np.log(allx), np.log(ally)) # change here # transformed input
plt.loglog(allx, ally, marker='p',color ='g', markersize=3,linestyle='None')
plt.loglog(allx, np.exp(y_pred), "k:") # transformed output
#################################################
# positions to inter/extrapolate
x = np.linspace(12, 14, 1000)
# spline order: 1linear, 2 quadratic, 3 cubic ...
order = 1
# do inter/extrapolation
s = InterpolatedUnivariateSpline(np.log10(mx), np.log10(my), k=order)
y = s(x)
plt.loglog(10**x, 10**y, 'g:')
#######################################################
plt.show()
通过回归,情节如下所示:
但是我如何推断将直线从 10^12 延长到 10^14? 感谢您的帮助。
这肯定不是 Minimal, Complete and Verifiable example,既不是最小的,也不能用抛出错误消息的代码验证。对于您的问题,您只需延长用于计算回归线的 x 轴。我假设这是
x = np.linspace(12, 14, 1000)
但是由于您的代码在第
行产生错误消息s = InterpolatedUnivariateSpline(np.log10(mx), np.log10(my), k=order)
我无法测试。相反,我只是向您展示一个实现所需输出的最小示例:
import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as stats
motl = 'motl.txt'
mx, my = np.loadtxt(motl, unpack=True)
#log-log plot of original data
plt.loglog(mx, my, marker = 'o', color = 'g', markersize = 3, linestyle = 'None')
#x values for predicted line
x_pred = np.linspace(13, 16, 1000)
#linear regression on log-log data using base 10 like for log-log graph
b1, b0, _r, _p_val, _stderr = stats.linregress(np.log10(mx), np.log10(my))
#corresponding y values using regression data
y_pred = b1 * x_pred + b0
#log-log plot of linear regression curve
plt.loglog(10 ** x_pred, 10 ** y_pred, color = 'b', linestyle = "-")
plt.show()