R语言——独立性检验函数、相关性分析函数和相关性检验函数、绘图函数(七)
目录
一、独立性检验函数
1.独立性检验函数
独立性检验是根据频数信息判断两类因子彼此相关或相互独立的假设检验。所谓独立性就是指变量之间是独立的,没有关系。
独立性检验算法:卡方检验、Fisher检验、Cochran-Mantel-Haenszel检验
2.假设检验
假设检验(Hypothesis Testing)是数理统计学中根据一定假设条件由样本推断总体的一种方法。
原假设——没有发生
备择假设——发生了
具体做法:根据问题的需要对所研究的总体作某种假设,记作H0;选取合适的统计量,这个统计量的选取要使得在假设H0成立时,其分布为已知;由实测的样本,计算出统计量的值,并根据预先给定的显著性水平进行检验,做出拒接或接受假设H0的判断。
3.p-value
p-value就是Probability的值,它是一个通过计算得到的概率值,也就是在原假设为真时,得到最大的或者超出所得到的检验统计量值的概率。
一般将p值定位到0.05,当p<0.05时拒绝原假设,p>0.05时,不拒绝原假设。
4.实例1——卡方检验
(1)
library(vcd)
mytable <- table(Arthritis$Treatment,Arthritis$Improved)
chisq.test(mytable)
解析:chisq.test函数中的参数p默认每个量的概率是1/length(mytable),即所有概率都相等,是独立的。在这种情况下,检验的假设是总体概率是否等于p中的概率。这里结果是p-value值小于0.05,即Treatment与Improved是相关的,不是独立的。
(2)
mytable <- table(Arthritis$Sex,Arthritis$Improved)
chisq.test(mytable)
解析:结果显示p-value值大于0.05,即Sex与Improved是独立不相关的,也就是药物没有性别差异。
5.实例2——Fisher检验
Fisher精确检验的原理是边际固定的列联表中行和列是相互独立的。
mytable <- xtabs(~Treatment+Improved,data=Arthritis)
fisher.test(mytable)
解析:这里的结果与卡方检验的结果类似。
6.实例3——Cochran-Mantel-Haenszel检验
原理是两个名义变量在第三个变量每一个水平中都是条件独立的。根据定义这个检验需要三个变量。
mytable <- xtabs(~Treatment+Improved+Sex,Arthritis)
mantelhaen.test(mytable)
解析:结果得到的p-value值非常小,说明药物治疗和改善情况在性别的每一个水平上不独立。需要注意的是,这里函数中的变量顺序很重要。
二、相关性分析函数和相关性检验函数
1.相关性分析
相关性分析是指对两个或多个具备相关性的变量元素进行分析,从而衡量两个变量因素的相关密切程度。相关性的元素之间需要存在一定的联系或者概率才可以进行相关性分析。简单来说就是变量之间是否有关系。
相关性可能是正相关,也可能是负相关,需要根据相关系数决定。相关系数的大小表示相关程度的强弱。
2.相关性衡量指标
Pearson相关系数、Spearman相关系数、Kendall相关系数、偏相关系数、多分格(polychoric)相关系数和多系列(polyserial)相关系数。
和独立性检验不同,相关性当中每种方法都没有独立的函数,这里计算相关系数都使用同一个函数cor。cor函数可以计算三种相关系数:pearson、kendall、spearman。具体使用哪种方法,可以通过函数中的method参数指定。函数中的use参数表示如何处理缺失值,是不处理还是删除等等。
3.实例(使用数据集state.x77)
cov函数:计算协方差,衡量两个变量的总体误差,在计算偏相关的时候需要用到协方差的结果。
cor(state.x77)
如果只想计算一组变量与另一组变量之间的关系,而不想将两两变量之间都计算一次,cor函数也可以很方便的实现。
x <- state.x77[,c(1,2,3,6)]
y <- state.x77[,c(4,5)]
cor(x,y)
4.描述相关性的其他指标
如偏相关系数、多分格相关系数和多系列相关系数等等,可以通过R的扩展包来实现。
ggm包中的pcor可以用来计算偏相关系数。偏相关是指在控制一个或多个变量时,剩余其他变量之间的相互关系。
pcor(u,s) #u是一个向量,向量中的前两个值是要计算的相关系数的下标,其余数值为条件变量的下标;s是cov函数计算出来的协方差结果。
library(ggm)
colnames(state.x77)
pcor(c(1,5,2,3,6),cov(state.x77))
5.相关性检验函数
cor.test(x,y,alternative,method)
- x,y表示向量;
- alternative指定单侧检验还是双侧检验,two.sided同时检验正负相关,greater检验正相关,less检验负相关;
- method指定使用哪种相关性衡量指标(pearson、kendall还是spearman)
计算state.x77中谋杀率与文盲率之间的相关性:
cor.test(state.x77[,3],state.x77[,5])
解析:p-value值远小于0.05,说明谋杀率与文盲率相关,此外还给出了相关系数为0.7029752,置信区间为0.5279280~0.8207295。
置信区间:confidence interval,是指样本统计量所构造的总体参数的估计区间。在统计学中,一个概率样本的置信区间是对这个样本的某个总体参数的区间估计。置信区间展现的是这个参数的真实值有一定概率落在测量结果的周围的程度。置信区间给出的是被测量参数的测量值的可信程度。
psych包中的corr.test函数:可以一次性检验多个变量之间的相关性。
library(psych)
corr.test(state.x77)
ggm包中的pcor.test函数:检验偏相关性。
pcor.test(x,q,n)
- x是pcor计算的偏相关系数;
- q是要控制的变量数;
- n是样本数。
x <- pcor(c(1,5,2,3,6),cov(state.x77))
pcor.test(x,3,50)
6.分组数据的相关性检验
使用t检验,即student’s t-test,t检验是用t分布理论推论差异发生的概率,从而比较两个平均数的差异是否显著。主要用于样本含量较小,一般小于30个,总体标准差未知的正态分布数据。
(使用MASS包中的UScrime数据集举例)
t.test(Prob~So,data=UScrime)
解析:结果p-value值小于0.05,因此可以拒绝南方各州与非南方各州拥有相同监禁概率的假设。
如果想在多于两个组之间进行比较,若数据满足正态分布,可以使用方差分析;若不满足正态分布,则需要使用非参数检验方法。
非参数检验称为nonparametric tests,在总体方差未知或知道甚少的情况下,利用样本数据对总体分布形态等进行推断的方法。由于非参数检验方法在推断过程中不涉及有关总体分布的参数,因而得名为“非参数”检验。
参数检验称为parametric tests,是在总体分布形式已知的情况下,对总体分布的参数如均值、方差等进行推断的方法。也就是数据分布已知,比如满足正态分布。
三、绘图函数
1.R语言四大作图系统
基础绘图系统(graphics包,默认已加载)
lattice包
ggplot2包
grid包
demo(graphics):可以对graphics包中的绘图函数绘制demo图,该包默认加载。
help(package=“graphics”):对graphics包中的函数进行详细介绍。
2.R基础绘图系统
1)高级绘图
高级绘图是一步到位,可以直接绘制出图;
2)低级绘图
低级绘图不能单独使用,必须在高级绘图产生图形的基础上,对图形进行调整,比如加一条线,加上标题文字等。
3.R绘图输入数据
对于绘图函数,最重要的就是要知道输入数据的格式。
散点图:x和y两个坐标数据;
直方图:因子;
热力图:数据矩阵;
……
4.两个重要绘图函数
(1)plot函数
R中plot函数使用最广泛,也最为复杂。如:
plot(women$height,women$weight) %输入是向量,输出是散点图
plot(as.factor(mtcars$cyl)) %输入是因子,输出是直方图
plot(as.factor(mtcars$cyl),mtcars$carb) %输入是第一个参数是因子,第二个参数是向量,输出是箱线图
plot(mtcars$carb,as.factor(mtcars$cyl)) %输入是第一个参数是向量,第二个参数是因子,输出是散点图
此外plot函数中的参数也可以是一个formula,如:
plot(women$height~women$weight) %输出的是二者的关系散点图
利用plot函数直接绘制线性回归的结果:
fit <- lm(height~weight,data=women) %lm函数是用于拟合线性模型
plot(fit) %结果生成四幅图
那我们可能会有问题,plot函数到底支持哪种格式的输入数据呢?plot函数是如何来识别不同类型的数据呢?这就涉及到R中的S3系统。
S3系统:属性、泛型函数、方法。
plot函数之所以支持多种输入数据格式,原因在于其支持多种属性的数据格式。使用methods(plot)运行后可以看出,plot其实是一个大家族,里面有很多子函数,每个子函数名后缀对应这种属性的数据。print和summary也是这样的道理。
(2)par函数
严格来说,par并不能用来绘图,par是parameter的简称,它是用来对绘图参数进行设置的。如:
plot(as.factor(mtcars$cyl),col=c(“red”,“green”,“blue”)) %给图形上色
直接在R编辑器中输入命令par()或者par(no.readonly=TRUE)都可以获取当前的各个绘图参数。