使用面板数据

时间:2016-08-20 19:04:27

标签: r

我是R的新手,但我需要使用面板数据为不同的ID运行几个简单的回归。 我有4列1. ID 2.时间3. Y 4. X和我需要为每个ID回归Y~X。我有100个ID,每个ID有120个时间段,所以我需要运行100个简单的回归,包含120个观察值。

我该怎么做?

非常感谢你提前!!!

2 个答案:

答案 0 :(得分:2)

我们可以使用data.table

library(data.table)
setDT(df1)[, coef(lm(Y~X)), by = ID]

或者获取pvalues

setDT(df1)[,  summary(lm(Y~X))$coef[,4], by = ID]

如果我们使用broom,那么我们可以获得更多的输出列

library(broom)
setDT(df1)[, glance(lm(Y~X)), Species]

broom/dplyr

library(dplyr)
df1 %>%
   group_by(ID) %>%
   do(model = lm(Y~X, .)) %>%
   glance(model)

可重复的示例

data(iris)
iris %>% 
    group_by(Species) %>%
    do(model = lm(Sepal.Width ~Petal.Width, .)) %>%
    glance(model)
#     Species r.squared adj.r.squared     sigma statistic      p.value    df     logLik       AIC       BIC deviance df.residual
#       <fctr>     <dbl>         <dbl>     <dbl>     <dbl>        <dbl> <int>      <dbl>     <dbl>     <dbl>    <dbl>       <int>
#1     setosa 0.0541735    0.03446878 0.3724741  2.749265 1.038211e-01     2 -20.546993 47.093987 52.830056 6.659375          48
#2 versicolor 0.4408943    0.42924626 0.2370691 37.851387 1.466661e-07     2   2.043799  1.912403  7.648472 2.697685          48
#3  virginica 0.2891514    0.27434209 0.2747206 19.524930 5.647610e-05     2  -5.326334 16.652669 22.388738 3.622626          48

data.table/broom

as.data.table(iris)[, glance(lm(Sepal.Width~Petal.Width)), by = Species]
#     Species r.squared adj.r.squared     sigma statistic      p.value df     logLik       AIC       BIC deviance df.residual
#1:     setosa 0.0541735    0.03446878 0.3724741  2.749265 1.038211e-01  2 -20.546993 47.093987 52.830056 6.659375          48
#2: versicolor 0.4408943    0.42924626 0.2370691 37.851387 1.466661e-07  2   2.043799  1.912403  7.648472 2.697685          48
#3:  virginica 0.2891514    0.27434209 0.2747206 19.524930 5.647610e-05  2  -5.326334 16.652669 22.388738 3.622626          48

答案 1 :(得分:1)

nlme包有lmList

library(nlme)
fm <- lmList(Y ~ X | ID, DF, pool = FALSE)

或使用pool = TRUE(默认值),如果您想要一个共同的池化方差。另请查看对"lmList"类对象进行操作的这些方法:

methods(class = "lmList")