我正在寻找在计算从各个测量(自动)协方差矩阵随时间提高效率t与t, 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) 我想在一个组中创建一个包含上一年变量值的变量.
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 …
将字典数据框转换为面板数据框时出现错误
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) 我在R(时间和横截面)中有一个面板数据集,并且想要计算由两个维度聚类的标准误差,因为我的残差是双向相关的.谷歌搜索我发现http://thetarzan.wordpress.com/2011/06/11/clustered-standard-errors-in-r/提供了执行此操作的功能.它似乎有点特别,所以我想知道是否有一个已经过测试的包并且这样做了吗?
我知道sandwichHAC标准错误,但它没有做双聚类(即沿着两个维度).
我试图预测包含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) 我的数据框如下所示:
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的估计器的系数要快得多.
我一直在对递归神经网络进行一些研究,但我无法理解它们是否以及如何用于分析面板数据(意味着在几个主题的不同时间段捕获的横截面数据 - 参见样本数据我见过的大多数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,但我对其他实现开放).
我试图在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) 这是运行单个固定效应方法的三种不同方法,它们给出或多或少相同的结果(见下文)。我的主要问题是如何使用第二个模型 ( model_plm) 或第三个模型 ( model_felm) 获得预测概率或平均边际效应。我知道如何使用第一个模型 ( model_lm) 来做到这一点,并使用下面的示例来展示ggeffects,但这仅在我有一个小样本时才有效。
由于我有超过一百万人,我的模型只能使用model_plm和来工作model_felm。如果我使用model_lm,则需要花费大量时间来运行一百万个人,因为它们是在模型中受到控制的。我还收到以下错误:Error: vector memory exhausted (limit reached?)。我检查了 StackOverflow 上的许多线程来解决该错误,但似乎没有任何解决方案。
我想知道是否有有效的方法来解决这个问题。我的主要兴趣是提取交互的预测概率residence*union。我通常使用以下软件包之一提取预测概率或平均边际效应:ggeffects、emmeans或margins。
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) 我使用面板数据:随着时间的推移,我观察了许多单位(例如人);对于每个单元,我都有相同固定时间间隔的记录。
当将数据分成训练集和测试集时,我们需要确保两个集是不相交的和顺序的,即训练集中的最新记录应该在测试集中最早的记录之前(参见例如这篇博客文章)。
面板数据是否有任何标准的 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
panel-data ×10
r ×7
plm ×3
data.table ×2
regression ×2
dplyr ×1
emmeans ×1
lag ×1
na ×1
pandas ×1
predict ×1
python ×1
python-3.x ×1
scikit-learn ×1
statistics ×1
time-series ×1