【问题标题】:Split panel regression get one unique result in R拆分面板回归在 R 中得到一个独特的结果
【发布时间】:2021-01-22 19:01:15
【问题描述】:

我正在使用一个大数据库,但为了便于说明,我使用的是 Grunfeld 数据

我的目标是将我的数据分成多个块,以便我的模型可以运行,否则我会耗尽内存(需要 90,000 gb)。我将splm 用于我的数据,但由于它与plm 一起使用,因此我使用后者作为示例。一旦我设法运行每个块,我将希望得到一个一般的结果。

到目前为止,我所拥有的是:

data("Grunfeld", package="plm")
Grunfeld <- pdata.frame(Grunfeld, index = c("firm","year"))
s1<-split(Grunfeld, sample(rep(1:4)))
fm <- value ~ capital
fix <- lapply(1:length(s), function(x) plm(fm, data=s1[[x]],model = "within"))

现在我有一个系数和残差列表fix

有没有一种方法可以创建一个函数,以便我的结果模拟完整数据库的解决方案而不是 4 个块?

即

Residuals:
     Min.   1st Qu.    Median   3rd Qu.      Max. 
-1299.602   -88.290   -10.197    84.142  1324.118 

Coefficients:
        Estimate Std. Error t-value  Pr(>|t|)    
capital 0.551055   0.098634  5.5869 7.971e-08 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Total Sum of Squares:    23078000
Residual Sum of Squares: 19807000
R-Squared:      0.14174
Adj. R-Squared: 0.09633
F-statistic: 31.213 on 1 and 189 DF, p-value: 7.9714e-08

【问题讨论】:

    标签: r function dataframe split panel-data


    【解决方案1】:

    考虑基于数据帧的nrow 进行拆分。下面根据数据框大小将数据分成四个块。

    num <- ceiling(nrow(Grunfeld) / 4)
    chunks <- ceiling(1:nrow(Grunfeld) / num)
    fm <- value ~ capital
    
    df_list <- split(Grunfeld, chunks)
    fix <- lapply(df_list, function(df) plm(fm, data=df, model = "within"))
    

    split + lapply 的替代品是by:

    num <- ceiling(nrow(Grunfeld) / 4)
    chunks <- ceiling(1:nrow(Grunfeld) / num)
    fm <- value ~ capital
    
    fix <- by(Grunfeld, chunks, function(df) plm(fm, data=df, model = "within"))
    

    【讨论】:

    • 谢谢!但实际上它不起作用我得到:` eval(predvars, data, env) 中的错误:lapply 方法和 Error in uniqval[as.character(effect), , drop = F] : incorrect number of dimensions by 方法的对象'value' not found`。除了 df_list (对于我的大数据)是 1.2 GB,而 s1 是 10.3 MB 此外,我不断得到一个系数列表,而不是唯一的一个
    • 将行的大小num 增加到 400 或 4,000 或更大的 4 个部分。 Grunfeld 有多大?记住这个子集整个数据框,所以df_list会大于s1。请参阅编辑拆分为四个块。
    • 以Grunfeld 为例:我有 90 家公司,每家公司 744 年。当我将它分块时chunks &lt;- ceiling(1:nrow(Grunfeld) / num) 我是由公司执行的,但我需要在平衡面板中分块才能在plm 中运行它们
    • 平衡面板可能是一个不同的问题。您可以先使用split 和by 按公司拆分,然后在每次拆分时运行块。为确保面板不丢失年份,需要额外的工作。
    • 对不起,你是对的,让我带着问题再来一次,因为这个问题不清楚,对不起
    猜你喜欢
    • 2010-10-29
    • 2011-06-26
    • 1970-01-01
    • 2021-09-26
    • 2021-08-05
    • 1970-01-01
    • 1970-01-01
    • 2019-12-01
    • 1970-01-01
    相关资源
    最近更新 更多