линейная посадка на графике журнала не является линейной

1

Я пытаюсь проанализировать воспроизводимость одного эксперимента. Я заменил 0 значений на 0,1 и нанес на график данные обоих экспериментов с логарифмическими осями. Все идет нормально.

Затем я получил строки, где значения в обоих столбцах> 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()

Но это то, что я получаю, и это определенно не линейно: Изображение 174551

Я не знаю, что я делаю не так..

РЕДАКТИРОВАТЬ:

Ссылка на исходный набор данных

  • 0
    Итак, вы создали линию y = mx + b и построили ее, но mx + b не будет линией, поскольку оси являются логарифмическими. Попробуйте построить y = m log (x) + b или, может быть, log (y) = m log (x) + b (не уверен, вам придется разбираться с этим).
  • 0
    Я попытался заменить x на np.log10(x) (то же самое для y ), но получилось только более странные строки ..
Показать ещё 2 комментария
Теги:
statistics
linear-regression

2 ответа

0

Когда я визуально проверяю график рассеяния данных, я не вижу никакой полезности в ведении журналов. Прямая линия через необработанные данные выглядит так, как будто это лучшее, что вы можете здесь сделать, см. Прикрепленные изображения. Изображение 174551

Изображение 174551

  • 0
    Диаграмма рассеяния с линейной осью слишком сжатая. Мне удалось получить этот вывод также с линейной осью, но реальная проблема здесь с осью log-log. Спасибо за внимание, но это не тот ответ, который мне нужен.
0

Вы здесь путаете. Проблема заключается в том, что np.logspace(-1, 5, base=10) просто возвращает значения с логарифмически разнесенными значениями, но вам все равно нужно взять лог базы 10 ваших значений x, потому что ваша ось x на графике логарифмическая ( np.log10 (x)) и выполните следующее

x = np.log10(np.logspace(-1, 5, base=10))
y = (m*x + b)
plt.plot(x, y, c='orange', label="fit")

Это даст вам то, что вы ожидаете, прямолинейное предсказание линейной регрессии.

  • 0
    Это дает мне еще более странный вывод (см. [ I.stack.imgur.com/htRJ5.png] ).
  • 0
    Можете ли вы попробовать x = np.logspace(-1, 5, base=10) а затем plt.plot(x, np.log10(y), c='orange', label="fit")
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню