没有预测变量的回归模型在 R 中使用 plm?
Regression model without predictors using plm in R?
我有一个不平衡面板数据 table,其中包含变量 ID
、year
和 outcome
。每个 ID
的数据跨度为 2005-2020,尽管每个 ID
不会拥有全部 15 年的数据。这是一个示例:
ID, year, outcome
1, 2005, 70
1, 2006, 73
1, 2007, 70
1, 2008, 68
2, 2005, 65
2, 2006, 71
2, 2007, 68
2, 2008, 64
2, 2009, 63
3, 2011, 78
3, 2012, 81
4, 2008, 75
我想要运行一个plm
回归模型没有预测变量(即截距上的回归模型)。
我尝试了 运行以下操作,但收到错误消息“空模型”:
feModel <- plm(damMean ~ 1, data = finalDT, model = "within", index = c("sireID", "year"))
# Error in plm.fit(data, model, effect, random.method, random.models, random.dfcor, :
empty model
使用 R 中的 plm
包可以做到这一点吗?
我认为这与其说是一个编程问题,不如说是一个统计问题。此外,我认为这不是关于包“plm”本身的功能的问题,而是如果这样的 within 模型是否有意义以及模型内实施的技术估计方法。
plm 的内部模型(固定效应模型)不包含截距。其他一些统计软件包在其内部模型中有一些人为拦截(最著名的可能是 Stata,但也有 gretl)。您可能需要查看 ?plm::within_intercept
及其引用的文献,以了解有关模型内截距的更多详细信息。
让我们看看在内部模型中仅截取作为回归量的情况下会发生什么:
library("plm")
data("Grunfeld", package = "plm")
pGrun <- pdata.frame(Grunfeld)
plm(inv ~ 1, data = pGrun, model = "within") # errors with "empty model"
pGrun$int <- 1 # intercept
within_int <- Within(pGrun$int) # within transformation of intercept
# -> all zeros:
head(within_int)
## 1-1935 1-1936 1-1937 1-1938 1-1939 1-1940
## 0 0 0 0 0 0
all.equal(as.numeric(within_int), rep(0, 200L), check.attributes = FALSE)
## TRUE
截距的内部转换全为零,因此 plm 关于空模型的错误消息是合理的。 gretl,一个带有模型内截距的计量经济学包,输出这种仅截距模型的估计值:
coefficient std. error t-ratio p-value
---------------------------------------------------------
const 145.958 7.68517 18.99 8.85e-046 ***
这个值是多少?好吧,它是因变量的平均值
mean(pGrun$inv)
## 145.9582
或者,如果您想通过 plm
的模型估计得出这个平均值,您可以估计 "pooling"
仅具有截距的模型:
plm(inv ~ 1, data = pGrun, model = "pooling")
## Model Formula: inv ~ 1
## Coefficients:
## (Intercept)
## 145.96
我有一个不平衡面板数据 table,其中包含变量 ID
、year
和 outcome
。每个 ID
的数据跨度为 2005-2020,尽管每个 ID
不会拥有全部 15 年的数据。这是一个示例:
ID, year, outcome
1, 2005, 70
1, 2006, 73
1, 2007, 70
1, 2008, 68
2, 2005, 65
2, 2006, 71
2, 2007, 68
2, 2008, 64
2, 2009, 63
3, 2011, 78
3, 2012, 81
4, 2008, 75
我想要运行一个plm
回归模型没有预测变量(即截距上的回归模型)。
我尝试了 运行以下操作,但收到错误消息“空模型”:
feModel <- plm(damMean ~ 1, data = finalDT, model = "within", index = c("sireID", "year"))
# Error in plm.fit(data, model, effect, random.method, random.models, random.dfcor, :
empty model
使用 R 中的 plm
包可以做到这一点吗?
我认为这与其说是一个编程问题,不如说是一个统计问题。此外,我认为这不是关于包“plm”本身的功能的问题,而是如果这样的 within 模型是否有意义以及模型内实施的技术估计方法。
plm 的内部模型(固定效应模型)不包含截距。其他一些统计软件包在其内部模型中有一些人为拦截(最著名的可能是 Stata,但也有 gretl)。您可能需要查看 ?plm::within_intercept
及其引用的文献,以了解有关模型内截距的更多详细信息。
让我们看看在内部模型中仅截取作为回归量的情况下会发生什么:
library("plm")
data("Grunfeld", package = "plm")
pGrun <- pdata.frame(Grunfeld)
plm(inv ~ 1, data = pGrun, model = "within") # errors with "empty model"
pGrun$int <- 1 # intercept
within_int <- Within(pGrun$int) # within transformation of intercept
# -> all zeros:
head(within_int)
## 1-1935 1-1936 1-1937 1-1938 1-1939 1-1940
## 0 0 0 0 0 0
all.equal(as.numeric(within_int), rep(0, 200L), check.attributes = FALSE)
## TRUE
截距的内部转换全为零,因此 plm 关于空模型的错误消息是合理的。 gretl,一个带有模型内截距的计量经济学包,输出这种仅截距模型的估计值:
coefficient std. error t-ratio p-value
---------------------------------------------------------
const 145.958 7.68517 18.99 8.85e-046 ***
这个值是多少?好吧,它是因变量的平均值
mean(pGrun$inv)
## 145.9582
或者,如果您想通过 plm
的模型估计得出这个平均值,您可以估计 "pooling"
仅具有截距的模型:
plm(inv ~ 1, data = pGrun, model = "pooling")
## Model Formula: inv ~ 1
## Coefficients:
## (Intercept)
## 145.96