Вывод Linregress кажется неверным - PullRequest
1 голос
/ 11 ноября 2019

Я построил график рассеяния на моем фрейме данных, который выглядит следующим образом:

enter image description here

с кодом

from scipy import stats   
import pandas as pd
import seaborn as sns
df = pd.read_csv('/content/drive/My Drive/df.csv', sep=',') 
subset = df[:,1:10080]   
df['mean'] = subset.mean(axis=1)

df.plot(x='mean', y='Result', kind = 'scatter')
sns.lmplot('mean', 'Result', df, order=1)

Я хотелчтобы найти наклон регрессии на графике, используя код

scipy.stats.mstats.linregress(Result,average)        

, но из вывода кажется, что величина наклона слишком мала:

LinregressResult(slope=-0.0001320534706614152, intercept=27.887336813241845, rvalue=-0.16776138446214162, pvalue=3.0450456899520655e-07, stderr=2.55977061451773e-05)

, если я переключил Result и average позиции,

scipy.stats.mstats.linregress(average,Result)        

это все еще не выглядит правильно, поскольку intercept слишком велико

LinregressResult(slope=-213.12489536011773, intercept=7138.48783135982, rvalue=-0.16776138446214162, pvalue=3.0450456899520655e-07, stderr=41.31287437069993)

Почему это происходит? Нужно ли изменять эти выходные значения?

1 Ответ

0 голосов
/ 11 ноября 2019

Подпись для scipy.stats.mstats.linregress - linregress(x,y), поэтому ваш второй порядок, linregress(average, Result), соответствует тому, как рисуется ваш график. И на этом графике перехват 7138 не кажется необоснованным - вас смущает тот факт, что показанные вами ограничения по оси X не уменьшаются до 0, где фактически происходит перехват?

В любом случае ваши данные на самом деле не выглядят так, как будто они подчиняются линейному закону, поэтому наклон (или какой-либо параметр из совершенно неверно заданной модели) на самом деле вам мало что скажет. Все ли значения x и y строго положительны? И есть ли конкретная причина, по которой x никогда не может логически опуститься ниже 25? Точки данных, безусловно, накапливаются против этой вертикальной асимптоты. Если это так, я бы, вероятно, вычел 25 из x, а затем поместил бы линейную модель в зарегистрированные данные. Другими словами, сделайте свои plot и linregress с x=numpy.log(average-25) и y=numpy.log(Result). РЕДАКТИРОВАТЬ: поскольку вы говорите, что х - это температура, нет логической причины, по которой х не может опуститься ниже 25 (например, имеет смысл экстраполировать ниже 25, и даже ниже 0). Поэтому не вычитайте 25 и не записывайте х. Просто войдите

В ваших комментариях вы говорите о масштабировании склона, и в конечном итоге возникает подозрение, что вы думаете, что это даст вам коэффициент корреляции. Это разные вещи. Коэффициент корреляции зависит от разброса точек вокруг линии, а также от наклона. Если вам нужна корреляция, найдите соответствующие инструменты по этому ключевому слову.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...