前回やり残した課題
$の使い方の復習です。前回に参照した統計学入門の例1.2の「覚えておくと便利なこと」を見て思い出してください。九九の表を作ってみましょう。まずこのように上と左に1から9までの数字を書きます。
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
1 | |||||||||
2 | |||||||||
3 | |||||||||
4 | |||||||||
5 | |||||||||
6 | |||||||||
7 | |||||||||
8 | |||||||||
9 |
でも81個も式を書くのは大変ですので、一つだけ書いてそれをコピーするだけで表を完成させたいと思います。
$を上手に使って、最初の一つをどのように書けば良いか考えてください。
笛田薫の教育、研究、日記など。 講義の種類にかかわらず日付順に並んでいるので、目次から講義を選んでください。写真はクリックすると大きく表示されます。日付は、講義ならば講義の日時、写真ならば撮影日時でありブログを書いた日ではありません。後日書き足すこともありますので、左側の目次や検索を使って関連するエントリーを探してください。無断複製を禁じます。引用する場合は出典としてここのアドレスを明記してください。
既に出来た人のために、別のテーマを用意しました。
まず11月4日の後半に書いているInputBox, MsgBoxとFunctionを勉強してください。
それが終わった人は、入力先だけでなく、結果の出力先もExcelに表示されるボックスから指示できるようにするために、ユーザーフォームの使い方を勉強しましょう。詳しいことは「ExcelVBAによる統計データ解析入門」縄田和満著に書いてあります。
ユーザーフォームは主に、以下のような流れで作ることができます。
大事なのは、「計算開始」ボタン(オブジェクト名はCommandButton1)を押した時のプログラムの動作です。Microsoft Visual Basicの「表示(V)」をクリックしてその中の「コード(C)」を選んでください。UserForm1(コード)という画面が現れるので、まず左側から「計算開始」ボタンのオブジェクト名CommandButton1を選びます。次にそのボタンをクリックした時の動作を記述したいので右側からClickを選びます、というか最初からそれが選ばれていると思います。すると
Private Sub CommandButton1_Click()
End Sub
と書かれていますので、その2行目からプログラムを書いていきます。
A1を選択するにはRange("A1").Selectと書きますが,この"A1"の部分をプログラム実行時に指定できるようにしましょう。ここでは今作ったフォームの白い箱(オブジェクト名はTextBox1)に記入された
文字を使いますので、"A1"の代わりに
Range(UserForm1.TextBox1.Text).Select
と書きます。
また,B1セルに結果を表示するにはRange("B1") = Sum
と書きます。
表示し終わったら「セルの足し算」画面を消しますので
Range("B1") = Sum
と
End Sub の間に
Unload UserForm1
と書きます。これが無いと足し算の結果を
表示した後もプログラムが終わらなくなります。終わらなくなって困った時は「セルの足し算」画面右のXボタンを押してください。
これでほぼ完成ですが、最後に「セルの足し算」画面を表示するためのプログラムが必要です。標準モジュールのModule1(もしなかったら「挿入(I)」をクリックしてその中の「標準モジュール(M)」を選んでください)に
Sub total7()
UserForm1.Show
End Sub
と書き込んでください。エクセルの適当なセルに縦に3つ続けて数字を入力してこのtotal7プログラムを実行したら「セルの足し算」画面が表示されるので、数字を入れた最初のセルの名前(A1とか)を入力して、計算開始ボタンを押してください。
2. 続けて計算できるように、計算開始ボタンを押して計算結果をセルに書いても、プログラムが終わらないようにしてください。そして
このように終わらせるためのボタンを作って、そのボタンを押したら終わるようにしてください。
3. プログラムを実行する度にセルの名前を入力するのも面倒ですね。プログラムを実行したときは初期値としてA1と書いてあるようにしましょう。
他のセルの計算をしたい時にはこのA1を消して書き直せば良いのです。このようなプログラムに修正してください。
4. 計算結果も「セルの足し算」画面に書いてしまいましょう。
計算結果をUserForm1.TextBox2.Textへ代入してください。
5. 最後に、計算プログラムをDo While~Loopを使って空白セルになるまで足し算を続けるプログラムを作ってみましょう。
|
このデータに多項式モデル
y=β0+β1x+β2x2+…βpxp+ε
を当てはめてみます。0次多項式(定数), 1次多項式(直線)から6次多項式を当てはめて、交差検証法を用いて、何次多項式モデルが最も良いか選択してください。
x,x2,…,x6を前回のデータにおける緯度、経度、標高と同じようにそれぞれ別の変量として扱うことで、前回同様の方法で回帰式の係数や、残差平方和を求めることが出来ます。
前回同様、CSV形式で書いておきますので、CSVファイルとして保存してください。
x, y 0.00, 0.854 0.05, 0.786 0.10, 0.706 0.15, 0.763 0.20, 0.772 0.25, 0.693 0.30, 0.805 0.35, 0.739 0.40, 0.760 0.45, 0.764 0.50, 0.810 0.55, 0.791 0.60, 0.798 0.65, 0.841 0.70, 0.882 0.75, 0.879 0.80, 0.863 0.85, 0.934 0.90, 0.971 0.95, 0.985 |
気温のデータの場合は、緯度だけ使う、経度だけ使う、など全部で23=8通りの組み合わせがありましたが、多項式の場合は1次の項を使わず2次の項だけ使う、ということはありえないので、検証すべき組み合わせは
160 | -10 | 100 |
162 | -8 | 64 |
164 | -6 | 36 |
166 | -4 | 16 |
168 | -2 | 4 |
170 | 0 | 0 |
172 | 2 | 4 |
174 | 4 | 16 |
176 | 6 | 36 |
178 | 8 | 64 |
180 | 10 | 100 |
実際のデータ解析では,エクセルのシートの他のセルには他のデータが入っているので,途中で使う平均との差などをセルに書き出すことができません。ですから,分散を求めるプログラムが書けたら,今度は途中で使った差とか差の二乗をセルに書き出さずに分散を求められるようにプログラムを変更してください。
なお、分散を求めるにはデータの個数ではなく、データの個数-1で割ることもあります。
Excelでは、VAR関数がデータの個数-1で割る分散で、VARPがデータの個数で割る分散です。
プログラムから話題がそれますが、この機会に整理しておきましょう。
クラスの身長を測るとき、目的は次の二通りが考えられます。
|
私の講義にはExcelを使うものが多いので、余裕のある人はこのブログの他の講義の部分を見てください。
160 |
162 |
164 |
166 |
168 |
170 |
172 |
174 |
176 |
178 |
180 |
160 | -10 |
162 | -8 |
164 | -6 |
166 | -4 |
168 | -2 |
170 | 0 |
172 | 2 |
174 | 4 |
176 | 6 |
178 | 8 |
180 | 10 |
A組なら10、B組なら40になった筈です。
これを分散と言います。
平均だけでなく分散、標準偏差はデータ解析の基礎として重要です。必ず覚えてください。
今回はBasicの練習のためにVBAを使って計算しましたが、Excelの関数でも計算できます。
注意事項:Function の名前として"ex1"のような、「アルファベット 1 or 2 文字+数字」 の形式は、セルの名前と同じになるので使えません。
8通りの組み合わせの作り方は色々考えられますが、簡単に考えられるのは2進法展開、つまり0から23-1=7までのループで
0=000
1=001
2=010
…
7=111
と展開して、(後で説明する展開の順序の都合で)右から順に1ならば使う、0ならば使わない、つまり
000なら空集合
001なら1
010なら2
…
111なら123
この変量を使う8つのモデルの比較をします。
2進法展開には割り算の余りを求める必要がありますが、それは%%で求めることが出来ます。
また小数点以下を切り捨てる割り算は%/%です。
例えば、6を2進法で表すなら、
6%%2=0なので1の位は0
6%/%2=3であり
3%%2=1なので10の位1
3%/%2=1であり
1%%2=1なので100の位は1
1%/%2=0なのでこれで終わり。
よって110です。
去年はVBAを使ったので連立方程式の解法も全て講義中に作り講義の進度が遅かったです。それでこれが最後の課題でした。今年はRを使って連立方程式のような基礎的な部分はRに任せてしまえるので、これが最初の課題です。
Excelを使ったことが無い人は、総合情報基盤センター利用の手引き第2分冊第三章も読みながらこのホームページを読んで下さい。
例1.1 | 例1.2 | 例1.6 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
教科書で度数と書かれている部分が、エクセルでは頻度と表示されます。 教科書と同じ結果になりましたか?もし違うなら、その理由を考えてみてください。
実はエクセルには分散などを直接求める関数が用意されています。しかし、どのように計算して求めるのかを理解しておくことも重要です。 特に分散を求める関数としてExcelにはVARとVARPがあります。今回勉強した標本分散を求めるにはVARPを使わなければなりません。 VARとVARPの違いは、統計学入門で「推定」を勉強したときに教えます。
正しい式を入力すると以下のようになります。
これで回帰係数を計算することができました。
ツールバーの「グラフ」の中の「近似曲線の追加」を使うと、次のような回帰直線とその式を書くことも出来ます。
自分で計算した回帰直線の係数と等しいことを確認してください。