Для моего исследования у меня есть конкретный расчет для значений R2.Это не значение R2, напрямую рассчитанное с использованием функции Линрегресса.
Код, который я использую, предназначен для статистически обработанного значения R2 (помечено как «лучший R2).Я получаю значение R2 для всей оси X и Y.Однако в данных есть несколько «тестовых событий».Это означает, что мне нужно значение R2 для отдельного «тестового события»
Код, который я использую до сих пор для вычисления значений R2 (и какой мне нужен вывод), выглядит следующим образом:
import numpy, scipy,pandas as pd, matplotlib
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
import scipy.stats
import copy
df=pd.read_excel("I:/Python/Excel.xlsx")
df.head()
xyDataPairs = df[['x', 'y']].values.tolist()
minDataPoints = len(xyDataPairs) - 1
# utility function
def UniqueCombinations(items, n):
if n==0:
yield []
else:
for i in range(len(items)):
for cc in UniqueCombinations(items[i+1:],n-1):
yield [items[i]]+cc
bestR2 = 0.0
bestDataPairCombination = []
bestParameters = []
for pairs in UniqueCombinations(xyDataPairs, minDataPoints):
x = []
y = []
for pair in pairs:
x.append(pair[0])
y.append(pair[1])
fittedParameters = numpy.polyfit(x, y, 1) # straight line
modelPredictions = numpy.polyval(fittedParameters, x)
absError = modelPredictions - y
Rsquared = 1.0 - (numpy.var(absError) / numpy.var(y))
if Rsquared > bestR2:
bestR2 = Rsquared
bestDataPairCombination = copy.deepcopy(pairs)
bestParameters = copy.deepcopy(fittedParameters)
print('best R2', bestR2)
Вышеупомянутое лучшее значение R2 для целых столбцов x и y.Однако, скажем, мне нужно разделить весь набор данных на четыре события, каждое событие имеет свое собственное значение R2.Тогда как мне это получить?Мне нужно, чтобы вышеприведенный код дал мне значения 'bestR2' с 'groupby' относительно 'Test Event.Это значение R2, которое тщательно обрабатывается, чтобы соответствовать результатам, необходимым для моего исследовательского проекта.Таким образом, прямое использование Linregress не поможет, и по этой причине я рассчитал bestR2 по-другому.Короче говоря: мне нужно лучшее значение R2 для нескольких тестовых событий, рассчитанное по вышеуказанному методу.
Результат должен быть следующим:
Test_Event best R2
1 0.999
2 0.547
3 0.845
4 0.784
Спасибо за чтение !!