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.