在我的情况下可以应用什么统计方法?

数据挖掘 数据挖掘 统计数据 主成分分析
2021-09-30 23:00:26

我想研究 26 个参数对一个变量的影响,从而确定对它影响最大的 3 个或 4 个。为此,我构建了一个 10 x 26 矩阵:26 个参数和 10 个观察值,以及一个包含 10 个数组的向量,其中包含我想用 10 个观察值研究的变量。由此,我如何确定哪些是对参数影响最大的 3 个或 4 个变量。我正在考虑使用 PCA,但我不确定这是正确的方法。任何人都可以在这里给我一些指导吗?

3个回答

有很多方法可以做到这一点。这是一个列表:

  1. 您可以构建回归模型并观察每个变量的系数的 p 值。
  2. 皮尔逊相关
  3. 斯皮尔曼相关
  4. 肯德尔相关
  5. 互信息
  6. RReliefF算法
  7. 决策树
  8. 主成分分析(您已经尝试过)

等等。

您可以使用这些关键字搜索其他方法:

特征选择、变量重要性、变量排名、参数选择

它们几乎相同,只是不同领域的术语不同。

但是,您必须注意的问题是“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 的套索。在相关参数的子集中,只会选择一个。如果您怀疑数据集中存在多重共线性,则此方法特别有效。