群馬大学 | 医学部 | サイトトップ | 医学情報処理演習

医学情報処理演習:2010年度第2回課題解答例

課題

前回も参照したhttp://phi.med.gunma-u.ac.jp/medstat/sample02.txtは,ソロモン諸島の首都のとある学校で実施した健診結果を,昨年の実習で入力してもらった後にエラーを訂正したタブ区切りテキスト形式データである。

このファイルをインターネットから直接Rのデータフレームxに読み込み,男女別(変数名はSEX)に記号を変えてBody Mass Index(変数名はBMI)を横軸,収縮期血圧(変数名はSBP)を縦軸にとった散布図を描くコードは以下のように書ける。ただし,変数名を書くべきところを,ア,イ,ウ,エとしてある。

x <- read.delim("http://phi.med.gunma-u.ac.jp/medstat/sample02.txt")
plot(ア ~ イ, pch=paste(ウ), col=c("red","blue")[as.integer(エ)], data=x)

ア〜エに入る正しい変数名を解答せよ(注:同じ変数名が入る場合もある)。また,できあがった散布図から読み取れることを文章で記せ。さらに,もしあれば感想・要望・質問などとともに下のフォームから送信せよ。学籍番号と氏名の入力を忘れないこと。

(The program listed above is to draw scattergram of systolic blood pressure (SBP) as vertical axis and body mass index (BMI) as horizontal axis, with different symbols for males and females (SEX). Please fill appropriate variable names in ア, イ, ウ, and エ. In addition, please explain what the graph means.)

解答例

項目入力欄
SBP
BMI
SEX
SEX
読み取れること(What the graph means)(例)BMIと収縮期血圧の関係は,男性の方が女性に比べて弱い。また,同じBMIのところで収縮期血圧を比べると,女性の方が男性よりも低い傾向がある。

要望・質問

授業のテンポが速い(3人)/今回の授業のスピードは適切だった(1人)/課題を読んで自分でできたら授業中の途中退出はありでしょうか?(1人)
コンピュータを使った統計演習という科目の性質上,コンピュータ操作の得意・不得意によって,適切と感じる速さは大きく違ってくると思います。たぶん,これ以上ゆっくりやるのは時間的に無理なので,予習・復習をしてください。また,テキストの内容が完全に理解できて,課題も自力でできてしまったら,演習としてやるべきことはできています。ただ,できたら途中退出ではなくて,まだ終わっていない周囲の人に教えてあげるとか,時間の都合上説明を省いたところを発展的に自習してみることをお薦めします。
スクリーンにRの入力画面が出ている時間を長くしてほしい(同様6人)
わかりました。出力ではなく入力が長く出ているようにします。字を大きくしすぎると流れるのも早いので,20ポイント程度にしたいと思います。
後ろの席だとスクリーンの文字が見えない(2人)
あまり大きくすると早く流れてしまうので次回から20ポイントにします。ご了承ください。
後ろの大きなスクリーンに表示してほしい,PCがフリーズするので改善要望,など
前回も回答しましたが,メディアセンターに要望は出していますので,対応されるのを待ってください。
課題そのものを授業で扱ってほしい
今回やったように,ほぼ同様で簡単に応用できるであろう内容を授業で扱う方が,課題そのものをやるよりも,ただ丸移しするだけではなく理解が深まると思うので,今後もっと難しい内容にならない限り,課題そのものは授業では扱いません。その分,次回に解答例として提示するので,復習してください。
先生の言葉が聞き取りづらいときがあり、作業についていけないときがあります。もう少しはっきりとお話していただけませんでしょうか
申し訳ありません。とくにBクラスの後半になると疲れて滑舌が悪くなるのは自覚しています。改善できるよう努力します。
円グラフに「値」を入れるためにはどうしたらいいのですか。棒グラフでx軸の各項目の名前(ex.MARITAL, BMI,etc)を変えるにはどうしたらいいのですか。
●円グラフの内部に,それぞれの度数を表示することは,実は難しいです(後述)。が,カテゴリラベルの代わりに「値」を表示するなら簡単です。今回説明に使った,x <- read.delim("http://phi.med.gunma-u.ac.jp/medstat/sample02.txt")として読み込んだとき,変数MARITALのカテゴリ別人数を円グラフに表示するには,tab <- table(x$MARITAL)としてから,pie(tab, labels=paste(tab))とします。カテゴリ名の後にカッコ書きで度数をつけたければ,pie(tab, labels=sprintf("%s (%d)",names(tab),tab))とします。割合(%)を表示したければ,pie(tab, labels=sprintf("%3.1f",tab/sum(tab)*100))とします。
●棒グラフの項目名は,ベクトルの各要素につけられた名前なので,そこを書き換えれば変わります。例えば上にも出てきた変数MARITALのカテゴリ名を日本語にしたければ,tab <- table(x$MARITAL)としてから,names(tab) <- c("離別","既婚","未婚","死別")とし,そのあとでbarplot(tab)とすればいいです。
高度ですが参考までに,円グラフの内部にそれぞれの度数を表示する方法を説明しておきます(暇があれば後で読んでください)。Rのプロンプトに対して,pieと打ってEnterキーを押すと,Rがどういう座標系で円グラフを作っているかがわかります。円グラフの座標系は,正方形の左下が(-1,-1),右上が(1,1)です。デフォルトで円グラフを作らせると,最初のカテゴリに対する扇形の始点の座標が(1,0)になり,そこから左回りに,度数に応じた(100%で360度,Rの三角関数はラジアン単位なので,2*pi)角度を中心角とする扇形が描かれていっていることがわかります。扇形の真ん中付近に度数をプロットするには,text()関数を使って,累積度数からそのカテゴリの度数の半分を引いた値を総数で割った値をPと書くことにすると,x座標が0.5*cos(P*pi*2),y座標が0.5*sin(P*pi*2)となるところに度数を表示させれば良いわけです。上の例では,次のように打てばできます。
x <- read.delim("http://phi.med.gunma-u.ac.jp/medstat/sample02.txt")
tab <- table(x$MARITAL) # ここまでは同じ
PX <- (cumsum(tab)-tab/2)/sum(tab)*pi*2 # 度数を表示させるべき場所までの角度(ラジアン単位)
pie(tab) # 円グラフの表示
text(0.5*cos(PX),0.5*sin(PX),paste(tab)) # 度数の表示

リンクと引用について