max,minの分布

maxの分布

f:id:nishiru3:20180716122420p:plain

minの分布

f:id:nishiru3:20180716122503p:plain

参考文献

明解演習 数理統計 (明解演習シリーズ)

明解演習 数理統計 (明解演習シリーズ)

確率と統計 (現代基礎数学)

確率と統計 (現代基礎数学)

ワイブル分布の期待値と分散

密度関数

ワイブル分布の密度関数は次のとおりである。
f(x) = \dfrac{p}{\theta}\left(\dfrac{x}{\theta}\right)^{p-1}\exp\left\{-\left(\dfrac{x}{\theta}\right)^p\right\}

n次のモーメント

期待値や分散を求める前に、n次モーメントを求めておく。定義式に従い、
\int_0^{\infty}x^n \dfrac{p}{\theta}\left(\dfrac{x}{\theta}\right)^{p-1}\exp\left\{-\left(\dfrac{x}{\theta}\right)^p\right\}dx

ここで変数の置換を行う。
t = \left(\dfrac{x}{\theta}\right)^p
x = \theta t^{1/p}
dt = \dfrac{p}{\theta}\left(\dfrac{x}{\theta}\right)^{p-1}dx
dx= \left(\dfrac{p}{\theta}\right)^{-1}\left(\dfrac{x}{\theta}\right)^{1-p}dt

積分範囲は変わらないため、まずdtを置換すると、
 = \int_0^{\infty} x^n \left(\dfrac{x}{\theta}\right) \left(\dfrac{x}{\theta}\right)^{p-1} e^{-t} \left(\dfrac{x}{\theta}\right)^{-1} \left(\dfrac{x}{\theta}\right)^{1-p}dt
=\int_0^{\infty} x^n e^{-t} dt
=\int_0^{\infty} \theta^n t^{n/p} e^{-t} dt
=\theta^n \int_0^{\infty} t^{n/p+1-1} e^{-t}dt
=\theta^n \Gamma\left(\dfrac{n}{p}+1\right)

期待値

期待値は、n次モーメントのn=1の時であるので、
E[X]=\theta^1 \Gamma\left(\dfrac{1}{p}+1\right) = \theta \Gamma\left(\dfrac{1}{p}+1\right)

分散

分散は
V(X)=E(X^2)-{ E(X)}^2
により求める。

V(X) = \theta^2 \Gamma\left(\dfrac{2}{p}+1\right) - \theta^2 \Gamma^2\left(\dfrac{1}{p}+1\right)

参考文献

明解演習 数理統計 (明解演習シリーズ)

明解演習 数理統計 (明解演習シリーズ)

文字エンコーディングの変換

文字エンコーディングの変換

WinとかLinuxとか混在していると、文字化けが起こりやすいので変換は重要。

http://php.net/manual/ja/function.mb-convert-encoding.php

ソース

たぶん基本はUTF8で操作して必要に応じて変換するのが良さそう。

<?php
$str = 'ねむい' // UTF8
$str = mb_convert_encoding($str, "cp932",'UTF8');//UTF8からcp932への変換
echo $str.'<br />';

isset関数メモ

POST値の引き取り

PHPでPOST値をチェックするのにisset関数をよく使う。
実際の振る舞いについて確認のメモを残しておく。

ソース

<?php
/**
 * isset関数
 * http://php.net/manual/ja/function.isset.php
 * (PHP 4, PHP 5, PHP 7)
 * isset — 変数がセットされていること、そして NULL でないことを検査する
 * 変数が空文字の場合、TRUEであることに注意
 * http://php.net/manual/ja/types.comparisons.php
 */
/**
 * 変数が宣言されていて、空文字であるのでTRUEになる。
 */
$var ='';
if(isset($var)) {
    echo 'TRUE'.'<br />';
} else {
    echo 'FALSE'.'<br />';
}
/**
 * 変数が宣言されてるのみなので、FALSE
 */
$x;
if(isset($x)) {
    echo 'TRUE'.'<br />';
} else {
    echo 'FALSE'.'<br />';
}
/**
 * 変数が宣言されていないので、FALSE
 */
if(isset($y)) {
    echo 'TRUE'.'<br />';
} else {
    echo 'FALSE'.'<br />';
}

preg_matchによる所定の書式の文字の確認

ちょっとした正規表現

以前、正規表現による値が数値かどうかを確認する記事を書いたが、
PHPで日付データを確認する方法をメモしておく。

nishiru3.hatenablog.com

ソース

まだ十分ではないが、書式についてはチェックできる。ただし、2018/33/33とかにもマッチしてしまうので、
その部分は修正が必要。

<?php
/**
 * preg_matchによる日付のチェック
 * 「2018/12/12 00:00:00」
 * $patternで正規表現のパターンを設定
 * 「^」、「$」は最初と最後を固定
 *  \d{4} 西暦の4文字
 *  ([/-]?) 次の月の区切りとして/もしくは-。ただしなくてもよい。
 *  \d{1,2} 月の1文字もしくは2文字。
 *  ([/-]?) 次の日の区切りとして/もしくは-。ただしなくてもよい。
 *  ¥d{1,2} 日の1文字もしくは2文字
 *  \s スペース
 *  \d{2}:\d{2}:\d{2} 00:00:00にマッチ。上位の桁の場合も2文字でないとマッチしない。
 */
$pattern="#^\d{4}([/-]?)\d{1,2}([/-]?)\d{1,2}\s\d{2}:\d{2}:\d{2}$#";

$str_time='2018/12/22 00:00:00';
if(preg_match($pattern,$str_time,$match)){
    print $str_time."は正しい書式です。"."<br>";
}else{
    print $str_time."は正しくない書式です。"."<br>";
}

PDOによるテーブルやデータの操作

基本的な操作

すぐ忘れちゃうので書いておく。

<?php
/**
 * PDOによる
 * 「テーブルの作成」
 * 「データの挿入」
 * 「データの取得」
 * 「データの削除」
 * 「データの取得」
 * 「テーブルの削除」
 * http://php.net/manual/ja/book.pdo.php
 */
/**
 * PDOでMySQLに接続するためのパラメータ
 */
$dsn = 'mysql:dbname=projects;host=localhost';
$user = 'admin';
$password = 'pass';
/**
 * MySQLに接続
 */
try{
    $dbh = new PDO($dsn, $user, $password);
    print('接続に成功しました。<br>');
}catch (PDOException $e){
    print('Error:'.$e->getMessage());
    die();
}
/**
 * テーブルの作成
 */
$stmt = $dbh->query("CREATE TABLE projects.meibo (id INT,name TEXT)");
/* 結果の取得*/
$results = $stmt->fetchall();
/**
 * データの挿入
 */
$stmt = $dbh->query("INSERT INTO projects.meibo VALUES(1,'名無し1')");
$results = $stmt->fetchall();
/* データの取得
 * PDO::FETCH_ASSOC 連想配列で返すフラグみたいなもの
 */
$stmt = $dbh->query("SELECT * FROM projects.meibo");
$results = $stmt->fetchall(PDO::FETCH_ASSOC);
echo '<br />データ挿入後<br />';
var_dump($results);
/**
 * データの削除
 */
$stmt = $dbh->query("DELETE FROM projects.meibo WHERE id = 1");
$results = $stmt->fetchall(PDO::FETCH_ASSOC);
echo '<br />データ削除後<br />';
var_dump($results);
/**
 * デーブルの削除
 */
$stmt = $dbh->query("DROP TABLE projects.meibo");
$results = $stmt->fetchall();