elastic

Miscellaneous notes -Theme- <Engineering,Whisky,Learning>

2017統計学Ⅱ  NO.4 問5 解説

問題5 個人的な難易度★★★ 


母集団分布が次のような密度をもつ連続型の分布であるとする。


  x^n = \left\{ \begin{array}{ll}

     \frac {1}{\theta^2}  xe^{-x/ \theta} & (x\geqq0) \\
    0 & (それ以外)

  \end{array} \right.

ここから得られた5個の標本の値が、2.4,3.2,3.0,2.8,3.0であった。未知のパラメータ\thetaを最尤法で推定するとき、その推定値を求めよ。




〜解き方手順〜


他の問題と違って電卓ゲーではないため、そもそも数学がすっごく苦手な人は捨てちゃいましょう。今回は、対数と微分はなんとかなるって人なら問題ないと思います。

この手の推定値の問題は、「最大値を満たす値を求める」とおんなじです。つまり数Ⅱでやった「微分して=0に置く」が出来ればOKです。


テスト解けりゃいいよって人は、尤度関数=標本の数だけ掛け算する程度に思ってくれてれば

1,尤度関数を立てる。
2,尤度関数を対数で置き換える。
3,できた対数尤度関数を微分
4,最大値を満たすθを求める。

基本的な流れ自体は難しくないんだけど、対数、微分等の高校でやった数学がアウトだとキツイ



〜解説〜

まず尤度関数L(\theta)を作るところから、
素数が5個なので

 \begin{eqnarray}
L(\theta) &=& \prod_{i=1}^5 \frac {1}{\theta^2}  x_ie^{-x_i/ \theta}
\end{eqnarray}


この\Piは「i=1のときの値からi=5のときの値まで掛け算します」って記号
だから

L(\theta)=
\frac {1}{\theta^2}  x_1e^{-x_1/ \theta} ×\frac {1}{\theta^2}  x_2e^{-x_2/ \theta}×\frac {1}{\theta^2}  x_3e^{-x_3/ \theta}×\frac {1}{\theta^2}  x_4e^{-x_4/ \theta}×\frac {1}{\theta^2}  x_5e^{-x_5/ \theta}


後々対数に直すから、掛け算ごとに分解しておく。
今回は \frac {1}{\theta^2}xe^{-x_i/ \theta}の掛け算だから3つに分解。


\begin{eqnarray}
L(\theta) &=& (\frac {1}{\theta^2})^5  ×\prod_{i=1}^5x_i × e^{\sum_{i=1}^5 -\frac{x_i}{\theta}}\\\\
L(\theta) &=& ({\theta}^{-2})^5 ×\prod_{i=1}^5x_i × e^{\sum_{i=1}^5 -\frac{x_i}{\theta}}\\\\
L(\theta) &=& {\theta}^{-10} ×\prod_{i=1}^5x_i × e^{\sum_{i=1}^5 -\frac{x_i}{\theta}}
\end{eqnarray}


今度はこれを対数に直す。


\log L(\theta) = \log ({\theta}^{-10} ×\prod_{i=1}^5x_i × e^{\sum_{i=1}^5 -\frac{x_i}{\theta}})


\logの掛け算は足し算に直せるから


\log L(\theta) = \log {\theta}^{-10} +\log (\prod_{i=1}^5x_i ) + \log(e^{\sum_{i=1}^5 -\frac{x_i}{\theta}})


例として\log x ^ 2 = 2\log xになることと\log e ^ {2x} = 2x になることを使って
(真ん中の項は後々\theta微分したときになくなるから放置)


\begin{eqnarray}
\log L(\theta) &=& -10 \log \theta +\log \prod_{i=1}^5x_i  + \sum_{i=1}^5 -\frac{x_i}{\theta}\\\\
\log L(\theta) &=& -10 \log \theta +\log \prod_{i=1}^5x_i  -\frac{1}{\theta} \sum_{i=1}^5 x_i
\end{eqnarray}


ここからやっとこ微分します。

\begin{eqnarray}
(\log x)' = \frac{1}{x}\\\\
(\frac{1}{\theta})' = (\theta^{-1} )' = -{\theta}^{-2}
\end{eqnarray}

になることを使って
上の式を\thetaについて微分して=0とおくと


\begin{eqnarray}
\frac{d\log L(\theta)}{d(\theta)} &=& \frac{-10}{ \theta}  + \frac{1}{\theta^2} \sum_{i=1}^5 x_i &=& 0
\end{eqnarray}


両辺に\theta^2をかけて整理すると、
 

\begin{eqnarray}
 -10{\theta}  +\sum_{i=1}^5 x_i &=& 0\\\\
10{\theta} = \sum_{i=1}^5 x_i \\\\
{\theta} = -\frac{1}{10}\sum_{i=1}^5 x_i
\end{eqnarray}


あとは\begin{eqnarray}\sum_{i=1}^5 x_i\end{eqnarray}の値を出す


\begin{eqnarray}
\sum_{i=1}^5 x_i &=& 2.4 + 3.2 + +3.0 + 2.8 + 3.0\\
&=& 14.4
\end{eqnarray}


したがって答えは


\begin{eqnarray}
\theta &=& \frac{1}{10} ×14.4 \\\\
&=& 1.44
\end{eqnarray}

2017統計学Ⅱ  NO.4 問1(ア) 解説

問題1 個人的な難易度★ 

50人の人に、あるゲームが好きかどうかを訪ねたところ、30人が好きだと答えた。この結果から、このゲームが好きな人の割合{(p)}の信頼係数95%の信頼区間を求めなさい。
ア)正規分布による近似から、二次方程式を解いて、区間を作る。


〜解き方手順〜


電卓ゲーです。覚えることも少ないし解くだけならカンタンです。ただし、電卓の打ち間違いにだけは注意しましょう。


1,{n}(標本の数)、{x}(このゲームが好きな人の比率)の値をチェック。
2,\begin{equation}
  (n + 限界値^2)p^2 - (2x + 限界値^2)p + x^2/n = 0
\end{equation}を解の公式を用いて解く。


限界値と上の二次方程式については区間推定:比率の記事で解説。
細かく知る必要なければ、


 ◎信頼係数90%のとき:\begin{equation}限界値 = 1.64\end{equation}
 ◎信頼係数95%のとき:\begin{equation}限界値 = 1.96\end{equation}
 ◎信頼係数99%のとき:\begin{equation}限界値 = 2.58\end{equation}

 ◎\begin{equation}
  (n + 限界値^2)p^2 - (2x + 限界値^2)p + x^2/n = 0
\end{equation}


を覚えておくこと以外に特にやることはなし。
導出過程は難しくないから覚えなくても全然OK。


〜解説〜

n = 50、x = 30 、限界値 = 1.96
\begin{equation}
  (n + 限界値^2)p^2 - (2x + 限界値^2)p + x^2/n = 0
\end{equation}に代入すると
\begin{equation}
  (50 + 1.96^2)p^2 - (60 + 1.96^2)p + 30^2/50 = 0
\end{equation}

\begin{equation}
  ap^2 - bp + c = 0
\end{equation}のかたちになっているのでここから解の公式


解の公式を使うため、a,b,cをあらかじめ求めておく。

a = 50 + 1.96^2
    = 50 + 3.8416
    = 53.8416

b = 60 + 1.96^2
    = 50 + 3.8416
    = 53.8416

c = 30^2/50
   = 900/50
   = 18

ここから解の公式を解いていく。



 \begin{eqnarray} p &=& \frac{b \pm \sqrt{ b^2-4ac }}{2a} \\
p &=& \frac{63.8416 \pm \sqrt{ 63.8416^2-4×53.8416×18 }}{2×53.8416}\\\\
p &=& \frac{63.8416 \pm \sqrt{ 4075.74989-3876.5952 }}{107.6832} \\\\
p &=& \frac{63.8416 \pm \sqrt{ 199.15469}}{107.6832} \\\\
p &=& \frac{63.8416 \pm {14.1122177562565}}{107.6832}\\\\

p_1について\\

p_1 &=& \frac{63.8416 + 14.1122177562565}{107.6832}\\\\
p_1 &=& \frac{77.9538177562565}{107.6832}\\\\
p_1 &=& 0.72391810195329\\\\

p_2について\\
p_2 &=& \frac{63.8416 - 14.1122177562565}{107.6832}\\\\
p_2 &=& \frac{49.7293822437435}{107.6832}\\\\
p_2 &=& 0.46181189121185\\\\

\therefore 0.46 \leqq p \leqq 0.72
\end{eqnarray}


類似問題:
基本統計学 有斐閣 P219【例8.1】

No.486 3 Straight Win(3連勝) (yukicoder,python3)


battle_list = input()

#初期値は100にしとく(文字列が<=100だしとりあえず)
#これは、OOOもしくはXXXがないとき、初期値が0だと結果が逆になるため

m = 100
n = 100

if "OOO" in battle_list:
    n = battle_list.index("OOO")

if "XXX" in battle_list:
    m = battle_list.index("XXX")

#文字列の位置が若いほうが勝利
if n > m:
    print("West")   
    
elif n < m:
    print("East")
    
#どちらも三連勝しない場合    
else:
    print("NA")
 
    

No.143 豆 (yukicoder,python)

最近[int(i) for i in input().split()]ばっかり使ってる

#説明不要!!

grain,bag,family=[int(i) for i in input().split()]
age_list = [int(i) for i in input().split()]

sum_eat = sum(age_list)
sum_grain = grain * bag

if sum_grain >= sum_eat:
    print(sum_grain - sum_eat)
    
else:
    print(-1)

No.24 数当てゲーム(yukicoder,python3)

解説というよりメモです。あしからず。



N = int(input())                                                                
#ターン数を取得

ans_opption = [0,1,2,3,4,5,6,7,8,9]                
                             
#0~9までの配列を作って、答えにならない数字はxに変換

for i in range(N):
    num = input().split()                                                       
    
    

    #YESの場合は、numに含まれない数字をすべてxに変換
    if num[4] == "YES":                                                         
    
            
        for i in range(len(ans_opption)):
            if str(i) not in num:                                               

             #標準入力は文字列(YES,NOのせい)だからiをstrに
             #変換しないと全部not inと判定にされる

                ans_opption[i] = "x"                                            
                    
                                     
                
    #NOの場合は、numに入った数字をすべてxに変換

    elif num[4] == "NO":                                                        
    

        for i in range(len(ans_opption)):
            if str(i) in num:
                ans_opption[i] = "x"
                    
            else:
                pass
                
#答え配列から、xを消す(なんかもっといい方法ないかな??)


for i in range(len(ans_opption)):                                               
    if "x" in ans_opption:
        ans_opption.remove("x")  
    else:
        pass    
    
print(ans_opption[0])

python書きやすい

python3 : venvで仮想環境 in Ubuntu

  1. APTでpythonをインストー
  2. venvで仮想環境を構築
  3. 仮想環境に入る

1.APTでpythonをインストー

$ sudo apt-get install -y python3 

これを実行

2.venvで仮想環境を構築

$ python3 -m venv (ディレクトリ名)

3.仮想環境に入る

$ . (ディレクトリ名)/bin/activate

ドットと引数の間に半角スペース