dplyr

时间:2018-03-05 16:11:02

标签: r dplyr linear-regression

目标

目前我只报告我在下面显示的计算方法,但我想添加置信区间。

如果我的数据格式正确,我就不会使用线性回归lm()来计算估计的分组差异及其间隔,但我很难以正确的格式获取数据。

以下是一些数据:

虚假数据

> set.seed(909)
> d2017pre <- tibble(n = rnorm(25, mean = 1100, sd = 10),period = "pre", year = 2017)
> d2016pre <- tibble(n = rnorm(25, mean = 1500, sd = 10),period = "pre", year = 2016)
> d2017post <- tibble(n = rnorm(25, mean = 1000, sd = 10),period = "post", year = 2017)
> d2016post <- tibble(n = rnorm(25, mean = 900, sd = 10),period = "post", year = 2016)
> df <- bind_rows(d2017pre,d2016pre,d2017post,d2016post)


> df %>% group_by(year,period) %>% summarise(mean(n))
# A tibble: 4 x 3
# Groups: year [?]
   year period `mean(n)`
  <dbl> <chr>      <dbl>
1  2016 post         899
2  2016 pre         1498
3  2017 post         999
4  2017 pre         1104

背景

这是我经常做的三个计算。

> # pre - post 2016
> pp16 <- 1498 - 899
> pp16
[1] 599
> 
> # pre - post 2017
> pp17 <-1100 - 999
> pp17
[1] 101
> 
> # net of control: pp2016 - pp2017 
> noc <- pp16 - pp17
> noc
[1] 498

回答的问题是:

  1. prepost

  2. 中的20162017期间有何区别?
  3. 2017的前/后差异大于2016之前/之后的差异。

  4. 我想回答这些问题不仅包括估算,还包括置信区间。如上所述,我正在计划使用lm()来获得差异的置信区间,但我很难以正确的格式获取数据。

    我认为这需要两个数据集。一个用于表示年份中的时间差异,一个用于差异的差异(净控制)。这导致了以下问题。

    问题

    1. 如何计算按nperiod分组的year的差异?

    2. 如何计算差异的差异?

1 个答案:

答案 0 :(得分:1)

首先,您可以使用其他group_by来获取差异。

diffs <- df %>% 
  group_by(year, period) %>% 
  summarise(mean = mean(n)) %>%
  group_by(year) %>%
  summarise(diff = diff(mean))

# A tibble: 2 x 2
   year  diff
  <dbl> <dbl>
1  2016   599
2  2017   105

差异的差异是相似的,然后(坏名称空间可能......)

diff(rev(diffs$diff))

[1] 493.8846

对于回归,您实际上不需要更改数据框 - 需要数据来计算效果。我认为(但不确定我是否理解正确)你正在寻找具有互动效果的模型?

如,

m1 <- lm(n ~ period + factor(year) + period*factor(year), data = df)
summary(m1)

注意交互效果基本上是那种差异