标签: panel-data

R中var-covar矩阵的有效计算

我正在寻找在计算从各个测量(自动)协方差矩阵随时间提高效率tt, t-1等.

在数据矩阵中,每行代表一个人,每列代表每月测量(列按时间顺序排列).类似于以下数据(尽管有一些更多的协方差).

# simulate data
set.seed(1)
periods <- 70L
ind <- 90000L
mat <- sapply(rep(ind, periods), rnorm)
Run Code Online (Sandbox Code Playgroud)

下面是我想出的(丑陋的)代码,用于获得测量/滞后测量的协方差矩阵.运行大约需要4秒钟.我敢肯定,通过转移data.table,思考更多而不依赖于循环,我可以减少大量的时间.但是由于协方差矩阵无处不在,我怀疑在R中已经存在一种标准(且有效)的方法,我应该首先了解它.

# Get variance covariance matrix for 0-5 lags    
n_lags <- 5L # Number of lags
vcov <- matrix(0, nrow = n_lags + 1L, ncol = n_lags + 1)
for (i in 0L:n_lags) {
  for (j in i:n_lags) {
    vcov[j + 1L, i + 1L] <- 
      sum(mat[, (1L + (j - i)):(periods - i)] *
          mat[, …
Run Code Online (Sandbox Code Playgroud)

statistics r panel-data data.table

15
推荐指数
2
解决办法
523
查看次数

在R中的不平衡面板数据中创建滞后变量

我想在一个组中创建一个包含上一年变量值的变量.

     id   date        value
1     1   1992          4.1  
2     1     NA          4.5  
3     1   1991          3.3  
4     1   1990          5.3  
5     1   1994          3.0  
6     2   1992          3.2  
7     2   1991          5.2  
Run Code Online (Sandbox Code Playgroud)

value_lagged当组中缺少前一年时应该丢失 - 要么是因为它是组内的第一个日期(如第4,7行),要么是因为数据中存在年份缺口(如第5行).此外,value_lagged当缺少当前时间时应丢失(如第2行).

这给出了:

     id   date    value    value_lagged  
1     1   1992      4.1             3.3
2     1     NA      4.5              NA
3     1   1991      3.3             5.3
4     1   1990      5.3              NA
5     1   1994      3.0              NA
6     2   1992      3.2             5.2
7     2   1991      5.2              NA
Run Code Online (Sandbox Code Playgroud)

现在,在R中,我使用data.table …

r panel-data dplyr data.table

12
推荐指数
3
解决办法
4589
查看次数

模块“pandas”没有属性“Panel”

将字典数据框转换为面板数据框时出现错误

panelda = pd.Panel()

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-33-e8e84d2172b7> in <module>
     11     panaldata[ticker] = panaldata[ticker][["Open","High","Low","Close","Volume"]]
     12     #print(panaldata[ticker].head())
---> 13 panelda = pd.Panel()
     14 #panelda.minor_axis = ["Open","High","Low","Close","Volume"]
     15 #panelda.major_axis = panel.major_axis.tz_localize(pytz.ist)

c:\miniconda\lib\site-packages\pandas\__init__.py in __getattr__(name)
    242         return _SparseArray
    243 
--> 244     raise AttributeError(f"module 'pandas' has no attribute '{name}'")
    245 
    246 

AttributeError: module 'pandas' has no attribute 'Panel'
Run Code Online (Sandbox Code Playgroud)

pandas panel-data

9
推荐指数
1
解决办法
2万
查看次数

面板数据的双集群标准错误

我在R(时间和横截面)中有一个面板数据集,并且想要计算由两个维度聚类的标准误差,因为我的残差是双向相关的.谷歌搜索我发现http://thetarzan.wordpress.com/2011/06/11/clustered-standard-errors-in-r/提供了执行此操作的功能.它似乎有点特别,所以我想知道是否有一个已经过测试的包并且这样做了吗?

我知道sandwichHAC标准错误,但它没有做双聚类(即沿着两个维度).

regression r standard-error panel-data plm

8
推荐指数
4
解决办法
6026
查看次数

如何在面板数据回归中处理NA?

我试图预测包含NAs的数据的拟合值,并基于生成的模型plm.这是一些示例代码:

require(plm)
test.data <- data.frame(id=c(1,1,2,2,3), time=c(1,2,1,2,1), 
   y=c(1,3,5,10,8), x=c(1, NA, 3,4,5))
model <- plm(y ~ x, data=test.data, index=c("id", "time"), 
       model="pooling", na.action=na.exclude)
yhat <- predict(model, test.data, na.action=na.pass)
test.data$yhat <- yhat
Run Code Online (Sandbox Code Playgroud)

当我运行最后一行时,我收到一条错误,指出替换有4行而数据有5行.

我不知道如何获得预测返回长度为5的向量...

如果不是运行plm我运行lm(如下面的行),我得到预期的结果.

model <- lm(y ~ x, data=test.data, na.action=na.exclude)
Run Code Online (Sandbox Code Playgroud)

r predict na panel-data plm

8
推荐指数
1
解决办法
3189
查看次数

采用plm包装的重量

我的数据框如下所示:

unique.groups<- letters[1:5]
unique_timez<- 1:20
groups<- rep(unique.groups, each=20)
my.times<-rep(unique_timez, 5)

play.data<- data.frame(groups, my.times, y= rnorm(100), x=rnorm(100), POP= 1:100)
Run Code Online (Sandbox Code Playgroud)

我想运行以下加权回归:

plm(y~x + factor(my.times) , 
data=play.data, 
index=c('groups','my.times'), model='within', weights= POP)
Run Code Online (Sandbox Code Playgroud)

但我不相信plm包允许重量.答案我正在寻找下面模型中的系数:

fit.regular<- lm(y~x + factor(my.times) + factor(my.groups),
weights= POP, data= play.data)
desired.answer<- coefficients(fit.regular)
Run Code Online (Sandbox Code Playgroud)

但是,我正在寻找plm包的答案,因为使用更大的数据集和许多组获得带有plm的估计器的系数要快得多.

r linear-regression panel-data plm

8
推荐指数
1
解决办法
1427
查看次数

如何处理面板数据以用于递归神经网络(RNN)

我一直在对递归神经网络进行一些研究,但我无法理解它们是否以及如何用于分析面板数据(意味着在几个主题的不同时间段捕获的横截面数据 - 参见样本数据我见过的大多数RNN的例子都与文本序列有关,而不是真正的面板数据,所以我不确定它们是否适用于这种类型的数据.

样本数据:

ID    TIME    Y    X1    X2    X3
1     1       5     3     0    10
1     2       5     2     2    6
1     3       6     6     3    11
2     1       2     2     7    2
2     2       3     3     1    19
2     3       3     8     6    1
3     1       7     0     2    0
Run Code Online (Sandbox Code Playgroud)

如果我想在给定协变量X1,X2和X3(以及它们之前时间段的值)的特定时间预测Y,那么这种序列是否可以通过递归神经网络进行评估?如果是这样,你是否有任何资源或想法如何将这种类型的数据转换为特征向量和匹配可以传递给RNN的标签(我使用的是Python,但我对其他实现开放).

python panel-data recurrent-neural-network

8
推荐指数
1
解决办法
2652
查看次数

我可以使用没有任何滞后变量的dynlm吗?

我试图在R编程中使用动态线性回归使用dynlm命令,因为我需要分析我的面板数据,但我不想使用面板回归.

但是,我的模型规范根本不包含任何滞后变量.在这种情况下,我还可以使用动态线性模型(dynlm)吗?它给出的输出仍然非常好,有用.

例如,我得到以下内容.

 Call:
 dynlm(formula = y ~ a + b + c + d*g + e*g + 
     f*g + h + i + j)

                Estimate  Std. Error t value  Pr(>|t|)    
 (Intercept)  2.12175142  1.87591046   1.131  0.258860    
 a            0.00019267  0.02859444   0.007  0.994628    
 b           -0.01091167  0.02133546  -0.511  0.609392    
 c            0.17635258  0.05616125   3.140  0.001842 ** 
 d           -0.12717373  0.04706829  -2.702  0.007253 ** 
 g           -0.39693637  0.09144441  -4.341 1.894e-05 ***
 e           -0.15394576  0.05059879  -3.042  0.002536 ** 
 f           -0.22525696  0.07412517  -3.039  0.002565 ** 
 h           -0.10063528  0.01242704  -8.098 …
Run Code Online (Sandbox Code Playgroud)

regression r lag panel-data

8
推荐指数
1
解决办法
278
查看次数

如何使用 R 运行面板数据中个体固定效应的预测概率(或平均边际效应)?

这是运行单个固定效应方法的三种不同方法,它们给出或多或少相同的结果(见下文)。我的主要问题是如何使用第二个模型 ( model_plm) 或第三个模型 ( model_felm) 获得预测概率或平均边际效应。我知道如何使用第一个模型 ( model_lm) 来做到这一点,并使用下面的示例来展示ggeffects,但这仅在我有一个小样本时才有效。

由于我有超过一百万人,我的模型只能使用model_plm和来工作model_felm。如果我使用model_lm,则需要花费大量时间来运行一百万个人,因为它们是在模型中受到控制的。我还收到以下错误:Error: vector memory exhausted (limit reached?)。我检查了 StackOverflow 上的许多线程来解决该错误,但似乎没有任何解决方案。

我想知道是否有有效的方法来解决这个问题。我的主要兴趣是提取交互的预测概率residence*union。我通常使用以下软件包之一提取预测概率或平均边际效应:ggeffectsemmeansmargins

library(lfe)
library(plm)
library(ggeffects)
data("Males")  

model_lm = lm(wage ~ exper + residence+health + residence*union +factor(nr)-1, data=Males)
model_plm = plm(wage ~ exper + residence + health + residence*union,model = "within", index=c("nr", "year"), data=Males)
model_felm = felm(wage ~ exper + residence + health …
Run Code Online (Sandbox Code Playgroud)

r panel-data emmeans marginal-effects

8
推荐指数
1
解决办法
826
查看次数

分组时间序列(面板)数据的交叉验证

我使用面板数据:随着时间的推移,我观察了许多单位(例如人);对于每个单元,我都有相同固定时间间隔的记录。

当将数据分成训练集和测试集时,我们需要确保两个集是不相交的和顺序的,即训练集中的最新记录应该在测试集中最早的记录之前(参见例如这篇博客文章)。

面板数据是否有任何标准的 Python 交叉验证实现?

我试过 Scikit-Learn 的TimeSeriesSplit,它不能考虑组,GroupShuffleSplit不能考虑数据的顺序性质,见下面的代码。

import pandas as pd
import numpy as np
from sklearn.model_selection import GroupShuffleSplit, TimeSeriesSplit

# generate panel data
user = np.repeat(np.arange(10), 12)
time = np.tile(pd.date_range(start='2018-01-01', periods=12, freq='M'), 10)
data = (pd.DataFrame({'user': user, 'time': time})
        .sort_values(['time', 'user'])
        .reset_index(drop=True))

tscv = TimeSeriesSplit(n_splits=4)
for train_idx, test_idx in tscv.split(data):
    train = data.iloc[train_idx]
    test = data.iloc[test_idx]
    train_end = train.time.max().date()
    test_start = test.time.min().date()
    print('TRAIN:', train_end, '\tTEST:', test_start, '\tSequential:', train_end < test_start, …
Run Code Online (Sandbox Code Playgroud)

time-series python-3.x scikit-learn cross-validation panel-data

7
推荐指数
2
解决办法
2473
查看次数