问题描述
当我使用 scipy 偶然发现 pearson r 相关性的解决方案时,我想添加 Rsquarred 值的注释
import pandas as pd
import numpy as np
import seaborn as sns
import scipy as sp
import matplotlib.pyplot as plt
from scipy.stats import linregress
g = sns.lmplot(x="X",y="Y",col="Param",data=df,sharex=False,sharey=False)
def annotate(data,**kws):
r,p = sp.stats.pearsonr(data['X'],data['Y'])
ax = plt.gca()
ax.text(.05,.8,'r={:.2f}'.format(r,p),transform=ax.transAxes)
g.map_dataframe(annotate)
plt.show()
我想使用 scipy linregress 将 pearson r 相关性更改为 Rsquare 值,但我真的不明白它是如何处理错误“解包的值太多(预期为 4)”
g = sns.lmplot(x="X",**kws):
slope,intercept,r,p= stats.linregress(data['X'],'r={:.2f}'.format(slope,transform=ax.transAxes)
g.map_dataframe(annotate)
plt.show()
有谁知道如何正确使用它?谢谢
解决方法
显然你不需要使用线性回归来找到R平方的注释值
只需将格式 r 更改为 r*r 并将小数点设置为 4 即可
import pandas as pd
import numpy as np
import seaborn as sns
import scipy as sp
import matplotlib.pyplot as plt
from scipy.stats import linregress
g = sns.lmplot(x="X",y="Y",col="Param",data=df,sharex=False,sharey=False)
def annotate(data,**kws):
r,p = sp.stats.pearsonr(data['X'],data['Y'])
ax = plt.gca()
ax.text(.05,.8,'r={:.4f}'.format(r*r,p),transform=ax.transAxes) #Change this line
g.map_dataframe(annotate)
plt.show()