t测试在基于年份的数据框架上传播的数据

时间:2018-06-04 14:58:06

标签: r

我有一个数据框,由下面的示例给出。

Counts <- data.frame(ID = c(1, 2, 3, 4), "2005" = c(0, 1, 3, 2), "2006" = c(1, 0, 2, 1), "2007" = c(3, 1, 6, 4), "2008" = c(2, 1, 11, 3), "2009" = c(6, 0 , 8, 4), ECP = c(2008, 2007, 2007, 2006))

ECP代表最早的协作点,并指定一年。其余数据是每年特定公司ID的专利数量。

我想做一个t.test来比较ECP(协作年)之前和之后ID的“每年平均专利数”。我知道我需要进行配对样本t检验,因为样本是同一组公司。我有一个手动方式来执行t.test,我根据ECP分割数据帧,但由于数据帧有点大,有950个ID和13年(变量),我想要一个更好的解决方案。

欢迎任何其他分析数据的想法。 亲切的问候

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的问题,您可以尝试

# data
ID <- c(1, 2, 3, 4)
a1 <- c(0, 1, 3, 2)
a2 <- c(1, 0, 2, 1)
a3 <- c(3, 1, 6, 4)
a4 <- c(2, 1, 11, 3)
a5 <- c(6, 0 , 8, 4) 
ECP <- c(2008, 2007, 2007, 2006)
Counts <- data.frame(ID, "2005"=a1, "2006"=a2, "2007"=a3, "2008"=a4, "2009"=a5, ECP) 

library(tidyverse)
Counts %>% 
  gather(k, v, -ID, -ECP) %>% 
  mutate(k=as.numeric(gsub("X", "", k))) %>% 
  mutate(BA=factor(ifelse(k < ECP, "before", "after"), levels = c("before", "after"))) %>% 
  ggplot(aes(BA, v)) + 
   geom_boxplot(outlier.size = 0) + 
   ggbeeswarm::geom_beeswarm() +
   ggsignif::geom_signif(comparisons = list(c("before", "after")), test = "t.test")

enter image description here

还是这个?

Counts %>% 
  gather(k, v, -ID, -ECP) %>% 
  mutate(k=as.numeric(gsub("X", "", k))) %>% 
  mutate(BA=factor(ifelse(k < ECP, "before", "after"), levels = c("before", "after"))) %>% 
  ggplot(aes(factor(k), v, fill = BA)) + 
  geom_boxplot(outlier.size = 0) + 
  geom_point(position = position_dodge(width = 0.8)) +
  stat_compare_means(aes(group=BA))

enter image description here

但正如您在第二张图片中看到的那样,没有足够的数据来计算t.test。