You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

R语言svychisq语法及svytable的summary使用问题

解决svychisq调用和svytable summary显示小数的问题

一、用已生成的svytable调用svychisq(不用重复写公式)

你之前试的svychisq(AxB, surveydesign)svychisq(~AxB, surveydesign)都走不通,原因很简单:

  • AxBsvytable生成的表格对象,直接丢给svychisq的话,它没法正确关联到你的调查设计;
  • ~AxB相当于把AxB当成原始数据集里的变量,但它根本不是,自然会报错。

给你两个好用的办法:

方法1:提取svytable自带的公式

svytable生成的对象会自动保存你当初用的公式,直接提取出来再传给svychisq就行,完全不用重复敲~A+B

# 从AxB里取出生成它的公式
tab_formula <- attr(AxB, "formula")
# 用这个公式调用svychisq
svychisq(tab_formula, surveydesign)

方法2:直接用表格对象(指定design参数)

如果你偏想用AxB直接调用,记得要明确指定design参数,别只传位置参数:

svychisq(AxB, design = surveydesign)

不过更推荐第一种方法,不容易因为参数顺序搞错出问题。

二、让summary(AxB)显示小数比例

你说summary里的表格只显示0和1,是因为svytable返回的是缩放后的整数频数(你设了Ntotal=100,它就把原始频数按比例缩到总样本100,结果自然是整数),而不是你想要的小数比例。而且digits=4只能调整卡方值的小数位数,管不了表格的显示类型。

要显示小数比例,试试这两种方式:

方法1:先转成比例表再summary

AxB转换成比例表后再做summary,就能看到0.xx格式的数值了:

# 将svytable转换为比例表
AxB_prop <- prop.table(AxB)
# 查看带小数的表格和卡方结果,digits控制卡方值的小数位数
summary(AxB_prop, digits=4)

方法2:自定义summary的表格显示

如果不想重新生成比例表,也可以直接修改summary输出的表格部分:

# 先拿到summary的结果
tab_summary <- summary(AxB)
# 把表格转换成小数格式,digits控制小数位数
tab_summary$table <- format(prop.table(tab_summary$table), digits=4)
# 打印修改后的结果
print(tab_summary)

最后补充一句:帮助文档说“svytable的summary会调用svychisq”,意思是summary.svytable内部会自动调用svychisq计算卡方统计量,所以你用summary(AxB)得到的卡方值,和直接跑svychisq(~A+B, surveydesign)是完全一样的哦。

内容的提问来源于stack exchange,提问作者gabriel fernandez

火山引擎 最新活动