2016-08-20 123 views
-3

我是R新手,但我需要針對不同ID使用面板數據運行幾個簡單迴歸。 我有4列1. ID 2.時間3. Y 4. X和我需要回歸Y〜X爲每個ID。我有100個ID,每個ID有120個時間段,所以我需要用120個觀測值運行100個簡單迴歸。在R中使用面板數據在不同ID中運行多個迴歸

我該怎麼辦呢?

非常感謝您提前!

回答

2

我們既可以使用data.table

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

或者如果我們使用broom,那麼我們就可以得到輸出

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

的多個列,以獲得 pvalues

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

或用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 
+0

非常感謝您!唯一的問題是我的R無法找到瀏覽功能。它是否在我可能沒有安裝的pacage中? – Beatrice

+0

@Beatrice'glance'來自'庫(掃帚)'如果你沒有安裝它,'install.packages(「掃帚」)'然後加載'庫(掃帚)' – akrun

+1

非常感謝你!我會馬上嘗試! – Beatrice

1

的NLME封裝具有lmList

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

或使用pool = TRUE(默認值)如果您想要共同的彙總方差。還請查看這些在"lmList"類對象上運行的方法:

methods(class = "lmList") 
+0

謝謝你,我試過像你說的,但是,我怎樣才能得出與係數相關的pvalues?謝謝! – Beatrice

+0

嘗試'摘要(fm)' –

+0

我試過了,但沒有顯示pvalues! – Beatrice