频数表和列联表,以及进一步处理分析 -- R

2024-01-11 17:44

本文主要是介绍频数表和列联表,以及进一步处理分析 -- R,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目的

数据框包含了一些分类变量,问?

1.如何统计分类变量的分布次数 -- 频数表
2.如何统计多分类变量的分布次数 -- 频联表
3.单个分类变量的分类结果是否满足理论分类结果  -- 拟合优度问题
4.多个分类变量的分类结果是否相关干扰  -- 分类变量(多因素)独立性检验

数据

library(vcd)data(Arthritis)
head(Arthritis)#  ID Treatment  Sex Age Improved
#1 57   Treated Male  27     Some
#2 46   Treated Male  29     None
#3 77   Treated Male  30     None
#4 17   Treated Male  32   Marked
#5 36   Treated Male  46   Marked
#6 23   Treated Male  58   Marked
# 频数表
table(Arthritis$Treatment)
# Placebo Treated 43      41 # 频联表
table(Arthritis$Treatment,Arthritis$Improved)
#          None Some Marked
#  Placebo   29    7      7
#  Treated   13    7     21

代码

  • 操作频数表
# 把频数表变成百分比占比
prop.table(table(Arthritis$Treatment))
# Placebo Treated 
#  0.5119  0.4881 
prop.table(table(Arthritis$Treatment)) *100
# Placebo Treated 
#  51.19   48.81# 把列联表变成百分比形式
prop.table(table(Arthritis$Treatment,Arthritis$Improved))
#              None     Some   Marked
# Placebo 0.345238 0.083333 0.08333
# Treated 0.154762 0.083333 0.250000# 按行求百分比
prop.table(table(Arthritis$Treatment,Arthritis$Improved),1)
# None    Some  Marked
# Placebo 0.67442 0.16279 0.16279
# Treated 0.31707 0.17073 0.51220
# 按列求百分比
prop.table(table(Arthritis$Treatment,Arthritis$Improved),2)
# None    Some  Marked
#  Placebo 0.69048 0.50000 0.25000
#  Treated 0.30952 0.50000 0.75000# 给列联表添加行列计数
addmargins(table(Arthritis$Treatment,Arthritis$Improved))
#       None Some Marked Sum
#  Placebo   29    7      7  43
# Treated   13    7     21  41
# Sum       42   14     28  84
addmargins(table(Arthritis$Treatment,Arthritis$Improved),1)
#          None Some Marked
#  Placebo   29    7      7
#  Treated   13    7     21
#  Sum       42   14     28
addmargins(table(Arthritis$Treatment,Arthritis$Improved),2)
#          None Some Marked Sum
#  Placebo   29    7      7  43
# Treated   13    7     21  41prop.table(addmargins(table(Arthritis$Treatment,Arthritis$Improved)))
#             None     Some   Marked      Sum
#  Placebo 0.086310 0.020833 0.020833 0.127976
#  Treated 0.038690 0.020833 0.062500 0.122024
#  Sum     0.125000 0.041667 0.083333 0.250000
# 单个分类变量的分类结果是否满足理论分类结果
table(Arthritis$Improved)
# None   Some Marked 
#   42     14     28 x <- Arthritis$Improved
# 模拟一个理论分布
y <- c(rep("None",30),rep("Some",30),rep("Marked",24))# 卡方检验
chisq.test(x,y)
# Pearson's Chi-squared test
# data:  x and y
# X-squared = 6.78, df = 4, p-value = 0.15
# 原假设 H0: 实际频次分布和理论频次分布不相似
# 因为 p >= 0.05,接受原假设,也就是数据中的频次分布和理论上的分布(y)不相似#模拟一个 和实际分布很相似的数据
y <- c(rep("None",39),rep("Some",16),rep("Marked",29))
chisq.test(x,y)# Pearson's Chi-squared test
# data:  x and y
# X-squared = 16.8, df = 4, p-value = 0.0021
# 此时p <= 0.05,需要拒绝原假设接受备择假设,也就是实际频次分布和理论频次分布相似
# 多个分类变量的分类结果是否相关干扰  -- 分类变量(多因素)独立性检验
table(Arthritis$Treatment,Arthritis$Improved)
# None Some Marked
#  Placebo   29    7      7
#  Treated   13    7     21
#问 treatment 方式对improved的频次分布有影响嘛?或者说两个分类变量独立吗?# 卡方检验,直接把频联表丢给chisq.test( )函数即可    <==== 参数检验
mytable <- table(Arthritis$Treatment,Arthritis$Improved)
chisq.test(mytable)# Pearson's Chi-squared test
# data:  mytable
# X-squared = 13.1, df = 2, p-value = 0.0015
# p <= 0.05 拒绝原假设:相互独立,也就是treatment 方式对improved的频次分布有影响# Fisher's精确检验(Fisher's exact test)         <=========非参数检验
fisher.test(mytable)# 	Fisher's Exact Test for Count Data
# data:  mytable
# p-value = 0.0014
# alternative hypothesis: two.sided
# p <= 0.05 拒绝原假设:相互独立,也就是treatment 方式对improved的频次分布有影响
# 上面看到两个分类变量是相互影响的
# 问:如何度量它们之间的相关性强度呢?
library(vcd)mytable <- table(Arthritis$Treatment,Arthritis$Improved)
assocstats(mytable)#                     X^2 df  P(> X^2)
# Likelihood Ratio 13.530  2 0.0011536
# Pearson          13.055  2 0.0014626# Phi-Coefficient   : NA 
# Contingency Coeff.: 0.367 
# Cramer's V        : 0.394 

vcdӉ中的assocstats()函数可以计算二维列联表的phi系数,列联系数,Cramer‘s V系数
总体来说,较大的数值意味着较强的相关性

这篇关于频数表和列联表,以及进一步处理分析 -- R的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/595191

相关文章

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Python主动抛出异常的各种用法和场景分析

《Python主动抛出异常的各种用法和场景分析》在Python中,我们不仅可以捕获和处理异常,还可以主动抛出异常,也就是以类的方式自定义错误的类型和提示信息,这在编程中非常有用,下面我将详细解释主动抛... 目录一、为什么要主动抛出异常?二、基本语法:raise关键字基本示例三、raise的多种用法1. 抛

github打不开的问题分析及解决

《github打不开的问题分析及解决》:本文主要介绍github打不开的问题分析及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、找到github.com域名解析的ip地址二、找到github.global.ssl.fastly.net网址解析的ip地址三

Golang 日志处理和正则处理的操作方法

《Golang日志处理和正则处理的操作方法》:本文主要介绍Golang日志处理和正则处理的操作方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录1、logx日志处理1.1、logx简介1.2、日志初始化与配置1.3、常用方法1.4、配合defer

springboot加载不到nacos配置中心的配置问题处理

《springboot加载不到nacos配置中心的配置问题处理》:本文主要介绍springboot加载不到nacos配置中心的配置问题处理,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录springboot加载不到nacos配置中心的配置两种可能Spring Boot 版本Nacos

Mysql的主从同步/复制的原理分析

《Mysql的主从同步/复制的原理分析》:本文主要介绍Mysql的主从同步/复制的原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录为什么要主从同步?mysql主从同步架构有哪些?Mysql主从复制的原理/整体流程级联复制架构为什么好?Mysql主从复制注意

java -jar命令运行 jar包时运行外部依赖jar包的场景分析

《java-jar命令运行jar包时运行外部依赖jar包的场景分析》:本文主要介绍java-jar命令运行jar包时运行外部依赖jar包的场景分析,本文给大家介绍的非常详细,对大家的学习或工作... 目录Java -jar命令运行 jar包时如何运行外部依赖jar包场景:解决:方法一、启动参数添加: -Xb

Apache 高级配置实战之从连接保持到日志分析的完整指南

《Apache高级配置实战之从连接保持到日志分析的完整指南》本文带你从连接保持优化开始,一路走到访问控制和日志管理,最后用AWStats来分析网站数据,对Apache配置日志分析相关知识感兴趣的朋友... 目录Apache 高级配置实战:从连接保持到日志分析的完整指南前言 一、Apache 连接保持 - 性

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1