Last Update: Fri Oct 2 05:08:01 2009

ゲリラ的 uncorrelated のウェブページ

日記

2009.10.02
八丈島地熱発電所

八丈島地熱発電所。地熱発電は、気候に発電量が影響されず、利用可能資源量も比較的豊富ですが、国立公園や温泉地と重なるために、あまり注目されていない発電方式です。

民主党の鳩山代表が、1990年比でCO2の排出量を25%削減する目標を立てた。日本の1990年の排出量は1143.2Mt、2007年は1303.8Mt(参考ページ)なので、実際は排出量857.4Mtが目標で、現在から34.3%程度の削減になると考えられる。

生産の縮小無しで、ハイブリッド・カーの促進や、再生可能エネルギーでCO2の排出量を削減すると言っているが、ちょっと現実的では無い。

運輸部門のCO2の排出量は、航空機などを含めて、全体の2割程度だと考えられる(2007年度のCO2排出量は273Mt(参考ページ)。ハイブリッド・カーによる燃費向上はあまり明確ではないが、1800ccのホンダ・シビックの待ち乗り燃費が9.65 〜 12.97Km/L(参考ページ)、同程度のサイズのトヨタ・プリウスの燃費が14Km/L程度である(参考ページ)ことを考えると、3割ぐらいしか期待できない。仮にガソリン車を全てハイブリッド・カーに置き換えても、全体の6%もCO2は削減できない。

また、再生可能エネルギーに関しても、大きな効果は期待できない。一次エネルギーに関しては電力に集中しているが、日本の一次エネルギーに占める電力の割合は4割強(参考ページ)に過ぎない。太陽発電が普及したとしても発電量の10%程度しか補えないと考えられているので、再生可能エネルギーで火力発電を置き換えても、最大で全体の4%程度しか削減できないであろう。

あとは燃費を良くして行けばいいのだが、産業部門のエネルギー消費量はオイルショック後はほとんど伸びていない(参考ページ)。GDP比で見たCO2の排出量は、日本を1とすると、EUは1.6、米国は3.2で、日本はもともと省エネ化が進んでいる(参考ページ)。人口あたりで見たとしても、1、2、0.71となり、米国が突出してCO2排出量が多い(2006年の人口と他の温暖化ガスを含まないCO2の排出量だけで計算)。他国が日本と同レベルの省エネ化を行なうと京都議定書の提案を達成できるが、日本はそれは不可能だ。

環境問題は大事だし、CO2の排出量を抑える必要もあるし、目標を立てることも大切だ。しかし、技術的な側面や、日本や世界の現状を考慮すると、経済に影響を与えない25%削減が現実的な目標かは疑問だ。国内での環境技術へ投資するインセンティブとしては有益だと思うが、かなり画期的な技術が大量に開発されない限りは目標は達成できそうにない。下手にこの数字を国際公約にして、後々に大きな問題を残さないように願いたい。

Trackback Ping-URL: http://uncorrelated.no-ip.com/cgi-bin/trackback/20091002

あらしの為のTips

(;゚д゚)R言語でPSM

社会科学で最大の問題になるのが、実験が不可能であるため、政策などが人生に与える効果を正確に評価できない点である。長年、この問題の解決方法は研究されてきており、最近はPSMと呼ばれる手法が広まってきた。

自然科学で、実験ができる分野では、効果測定は容易である。新薬の効果測定を考える。被験者に、新薬と偽薬(placebo)を与え、何かの値を測定する。新薬を飲むグループをサンプル、偽薬を飲むグループをコントロールと称する。検定する帰無仮説H0はトリートメント (Treatment)とコントロール(Control)の測定結果が等しいと言う事であり、平均値であればt検定、分散であればF検定を用いて帰無仮説を検定する。

社会科学で、同様のことを行なってみよう。例えば、大学の教育効果の測定の場合、個々の学生には潜在能力に差があって、それが観測できない点が問題になる。良い大学を出ていなくても、潜在能力が高ければ、うまく人生を渡っていけるのかも知れない。大学卒業者の人生が良かったとしても、単に潜在能力の問題であるかも知れないのだ。しかしながら潜在能力を観察できれば、同じ潜在能力の大学卒業者をトリートメントとし、高校卒業後に就職した人をコントロールとして比較分析ができるはずだ。つまり、潜在能力を特定し、トリートメントとコントロールの組み合わせを作ることができれば、大学の効果測定を行なう事ができる。

下の表の例だと、AとB、CとDを比較しても、高校の成績(≒潜在能力)と進学大学のどちらが人生の結果(例えば収入)を決めているのかは分からない。しかし、AとC、BとDを比較すれば、進学の有無が、その後の収入を決定していることが分かるだろう。

大学進学の効果
個体 高校の成績 学位 その後の収入
A 良い 有り 高い
B 悪い 無し 低い
C 良い 無し 高い
D 悪い 有り 低い

大学進学の例では、高校の成績以外にも、親の所得の影響もあるかも知れない。次に、参加要素の分布が偏るケースがあり、比較の組み合わせが複雑なケースもありえる。そこで多元的な要素をPropensity Scoreとしてまとめる手法が用いられる。つまりPSMとは、任意のPropensity Scoreから、最適な組み合わせをリストし、その差の検定等を行なう手法のことである。

PSMで分類を行なう

実際にR言語でPSMを行なっていこう。

1. Optmatchパッケージのインストール

パッケージのインストールはコマンドから行なう事ができる。

install.packages("optmatch")

2. 試しに使うデータセット

以下は高校の成績(GPA)と、学位の有無(DEGREED)と、収入(INCOME)をあらわした、架空のサンプルである。今回はこれを例に、分析手順を確認していく。コマンドを試す場合は、右クリックして「名前をつけてリンク先を保存」すること。

3. Optmatchパッケージで分析を行なう

まずは、パッケージをロードする必要がある。

library(optmatch)

次にデータをロードする。

EFF_UNIV <- read.table(file="EFF_UNIV.txt", sep="\t", header=TRUE)

相関係数を見てみると、成績も学位も収入に相関がある事が分かる。

> cor(EFF_UNIV)
              GPA   DEGREED    INCOME
GPA     1.0000000 0.7550064 0.8368874
DEGREED 0.7550064 1.0000000 0.5892981
INCOME  0.8368874 0.5892981 1.0000000

進学者(treatment)と、就職者(control)の平均値の差の検定を行なうと、有意に進学者の収入が高い結果となる。

> treatment <- EFF_UNIV$INCOME[EFF_UNIV$DEGREED]
> control <- EFF_UNIV$INCOME[!EFF_UNIV$DEGREED]
> t.test(treatment, control)

        Welch Two Sample t-test

data:  treatment and control 
t = 5.6029, df = 47.158, p-value = 1.058e-06
alternative hypothesis: true difference in means is not equal to 0 
95 percent confidence interval:
 1.140875 2.418913 
sample estimates:
mean of x mean of y 
 32.79518  31.01528

しかし、上記の結果は個々の能力を考慮していないので、見せ掛けの相関である可能性が高い。PSMを使って分析を行なう必要がある。

ところでPSMを行なう前には、Propensity Scoreをどうするか考えないといけない。

大概のケースでは、Propensity Scoreはロジット等の二項モデルの推定値から導出される(2項モデルに関しては、2009.04.17のTipsを参照)。大学進学の例でも、進学する(=1)か、進学しない(=0)かの2択なので、Propensity Scoreはプロビット・モデルの推定値としよう。この推定値は0〜1までの確率となり、進学能力をあらわす潜在変数と見なすことができる。ここでは説明変数は一つだが、プロビット・モデルの説明変数を増やす事で、多様な要因をコントロールできる。

# プロビット・モデルを推定する
pmodel <- glm(DEGREED ~ GPA, family = binomial, data=EFF_UNIV)
# モデルの推定値からMatching用のPropensity ScoreのDiscrepancy Matrixを作成
pdist <- pscore.dist(pmodel)

Discrepancy Matrixとは、TreatmentとControlの間のPropensity Scoreの差の一覧。これをベースに、最適化マッチングを行なう事ができる。

最適化マッチングとはいえ、Pair MatchingとFull Matchingの2種類が選択肢としてとれる。Pair Matchingは、1つのTreatmentと、N個のControlの組み合わせを作る方法である。大学進学の例では、高校の成績が良い人は、大学の進学率も高くなる。つまり、高校の成績が良く大学の進学をしている人(個体A)は多数派になり、高校の成績が良く就職をしている人(個体C)は少数派となる。逆に、高校の成績が悪く大学の進学をしている人(個体D)は少数派になり、高校の成績が悪く就職をしている人(個体B)は多数派となる。この状態でPair Matchingを行なうと、個体Aと個体Bのペアリングというような不適切な関係が発生し、検定時の誤差が大きくなる。

この問題を解決するために、Propensity Scoreの大きさによってTreatmentとControlの比率を変えていく方法がとられ、それをFull Machingという(Propensity Scoreが確率分布に従うため、そこから適切なTreatmentとControlの比率を計算することができる)。

# Full Matchingを行なう
fm <- fullmatch(pdist)

Full Matchingを行なうと、"m.1"みたいな表記のfactorとしてマッチングされるstratumが保存される。stratumは、比較を行なうTreatmentとControlの組み合わせを表す。tapply()関数の第二引数がfactorであることに気付けば、色々な集計が手軽に出来ることが分かる。

# データフレームをそのまま使えるようにする(EFF_UNIV$DEGREEDと記述しなくて済む)
attach(EFF_UNIV)
# treatmentの数
tapply(DEGREED, fm, sum)
# controlの数
tapply(!DEGREED, fm, sum)
# 各stratumに含まれる数
tapply(fm, fm, length)
# 各stratumのm:nの集計。調和平均も出る。
stratumStructure(fm)

結果をまとめると、こういう感じになる。個々の能力を考慮すると、比較するTreatmentとControlの数が非対称になることが良く分かる。

続いてstratumごとに、収入の平均値の差を計算してみよう。差は再利用できるように、変数diffに格納しておく。

tmean <- tapply(INCOME[DEGREED], fm[DEGREED], mean)
cmean <- tapply(INCOME[!DEGREED], fm[!DEGREED], mean)
diff <- tmean - cmean

以上の情報を表にすると、以下のようになる。

Stratumごとの観測数と平均
m.1 m.20 m.28 m.29 m.30
平均 平均 平均 平均 平均
進学者 26 33.08978 1 31.13406 1 30.26629 1 32.10083 1 30.01979
就職者 1 31.09376 1 31.83119 9 30.73700 8 31.24718 1 30.77024
合計/差 27 1.99602 2 -0.69713 10 -0.47071 9 0.85365 2 -0.75046

PSMでペアリングした場合、学位の有無は収入に差は無いような結果になっている(もちろんデータは例なので、分析結果に意味は無いので注意)。

最後に、t-testを行なって統計的な有意性を確認しておこう。

> t.test(tmean, cmean)

        Welch Two Sample t-test

data:  tmean and cmean 
t = 0.3069, df = 4.948, p-value = 0.7714
alternative hypothesis: true difference in means is not equal to 0 
95 percent confidence interval:
 -1.378899  1.751450 
sample estimates:
mean of x mean of y 
 31.32215  31.13588 

t検定のP値は0.7714なので、統計的な有意性は無い。最初に確認した相関係数0.5892981は、見かけ上の相関と言うことになる。

4. データ生成モデル

実は上述の分析例で使ったデータは、「進学確率」が「親の年収」とGPAで決定され、「年収」がGPAで決定されるデータ生成モデルで、「親の年収」とGPAを乱数で生成したものだ。元々のモデル通りに、有意性が無い結果となっている。

逆に、「進学確率」が「親の年収」とGPAで決定され、「年収」がDEGREEで決定されるデータ生成モデルを用いた場合は、PSMで分析した場合に有意な結果となった。以下に「年収」がDEGREEで決定されるデータの作成モデルをあげておくので、PSMで分析してみると理解が深まるかも知れない。

# サンプルの数を引数にとる
gdata <- function(obs){
  GPA <- runif(obs, 0, 5) # GPAを乱数から設定
  PINCOME <- rnorm(obs, 30, 1) # 親の収入を乱数から決定
  PEP <- pnorm(GPA + PINCOME/30, 3, 1, lower.tail=TRUE) # 大学進学確率
  DEGREED <- PEP > runif(obs, 0, 1) # 大学進学の是非
# 就職後の年収は、GPAで決定される
# INCOME <- 30 + GPA + rnorm(obs, 0, 1);
# 就職後の年収は、DEGREEDで決定される
  INCOME <- 30 + 3*DEGREED + rnorm(obs, 0, 1);
  return(data.frame(GPA=GPA, DEGREED=DEGREED, INCOME=INCOME))
}
# 観測数30で、サンプルを生成
EFF_UNIV <- gdata(30);

PSMの使いどころ

パネルデータが使えるときは、固定効果モデルを使った方が妥当かも知れない。即ち、同じ個体が、ある体験をする場合と、ある体験をしない場合があるときは、その個体に対する影響に違いは固定効果モデルで推定できる。

もっとも大学進学の有無や、病気のときの投薬など、ある時点である体験の有無が排他的な選択である場合は、パネルデータとはならないのでPSMを用いる必要がある。またパネルデータであっても時間が経つと固定効果が変化すると思われるので、その場合はPSMで分析するほうが適切であると考えられる(例えば投薬効果を計るとしても、年齢によって免疫力が変化するので同じ個体と見なせない)。

まとめ

以上でR言語でPSMを大雑把に行なってみた。

PSMは政策効果の評価という、最もありふれた社会科学のトピックに有効なので、今後とも利用が拡大していくと思われる。

しかしながら、幾つか明白な注意点がある。まず、Propensity Scoreに依存するので、それの計算に用いる二項モデルの設定には、理論的な裏付けが欠かせない。次に、Pair MatchingかFull Matchingかの選択で結果が大きく変わるのでデータの特性に注意しないといけない。最後に、小サンプルだとTreatmentに対応する、妥当なControlが一つも無いという結果になって、分析が不可能になったりする。

万能ではないPSMだが、使い勝手自体は悪くないし、あまり深く考えずに使ってしまって問題は無いかも。中身はともかく流行りモノに乗っかっていると、評価されやすいのも事実ですからねヽ(´д`)ノ

参考ページ

  1. Ben B. Hansen (2007) "Optmatch: Flexible, Optimal Matching for Observational Studies," The Newsletter of the R Project, Vol.7(2), pp.18--24

注意

  1. 本ページは、本当に投げやりに書いています。
  2. 本サイトは、24時間運用ですが、事前に告知無くサーバーが停止するときもあります。必要な情報はメモをしてください。
  3. チャット友達へのページです。不愉快な思いをしても著者は責任を負いません。

過去ログ
最新版
09.14
08.03
07.31
06.29
05.29
04.17
04.14
04.13
...MORE!

全文検索
掲示板
画像板
投票CGI
ゲーム
パズル
マーカー
会員登録
会員専用

RSS1.0
RSS 1.0