2013-02-27 3 views
2

У меня есть Dataframe и входной текстовый файл activity.Dataframe создается через pandas.I хочу узнать коэффициент регрессии для каждого термина, используя следующую формулу Y = C1aX1a + C1bX1b + ... + C2aX2a + C2bX2b + .... C0,расчет коэффициента регрессии в python

где Y - активность Cna - коэффициент регрессии для выбора остатка a в позиции n, X - кодирование переменной (xna = 1 или 0), соответствующее наличию или отсутствию выбор остатка a в положении n, а C0 - среднее значение активности. Мой dataframe взгляд любит

2u 2s 4r  4n  4m 7h 7v 
0  1  1  0  0  0 1 
0  1  0  1  0  0 1 
1  0  0  1  0  1 0 
1  0  0  0  1  1 0 
1  0  1  0  0  1 0 

Здесь 1 и 0 означает наличие и отсутствие остатков соответственно. Использование MLR (множественная линейная регрессия), как я могу узнать коэффициент регрессии каждого остатка, то есть 2u, 2s, 4r, 4n, 4m, 7h, 7v. C1a представляет коэффициент регрессии остатка a в 1-й позиции (здесь 1a равно 2u, 1b равно 2s, 2a равно 4r ...) X1a представляет собой фиктивное значение, то есть 0 или 1, соответствующее 1a. файл активности содержат следующие данные

6.5 
5.9 
5.7 
6.4 
5.2 

Так первое уравнение будет выглядеть

6.5 = C1A * 0 + C1b * 1 + C2a * 1 + C2b * 0 + C2c * 0 + C3a * 0 + C3b * 1 + C0 ...

Могу ли я получить коэффициент регрессии, используя numpy ?. Пожалуйста, помогите мне, все предложения будут оценены.

+1

Я не знаю, почему у вас есть нижний план. Не похоже, что ты этого заслужил. + 1 –

ответ

0

Пусть A вашим dataframe (вы можете получить его в чистом и простом массиве Numpy. Прочитайте его при помощи np.loadtxt если это CSV), а у- файл активности (опять же, NumPy массив), а также использовать np.linalg.lstsq

DF = """0  1  1  0  0  0 1 
0  1  0  1  0  0 1 
1  0  0  1  0  1 0 
1  0  0  0  1  1 0 
1  0  1  0  0  1 0""" 

res = """6.5, 5.9, 5.7, 6.4, 5.2""" 

A = np.fromstring (DF, sep=" ").reshape((5,7)) 
y = np.fromstring(res, sep=" ") 

(x, res, rango, svals) = np.linalg.lstsq(A, y) 

print x 
# 2.115625, 2.490625, 1.24375 , 1.19375 , 2.16875 , 2.115625, 2.490625 
print np.sum(A.dot(x)**2) # Sum of squared residuals: 
# 177.24750000000003 
print A.dot(x) # Print predicition 
# 6.225, 6.175, 5.425, 6.4 , 5.475 
Смежные вопросы