read.lower.tri <- function(file="", symmetric=FALSE)
{
elements <- scan(file=file, what="")
m <- length(elements)
n <- floor((sqrt(9+8*m)-3)/2)
if (m != n*(n+1)/2+n) {
stop("wrong number of elements (cannot make square matrix)")
}
x <- diag(n)
pos <- cumsum(1:n)
x[upper.tri(x, diag=TRUE)] <- as.numeric(elements[-pos])
colnames(x) <- rownames(x) <- elements[pos]
if (symmetric) {
x <- x+t(x)
diag(x) <- diag(x)/2
return(x)
}
else {
return(t(x))
}
}
( x <- read.lower.tri(symmetric=TRUE) )
SCAO 0.00
AOPR 0.91 0.00
ARPO 0.96 0.85 0.00
YOSA 0.86 0.94 0.94 0.00
ROAY 0.89 0.90 0.91 0.83 0.00
SORA 0.97 0.99 0.98 0.92 0.98 0.00
BJAO 0.90 0.91 0.95 0.92 0.89 0.85 0.00
上のような,行の名前を持つ下三角行列(対角成分を含む)を入力する関数を書いた。
第1引数に,ファイルから入力するならファイル名。デフォルトではコンソールから読む。コンソールから読むときは,関数の入力に続いてプロンプトに従って入力(どこかからコピーして,コンソールにペースト)する。空行で入力終了。
対称行列にしたければ,symmetric=TRUE にする。
反論する方も,同レベル。
http://www.daily.co.jp/gossip/article/2011/07/06/0004243154.shtml
関電の試算結果にも「『3分の1の世帯の皆さん、エアコン止めて』と言っても、どこが3分の1か分からない」とかみついた。
一般の人は,確率というのを実感できないのだなあと実感した例。
http://sankei.jp.msn.com/politics/news/110705/lcl11070522060009-n1.htm
関西電力は5日、電力使用ピーク時に突発的な停電を避けるため、5%の電力供給余力を持たせようとすると家庭用エアコンの3分の1強を停止する必要がある-との試算を公表した。ただ、この節電を実行するには、例えば1台しかエアコンがない家庭の場合はどうするのかといった問題があり、この回答をもとに大阪市は、節電策としてエアコン停止を強調する大阪府の橋下徹知事に対し「現実的でない」と疑問を投げかけた。
解決策は,もしそのような事態が発生したら,例えば自宅の電話番号(世帯主の誕生日などでもよいだろう)が3で割り切れる,3で割ったら1余る,2余るのいずれかに該当した場合に運が悪いと思ってエアコンを切ってもらうようにすればよい。剰余が0,1,2のいずれに該当する場合に対象になるかは,要請時に通知する(要請があるたびにローテーションさせる)。まあ,要請されても従わない人もいるだろうから,偶数か奇数かで最高1/2のエアコン停止というようにしておくと安全かも知れない。
共分散構造分析
http://www.ic.nanzan-u.ac.jp/~kamiya/r/content/sem.html
について,Graphviz によるパス図の描画で 2 点指摘
> path.diagram(sem.cancer, out.file="cancer.dat",
のように,第 2 引数を out.file= というように名前付きで指定すると図を描いてくれない(古いバージョンは out.file= だったのだろうか)。
path.diagram の第 2 引数は名前を持たないので,
path.diagram(sem.cancer, "cancer.dat",
のようにしないとだめだ。
> 標準化解の係数を図中に示すなら、値をここで書き直しておかないといけないですね。Graphviz は sem のためのソフトではなく、汎用の描画ソフトですから仕方ないですね(ひょっとすると、オプションで設定できるのかも知れませんが)。
これも,オンラインヘルプを良く読むことで解決される。
引数 standardize で指定できる。すなわち "if TRUE, display standardized coefficients; default is FALSE."