2026年8月11日火曜日

Welchのt検定

Weltchのt検定は,独立2群のt検定が拡張された手法です.Weltchのt検定では等分散を仮定せず,比較する母集団の母分散σ^2(もしくは,母標準偏差σ)が等くても(σA=σB),等くなくても(σA≠σB)どちらの状況にも対応します.Weltchのt検定の過程は比較する2つの母集団が正規分布に従うことだけを前提としています.

前回同様に,データ(example_a.csv)を読み込みます.

> ex.a <- read.csv("example.a.csv")

読み込まれたデータがカテゴリカルデータとして認識されているかどうかを確認して,文字型として認識されている場合は,以下のように修正します.

> str(ex.a)

'data.frame': 10 obs. of  2 variables:

 $ choles: int  118 132 120 115 113 129 126 134 135 131

 $ suppl : chr  "A" "A" "A" "A" ...

> ex.a $ suppl <- factor(ex.a $suppl)

> str(ex.a)

'data.frame': 10 obs. of  2 variables:

 $ choles: int  118 132 120 115 113 129 126 134 135 131

 $ suppl : Factor w/ 2 levels "A","B": 1 1 1 1 1 2 2 2 2 2


RでWeltchのt検定を実行するときは以下のコマンドを実行します

> t.test(A ~ B)

この構文は,独立2群のt検定のt検定の構文から引数""var.equal=TRUE"を抜いたものになります(関数 t.test がデフォルトで実行するのはWeltchのt検定ということ).

実行してみます.

> t.test(choles ~ suppl)


Welch Two Sample t-test


data:  choles by suppl

t = -3.0732, df = 5.8431, p-value = 0.02261

alternative hypothesis: true difference in means between group A and group B is not equal to 0

95 percent confidence interval:

 -20.536084  -2.263916

sample estimates:

mean in group A mean in group B 

          119.6           131.0 

P値が0.02261になっていて,有意水準αの0.05(5%)より小さいので,統計的に有意と結論づけられ,サプリメントAの飲用者とBの飲用者の間には,コレステロールとに統計的に有意な差が認められた(P=0.023)ということができます.

Jupyter Notebookファイルはこちら(GitHub)

2026年8月10日月曜日

独立2群のt検定

Rによる独立2群のt検定

 CSV形式で,以下のようなコレステロールと飲用しているサプリメントの種類に関するデータ(引用しているサプリメントとコレステロールの関係データ)があったとします(これをexample_a.csvというファイル名で保存します).

choles,suppl

118,A

132,A

120,A

115,A

113,A

129,B

126,B

134,B

135,B

131,B

このデータを用いて,独立2群のt検定を行うには以下のようなコマンドを実行します.

まずは,データのcsvファイル(example_a.csv)を読み込み,"ex.a"という名前をつけます.ターミナルからRを起動して,以下のコマンドを実行します.

> ex.a <- read.csv("example_a.csv")

ex.a にデータが格納されているかを確認しておきます.

> ex.a

   choles suppl

1     118     A

2     132     A

3     120     A

4     115     A

5     113     A

6     129     B

7     126     B

8     134     B

9     135     B

10    131     B

データの構造を確認するための 関数str を使って,データを見てみます.

> str(ex.a)

'data.frame': 10 obs. of  2 variables:

 $ choles: int  118 132 120 115 113 129 126 134 135 131

 $ suppl : chr  "A" "A" "A" "A" ...

ここで,以下の文章はex.aがデータフレーム型であり,2つの変数からなっていて,それぞれ10個の観測値を持つと書かれています.これは正しいのでOKです.

'data.frame': 10 obs. of  2 variables:


続いて,変数に関する情報です.最初の"choles"は,int(整数)型の数値であることを示していて,各値も示されています.続いて,2つ目の変数"suppl"は,chr(文字列)型の変数として読み込まれています.

 $ choles: int  118 132 120 115 113 129 126 134 135 131

 $ suppl : chr  "A" "A" "A" "A" ...

"suppl"がchr(文字列)型のままでは解析ができないので,以下のようにfactor関数を使って,強制的に因子型に読み直すように指示します.

> ex.a $ suppl <- factor(ex.a $ suppl)

再度,確認してみると,int型で認識されていることが確認できます.

> str(ex.a)

'data.frame': 10 obs. of  2 variables:

 $ choles: int  118 132 120 115 113 129 126 134 135 131

 $ suppl : Factor w/ 2 levels "A","B": 1 1 1 1 1 2 2 2 2 2


ここから,t検定に入ります.まずは,関数attachを使ってデータフレーム"ex.a"の中を探索範囲とします.

> attach(ex.a)


独立2郡のt検定を行うには,以下のコマンドを実行します.

> t.test(A ~ B, var.equal=TRUE)

ここで,"A~B"はモデル式です."var.equal=TRUE"は等分散を仮定してt検定を行うというオプション指定です(TRUEと書かずにTだけでもOKです).

"choles"を応答変数(response variable),"suppl"を説明変数(explanatory variable)にモデル式(choles ~ suppl)として指定して,"var.equal=T"では,等分散を仮定してt検定を行うという指示を出しています.ここで,"TRUE"ではなく"T"と書いています.

> t.test(choles ~ suppl, var.equal=T)


Two Sample t-test


data:  choles by suppl

t = -3.0732, df = 8, p-value = 0.01527

alternative hypothesis: true difference in means between group A and group B is not equal to 0

95 percent confidence interval:

 -19.954001  -2.845999

sample estimates:

mean in group A mean in group B 

          119.6           131.0 


上記の結果において,

t = -3.0732, df = 8, p-value = 0.01527

においては,検定統計量t,自由度df,P値が示されています.
この結果では,P値が0.01527なので,優位水準αの0.05(5%)より小さいことから,統計的に有意と結論づけることができます.
加えて,以下の結果よりAの標本平均は119.6,Bの標本平均は131.0であることから,サプリメントAの飲用者のコレステロール値は,Bの飲用者のコレステロール値よりも低かった(P=0.015)と結論づけられます.

mean in group A mean in group B 

          119.6           131.0 


95 percent confidence interval:

 -19.954001  -2.845999

は,比較する2つの母集団AとBの母平均の差μA-μBに対する95%信頼区間の下限(下側信頼限界)と上限(上側信頼限界)を示しています.

関数attachを使わない方法としては"$"を使う方法があります.

> t.test(ex.a$choles ~ ex.a$suppl, var.equal=T)


Two Sample t-test


data:  ex.a$choles by ex.a$suppl

t = -3.0732, df = 8, p-value = 0.01527

alternative hypothesis: true difference in means between group A and group B is not equal to 0

95 percent confidence interval:

 -19.954001  -2.845999

sample estimates:

mean in group A mean in group B 

          119.6           131.0 

得られる結果は,当然同じ結果になります.

結果について説明しておくと,tの値は検定統計寮,dfは自由度,p-valueはP値を示しています.

t = -3.0732, df = 8, p-value = 0.01527

この結果では,P値が0.01527と有意水準αの0.05(5%)より小さいので,統計的に有意という結果が得られています.
比較する2つの母集団AとBの,母平均の差 μA-μB に対する95%信頼区間の下限(下限信頼限界)は-19.954001に,上限(上限信頼限界)は-2.845999になります.

95 percent confidence interval:

 -19.954001  -2.845999

また,Aグループの平均は119.6,Bグループの平均は131.0となっています.

mean in group A mean in group B 

          119.6           131.0 




2026年8月9日日曜日

Jupyter Notebook でJuliaを使う際の設定メモ

 HomebrewでJuliaをインストールするには,ターミナルから以下のコマンドを実行します.

% brew install --cask julia


Jupyter Notebookはインストールされている前提で,Juliaのパスを通します.

% echo 'export PATH=$PATH:/path/to/install/folder/bin' >> ~/.zshrc

$ exec $SHELL

Juliaを起動して"]"を押すとパッケージモードに変わるので,以下のように"IJulia"パッケージを追加します.

% Julia                                                            

               _

   _       _ _(_)_     |  Documentation: https://docs.julialang.org

  (_)     | (_) (_)    |

   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.

  | | | | | | |/ _` |  |

  | | |_| | | | (_| |  |  Version 1.12.6 (2026-04-09)

 _/ |\__'_|_|_|\__'_|  |  Official https://julialang.org release

|__/                   |


(@v1.12) pkg> add IJulia


インストールが済んで,Jupyter Notebookを立ち上げると,Juliaを選択できるようになっているはずです.

一応,ターミナルからJupyterのカーネルを確認すると,以下のようになっているはずです.

% jupyter kernelspec list

Available kernels:

  ir            /Users/***/Library/Jupyter/kernels/ir

  julia-1.12    /Users/***/Library/Jupyter/kernels/julia-1.12

  python3       /opt/anaconda3/share/jupyter/kernels/python3

% 

2026年8月8日土曜日

Jupyter Notebook でRを使う際の設定メモ

 導入にあたって,作業がダブっている可能性もありますが,実施した事を列挙しておきます.実施したのは,Apple M3が搭載されているMac Book Airです.

まずは,ターミナルを立ち上げて,Homebrew経由でZMQをインストールしました.

% brew update

% brew install zmq

必要ないとは思いますが,アップグレードもかけておきます.

% brew upgrade zmq


続けて,R パッケージを立ち上げて以下のコマンドを実行します.

> install.packages('devtools')

このコマンドを実施すると,以下のようにどこからダウンロードを行うか選択する必要があります.

--- Please select a CRAN mirror for use in this session ---

ここでは,Japanを選択しました.
続いて,以下のコマンドを実行します.

> install.packages(c('repr', 'IRdisplay', 'IRkernel'), type = 'source')

> IRkernel::installspec()


以上のコマンドを実行した後に,ターミナルからJupyter Notebookを立ち上げます.

% Jupyter-notebook

そして,Jupyter Notebookの右上の"New"プルダウンを開いてRがあれば成功です.

2026年8月7日金曜日

PowerPointで作成したファイルから画像や動画を抜き出す

 過去に作成したPowerPointのファイルで使用した,画像や動画のオリジナルのファイルが見つからなくなってしまった場合には,PowerPointのファイルから,それらを抜き出すことが可能です.以下,その手順のメモです.

まずは,The Unarchiver をインストールしておきます(App Store はこちら).

続いて,PowerPointのファイルの拡張子を".pptx"から".zip"に変更します.

そして,拡張子を変更したファイルをインストールしておいた The Unarchiver で展開します.

すると,どこに展開するかを尋ねてくるので,展開場所を指定すると様々なフォルダ,ファイルが作成されます.その中の ppt > media というフォルダを開くと,画像や動画が保存されています(数式も画像として抜き出せるらしい...).

作業が終わったら,".zip"に変更したファイルの拡張子を".pptx"に戻せばPowerPointで開くことが可能です.

2026年7月1日水曜日

Juliaのパッケージ

 Juliaのパッケージはとりあえず,以下のものをインストールしておくことにしたので,そのメモです.

ターミナルからJuliaを立ち上げ("]"を入力して)以下のコマンドを実行します.

(@v1.12) pkg> add Plots

(@v1.12) pkg> add Distributions

(@v1.12) pkg> add QuadGK

(@v1.12) pkg> add SpecialFunctions

(@v1.12) pkg> add https://github.com/ujimushi/PlotsGRBackendFontJaEmoji.jl


2026年2月1日日曜日

TeX でタイトルに日付を入れない

TeXで\maketitleとすると,自動的に日付が入ります.

これを消したいと思って,\dateコマンドを削除しても,デフォルトで作成日時が入るようになっています.日付を入れないには,\dateコマンドを以下のようにすれば,日付は表示されません.

\date{}