【お知らせ】本発表の資料は以下URLで公開しています。後ほど再掲します。
http://stat.web.nitech.ac.jp/haifu/#StatEdu2403
「横書き」であること
音声も保存可。オンライン講義で重宝。 <=== 本学のガイドブック
LaTeXやMS-Wordも考えたが…: どうもシックリ来ない
ul, ol, li, h, b, p, br, font, pre, code, hr, href, img, a
図1. 回帰直線を説明する部分のR
Markdownソース(右上)、生成されたHTML(右下)とWebブラウザの表示(左)
図2. 回帰式を説明する部分の R
Markdownソース(右上)、生成されたHTML(右下)とWebブラウザの表示(左)
HTMLの可能性(再認識): リモート会議での提示にも有効?
【例】DNC
CBT報告書解説
(URLは何れも2024年2月28日現在)
回帰平面の方程式: \[ \textbf{y} = a_{0} + \sum_{j=1}^{p} a_{j}\textbf{x}^t_{j} \]
測定値と予測値のズレ(残差): \[ \varepsilon_{i} = y_{i} - (a_{0}+\sum_{j=1}^{p}a_{j}x_{ij}) \;\;\;\;\;\; (i=1,2,...,n) \]
残差の2乗和を最小に: \[ S = \sum_{i=1}^{n}{\varepsilon_{i}^2} = \sum_{i=1}^{n} \{ {y_{i} - ( a_{0}+\sum_{j=1}^{p}a_{j}x_{ij}})\}^2 \;\;\; { \to min} \]
行列表記: \[ {\textbf{Y}}={\textbf{X} \textbf{A}} \]
ここで、 \[ \textbf{Y}= \begin{pmatrix} y_{1} \\ y_{2} \\ y_{3} \\ \vdots \\ y_{i} \\ \vdots \\ y_{n} \end{pmatrix}, \;\;\; %%% {\textbf{X}}= \begin{pmatrix} 1 & x_{11} & x_{12} & \cdots & x_{1j} & \cdots & x_{1p}\\ 1 & x_{21} & x_{23} & \cdots & x_{2j} & \cdots & x_{2p} \\ 1 & x_{31} & x_{32} & \cdots & x_{3j} & \cdots & x_{3p} \\ \vdots & \vdots & \vdots & \ddots & \vdots & & \vdots \\ 1 & x_{i1} & x_{i2} & \cdots & x_{ij} & \cdots & x_{ip} \\ \vdots & \vdots & \vdots & & \vdots & \ddots & \vdots \\ 1 & x_{n1} & x_{n2} & \cdots & x_{nj} & \cdots & x_{np} \\ \end{pmatrix}, \;\;\; %%% \textbf{A}= \begin{pmatrix} a_{0} \\ a_{1} \\ a_{2} \\ \vdots \\ a_{j} \\ \vdots \\ a_{p} \end{pmatrix}. \]
\(\textbf{A}\) を求めるには、左側から\(\textbf{X}^t\)をかけて、
\[ \textbf{X}^t {\textbf{Y}}={\textbf{X}^t {\textbf{X} \textbf{A}}} \]
その後、今度は左側から\(({{\textbf{X}^t {\textbf{X}}}})^{-1}\)をかけて、
\[ \textbf{A} = ({{\textbf{X}^t {\textbf{X}}}})^{-1} \textbf{X}^t {\textbf{Y}} \]
よって、\(\textbf{A}\) を求めるには、\(({{\textbf{X}^t {\textbf{X}}}})\)が逆行列を持つことが条件となる。大人数を対象とした教室で、講義内容を学生に伝える方策として、かつては黒板への板書やOHP(Over Head Projector)といったアナログ的な手法が使われていたが、現在では電子資料を提供することが一般的になった。特に、2020年初から感染が拡大したCOVID-19の脅威は教育の諸活動にも多大な影響を与え、教室に集っての開講を避ける必要からオンライン講義と呼ばれる運営形態が否応なく導入され、益々アナログ的な手法は採れなくなった。
その際に用いられたのがMoodle等の学習管理システム(LMS, Learning Management System)で、これに電子資料や説明動画を掲載し、個々の学生にはインターネット環境下から参照させて学修を進める形態が普及した。元々、LSM はeラーニングを実現するために開発されてきたプラットフォームであり、教員側からの情報提示だけでなく、学生からの質問・レポート等の提出や、個々の学生のアクセス記録に基づいて学修行動を把握する機能も備えており、オンライン講義との相性も良かったことから、これを機に導入した大学も多かったと思われる。
本発表では、統計学(やこれに類する科目)の講義における電子資料の作成に、HTML(Hyper Text Markup Language)が有効であることと、これを生成する機能を有している R Markdown を有機的に活用することを提案するものである。加えて、R Markdown が生成した HTML の一部を切り出して利用することができることも紹介する。
統計学の講義を念頭に考えた場合、講義内容の説明に必要な構成要素とも言うべき「部品」としては、文字(文章)、数式、画像、グラフ、表、他のサイトへのリンクぐらいが挙げられるであろう。特に文字については、文字サイズやフォント、色、下線等の修飾ができると効果的である。加えて、統計プログラムを学習内容に含んでいる講義の場合であれば、プログラムの掲載も必要になる。講義の目的にも依存するであろうが、プログラムを簡単にコピー&ペーストで取り込めるようになっていると講義時間中にプログラムの入力のための演習時間を短くすることが出来るため、より高効率に講義を進行することが可能になる。
よって、講義資料を提示するツールにはこれらが容易に掲載・実現できることが求められる。表1には、講義資料を作成・提示するためのツール・環境に関する構成要素の掲載可能性と、幾つかの特徴をまとめた。
表1. 作成ツールの比較表
世間には多くのLMSが発表・運用されており、中でも多くの大学で採用されているMoodle は、オープンソースであり、動画・音声等のマルチメディアや、PDFファイル、Power Point、MS-Word等だけでなく、HTMLで記述したの電子ファイルも掲載可能である。
他の教員がどのようなツールを用いて電子的な講義資料を作成しているかを網羅的に把握しているわけではないが、COVID-19 対応としてリモート講義を強いられた際、本学ではMoodle上に講義資料を掲載することが推奨され、Power Point で作成した資料をアップロードすることが例示されていた。その理由はPower Point にはスライド毎に音声を録音する機能があるため、画面に説明資料を提示し、それに呼応したナレーションを流すことによって講義の進行を模擬的に実現できたからであろう。事実、この方法でリモート講義を運営していた同僚も少なからずいた。
著者も当初この推奨された方法を試してはみたものの、Power Pointで提示情報(文字や図表)を作成後、スライド1枚ごとに対応する説明を音声で録音していく作業は非常に煩雑で、かつページが変わる度に説明を中断する必要もあったので、個人的には非常にストレスフルであった。加えて、Power Pointのスライドにはページの概念があるので、講義の進度や理解度に合わせて、より詳しい説明を追記しようとすると当該のページから溢れてしまい、文字を小さくしてページ内に収めたり、次ページとの調整が必要であったりと講義内容自身ではなく、体裁の整形に費やす時間が想像以上に多く必要になった。Power Pointが多機能であることは事実であるが、比較的動作の重いソフトウェアであることもネックとなった。
他にもLaTeXで講義資料を作成されている方を存じ上げているし、MS-Wordで作成することも考えなくは無かったが、どうも納得が行くものではなかった。
著者はこれまでも講義資料をHTML で記述して Web サーバーに掲載してきた。学生にはこれを印刷したものを配布すると共に、サーバーの URL も共有していたので、欠席した場合等には各自で印刷することも可能であった。また、統計分析用言語である SAS言語 や R言語のソースコードも掲載していたので、学生はいちいち印刷資料の文字(コマンド等)を手入力する必要はなく、Web サーバー上の資料からコピー&ペーストで統計分析用言語のソースコードを入手することができるというメリットにも重宝していた。
HTML は World Wide Web(いわゆるインターネット)の普及と呼応するように整備・拡張されてきた計算機言語で、その名称からも推察できる通り、構造化された文書を表現するためのものであり、Web ページの記述言語として広く利用されている。Google Chrome 等の Web ブラウザは、HTMLで記述された電子情報を表示するプログラムとして重宝されているが、視点を変えると、サーバーから HTML で記述された電子情報をダウンロードしてきて、それを規定されたルールに則って、画面に表示するツールとも言える。HTMLにはページの概念がなく、希望する場所に新たな記述を追記すれば、押し出された情報は下側に移動するだけである。
また、HTMLは数式を表示する機能も有しており、しかもその表記法は LaTeX のそれに準じるものなので、LaTeXユーザーであれば容易に記述することができると思われる。
計算機言語と言っても、Web ブラウザ側の解釈に冗長なところがあるので、文法上の厳密なルールに規定された記述がなされていなくても目的の表示ができるのも、個人的には好都合であった。HTML には多くのタグが規定されているが、その中でも表2に示したタグを駆使すれば構造化された文章の多くを記述することが可能であると考えている。加えて、表1に示したように、HTMLは統計学の講義資料に求められる構成要素を記述することに何の障害もない。
表2. 代表的な HTML のタグ
副次的なメリットとしては、上述のようにHTMLで記述された講義資料は、Web ブラウザに転送されて表示されるので、興味を持った表示の実現方法を知りたければ、そのソースコードを見ることによって把握することができる。いわばオープンソースであり、同様の表示を必要とした際の参考になる。
当初取っ付き難いと感じたMoodle であったが、使い込むに従って、強力な支援ツールであることも判った。
今更言うまでもないであろうが、統計解析用プログラミング言語であるR言語には、多くの支援ツールが開発・提供されており、その中の一つに RStudio という統合環境がある。名称からは想像し難いが、RStudio は R言語に特化されたものではなく、多くのプログラミング言語用の開発環境であるが、統計学関係ではもっぱらR言語の統合環境として利用されていると思われる(ちなみに手元の RStudio では 52 の言語をサポートしている)。R言語を利用して統計分析を進める環境として優れているRStudio だが、それ以外にR言語の計算結果を取り込んで報告書を作成するレポート機能も有しており、この機能を利用するにはR Markdown と呼ばれるマークアップ言語で記述する必要がある。RStudio の左上ペインに、データを読み込んだり分析したりするコマンド群をR Markdownの文法に則ったソースコード(.rmd ファイル)として記述し、コンパイル(knit と呼ばれる)することによって、計算結果をMS-WordやPDF(LaTeX経由で)、そしてHTMLのフォーマットで出力することができる。
R Markdownの文法はHTMLのそれと非常に類似しており、(これは既に広く知られていることなのかもしれないが)、R Markdownで定められていない(と思われる)タグもそのままHTMLに吐き出してくれるので、個人的には「R言語用に拡張されたHTML」といった捉え方をしている。希望に副わない表示をしてしまうHTMLが生成されてしまった場合にも、直接HTMLに手を加えることで修正することが可能である。
少し追加で習得する必要があるのは、chunk(チャンク)と呼ばれるR言語への指定であり、プログラム自身の評価や、その計算結果を表示させるか等を指定する命令群である。しかし、難しいものではないので、一度理解してしまえば以後は使い回すことができる。
加えて、R MarkdownのソースコードもHTMLのコードも何れもテキストファイルなので、編集には手慣れたテキストエディタを利用すれば良く、動作が軽いのも魅力である。
統計学の講義では、身近な生きたデータを用いるのが学生の理解を促進すると考えているが、毎年更新されるデータに基づいた講義を行っているような場合、新しい計算結果をこれまで書き溜めた講義資料に取り込もうとすると、R Markdown で記述しておけばデータファイルの名前を変更するだけで最新のデータに基づいた講義資料を生成することができるというメリットもある。
前節で述べたようにR Markdown を用いれば、R言語で記述した分析命令とその計算結果をまとめたWebページをHTMLで生成することができる。R Markdown が内部でどのような処理を行っているかを正確には把握出来ていないのだが、R言語の実行結果である統計量等の数値情報だけでなくヒストグラムや箱ひげ図、散布図等の図形情報も含まれる。これらがどのように HTML で実現されているかに興味を持ったので、生成されたHTMLを覗いてみたところ、図形情報については png という画像フォーマット(Portable Network Graphics)で作成されており、それが img というHTMLのタグに引用される形の記述となっていることが判った。つまり、生成されたWebページに含まれるグラフ群の中から、必要と考えるグラフだけを容易に抜き出すことができることを意味しており、事実、当該のグラフ部分だけを他の HTML に挿入してみると期待通りの表示となった。このテクニックはグラフ以外にも有効なので、R言語の出力を独立して利用したいような場合、重宝すると思われる。
なおデフォルトの画像フォーマットはpngであったが、陽に指定すればそれ以外のフォーマットでも作成することができるとなっている。
参考までに、著者が回帰分析の講義で用いた散布図部分(図1)と数式部分(図2)の、R Markdownのソースコード(右上)と生成されたHTML(右下)、およびWebブラウザの表示(左)を以下に示しておく。
Power Pointは、プレゼンテーションツールとしてデファクトスタンダードの地位を確立したと言っても過言ではないであろう。多機能であり洗練された提示が行えることから学会発表等で多用されていることも納得できる。しかし、それを講義資料の作成・提示ツールとして用いるには、やや重厚過ぎるように感じると共に、講義内容の洗練に注力すべき労力が奪われるように危惧している。
講義資料をどのような方法で準備するかは、それぞれの教員が判断することであることは改めて言うまでもないことではあるが、こと「統計学の講義資料」という限定的な目的であれば、HTML もその選択肢に加えていただけるのではないかと、今回紹介することにした次第である。しかも、R Markdownがその作成を強力にバックアップしてくれるのが嬉しい点である。
利用するファイルはテキストファイルであるので、軽快に編集ができ、しかも何れのツールも無料で利用できることもメリットではないだろうか。
ここに至るまでの過程では、講義資料の作成にHTMLを用いている人がおられるのではないかと検索してみたが、的確なものはヒットしなかった。その意味では著者の気付いていない大きな欠点があるのかもしれない。一方で、著者の調査不足から、もう既に広く利用されていたり、より高度な実装方法が実現されていたりするのかもしれない。そのような際には是非ご教授いただければ幸いである。
個人的な動機としては、リモート講義を強いられたことにより講義の運営が難しくなりかけたところに、R Markdown とそのHTML生成機能を知ることで、大いに救われた。「必要は発明の母」の諺ではないが、窮地を救ってくれたのは RStudio であったことから、語弊を覚悟して言えばCOVID-19 には感謝しないといけないのかもしれない(著者も1回罹患したが)。
本稿が統計学やデータサイエンスを題材とした講義の運営の参考になれば幸いである。
図1. 回帰直線を説明する部分のR Markdownソース(右上)、生成されたHTML(右下)とWebブラウザの表示(左)
図2. 回帰式を説明する部分の R Markdownソース(右上)、生成されたHTML(右下)とWebブラウザの表示(左)
(URLは何れも2024年2月28日現在)
今回は、多変量解析の代表的な手法である回帰分析について解説する。
工学系や農学系の実験等を行う領域では頻繁に使用される手法であるが、 日常的な話題の中でも概念は広く利用されているので、取っ付き易い手法ではないだろうか。近年は機械学習等でも取り扱われていると思う。過去のデータからその構造を把握し、新規に測定されたデータに対する予測を 行ないたいと言うときに、回帰分析は有用である。 構造のシンプルな単回帰分析でこの手法の原理を理解し、 複数の説明変量を用いた重回帰分析に拡張する。 残差の取り方や、その二乗和を最少にするという考えは同じである。
散布図にもっともらしい「直線」を当てはめたい。
皆さんから収集した体格データを用いて、散布図を描いてみよう。どういう直線が「もっともらしい」と考えるか?
データに欠損値が含まれていると、後々の分析(残差プロット等)時に、 毎回欠損値を除去する手順を組み込む必要が生じて面倒なので、 分析対象の変量だけを先に切り出し、その上で、欠損値を除外(完全データ)しておく。
# データの切り出し
colnames(Student23)
## [1] "No" "Sex" "Height" "Weight" "Chest"
## [6] "Residence" "Remittance" "Carrier" "Fee"
StudTmp1<-Student23[,3:4] # 身長(3番目)と体重(4番目)だけを切り出す
StudTmp1[1:15,]
## Height Weight
## 1 145.0 38
## 2 145.5 42
## 3 146.7 41
## 4 148.0 42
## 5 148.0 43
## 6 148.9 NA
## 7 149.0 45
## 8 150.0 43
## 9 150.0 46
## 10 150.0 47
## 11 151.0 42
## 12 151.0 45
## 13 151.0 46
## 14 151.0 50
## 15 151.0 NA
dim(StudTmp1)
## [1] 772 2
元々の身長と体重のデータは 772例だったが、欠損値を含むデータが96例あり、 残ったのは676例である。
StudHW<-na.omit(StudTmp1) # 欠損値を含むデータを削除
dim(StudHW)
## [1] 676 2
colnames(StudHW)
## [1] "Height" "Weight"
StudHW[1:15,]
## Height Weight
## 1 145.0 38.0
## 2 145.5 42.0
## 3 146.7 41.0
## 4 148.0 42.0
## 5 148.0 43.0
## 7 149.0 45.0
## 8 150.0 43.0
## 9 150.0 46.0
## 10 150.0 47.0
## 11 151.0 42.0
## 12 151.0 45.0
## 13 151.0 46.0
## 14 151.0 50.0
## 16 151.7 41.5
## 17 152.0 35.0
以後は、Student23に代えて、欠損値を除去して完全データにしたStudHWを使って分析を行う。
【蛇足: パズルの要領で】上記では、欠損値を含むデータの例数を、96例=772-676として求めたが、 欠損値を含むデータの例数を直接的に数える式を作ってみると、例えば以下のようになる(他にも実現方法はあると思う)。 sum()関数は、本来は引数(カッコ内の式)の合計値を計算する関数だが、論理値 TRUE/FALSEの場合はTRUEを1、FALSEを0と捉えてその総数(=個数)を算出してくれる。 2通りの方法で実現してみたが、それぞれがどのように機能しているか理解できるであろうか? なお、コメントアウト(行頭に#を付けてある)行は確認のために変数の内容を表示させる行である。表示させたければ、行頭の#を削除すれば良い。
[実現方法1]
# 欠損値を含むデータの例数カウント(方法1)
StudTmp2<-!is.na(StudTmp1)
# StudTmp2[1:15,]
StudTmp3<-StudTmp2[,1] & StudTmp2[,2]
# StudTmp3[1:15]
# (StudTmp3==F)[1:15]
sum(StudTmp3==F)
## [1] 96
[実現方法2]
# 欠損値を含むデータの例数カウント(方法2)
StudTmp2<-is.na(StudTmp1)
# StudTmp2[1:15,]
StudTmp3<-StudTmp2[,1] | StudTmp2[,2]
# StudTmp3[1:15]
sum(StudTmp3) ## これと同じ意味 ===> sum(StudTmp3==T)
## [1] 96
回帰平面の方程式: \[ \textbf{y} = a + b \textbf{x} \]
測定値と予測値のズレ: \[ \varepsilon_{i} = y_{i} - (a+ b x_{i}) \;\;\;\;\;\; (i=1,2,...,n) \]
ズレの2乗の和を最小に: \[ S = \sum_{i=1}^{n}{\varepsilon_{i}^2} = \sum_{i=1}^{n} \{ {y_{i} - ( a + b x_{i}})\}^2 \;\;\; { \to min} \]
[余談] 回帰分析では「2乗和」を最小にすることを考えるが、「絶対値和」とか「符号付き和(1乗和)」を最小にする方法もアイディアとしてはあり得る。 2乗和だと式の展開が楽になる。
# 回帰分析(指定方法1)
RresultHW <- lm(Weight ~ Height,
data=StudHW) # 線形モデル, Linear Model
RresultHW # 簡略化した計算結果表示
##
## Call:
## lm(formula = Weight ~ Height, data = StudHW)
##
## Coefficients:
## (Intercept) Height
## -81.5878 0.8352
なお、以下のように記述しても同じ結果が得られる。 こちらの方が表記としては理解し易いかもしれないが、長くなるのが難点か。
# 回帰分析(指定方法2)
RresultTmp1 <- lm(StudHW$Weight ~ StudHW$Height,
data=StudHW) # 線形モデル, Linear Model
RresultTmp1 # 簡略化した計算結果表示
coef <-RresultHW$coefficient # 計算結果の取り出し(回帰係数)
coef # 回帰係数
## (Intercept) Height
## -81.587782 0.835239
resid <-RresultHW$residuals # 計算結果の取り出し(残差)
resid[1:20] # 残差(先頭の20例)
## 1 2 3 4 5 7
## -1.52187498 2.06050551 0.05821870 -0.02759202 0.97240798 2.13716897
## 8 9 10 11 12 13
## -0.69807004 2.30192996 3.30192996 -2.53330906 0.46669094 1.46669094
## 14 16 17 18 19 20
## 5.46669094 -3.61797637 -10.36854807 -2.36854807 -1.36854807 -0.36854807
## 21 22
## -5.20378708 -4.20378708
plot(Weight ~ Height, data=StudHW,
xlab = "Height", ylab = "Weight",
main="Scatter Plot of Shintyou and Taijyuu") # 散布図の描画(これまでと別の指定方法)
abline(RresultHW) # 回帰直線を付加
abline(h=seq(40,100,10), lty=3)
abline(v=seq(140,190,5), lty=3)
回帰分析について、回帰係数以外にも知っておくべき情報がある。 それらは「summary(RresultHW)」の出力中に表示されている。
summary(RresultHW) # より詳細な計算結果表示
##
## Call:
## lm(formula = Weight ~ Height, data = StudHW)
##
## Residuals:
## Min 1Q Median 3Q Max
## -15.920 -4.732 -0.917 3.435 34.256
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -81.58778 6.25615 -13.04 <2e-16 ***
## Height 0.83524 0.03688 22.65 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 7.166 on 674 degrees of freedom
## Multiple R-squared: 0.4322, Adjusted R-squared: 0.4313
## F-statistic: 513 on 1 and 674 DF, p-value: < 2.2e-16
Adjusted R-squared: 0.4306
F-statistic: 462.2 on 1 and 609 DF, p-value: < 2.2e-16
Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) -80.70745 6.54697 -12.33 <2e-16 *** Height 0.82931 0.03857 21.50 <2e-16 *** --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# 残差プロット: 対身長に対して
plot(StudHW$Height, RresultHW$residuals) # 残差プロット(対身長)
abline(v=seq(140,190,5),lty=3) # 点線を追記
abline(h=seq(-10,30,10),lty=3) # 点線を追記
abline(h=0,lty=1) # 原点を追記
# 残差プロット: 対体重に対して
plot(StudHW$Weight, RresultHW$residuals) # 残差プロット(対体重)
abline(v=seq(30,100,5),lty=3) # 点線を追記
abline(h=seq(-10,30,10),lty=3) # 点線を追記
abline(h=0,lty=1) # 原点を追記
# 残差のヒストグラム
hist(RresultHW$residuals, right=F)
abline(h=seq(0,200,25),lty=3) # 点線を追記
# 残差の箱ひげ図
boxplot(RresultHW$residuals, horizontal=T)
abline(v=seq(-10,30,10),lty=3) # 点線を追記
# 残差のQQプロット: 正規確率プロット
qqnorm(RresultHW$residuals) # QQプロット(正規確率プロット)
qqline(RresultHW$residuals, lty=2) # 基準線の描画
abline(h=0,lty=1) # 点線を追記
abline(h=seq(-10,30,10),lty=3) # 点線を追記
対象になったのは 676名。
測定精度上回る計算結果は表示させることはできても、意味はない。
プログラムの出力をそのまま書き写さないように。
[重要な注意]
統計ソフトは単なる道具。使いこなすのは各自。
67.8 <=== 67.75〜67.84
68 <=== 67.5 〜68.4
[例2] 日本の観測史上の最高気温は、
2018(平成30)年7月23日に熊谷市で観測された41.1度であり、
最低気温は、1902(明治35)年1月25日に北海道旭川市の-41度であった。===>
-41.0度
[例3]
2001年のイチロー選手の打率は3割5分であった。
2006年は3割3分1厘であった。===> 3割5分0厘
このページで取り扱ったプログラムだけを抜き出して以下に列挙しておく。
## 1.1. アイディア
tmpRand<-rnorm(2000)
tmpRand[1:40]
StudTmp<-Student23
StudTmp$Height <-Student23$Height+tmpRand[1:598]*0.2
StudTmp$Weight <-Student23$Weight+tmpRand[1001:1598]*0.2
# 乱数で位置をずらした散布図
plot(StudTmp$Height, StudTmp$Weight,
xlab = "Height", ylab = "Weight",
main="Scatter Plot of Shintyou and Taijyuu")
abline(h=seq(40,100,10), lty=3)
abline(v=seq(140,190,5), lty=3)
## # 元データそのものの散布図(点が重なって判読できない)
## plot(Student23$Height, Student23$Weight)
## abline(h=seq(40,100,10), lty=3)
## abline(v=seq(140,190,10), lty=3)
RresultTmp <- lm(Weight ~ Height, data=StudTmp)
## RresultTmp
## summary(RresultTmp)
plot(Weight ~ Height, data=StudTmp,
xlab = "Height", ylab = "Weight",
main="Scatter Plot of Shintyou and Taijyuu")
abline(RresultTmp)
abline(h=seq(40,100,10), lty=3)
abline(v=seq(140,190,5), lty=3)
## 1.2. 前準備(Rでの利用に際して)
# データの切り出し
colnames(Student23)
StudTmp1<-Student23[,2:3] # 身長(2番目)と体重(3番目)だけを切り出す
StudTmp1[1:15,]
dim(StudTmp1)
StudHW<-na.omit(StudTmp1) # 欠損値を含むデータを削除
dim(StudHW)
colnames(StudHW)
StudHW[1:15,]
# 欠損値を含むデータの例数カウント(方法1)
StudTmp2<-!is.na(StudTmp1)
# StudTmp2[1:15,]
StudTmp3<-StudTmp2[,1] & StudTmp2[,2]
# StudTmp3[1:15]
# (StudTmp3==F)[1:15]
sum(StudTmp3==F)
# 欠損値を含むデータの例数カウント(方法2)
StudTmp2<-is.na(StudTmp1)
# StudTmp2[1:15,]
StudTmp3<-StudTmp2[,1] | StudTmp2[,2]
# StudTmp3[1:15]
sum(StudTmp3) ## これと同じ意味 ===> sum(StudTmp3==T)
## 2.1. 定式化
# 回帰分析の表記方法(その1)
RresultHW <- lm(Weight ~ Height,
data=StudHW) # 線形モデル, Linear Model
RresultHW # 簡略化した計算結果表示
# 回帰分析の表記方法(その2)
RresultTmp1 <- lm(StudHW$Weight ~ StudHW$Height,
data=StudHW) # 線形モデル, Linear Model
RresultTmp1 # 簡略化した計算結果表示
coef <-RresultHW$coefficient # 計算結果の取り出し(回帰係数)
coef # 回帰係数
resid <-RresultHW$residuals # 計算結果の取り出し(残差)
resid[1:20] # 残差(先頭の20例)
# 散布図に回帰直線を付加する方法
plot(Weight ~ Height, data=StudHW,
xlab = "Height", ylab = "Weight",
main="Scatter Plot of Shintyou and Taijyuu") # 散布図の描画(これまでと別の指定方法)
abline(RresultHW) # 回帰直線を付加
abline(h=seq(40,100,10), lty=3)
abline(v=seq(140,190,5), lty=3)
## 3. その他の重要な情報
summary(RresultHW) # より詳細な計算結果表示
## 4. 残差分析もお忘れなく
# 残差プロット: 対身長に対して
plot(StudHW$Height, RresultHW$residuals) # 残差プロット(対身長)
abline(v=seq(140,190,5),lty=3) # 点線を追記
abline(h=seq(-10,30,10),lty=3) # 点線を追記
abline(h=0,lty=1) # 原点を追記
# 残差プロット: 対体重に対して
plot(StudHW$Weight, RresultHW$residuals) # 残差プロット(対体重)
abline(v=seq(30,100,5),lty=3) # 点線を追記
abline(h=seq(-10,30,10),lty=3) # 点線を追記
abline(h=0,lty=1) # 原点を追記
# 残差のヒストグラム
hist(RresultHW$residuals, right=F)
abline(h=seq(0,200,25),lty=3) # 点線を追記
# 残差の箱ひげ図
boxplot(RresultHW$residuals, horizontal=T)
abline(v=seq(-10,30,10),lty=3) # 点線を追記
# 残差のQQプロット: 正規確率プロット
qqnorm(RresultHW$residuals) # QQプロット(正規確率プロット)
qqline(RresultHW$residuals, lty=2) # 基準線の描画
abline(h=0,lty=1) # 点線を追記
abline(h=seq(-10,30,10),lty=3) # 点線を追記