【问题标题】:t test for data that is spread on a year based data framet 检验分布在基于年份的数据框架上的数据
【发布时间】:2018-06-05 19:05:21
【问题描述】:

我有下面示例给出的数据框。

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 年(变量),我想要一个更好的解决方案。

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

【问题讨论】:

  • 请检查您创建的数据。有一些问题
  • 是的,对不起。现在改正

标签: r


【解决方案1】:

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

# 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")

还是这个?

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))

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

【讨论】:

  • 第一组代码,特别是前几行,直到 plot 函数帮助我继续。只是关于工作的一个小问题; k 和 v 代表“键”和“值”吗?对于第二组,每年绘制对我的分析没有多大用处。感谢您的帮助。
  • @JGG 是的 k 和 v 代表“键”和“值”。你可以随意命名它。
猜你喜欢
  • 1970-01-01
  • 2012-09-19
  • 1970-01-01
  • 1970-01-01
  • 2023-02-13
  • 1970-01-01
  • 1970-01-01
  • 2015-06-13
  • 1970-01-01
相关资源
最近更新 更多