R如何检验类别变量(nominal variable)与其他变量之间的相关性

1.使用Pearson积差相关系性进行检验的话可以判断两个变量之间的相关性是否显著以及相关性的强度

  • 显著性检验 (significant test)
    连续变量 vs 类别变量 (continuous variable VS nominal variable): ANOVA检验(R中可使用aov函数)
    类别变量 vs 类别变量 (nominal variable VS nominal variable): 卡方检验(R中可使用chisq.test函数)——其实ANOVA的检验效果与回归分析效果相同,具体参见这里
  • 相关性强度(association strength)
    连续变量 vs 类别变量 (continuous variable VS nominal variable):计算组内相关性(R中可使用psych包的ICC函数)
    类别变量 vs 类别变量 (nominal variable VS nominal variable): 计算Cramer's V值(R中可使用vcd包的assocstats函数)
    PS: Cramer's V值(φc)是对称计算的,所以无论你的变量是放在矩阵的行或列都不影响结果,而行和列的排列顺序也不影响。φc的值在0-1之间,φc^2是经典相关系数的均方。

φc 的计算:
在总数为n的样本中有标为A和B两类变量,分别有i=1,..,r; j=1,..,k个,每一个都有自己的频数。
R如何检验类别变量(nominal variable)与其他变量之间的相关性_第1张图片
φc的p值与使用Pearson卡方检验的p值相同; 在R里面lsr包的crames函数通过stats包的chisq.test函数来计算φc。

2. 置换检验(Permutation tests)(非参数检验)
传统的参数检验的前提是样本处于正太分布,数据量大且无离群点。当这些前提条件不再满足时,参数检验就不再有效,需要进行非参数检验。非参数检验不再关注数据的值,而只关注数据的秩,这样就抛弃了大量可用的信息。
置换检验采取重复随机抽样的方法,通过对样本再抽样构造经验分布,然后在此基础上生成P值进行推断两组之间是否存在显著差异。

此检验的原理如下:
我们有A,B两组数据,分别有m,n个样品。我们的零假设为A,B的概率分布相同。计算原始样本A的均值。从n+m中抽取n个标为A,计算A的均值,重复i次,可以得到A样本均值的分布。通过原始均值与后来的样本均值分布可以进行假设检验。
然后计算原始A和B之间的均值的差异(a0-b0),重复上述抽样后计算均值差j次,可以得到均值差概率分布。通过原始的差值与后来的概率差分布可以进行假设检验。单尾p-value可以通过计算均值差分布中大于(a0-b0)的值所占的比例算出;而双尾p-value则是统计均值差的绝对值大于ABS(a0-b0)的部分所占的比例。
R中可以使用coin包的oneway_test函数进行检验:library(coin)
oneway_test(y~A, data=mydata,distribution=approximate(B=9999))

3. Goodman & Kruskal’s tau检验(参考)
该检验通过计算如下值评估变量之间的联系:a(x,y) = [V(y) – E{V(y|x)}]/V(y),其中V(y)指y的整体变异度,E{V(y|x)}是在给定x情况下出现y的条件变异度V(y|x)的期望。在极端情况是,如果x和y完全没关系,那么a(x,y)=0;如果y可以通过x完美预测出来,那么a(x,y)=1。
由于R中似乎没有现成的计算该值的函数,如下提供了一个:

GKtau <- function(x,y){
  #
  #  First, compute the IxJ contingency table between x and y
  #
  Nij = table(x,y,useNA=”ifany”)
  #
  #  Next, convert this table into a joint probability estimate
  #
  PIij = Nij/sum(Nij)
  #
  #  Compute the marginal probability estimates
  #
  PIiPlus = apply(PIij,MARGIN=1,sum)
  PIPlusj = apply(PIij,MARGIN=2,sum)
  #
  #  Compute the marginal variation of y
  #
  Vy = 1 – sum(PIPlusj^2)
  #
  #  Compute the expected conditional variation of y given x
  #
  InnerSum = apply(PIij^2,MARGIN=1,sum)
  VyBarx = 1 – sum(InnerSum/PIiPlus)
  #
  #  Compute and return Goodman and Kruskal’s tau measure
  #
  tau = (Vy – VyBarx)/Vy
  tau
}

由于该方法使用的是变量的变异度(variability)所以计算是可以带有缺失值;另外,此检验方法的一个重要特点是不对称,即a(x,y)和a(y,x)一般情况下是不同的,这一点与计算Spearman相关系数不同。不对称的原因是该方法是通过量化x预测y的可靠程度,这与用y来预测x是不同的。利用这一点,我们可以判断哪个才是更好的预测指标。比如:如果a(x,y)=0.001而a(y,x)=0.997,那么我们可以认为利用y来预测x会得到比较准确的结果,因此将y作为预测x的指标。

你可能感兴趣的:(R如何检验类别变量(nominal variable)与其他变量之间的相关性)