Skip to main content
 首页 » 编程设计

python之Python 中的偏相关

2025年05月04日12langtianya

我运行了一个相关矩阵:

sns.pairplot(data.dropna()) 
corr = data.dropna().corr() 
corr.style.background_gradient(cmap='coolwarm').set_precision(2) 

看起来 advisory_pct 与 all_brokerage_pct 相当 (0.57) 负相关。据我所知,我可以声称我们相当确定“当顾问在其投资组合中的咨询占低百分比时,他在其投资组合中占所有经纪业务的高百分比”。

然而,这是“成对”相关性,我们没有控制其余可能变量的影响。

我搜索了 SO,但无法找到如何运行“部分相关”,其中相关矩阵可以提供每两个变量之间的相关性,同时控制其余变量。为此,假设 brokerage % + etf brokerage % + advisory % + all brokerage % = ~100占投资组合的百分比。

有这样的功能吗?

-- 编辑-- 根据 https://stats.stackexchange.com/questions/288273/partial-correlation-in-panda-dataframe-python 运行数据:

dict = {'x1': [1, 2, 3, 4, 5], 'x2': [2, 2, 3, 4, 2], 'x3': [10, 9, 5, 4, 9], 'y' : [5.077, 32.330, 65.140, 47.270, 80.570]}  
data = pd.DataFrame(dict, columns=['x1', 'x2', 'x3', 'y']) 
 
partial_corr_array = df.as_matrix() 
data_int = np.hstack((np.ones((partial_corr_array.shape[0],1)), partial_corr_array)) 
print(data_int) 
[[  1.      1.      2.     10.      5.077] 
 [  1.      2.      2.      9.     32.33 ] 
 [  1.      3.      3.      5.     65.14 ] 
 [  1.      4.      4.      4.     47.27 ] 
 [  1.      5.      2.      9.     80.57 ]] 
arr = np.round(partial_corr(partial_corr_array)[1:, 1:], decimals=2) 
print(arr) 
[[ 1.    0.99  0.99  1.  ] 
 [ 0.99  1.   -1.   -0.99] 
 [ 0.99 -1.    1.   -0.99] 
 [ 1.   -0.99 -0.99  1.  ]] 
corr_df = pd.DataFrame(arr, columns = data.columns, index = data.columns) 
print(corr_df) 
    x1    x2    x3    y 
x1  1.00  0.99  0.99  1.00 
x2  0.99  1.00 -1.00 -0.99 
x3  0.99 -1.00  1.00 -0.99 
y   1.00 -0.99 -0.99  1.00 

这些相关性没有多大意义。使用我的真实数据,我得到了非常相似的结果,其中所有相关性都四舍五入为 -1..

请您参考如下方法:

要计算 pandas DataFrame 两列之间的相关性,同时控制一个或多个协变量(即数据框中的其他列),您可以使用 partial_corr Pingouin 的功能包(免责声明,我是其创建者):

from pingouin import partial_corr 
partial_corr(data=df, x='X', y='Y', covar=['covar1', 'covar2'], method='pearson')