R语言 Chi-Square测试
独立性的卡方检验评估了两个变量的类别之间是否存在关联。基本上有两种类型的随机变量,它们产生两种类型的数据:数字型和分类型。Chi-square统计学被用来研究分类变量的分布是否彼此不同。在比较两个(或更多)独立组之间的分类反应的统计数字或计数时,Chi-square检验也很有用。
在R中,用于进行卡方检验的函数是 chisq.test()。
语法:
chisq.test(data)
参数:
data :data是一个包含表中变量的计数值的表格。
例子
我们将采取 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(surveySmoke,surveyExer)
# Create a contingency table with the needed variables.
stu_data = table(surveySmoke,surveyExer)
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(surveySmoke,surveyExer)
stu_data = table(surveySmoke,surveyExer)
print(stu_data)
print(chisq.test(stu_data))
因此,综上所述,可以说使用R语言进行Chi-square检验是非常容易的。人们可以使用R语言中的 chisq.test() 函数来执行这一任务。