サイコロにもてあそばれる日々

サイコロにもてあそばれる日々

統計学に関連する内容を備忘録代わりに書いていきます。


Google Chromeのウィンドウの色は初期設定では白になっている。
まぶしいと感じるときはまず、ディスプレイの輝度を下げてみる。
それでもまぶしいときは背景色を変えてみるとよい。

Google公式の「ハイコントラスト」という拡張機能を使うと、ウィンドウの色を白から黒に反転できるが、画面遷移時や新しいタブを開くときに一瞬白になるので、かえって目に負担がかかる。

聞くところによると、背景色は黒より灰色の方が目に優しいらしい。

(参考)awgs Foundry「Windows 7 のウィンドウの背景色を白から違う色へ変更したときのメモ

灰色はハイコントラスト拡張では実現できないが、Stylist拡張では可能。

(参考)Yahoo知恵袋「検索結果ページなどの背景色が白で目が痛くなってしまいます。

margin0pxさんの回答によると、
body {background-color:#eeeeee !important;}
と指定する。

色(上記の#eeeeee部分)は16進数で指定することになる。RGB値を16進数に変換するサイトの一例として下記がある。
PEKO-STEP「WEBカラーチャート

ちなみにawgsさんおすすめのR:221 G:221 B:221は#ddddddになる。

すべてのウェブサイトに色の変更を適用するには、Stylist拡張で「All site」に設定すればよいが、特定のサイト「以外」すべてに適用するには、「All site」の左脇のチェックを外し、下に表示される条件でregexpを選び、右脇の入力欄に
^(?!.*yahoo).+$
などとする。
(参考)mymemo「【正規表現】文字列の否定、ある文字列を含まない

Excelには対数正規分布を取り扱うLOGNORMDIST、LOGINV関数が実装されています。

引数に「平均」と「標準偏差」を入力する必要がありますが、対数正規分布自身の平均と標準偏差を入力するわけではないことに留意が必要です。

たとえばExcelヘルプのLOGNORMDIST関数の説明を参照すると

---

書式
LOGNORMDIST(x,平均,標準偏差)

LOGNORMDIST 関数の書式には、次の引数があります。

x      必ず指定します。関数に代入する値を指定します。
平均    必ず指定します。ln(x) の平均値を指定します。
標準偏差 必ず指定します。ln(x) の標準偏差を指定します。

---

 

とあり、対数変換後の分布の平均値と標準偏差を入力することがわかります。
対数正規分布自身の平均値と標準偏差しかわからない場合は、次式を用いて、引数に入力すべき値を得られます。

ここに、μl、σlはそれぞれ対数変換後の分布の平均値と標準偏差を、μ、σはそれぞれ対数正規分布自身の平均値と標準偏差を表します。

Excelで化学式や数式を入力するとき、下付き文字や上付き文字を入力したくなることがあります。
ところが、Excelではこうした添え字を設定するのは一苦労です。
なんとか楽に入力する方法はないかとGoogle先生に聞いたところ、あるブログを紹介されました。
DeltaTECH: Excelで下付き文字と上付き文字をLatex風に入力できるマクロ作ってみた。
実際に使ってみて、とても便利でした。
この素晴らしいマクロの機能を一歩発展させて、セルに入力したら自動で添え字に変換する方法はないか。
いろいろ検索をかけて使えそうなコードをかき集め、ついに完成しました。
アドインにしたので、ご利用ください。
ダウンロードはこちらから。
画面上部の「フォルダーの操作」をクリックし、表れたメニューの「フォルダーのダウンロード」をクリックするとダウンロードできます。

使い方
・このアドインをダブルクリックして開けば、準備完了です。
・下付きにするには _{下付き文字}
・上付きにするには ^{上付き文字}
と入力して、Enterを押してセルの入力を確定すると、自動で変換されます。
例えば、NO3-はNO_{3}^{-}と入力すれば、変換できます。



この場にて、マクロ開発者のSEFFR-9様にお礼を申し上げます。




以下、ソースコード

'ThisWorkbookに書き込む。

Option Explicit
Private WithEvents xlApp As Application

Private Sub Workbook_Open()
Set xlApp = Application
End Sub

Private Sub workbook_BeforeClose(Cancel As Boolean)
Set xlApp = Nothing
End Sub
'以上、アドインでもイベントプロシージャを使えるようにする命令
'参考:http://okwave.jp/qa/q2649739.html


Private Sub xlApp_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'コードの出典: DeltaTECH http://deltatech.blog90.fc2.com/blog-entry-364.html

'正規表現 http://msdn.microsoft.com/ja-jp/library/ms974570.aspx
'イベントプロシージャ http://excelvba.pc-users.net/fol3/3_6.html
'高速化 http://officetanaka.net/excel/vba/speed/index.htm
'Likeの使い方 http://officetanaka.net/excel/vba/tips/tips35.htm
'(参考)速度計測 http://www.sanryu.net/acc/tips/tips278.htm

'既知のバグ: H_{2}Oと入力すると、Oが消える。H_{2}O_{2}は問題なく動作する。

'下付き上付きにするときだけ正規表現を呼び出す。
If Target.Value Like "*_{?*}*" Or Target.Value Like "*^{?*}*" Then

'画面表示OFF
Application.ScreenUpdating = False

'変数の宣言
Dim RE1 As Object, RE2 As Object
Dim reMatch1 As Object, reMatch2 As Object
Dim strPatternSub As String, strPatternSuper As String
Dim i As Integer, m As Integer, Sum As Integer
Dim j(100) As Long, k As Long, l(100, 2) As Long
Dim msg As String, msg2 As String

'下付き文字
Set RE1 = CreateObject("VBScript.RegExp")
strPatternSub = "\_\{.+?(?=\})"
With RE1
.Pattern = strPatternSub
.IgnoreCase = True
.Global = True
Set reMatch1 = .Execute(Target)
msg = ""
If reMatch1.Count > 0 Then
k = 1
For i = 0 To reMatch1.Count - 1
j(i) = Len(reMatch1(i).Value)
msg = msg & Mid$(Target.Value, k, reMatch1(i).FirstIndex - k + 1) & Mid$(reMatch1(i).Value, 3, j(i) - 2)
k = reMatch1(i).FirstIndex + j(i) + 2
Next i
If k < Len(Target.Value) Then
msg = msg & Mid$(Target.Value, k, Len(Target.Value) - k + 1)
End If
Else: msg = Target.Value
End If
End With

'下付き文字の文字列位置情報の退避
Sum = 1
For i = 0 To reMatch1.Count - 1
j(i) = Len(reMatch1(i).Value)
l(i, 0) = reMatch1(i).FirstIndex - i * 3 + 1 '下付き文字のはじまり
l(i, 1) = j(i) - 2 '下付き文字の長さ
Next i

'上付き文字
Set RE2 = CreateObject("VBScript.RegExp")
strPatternSuper = "^{.+?(?=})"
With RE2
.Pattern = strPatternSuper
.IgnoreCase = True
.Global = True
Set reMatch2 = .Execute(msg)
msg2 = ""
If reMatch2.Count > 0 Then
k = 1
For i = 0 To reMatch2.Count - 1
j(i) = Len(reMatch2(i).Value)
msg2 = msg2 & Mid$(msg, k, reMatch2(i).FirstIndex - k + 1) & Mid$(reMatch2(i).Value, 3, j(i) - 2)
k = reMatch2(i).FirstIndex + j(i) + 2

For m = 0 To reMatch1.Count - 1 '下付き文字の調整
If k < l(m, 0) Then
l(m, 0) = l(m, 0) - 3
End If
Next m

Next i
If k < Len(msg) Then
msg2 = msg2 & Mid$(msg, k, Len(msg) - k + 1)
End If
Else: msg2 = msg
End If
End With

'文字列の置換
Target.Value = msg2

'上付き文字フォントへの置換
For i = 0 To reMatch2.Count - 1
j(i) = Len(reMatch2(i).Value)
Target.Characters(Start:=reMatch2(i).FirstIndex - i * 3 + 1, Length:=j(i) - 2).Font.Superscript = True
Next i

'下付き文字フォントへの置換
For i = 0 To reMatch1.Count - 1
Target.Characters(Start:=l(i, 0), Length:=l(i, 1)).Font.Subscript = True
Next i

'ゴミ捨て
Set reMatch1 = Nothing
Set RE1 = Nothing
Set reMatch2 = Nothing
Set RE2 = Nothing

'画面表示ON
Application.ScreenUpdating = True

End If

End Sub
Microsoft WordでCO2等の化学式を書くとき、2を下付きにする場面があります。
数が少なければ手作業で済みますが、数が多いときやどこに書いたかわからない場合には手作業では苦労します。
そこで、この作業を自動化するマクロを作成しました。

ダウンロードはこちらから

画面上部の「フォルダーの操作」をクリックし、「フォルダーのダウンロード」をクリックするとダウンロードできます。
(ウィルスチェックの結果、問題なし。)

1.インストール方法
・このファイルを以下のフォルダにダウンロードします。
Windows XPの場合 C:\Documents and Settings\\Application Data\Microsoft\Word\STARTUP
Windows Vista/7の場合 C:\ユーザー\\AppData\Microsoft\Word\STARTUP

2.使用方法
・Word 2007/2010の場合、開発タブが表れるので、「マクロ」をクリックします。


・「化学式の下付きへの変換」が選択されているので、「実行」


・CO2, CH4, N2O, SF6, H2O, O2, O3, H2, NH3, Cl2の10種類の化学式の数字部分が下付きになります。置換した個所は黄色でハイライト表示されます。
※クリップボードのデータは消去されます。
※範囲を限定して置換することはできません。文章全体が置換対象です。

(今後の改善予定:クリップボードの内容が維持されるようにする。)


参考までに、ソースコードも載せておきます。

Option Base 1

Sub 化学式の下付きへの変換()

Dim i As Integer 'カウンタ変数
Const n As Integer = 10 '化学式の数(追加するときはこの数字を変更)
ReDim WordList(n) As String '化学式を入れる変数
ReDim Position(n) As Long '下付きにする位置を入れる変数
WordList(1) = "CO2": Position(1) = 3 '化学式と位置を入力
WordList(2) = "CH4": Position(2) = 3 '追加するときは、ここに記述
WordList(3) = "N2O": Position(3) = 2
WordList(4) = "SF6": Position(4) = 3
WordList(5) = "H2O": Position(5) = 2
WordList(6) = "O2": Position(6) = 2
WordList(7) = "O3": Position(7) = 2
WordList(8) = "H2": Position(8) = 2
WordList(9) = "NH3": Position(9) = 3
WordList(10) = "Cl2": Position(10) = 3

Application.ScreenUpdating = False '画面表示を停止

With Selection '以下Selectionを省略
.Collapse '選択範囲を解除

For i = 1 To n '繰り返し処理の開始
.TypeText Text:=WordList(i) '本文に化学式入力
.MoveLeft Unit:=wdCharacter, Count:=Len(WordList(i)), Extend:=wdExtend '化学式を範囲選択
.ClearFormatting '書式の解除
.Range.HighlightColorIndex = wdYellow '化学式を黄色で強調表示
.Characters(Position(i)).Font.Subscript = True 'Position変数で指定した位置を小文字に
.Cut 'クリップボードに切り取り

With .Find '以下Findを省略
.ClearFormatting '書式の解除
.Text = WordList(i) '検索対象文字列の指定
.Forward = True '下に検索
.Wrap = wdFindContinue '文章の末尾まで達したら先頭から検索を継続
.Format = True '書式を検索条件に追加
.Font.Subscript = False '既に下付きになっている化学式は検索対象としない
.MatchCase = True '大文字と小文字を区別する
.MatchWholeWord = False '完全に一致する単語以外も検索する
.MatchByte = False '半角と全角を区別しない
.MatchAllWordForms = False '英単語の異なる活用形は検索しない
.MatchSoundsLike = False 'あいまい検索をしない
.MatchWildcards = False 'ワイルドカードを使用しない
.MatchFuzzy = False 'あいまい検索をしない

With .Replacement '以下Replacementを省略
.ClearFormatting '書式の解除
.Text = "^c" 'クリップボードの内容
End With 'Replacementの省略終了

.Execute Replace:=wdReplaceAll '置換実行

End With 'Findの省略終了
Next i '繰り返しここまで

.Collapse
.Range.HighlightColorIndex = wdNoHighlight '強調表示の書式を残さない
End With 'Selectionの省略終了

Application.ScreenUpdating = True '画面表示を再開

End Sub
Excelに備わっている統計関数ではできない計算を行う必要に迫られたため、関数を自作しました。
簡単な解説書も含めてアップロードしておきます。
Excelに備わっている統計関数を組み合わせた簡易なものです。
あくまで自分用に作ったものですので、バグがあるかもしれません。
今後時間の余裕ができたら随時修正、機能追加をしていきたいと思います。

現時点で実行できる統計処理
一変量
・変動係数
・標準誤差
・四分位範囲
・標本歪度
・標本尖度
・ジャック-ベラ検定
・スピアマンの順位相関係数

二変量
・相関係数の検定(不具合修正)
・スピアマンの順位相関係数
・共分散の不偏推定値

多変量
・分散共分散行列(標本・不偏両方に対応)
・マハラノビスの平方距離
・重回帰分析の回帰直線の標準誤差
・重回帰分析の自由度調整済み決定係数
・重回帰分析の予測区間(NEW!)

多重比較
・ボンフェローニ補正(シーケンシャルボンフェローニ補正含む)



図 重回帰分析の予測区間の例


ダウンロードはこちらから。
画面上部の「フォルダーの操作」をクリックし、「フォルダーのダウンロード」をクリックするとダウンロードできます。

バグ発見、機能要望など何かお気づきのことがありましたらこの記事のコメント欄にご記入をお願い申し上げます。

<不具合修正記録>
2012年6月24日
・起動時にエラーが発生するケースに対処
・相関係数の検定ができないバグを修正
・「重回帰分析の自由度調整済み決定係数」を計算する関数を追加
・「分散共分散行列」を計算する配列関数を追加
・解説書の充実

2012年7月7日
・SPEARMAN関数で同順位のデータを平均順位に変換するよう修正。
・マハラノビスの平方距離を求める関数MAHALANOBISSQを追加
・重回帰分析の回帰直線の標準誤差を求める関数STEYXMを追加
・例題ファイルの提供開始

2012年7月16日
・SPEARMANTESTのコードに存在した間違いを訂正
・PREDICT関数を重回帰分析にも対応できるように改造
・共分散の不偏推定値を求める関数COVARSを追加
・既存関数を組み合わせた計算結果を例題ファイルに併記し、計算過程を明示。(NEW!)
Excelの回帰分析に関係する関数は種類が多く、似たものも多いので混乱しがちです。
整理して以下にまとめます。
Excel 2007の場合です。

1.単回帰分析専用(説明変数はひとつだけ)
式形: y = ax + b
(y:目的変数、x:説明変数、a:傾き、b:切片)

SLOPE関数    単回帰直線の傾きを求める。
INTERCEPT関数  単回帰直線の切片を求める。
RSQ関数     決定係数を求める。
STEYX関数    単回帰式の標準誤差を求める。
FORECAST関数  新しい説明変数を入れることで、回帰分析の予測値を求める。



2.重回帰分析に対応(説明変数は一つ以上)
式形: y = a1x1 + a2x2 + ... + b

LINEST関数  万能関数(傾き、切片、決定係数、回帰式の標準誤差を配列として出力する。)
TREND関数  FORECAST関数の重回帰版

※LINEST関数のExcelヘルプは有益な情報も含むのですが、誤訳が散見され、読みにくいです。
※LINEST関数とINDEX関数を組み合わせると、重回帰版RSQ関数や重回帰版STEYX関数をつくれます。

重回帰版RSQ関数 = INDEX(LINEST(目的変数, 説明変数, True, True), 3, 1)
重回帰版STEYX関数 = INDEX(LINEST(目的変数, 説明変数, True, True), 3, 2)



3.重回帰分析の特殊版
式形: y = b*(m1^x1)*(m2^x2)*...

LOGEST関数  LINEST関数の特殊版
GROWTH関数  TREND関数の特殊版
以前SAMOVAを紹介しました。
SAMOVAは遺伝子の空間分布を調べる手法でした。
こうした手法を景観遺伝学(landscape genetics; Manel 2005)と言います。
景観遺伝学に言及した国内の研究は今のところほとんどありません。(立田ら2008くらい)
立田らはSAMOVAとBarrierというソフトウェアを使って景観遺伝学の解析を行いました。
これらの手法は経緯度を使います。
地点間を動物が直線距離で移動するという暗黙の前提に立った解析手法です。
陸上を自由に移動できればこれらの手法でよいでしょう。
しかし実際には移動を妨げる障害物、例えばがけ等があると、地点間の直線距離のみでは情報が不十分だと考えられます。

近年直線距離でなく、迂回するような条件を考慮できる手法が開発されました。
それがStreamTree (Kalinowski et al 2008)です。
この手法は河川の魚類を念頭に入れて開発されましたが、陸上動物でも適用可能です。
遺伝距離のデータと集団間の経路を入力すると重回帰分析の要領で遺伝距離を補正します。
うまく補正ができたかどうかは決定係数R2値で判断します。
過去の四種類の集団遺伝学研究にこの手法を適用したところR2が0.9程度の高い数値が得られ、この手法は有効であると原典は述べています。
国家公務員試験森林・自然環境区分は林野庁技官・環境省自然系技官・国土交通省造園系砂防系技官を主に志望する人のための試験です。
この区分を受ける人は農学部の森林科学科や造園学科の人がほとんどです。
しかし環境省の採用ページの「内定者の声」を参照すると、専門外から挑戦する方もいらっしゃるようです。
同じ森林・自然環境区分でも総合職は科目を選択できる一方、一般職は全科目必須です。
したがって専門外の方は総合職を狙うことになると思います。
読者の方のお役に立てればと思い、専門科目の勉強法を記述しておきます。

全般的な勉強法
過去問の入手
身近に過去問をもっている方がいればベストですが、そうした方がいらっしゃらない場合は人事院に情報公開請求をすると入手できます。
手続開始から手元に届くまでに正味一か月強かかりますので、余裕をもって。
CD-Rだと比較的安価で入手できます。

膨大な科目を処理する方法
進捗状況を表にして管理するとよいです。
行方向に科目名、列方向に年度を書き入れ、過去問を解いたら枠に日付を入れる。
この要領で解くと、どの科目が滞っているか一目瞭然です。

一次試験専門の科目選択
森林・自然環境区分は必須問題と選択問題からなります。
選択問題は次の12科目から3科目を選択します。
1.森林環境科学
2.森林資源科学
3.森林生物生産科学
4.砂防学基礎
5.砂防工学
6.流域管理
7.造園学原論・造園材料
8.造園計画(自然公園)
9.造園計画(都市公園)
10.木材特性・木質構造
11.木材加工・材質改良
12.木材成分利用

各科目は概ね訪問可能な官庁に対応しています。
志望する官庁に関連する科目を選択したほうが勉強の動機を維持できると思います。
(官庁訪問の際はどの科目を選択したかは先方にはわからないので、無理に合わせる必要はありませんが。)
環境省→科目8
国交省造園系→科目7, 9
国交省砂防系→科目4, 5, 6
林野庁→その他

一次試験勉強法
必須問題
大学受験で生物を選択した方はさほど苦労しないと思いますが、もし生物を選択しなかった方はとんでもないことになります。
必須問題以前に一次教養試験の生物をみっちり勉強する必要があります。
「過去問500」や「スーパー過去問ゼミ」(いずれも実務教育出版)等解説のある問題集を購入する必要があるでしょう。
また、高校の生物I・IIの教科書が役に立ちます。
ない方は書店で高校の参考書を購入するか取次業者で教科書を購入するとよいと思います。

学校の教科書の取次業者は各都道府県に最低一社あるので、そこで教科書を購入できます。
東京都の場合は総武線大久保駅徒歩一分に「第一教科書」という業者があります。
その他の道府県は次のリンクを参照。(全国教科書供給協会)
http://www.text-kyoukyuu.or.jp/otoiawase.html
高校の教科書をおすすめする理由は、三つあります。
(1)記述が簡潔であること
(2)執筆に多数の教授が関与しており記述に信頼性がもてること
(3)教科書検定というある種の「査読」を経て出版されていること

当然高校生物だけでは「必須問題」は太刀打ちできません。
「選択問題」の一部が「必須問題」に混ざっています。
選択問題の勉強が進めばおのずと必須問題にも手が付けられるようになります。

科目6.流域管理
水理学・森林水文学・河川工学(中でも河川構造物・流砂)・気象が出題細目になります。

科目8.自然公園
自然公園関係の法制度・自然保護関係の国際条約・各国立公園の特徴・保全生態学に分類できます。
環境省自然環境局の案内冊子や自然公園の手引き(国立公園協会)が参考になります。
自然公園法・自然環境保全法等は確実に押さえておきたいところです。

科目9.都市公園
都市公園に関係する法制度が出題されます。
国交省の説明会に参加して、資料をいただけるとかなり勉強がはかどると思います。
(入手できなかったら国交省のWebサイトでpdfを探してみてください。)
都市公園法・都市計画法の一部・景観法・歴史まちづくり法・文化財法・バリアフリーのガイドラインを押さえておく必要があります。

二次試験専門記述式勉強法
必須問題一題と選択問題四科目中一科目を解答します。
二次試験対策には一次試験の過去問をたくさん解くのがよいと思います。
二次試験解答の手掛かりが別の年度の一次試験の設問に混ざっている、なんてことがよくあるためです。

必須問題
「森林・林業白書」や森林に関する書籍をたくさん読んでおくとよいと思います。
例えば、「日本林業はよみがえる」「森林崩壊」など。

科目3.自然環境・公園緑地に関する基礎
自然公園・都市公園の法制度を具体的な事例を用いて論述する問題が多いです。
例えば、「利用調整地区の概要を述べよ。さらにこの制度が適用されている事例を一つ挙げ、その運用状況を述べよ。」といった感じです。
一番いいのは現地に行って実態を知ることでしょうが、それは費用や時間の面で厳しいと思います。
各地方環境事務所のウェブページにpdf資料がありますので、それらを収集しまとめるのがよいと思います。
Arlequinでは、距離行列同士の相関を見るためにMantel検定を実行できます。
(ユーザーマニュアルp.95)

説明変数に使う行列は.arpの末尾に記載します。
書き方はマニュアルのpp.35-39を参照してください。

SettingsタブのMantel test欄には以下の注意書きがあります。
「距離の計算に関する設定はAMOVAタブで行います。」
(Note that the settings for the computation of distances must be set in the AMOVA tab)

しかし実際にはAMOVAではなくPopulation comparisons (p. 91)で設定します。
Population comparisonsのCompute pairwise FSTにチェックを入れ忘れないようにしてください。
逆にAMOVAにチェックを入れる必要はありません。

また、目的変数に使う行列の種類(Fstをそのまま使うか、対数をとるか、Slatkin変換するか等)は.arpファイル中のYMatrixで指定します。
Population comparisonsで設定できるのはFstとRstのどちらかぐらいのものです。
この設定をインターフェース上できると便利だと思うのですが、できません。