0

次のように構造化されたデータがあります。

group_id, months_from_start, perc_total_downloads, experience_ratio
1             1                    1.2                4
1             2                    1.7                6
…
235           1                    6.7                3
235           2                   18                  8
…

約 300 のグループがあり、各グループには 70 ほどの連続したデータ要素があります。

次のスクリプトを発行して、各グループの 2 次多項式を推定しました。

s.1<-lm(xts(s[s$group_id == 1,][,-2], order.by=as.Date(s[s$group_id == 1,][,2]))$perc_total_downloads ~ poly(xts(s[s$group_id == 1,][,-2], order.by=as.Date(s[s$group_id == 1,][,2]))$months_from_start, 2, raw=TRUE))
s.235<-lm(xts(s[s$group_id == 235,][,-2], order.by=as.Date(s[s$group_id == 235,][,2]))$perc_total_downloads ~ poly(xts(s[s$group_id == 235,][,-2], order.by=as.Date(s[s$group_id == 235,][,2]))$months_from_start, 2, raw=TRUE))
s.599<-lm(xts(s[s$group_id == 599,][,-2], order.by=as.Date(s[s$group_id == 599,][,2]))$perc_total_downloads ~ poly(xts(s[s$group_id == 599,][,-2], order.by=as.Date(s[s$group_id == 599,][,2]))$months_from_start, 2, raw=TRUE))
s.1111<-lm(xts(s[s$group_id == 1111,][,-2], order.by=as.Date(s[s$group_id == 1111,][,2]))$perc_total_downloads ~ poly(xts(s[s$group_id == 1111,][,-2], order.by=as.Date(s[s$group_id == 1111,][,2]))$months_from_start, 2, raw=TRUE))
s.1537<-lm(xts(s[s$group_id == 1537,][,-2], order.by=as.Date(s[s$group_id == 1537,][,2]))$perc_total_downloads ~ poly(xts(s[s$group_id == 1537,][,-2], order.by=as.Date(s[s$group_id == 1537,][,2]))$months_from_start, 2, raw=TRUE))

これらの新しい変数のそれぞれについて、要約ステートメントを発行して興味深い情報を明らかにすることができます。

> summary(s.44375)

Call:
lm(formula = xts(s[s$group_id == 44375, ][, -2], order.by = as.Date(s[s$group_id == 
44375, ][, 2]))$perc_total_downloads ~ poly(xts(s[s$group_id == 
44375, ][, -2], order.by = as.Date(s[s$group_id == 44375, 
][, 2]))$months_from_start, 2, raw = TRUE))


Residuals:
       Min         1Q     Median         3Q        Max 
-0.0064004 -0.0017315 -0.0002022  0.0012087  0.0078436 


Coefficients: (3 not defined because of singularities)
                                                                                                                                   Estimate Std. Error t value Pr(>|t|)    
(Intercept)                                                                                                                       1.993e-03  1.137e-03   1.753    0.084 .  
poly(xts(s[s$group_id == 44375, ][, -2], order.by = as.Date(s[s$group_id == 44375, ][, 2]))$months_from_start, 2, raw = TRUE)1.0  7.769e-04  6.707e-05  11.583   <2e-16 ***
poly(xts(s[s$group_id == 44375, ][, -2], order.by = as.Date(s[s$group_id == 44375, ][, 2]))$months_from_start, 2, raw = TRUE)2.0 -9.258e-06  8.404e-07 -11.017   <2e-16 ***
poly(xts(s[s$group_id == 44375, ][, -2], order.by = as.Date(s[s$group_id == 44375, ][, 2]))$months_from_start, 2, raw = TRUE)0.1         NA         NA      NA       NA    
poly(xts(s[s$group_id == 44375, ][, -2], order.by = as.Date(s[s$group_id == 44375, ][, 2]))$months_from_start, 2, raw = TRUE)1.1         NA         NA      NA       NA    
poly(xts(s[s$group_id == 44375, ][, -2], order.by = as.Date(s[s$group_id == 44375, ][, 2]))$months_from_start, 2, raw = TRUE)0.2         NA         NA      NA       NA    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 


Residual standard error: 0.002866 on 69 degrees of freedom
Multiple R-squared: 0.6619,Adjusted R-squared: 0.6521 
F-statistic: 67.53 on 2 and 69 DF,  p-value: < 2.2e-16 

私の目的のために、この情報を表に転記する必要があります。これは、この形式から切り取って貼り付けるのは非常に面倒で時間がかかります。

group_id   intercept est  intercept stnd err    intercept t value   …
44375         1.993e-03         1/137e-03           1.753          ...
…

また、科学表記法よりも従来の表記法があると便利ですが、それがなくても生きていけると思います。

手で切り貼りせずにこれを行う方法はありますか?

ありがとう --sw

4

1 に答える 1

2

summary 関数は R リストを返すだけです。例えば、

R> x = runif(10);y=runif(10)
R> m = lm(y ~ x)

あなたが興味を持っている部分は、4 番目の要素です。

R> summary(m)[[4]]
            Estimate Std. Error t value Pr(>|t|)
(Intercept)  0.44041     0.1768  2.4911  0.03746
x           -0.05899     0.3143 -0.1877  0.85579

これは単なるマトリックスです。


上記はあなたの質問に答えますが、あなたのコードは私を泣かせます! 特に、forループとplyrパッケージを読んでください。たとえば、最後の 2 行でほぼすべてのことができると思います。

##Load the package and create some data
library(plyr)
dd = data.frame(group_id = sample(1:3, 10, TRUE), x = runif(10), y=runif(10)) 

##Split up dd by group_id and do some regression
dd1 = ddply(dd, .(group_id), summarise, summary(lm(y ~ x))[[4]])

##Label the column names
colnames(dd1)[2:5] = c("Estimate"   "Std. Error" "t value"    "Pr(>|t|)")
于 2012-09-19T14:14:15.013 に答える