首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多元统计分析用R.当行和列都是组(类别排序)时,如何查看显着性差异

多元统计分析用R.当行和列都是组(类别排序)时,如何查看显着性差异
EN

Stack Overflow用户
提问于 2020-04-19 16:30:25
回答 1查看 27关注 0票数 1

我的数据如下所示,DFD是我的数据框架。

代码语言:javascript
运行
复制
DFD
  Names  BP  jobcode bp_Category
1     A 100   Doctor      low_BP
2     B 150   Doctor   Medium_BP
3     C 200 Engineer     High_BP
4     D 110 Engineer      low_BP
5     E 160  Student   Medium_BP

下面是我如何得到每一份工作代码的百分比,这些代码中有低、高和中BP,如下所示。

代码语言:javascript
运行
复制
tabLE<-table(DFD$bp_Category,DFD$jobcode)
> prop.table(tabLE,2)*100

            Doctor Engineer Student
  low_BP        50       50       0
  Medium_BP     50        0     100
  High_BP        0       50       0

我想问一问,如何以及通过哪个统计测试,我可以分别看到三个工作代码在所有三个bp_categories之间的显着差异。例如,我想知道工程师在博士和学生中的Medium_BP比例是否很高?

代码语言:javascript
运行
复制
Data 

Names<-c("A","B","C","D","E")
BP<-c(100,150,200,110,160)
jobcode<-c("Doctor","Doctor","Engineer","Engineer","Student")
jobcode<-ordered(jobcode)
DFD<-data.frame(Names,BP,jobcode)
DFD$bp_Category[DFD$BP<140]<-"low_BP"
DFD$bp_Category[DFD$BP<170 & DFD$BP>140]<-"Medium_BP"
DFD$bp_Category[DFD$BP<201 & DFD$BP>170]<-"High_BP"
DFD$bp_Category<-ordered(DFD$bp_Category, levels = c("low_BP","Medium_BP","High_BP"))
tabDFD <- with(DFD, table(DFD$bp_Category,DFD$jobcode))
tabLE<-table(DFD$bp_Category,DFD$jobcode)
prop.table(tabLE,2)*100
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-19 17:11:24

使用模拟数据集,其中BP和职业之间的比例大致相等:

代码语言:javascript
运行
复制
set.seed(111)
DFD = data.frame(jobcode = sample(c("Doctor","Engineer","Student"),10000,replace=TRUE),
bp_Category = sample(c("low_BP","Medium_BP","High_BP"),10000,replace=TRUE)
)

由于这是在null下模拟的,所以您可以看到,对于所有用户来说,它大约是33%:

代码语言:javascript
运行
复制
tabDFD <- with(DFD, table(DFD$bp_Category,DFD$jobcode))
tabLE<-table(DFD$bp_Category,DFD$jobcode)
prop.table(tabLE,2)*100

              Doctor Engineer  Student
  High_BP   32.81156 33.89058 32.96930
  low_BP    33.68453 32.73556 33.82527
  Medium_BP 33.50391 33.37386 33.20543

我们可以对每一行进行一次卡方检验,但我们需要知道医生、工程师、学生的预期比例,所以我们得到了以下结果:

代码语言:javascript
运行
复制
probs = colSums(tabLE)/sum(tabLE)

然后,对于每一行,我们测试每个单元格偏离预期的程度:

代码语言:javascript
运行
复制
library(broom)
library(purrr)

results = split(as.matrix(tabLE),rownames(tabLE)) %>% 
map_dfr(~tidy(chisq.test(.x,p=probs)),.id="BP") 

 results
# A tibble: 3 x 5
  BP        statistic p.value parameter method                                  
  <chr>         <dbl>   <dbl>     <dbl> <chr>                                   
1 High_BP      0.676    0.713         2 Chi-squared test for given probabilities
2 low_BP       0.697    0.706         2 Chi-squared test for given probabilities
3 Medium_BP    0.0451   0.978         2 Chi-squared test for given probabilities
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61307844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档