On Aug 20, 2011, at 12:04 PM, Stephen Davies wrote:


I'm using chisq.test() on a matrix of categorical data, and I see
that the
"residuals" attribute of the returned object will give me the
Pearson residuals.

Actually they are not an attribute in the R sense, but rather a list
value.

   Oh. I was just going by:

attributes(my.chisq.test)
$names
[1] "statistic" "parameter" "p.value" "method" "data.name" "observed"
[7] "expected"  "residuals"

$class
[1] "htest"

which I interpreted as "this object has 8 attributes, called 'statistic',
'parameter', ..., 'residuals'." Is that not the right terminology?

The names attribute let's you know what characters to use if you want to access values in a list. Unless you are doing programming attributes is not a particular useful function. It is much more common to access the names attribute with the `names` function:

> names(Xsq)
[1] "statistic" "parameter" "p.value" "method" "data.name" "observed" "expected"
[8] "residuals" "stdres"

So "stdres" is not an attribute but rather one value in a particular attribute called "names".

You would get (much) more information by using str on the htest object as below:

> str(Xsq)
List of 9
 $ statistic: Named num 30.1
  ..- attr(*, "names")= chr "X-squared"
 $ parameter: Named num 2
  ..- attr(*, "names")= chr "df"
 $ p.value  : num 2.95e-07
 $ method   : chr "Pearson's Chi-squared test"
 $ data.name: chr "M"
 $ observed : table [1:2, 1:3] 762 484 327 239 468 477
  ..- attr(*, "dimnames")=List of 2
  .. ..$ gender: chr [1:2] "M" "F"
  .. ..$ party : chr [1:3] "Democrat" "Independent" "Republican"
 $ expected : num [1:2, 1:3] 704 542 320 246 534 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ gender: chr [1:2] "M" "F"
  .. ..$ party : chr [1:3] "Democrat" "Independent" "Republican"
 $ residuals: table [1:2, 1:3] 2.199 -2.505 0.411 -0.469 -2.843 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ gender: chr [1:2] "M" "F"
  .. ..$ party : chr [1:3] "Democrat" "Independent" "Republican"
 $ stdres   : table [1:2, 1:3] 4.502 -4.502 0.699 -0.699 -5.316 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ gender: chr [1:2] "M" "F"
  .. ..$ party : chr [1:3] "Democrat" "Independent" "Republican"
 - attr(*, "class")= chr "htest"

Now you can see that the values in the stdres object are really a list element and are in a table with particular row and column names. You get that object one of two ways. you ca use the "$" method as Dalgaard suggested or you can use "[[" with the name of the object:

Xsq[["stdres"]]




That's cool. However, what I'd really like is the standardized
(adjusted)
Pearson residuals, which have a N(0,1) distribution. Is there a
way to do that
in R (other than by me programming it myself?)

?scale

chisq.test(...)$stdres, more likely.

"scale" is not what I want. As for "$stdres," that would be wonderful, but as you can see from the above list of attributes, it's not one of the 8
returned. What am I missing?

David Winsemius, MD
West Hartford, CT

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to