2012年10月16日火曜日

HP35Sでt検定だッ

最近は「こんな電卓が欲しい」などと言ったボヤき記事ばかりでしたので、基本に立ち戻って、電卓の利用についての話題を。

HP35Sの数値積分能とプログラムを駆使して(?)、t検定をやってみました。統計の知識が別に入り用ですが、手頃な入門書は図書館にでも行って探してみて頂戴。


1. プログラム

D001    LBL D         //  プログラムスタート
D002    0             //  積分下限 (0からXまで積分)
D003    x<>y          //  積分区間のスタック上の順番を交換
D004    FN= E         //  積分する関数を指定
D005    intFN d X     //  数値積分
D006    RCL D         //  
D007    1             //  
D008    -             //  (df-1)
D009    2             //  
D010    /             //  (df-1)/2
D011    !             //  ((df-1)/2)! = gamma((df+1)/2)
D012    *             //  
D013    RCL D         //  
D014    2             //  
D015    /             //  df/2 
D016    1             //  
D017    -             //  (df/2-1)
D018    !             //  (df/2-1)! = gamma(df/2)
D019    /             //  
D020    pi            //  
D021    RCL D         //  
D022    *             //  
D023    sqrt x        //  sqrt(pi*df)
D024    /             //  
D025    0.5           //  
D026    x<>y          //  
D027    -             //  
D028    RTN           //  

E001    LBL E         //  積分関数
E002    RCL X         //  X について積分を行うため、Xをスタックに置く
E003    x^2           //  
E004    RCL D         //  
E005    /             //  x^2/df
E006    1             //  
E007    +             //  1+x^2/df
E008    RCL D         //  
E009    1             //  
E010    +             //  df+1
E011    2             //  
E012    /             //  (df+1)/2
E013    +/-           //  -(df+1)/2
E014    y^x           //  (1+x^2/df) ^ (-(df+1)/2)
E015    RTN           //  


2. プログラムの使い方

プログラム自体は、t分布の累積分布関数(cdf ; cumulative distribution function)について、xから∞までの範囲(=「右裾」)の値を返すものです。
あらかじめ、自由度dfをレジスタDに入れておき、スタックトップにxを置いておき、

[XEQ] D [ENTER]

とキーを押す事で、結果が得られます。

例えば、自由度10で0.5から∞までの右裾の面積を求めるには、

10 [STO] [D] 0.5 [XEQ] [D] [ENTER]

と押します。「INTEGRATING」表示のあと少々の時間を掛けて、

0.31394680  (FIX 8)

という結果が得られます。

少々手間の掛かる事ではありますが、一応t分布の計算ができました。これを使えば、簡単なt検定の作業が出来ると思います。その例をPDFにて作成しました。右の文書置き場にあります。「t-dist.pdf」を見てチョ。(SkyDriveの方はlogin不要だと思います)

35Sでのt検定はそこそこ使えそうですが、t区間推定は実用にはなりそうもありません。区間推定となると「逆計算」なので、大変時間が掛かるものと思われます。それに、HP35SではSolvreと数値積分を同時には使えないという問題があります。
Solvre部分は自前でNewton Solvreをプログラムで組む方法がありそうですが、数値積分だけでも時間が掛かってしまうため、Solvreまで使うとなると、これはもうポンポンポン(きゃりーちゃんじゃないよ)と軽快にキーを叩いて答えを出すという訳にはいかない。参ったなァ。
区間推定の場合には、TI-83+やHP50gとか、より高機能な電卓を使うのが良さそうです。

8 件のコメント:

Stepney さんのコメント...

akatuki様の「文章」index 2番の化学反応プログラムに関してですが、少なくとも「ー>ARRY」コマンドを実行しようとした段階でエラーを起こし、計算することができませんでした。
少なくとも私の50gでは計算をすることができなかったのですが、akatuki様のものでは計算が出来たのでしょうか。
前者である可能性もあるので、もしも間違っていたら申し訳ありませんでした。

Stepney さんのコメント...

上のコメントの申し訳ありません「でした」の部分は飛ばしてください。

akatuki さんのコメント...

Stepney 様、遅くなり申し訳ない。

今、このコードをこれからHP50g に入れ直してみますので、もう少しお待ち戴き度く。
(以前にSysRPLの暴走で消してしまったのですヨ)

akatuki さんのコメント...

Stepney 様、重要な御指摘、有り難う御座居ます。単なるポカミスでした。スマソ。

2 2 ->LIST ->ARRY STOΣ

の所に「c」が抜けておりまして、正しくは

c 2 2 ->LIST ->ARRY STOΣ

となります。申し訳ない。文書の方もこれから修正します。

これを書いたときは、グラフ画面で [STATL] を使って、かなりの指数関数近似を得たのですが、現在は直線回帰になっちゃうのヨ ? どうなっておるのか ? (STATメニューから[3. Fit Data]を使い、Model:Best Fit ならばキッチリ出るんですけどネ)

という事で、有難い御指摘、感謝です。

Stepney さんのコメント...

大変申し上げにくいことなのですが、ー>ARRYの他にも
「ΣLIST」にもエラーが発生していました。
これも私の50gでは計算をすることができなかったのですが、修正版ではそのままだったので、少し気になりコメントさせていただきました。

akatuki さんのコメント...

Stepney 様、どうも。

いや、申し訳ない。
これは、当方の書き方が原因の様かも知れません。文書では、半角矢印記号を「->」としております。

ですから「->」の部分は、正確には「→」(これは全角矢印です)になるのですが、全角文字を使いたくなかったので、こうした表記になっております。
(半角矢印をどうやって入力するか、解決できないのですヨ。電卓のコードを持ってきても文字化けしてしまいますし)

恐らく大丈夫とは思うのですが、どうにもおかしい場合には、御一報戴きたく。

Stepney さんのコメント...

矢印の表記、私も理解しているので大丈夫ですよ。
私が「ー>」と書いたのは矢印を手っ取り早く書くためですから。
正確に表記する方法が私もよくわからないので、このような表記を使わせていただきました。

akatuki さんのコメント...

Stepney 様、毎度申し訳ない。

念のために、こちらの電卓で動いているコードをアップしておきました。

「当方の文書・SkyDribve版」の所に、「CHAMBRE.zip」という圧縮があります。御検討戴きたくお願い申し上げます。