全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
1292 0
2019-10-24
本人接触R时间不久,近期在做卡方检验的时候,发现R自带的计算方法太繁琐,比如想看最小理论频数,以及比例等都需要再输入命令,如果需要校正,还得再输入命令等,感觉挺不方便,以下为自制的function,可能写的不好,请大家批评指正:

chisq=function(x){

  print(cbind(table(x),round(prop.table(table(x),margin=1)*100,2)))

  #显示原始频数和百分比#

  chi <- chisq.test(table(x))

  print(paste("最小理论频数:",round(min(chi$expected),1),sep=""))

  print(paste("理论频数小于5占比:", round(sum(chi$expected<5)/(nrow(chi$expected)*ncol(chi$expected))*100,2),"%",sep=""))

  print(chisq.test(table(x),correct=F))

  if(nrow(chi$expected)*ncol(chi$expected)==4){print( chisq.test(table(x)))}

  if(min(chi$expected)<1){print(fisher.test(table(x)))}

  if(sum(chi$expected<5)|(nrow(chi$expected)*ncol(chi$expected))>0.25){print(fisher.test(table(x)))}

}


#提取数据框(a)中需要比较的2个变量x1,x2即可#

chisq(subset(a,select=c(x2,x1)))


结果如下:

2.jpg

以上呈现的结果,和SPSS的结果呈现更为接近:

(1)会呈现四格表(或者R*C)各个格子的具体数值,以及每一列中的百分比;

(2)最小理论频数,以及小于5的理论频数所占的百分比;

(3)卡方检验的结果,此结果即chisq.test(table(x))的结果;


优点:能直接用原始数据进行计算,且同时呈现各个格子的具体数值,每一列中的百分比,以及最小理论频数,和连续性校正和卡fisher test等;

最后:在这个论坛中学习了好多东西,以上算是一点回馈吧~


附件列表
12.jpg

原图尺寸 20.03 KB

12.jpg

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群