2017-05-17 4 views
0

私はいくつかの信頼区間計算をテストしていますが、私はMatlab関数normfit/fitdist/paramciを手動計算から差し引いて気づきました。下記のコードをご覧になり、dataでより多くの要素をテストしてください。データサイズが大きくなると、その差は小さくなります。誰かが手掛かり/解決策/説明を持っていますか?normlit/fitdist/paramciを使用したMatlab Confidence Intervalは、要素の数によってマニュアル計算と異なります。どうして?

おかげ

ウィル

%% Cleaning service 
    clear all; close all; 

    %% Data and processing 
    conf = norminv([0.025 0.975],0,1); % for 95% 

    data = normrnd(0.158,0.0265,10,1); % Change the third argument to 100, 1000, 1000, ... 
    [mu,sigma,muci,sigmaci] = normfit(data,.05);    % for 95% 
    pd = fitdist(data,'Normal'); ci = paramci(pd,'Alpha',.05); % for 95% 

    xplus = mu + conf(2)*sigma*(1/sqrt(length(data))); 
    xminus = mu - conf(2)*sigma*(1/sqrt(length(data))); 

    Difference = [ci(1,1)-xminus ci(2,1)-xplus] 

答えて

0

平均ための「典型的な」信頼区間が実際に正常ではない、t分布からの重要な値を使用します - これはわずかに広い間隔を意味します、で、より広いです小さなサンプルサイズ。サンプルサイズが増加すると、t臨界値は正常臨界値に収束する。私は最近、Matlabのプログラマーではないが、paramciのような缶詰の関数が通常の代わりにt-distributionを使用するのであれば私は興味があるだろう。

この作品はMatlabではなくRで書かれていますが、私はあなたが認識する数字をいくつか作り出すことを期待しています。サイズのサンプルのために言ってみましょうN = 10、そのように通常の重要な値を使用して、95%CIは、 "手で" 構築されるだろう= 5、SD = 2 ...

n <- 10 
mn <- 5 
sd <- 2 

を意味する:

mn + qnorm(c(0.025, 0.975))*sd/sqrt(n) 
# 3.76041 6.23959 

などのようなT臨界値を使用して、95%CI:

mn + qt(c(0.025, 0.975), n-1)*sd/sqrt(n) 
# 3.569286 6.430714 
# ...note slightly wider 

のN = 500は、両者は区別できなくなります。

n <- 500 
mn + qnorm(c(0.025, 0.975))*sd/sqrt(n) 
# 4.824695 5.175305 
mn + qt(c(0.025, 0.975), n-1)*sd/sqrt(n) 
# 4.824269 5.175731 

これは、私がMatlabが同様のシナリオで行うことと一致することを望んでいるすべての手動計算です。そうでなければ...私はいつも私の答えを撤回することができます;)

関連する問題