假设我有一个数据帧,我想计算两列之间的r平方。
ps。不是r2(df[0],df[1](,我想要的是使用df[0]对df[1]的r2进行ols拟合的r2。
例如:
In [21]: df = pd.DataFrame(np.random.rand(10, 2))
In [22]: df
Out[22]:
0 1
0 0.776080 0.966668
1 0.922351 0.024381
2 0.859104 0.397823
3 0.607491 0.425335
4 0.732265 0.667846
5 0.336950 0.544515
6 0.236403 0.610943
7 0.811736 0.306425
8 0.110440 0.059754
9 0.469844 0.957298
如何计算与列0对应的列1的r2?
如注释中所述,sklearn有一种计算r平方的方法。
from sklearn.metrics import r2_score
r2_score(df[0], df[1])
# -1.8462387938183031
但为了回答您的问题并在熊猫身上自己计算,我们可以使用矢量化方法:
res = df[0].sub(df[1]).pow(2).sum()
tot = df[0].sub(df[0].mean()).pow(2).sum()
r2 = 1 - res/tot
# -1.8462387938183031
r = df[0].corr(df[1])
r2 = r ** 2