Cou氏の徒然日記

ほのぼの日記ブログです。

統計検定2級への道 その7 -2変数データの相関、分析-

引き続き、統計検定のお勉強。

今回は、2変数データの分析について。

■ 散布図

2変数  (x, y) = (x_{1}, y_{1}), (x_{2}, y_{2}), \cdots , (x_{n}, y_{n}) についての相関は以下の通り。

f:id:coublood:20210711005347p:plain

f:id:coublood:20210711005352p:plain

■ 共分散 と 相関係数

2変数  X, Y について、

 X = (x_{1}, x_{2}, \cdots , x_{n}) の平均値  \mu_{x}標準偏差  \sigma_{x}

 Y = (y_{1}, y_{2}, \cdots , y_{n}) の平均値  \mu_{y}標準偏差  \sigma_{y}

とした場合、

共分散  \sigma_{XY} = \displaystyle \frac{1}{n} \sum_{i=1}^{n} (x_{i} - \mu_{x}) (y_{i} - \mu_{y})

相関係数  \rho_{xy} = \displaystyle \frac{ \sigma_{XY}}{\sigma_{X} \sigma_{Y}}

と定義する。

 

 \rho_{XY} = -1

f:id:coublood:20210711010541p:plain

 -1 <  \rho_{XY} <  0

f:id:coublood:20210711005352p:plain

  \rho_{XY} = 0

→ 相関なし(無相関)

 

 0 <  \rho_{XY} <  1

f:id:coublood:20210711005347p:plain

  \rho_{XY} = 1

f:id:coublood:20210711010738p:plain

■ 回帰直線

 y = ax +b    (a, b : 定数 ) 

 \quad a = \displaystyle \frac { \sigma_{XY}}{ \sigma_{X}^{2}}

f:id:coublood:20210711012703p:plain 

 

回帰直線は、重回帰分析の結果で出てくるものです。

私の場合、データから回帰直線を求めるために、Excelで重回帰分析をよく使います。

(性能測定の分析、リソースに対するシステム要件の計算など)

このあたりを覚えておくと役に立つ…のかどうかわかりませんが、理屈は分かりますね。

東京五輪前の感染拡大と支持率低下

神奈川県にも感染者拡大中…。

news.yahoo.co.jp

日本に限らず、世界でもどんどん感染拡大している状態になっています。

news.yahoo.co.jp

東京五輪までもう数日と言った状況。

バッハIOC会長も失言がもとで、もはや日本では何を行っても炎上しそうな感じになっちゃっています。何しに日本に来たんでしょうか?・・・という状態。

 

オリンピックも、今までに中止するという方向に舵を切るタイミングは何度もあったはずですが、結局この不安定な状況で開催というには本当にどうなんでしょうかね…と思ってしまいます。

無観客で開催するのはいいとしても、選手がクラスタ感染して死者が出た・・・なんてことになったら果たしてどうするつもりなのか。

せめてワクチン接種が終わることとオリンピック開催の引き換えの約束をして、それができないなら潔く諦める…というのも必要だったのではないかと思いますので。

命の危険を犯してまで開催に踏み切るのは、少なくとも私は正解とは思えません。

東京五輪を開催して、これでパンデミックや病床圧迫、医療崩壊を招いたら、誰が責任を取るのでしょうか?

 

このオリンピック、果たして一体誰のためにやるのでしょうか・・・。

 

 

そして、菅内閣の支持率も順調に低下中。

news.yahoo.co.jp

そりゃ、ここまでに何もしてこなかった、何もリーダーシップを発揮できなかった首相が支持されるわけもなく。

申し訳ないですが、官房長官として大変優秀だった人は、参謀としては向いていても、リーダーとしては向いていないことがより印象付けられた気がします。(以前の福田総理もそうでしたし)

この1年、振り返ってみても、結局、政府としてコロナ対策としてやったことといえば、緊急事態宣言の発令・解除の繰り返しだけしか印象がありませんので…。

菅政権が不時着する時も確実に近づいている気がしますね。

文字列比較

新人OJTネタです。

 

コーディングレビューでの一コマ。

今のプロジェクトでは、複数のプログラム言語を併用した開発を行っております。

 

今回は、C++でのコーディングで、コマンドのオプションの拡張。

オプションを追加することになり、その実装を担当させることになり、実装工程も終わり、コーディングレビューの工程へ。

f:id:coublood:20210716171000p:plain

オプションを追加して、そのオプション名のチェック処理ですが、あがってきたソースはこんな感じ。

if (strncmp(buf, OPTION_NAME_STR, sizeof(OPTION_NAME_STR)-1) == 0) {
     // オプション名が一致した場合の処理
}

引数ごとにbuf 変数に値を格納し、そのbuf変数の値がオプション名に一致しているかをチェックする処理ですが…

よくよく見るとこれはおかしいですよね。

 

■ strncmp関数

int strncmp(const char *s1, const char *s2, size_t n);

文字列*s1 と文字列*s2 を先頭からn文字比較。'\0'以降の比較は行われない。

s1 > s2 で正の値が,s1 < s2 で負の値が,s1 = s2で 0 が返される。

 

sizeof(OPTION_NAME_STR) のサイズは '\0' までのサイズになるため、そのため、上記実装をよく見てみると、比較するサイズを sizeof(buf) - 1 とすると’\0' は比較対象に含まれないことになります。

 

仮に

#define OPTiON_NAME_STR   "option"

とマクロ定義していたとすると、strncmp関数で sizeof(OPTION_NAME_STR) で比較されるのは '\0' ですが、「-1」しているために 'n' までになってしまいます。

こうすると、完全一致判定条件ではなく前方一致判定条件になってしまい、「option」で始まっている文字列であれば、何でも条件を満たしてしまいます。

例えば buf変数に「option2」とか「option test」とかが入っている場合でも、条件に当てはまってしまいます。

 

本人にこの実装おかしくない?と聞いてみると、「????」という感じでした。

他に同じような処理があり、それを持ってきて実装してみてとりあえず動いたので大丈夫みたいな感じだったようですね。

なんで「-1」したのかについては、

strncpy (buf, tmp, sizeof(buf) - 1);

があったからのようです。

strncpy関数で、コピー先の領域サイズから1引く理由は、strncpy関数は '\0' は自動付与してくれないので、sizeof(tmp) > sizeof(buf) の場合、buf変数の最後に '\0' が付与されないままになってしまいます。

このまま参照してしまうと危ないですね。

 

コーディング時間を短縮するためには、既存のコードを流用するというのは勿論アリだと思います。

ただ、何も考えずにコピペしてもダメで、その処理をきちんと理解した上で流用しているかどうかになりますね。