我想研究 26 个参数对一个变量的影响,从而确定对它影响最大的 3 个或 4 个。为此,我构建了一个 10 x 26 矩阵:26 个参数和 10 个观察值,以及一个包含 10 个数组的向量,其中包含我想用 10 个观察值研究的变量。由此,我如何确定哪些是对参数影响最大的 3 个或 4 个变量。我正在考虑使用 PCA,但我不确定这是正确的方法。任何人都可以在这里给我一些指导吗?
在我的情况下可以应用什么统计方法?
数据挖掘
数据挖掘
统计数据
主成分分析
2021-09-30 23:00:26
3个回答
有很多方法可以做到这一点。这是一个列表:
- 您可以构建回归模型并观察每个变量的系数的 p 值。
- 皮尔逊相关
- 斯皮尔曼相关
- 肯德尔相关
- 互信息
- RReliefF算法
- 决策树
- 主成分分析(您已经尝试过)
等等。
您可以使用这些关键字搜索其他方法:
特征选择、变量重要性、变量排名、参数选择
它们几乎相同,只是不同领域的术语不同。
但是,您必须注意的问题是“10”观察几乎没有。无论您使用哪种方法,都很难相信任何结果。
更新:有了这个样本量,您几乎找不到任何有用的见解。
找到一对一关系的方法之一是找到两个随机变量的相关系数。相关性是两个随机变量或属性(在您的情况下)之间的统计关系。该系数是介于 1 和 -1 之间的值。如果该值接近 1,则意味着两个随机变量之间存在强正相关。在其他世界中,随着一个属性值的增加,另一个属性的值也会增加。另一方面,如果值接近-1,则意味着它们之间存在很强的负相关性,这意味着随着一个属性的值增加,另一个属性的值会减小。如果相关值接近于零,则意味着两个随机变量之间没有显着的相关性。
如果可以使用 Python,则可以将 CSV 文件加载到 pandas 对象中,然后运行 pandas 对象的 corr() 方法来获取两个或多个随机变量的相关系数。请参阅下面的代码(我找不到要提及的此代码的来源)
from string import letters
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style="white")
# Generate a large random dataset
rs = np.random.RandomState(33)
d = pd.DataFrame(data=rs.normal(size=(100, 26)),
columns=list(letters[:26]))
# Compute the correlation matrix
corr = d.corr()
# Generate a mask for the upper triangle
mask = np.zeros_like(corr, dtype=np.bool)
mask[np.triu_indices_from(mask)] = True
# Set up the matplotlib figure
f, ax = plt.subplots(figsize=(11, 9))
# Generate a custom diverging colormap
cmap = sns.diverging_palette(220, 10, as_cmap=True)
# Draw the heatmap with the mask and correct aspect ratio
sns.heatmap(corr, mask=mask, cmap=cmap, vmax=.3,
square=True, xticklabels=5, yticklabels=5,
linewidths=.5, cbar_kws={"shrink": .5}, ax=ax)
plt.show()
在此图中,您可以看到所有变量之间的强相关性或周相关性,然后选择您认为最显着的变量。
您可以尝试使用对权重进行 L1 正则化并将不相关参数设置为 0 的套索。在相关参数的子集中,只会选择一个。如果您怀疑数据集中存在多重共线性,则此方法特别有效。
其它你可能感兴趣的问题