首页 > 解决方案 > 计算 R 中两个不同回归之间的差异

问题描述

我正在尝试计算 2014 年至 2011 年间变量“效率比”(ER)的变化系数和相应的 p 值(即 Δ=2014-2011)。我已经使用汇总 OLS 计算了 2011 年和 2014 年的个别回归。我不知道下一步来计算这种变化的结果(估计系数和 p 值)。我试图得出结论,因变量与 ER 变量相关的敏感性是否呈正相关。

下面,我介绍了 2011 年和 2014 年的个别回归,以及我的数据库的一部分。我将不胜感激有关如何在 R 中执行此操作的任何见解。谢谢。


pdata2011<-pdata.frame(paneldata2011, index = c("BANKS","YEARS"))

pooled2011<-plm(VCTC ~ ER + log(TA) + log(GDP), data = pdata2011,  model = "pooling")


pdata2014<-pdata.frame(paneldata2014, index = c("BANKS","YEARS"))

pooled2014<-plm(VCTC ~ ER + log(TA) + log(GDP), data = pdata2014, model = "pooling")
  BANKS YEARS    VCTC         ER           TA         GDP
    1   2014    0.00000000  0.8559100   235193.8    534678.1
    1   2011    0.16887878  1.5123620   301355.0    522645.5
    2   2014    0.87297022  0.6225519   809343.3    1801480.1
    2   2011    0.85148515  0.6321466   777083.1    1789140.7
    3   2014    0.24422236  0.4315355   2573915.1   10438529.2
    3   2011    0.24970615  0.4156023   1853465.0   7551500.4
    4   2014    0.33174224  0.3927662   2457455.2   10438529.2
    4   2011    0.28012834  0.4291702   1877624.1   7551500.4
    5   2014    0.31638913  0.3525573   2697975.7   10438529.2
    5   2011    0.32945877  0.3633482   1949372.7   7551500.4
    6   2014    0.22575998  0.3450020   3320881.7   10438529.2
    6   2011    0.21708543  0.3596391   2456488.5   7551500.4
...
    34  2014    0.94692763  0.7477073   274119.0    17521746.5
    34  2011    0.93822571  0.7259823   216827.0    15542581.1
    35  2014    0.86932004  0.5752208   1687155.0   17521746.5
    35  2011    0.85889245  0.6049802   1313867.0   15542581.1

标签: rregressiondifferencepanel-data

解决方案


您可以按照@LynnL 的建议进行操作,即包含一个交互项。如果 ER 的影响之间存在显着差异(即不为零),则该术语将为您提供一个小的 p 值。

理想情况下下次提供数据,因为我们不知道什么是 YEARS 等以及两个 data.frames 是否可以组合。下面我建议使用 zscore 来查看 2 个系数之间的差异:

library(plm)

使用数据的前 12 行,假设这是组合数据集:

    df = structure(list(BANKS = c(1L, 1L, 2L, 2L, 3L, 3L, 4L, 4L, 5L, 
5L, 6L, 6L), YEARS = c(2014L, 2011L, 2014L, 2011L, 2014L, 2011L, 
2014L, 2011L, 2014L, 2011L, 2014L, 2011L), VCTC = c(0, 0.16887878, 
0.87297022, 0.85148515, 0.24422236, 0.24970615, 0.33174224, 0.28012834, 
0.31638913, 0.32945877, 0.22575998, 0.21708543), ER = c(0.85591, 
1.512362, 0.6225519, 0.6321466, 0.4315355, 0.4156023, 0.3927662, 
0.4291702, 0.3525573, 0.3633482, 0.345002, 0.3596391), TA = c(235193.8, 
301355, 809343.3, 777083.1, 2573915.1, 1853465, 2457455.2, 1877624.1, 
2697975.7, 1949372.7, 3320881.7, 2456488.5), GDP = c(534678.1, 
522645.5, 1801480.1, 1789140.7, 10438529.2, 7551500.4, 10438529.2, 
7551500.4, 10438529.2, 7551500.4, 10438529.2, 7551500.4)), class = "data.frame", row.names = c(NA, 
-12L))

您从这里开始,使用交互项运行回归:

df$YEARS = factor(df$YEARS)
pooled2011<-plm(VCTC ~ ER + log(TA) + log(GDP),model = "pooling",data=pdata.frame(subset(df,YEARS==2011),index=c("BANKS","YEARS")))

pooled2014<-plm(VCTC ~ ER + log(TA) + log(GDP),model = "pooling",data=pdata.frame(subset(df,YEARS==2014),index=c("BANKS","YEARS")))

在每个基于 6 个数据点的回归中。为您的整个数据集运行它。

b1 <- summary(pooled2011)$coefficients["ER",1]
se1 <- summary(pooled2011)$coefficients["ER",2]
b2 <- summary(pooled2014)$coefficients["ER",1]
se2 <- summary(pooled2014)$coefficients["ER",2]

差异只是两个回归系数之间的差异(假设所有变量都在同一尺度上),您可以报告标准误差:

compare.coeff <- function(b1,se1,b2,se2){
delta = b1-b2
se = sqrt(se1^2+se2^2)
Zscore = (delta)/se
p_value = 2*pnorm(-abs(Zscore))
c(delta=delta,se=se,Zscore=Zscore,p_value=p_value)
}

compare.coeff(b1,se1,b2,se2)
     delta         se     Zscore    p_value 
-1.7461849  7.4390338 -0.2347328  0.8144162 

您还可以查看类似这样的书籍或章节,基本上是任何描述交互术语使用的内容。我之前也回答过类似的问题,你也可以看看。


推荐阅读