【发布时间】:2019-05-09 12:45:08
【问题描述】:
我正在尝试分析一项实验的重现性。我用 0.1 替换了 0 值,并用对数轴绘制了两个实验的数据。到目前为止,一切顺利。
接下来,我得到两列中的值都 > 0 的行,我计算了这些值的 log10 的线性回归。我得到了线性拟合的斜率和截距,然后我尝试绘制它。
import pandas as pd
import numpy as np
table = pd.read_csv("data.csv")
data = table.replace(0, 0.1)
plt.plot(data["run1"], data["run2"], color="#03012d", marker=".", ls="None", markersize=3, label="")
plt.xscale('log')
plt.yscale('log')
plt.axis('square')
plt.xlabel("1st experiment")
plt.ylabel("2nd experiment")
from scipy.stats import linregress
df = table.loc[(table['run1'] >0) & (table['run2'] >0)]
stats = linregress(np.log10(df["run1"]),np.log10(df["run2"]))
m = stats.slope
b = stats.intercept
r = stats.rvalue
x = np.logspace(-1, 5, base=10)
y = (m*x+b)
plt.plot(x, y, c='orange', label="fit")
plt.legend()
我不知道我做错了什么..
编辑:
链接到初始dataset
【问题讨论】:
-
好吧,你已经创建了一条线 y = m x + b 并绘制了它,但 m x + b 不会是一条线,因为轴是对数的。尝试绘制 y = m log(x) + b 或者 log(y) = m log(x) + b (不确定,你必须把它整理出来)。
-
我尝试将
x替换为np.log10(x)(y也是如此)但它只会产生更奇怪的线条.. -
能否请您发布原始数据的链接?
-
@JamesPhillips 是的,当然,我编辑了问题并添加了下载链接!
标签: python statistics linear-regression