首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有一个R函数来得到一个期望计数表?

是否有一个R函数来得到一个期望计数表?
EN

Stack Overflow用户
提问于 2015-12-11 01:31:38
回答 2查看 9K关注 0票数 4

我有以下两种不同药物的胃灼热症状和反应表:

代码语言:javascript
复制
           Medication
Symptoms    Drug A Drug B Totals
  Heartburn     64     92    156
  Normal       114     98    212
  Totals       178    190    368

我正在寻找一个R函数,它通过以下操作获得预期的计数:

代码语言:javascript
复制
                    Medication
Symptoms       Drug A                   Drug B               
Heartburn     156 * 178 / 368 = 75      156 * 190 / 368 = 81 
Normal        212 * 178 / 368 = 103     212 * 190 / 368 = 109

理想情况下,显示器甚至可以选择如下:

代码语言:javascript
复制
           Medication
Symptoms       Drug A   Drug B    Totals
  Heartburn     64(75)   92(81)    156
  Normal       114(103)  98(109)   212
  Totals       178      190        368

要求不多,对吧?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-11 01:44:33

来自?chisq.test的示例

代码语言:javascript
复制
 M <- as.table(rbind(c(762, 327, 468), c(484, 239, 477)))
 dimnames(M) <- list(gender = c("F", "M"),
                     party = c("Democrat","Independent", "Republican"))
 Xsq <- chisq.test(M)  # Prints test summary

我认为结果的$expected组件就是您想要的:

代码语言:javascript
复制
 Xsq$expected
 ##       party
 ## gender Democrat Independent Republican
 ##      F 703.6714    319.6453   533.6834
 ##      M 542.3286    246.3547   411.3166

首选显示的开始:

代码语言:javascript
复制
M2 <- M; 
M2[] <- paste(M,paste0("(",round(Xsq$expected),")"))
##      party
## gender Democrat  Independent Republican
##      F 762 (704) 327 (320)   468 (534) 
##      M 484 (542) 239 (246)   477 (411) 

另见?addmargins

票数 12
EN

Stack Overflow用户

发布于 2015-12-11 01:58:06

以下是一些替代方案:

1)外部使用outer生成期望值,然后将其与原始表和使用sprintf的父表放在一起。noquote可以用于不带引号地显示它:

代码语言:javascript
复制
mm <- m
mm[-3,-3] <- matrix(sprintf("%3.0f(%.0f)", m, outer(m[, 3], m[3, ]) / m[3,3]), 3)[-3,-3]

给予:

代码语言:javascript
复制
> noquote(mm)
           Medication
Symptoms    Drug A   Drug B   Total
  Heartburn  64(75)   92(81)  156  
  Normal    114(103)  98(109) 212  
  Totals    178      190      368

2) gmodel::交叉表这个函数专门用于生成具有预期计数和其他统计数据的交叉稳定表:

代码语言:javascript
复制
library(gmodels)
CrossTable(m[-3, -3], expected = TRUE, prop.r = FALSE, prop.c = FALSE, 
                        prop.t = FALSE, prop.chisq = FALSE)

给予:

代码语言:javascript
复制
   Cell Contents
|-------------------------|
|                       N |
|              Expected N |
|-------------------------|


Total Observations in Table:  368 


             | Medication 
    Symptoms |    Drug A |    Drug B | Row Total | 
-------------|-----------|-----------|-----------|
   Heartburn |        64 |        92 |       156 | 
             |    75.457 |    80.543 |           | 
-------------|-----------|-----------|-----------|
      Normal |       114 |        98 |       212 | 
             |   102.543 |   109.457 |           | 
-------------|-----------|-----------|-----------|
Column Total |       178 |       190 |       368 | 
-------------|-----------|-----------|-----------|


Statistics for All Table Factors


Pearson's Chi-squared test 
------------------------------------------------------------
Chi^2 =  5.85     d.f. =  1     p =  0.0156 

Pearson's Chi-squared test with Yates' continuity correction 
------------------------------------------------------------
Chi^2 =  5.35     d.f. =  1     p =  0.0207 

3)下降::交叉表--这类似于gmodel::,但是输出略有不同。

代码语言:javascript
复制
library(descr)
CrossTable(m[-3,-3], prop.r = FALSE, prop.c = FALSE, prop.t = FALSE,
    prop.chisq = FALSE, expected = TRUE)

给予:

代码语言:javascript
复制
   Cell Contents 
|-------------------------|
|                       N | 
|              Expected N | 
|-------------------------|

====================================
             Medication
Symptoms     Drug A   Drug B   Total
------------------------------------
Heartburn        64       92     156
               75.5     80.5        
------------------------------------
Normal          114       98     212
              102.5    109.5        
------------------------------------
Total           178      190     368
====================================

注释:--我们使用它作为输入,m

代码语言:javascript
复制
m <- matrix(c(64, 114, 178, 92, 98, 190, 156, 212, 368), 3, 
  dimnames = list(Symptoms = c("Heartburn", "Normal", "Totals"),
                  Medication = c("Drug A", "Drug B", "Total")))
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34214787

复制
相关文章

相似问题

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