鳩がITをくらったような顔

ITでうんとこしょどっこいしょ

実験計画法1 -フィッシャーの三大原則-

実験計画法とは

分散分析などの統計的手法を用いるときには信頼性の高いデータが必要になる。実験計画法とはそのデータを効率よく得るためのマナー集のようなものです。

フィッシャーの三大原則

フィッシャーの三大原則は信頼性の高いデータを得るための決まり事です。

なぜ信頼度の高いデータが必要か。分散分析の統計量Fは以下のように表されるのでした。

F=\frac{要因効果の分散}{誤差効果の分散}

目的となる要因以外からの影響が小さい、つまりFが大きいデータでなければ目的要因の効果を検出するのが困難になるから信頼度の高いデータが欲しいのです。

その信頼度の高いデータを得るためにフィッシャーの三大原則を守って実験を行う必要があります。3つの原則は以下のとおりです。

  • 局所管理の原則
  • 反復の原則
  • 無作為化の原則

局所管理の原則

目的となる要因以外を制御するために、空間や時間を小分けにします。
それにより、誤差効果を生み出す条件が均一になり群内変動Fの分母)が小さくなります。

反復の原則

水準(群)ごとに実験を反復させて同水準内で2つ以上のデータ(データ数n)を確保します。
水準間で異なるデータが得られたとしても、nが小さければそれが要因効果による差(統計誤差)なのか偶然の差(確率誤差)なのか判別できないからです。

そもそもn=1の時、Fの分母である群内変動を計算することができなくなります。

無作為化の原則

局所管理の原則で「要因以外を制御」と述べましたが、実は特定の水準に制御するのもよくありません。
なぜなら、その水準だけが他の要因と交互作用を発揮する可能性があるからです。
よってそのような要因があったとすれば、実験からこの要因を削除することは損です。

そこで、無理に水準を制御しようとせず、要因が偏りを持って実験に影響しないようにランダムに行おうというのが無作為化の原則です。
例えば、時間経過によって効果や結果に影響を受けることが予想される場合は試験の順番をランダムに行います。

乱塊法

上記の三原則に従っても、もともと目的要因以外の効果が大きいと誤差変動が大きくなります。つまり、目的要因の効果が検出されにくくなります。

そこで、水準を自由に制御できないもので、間違いなく実験結果に影響するものは1つの要因として組み込みます。これが乱塊法です。

まとめと次回

フィッシャーの三大原則は精度の高いデータのとり方に関する手法であり、なるべく要因以外の誤差を無くすことを目的としていました。

次回は、効率よくデータを得るための手法のひとつである、直交配列表について紹介します。


参考文献

Railsチュートリアルをやり終えた感想

Railsチュートリアルを一応1周やり終えたので感じたことなどを少し書いてみようと思います。

どうしてこの記事を書こうと思ったか

興味はあるけどボリュームがあってやるのが億劫だなぁと思ってる人に、ちょっとでも雰囲気を知ってもらったり、他人がどのように取り組んだか参考になればと思ってこの記事を書きます。
「次はこうやってやってみるといいよ」というアドバイスもお待ちしております。

前提知識はあった?

  • ITの知識は応用情報技術者程度。
  • Rubyの基礎はあった。Rubyの父監修の書籍を買って、paizaの問題とかを解いたりしていた。
  • HTML/CSSは大丈夫、JavaScriptは読めるけど書きたくはない(笑)
  • 以前にもRailsチュートリアルをやったことがあるが(4系)、途中で挫折。
  • 挫折しながらも、書籍を買って作りたかったアプリを自作したこともあった。フロント部分やサーバの設定で躓き挫折。

ご覧の通り、とてもヘタレであることがわかります。

Railsチュートリアルをしようと思った理由

理由は2つあります。

Webアプリの開発に興味があった

近年様々なWebアプリが登場し、自分も作ってみたいという欲求があったのですが、それに加えてRubyを少し勉強していたというのもあります。
また、有名どころのサービスがRailsを使っていたり、開発ブログなどを見ていると興味が出て来たという感じです。
やっぱり諦めずに作ってみたいという気持ちがありました。

内容がとても分かりやすかった

始めようと思った理由とはちょっと違うかもしれませんが、ちらっと内容を見た時にとても分かりやすそうな説明だったからです。現に、最初から最後まで分かりやすかったです。
書籍で勉強をしたこともありますが、「見たことないコードが突然出て来た」とか「それ、どこのコードの話?」というストレスが無かったことが大きいです。

どれくらいかかった?

まる1年かかりました。
というのも、途中Python3に浮気してたりしたので完走まで時間がかかってしまいました。
序盤は1日1章でも十分こなすことができますが、中盤のログイン機構などはなかなか手ごわいので時間がかかります。ボリュームも凄いので根気が必要です!
1ヵ月以内で終わらせるストイックな人は尊敬します。

どうやってRailsチュートリアルを進めていった?

1章から順に

1章から順に進めていきました。完成したファイルがあるといっても、内容は順序だてて構成されてるので順番にこなすのが無難だと思います。

適宜メモをとる

また、4系のチュートリアルで挫折した経験を踏まえて、適宜メモを取るようにしました。よく使うテクニックや、基本的な手順、調べないとわからないだろう点を中心にメモを取りました。
再びわからない箇所へ戻って考える手間を考慮するとメモを残しておく方がお得だと思います。「ここ確かメモしてたな」ってのは覚えてるもので、Ctrl+Fで検索すればすぐ対応できます。

コピペでもいいけど、コードは全て理解する

特に1周目、完走することを目的とした場合、コードはコピペでもいいと思いました。
ただし、コードはすべて理解してから進めるようにしました。「わからんけど、貼っとくか」では意味無いですからね。
あと、コードを手打ちすると必ずと言っていいほど入力ミスによるエラーが発生します。このエラー探しが完走までのモチベをじわじわと削っていくのです。

演習はやったりやらなかったり

演習はすべてやったわけではありません。
「ここをこうすればよさそうだな」程度のことは考えましたが、正直コードをいじるとテストがレッドになりそうで怖かったです(笑)

チュートリアルを完走して得られたものは?

  • Railsの大まかな仕組みが把握できた
  • Railsの規則の多さと便利さを実感した
  • テスト駆動開発に少し馴染めた
  • Gitと少し仲良くなれた
  • ほんの少し自信が得られた

正直、テスト駆動開発はあまり好きではありませんでした。しかし、チュートリアル終盤ではなかなか心地よく開発(してないけど)できるようになったと思います。

Railsで開発するためにこれから必要だと思うこと

  • 調べる力
  • フロント部分の知識(JavaScriptjQuery, Ajaxなど)
  • コードの管理能力(GitとかGithub
  • デザイン能力
  • データベースの知識
  • 構築、運用、管理の知識

Railsは便利な一方、規則も多くあるので、こういうときどうすればいいか調べて解決する力は今後も必要だと感じました。チュートリアルでは「こんなときはこんなメソッドがあるんです」と紹介してくれますが、自身で開発となるとそうもいきません。
チュートリアルではデザインも含めたフロント部分は最小限しか紹介されていないので、自分好みになんやかんやする場合は勉強が必要です。
また、アプリを公開するとなると運用管理の知識も必要になります。

学ぶべきことは山ほどありますね。

最後に

本当に、大変でした(笑)
説明が丁寧なのでこんななまけものでも完走することができました。興味のある方はぜひRailsチュートリアルにチャレンジしてみてください。
railstutorial.jp

今後についてはまだ決めかねていますが、かねてより作りたかったサービスをまた作り始めるかもしれません。これについてはまたここで報告出来たらなと思います。
あと、もし働かせていただける企業様がおられましたらご連絡お待ちしております(๑•̀ㅂ•́)و✧

食洗器 vs. 手洗い ~魔法の言葉「時給換算」~

最近よく「食器洗い面倒だから食洗器買いたい」というのを耳にするので、手洗いとどちらが安いのかシミュレートしてみました。

条件設定

  • 食洗器は毎日1度のみ使うものとする
  • 食洗器でまとめ洗いはしない
  • 水道代は0.15円/ℓとして計算
  • 電気代は120~300kWh価格帯26.0円/kWhで計算
  • 手洗い時間は3人分で12.5分とし、5人分もこれに基づいて計算

まずは単純に比較

1回の洗浄でどれくらいかかるかは以下のようになりました。

手洗い(3人分) 手洗い5人分 食洗器(3人分) 食洗器(5~7人分)
水道代 6.75円 11.25円 1.35円 1.65円
電気代 0円 0円 15.60円 20.02円
洗剤費 6円 10円 10.40円 10.40円
合計 12.75円 20.80円 27.35円 32.07円

ここで、食洗器の費用を考慮してみます。耐用年数は6年とします。

手洗い(3人分) 手洗い5人分 食洗器(3人分) 食洗器(5~7人分)
水道代 6.75円 11.25円 1.35円 1.65円
電気代 0円 0円 15.60円 20.02円
洗剤費 6円 10円 10.40円 10.40円
食洗器代金 (47779円) (63200円)
食洗器1回換算 21.82円 28.89円
合計 12.75円 20.80円 49.17円 60.96円


「断然手洗いの方が安いじゃん!」そんな簡単な話ではないのです。

魔法の言葉「時給換算」

彼らは(誰)ここで「時給換算」というものを取り出すのです。
この「時給換算」という言葉は何かとよく持ち出されるのですが実体は結構謎だったりします。というのも、誰の時給かによって意味が多少異なります。

「あなた」の時給の場合

あなたは12.5分使って皿洗いをしています。あなたの時給を2,000円とした場合、416.67円の機会損失です。食洗器を導入してこの機会損失を取り返します。すると、

機会損失分(416.67円) ー 食洗器費用(36.42円) = 取り返すことができる損失分(380.25円)

となります。機会損失なので、食洗器が働いている間、あなたは働く必要があります
あなたが働かなければあなたの時給で換算する必要性はなくなります。
ただし、食洗器費用によりあなたの時給は1825.2円相当に減ります。

「食洗器」の時給の場合

あなたが洗っていた代わりに食洗器を雇って12.5分働いてもらいましょう。

(導入後費用 - 導入前費用 )×( 60 ÷ 12.5 ) = 食洗器の時給(174.82円)

食洗器が働いている間に遊ぼうが働こうが、「12.5分を26.42円で買って自由な時間を得ることができる」という意味でそれ以上でも以下でもありません。
単に「お金でもって自由な時間を得る」という意味であればあなたの時給で換算する意味はありませんし、ましてや380.25円得するわけでもありません。

あなたの時給での換算を考慮して比較

ということで、最後にあなたの時給で換算した場合を考慮して比較してみましょう。

手洗い(3人分) 手洗い5人分 食洗器(3人分) 食洗器(5~7人分)
水道代 6.75円 11.25円 1.35円 1.65円
電気代 0円 0円 15.60円 20.02円
洗剤費 6円 10円 10.40円 10.40円
食洗器代金 (47779円) (63200円)
食洗器1回換算 21.82円 28.89円
時給換算収入 ▲416.67円 ▲694.44円
合計 12.75円 20.80円 ▲367.5円 ▲633.48円

食洗器の導入により差額380.25円~654.28円を得ることとなります。

1回あたり380.25円~654.28円と言われてもよくわからないかもしれませんが、年間13万8,791円~23万8,812円分働いてくださいということです。