- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有没有办法让 plm()
为我计算 R2 和总体 R2 并将它们包含在 summary()
输出中?
要阐明我在 R2 之间、总体和内部的意思,请参阅 StackExchange 上的此答案.
我的理解是plm只在R2内计算。我在模型中运行双向效应。
一个随机示例(改编自 here ):
library(plm)
# Create some random data
set.seed(1)
x=rnorm(100); fe=rep(rnorm(10),each=10); id=rep(1:10,each=10); ti=rep(1:10,10); e=rnorm(100)
y=x+fe+e
data=data.frame(y,x,id,ti)
# Get plm within R2
reg=plm(y~x,model="within",index=c("id","ti"), effect = "twoways", data=data)
summary(reg)$r.squared
我现在也想得到整体和R2之间:
# Pooled Version (overall R2)
reg1=lm(y~x)
summary(reg1)$r.squared
# Between R2
y.means=tapply(y,id,mean)[id]
x.means=tapply(x,id,mean)[id]
reg2=lm(y.means~x.means)
summary(reg3)$r.squared
最佳答案
{plm}
似乎无法报告整体或内部引号-非引号 R 平方值。您可以通过创建自定义 summary
和 print
方法来破解它:
summary.plm.full <- function (object, vcov = NULL, ...)
{
vcov_arg <- vcov
#add plm::: for plm functions so they are calllex correctly
model <- plm:::describe(object, "model")
effect <- plm:::describe(object, "effect")
random.method <- plm:::describe(object, "random.method")
object$r.squared <- c(rsq = r.squared(object),
adjrsq = r.squared(object, dfcor = TRUE),
# add the two new r squared terms here
rsq_overall = r.squared(object, model = "pooled"),
rsq_btw = r.squared(update(object, effect = "individual", model = "between")))
use.norm.chisq <- FALSE
if (model == "random")
use.norm.chisq <- TRUE
if (length(formula(object))[2] >= 2)
use.norm.chisq <- TRUE
if (model == "ht")
use.norm.chisq <- TRUE
object$fstatistic <- pwaldtest(object, test = ifelse(use.norm.chisq,
"Chisq", "F"), vcov = vcov_arg)
if (!is.null(vcov_arg)) {
if (is.matrix(vcov_arg))
rvcov <- vcov_arg
if (is.function(vcov_arg))
rvcov <- vcov_arg(object)
std.err <- sqrt(diag(rvcov))
}
else {
std.err <- sqrt(diag(stats::vcov(object)))
}
b <- coefficients(object)
z <- b/std.err
p <- if (use.norm.chisq) {
2 * pnorm(abs(z), lower.tail = FALSE)
}
else {
2 * pt(abs(z), df = object$df.residual, lower.tail = FALSE)
}
object$coefficients <- cbind(b, std.err, z, p)
colnames(object$coefficients) <- if (use.norm.chisq) {
c("Estimate", "Std. Error", "z-value", "Pr(>|z|)")
}
else {
c("Estimate", "Std. Error", "t-value", "Pr(>|t|)")
}
if (!is.null(vcov_arg)) {
object$rvcov <- rvcov
rvcov.name <- paste0(deparse(substitute(vcov)))
attr(object$rvcov, which = "rvcov.name") <- rvcov.name
}
object$df <- c(length(b), object$df.residual, length(object$aliased))
class(object) <- c("summary.plm.full", "plm", "panelmodel")
object
}
对于打印:
print.summary.plm.full <- function (x, digits = max(3, getOption("digits") - 2), width = getOption("width"),
subset = NULL, ...)
{
formula <- formula(x)
has.instruments <- (length(formula)[2] >= 2)
effect <- plm:::describe(x, "effect")
model <- plm:::describe(x, "model")
if (model != "pooling") {
cat(paste(plm:::effect.plm.list[effect], " ", sep = ""))
}
cat(paste(plm:::model.plm.list[model], " Model", sep = ""))
if (model == "random") {
ercomp <- describe(x, "random.method")
cat(paste(" \n (", random.method.list[ercomp], "'s transformation)\n",
sep = ""))
}
else {
cat("\n")
}
if (has.instruments) {
cat("Instrumental variable estimation\n")
if (model != "within") {
ivar <- plm:::describe(x, "inst.method")
cat(paste0(" (", plm:::inst.method.list[ivar], "'s transformation)\n"))
}
}
if (!is.null(x$rvcov)) {
cat("\nNote: Coefficient variance-covariance matrix supplied: ",
attr(x$rvcov, which = "rvcov.name"), "\n", sep = "")
}
cat("\nCall:\n")
print(x$call)
cat("\n")
pdim <- pdim(x)
print(pdim)
if (model %in% c("fd", "between")) {
cat(paste0("Observations used in estimation: ", nobs(x),
"\n"))
}
if (model == "random") {
cat("\nEffects:\n")
print(x$ercomp)
}
cat("\nResiduals:\n")
df <- x$df
rdf <- df[2L]
if (rdf > 5L) {
save.digits <- unlist(options(digits = digits))
on.exit(options(digits = save.digits))
print(plm:::sumres(x))
}
else if (rdf > 0L)
print(residuals(x), digits = digits)
if (rdf == 0L) {
cat("ALL", x$df[1L], "residuals are 0: no residual degrees of freedom!")
cat("\n")
}
if (any(x$aliased, na.rm = TRUE)) {
naliased <- sum(x$aliased, na.rm = TRUE)
cat("\nCoefficients: (", naliased, " dropped because of singularities)\n",
sep = "")
}
else cat("\nCoefficients:\n")
if (is.null(subset))
printCoefmat(coef(x), digits = digits)
else printCoefmat(coef(x)[subset, , drop = FALSE], digits = digits)
cat("\n")
cat(paste("Total Sum of Squares: ", signif(plm:::tss.plm(x), digits),
"\n", sep = ""))
cat(paste("Residual Sum of Squares: ", signif(deviance(x),
digits), "\n", sep = ""))
cat(paste("R-Squared: ", signif(x$r.squared[1], digits),
"\n", sep = ""))
cat(paste("Adj. R-Squared: ", signif(x$r.squared[2], digits),
"\n", sep = ""))
# add the new r squared terms here
cat(paste("Overall R-Squared: ", signif(x$r.squared[3], digits),
"\n", sep = ""))
cat(paste("Between R-Squared: ", signif(x$r.squared[4], digits),
"\n", sep = ""))
fstat <- x$fstatistic
if (names(fstat$statistic) == "F") {
cat(paste("F-statistic: ", signif(fstat$statistic), " on ",
fstat$parameter["df1"], " and ", fstat$parameter["df2"],
" DF, p-value: ", format.pval(fstat$p.value, digits = digits),
"\n", sep = ""))
}
else {
cat(paste("Chisq: ", signif(fstat$statistic), " on ",
fstat$parameter, " DF, p-value: ", format.pval(fstat$p.value,
digits = digits), "\n", sep = ""))
}
invisible(x)
}
现在如果我们使用自定义函数:
library(plm)
# Create some random data
set.seed(1)
x=rnorm(100); fe=rep(rnorm(10),each=10); id=rep(1:10,each=10); ti=rep(1:10,10); e=rnorm(100)
y=x+fe+e
data=data.frame(y,x,id,ti)
# Get plm within R2
reg=plm(y~x,model="within",index=c("id","ti"), effect = "twoways", data=data)
summary.plm.full(reg)
打印:
Twoways effects Within Model
Call:
plm(formula = y ~ x, data = data, effect = "twoways", model = "within",
index = c("id", "ti"))
Balanced Panel: n = 10, T = 10, N = 100
Residuals:
Min. 1st Qu. Median 3rd Qu. Max.
-2.36060 -0.56664 -0.11085 0.56070 2.00869
Coefficients:
Estimate Std. Error t-value Pr(>|t|)
x 1.12765 0.11306 9.9741 1.086e-15 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Total Sum of Squares: 157.21
Residual Sum of Squares: 70.071
R-Squared: 0.55428
Adj. R-Squared: 0.44842
Overall R-Squared: 0.33672
Between R-Squared: 0.17445
F-statistic: 99.4829 on 1 and 80 DF, p-value: 1.0856e-15
关于r - 如何从 plm FE 回归中获得 between 和 overall R2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61081199/
我不明白 R 如何计算面板数据和固定效应的自由度。我特别有两个疑问: 1) 当使用以下两种备选策略拟合最小二乘虚拟变量模型时: a) 包含 N 个虚拟变量并移除常量 b) 包括 N-1 个假人并保持不
我有一个使用以下方法创建的 plm 对象: require(plm) plm1 data.frame(resid(plm1)) Error in as.data.frame.default(x[[i
我在使用 Stata 后尝试学习 R,我必须说我喜欢它。但是现在我遇到了一些麻烦。我即将用面板数据做一些多元回归,所以我使用了 plm包裹。 现在我想用 plm 得到相同的结果在 R 中,就像我使用
我正在使用 R 运行蒙特卡罗模拟来研究面板数据估计器的性能。因为我将运行大量试验,所以我需要从我的代码中获得至少不错的性能。 使用 Rprof我的模拟的 10 次试验表明,大部分时间都花在了对 sum
我第一次尝试在 R 中使用 plm 包。 我希望估计一个只有时间虚拟变量的池模型,即没有未观察到的异质性。 我运行了一个简单的回归形式: plm(dep ~ x:y -1, data=data, in
我第一次尝试在 R 中使用 plm 包。 我希望估计一个只有时间虚拟变量的池模型,即没有未观察到的异质性。 我运行了一个简单的回归形式: plm(dep ~ x:y -1, data=data, in
这是一个非常简单的问题,但我一直找不到明确的答案,所以我想我会问它。我使用 plm 包来处理面板数据。我正在尝试使用 lag 函数在时间上滞后变量 FORWARD (默认是检索上一周期的值,我想要下一
我正在尝试在 R 中编写一些非常简单的东西(我认为),但我似乎无法做到正确。我有一个包含 50 个国家(1 到 50 个)的数据集,每个国家 15 年,每个国家大约 20 个变量。现在我只在我的因变量
我想运行只包括时间和单个固定效应的回归(即没有其他右侧变量)。 我试着用 plm 来做这件事: plm(y ~ -1,data=data, effect="twoways", model="withi
我有一个 14 年 x 89 个观察值和 10 个变量 + 4 个假人的 pdata.frame。 这些虚拟变量仅用于过滤(必要时)我的数据。 使用 Stata 时,我只在代码末尾添加“if VAR=
我在设置面板数据模型时遇到问题。 以下是一些示例数据: library(plm) id <- c(1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2) year <- c(1999,199
我正在使用 plm 处理固定效应回归模型。 模型如下所示: FE.model <-plm(fml, data = data.reg2, index=c('Site.ID','da
我想创建变量的滞后。在面板数据设置中,显然仅在每个面板内考虑滞后。 为什么plm的lag()不尊重面板结构(默认情况下),有没有办法改变它(无需手动dplyr) ? # Load example da
是否可以使用 plm 中的 plm() 来估计一个具有嵌套结构的重复测量随机效应模型包? 我知道可以使用 lme4 中的 lmer()包裹。但是,lmer() 依赖似然框架,我很想用 plm() 来实
我想创建变量的滞后。在面板数据设置中,显然仅在每个面板内考虑滞后。 为什么plm的lag()不尊重面板结构(默认情况下),有没有办法改变它(无需手动dplyr) ? # Load example da
有了这个数据输入: A B C D 0.0513748973337 0.442624990365 0.044669941640565 12023787.0495 -0.0475118
我正在处理一个包含 110 万个观察值 x 41 个变量的大型(但不是很大)数据库。数据排列为不平衡面板。使用这些变量,我指定了三个不同的模型,并将每个模型作为 1) 固定效应、2) 随机效应和 3)
我正在使用包 plm 估算面板模型。面板中的一些人没有所有解释变量的数据,因此他们被排除在回归之外。我如何才能看到哪些特定观察已用于估计? 在 Stata 中,通常的命令是 e(sample)。 R
请注意:我试图让代码同时处理时间和个人固定效应以及不平衡的数据集。下面的示例代码适用于平衡数据集。 也请参阅下面的编辑,请 我正在尝试使用 plm 手动计算固定效应模型(具有个体效应和时间效应)的拟合
我有一个小的 N 大 T 面板,我通过 plm(面板线性回归模型)进行估计,具有固定效果。 有没有办法获得新数据集的预测值? (我想要 估计我的样本子集的参数,然后使用这些参数 计算整个样本的模型隐含
我是一名优秀的程序员,十分优秀!