将数据汇总到季度级保留指标变量,并在R中拟合线性模型
我的数据的结构是,对于每个将数据汇总到季度级保留指标变量,并在R中拟合线性模型,r,dplyr,aggregate,linear-regression,R,Dplyr,Aggregate,Linear Regression,我的数据的结构是,对于每个季度,每个实体都有一个二进制结果y。实体由唯一的id值标识。每个id还有两个虚拟变量,d1和d2,它们表示实体的某些特征。示例数据如下所示: dat <- data.frame(rep(c(1, 2, 3), 4), c(1,1,0,0,1,0,0,0,1,1,1,1), c(rep('Q1', 3), rep('Q2', 3), rep('Q3', 3), rep('Q4', 3)), rep(c(1,0,1), 4), rep(c(1,1,0),4)) col
季度
,每个实体都有一个二进制结果y
。实体由唯一的id
值标识。每个id
还有两个虚拟变量,d1
和d2
,它们表示实体的某些特征。示例数据如下所示:
dat <- data.frame(rep(c(1, 2, 3), 4), c(1,1,0,0,1,0,0,0,1,1,1,1), c(rep('Q1', 3), rep('Q2', 3), rep('Q3', 3), rep('Q4', 3)), rep(c(1,0,1), 4), rep(c(1,1,0),4))
colnames(dat) <- c('id', 'y', 'quarter', 'd1', 'd2')
然而,为了保留我的虚拟变量,我最终进行了多个季度观察。当(2)我试图通过虚拟变量检查比例差异时,这就引入了一些问题
使用上述聚合数据,datq
,我可以适应模型:
lm_d1 <- lm(prop_y ~ d1, data = datq)
lm_d1如果要保留非聚合变量,则无需使用summary
。按所需的分组变量分组后,所做的所有计算都将在这些组中执行。因此,简单地使用mutate
就足够了
datq <- dat %>%
group_by(quarter) %>%
mutate(prop_y = sum(y) / n()) # n() gets the number of observations within each group
datq
# A tibble: 12 x 6
# Groups: quarter [4]
id y quarter d1 d2 prop_y
<dbl> <dbl> <fct> <dbl> <dbl> <dbl>
1 1.00 1.00 Q1 1.00 1.00 0.667
2 2.00 1.00 Q1 0 1.00 0.667
3 3.00 0 Q1 1.00 0 0.667
4 1.00 0 Q2 1.00 1.00 0.333
5 2.00 1.00 Q2 0 1.00 0.333
6 3.00 0 Q2 1.00 0 0.333
7 1.00 0 Q3 1.00 1.00 0.333
8 2.00 0 Q3 0 1.00 0.333
9 3.00 1.00 Q3 1.00 0 0.333
10 1.00 1.00 Q4 1.00 1.00 1.00
11 2.00 1.00 Q4 0 1.00 1.00
12 3.00 1.00 Q4 1.00 0 1.00
datq%
集团单位(季度)%>%
mutate(prop_y=sum(y)/n())#n()获取每个组中的观察数
datq
#一个tibble:12x6
#组别:季[4]
id y季度d1 d2项目y
1 1.00 1.00第一季度1.00 1.00 0.667
2.00 1.00第一季度0 1.00 0.667
3.00第1季度1.00 0.667
4 1.00 0 Q2 1.00 1.00 0.333
5 2.00 1.00 Q2 0 1.00 0.333
63.00第二季度1.00 0.333
7 1.00 0第三季度1.00 1.00 0.333
8 2.00 0第三季度0 1.00 0.333
9 3.00 1.00第三季度1.00 0.333
10 1.00 1.00第四季度1.00 1.00 1.00
11 2.00 1.00第4季度0 1.00 1.00
12 3.00 1.00第四季度1.00 0 1.00
现在,就你正在做的建模而言,你的SEs是不同的,因为观察的数量不同。N用于计算SEs,因此如果它们不同,SEs也会不同。但这不一定会影响点估计
> datq <- dat %>%
+ group_by(quarter, d1, d2) %>%
+ summarise(n_y = n_distinct(id[y == 1]), n = n_distinct(id)) %>%
+ mutate(prop_y = n_y / n)
> nrow(datq)
[1] 12
> summary(lm(prop_y ~ d1, data = datq))
Call:
lm(formula = prop_y ~ d1, data = datq)
Residuals:
Min 1Q Median 3Q Max
-0.75 -0.50 0.25 0.50 0.50
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.7500 0.2622 2.860 0.0169 *
d1 -0.2500 0.3211 -0.778 0.4543
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.5244 on 10 degrees of freedom
Multiple R-squared: 0.05714, Adjusted R-squared: -0.03714
F-statistic: 0.6061 on 1 and 10 DF, p-value: 0.4543
>
> datq2 <- dat %>%
+ group_by(quarter, d1) %>%
+ summarise(n_y = n_distinct(id[y == 1]), n = n_distinct(id)) %>%
+ mutate(prop_y = n_y / n)
> nrow(datq2)
[1] 8
> summary(lm(prop_y ~ d1, data = datq2))
Call:
lm(formula = prop_y ~ d1, data = datq2)
Residuals:
Min 1Q Median 3Q Max
-0.750 -0.125 0.125 0.250 0.500
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.7500 0.2282 3.286 0.0167 *
d1 -0.2500 0.3227 -0.775 0.4680
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.4564 on 6 degrees of freedom
Multiple R-squared: 0.09091, Adjusted R-squared: -0.06061
F-statistic: 0.6 on 1 and 6 DF, p-value: 0.468
>datq%
+分组(季度、首被告、次被告)%>%
+总结(n_y=n_distinct(id[y==1]),n=n_distinct(id))%>%
+变异(prop_y=n_y/n)
>nrow(datq)
[1] 12
>汇总(lm(项目y~d1,数据=datq))
电话:
lm(公式=prop_y~d1,数据=datq)
残差:
最小1季度中值3季度最大值
-0.75 -0.50 0.25 0.50 0.50
系数:
估计标准误差t值Pr(>t)
(截距)0.7500.2622.860 0.0169*
d1-0.2500 0.3211-0.778 0.4543
---
签名。代码:0'***'0.001'***'0.01'*'0.05'.'0.1''1
剩余标准误差:10个自由度上的0.5244
多重R平方:0.05714,调整后的R平方:-0.03714
F统计量:1和10 DF上的0.6061,p值:0.4543
>
>datq2%
+第二组(第一季度)%>%
+总结(n_y=n_distinct(id[y==1]),n=n_distinct(id))%>%
+变异(prop_y=n_y/n)
>nrow(datq2)
[1] 8
>汇总(lm(项目y~d1,数据=datq2))
电话:
lm(公式=prop_y~d1,数据=datq2)
残差:
最小1季度中值3季度最大值
-0.750 -0.125 0.125 0.250 0.500
系数:
估计标准误差t值Pr(>t)
(截距)0.7500.2282 3.286 0.0167*
d1-0.2500 0.3227-0.775 0.4680
---
签名。代码:0'***'0.001'***'0.01'*'0.05'.'0.1''1
剩余标准误差:6个自由度上的0.4564
多重R平方:0.09091,调整后的R平方:-0.06061
F-统计量:1和6 DF上的0.6,p-值:0.468
谢谢您的留言!这真的很有帮助。在我上面的版本中没有重新创建,但我的点估计值在实际数据中确实有所不同。你知道为什么会这样吗?如果数据改变,点估计值会改变,所以我猜在你做的不同聚合中,数据是不同的。他们在这种情况下匹配真是奇怪的巧合。
> datq <- dat %>%
+ group_by(quarter, d1, d2) %>%
+ summarise(n_y = n_distinct(id[y == 1]), n = n_distinct(id)) %>%
+ mutate(prop_y = n_y / n)
> nrow(datq)
[1] 12
> summary(lm(prop_y ~ d1, data = datq))
Call:
lm(formula = prop_y ~ d1, data = datq)
Residuals:
Min 1Q Median 3Q Max
-0.75 -0.50 0.25 0.50 0.50
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.7500 0.2622 2.860 0.0169 *
d1 -0.2500 0.3211 -0.778 0.4543
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.5244 on 10 degrees of freedom
Multiple R-squared: 0.05714, Adjusted R-squared: -0.03714
F-statistic: 0.6061 on 1 and 10 DF, p-value: 0.4543
>
> datq2 <- dat %>%
+ group_by(quarter, d1) %>%
+ summarise(n_y = n_distinct(id[y == 1]), n = n_distinct(id)) %>%
+ mutate(prop_y = n_y / n)
> nrow(datq2)
[1] 8
> summary(lm(prop_y ~ d1, data = datq2))
Call:
lm(formula = prop_y ~ d1, data = datq2)
Residuals:
Min 1Q Median 3Q Max
-0.750 -0.125 0.125 0.250 0.500
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.7500 0.2282 3.286 0.0167 *
d1 -0.2500 0.3227 -0.775 0.4680
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.4564 on 6 degrees of freedom
Multiple R-squared: 0.09091, Adjusted R-squared: -0.06061
F-statistic: 0.6 on 1 and 6 DF, p-value: 0.468