tags:

views:

287

answers:

4

Hi

I would like to know how I can access the individual fields contained in an R object. Or, more precisely, how to get R to tell me how.

For example, if I run the following code:

dx.ct <- ur.df(dat1[,'dx'], lags=3, type='trend')
summary(dx.ct)

then I get this output:

############################################### 
# Augmented Dickey-Fuller Test Unit Root Test # 
############################################### 

Test regression trend 


Call:
lm(formula = z.diff ~ z.lag.1 + 1 + tt + z.diff.lag)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.46876 -0.24506  0.02420  0.15752  0.66688 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)  
(Intercept)  1.099231   0.561377   1.958   0.0606 .
z.lag.1     -0.239438   0.141093  -1.697   0.1012  
tt          -0.019831   0.007799  -2.543   0.0170 *
z.diff.lag1 -0.306326   0.193001  -1.587   0.1241  
z.diff.lag2 -0.214229   0.186135  -1.151   0.2599  
z.diff.lag3 -0.223433   0.179040  -1.248   0.2228  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 0.3131 on 27 degrees of freedom
Multiple R-squared: 0.3326,     Adjusted R-squared: 0.209 
F-statistic: 2.691 on 5 and 27 DF,  p-value: 0.04244 


Value of test-statistic is: -1.697 2.4118 3.2358 

Critical values for test statistics: 
      1pct  5pct 10pct
tau3 -4.15 -3.50 -3.18
phi2  7.02  5.13  4.31
phi3  9.31  6.73  5.61

So, I know that I should be able to access all of the values above individually, I don't know how to point to them. Is there some way to ask R to show me how they are stored?

I am thinking along the lines of:

showobjects(summary(dx.ct))

And then it outputs

$formula
$residuals
$coefficients
etc.

and then I can do

showobjects(summary(dx.ct)$residuals)

which then outputs

$min
$1Q
$median
etc.

Thanks
Karl

+3  A: 

One thing that you can do is use unclass().

 ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
 trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
 group <- gl(2,10,20, labels=c("Ctl","Trt"))
 weight <- c(ctl, trt)
 anova(lm.D9 <- lm(weight ~ group))
 s <- summary(lm.D90 <- lm(weight ~ group - 1))

Use names to investigate it:

 > names(unclass(s))
  [1] "call"          "terms"         "residuals"     "coefficients"  "aliased"            "sigma"         "df"            "r.squared"     "adj.r.squared"
 [10] "fstatistic"    "cov.unscaled"

And then reference a specific value:

 > s$r.squared
 [1] 0.9817833
Shane
+5  A: 

Besides unclass(), try str(). Or read the source code to see how the other accessors do it.

Edit: Here is for example the source code of the S4 class method summary for the ur.df object you were looking at:

setMethod("summary", "ur.df", function(object){
  return(new("sumurca", classname="ur.df", [email protected],\
    testreg=object@testreg, teststat=object@teststat, cval=object@cval, \
    bpoint=NULL, signif=NULL, model=object@model, type=NULL, auxstat=NULL, \
    lag=NULL, H=NULL, A=NULL, lambda=NULL, pval=NULL, V=NULL, W=NULL, P=NULL))
})

and it uses a standard @ accessor for S4 object elements.

Dirk Eddelbuettel
+4  A: 

As another alternative, take a look at attributes. e.g.

example(ur.df)
attributes(lc.df) #lc.df is an ur.df object created during by example.

$y
[1] 10.4831 10.4893 10.5022 10.5240 10.5329 10.5586 10.5190 10.5381
[9] 10.5422 10.5361 10.5462 10.5459 10.5552 10.5548 10.5710 10.5861
[17] 10.5864 10.5802 10.6006 10.6168 10.6275 10.6414 10.6629 10.6758
[25] 10.6881 10.7240 10.7143 10.7222 10.7156 10.6964 10.6990 10.7081
[33] 10.7142 10.7078 10.7073 10.6954 10.6910 10.6967 10.7015 10.7083
[41] 10.7127 10.6922 10.6874 10.6989 10.7224 10.7452 10.7462 10.7663
[49] 10.7633 10.7737 10.8282 10.7872 10.8015 10.8139 10.7909 10.8029
[57] 10.7868 10.7979 10.8007 10.8008 10.7991 10.7956 10.8005 10.8160
[65] 10.8260 10.8405 10.8482 10.8633 10.8633 10.8615 10.8732 10.8649
[73] 10.8793 10.8909 10.8938 10.9116 10.9202 10.9409 10.9663 10.9700
[81] 10.9808 10.9878 11.0048 11.0272 11.0420 11.0701 11.0751 11.0964
[89] 11.1069 11.1123 11.1231 11.1223 11.1303 11.1307 11.1389 11.1325
[97] 11.1261 11.1232 11.1220

$model
[1] "trend"

$lags
[1] 3

# etc.

If you don't want the full output, then names(attributes(lc.df)) returns only the, um, names.

[1] "y"         "model"     "lags"      "cval"      "res"       "teststat"  "testreg"   "test.name" "class"
Richie Cotton
A: 

Someone should give Richie Cotton a medal!

That was terribly helpful advice. I have been pulling out my hair trying to string parse to get the the test statistic.

attributes(ur.df(Data,lags = 5))$teststat[1] !!!!!!!!!!!!!!!

HUGE HELP

Jim