我运行了一个相关矩阵:
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')
