裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

ダメ出し:ベクトルと行列の演算は,場合によって注意が必要

2012年02月23日 | ブログラミング

2011-05-21 ■Rでクロス集計表の残差分析 にて

# クロス集計表の入力
X <- matrix(c(58, 11, 10, 35, 25, 23), nrow=3,
            dimnames=list(c("賛成", "中立", "反対"), c("男性", "女性")))
X
#      男性 女性
# 賛成   58   35
# 中立   11   25
# 反対   10   23

# 比率(縦%)を確認
round(X / apply(X,2,sum) *100, 1)
#      男性 女性
# 賛成 73.4 42.2
# 中立 13.3 31.6
# 反対 12.7 27.7

これに対して,「縦方向%が間違っているんじゃないか」というコメントがある

これは,コメントした人が正解

round(X / apply(X,2,sum) *100, 1) は,まちがい

X / apply(X,2,sum) は,正しいベクトル演算をやるためには t(t(X) / apply(X,2,sum)) でなければならない。
t(t(foo) ...) は,冗長に見えるかも知れないが,必須。

また,apply(X,2,sum)colSums(X) とするのが,吉。

で,正解は以下の通り。

> round(t(t(X) / colSums(X)) * 100, 1)
     男性 女性
賛成 73.4 42.2
中立 13.9 30.1
反対 12.7 27.7

蛇足ながら,あたりまえだけど,横%は t(t(foo) ...) は不要。

> round(X / rowSums(X) * 100, 1)
     男性 女性
賛成 62.4 37.6
中立 30.6 69.4
反対 30.3 69.7

コメント (2)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村