我正在尝试估计一个面板数据集,其中包含一个表示路线的地理区域(LoadArea,DischargeArea)的交互项.使用固定效果规范时,它不喜欢交互项(LoadArea*DischargeArea)并在汇总回归时产生以下错误:
mult_fe<-plm(log(DayRate)~LoadArea *DischargeArea + factor(Laycan.Day.Diff) + CapUtil + Age
+ I(Age^2) + WFRDWT + lag_BDTI, data=mult_reg1,model="within");
summary(mult_fe)
Error in crossprod(t(X), beta) : non-conformable arguments
Run Code Online (Sandbox Code Playgroud)
这在使用lm函数替换plm的正常OLS回归中工作正常.问题是为什么它不适用于我的模型?
我想使用 PLM 包估计 R 中的一些面板数据模型。由于理论知识有限,我严格遵循“计量经济学学院”(代码此处)的指示。我根据我的数据(自己的因变量/独立变量)定制了该代码,但没有更改所有其他语法/公式。
现在问题来了:
除随机效应模型外,所有模型都可以估计,并且它们的结果也可以总结和解释。这里我收到以下错误消息:
Error in solve.default(crossprod(X.m)) :
system is computationally singular: reciprocal condition number = 9.57127e-023
Run Code Online (Sandbox Code Playgroud)
有谁可以给我提示这个错误的实际含义吗?根本原因可能是什么?我必须如何更正代码才能获得结果?
编辑: 更准确地说,这是我使用的 R 代码部分:
# read in data
mydata<- read.csv2("Panel.csv")
attach(mydata)
# define dependant variable
sd1 <- cbind(sd)
# define independant variable
x <- cbind(ratio1, ratio2, ratio3, ratio4, mean)
# Set data as panel data
pdata <- plm.data(mydata, index=c("id","t"))
# Pooled OLS estimator
pooling <- plm(sd1 ~ x, data=pdata, model= "pooling")
summary(pooling)
# Between estimator
between <- …Run Code Online (Sandbox Code Playgroud) 考虑以下几组概率(三个事件不相互排斥):
如何计算至少一个事件发生的概率(即工会)?
如果可能的话,我更喜欢一个通用的,独立的解决方案,它也可以处理4个或更多事件.在这种情况下,我正在寻找的答案是:
0.05625 + 0.05625 + 0.05625 -
0.05625*0.05625 - 0.05625*0.05625 - 0.05625*0.05625 +
0.05625*0.05625*0.05625
##[1] 0.1594358
Run Code Online (Sandbox Code Playgroud)
我的问题最终比标题更广泛,因为我正在寻找可以计算union,intersection(0.05625*0.05625*0.05625 = 0.0001779785),没有事件发生(1 - 0.1594358 = 0.8405642)或恰好发生一个事件(0.150300)的概率的函数.换句话说,这个在线连接三个事件计算器的R解决方案.我已经查看了这个prob包,但是对于这种简单的用例来说,它似乎有一个太复杂的界面.
当虚拟变量的数量导致模型矩阵超过R最大向量长度时,是否有一种简单的方法可以在R中进行固定效应回归?例如,
> m <- lm(log(bid) ~ after + I(after*score) + id, data = data)
Error in model.matrix.default(mt, mf, contrasts) :
cannot allocate vector of length 905986769
Run Code Online (Sandbox Code Playgroud)
其中id是一个因子(并且是导致上述问题的变量).
我知道我可以通过并取消所有数据,但这会抛出标准错误(是的,你可以用手动计算SE的"df"调整,但我想最小化我的概率引入新的错误.我看过plm软件包,但它似乎只针对具有时间组件的经典面板数据而设计,这不是我的数据结构.
有谁知道是否有一个包在R中运行Fama-MacBeth回归并计算标准错误?我知道该sandwich软件包及其评估Newey-West标准错误以及提供聚类功能的能力.但是,我没有看到有关Fama-MacBeth的任何事情.
我无法在上传递此rle功能data.frame。函数在另一组上效果很好:
fgroup <- aggregate(fevents2[,3:14], list(weeks = fevents2[, 1]), function(x) rle(x)$values)
Run Code Online (Sandbox Code Playgroud)
产生错误:
Error in rle(x) : 'x' must be an atomic vector
Run Code Online (Sandbox Code Playgroud)
样本数据:
> dput(fevents2[1:20,])
structure(list(weeks = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("1",
"2", "3", "4", "5", "6", "7"), class = "factor"), A1M.Date = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, …Run Code Online (Sandbox Code Playgroud) 我正在使用plm包中运行面板数据回归,R并希望控制解释变量之间的多重共线性.
我知道-package中有vif()函数car,但据我所知,它不能处理面板数据输出.
的plm可以做其他的诊断,如单位根测试,但我发现没有方法来计算多重.
有没有办法计算类似的测试vif,或者我可以只将每个变量视为时间序列,省略面板信息并使用car包运行测试?
我无法透露数据,但问题应与所有面板数据模型相关.
该维度大约为1,000个观测值,超过50个时间段.
我使用的代码如下所示:
pdata <- plm.data(RegData, index=c("id","time"))
fixed <- plm(Y~X, data=pdata, model="within")
Run Code Online (Sandbox Code Playgroud)
然后
vif(fixed)
Run Code Online (Sandbox Code Playgroud)
返回错误.
先感谢您.
为什么不能在一个有多个变量传递给value.var在dcast?来自?dcast:
value.var存储值的列的名称,请参阅guess_value以了解默认策略.
它没有明确指出只能将一个变量作为值传递给它.但是,如果我尝试,那么我得到一个错误:
> library("reshape2")
> library("MASS")
>
> dcast(Cars93, AirBags ~ DriveTrain, mean, value.var=c("Price", "Weight"))
Error in .subset2(x, i, exact = exact) : subscript out of bounds
In addition: Warning message:
In if (!(value.var %in% names(data))) { :
the condition has length > 1 and only the first element will be used
Run Code Online (Sandbox Code Playgroud)
那么有没有理由强加这种限制?是否有可能解决这个问题(也许使用reshape等)?
我试图在R的plm包中运行具有固定效果的回归model = 'within',同时具有聚类标准错误.使用Cigar来自的数据集plm,我正在运行:
require(plm)
require(lmtest)
data(Cigar)
model <- plm(price ~ sales + factor(state), model = 'within', data = Cigar)
coeftest(model, vcovHC(model, type = 'HC0', cluster = 'group'))
Estimate Std. Error t value Pr(>|t|)
sales -1.21956 0.21136 -5.7701 9.84e-09
Run Code Online (Sandbox Code Playgroud)
这与我使用Stata(将Cigar文件编写为.dta)得到的结果略有不同:
use cigar
xtset state year
xtreg price sales, fe vce(cluster state)
price Coef. Std. Err. t P>t [95% Conf. Interval]
sales -1.219563 .2137726 -5.70 0.000 -1.650124 -.7890033
Run Code Online (Sandbox Code Playgroud)
即,标准误差和T统计量是不同的.我尝试用不同的"类型"重新运行R代码,但没有一个给出与Stata相同的结果.我错过了什么吗?
我正在开发一个包含调用的自定义函数lm(),但由于某种原因,函数失败了.我无法理解它失败的原因.
考虑将此示例简化为简单:
myfun <- function(form., data., subs., ...){
lm(form., data., subs., ...)
}
Run Code Online (Sandbox Code Playgroud)
这将最终出错:
myfun(mpg ~ cyl + hp, mtcars, TRUE)
## Error in eval(expr, envir, enclos) : object 'subs.' not found
Run Code Online (Sandbox Code Playgroud)
但lm()直接使用将工作得很好:
lm(mpg ~ cyl + hp, mtcars, TRUE)
##
## Call:
## lm(formula = mpg ~ cyl + hp, data = mtcars, subset = TRUE)
##
## Coefficients:
## (Intercept) cyl hp
## 36.90833 -2.26469 -0.01912
Run Code Online (Sandbox Code Playgroud)
我试过调试,但仍然无法解决问题的根源.为什么自定义功能失败?显然subs. 已被提供给函数...
虽然下面提出的大多数解决方案都有助于这个简单的情况,但如果我添加一个简单的扭曲,该功能仍将失败.例如,expand.model.frame()依赖于公式的环境,但如果我使用正常的评估解决方案则会失败: …
r ×10
plm ×5
regression ×3
panel-data ×2
dataframe ×1
function ×1
panel ×1
probability ×1
r-factor ×1
random ×1
reshape2 ×1
set-union ×1
stata ×1