📜  R中的卡方检验

📅  最后修改于: 2022-05-13 01:55:07.500000             🧑  作者: Mango

R中的卡方检验

独立性卡方检验评估两个变量的类别之间是否存在关联。基本上有两种类型的随机变量,它们产生两种类型的数据:数值型和分类型。卡方统计用于调查分类变量的分布是否彼此不同。卡方检验在比较两个(或更多)独立组之间的分类响应的计数或计数时也很有用。

在 R 中,用于执行卡方检验的函数是chisq.test()

例子
我们将在MASS库中获取调查数据,该数据代表对学生进行的调查数据。

# load the MASS package
library(MASS)        
print(str(survey))

输出:

'data.frame':    237 obs. of  12 variables:
 $ Sex   : Factor w/ 2 levels "Female","Male": 1 2 2 2 2 1 2 1 2 2 ...
 $ Wr.Hnd: num  18.5 19.5 18 18.8 20 18 17.7 17 20 18.5 ...
 $ NW.Hnd: num  18 20.5 13.3 18.9 20 17.7 17.7 17.3 19.5 18.5 ...
 $ W.Hnd : Factor w/ 2 levels "Left","Right": 2 1 2 2 2 2 2 2 2 2 ...
 $ Fold  : Factor w/ 3 levels "L on R","Neither",..: 3 3 1 3 2 1 1 3 3 3 ...
 $ Pulse : int  92 104 87 NA 35 64 83 74 72 90 ...
 $ Clap  : Factor w/ 3 levels "Left","Neither",..: 1 1 2 2 3 3 3 3 3 3 ...
 $ Exer  : Factor w/ 3 levels "Freq","None",..: 3 2 2 2 3 3 1 1 3 3 ...
 $ Smoke : Factor w/ 4 levels "Heavy","Never",..: 2 4 3 2 2 2 2 2 2 2 ...
 $ Height: num  173 178 NA 160 165 ...
 $ M.I   : Factor w/ 2 levels "Imperial","Metric": 2 1 NA 2 2 1 1 2 2 2 ...
 $ Age   : num  18.2 17.6 16.9 20.3 23.7 ...
NULL

上述结果表明数据集有许多可以被视为分类变量的因子变量。对于我们的模型,我们将考虑变量“ Exer ”和“ Smoke ”。Smoke 列记录学生的吸烟习惯,而 Exer 列记录他们的锻炼水平。我们的目的是在 0.05 显着性水平上检验学生吸烟习惯是否独立于他们的运动水平的假设。

# Create a data frame from the main data set.
stu_data = data.frame(survey$Smoke,survey$Exer)
  
# Create a contingency table with the needed variables.           
stu_data = table(survey$Smoke,survey$Exer) 
                  
print(stu_data)

输出:

Freq None Some
  Heavy    7    1    3
  Never   87   18   84
  Occas   12    3    4
  Regul    9    1    7

最后,我们将chisq.test()函数应用于列联表 stu_data。

# applying chisq.test() function
print(chisq.test(stu_data))

输出:

Pearson's Chi-squared test

data:  stu_data
X-squared = 5.4885, df = 6, p-value = 0.4828

由于 p 值 0.4828 大于 0.05,我们得出结论,吸烟习惯与学生的运动水平无关,因此这两个变量之间的相关性很弱或没有相关性。

完整的 R 代码如下所示。

# R program to illustrate
# Chi-Square Test in R
  
library(MASS)
print(str(survey))
  
stu_data = data.frame(survey$Smoke,survey$Exer)           
stu_data = table(survey$Smoke,survey$Exer)                
print(stu_data)
  
print(chisq.test(stu_data))

因此,总而言之,可以说使用 R 执行卡方检验非常容易。可以使用 R 中的chisq.test()函数执行此任务。