我试图使用python找到多元回归模型的学生化和PRESS残差。在这种情况下,我有以下数据:
X1 X2 Y
14 25 301
19 32 327
12 22 246
11 15 187
拟合模型为:Y = 80.93-5.84 X1 + 11.32 X2和MS残余:574.9 我编写了以下代码来查找残差。
import math
def lin_model(X1, X2):
Y_hat = 80.93 - 5.84 * X1 + 11.32 * X2
return Y_hat
MSresiduals = 574.9
X1 = [14, 19, 12, 11]
X2 = [25, 32, 22, 15]
Y=[301, 327, 246, 187]
i=0
hii = 0
print('Residual Standardized_Residual Studentized_Residual PRESS_Residual')
for z in Y:
err = z - lin_model(X1[i],X2[i])
sd_r = err / math.sqrt(MSresiduals)
st_r = err / math.sqrt(MSresiduals * (1 - hii))
press_r = err / (1-hii)
print(err,' ',sd_r,' ', st_r,' ',press_r)
i+=1
但我不知道 hii 的价值。 hii 是帽子矩阵的对角线元素。但我无法弄清楚如何实现帽子矩阵并获得hii的值。有人请帮助我从给定的数据中找到hii的值,这样我就可以使用代码中的上述公式计算学生化和按残差。这里st_r是学生化的,press_r是PRESS残余。我不想使用任何python库。提前谢谢。
答案 0 :(得分:1)
在Matrix Multiplication in python?
处有纯矩阵乘法的代码可以使用此处显示的zip函数计算Python转置 Matrix Transpose in Python
然后可以将帽子矩阵计算为(除了使用上述参考文献中的函数): H = X(X ^ TX)^ - 1X ^ T
我得到了这些杠杆值(Hii):0.387681,0.951288,0.661433,0.999597。并且PRESS = 1442464
注意模型R平方是好的,但模型预测R平方(预测R平方= [1 - (PRESS /总平方和)] * 100)也是0. X1和X2 pvalues没有统计学意义。数据集非常有限。