1291 0

[学习分享] R中自制合并卡方检验的function 分享 [推广有奖]

  • 0关注
  • 1粉丝

大专生

16%

还不是VIP/贵宾

-

威望
0
论坛币
9 个
通用积分
34.1893
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
144 点
帖子
12
精华
0
在线时间
71 小时
注册时间
2019-6-5
最后登录
2022-6-12

楼主
风中有朵雨做的云 发表于 2019-10-24 19:50:03 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
本人接触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

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-2-7 22:15