ロジットモデルとログサム変数について (2)

離散選択モデルに関するこのブログ内の記事はこちら
[タグ : DiscreteChoiceModel]

前回のエントリーではロジットモデルと Gumbel 分布の関係について書きました。今回はロジットモデルに関連したログサム変数についてです。

ログサム変数

ロジットモデルに対応したログサム変数はロジットモデルの正規化項の対数
\begin{align*}
V^*=\frac1\beta\ln\bigg(\sum_i \exp(\beta V_i)\bigg)
\end{align*}のように定義されます。ここで \(V_i\) はロジットモデルに現れる非ランダム効用の項で、\(\beta\) は分散パラメータ(逆温度)です。
なんだか不思議な形をしていますね。

しかし物理次元は V の次元になっていて、しかもよく見てみるとなんらかの平均操作を行っているような式の形になっています。どういうことかというと、一般化平均の式
\begin{align*}
\displaystyle f^{-1}\bigg(\frac1n\sum_if(x_i)\bigg)
\end{align*}において f を指数関数だと思った式と定数項を除いて同じ形になっている、という意味です(ちなみに f(x)=x とすれば普通の平均で、f(x)=1/x とすれば調和平均)。
このログサム変数にはいったいどのような意味があるのでしょうか?

“ロジットモデルとログサム変数について (2)”の続きを読む

ロジットモデルとログサム変数について (1)

離散選択モデルに関するこのブログ内の記事はこちら
[タグ : DiscreteChoiceModel]

このエントリーではもっとも基本的な離散選択モデルであるロジットモデルからスタートして、ログサム変数について考えてみます。

離散選択モデル

n 個の選択肢のなかから一つを選択するという意思決定の問題を考えてみます。
ロジットモデルでは選択をする人(意思決定者)は n 個の選択肢の効用が最大の選択肢を選択すると仮定します。
各選択肢 i の効用は
\begin{align*}U_i=V_i+\varepsilon\end{align*}とあらわされます。ここで \(V_i\) は効用の非ランダム成分で \(\varepsilon\) は平均がゼロな効用のランダム成分です(どんな分布に従うかについては後述)。
もしランダム成分がなければ常に最大の \(V_i\) をもつ選択肢が選ばれますが、ランダム効用を考えると選択もランダムになります。このランダム成分の誤差項の分布の違いによってさまざまな確率モデルが導出されます。

“ロジットモデルとログサム変数について (1)”の続きを読む

[Ruby] 認証プロキシを乗り越える

あるローカルなネットワークから外に出るときに、認証プロキシを通過しなければならないことはよくあります。

Web ブラウザーを経由するならば問題になりませんが、それ以外のアプリケーション経由の場合はプロキシの認証に対応していなかったりでめんどうなことも多いと思います。

そんなときはローカルにプロキシサーバを立てると便利です。

ローカルプロキシサーバのソフトウェアもありますが、ruby を使えばびっくりするほど簡単にプロキシサーバを作ることができるので、自作することにします。といっても、本当に簡単で、ほとんど定型的に以下のように書けます。ただし、エラー処理などはしてません。

# Simplest local proxy server
require 'rubygems'
require 'highline'  # gem でインストールできる
require 'webrick'
require 'webrick/httpproxy'
require 'uri'
# 親サーバーのプロキシ
puts 'Proxy authentication'
user = HighLine.new.ask('ID: ')
pass = HighLine.new.ask('Password: ') { |q| q.echo = '*' }
proxyuri="http://#{user}:#{pass}@YOUR_PROXY_SERVER:PORT"
# プロキシサーバオブジェクトを作る
s = WEBrick::HTTPProxyServer.new(
:BindAddress => '127.0.0.1',
:Port => 8028,
:ProxyVia => false,
:ProxyURI => URI.parse(proxyuri)
)
Signal.trap('INT') do
s.shutdown
end
s.start

このスクリプトをコマンドラインから起動して、親サーバのプロキシID、パスワードを入力したあと、(上の例の :BindAddress、:Port でプロキシサーバを構築した場合は)アプリケーションのプロキシ設定を

http://localhost:8028

とかすれば OK なはずです。

“[Ruby] 認証プロキシを乗り越える”の続きを読む

推定量と分散について 2 (クラメル・ラオの不等式)

先日、指数分布のパラメータλのさまざまな推定方法に対して数値実験をしました(前回のエントリー:推定量と分散について)。
100個の独立な確率変数から推定を10000回行った結果、それぞれの推定量に対して次のような分布が得られました(推定量は確率変数の関数なので、やはり確率変数となり、広がりのある分布を持ちます)。
EstiDist.jpg
それぞれの推定量の意味は前回のエントリーを見てください。
“推定量と分散について 2 (クラメル・ラオの不等式)”の続きを読む

推定量と分散について

統計的な推定問題における推定量の分布について考えてみたいと思います。

例として \(\{X_1,\; \cdots,\; X_n\}\) という独立な指数分布からのサンプルを考えます。
指数分布とは \(\lambda>0\) というパラメータを持つ確率分布で密度関数は

\begin{align*}
f(x|\lambda)=\lambda\exp(-\lambda x)
\end{align*}
のようなものです。したがって尤度関数 \(L(\lambda)\) は

\begin{align*}
L(\lambda)&=\prod_{i=1}^n\lambda\exp(-\lambda X_i)\\
&=\lambda^n\exp\bigg(-\lambda\sum_{i=1}^n X_i\bigg)
\end{align*}
となりますが、n乗根 \(L(\lambda)^{1/n}\) を最大化しても同じことなので,新しい尤度関数 \(\hat{L}(\lambda):=L(\lambda)^{1/n}\) は

\begin{align*}
\hat{L}(\lambda)&=\lambda\exp\bigg(-\lambda\cdot\frac{1}{n}\sum_{i=1}^n X_i\bigg)\\
&=\lambda\exp(-\lambda\bar X)
\end{align*}
となります。このことは平均値さえ知っていれば最尤推定ができることを意味しています。つまり、
\begin{align*}\hat\lambda=1/\bar X\end{align*}という推定量が得られます。
“推定量と分散について”の続きを読む