🦋

高校数学における統計の未来

2024/12/25に公開

この記事は日曜数学 Advent Calendar 2024 の25日目の記事となります。

https://adventar.org/calendars/9972

この記事はJulia Advent Calendar 2024 (シリーズ2)の25日目の記事となります。

https://qiita.com/advent-calendar/2024/julia

この記事はTypst Advent Calendar 2024 (シリーズ2) の25日目の記事となります。

https://qiita.com/advent-calendar/2024/typst

Xへのポスト

https://x.com/dannchu/status/1808501596583829573

問題

数研出版の教科書の問題をWilsonのP値関数・信頼区間に変更してみます。

答えとコード

コードはjuliaです。

WilsonのP値関数のグラフをかいてみよう。

using Distributions
using StatsPlots

# WilsonによるP値関数
function pvalue_wilson_f(k,p,n)= k/n
    2ccdf(Normal(), 
      abs(- p) / (p*(1-p)/n))
end

k , n  = 200 , 400  
plot(p->pvalue_wilson_f(k,p,n),label="wilson",xlim=(0,1))

p の値を点推定してみよう。

\boldsymbol{p} =\frac{100}{200} = \boldsymbol{0.5}

Wilsonの95%信頼区間を求めてみよう。

# Wilsonの信頼区間
function confint_bin_wilson(k; n, α)
  z = cquantile(Normal(0,1), α/2)= k/n
  a, b, c = 1 + z^2/n,+ z^2/(2n),^2
  sqrtD = (b^2 - a*c)
  (b - sqrtD)/a, (b + sqrtD)/a
end

k , n , α = 100 , 200 , 0.05
confint_bin_wilson(k; n, α);

(0.4313608596038919, 0.5686391403961081)

  • ちなみに,Waldの信頼区間は [0.451 , 0.549]

p = 0.7 であると仮説を立てる。閾値を α=0.05 とすると,この仮説とデータの相性は良いか?それとも悪いか?

k , p , n = 100 , 0.7 , 200
pvalue_wilson_f(k,p,n)

6.737436018932825e-10

6.737436018932825 \times 10^{-10 }< 0.05

なので,仮説 p = 0.7 とデータの相性は悪い。

元の問題(数研出版 数学B 教科書)

typst + jlyfish

少し前に,typstのjlyfishのパッケージでjulia のコードを実行できることを知ったので,このパッケージを用いて,pdfを作り直してみました。

https://zenn.dev/dannchu/articles/f92c6943e86180

1223.typ
#set page(
paper: "a4",
height: 297mm,
width: 210mm,
margin: (x: 1.5cm, y: 1.5cm),
)
 
#set par(
  justify: true,
  leading: 1em,
)
 
#set text(
  font: ("New Computer Modern","BIZ UDPMincho")
)
 
#set text(lang: "ja")
 
#set enum(numbering: "(1)",)
 
#import "@preview/colorful-boxes:1.2.0": *

#import "@preview/jlyfish:0.1.0": *

#read-julia-output(json("1223-jlyfish.json"))
 
#let my_block(back_color, frame_color, title_color, content_color, title, content) = {
  block(width:auto,radius: 4pt, stroke: back_color + 3pt)[
    #block(width: 100%,fill: back_color, inset: (x: 20pt, y: 5pt), below: 0pt)[#text(title_color,font: ("New Computer Modern","BIZ UDPMincho"))[#title]]
   #block(radius: (
    bottom: 3pt,
  ),width: 100%, fill: frame_color, inset: (x: 20pt, y: 10pt))[#text(content_color)[#content]]
  ]
}
 
 
#my_block(olive,luma(240) , white, black, [数研出版の教科書の問題をWilsonのP値関数・信頼区間に変更してみる], [
  ある県の高校3年生から無作為に400人を選び、むし歯がある生徒を数えたところ,200人であった。 この県の高校3年生のむし歯の保有率を $p$ とする。

  + WilsonのP値関数のグラフをかいてみよう。
  + $p$ の値を点推定してみよう。
  + Wilsonの95%信頼区間を求めてみよう。
  + $p = 0.7$ であると仮説を立てる。閾値を $α=0.05$ とすると,この仮説とデータの相性は良いか?それとも悪いか?
  ])

#columns(2)[
  + #jl(code:true,
    ```jl
    using Distributions
    using StatsPlots
    # WilsonによるP値関数
    function pvalue_wilson_f(k,p,n)
        p̂ = k/n
        2ccdf(Normal(), 
          abs(p̂ - p) / √(p*(1-p)/n))
    end
    k , n  = 200 , 400  
    plot(p->pvalue_wilson_f(k,p,n)
            ,label="wilson",xlim=(0,1))
    ```)
    

  + $ display(p =100/200 = bold(0.5))$ 



  + #jl(code:true,```jl
    # Wilsonの信頼区間
    function confint_bin_wilson(k; n, α)
      z = cquantile(Normal(0,1), α/2)
      p̂ = k/n
      a, b, c = 1 + z^2/n, 
                  p̂ + z^2/(2n), p̂^2
      sqrtD = √(b^2 - a*c)
      (b - sqrtD)/a, (b + sqrtD)/a
    end

    k , n , α = 100 , 200 , 0.05
    confint_bin_wilson(k; n, α);
    ```)

    

    ちなみに,Waldの信頼区間は $[0.451 , 0.549]$

  + #jl(code:true,
    ```jl
    k , p , n = 100 , 0.7 , 200
    pvalue_wilson_f(k,p,n) 
    ```)
    

    $ 6.737436018932825 times 10^(-10 )< 0.05 $
    
    なので,仮説 $p = 0.7$ とデータの相性は悪い。

#v(1cm)
<元の問題>

 #image("mathB.png",width:100%)

]

Juliaのコードを実行しながらTypstでpdfを作成できるのはちょっと嬉しいですね。

Discussion