从 R 中的合并 OLS 估计中提取所有个体斜率系数
Extract all individual slope coefficient from pooled OLS estimation in R
我遇到了一个问题,我想在合并回归中提取特定变量的所有单独系数。
我的数据看起来像这样,我在 X 上回归 Y。
Observation name date Y X
1 A 1 Y1 X1
2 A 2 Y2 X2
3 B 1 Y3 X3
4 B 2 Y4 X4
使用 plm
包和摘要,R
只给了我一个 X 系数。但是,我想在每个单独的回归中都有 X 变量的系数。谁能帮我这个?
澄清一下,我想要的是下图中与 X_n,1 关联的所有测试版。对困惑感到抱歉。
您可以使用 broom 包中的 tidy
和 augment
从 plm
中获取结果并将它们放入数据框中。
library(plm)
library(broom)
data("Grunfeld", package = "plm")
p <- plm(inv ~ value + capital, data = Grunfeld, model = "pooling")
df <- tidy(p)
# term estimate std.error statistic p.value
# 1 (Intercept) -42.7143694 9.51167603 -4.490730 1.207357e-05
# 2 value 0.1155622 0.00583571 19.802589 9.542703e-49
# 3 capital 0.2306785 0.02547580 9.054808 1.347370e-16
df$estimate
# [1] -42.7143694 0.1155622 0.2306785
augment(p)
# inv value capital .fitted .resid
# 1 317.60 3078.50 2.80 313.689629 3.910371
# 2 391.80 4661.70 52.60 508.135423 -116.335423
# 3 410.60 5387.10 156.90 616.023978 -205.423978
# 4 257.70 2792.20 209.20 328.216223 -70.516223
# 5 330.80 4313.20 203.40 502.648328 -171.848328
# 6 461.20 4643.90 207.20 541.741311 -80.541311
# 7 512.00 4551.20 255.20 542.101267 -30.101267
# 8 448.00 3244.10 303.70 402.237879 45.762121
# 9 499.60 4053.70 264.10 486.662133 12.937867
# 10 547.50 4379.30 201.60 509.871765 37.628235
如果您想要实体的不同系数(在您的示例中被 name
拆分),您可以使用包 plm
中的函数 pvcm()
来拟合每个 OLS 模型个人或手工完成,请参见下面的代码示例。
基于帮助页面 (?pvcm
) 中的示例:
library(plm)
data("Produc", package = "plm")
form <- log(gsp) ~ log(pcap) + log(pc) + log(emp) + unemp
pvcm(form, data = Produc, model = "within") # individual coefficients
## Coefficients:
## (Intercept) log(pcap) log(pc) log(emp) unemp
## ALABAMA 8.49604 -1.4426440 0.2795010 1.835250 0.00735450
## ARIZONA 4.66528 -0.1627084 -0.0052207 1.075828 -0.00365798
## ARKANSAS 3.24565 -0.5056503 0.3212473 1.234017 0.00149221
## CALIFORNIA 0.27935 0.2639377 0.2484033 0.699135 -0.01074510
## [...]
###### same using OLS on splitted data for first entity (ALABAMA):
l <- split(Produc, Produc$state)
plm(form, data = l[[1]], model = "pooling")
## Coefficients:
## (Intercept) log(pcap) log(pc) log(emp) unemp
## 8.4960384 -1.4426440 0.2795010 1.8352498 0.0073545
我遇到了一个问题,我想在合并回归中提取特定变量的所有单独系数。
我的数据看起来像这样,我在 X 上回归 Y。
Observation name date Y X
1 A 1 Y1 X1
2 A 2 Y2 X2
3 B 1 Y3 X3
4 B 2 Y4 X4
使用 plm
包和摘要,R
只给了我一个 X 系数。但是,我想在每个单独的回归中都有 X 变量的系数。谁能帮我这个?
澄清一下,我想要的是下图中与 X_n,1 关联的所有测试版。对困惑感到抱歉。
您可以使用 broom 包中的 tidy
和 augment
从 plm
中获取结果并将它们放入数据框中。
library(plm)
library(broom)
data("Grunfeld", package = "plm")
p <- plm(inv ~ value + capital, data = Grunfeld, model = "pooling")
df <- tidy(p)
# term estimate std.error statistic p.value
# 1 (Intercept) -42.7143694 9.51167603 -4.490730 1.207357e-05
# 2 value 0.1155622 0.00583571 19.802589 9.542703e-49
# 3 capital 0.2306785 0.02547580 9.054808 1.347370e-16
df$estimate
# [1] -42.7143694 0.1155622 0.2306785
augment(p)
# inv value capital .fitted .resid
# 1 317.60 3078.50 2.80 313.689629 3.910371
# 2 391.80 4661.70 52.60 508.135423 -116.335423
# 3 410.60 5387.10 156.90 616.023978 -205.423978
# 4 257.70 2792.20 209.20 328.216223 -70.516223
# 5 330.80 4313.20 203.40 502.648328 -171.848328
# 6 461.20 4643.90 207.20 541.741311 -80.541311
# 7 512.00 4551.20 255.20 542.101267 -30.101267
# 8 448.00 3244.10 303.70 402.237879 45.762121
# 9 499.60 4053.70 264.10 486.662133 12.937867
# 10 547.50 4379.30 201.60 509.871765 37.628235
如果您想要实体的不同系数(在您的示例中被 name
拆分),您可以使用包 plm
中的函数 pvcm()
来拟合每个 OLS 模型个人或手工完成,请参见下面的代码示例。
基于帮助页面 (?pvcm
) 中的示例:
library(plm)
data("Produc", package = "plm")
form <- log(gsp) ~ log(pcap) + log(pc) + log(emp) + unemp
pvcm(form, data = Produc, model = "within") # individual coefficients
## Coefficients:
## (Intercept) log(pcap) log(pc) log(emp) unemp
## ALABAMA 8.49604 -1.4426440 0.2795010 1.835250 0.00735450
## ARIZONA 4.66528 -0.1627084 -0.0052207 1.075828 -0.00365798
## ARKANSAS 3.24565 -0.5056503 0.3212473 1.234017 0.00149221
## CALIFORNIA 0.27935 0.2639377 0.2484033 0.699135 -0.01074510
## [...]
###### same using OLS on splitted data for first entity (ALABAMA):
l <- split(Produc, Produc$state)
plm(form, data = l[[1]], model = "pooling")
## Coefficients:
## (Intercept) log(pcap) log(pc) log(emp) unemp
## 8.4960384 -1.4426440 0.2795010 1.8352498 0.0073545