【親ページ >>> Q&A (初級者コース)

初心者のための R および RjpWiki に関する質問コーナー

新規投稿はできません。

過去の記事のアーカイブ



MacOS10.5でR2.9.0、日本語の表示ができません。

H.I.? (2009-04-23 (木) 18:55:52)

初心者です。
MacOS10.5、X11でR2.9.0を動かしています。
グラフの中に日本語の文字を入れることができません。
この日本語化掲示板の2009年2月12日の回答を参考にやってみましたがだめでした。
お教えいただけると助かります。

sessionInfo()
R version 2.9.0 (2009-04-17)
i386-apple-darwin8.11.1

locale:
ja_JP.UTF-8/ja_JP.UTF-8/C/C/ja_JP.UTF-8/ja_JP.UTF-8

attached base packages:
[1] stats graphics grDevices utils datasets methods
[7] base

  • R2.8.1のときにはできていたのでしょうか。それとも,今回初めてやってみたのでしょうか。「日本語化掲示板の2009年2月12日の回答」に従えば,できるはずなんですけどねぇ。というか,Quartsウインドウでの話ですよね。
    それとも,そうではないとは思うけどひょっとして,ファイルに出力したときの話?後者ならば,このQ&A初級者コースの下の方「Vista版R 2.8.1でPDFを作成するときの日本語フォントが」を参照するとよいかも。Windowsの場合じゃないかとお思いでしょうが,OS Xの場合も同じです。
    ちょっと気になるのは,なぜ,「X11で」と書いているのかな?PNGなどで出力しようとしているんですか。PDF で出すのが一番よいと思います。 -- 2009-04-23 (木) 19:11:38
  • 早速お返事ありがとうございます。 -- H.I.? 2009-04-24 (金) 17:20:50
  • 今回のR2.9.0が始めてです。Quartsウィンドウに日本語の表示ができません。日本語化掲示板の2009年2月12日の回答をもとにテキストエディタにペーストし、ホームディレクトリに.Rprofileのファイルをつくりましたが、文字が現れるべきところには薄い四角が字数分見えるだけです。 -- H.I.? 2009-04-24 (金) 17:23:46
  • 私は Mac 版 R バイナリをほとんど使っていないので,どなたか別の方の回答が望ましいのですが,とりあえず,なかまさんのスクリプトの先頭部分に以下を追加してみたらどうなります. -- ishida 2009-04-25 (土) 11:33:41
if (.Platform$pkgType == "mac.binary"){
       options(device="quartz")
}
  • ishida様ありがとうございます。ご指示の通りに行ないましたが、文字は出てこず、”□”が現れるだけでした。 -- H.I.? 2009-04-25 (土) 12:04:35
  • 疑うようで申し訳ありませんが,「ターミナル」で,cd; cat .Rprofile によって,設定した内容が表示されるんですね?キーボードから入力したのなら,綴りに間違いがないかよく確認してください。 -- 2009-04-25 (土) 12:31:54
  • 度々恐れ入ります。Xtermでcd;cat .Rprofileを入力すると、設定内容が表示されます。2008年5月6日にある通りで、間違いありません。どうしたらよいのでしょうか。 -- H.I.? 2009-04-25 (土) 13:43:50
  • 既に確認済みかと思いますが,R で,
    get("familyset_hook", pos="MacJapanEnv")
    をやると,
    function() { if(names(dev.cur())=="quartz") par(family="sans")}
    が表示されるんですよね。 -- 2009-04-25 (土) 13:51:40
  • はい、そのとおり表示されます。 -- H.I.? 2009-04-25 (土) 14:13:54
  • 同様の環境で試したところ、同じ問題が発生しました。そこで、
    (1)Show Hide Invisible filesというツールをダウンロードして、Finderで不可視ファイルを表示できるようにします。
    (2)次に/ライブラリ/Frameworks/R.frameworkを丸ごと消去し、再度R2.9.0をインストールします。
    (3).RprofileをCotEditor?で開いて上記内容を記録し、utf-8でホームディレクトリ直下に保存します。
    これで、私は正常に表示されるようになりました。(ターミナルは使いません)-- okinawa 2009-04-25 (土) 17:26:24
  • okinawa様ありがとうございます。(2)まではできましたが、(3)の「上記内容を記録し」とは、具体的にはどう記述したらよろしいのでしょうか。またCotEditor?を用いないといけないのでしょうか。 -- H.I.? 2009-04-25 (土) 18:29:54
  • どのようなエディタでもよいでしょう。vi でも。。。なんでも。
    本質が何であるかを特定する必要があるでしょう。
    (1) については,ファインダー操作(たとえば,テキストエディタ)で .Rprofile を編集対象にできるようにということですね?
    質問者は「ターミナル」を使えるようなので,この要件は必須ではないということでよいですね?
    (2) については,「再インストールしてください」ということなんでしょうね?
    (3) については,これも再度 .Rprofile を作ってくださいということでしょう(vi を使おうが,CotEditor? を使おうが,それ以外の手段であろうが)。
    なお,.Rprofile は ascii ファイル(英数字のみからなるファイル)なので,ファイルのコードが euc-jp であろうと utf-8 であろうと,その他 ascii ファイルを保存できるコードなら,なんでも構わないということですね。
    結局,もう一度インストールと .Rprofile を作り直してください,ということなのかなあ。 -- 2009-04-25 (土) 19:30:38
  • (2)は私の場合、/ライブラリ/Frameworks/R.frameworkにかなり古いRのバージョンも入っていたので、悪さしてるかもしれないと思い、R2.9.0だけにするためR.frameworkを一旦消去して再インストールしました。(1)と(3)は好みなので、お好きな方法でどうぞ。↑の方が言われているように.Rprofileを作り直してみてください。(^_^) -- okinawa 2009-04-25 (土) 20:40:12
  • お騒がせして申し訳ありません。問題はまだ解決していません。どなたか他の解決法をお教えいただけないでしょうか。 -- H.I.? 2009-04-26 (日) 07:27:14
  • 「絶対R2.9.0じゃなきゃいや!」でなければ、R2.6.2などの古いバージョンをインストールしてみるとか。古いバージョンでもたいして変わらないからね。 -- 2009-04-26 (日) 13:28:51
  • 大変お騒がせしました。できました。http://aoki2.si.gunma-u.ac.jp/R/begin.htmlの6.の通りに.Profileを作成することでできました。私の不注意でした。申し訳ありません。 -- H.I.? 2009-04-26 (日) 20:33:44
  • ↑ serif がゴシック体になってるけど、逆では? -- surg? 2009-04-26 (日) 21:23:06
  • なにはともあれ、できてよかった。おかげで久しぶりにMac版Rを触った。 -- okinawa 2009-04-26 (日) 22:07:31

回帰をグループごとに実行し、同データフレームに出力したいのですが。。。

頭バクハツです、、、もぅ、、、? (2009-04-23 (木) 06:34:03)


非常に初歩的な質問かもしれないのですが、
私にとってはとても難しく、悩んでも答えが出ませんでした。
どなたか、ぜひ、ご教示ください。

以下のようなデータフレームXXがあります。
変数A,Bを用いて回帰回帰分析を行い、最終的に変数Xの予測値、PREDICT.Xを予想することを目的とします。
これだけであればよかったのですが、次のことをする必要に迫られています。(データは簡略化し、かつ適当な数字です。)

1958年とそれ以降のデータを分け、別個に回帰する。
あるいは、変数label内で、同じラベルを張られているものは、同じグループとして回帰する。
(1958年以前のラベルはすべて1ですので、上記の2文は全く同じグループ分けを指します。)

data.frame XX

year	label	X	A	B	PREDICT.X
1951	1	NA	1	191	?
1952	1	NA	2	9	?
1953	1	NA	3	29	?
1954	1	NA	4	349	?
1955	1	4 	5	2	?
1956	1	3 	5	9	?
1957	1	NA	6	3	?
1958	1	NA	6	495	?
1959	2	2 	7	692	?
1960	2	3 	8	94	?
1961	2	3 	9	95	?
1962	2	NA	7	93	?
1963	2	NA	6	7	?
1964	2	NA	5	3	?
1965	2	4 	8	3	?
1966	2	3 	4	2	?

この為に、以下のようにコードしました。

if(XX$year<1958){
                model.X<-lm(PREDICT.X~A+B)
                pred.X <-predict(model.X,XX)}

が、エラー”条件が2以上になったので、最初の1つを使用しました”となってしまいます。

どのようにコードすれば、データフレームXXに予測値PREDICT.Xを計算することが出来るのでしょうか。
どうか、よろしくお願いします。

  • 自己レスです。投稿前は、表をきれいに揃えたのですが、画面ではガタガタになってしまいました。見難くてご迷惑をお掛けします。 -- 2009-04-23 (木) 07:01:45
  • ある変数の値によりデータフレームを分割する split 関数 を調べればよいと思います。また,投稿方法については,編集画面に「テキスト整形のルールを表示する」がありますので,初めての投稿時にはそれを読むべきだったと思います。 -- 2009-04-23 (木) 07:12:52
  • レスありがとうございました!split関数というものを、初めて知りました。また、投稿初心者向けのテキスト整形ルールに気が付かず、読みにくいまま投稿してしまい、申し訳ありませんでした。次回からは読んで投稿します。 -- 2009-04-25 (土) 05:27:03

pls.ldaの使い方について

kuri? (2009-04-22 (水) 17:36:13)

状況;パッケージplsgenomicsのpls.ldaで、クラス分類されたデータに対し て、モデルを構築しようとしております。

問題点;cross validationでモデルを構築したいのですが、
pls.lda(Xtrain, Ytrain, Xtest=NULL, ncomp=1:20, nruncv=20, alpha=9/10, priors=NULL)
で、実行したところ同じデータセットを用いても、出力結果が二回すれば二回
とも異なることになってしまいます。

考えられる原因;cross validation を行うときにtest setとtraing setの選び方がランダムに選ばれている可能性があるのではないかと思います。

質問内容;結果を何回行っても同じようにするためにはどのようにcrossvalidationを行うべきでしょうか?教えて頂きたいと思います。
どうぞよろしくお願いいたします。

  • pls.lda から呼ばれている pls.lds.cv の中で,sample 関数が使われているからでしょう。分析の前に set.seed(777) などとやってみれば,いつも同じ答えが出るのではないですか?オンラインヘルプ参照で済まなければ,ソースを読みましょう。 -- 2009-04-22 (水) 17:55:02
  • ありがとうございます。試してみます。 -- kuri? 2009-04-22 (水) 18:03:12

散布図のプロット座標変換

Wanko? (2009-04-22 (水) 08:16:10)

R version 2.8.1 (2008-12-22)
i386-pc-mingw32
locale:
LC_COLLATE=Japanese_Japan.932;LC_CTYPE=Japanese_Japan.932;LC_MONETARY=Japanese_Japan.932;LC_NUMERIC=C;LC_TIME=Japanese_Japan.932
attached base packages:
[1] stats graphics grDevices utils datasets methods base

今日は、散布図のプロット座標変換の質問をさせて下さい。

たとえば
plot(x,y) として描いたプロットのX,Y軸のデータ範囲が
X: 最大値 8 最小値 -6
Y: 最大値 3 最小値 -2
となっているとします。

これを X, Y軸とも
最大値 -1 最小値 +1 の範囲に成るよう座標点のX,Y値を変更したいのです。

今は、数行のコードで変換していますが、Rにはそのような関数が用意されて
いないでしょうか?

よろしくお願いします。

  • 数行のコードということですが,このような短い関数を用意しておけばよいのでは。func <- function(x) (x-min(x))/diff(range(x))*2-1 -- 2009-04-22 (水) 08:33:04
  • Rに用意されている関数としては、scale()があります。scale.defaultで関数の定義を表示すれば分かるように内部でsweep()を利用しています。これは最大値 -1 最小値 +1 の範囲という要件を満たしていませんが、自分で関数を作成する場合の参考になると思います。しかしながら、すでに数行で解決しているなら、わざわざscale.defaultほど長いものを書かなくてもよいかもしれませんし、今回のケースは上のコメントで解決かと思います。 -- 2009-04-22 (水) 12:19:11
  • > func <- function(x) (x-min(x))/diff(range(x))*2-1 ありがとうございます。6行が3行になりました。→ やっていたことは基本的に同じでした。スマートに書けて嬉しいです。> Rに用意されている関数としては、scale()があります。・・・今後のコード作成技術を向上させる意味でも勉強させていただきます。 -- Wanko? 2009-04-22 (水) 15:02:19

引数をグラフのタイトルにするには?

ちっぽけな自分? (2009-04-21 (火) 23:01:16)


以下のように、functionの引数(数値型)として、例えばA,Bを使用しました。
function内でグラフを作成し、そのタイトルに数値型の引数A,Bを利用して
"AからBまで"と出力したいとします。
どのようにコードすればよいのでしょうか????
長く時間をかけるのですが、未だに解決できません。

どなたか、解決策を教えて頂けませんか?。
よろしくお願いします。

example <- function(A,B){

kaiki<-lm(...)
plot(kaiki...)

title(AからBまで)←←こう出力したいのです。

}


example(1,2) →→→→ グラフのタイトルを ”1から2まで”と出力したい。
example(3,4) →→→→ グラフのタイトルを ”3から4まで”と出力したい。

  • title(paste(A, 'から', B, 'まで',sep='')) -- 大きな自分? 2009-04-21 (火) 23:46:10
  • ありがとうございます!なぜだかうまく引数が入ってくれないのですが、もう少しねばってみます。どこかに自分のミスがあるはず・・・。 -- 2009-04-25 (土) 05:23:09

chisq.test()の出力について

MH? (2009-04-19 (日) 22:21:28)

初めて書かせて頂きます。書き方や書く場所が適切でなかったら、申し訳ありません。chisq.test()について、3つほど質問があります。非常に初歩的(かつ舌足らず)な質問で恐縮です。

1) 2x2よりも大きい分割表(例えば、2x3)を分析する際には、引数correctをTにしてもFにしても、同じ結果がかえってきます。また、Tにした場合も、出力の1行目に"with Yates' continuity correction"という文言が出ないため、イェーツの補正がかかっていないということでしょうか?
2) Rでのイェーツの補正は、X-squared=0の場合(実測値と期待値が全く同じ場合)にも補正をし、その結果としてx-squaredが0よりも大きい値となるようですが、これは統計的に言って妥当なのでしょうか?
3) chisq.test()を実行すると、出力の1行目が"Pearson's Chi-squared test"となる場合と"Chi-squared test for given probabilities"となる場合があります。これらはどのように違うのでしょうか? また、後者はどのようなときに出力されるのでしょうか?

  • http://aoki2.si.gunma-u.ac.jp/Hanasi/yates/index.html -- 2009-04-22 (水) 01:16:35
  • 3) については,以下を比較・検討すれば解答が得られよう。同じだろ,なんて,言わないでね。 -- 2009-04-22 (水) 08:55:36
    chisq.test(c(2,3,1,2,3,4))
    chisq.test(matrix(c(2,3,1,2,3,4), 2, 3))
  • 1) は help(chisq.test) を読めば分かるでしょう。 -- 2009-04-22 (水) 11:52:37
  • 質問者です。ありがとうございました。 -- MH? 2009-04-24 (金) 12:56:44

EPSファイルへのTeXコマンド埋め込み(2.9.0 for Winでは失敗)

Hiro? (2009-04-19 (日) 10:31:45)

WinXP pro SP2、R 2.9.0 for Winです。
RでEPSファイルを作成する時にTeXコマンドを埋め込み、LaTeXでPSfrag.styを経由して文書を作成しています。2.8.1までは、次のようなスクリプトを作り、LaTeXファイル側でpsfragscanonコマンドを使うことで、EPS作成時に埋め込んだTeXコマンドは問題なくインライン展開されていました。

ps.options(family="ComputerModern")
plot(sin,
  main="\\tex[][]{\\LARGE Curve of $\\sin(x)$ and $\\cos(x)$}",
  xlab="\\tex[][]{\\large $x$}",
  ylab="\\tex[][]{\\large $\\sin(x)$ and $\\cos(x)$}")
curve(cos, add=T)
dev.copy2eps(file="sin.eps")


EPSファイルの中のTeXコマンド部分は次のようになっていたので、TeXも理解できていたようです。

265.27 467.43 (\\tex[][]{\\LARGE Curve of $\\sin\(x\)$ and $\\cos\(x\)$}) .5 0 0 t


しかし、同じ事を2.9.0で実行すると、出来上がるEPSファイルの中で、TeXコマンドに対応する文字列が、以下のように無残にぶった切られ、TeXコンパイルも当然の如く失敗します。

73.82 455.43 (\\tex[][]{\\LAR) 0 ta
-0.434 (GE Curv) tb
-0.434 (e of $\\sin\(x\)$ and $\\cos\(x\)$}) tb gr


このEPSファイルを、次のLaTeXファイルにかけると、

\documentclass{jarticle}
\usepackage{psfrag,graphicx}
\begin{document}
\begin{center}
 \psfragscanon
 \includegraphics[width=10cm]{sin.eps}
\end{center}
\end{document}
! Undefined control sequence.
<argument> \LAR 
               ) 0 ta -0.434 (GE Curv) tb -0.434 (e of $\sin (x)$ and $\cos...
l.6  \includegraphics[width=10cm]{sin.eps}

と叱られます。

2.9.0のChangelogやNEWSを見ても、この問題に対応する仕様変更は見つけられませんでした。対応方法をご存知の方はいらっしゃいませんでしょうか?

  • ps.options(family="ComputerModern?", useKerning=F) をしてください -- 2009-04-20 (月) 09:53:31
  • できました! ご教示ありがとうございました。 -- Hiro? 2009-04-20 (月) 11:12:09

R2.9.0のインストール

yishii? (2009-04-19 (日) 00:53:45)

VistsでR2.8.1を使っていましたが、今度R2.9.0をインストールしました。ところが、packagesのインストールができなくなりました。
環境は以下のとおり。

sessionInfo()
R version 2.9.0 (2009-04-17)
i386-pc-mingw32

locale:
LC_COLLATE=Japanese_Japan.932;LC_CTYPE=Japanese_Japan.932;LC_MONETARY=Japanese_Japan.932;LC_NUMERIC=C;LC_TIME=Japanese_Japan.932

ローカルにダウンロードしたpackageAAAは2.9用はもちろん2.8用でも以下の警告が出るので困っています。
どうすればいいかどうかよろしくご教授ください。
install.packages(choose.files("", filters = Filters[c("zip", 中で警告がありました:

 'lib = "C:\Users\本人名\Local Settings\Application Data\R-core\R/R/win-library/2.9"' は書き込み可能ではありません  
以下にエラー install.packages(choose.files("", filters = Filters[c("zip",  : 
  パッケージをインストール出来ませんでした 。
  • 自己レスです。administrator権限でログオンしていたのに書き換え権がなくなっていました。お騒がせしました。 -- yishii? 2009-04-19 (日) 20:26:03

boxplotの計算方法について

nanbuwks? (2009-04-15 (水) 08:12:01)

boxplotについて、教えてください。
http://www.okada.jp.org/RWiki/?%A5%B0%A5%E9%A5%D5%A5%A3%A5%C3%A5%AF%A5%B9%BB%B2%B9%CD%BC%C2%CE%E3%BD%B8%A1%A7%C8%A2%B7%BF%BF%DE

「上下のひげは、それぞれ上(下)側四分位数の位置から、極値までの間に引かれます。極値とは、上(下)側四分位数から四分位範囲の 1.5 倍以内にあるデータのうちの最大(小)値です。極値よりも大きい、または小さい値は外れ値としてひげの先にプロットされます。」
と説明があります。
例えば、100人分の100点満点のテストのデータがあるとすると、データ値順に25人目の値が90点、50人目の値が60点、 75人目の値が50点とすると、極値とは105点〜45点の中にある最大最小値ということになるのでしょうか?

  • この例だと,四分位範囲 = Q3/4 - Q1/4 = 90 - 50 = 40 ですよ -- surg? 2009-04-15 (水) 10:17:03
  • 極値を超えるデータについては, 外れ値と判断され、個別の点でプロットされます。この場合は40*1.5+90=150 と、 50-40*1.5=-10 が極値になるので、100点満点のテストなら外れ値は存在しないはずですね. 1.5の値はrenge引数で変更できます。 -- 2009-04-15 (水) 14:37:54
  • 四分位範囲と四分位数をごちゃまぜにして混乱してました。よくわかりました。ありがとうございました。 -- nanbuwks? 2009-04-18 (土) 23:36:10

エクセル読み込み時のエラー

どうしてもわかりません。。? (2009-04-10 (金) 07:49:40)

R2.8.1を使っています。
OSはWindowsXPです。
例えば、以下のコードでエクセルを読み込み出力してみました。
しかし、途中までは読み込めているのですが、
途中からデータが存在するにも関わらずNAが表示されてしまいます。
何が考えられる原因なのでしょうか。
教えて頂けると助かります。
よろしくお願い致します。


library(RODBC)
original <- odbcConnectExcel?("えくせる.xls")
sqlTables(original)
X<-sqlQuery(original,"select*from [シート1$]" )
odbcClose(X)

元データ(例)
A B C D E F G
1975 1 1 1744 85.24 164 8
1975 2 1 1618 79.08 187 9
1975 3 1 1651 80.69 170 8
1975 4 1 1572 76.83 136 6
1975 5 1 1603 78.35 102 4

	

出力結果
A B C D E F G
1975 1 1 1744 85.24 NA NA
1975 2 1 1618 79.08 NA NA
1975 3 1 1651 80.69 NA NA
1975 5 1 1603 78.35 NA NA

  • こうかな?(xlsファイルは97-2000フォーマット) -- okinawa 2009-04-10 (金) 16:31:54
    library(RODBC)
    original <- odbcConnectExcel("c:/ABCDEFG.xls")
    sqlTables(original)
    X<-sqlQuery(original,"select*from [ABCDEFG$]" ) 
    Y<-X #Xは参照渡しなのでYに値渡しする
    odbcClose(original)
    Y
  • >okinawaさま 解決方法のご提示ありがとうございました!!これでスッキリ解決できるかな〜と思ったら、今回はダメでした。。とても残念です。色々とプログラムをいじっているうちに気がついたのですが、データフレームのデータ名を除く一行目のデータがNAの場合、以降、数値がセルに入っていてもNAと読み込んでいるようでした。なぜでしょう。。。とても不思議です。全く不明です。 -- 2009-04-11 (土) 03:45:14
  • 提示されているデータでは、同じ環境で正常に取り出せています。通常のODBCデータソースからExcelを開く時の設定に「スキャン行数」があるので、1行目で型を調べてNAの場合強制的にNAになるプログラムなのかもしれませんね。odbcConnectExcel?は制限が多いとマニュアルにも書いてあるので、色々問題が出るかもしれません。odbcConnectの方を使ってみたらいかがでしょうか? -- okinawa 2009-04-11 (土) 09:46:07
  • この程度の規模のデータなら,読み込み範囲を定義してread.table("clipboard")程度で片が付くのでは。そうでなくても,Excelでテキストファイル(CSV)で保存して,read.csvで読み込むとか。 -- 2009-04-12 (日) 22:29:17
  • 質問したかたが「意図的に難しい手法を使いたい」のだと解釈していました。そうでなければ↑の方がはるかに簡単です。 -- okinawa 2009-04-14 (火) 11:02:43
  • >okinawaさま 再度のレスありがとうございます。行数に制限ですか!納得しました。 データ数2万件だったので、このデータ数制限にひっかかった。。と考えれば納得です! -- どうしてもわかりません。。? 2009-04-21 (火) 22:10:28

pairwise.t.test()について

ビクス? (2009-04-08 (水) 20:21:24)

こんにちは。
pairwise.t.test()の引数pool.sdについて伺いたいことがあります。
これはpool.sd=Tとすると各群の標準偏差が等しいことを意味し、
つまり等分散を仮定することと同義だと思ったのですが、
等分散を仮定したt.test()と補正無し、pool.sd=Tのpairwise.t.test()の
p-valueが一致しません。たとえば以下のような3群xを検定します。

x <- c(c(1:20),c(21:40),c(41:60))
group <- c(rep(1,20),rep(2,20),rep(3,20))
t.test(x[1:40]~group[1:40], var=T)
	Two Sample t-test

data:  x[1:40] by group[1:40] 
t = -10.6904, df = 38, p-value = 5.168e-13

pairwise.t.test(x,group, pool.sd=T, p.adj="none")
	Pairwise comparisons using t tests with pooled SD 

data:  x and group 

 1       2      
2 3.1e-15 -      
3 < 2e-16 3.1e-15


このようにt.test()では1群と2群はp-value=5.168e-13、pairwise.t.test()
では3.1e-15となります。

pool.sd=Tは等分散が等しいことを意味していないのでしょうか?
ヘルプを見ても意味が理解できません。そもそも、なぜvar=Tという引数が
ないのでしょうか?
宜しくお願いします。

  •  pool.sd     switch to allow/disallow the use of a pooled SD
       ですから,等分散などは意味していないと思いますけど。
     > そもそも、なぜvar=Tという引数がないのでしょうか?
       引数名とか TRUE を略記するのはお勧めではないですが,pairwise.t.test のオンラインヘルプを見ればわかりますが,引数に ... が含まれていますので,t.test の引数も渡せますよ。ということで,var.equal=TRUE を渡すことはできます。ただし,その場合には pool.sd=FALSE にしないといけない。そのようにすれば,t.test( var.equal=TRUE) と pairwise.t.test( pooled.sd=FALSE, var.equal=TRUE) の結果は等しくなります(下記の実行例参照) -- 2009-04-08 (水) 22:06:21
    > set.seed(141421356)
    > x <- c(rnorm(20), rnorm(20, mean=0.5), rnorm(20, mean=1))
    > group <- c(rep(1,20),rep(2,20),rep(3,20))
    > t.test(x[1:40]~group[1:40], var.equal=TRUE)
    
    	Two Sample t-test
    
    data:  x[1:40] by group[1:40] 
    t = -2.4653, df = 38, p-value = 0.01832
    alternative hypothesis: true difference in means is not equal to 0 
    95 percent confidence interval:
     -1.3690472 -0.1344442 
    sample estimates:
    mean in group 1 mean in group 2 
         0.06037503      0.81212077 
    
    > pairwise.t.test(x,group, pool.sd=FALSE, p.adj="none", var.equal=TRUE)
    
    	Pairwise comparisons using t tests with non-pooled SD 
    
    data:  x and group 
    
      1     2    
    2 0.018 -    
    3 0.046 0.839
    
    P value adjustment method: none
  • ご回答ありがとうございます。pairwise.t.test()のヘルプを見たら確かにt.test()の引数も取れると書いてありました。しかしpool.sdの意味がよく分かりません。pool.sdを用いるとt検定ではなくなる?ということも書いてありますし、この関数を作成した人のオリジナルの検定方法でしょうか? -- ビクス? 2009-04-09 (木) 21:02:03
  • プログラム・ソースを読みましょう。t.test を呼んでいるのではないと言うだけでしょう。This method does not actually call 't.test' ソースを読めば何をやっているのかよくわかりますよ。 -- 2009-04-09 (木) 21:41:51

geoRを用いて自分のデータを使う場合

ど素人? (2009-04-06 (月) 10:35:31)

バリオグラムを描きたいのですが、自分のデータをエクセルからcsvファイルに変換してバリうグラムを描きたいのですがどうしたらよいのでしょうか?
libraryに入っているデータならなんとかなるのですが、新しいデータを用いて活用したいのです。

  • リファレンスを見れば解決するのでは?デモを理解しているなら,as.geodataで手持ちのcsvを使えそうですよ -- akira? 2009-04-06 (月) 12:44:35
  • geoR使うのでしたら?SpatialPointsDataFrame?()あたりで解決できるのでは? -- たけ? 2009-04-18 (土) 07:37:33

ACF(自己相関係数)の計算結果のファイルへの出力

サザエ? (2009-04-04 (土) 02:21:50)

頑張ってRのこと、勉強しております。
質問です。ACF(自己相関係数)の計算結果をExcelで読めるようにファイルに移したいんです。そのやり方を教えてください。
よろしくお願いします。

  • sink という関数を調べてみると吉。でも,コンソルからコピーして,Excelにペーストするのが一番簡単でしょう。それにしても,なぜExcelで読まないといけないのか謎ですが。 -- 2009-04-04 (土) 10:57:04
  • ご返事ありがとうございます。Excelで図を書くのがまだ便利なので、計算結果の数値をExcelに移して可視化したいのです。 -- サザエ? 2009-04-04 (土) 12:13:37
  • > Excelで図を書くのがまだ便利なので    そうですか -- 2009-04-04 (土) 16:57:51

function と引数について

迷い猫? (2009-04-03 (金) 21:47:08)

全くの初心者です。
やれることはやったのですが、解決策が分からないのでどうか、どうか、よろしくお願いします。

データフレームとして、Excelから読み込んだJapan, U.S, U.Kが準備されています。
必要に応じたデータフレームを使用したいので、SASで行うマクロのような関数を作りたいと思い、以下のようなプログラムを作りました。

byage <- function(country,){
country <- substitute(country)

kakunin<-country
kakunin

if(country==japan){data=Japan} #引数にjapanを渡した時は、データフレームJapanを使いたいと思ったので。
ifelse(country==us){data=U.S}
else(country==uk){data=U.K}

data
}

byage(japan)

これを実行すると、次のエラーが返ってきます。
「以下にエラー byage(japan) : オブジェクト "japan" は存在しません」

何が悪くて、どう修正すればよいのか、さっぱり分かりません。。。
また、function関数に、データフレームを直接引数として渡す方法は存在するのでしょうか。

どうか、よろしくお願いします。

  • 「SASで行うマクロのような関数」って,「SASで*ど*う*い*う*こ*と*を*行*う*マクロのような関数」ということでしょうね。単に「データフレームを直接引数として渡したい」のでしょうか?存在するも何も,単純なことですよ。以下のような例が参考になりますかね?もうちょっと,やりたいことをちゃんと説明した方が行き違いがなくてよいと思いますよ。 -- 2009-04-03 (金) 22:34:03
    > func <- function(z) # 渡されたデータフレーム z の先頭6行を表示する関数
    + {
    + 	print(head(z))
    + }
    > x <- data.frame(a=1:10, b=letters[1:10])
    > y <- data.frame(x=rnorm(20), y=runif(20))
    > func(x) # データフレーム x を渡す
      a b
    1 1 a
    2 2 b
    3 3 c
    4 4 d
    5 5 e
    6 6 f
    > func(y) # データフレーム y を渡す
                x         y
    1  2.15205491 0.0295724
    2 -1.32527541 0.3563355
    3  0.17068233 0.2448835
    4 -0.84898390 0.3565478
    5 -0.01846693 0.5706420
    6  1.78453651 0.4487693
  • お返事ありがとうございました。不明瞭な点が多く申し訳ありません。本で一通り独学の後の初めてのプログラムです。考えが及ばないことが多く、ご迷惑をおかけしました。 -- 迷い猫? 2009-04-03 (金) 23:18:14

system関数の不具合?

レッドクリフ? (2009-04-03 (金) 08:49:56)

system関数の不具合?で困っています.
通常はsystem関数で実行した結果を返すのに、Rでメモリを大量に消費しているときに、コマンドの結果がエラーで返ってきます.

> sessionInfo()
R version 2.8.0 (2008-10-20)
x86_64-unknown-linux-gnu
64ビットのLinux機、メモリは8G積んでいます.

具体的な症状は以下の通りです.

  • 成功する例
    > gc()
             used (Mb) gc trigger (Mb) max used (Mb)
    Ncells 111691    6     350000 18.7   350000 18.7
    Vcells 120708    1     786432  6.0   456124  3.5
    > x <- system("ls")
    Makefile          blaslapack.o   fblaswr.h                work.0.txt       workL2.txt  workS3.txt
    > x
    [1] 0
  • 失敗する例
    > dim(model_mat)
    [1] 383907   1886
    > gc()
                used   (Mb) gc trigger   (Mb)  max used   (Mb)
    Ncells    503372   26.9     597831   32.0    506595   27.1
    Vcells 737629983 5627.7  904433606 6900.3 748064327 5707.3
    > x <- system("ls")
    > x
    [1] -1
    • このように5Gのメモリを消費してsystem関数を使用した場合にうまく動きません.
  • オブジェクトを消去して再度実行した場合
    > rm(list=c("model_mat"))
    > gc()
               used (Mb) gc trigger   (Mb)  max used   (Mb)
    Ncells   117672  6.3     597831   32.0    506595   27.1
    Vcells 12803200 97.7  723546884 5520.3 748064327 5707.3
    > x <- system("ls")
    Makefile          blaslapack.o   fblaswr.h                work.0.txt       workL2.txt  workS3.txt
    > x
    [1] 0
    • このようにうまく動きます.
  • メモリを大量に消費してsystem関数にintern引数を与えた場合
    > dim(model_mat)
    [1] 383907   1886
    > gc()
                used   (Mb) gc trigger   (Mb)  max used   (Mb)
    Ncells    503477   26.9     667722   35.7    506705   27.1
    Vcells 737630000 5627.7  820415969 6259.3 748064344 5707.3
    > x <- system("ls", intern=T)
    
     *** caught segfault ***
    address (nil), cause 'memory not mapped'
    
    Traceback:
     1: system("ls", intern = T)
    
    Possible actions:
    1: abort (with core dump, if enabled)
    2: normal R exit
    3: exit R without saving workspace
    4: exit R saving workspace
    Selection:
    • セグメンテーションフォルトで落ちます・・・
  • このような現象の回避方法はございませんでしょうか.よろしくお願いいたします.
  • fork-execするので, 例えば現在5G使っていればsystemを使うと一時的に10G必要になります. 超巨大swapを一時的に作るのも良いですが,現実的では無いと思うので, 大きなオブジェクトをsaveで一旦保存して削除(rm+gc)してから, systemを使うと良いのではないでしょうか. んでそのあとロードすれば良いでしょう. ファイル操作だけが目的なら, systemなど横着せずとも, file系関数を使えば良いでしょう. どうしても,保存や嫌でsystem使う必要があるなら,snow等(メモリの少ないうちにslaveを作る必要はありますが)で処理はmastarで行ってslaveでsystemを使う手もあると思います. -- なかま 2009-04-03 (金) 11:53:32
    > sort(sapply(ls(), function(x)object.size(get(x))))
          a       b       c 
         48     104 8000200 
    > gc()
              used (Mb) gc trigger (Mb) max used (Mb)
    Ncells  181395  9.7     407500 21.8   350000 18.7
    Vcells 1132760  8.7    1912818 14.6  1133141  8.7
    > save(c,file="c.dat")
    > rm(c)
    > gc()
             used (Mb) gc trigger (Mb) max used (Mb)
    Ncells 181391  9.7     407500 21.8   350000 18.7
    Vcells 132759  1.1     786432  6.0  1133141  8.7
    > system("ls")
    > load("c.dat")
  • なかまさん、ありがとうございます.forkするんですね.不具合かと思ってましたが、仕様だということですね.例示した「ls」はほんとに例であって、実際にはファイル関連操作ではなく、別のコマンドなんです.超巨大5Gとかのオブジェクトをファイルシステムに保存するのは読み書きで相当時間がかかるので、できれば避けたかったのですが、どうも、そうするしかないようですね・・・.あとはご提案いただいているように、別のRプロセスを前もって立ち上げておいてそこからsystem関数を実行するか・・・.system関数と同じような機能をもったCのプログラムを作って、「dyn.load」で呼ぶことにしようかな・・・ -- レッドクリフ? 2009-04-03 (金) 12:48:19
  • (最後の部分を気になったので)別プロセスを起こす=forkなので, Rからプロセスを直接起動するのはみな同じですよ. お手軽にプロセスこさえるなら, snowの他にmulticoreも使えると思います. -- なかま 2009-04-03 (金) 13:15:24
  • なるほど、ご指摘ありがとうございました. -- レッドクリフ? 2009-04-03 (金) 18:24:44
  • 訂正:) Linuxの場合, 外部の実行コマンドがPIE(位置独立実行)形式でエントリポイントが呼びやすい物であれば, dlopenを使ってforkさせずに*外部コマンドの関数*は呼べます. かなり特殊かもしれませんが, 32GBや64GBのマシンが普通になってくると, 逆にこういった物が重宝するケースもたしかにありそうですね. -- なかま 2009-04-04 (土) 00:40:23
  • vforkを使うと良いようです. -- レッドクリフ? 2009-04-06 (月) 17:10:38
    • vforkを使ったプログラムを掲載しておきます.
      #include <stdlib.h>
      #include <math.h>
      #include <unistd.h>
      
      #include <R.h>
      #include <Rdefines.h>
      
      // exec vfork
      SEXP system_vfork(SEXP exCmd)
      {
        pid_t pid;
        SEXP ret;
        int iRet;
        char *cmd_for_execv[] = {"/bin/bash", "-c", NULL, NULL};
        char *cmdStr;
      
        if( !isString(exCmd) ){
          Rprintf("not CHAR.");
          return R_NilValue;
        }
        cmdStr = (char *)CHAR(VECTOR_ELT(exCmd, 0));
        printf("cmd str : %s\n", cmdStr);
        cmd_for_execv[2] = cmdStr;
      
        if( (pid=vfork()) < 0 ){
          /* fork 失敗 */
          printf("fail to fork\n");
          return R_NilValue;
        }else if( pid == 0 ){
          /* 新しく起動した子プロセスに処理させたい内容 */
          //sleep (3);
          //iRet = execlp("sleep", "sleep", "5", (char *)NULL);
          iRet = execv(cmd_for_execv[0], cmd_for_execv);
          //sleep (30);
          printf("ret value : %d\n", ret);  /* (actually never reached)*/
          exit (EXIT_SUCCESS);  /* 子プロセス終了*/
        }
        int     status = 0;
        pid_t   wait_pid;
        Rprintf ("parents, child is %d\n", pid);
        wait_pid = wait(&status);
        if (wait_pid == -1){
          err (EXIT_FAILURE, "wait error");
          //exit(-1);
          return R_NilValue;
        }
        //Rprintf("input char > ");
        //scanf("%c", &c);
        return R_NilValue;
      }
    • コンパイル等
      $ gcc -std=gnu99 -I/usr/local/lib64/R/include  -I/usr/local/include \
             -fpic  -g -O2 -c fork.c -o fork.o
      $ gcc -std=gnu99 -shared -L/usr/local/lib64 -o fork.so fork.o \ 
          -L/usr/local/lib64/R/lib -lR
    • Rでso読み込み
      dyn.load("fork.so")
      is.loaded("system_vfork")
      res <- .Call("system_vfork", "ls")
      res <- .Call("system_vfork", "ls -la")
      res <- .Call("system_vfork", "sleep 3; ls -la")
    • 自分の環境ではうまくいってます.
    • データ空間をコピーしませんので、パフォーマンスも良いです.
  • forkとvforkの違いを調べて(ぐぐって)みて下さい. 危ないからそっちへは行ってはいけません. :-( -- なかま 2009-04-07 (火) 14:28:30
  • はい、危ないみたいですね(汗.上記コードを参考にされる場合は、forkとvforkの違いを理解の上、ご利用ください(滝汗.しかしforkは http://d.hatena.ne.jp/naoya/20080212/1202830671 こういう仕様みたいなのですが、なぜRは全部コピーしてしまうんでしょうか・・・そういう実装ということですか・・・ -- レッドクリフ? 2009-04-07 (火) 18:20:48
  • man fork してね. 貴方が呼んでるのは, glibcのforkで中ではLinuxのシステムコールcloneをPOSIX準拠のforkと同じ振る舞いで呼んでいるに過ぎない. strace -p <Rのpid> とかするとclone呼んでるのが見えると思うよ. Rがコピーしている訳では無いよ. -- なかま 2009-04-08 (水) 17:20:38
  • お、ワシの書き込みが消されとる しょうがないワシが教えてやろう おまえがわかってないのは、forkが「書き込み時コピー (copy-on-write)・ページ」を使って実装されているにもかかわらず、なんでメモリが足らなくて子プロセスが立ち上がらないのかということだろ それはな、いくら物理メモリが共有されていても、子プロセスが仮想アドレス空間を確保できなければforkは失敗するってことだ だからRが子プロセスを作った後その子プロセスがexecする前にメモリに書き込みを行うことで子プロセスが親とは別の物理メモリを持つことでforkが失敗してると思ってるのかもしれんが、そうじゃないってことだ 仮想アドレス空間が子プロセスで確保できなければforkは失敗する vforkはちがうがな forkのmanpageにはそんなことは書いてないが 骨折りだったな(笑 なかまはとんちんかんな回答&上から目線でここの雰囲気を悪くしているのは自分だって早く気づけな 後は「fork 仮想アドレス空間 linux」あたりでぐぐってみな -- 2009-04-10 (金) 23:22:27
  • 匿名さん、もしそうだとしたら、forkがというかRのsystem関数が失敗する理由が理解できました.おふたりともありがとうございました. -- レッドクリフ? 2009-04-14 (火) 08:27:20

Windows Vista で R2WinBUGS をバッチ実行する方法

初心者? (2009-04-03 (金) 07:25:25)

Windows Vista で R2WinBUGS を使用しております.Rのバージョンは2.7.2です.
R2WinBUGS を動かした場合,WinBUGSから画像ファイルやテキストファイルを
出力するため,Rを「管理者権限として実行」して起動する必要が
ありますが,バッチ実行する場合に「管理者権限として実行」する
方法が分かりませんでした….

'C:\Program Files\R\R-2.7.2\bin\R.exe' --no-restore --no-save < 'C\temp\test.R'


のような命令をコマンドプロンプトから起動しているのですが,
何かオプション等はありますか?どうかよろしくお願い致します.

  • 「管理者権限として実行 vista bat」 でググりましょう。OSの問題でRの問題ではありません。 -- 2009-04-03 (金) 08:33:48
  • 回答ありがとうございます。「管理者権限として実行 vista bat」 でググりました。linuxのsudoのようなものはないようですね。 -- 初心者? 2009-04-06 (月) 12:38:44
  • 確かに!コマンドにsudoがあればと何度思ったことか。 -- 2009-04-07 (火) 13:43:18

不等間隔時系列データの整形

kf? (2009-03-22 (日) 23:00:27)

サンプリング間隔が不等な時系列データを、内挿等によって等間隔のデータを
作成するにはどうすればよいのでしょうか。お教え下さい。

特異値分解(singular value decomposition)の実行とエラーについて

kushi? (2009-03-22 (日) 00:38:04)

はじめて質問させて頂きます。よろしくお願い致します。

実行環境は以下でした。
Windows Vista, 32bit, 4GB RAM
R version 2.8.1 (2008-12-22)
なお,Rのショートカットは以下のように設定しています。
"C:\Program Files\R\R-2.8.1\bin\Rgui.exe" --max-mem-size=2047M

私は文系の博士課程大学院生です。それほど詳しいPCの知識はありません。

研究の必要上,数千行×数千列〜数万行×数万列の大きい行列に対して,特異値分解を行う必要が出てきました。
Rで実行しようとしたところ,以下のスクリプトを実行すると,以下のようなエラーがでます。

> y = NULL
> y = matrix(0.0, 5000, 4000)
> svd_y = NULL
> svd_y = svd(y)
エラー:  サイズ 366.4 Mb のベクトルを割り当てることができません 
> gc()
           used  (Mb) gc trigger  (Mb)  max used   (Mb)
Ncells   114305   3.1     350000   9.4    350000    9.4
Vcells 20076602 153.2   90632978 691.5 172087953 1313.0


質問は,以下の3つです。それぞれの質問について,下で補足します。
1.「数千行×数千列」の行列をRで特異値分解する方法はないか。
2.「数万行×数万列」の行列をRで特異値分解する方法はないか。
3.svd()関数がどのようなスクリプトによって定義されているか見る方法はないか。

「メモリ」と「svd()」をキーワードに過去ログやWEBを探しました。
質問1は,OSやメモリの扱いによる解決を期待した質問です。
質問2は,速度を犠牲にしてもスクリプトがストップせずに特異値分解を実行できるアルゴリズムや方策を期待した質問です。
質問3は,自分で特異値分解のスクリプトをかけばもっと省メモリでやれるかもしれないという期待からお尋ねしています。

何卒よろしくお願いいたします。

  • コンソールに svd と入力すればソースは見えます。その中から,dsvdc というFORTRANで書かれたプログラムを呼び出していますが,そのソースも gonzui で検索すればみつかるのかな?まあ,自分で書くのは大変でしょ。
    例題の妥当性はともかくMacだと計算は終えましたけど。 -- 2009-03-22 (日) 11:44:33
    > y = NULL
    > y = matrix(0.0, 5000, 4000)
    > svd_y = NULL
    > svd_y = svd(y)
    > gc()
               used  (Mb) gc trigger   (Mb)  max used   (Mb)
    Ncells   240738   6.5     467875   12.5    350000    9.4
    Vcells 56183965 428.7  159348538 1215.8 148191804 1130.7
  • ご回答ありがとうございます。大変感謝いたします。

    > コンソールに svd と入力すればソースは見えます。
    こんな簡単なことだったとは…。失礼いたしました。これで質問3は解決です。たしかに,自分でスクリプトを改善するのは難しそうですね…。

    > 例題の妥当性はともかくMacだと計算は終えましたけど。
    回答者様のメモリが私と同じ環境と考えて以下は書かせて頂きます。

    これまでの過去ログを読んだところ,この違いはMacとwindowsで1プロセスに使わせてくれるメモリが異なるためではないかと理解しています。

    私の環境でも4000×4000の行列なら計算をしてくれます。
    つまり,1プロセスに使わせてくれるメモリをふやせば,「数千行×数千列」くらいはなんとかなると考えています。たとえば,64bitOS(LinuxのUbuntuを検討中)にして(私のマザーボードMSI P965 Platinumで最大の)8GBまでメモリを増やすなどです。

    しかし,「数万行×数万列」の行列が上記の方法でやれるのかはわかりません。あるn行×m列の行列にsvd()を実行するのに必要なメモリを求めることはできるでしょうか?

    以上の文章中で新たに生じた質問をまとめさせて頂きます(新しく投稿し直した方が良い場合は教えて頂ければ幸いです)。

    4.64bitOSにして8GBメモリを搭載すれば,Rのsvd()で「数千行×数千列」が計算できるか。
    5.あるn行×m列の行列にsvd()を実行するのに必要なメモリを求める方法はあるか。

    何卒よろしくお願いいたします。-- kushi? 2009-03-22 (日) 13:06:21
  • svd(matrix(0, 10000, 10000)) は,こけました。http://r.research.att.com/R-GUI-5372-2.8-leopard-Leopard64.dmg では,数十分なんだかかんだか引っ張られましたが,らちがあきそうでなかったので,中断しました。データも機械的に生成されるものなんでしょうけど,数万×数万のSVDができたとして,その解釈はどのようにするつもりなんでしょうか。昔々,構造計算?で数万規模?の行列計算という話もありましたが,精度的に同じ程度のものと考えられるんでしょうかねぇ。どうしても必要と言うことなら,Rではなくて,専用のプログラムを書く方が,時間的にも容量的にもよいと思いますけどどうなんでしょうか。 -- 2009-03-22 (日) 21:20:45
  • 再び,ご回答ありがとうございます。

    > 専用のプログラムを書く方が,時間的にも容量的にもよいと思いますけどどうなんでしょうか。
    この「専用のプログラム」が意味するところがお聞きしたいです。
    これは(私は未修得なのですが)C言語などでsvdのプログラムを書くということでしょうか。そうすれば,Rよりも(ある程度劇的に)メモリ上で有利になるのでしょうか? もしそうなら頑張ってみたいのですが…。

    > 「R-GUI-5372-2.8-leopard-Leopard64.dmg」

    すみません,Macのファイルのようで,どういったファイルなのか確認できませんでした…。

    > 解釈
    お答えになっているかわからないのですが…。
    潜在意味インデキシング,もしくは潜在意味解析という手法を用いたいと考えています。つまり,コーパスに基づいた数千×数千〜数万×数万の語句‐文書の共起行列を,SVDで分解された3つの行列のうち,特異値を元の数から300次元程度に減らして,もう一度行列を復元することで,人間の知識モデルとしたいのです。

    どうぞよろしくお願いいたします。-- kushi? 2009-03-22 (日) 22:21:53

  • Build configurations with "64" suffix are 64-bit builds というだけのことですよ。「64bitOS(LinuxのUbuntuを検討中)にして」とか言っておられたんでね。「潜在意味インデキシング,もしくは潜在意味解析という手法を用いたいと考えています」先行研究はない,ユニークなアプローチと言うことなんですね。がんばってください。コーパスデータがそんなに精密な情報を持っているとも思えないんですけど。
    「これは(私は未修得なのですが)C言語などでsvdのプログラムを書くということでしょうか。そうすれば,Rよりも(ある程度劇的に)メモリ上で有利になるのでしょうか?」当然そういう可能性を探るべく,新たに,新たなる・最適なアルゴリズムで(あればですが)プログラミングするのではないでしょうか。Rでの実装が最良ということが前提なら,他のいかなるアプローチも徒労ということでしょう? -- 2009-03-22 (日) 22:31:41
  • Rのsvdはdsvdc(古いLinpack版の後方互換の為に存在)ではなくLapackのDGESDD(DGESVDより早い)を使います. 8G程度のメモリーでは1万x1万を越えるような演算は無理ではないかと思います. fortranで直接記述しても1万一寸x1万一寸が限度でしょう.(なので数万x数万は無理です). 通常のInteger*4なLAPACKでも, 4万^2 程度が限界ですが, それでも演算には64G程度(すくないかも)は必要になります. 数万(5万?^2)以上になれば確実にinteger*8なLAPACKが必要で, 演算時間も相当(考えたく無い...)かかりますし, 共有メモリー型のスーパーコンピュータでも無いと, 歯が立ちません. DGESDDはDSVDCよりも精度が高いとは言うものの, これほど大きな行列では精度的にどうなのか, 専門の方(線形代数?)に聞かないと見当もつかない(普通の人はやった事すら無いでしょうから)ような話ではないかと. -- なかま 2009-03-23 (月) 09:55:58
  • 匿名さま,ご回答ありがとうございます。

    わかりました。64bitOSや他のプログラムなど,様々なアプローチを探してみようと思います。

    なかまさま,ご回答ありがとうございます。

    すでにRはある程度妥当な手法でSVDを実行しているので,アルゴリズム面での劇的な改善は望めないのではないか,というご指摘と理解いたしました。 大学のスーパーコンピュータを当たってみること,専門の方に相談してみること,などを考えたいと思います。

    非常に参考になりました。ありがとうございました。 -- kushi? 2009-03-23 (月) 18:20:57
  • どのような行列なのでしょうかね。まず、その行列をそのまま解かなければならないのかどうかです。実行列でも疎な行列であるならばとか、行列の性質はどうなのでしょう。この辺りは検討済みなのでしょうか。 -- ooki? 2009-03-24 (火) 03:59:47
  • 共起行列だから,ものすごく疎な行列だと思いますよ。共起というのはたしか,例えば単語 foo と bar が共に出現する頻度,foo と baz との頻度,などなどをまとめた行列ですよね。foo と共起する単語はほんのわずか例えば100万語コーパスで10数個残りの単語との共起は0ということがほとんどでしょ?ちがったかな?
    ちょっと調べれば,いろいろ参考になりそうなことが。。。
    http://ja.wikipedia.org/wiki/%E6%BD%9C%E5%9C%A8%E6%84%8F%E5%91%B3%E8%A7%A3%E6%9E%90 -- 2009-03-24 (火) 07:29:36
  • 素のRでは一寸と言う意味に受け取ってもらえると... スパースと言うことなら, RにはMatrixやSparseMなどスパースが扱える物もありますが, 特異値分解とかは未実装だったと思います. netlib.org でsparse singular value decomposition で探したら, SVDPACKが出てきました. Fortranですがこれなら, 文系の方でも簡単(Cなんかから比べれば)に出来るかも. コンパイラはRtools(Windows版Rの開発環境)を持ってくればgfortranが入ってるので, Winでも開発可能かと思います. -- なかま 2009-03-24 (火) 10:32:42
  • ooki様,匿名様,ありがとうございます。匿名様の仰る通り,非常に疎な行列です。また,ooki様のご指摘通り,検討不足でした。本日,専門家の方に聞いてみたところ,そうした疎な行列を効率的に扱うアルゴリズムはやはり存在して,そうしたアルゴリズムが実装されている場合には市販のPCでも(時間はかかるけれど)計算可能であるそうです。なかま様,ありがとうございます。上記のような次第ですので,ご紹介頂いた内容が参考になると思います。ちょっとすぐに読んで理解するのは難しいので,少し時間をかけて勉強したいと思います。 -- kushi? 2009-03-24 (火) 18:53:44

set.seedの使い方

カーネルおじさん? (2009-03-21 (土) 12:23:44)

いつもお世話になります.確率を与えてブートストラッピングを行い,時系列を発生させることを行ってます.
単純化して,1本のサンプルパスが3期(i=3)で,10,000本(j=10000)のパスを発生させるとします.

再試ができるように,set.seedで特定のseedを与えますが,今回はj回ごとにseedを変動させることを考えました.

ところが,はじめはプログラム1のようにset.seed(a+j-1)の位置をfor(i)の次に書きました.
結果をみるとバイアスが大きく,x行列は各列同じu値しか出現していないので変だと思いました.
プログラム2のようにfor(j)とfor(j)の間にset.seed(a+j-1)の位置を変更したら,期待通りになりました.

初歩的な質問ですが,

1)set.seed(a+j-1)の位置はどちらでもいいのではと思いますが,Rはプログラム1をどう読んでいるのでしょうか?
2)たとえばset.seed(100)と入力すると,以降のsampleは,他のseedに変えるか,Rを再起動しない限り,
ずっと100のseedで乱数を発生し続けるという理解でよろしいですか?
(そう観察したので,j回ごとseedを変えた方がランダム性が高まると考えました)
3)seedの種類はこの事例のように40,000個もあるのでしょうか?


2),3)はhelp(set.seed)や乱数TIP大全を見てもわからなかったので,質問させていただきます.よろしくお願いします.




下記の確率設定ですと,すべてのパスの合計値の期待値は-120になりますが,
それぞれのaに数値(1,10001,20001,30001)を代入したところ合計値は以下の通りとなって相違があります.

プログラム1では,#1〜10000=-124.08, #10001〜20000=-121.98, #20001〜30000=-115.20, #30001〜40000=-113.31
プログラム2では,#1〜10000=-121.43, #10001〜20000=-120.52, #20001〜30000=-115.89, #30001〜40000=-116.48



プログラム1
x<-matrix(0,nr=3,nc=10000)
p<-c(0.3,0.5,0.2)
u<-c(-0.02,0,0.01)
a<-1
for (j in 1:10000){
for (i in 1:3){

set.seed(a+j-1)

x[i,j]<-sample(u,1,prob=p,replace=T)
}
}
y<-sum(x)
y

プログラム2
x<-matrix(0,nr=3,nc=10000)
p<-c(0.3,0.5,0.2)
u<-c(-0.02,0,0.01)
a<-1
for (j in 1:10000){

set.seed(a+j-1)

for (i in 1:3){
x[i,j]<-sample(u,1,prob=p,replace=T)
}
}
y<-sum(x)
y

  • プログラム1だと,内側のforで毎回,外側のforの制御変数jを使ってset.seed するので,どのiについて生成される乱数も同じになって当たり前ですよね。プログラム2だと外側のループでset.seedしているので,内側のループで生成される乱数は全部違いますよね(おなじ種からできていますが)。まあ,あなたのプログラムの修正をなるべく少なくして正しくするためには(?)プログラム1の set.seed(a+j-1) を set.seed(a+j+i-1) とすればよいでしょうけど(でも,なんで,-1 なんかしているのかなあ。不思議)。それと,本質とは異なりますが,3×10000の配列を確保して,二重ループで1つずつ乱数を発生させて1要素ずつに付値するというのは,大変大変非効率です。matrix(sample(foo, 3*10000, bar, baz), nrow=3) のようにして,一度に必要な個数の乱数を得て,それを行列に入れる方がよいでしょう。系列ごとにseedを変えるにしても,系列ごとにまとめて乱数を得ればよいでしょう。そのようにすれば,あなたの疑問は不要になります。ついでに言えば,set.seed の引数の説明を見れば分かるように,seedは相異なる整数の個数だけありますよ(つまり,2^32 種類か?)。それと,乱数は乱数ですから,発生した乱数からある統計量を求めても理論値に等しくなることはありませんよ(おわかりでしょうが)。極端に理論値から外れると,乱数の発生法を誤っている可能性があるとは思いますけど。 -- 2009-03-21 (土) 13:50:33
  • ありがとうございました.確かに1度に入れるほうが効率的です.こういう発想が大切ですね -- カーネルおじさん? 2009-03-21 (土) 15:52:30

tkplotのグラフサイズ・背景色の変更方法は?

Wanko? (2009-03-20 (金) 14:35:48)

始めて投稿させていただきます。
R version 2.8.1 (2008-12-22)
i386-pc-mingw32
locale:
LC_COLLATE=Japanese_Japan.932;LC_CTYPE=Japanese_Japan.932;LC_MONETARY=Japanese_Japan.932;LC_NUMERIC=C;LC_TIME=Japanese_Japan.932
attached base packages:
[1] stats graphics grDevices utils datasets methods base

Rは使い始めて間もないです。
WinXP で VBAでの連携処理しています。
こちらの金先生の資料を参考に
http://www1.doshisha.ac.jp/~mjin/R/200808_61.pdf

下記のコマンドを実行して
kekkaDF<-NgramDF(targetText, type=1, N=3, pos="名詞")
sortlist<-order(kekkaDF[,3],decreasing = TRUE)
fwn<-kekkaDF[sortlist,]
wng<-graph.data.frame(fwn[1:100,])
tkplot(wng, vertex.label=V(wng)$name, layout=layout.fruchterman.reingold, vertex.size=1)

図3 福田総理の所信表明演説文における名詞の共起ネットワークマップ
の様なネットワーク図を出力しています。

質問は
・「Graph plot 1」などのウインドウサイズは事前或いは事後に変更するのは
 可能でしょうか? → ソースでは450×450で固定のように思えますが
 ユーザー関数に作り直す?事無く、変更できませんか?

・ウインドウ背景色が灰色で定年前の年寄りには見にくいです。
 → 白色とか薄いベージュなどに変更したいのですが?

・VBAからは

   Call oShell.Run(Environ("COMSPEC") & " /c " & sRpath & " --no-save < " _ 
                 & txtR_workfolder & "\RelatedTerm.R", vbNormalFocus, False)

 sRpath:C:\Program Files\R\R-2.8.1\bin\R.exe
と言った形で行っていますが、実行後にDOSプロンプトが閉じてしまい、グラフも
同時に消え去ります。
 現在、コマンド最後に Sys.sleep(1800) などとしていています。
 もっとましな方法がありそうですが

宜しくご教授ください。

  • ウィンドウサイズと背景色については、tkplotでなくplotを使えばいいのでは? -- 2009-03-20 (金) 21:52:40
  • plotでも描画できるのですね! -- Wanko? 2009-03-20 (金) 22:03:58
  • 追伸:サイズは Call MoveWindow?(FindWindow?(vbNullString?, "Graph plot 1"), 0, 0, 800, 700, 1)などとしても出来ていますが、動きが緩慢でチョット?ですね。plotではノードをマウスで移動できませんがイメージ出力が可能なのは嬉しいです。アドバイス感謝いたします。 -- Wanko? 2009-03-20 (金) 22:07:59
  • 追伸:サイズは Call MoveWindow?(FindWindow?(vbNullString?, "Graph plot 1"), 0, 0, 800, 700, 1)などとしても出来ていますが、動きが緩慢でチョット?ですね。plotではノードをマウスで移動できませんがイメージ出力が可能なのは嬉しいです。アドバイス感謝いたします。 -- Wanko? 2009-03-20 (金) 22:28:45

csvデータのインポート

初学者? (2009-03-16 (月) 17:31:58)

12万件のデータが、csv形式であります。

そのファイルをインポートしようと下記のプログラムを実行しました。
RDT1<-read.table("ローデータ.csv", header=T, sep=",", dec=".", nrows=65536, skip=1, na.strings="")

すると、以下のようなエラーメッセージが出ます。

以下にエラー scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  : 
  '15' 行目には,74 個の要素がありません 



変数の数は74ですが、分岐している質問があるため、null値が非常に多く、それが悪さをしているのかと推測し、エクセルでnull値を-99に置き換え、インポートしてみると読み込まれました。

しかしながら、データファイル取得ごとに、これらの処理をしなければならないので、前処理に時間を要してしまいます。

質問としては、上記のようなnull値が多いファイルを、そのまま読み込む良い方法、または違ったプログラムオプションが、Rで用意されているのか知りたいと思い、質問させて頂きました。

以上、ご教授の程よろしくお願いします。

  • それなりのプログラムを書くしかないでしょう。はい,次。 -- 2009-03-16 (月) 21:31:09
  • もう少し詳しい情報をお願いします。null値とはNAのことですか?それともNAの値とは別に何かのテキストを割り当てているのですか?どちらにしろ,具体的にどんな値ですか(NAは空白としていしていますが)?15行目(ヘッダー含め16行目)はどうなっていますか?74個程度なら目視で確認できると思います。エラーを再現できるデータを示していただけたら,よい方法が見つかるかもしれません。 -- ? 2009-03-17 (火) 00:34:45
  • 林氏の言うとおり.とりあえずcon <- file("ローデータ.csv", "r"); dummy <- readLines(con, n=15); readLines(con, n=1); close(con) でどうなってますか? encoding の指定が必要かもしれませんが. -- surg? 2009-03-17 (火) 08:24:55
  • あなたが, Excelで書き換えたなら, おそらくExcel風に他の所も直してるので問題が減っているのかもしれません. read.csvとread.tableの差異も見てください, commentやfillの扱いが異なるのも分かると思います. 確認する場合はExcelでは無くNotePad?で確認してください. CSVは非常にポピュラーなのですが, 実は仕様がありません. データを起こす側で,TSV等が選択出来れば, read.delimが使えるので, 悩みが減るかもしれません. -- なかま 2009-03-17 (火) 11:25:59
  • Null値とは、NAを指して記述しました。 変数名前は、SEQ、day、time、Q1〜Q76と、被験者ID、日時、時間、問1〜74までをヘッダーとしています。 アドバイスのプログラムを実行したところ、15行目と16行目のデータを以下に提示させて頂きました。 15行目データ [1] "95232007,20090307,3050,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,20,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,52,,,,,,,,,,,,14," 16行目データ [1] "95232009,20090306,92453,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,20,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,31,,,,,,,,,,,,4" 以上のようなデータが約4万件あり、それが複数ファイル月次で処理することになります。 何か有効な手立てがあれば、ご教授よろしくお願いします。 -- 初学者? 2009-03-17 (火) 11:53:48
  • 16行目には73個しかデータがないよ -- 2009-03-17 (火) 13:07:04
  • これだったらなかまさんご指摘のように fill=TRUE で何とかなるのでは? もしくは read.csv() を使うとか -- surg? 2009-03-17 (火) 14:23:34
  • ご指摘ありがとうございます。エディタで確認したところ、データ列の最終に、カンマの存在するものと、存在しないものが混在していました。データ作成上の問題でした。read.csv( )で対応できました。その他、データ検証のやり方、fill=TRUEなど、様々なやり方を教えていただき、ありがとうございました。 -- 初学者? 2009-03-17 (火) 14:58:55

chplotで観測点の色の指定

nanbuwks? (2009-03-12 (木) 19:14:12)

アドオンパッケージ chplot の chplot ライブラリを使ってみたのですが、色の指定が思うようにできません。

library(chplot)
data(iris)
chplot(Petal.Length ~ Petal.Width | Species, data = iris,
           legend = list(cex = 0.6),plot.points=TRUE,pch = 18, cex = 0.5,
           col=c("black","orange","yellow"))

としてみましたが、凸包輪郭線の色のみ反映し、観測点の色が変更できません。

samplenanbuwks20090312.png

どのようにしたらいいでしょうか?

  • おそらく、関数定義の修正が必要かと。args$col <- as.integer(faktor) + 1をargs$col <- colrs[as.integer(faktor)]でいかが。 -- akira? 2009-03-12 (木) 21:36:02
  • 該当個所を書き換えたらうまくいきました。簡単に変更できるのですね。勉強になりました。ありがとうございました。 -- nanbuwks? 2009-03-13 (金) 00:49:29

levelpotでcolorkeyを対数表示する方法

u-kun? (2009-03-12 (木) 15:42:40)

latticeパッケージのlevelplotを使ってグラフを作成しようとしています。
格子状の測定点での測定値の分布を可視化したいのです。
しかし、z軸に対応するデータが10^(-10)から10^(-3)まで幅があるので、
colorkeyの色の変化(目盛り)を対数にしたいのですがうまくいきません。
例えばplotであればlog="x"などとすればx軸が対数になるように、
colorkeyを対数にするにはどうすれば良いのでしょうか?

  • levelplot() 関数の colorkey 引数に,リストを指定するのではお気に召しませんか? -- ishida 2009-03-12 (木) 16:05:49
    > range.z <- pretty(range(z))
    > levelplot(z, colorkey = list(labels = list(at = range.z, labels = log (range.z) ) )
  • 早速の御回答ありがとうございます。
    教えて頂いたのを少し変えて試してみました。
    > log.z <- pretty(range(log10(z)))
    > levelplot(log10(z) ~ x * y,col.regions=topo.colors(16), colorkey = list(labels = list(at = log.z, labels = log.z)))
    おかげさまで、ほぼ私のイメージ通りのグラフが描けました。
    colorkeyの色を対数的に変化させて目盛を1E-10,1E-9・・・1E-3のようにすることも可能でしょうか?
    helpも見たのですが、colorkey = list()の()の中をどう書いていいのか分かりません。-- u-kun? 2009-03-12 (木) 17:01:48
  • とりあえず labelsに文字ベクトルあるいは表現式のベクトルを指定してください.以下,いい加減なので,好みのラベルが出せるよう,適宜修正してください. -- ishida 2009-03-13 (金) 15:56:44
    > (label.z <- paste(10, log.z, sep = "^"))
    > levelplot(log10(z)  ~ x * y, 
     colorkey = list(labels = list(at = log.z, labels =
     substitute(label.z, list(label.z = label.z))) ) )
    leveplot()で実際に描画を行っているのは panel.levelplot()関数(そしてdraw.colorkey()関数)なので,このヘルプを参考にしてください.
    ついでに scales という引数も参考になるかと思います.
  • ありがとうございます。おかげさまで少しずつ使い方が分かってきました。
    panel.levelplot()関数やdraw.colorkey()関数のhelpを見ながらいろいろ試してみます。-- u-kun? 2009-03-14 (土) 18:27:38

boxplotで観測点を消す方法

nanbuwks? (2009-03-12 (木) 11:49:19)

x <- c(0,1,1,2,2,3,5)
boxplot(x)

とすると、箱ひげ図とその範囲外の観測点が表示されますが、この観測点を表示させない方法ってあるのでしょうか?

  • outline=F -- 2009-03-12 (木) 12:15:58
  • 外れ値を表示させないなんてことは,詐欺でしょう。そんなことはしない方がよいと思いますよ。 -- 2009-03-12 (木) 12:33:09
  • ありがとうございます。outline=Fでうまくいきました。
    http://www.is.titech.ac.jp/~mase/R.html にある和訳アーカイブ html.jp.20020513.tar を見ていたのですが、
    outlineの記述が無かったです。help(boxplot)を見ないとだめということですね。
    また、外れ値を表示させないことの問題のご指摘ですが、観測点が多いと外れ値で真っ黒に潰れてしまって
    単に図の見栄えが悪くならないか心配でした。
    しかし改めて手持ちのデータを見直して見たところ、外れ値は10個程度でした。よって、外れ値を表示させたままでいくことにします。-- nanbuwks? 2009-03-12 (木) 17:13:58

行の逆向き累乗積総和の計算

カーネルおじさん? (2009-03-11 (水) 10:32:21)
お世話になります.Rの基本的なことがまだまだわかっておりません
しかし,Rを楽しんでます.
今般,i行のそれまでの行の累乗積の総和をi行に返すプログラムに苦労しています.
つまり,行列Xから行列Zの変換で,新しいi行は,
z[i,]=x[i,]*x[i-1,]+x[i,]*x[i-1,]x[i-2,]+...+x[i,]*x[i-1,]x[i-2,]...x[1,]
を計算する必要に迫られました(Excelでやってますが,2GMパソコンが悲鳴をあげています.それにできればRで自己完結したいです)

具体例では行列Xが以下の通りだとして,

> x
    [,1] [,2] [,3]
[1,]    2    3    1
[2,]    3    2    1
[3,]    4    1    5
[4,]    2    4    3
#y...z
    [,1]       [,2]    [,3]
[1,]    2      3        1
[2,]    6      6        1
[3,] 12+24     2+6     5+5
[4,] 8+24+48   4+8+24 15+15+15 

という計算をへて次のZ行列が求まります.

z
    [,1] [,2] [,3]
[1,]    2    3    1
[2,]    6    6    5
[3,]   36    8   10
[4,]   80   36   45

Xを単純な累乗積Yに変換するプログラムは,以下の通りに書けましたが,
i行から逆向きに累乗積を計算するのが難しく,
どうもうまくいきません.プログラムの外側にもうひとつFor文(j in 1:4)を挟み,
初期値i=1(i<2の箇所)をi=jなりに変え,行列Yで得られた行をZに落していけば
ワークしそうなのですが,実力不足を実感しております.

> y
    [,1] [,2] [,3]
[1,]    2    3    1
[2,]    6    6    1
[3,]   24    6    5
[4,]   48   24   15

#行列xの各行の累乗積を行列yへ返す

x<-matrix(c(2,3,4,2,3,2,1,4,1,1,5,3),nc=3)
y<-matrix(nr=4,nc=3)
for (i in 1:4)
{ if (i<2) {y[i,]<-x[1,]}
else
{y[i,]<-y[i-1,]*x[i,]}
}
  • もっとうまい方法がありそうですが・・・ -- surg? 2009-03-11 (水) 12:15:25
    > (x <- matrix(c(2, 3, 4, 2, 3, 2, 1, 4, 1, 1, 5, 3), ncol=3))
         [,1] [,2] [,3]
    [1,]    2    3    1
    [2,]    3    2    1
    [3,]    4    1    5
    [4,]    2    4    3
    > y <- matrix(0, nrow=nrow(x), ncol=ncol(x))
    > for(j in 2:nrow(x)) {
    + n <- matrix(0, nrow=nrow(x), ncol=ncol(x))
    + n[j-1,] <- x[j-1,]
    + for(i in j:nrow(x)) n[i,] <- n[i-1,] * x[i,]
    + if(j != 2) n[j-1,] <- 0
    + y <- y + n
    + }
    > y
         [,1] [,2] [,3]
    [1,]    2    3    1
    [2,]    6    6    1
    [3,]   36    8   10
    [4,]   80   36   45
  • cumprod() http://finzi.psych.upenn.edu/R/library/tis/html/cumsum.html -- 2009-03-11 (水) 12:29:22
  • これでも出来ますね -- surg? 2009-03-11 (水) 12:35:53
    > x <- matrix(c(2, 3, 4, 2, 3, 2, 1, 4, 1, 1, 5, 3), ncol=3)
    > y <- matrix(0, nrow=nrow(x), ncol=ncol(x))
    > for(i in 2:nrow(x)) y[i,] <- (y[i-1,] + x[i-1,]) * x[i,]
    > y[1,] <- x[1,]
    > y
         [,1] [,2] [,3]
    [1,]    2    3    1
    [2,]    6    6    1
    [3,]   36    8   10
    [4,]   80   36   45
  • 行列yはlibrary(tis); apply(x,2,cumprod)で得られますね。たしかに。 -- 中澤? 2009-03-11 (水) 12:40:41
  • 無理矢理ですが。 -- 2009-03-11 (水) 12:41:31
    > a <- apply(x, 2, function(d) sapply(1:4, function(i) sum(cumprod(rev(d[1:i]))[2:i])))
    > a[1,] <- x[1,]
    > a
         [,1] [,2] [,3]
    [1,]    2    3    1
    [2,]    6    6    1
    [3,]   36    8   10
    [4,]   80   36   45
  • こんなに早く回答が・・・感激です.さっそく試してみます.まずは御礼まで -- カーネルおじさん? 2009-03-11 (水) 12:54:39
  • ぼくはcumprodは思いつかず,泥臭く再帰処理する関数を考えていました。計算量の無駄なのでまったくお薦めしませんが,どこか1行だけ取り出したいときは使える関数定義かも? -- 中澤? 2009-03-11 (水) 13:00:41
    > bx <- function(x,i) { ifelse(i==1,x[1],ifelse(i==2,x[1]*x[2],(x[i-1]+bx(x,i-1))*x[i])) }
    > z <- apply(x,2,bx,1)
    > for (i in 2:nrow(x)) z <- rbind(z,apply(x,2,bx,i))
    > z
  • あわて者ですみません.問題が間違えていました.その行自身の数も加えます.具体例ですと,2行目は,9,8,2,3行目は40,9,15,4行目は82,40,48です.surgさんの解法がエレガントで好きなのですが,修正すると,同じくz行列を定義して,for (j in 2:nrow(x)){z[j,]<-y[j,]+x[j,]}で間に合うのですが,あまりに幼稚なので,ご示唆いただければ幸甚です -- カーネルおじさん? 2009-03-11 (水) 14:30:39
  • それなら再帰処理関数bxがシンプルになって以下で済みます。 -- 中澤? 2009-03-11 (水) 14:41:26
    > bx <- function(x,i) { ifelse(i==1,x[1],x[i]*(bx(x,i-1)+1)) }
    > z <- apply(x,2,bx,1)
    > for (i in 2:nrow(x)) z <- rbind(z,apply(x,2,bx,i))
    > z
  • あわて者ですみません.問題が間違えていました.その行自身の数も加えます.具体例ですと,2行目は,9,8,2,3行目は40,9,15,4行目は82,40,48です.surgさんの解法がエレガントで好きなのですが,修正すると,同じくz行列を定義して,for (j in 2:nrow(x)){z[j,]<-y[j,]+x[j,]}で間に合うのですが,あまりに幼稚なので,ご示唆いただければ幸甚です -- カーネルおじさん? 2009-03-11 (水) 14:54:58
  • もちろんz<-x; for (i in 2:nrow(x)) { z[i,] <- z[i,]*(z[i-1,]+1) }でいいわけですが。 -- 中澤? 2009-03-11 (水) 14:58:12
  • 早速のリスポンスどうもありがとうございます.研究データは120X400の大きさで,Excelマクロで並べ替えに15分かかっていたところ,10秒くらいでできました.できるだけRで自己完結すべきですね!最後にExcelでいうデータの小計と並べ替えがありますので,次はそれに挑戦します. -- カーネルおじさん? 2009-03-11 (水) 15:16:41
  • エレガントという言葉の意味を取り違えているんじゃないだろうか -- 2009-03-11 (水) 16:20:41
  • 結局は,apply(x, 2, function(d) sapply(1:4, function(i) sum(cumprod(rev(d[1:i]))))) の*一*行*で*よ*い*と言うことですね。簡単明瞭です。 -- 2009-03-12 (木) 07:12:49
  • rev(d[1:i]) みたいなのは, d[i:1]等にしとくと電気代の節約に貢献します. 見落としがちですが反復される処理は結構速度に影響を与えます. "["関数の処理は結構重いので, こういった簡単な物はCなりfortranに下請けに出すのも, もし大きな処理をさせるのならば効果的だと思います. 再帰は黒魔術関数の雄,Recallを思い出して(もちろん思い出すだけ)あげてください. -- なかま 2009-03-12 (木) 09:26:43
  • みなさん,どうもありがとうございます.勉強になりました.Rは奥が深いですね -- カーネルおじさん? 2009-03-12 (木) 09:28:13
  • みなさん,どうもありがとうございます.勉強になりました.Rは奥が深いですね -- カーネルおじさん? 2009-03-12 (木) 09:28:19

scatterplotのhelp

nanbuwks? (2009-03-08 (日) 15:40:16)

scatterplotのオプションを調べたいと思い、

> help(scatterplot)

しましたが、

No documentation for 'scatterplot' in specified packages and libraries:

you could try 'help.search("scatterplot")'
となります。helpやマニュアルを調べるにはどこを参照すればいいでしょうか?

なお、sessionInfo()は

R version 2.6.2 (2008-02-08) 
i486-pc-linux-gnu 

locale:
LC_CTYPE=ja_JP.UTF-8;LC_NUMERIC=C;LC_TIME=ja_JP.UTF-8;LC_COLLATE=ja_JP.UTF-8;
LC_MONETARY=ja_JP.UTF-8;LC_MESSAGES=ja_JP.UTF-8;LC_PAPER=ja_JP.UTF-8;LC_NAME=C;
LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=ja_JP.UTF-8;LC_IDENTIFICATION=C

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

です。ちなみに、2変数の箱ヒゲ図を描きたいと考えています。scatterplot では軸に箱ヒゲ図
の表示ができますが、これを散布図を描かずに箱ヒゲ図のみxy座表内に描くことができないか
と考えました。

よろしくお願いします。

  • library(car)としてから、help(scatterplot) -- aaa? 2009-03-08 (日) 17:52:57
  • ありがとうございます。library(Rcmdr)でcarが読み込まれているのに気づかず、動作するのに(library(Rcmdr)をする前は)helpできないと思い込んでました。失礼を致しました。 -- nanbuwks? 2009-03-08 (日) 20:50:01
  • help.search("scatterplot")を実行するなど、どのライブラリのコマンドか知っている前提で、help(scatterplot,package="car")という方法も。 -- 2009-03-10 (火) 16:56:11
  • 了解しました。精進します。 -- nanbuwks? 2009-03-12 (木) 07:42:56

時系列データの平均値などの算出方法

nami? (2009-03-05 (木) 22:40:10)

一定時時間ごとに計測したデータの日平均、最高、最低を得たいのですがうまくいきません。例えばdatAというオブジェクトの中身が

Date Time A B C
2009/1/1 06:00:00 1 15 200
2009/1/1 12:00:00 2 20 300
2009/1/1 18:00:00 3 25 400
2009/1/2 00:00:00 4 30 500
2009/1/2 06:00:00 5 35 600
2009/1/2 12:00:00 6 40 700
2009/1/2 18:00:00 7 45 800
2009/1/4 06:00:00 12 70 1300
2009/1/4 12:00:00 13 75 1400

・・・
のようになっているとします(たまに欠測があったりします)。これに

combine.time <- paste(datA$Date, datA$Time)
date.time <- as.POSIXct(combine.time)
datA["Date2"] <- date.time

のようにして日付型データを組み込むまではできたのですが、このデータの日付ごとの平均値、最高値、最低値のデータセットのつくり方がわかりません。最終的には時系列のグラフを作りたいと考えてております。どなたかお教えいただけ無いでしょうか。
環境はWindowsXP sp3、R2.8.1です。よろしくお願いします。

  • こんなのはどうでしょうか -- hiee? 2009-03-06 (金) 16:50:19
    threenum <- function(x){
      summary(x)[c(1,4,6)]
    }
    
    tapply(datA$C, 
           list(format(datA$Date2, "%Y-%m-%d")),
           threenum)
  • hieeさん、ありがとうございます。目的のことができました。教わってみればなるほど!なんですが、どうも頭が固くていけません。summaryからこのように取り出すことは考え付かなかったです。本当にありがとうございました。 -- nami? 2009-03-06 (金) 19:07:59
  • こんにちは、便乗させてください。 -- nanbuwks? 2009-03-09 (月) 10:30:50 上記のようにしてみたのですがここからグラフを作ろうとしてうまくいきません。
    datB <- tapply(datA$C, list(format(datA$Date2, "%Y-%m-%d")),threenum)
    として、
    datB$ObsNumber <- 1:3
    matplot(datB$ObsNumber,datB[1])
     以下にエラー matplot(datB$ObsNumber, datB[1]) :
        'x' と 'y' は同じ数の行を持たなければなりません
    と出ます。なお、
    datB
    $`2009-01-01`
    Min. Mean Max. 
     200  300  400 
    
    $`2009-01-02`
    Min. Mean Max. 
     500  650  800 
    
    $`2009-01-04`
    Min. Mean Max. 
    1300 1350 1400 
    
    $ObsNumber
    [1] 1 2 3
    となっています。ご指導ください。
  • 最終的にはグラフにします。と書いたのは私なので、とりあえずグラフは作りました。
    datB <- tapply(datA$C,
    list(datA$Date),threenum)
datB <- as.data.frame(do.call("rbind",datB))
datB["Date"] <- as.Date(row.names(datB))
row.names(datB) <- c(1:nrow(datB))
names(datB) <- c("Min","Mean","Max","Date")

attach(datB)
days <- c(Date[nrow(datB)]-Date[1])
plot(Date,Mean,type="b",xaxt="n",ylim=c(0,1500))
axis.Date(1, at=seq(Date[1],Date[days],"1 days"), format="%m月 %d日",las=2)
segments(Date,Min,Date,Max)
detach()

というように、かなーり強引な感じがします(データフレームに変換してしまったあたり)。それと、最初に組み込んだDate2ですが、あまり必要なさそうなので結局使いませんでした。言いだしっぺということで、ご参考までに。より簡潔で美しいコードをご教示いただければ、もちろん乗り換えます(笑)。みなさま、よろしくお願いします。

sample.png
  • nami? 2009-03-09 (月) 11:49:14

部分代入不可の場合

るる? (2009-03-05 (木) 19:42:16)

R初心者です。自分の解析結果を入れたファイルが容量が多く、119行あって上の1:47が見れません。

それで、
>ファイル名[1:47]
と打ち込んだら、部分代入不可というエラーが出ました。
部分代入不可ならどうやって、47行目までの入るの内容を読めばよいのでしょうか。

  • 言っている意味が全くわかりません。ファイルってなんですか? -- 2009-03-07 (土) 07:12:27

3次元標本値に対応するカーネル密度値を求めたいのですが・・・

カーネルおじさん? (2009-03-04 (水) 08:18:39)

R初心者です.お世話になります.約200個の3次元ベクトル標本から,kde3d(in library misc3d)を使って,カーネル密度dをcsvファイルで出力しました.ただ,出力結果を見ると,グリット点(50x50x50)に対応する密度の数値が表示されており,関連のhelpを読んだところでは,標本ベクトル値に対応する密度数値は,出力できないようです.

おそらく,グリット点にいちばん近いところの密度を読み取ることになると思いますが,大変そうです.

密度dのExcelスプレッドシート出力を見ると,x軸は縦に50行ですが,横はy,z軸混ぜて,50x50=2500列から構成されています.このままではExcelのvlookupが使えず,なんらかの工夫をしない限り,200回,目で探してくることになりそうです.

それに,腕力でやるよりできるだけ,Rの中で自己完結したいという思いもあり,投稿いたしました.

質問をまとめますと,
1.kde3dは標本ベクトル値に対応するカーネル密度値は返さないのでしょうか?
2.グリット点にいちばん近いところを探してくるRでの方法のヒントをいただければ幸いです.

(なお,将来の構想として,標本値のカーネル密度をウエイトにして,ブートストラッピングを行いたいので,
標本の密度が必要という事情があります.長文になってすみません)

  • grid -- 2009-03-04 (水) 13:23:12
  • http://finzi.psych.upenn.edu/R/library/ks/html/kde.html -- 2009-03-04 (水) 14:36:29
  • 迅速なご回報ありがとうございます.早速,kde()の引数HにHscv(標本データ),eval.pointsに標本データを指定して試したところ,少々時間はかかりましたが,当初の目的は達成しました.ありがとうございました.また質問するかも知れませんが,今後ともよろしくお願いします. -- カーネルおじさん? 2009-03-05 (木) 12:06:36

グラフの連結

R1? (2009-03-02 (月) 21:27:51)

お世話になります。A,B,Cの3群がそれぞれx,yという値をもっており、mfrow=c(1,3)で連続してstripchart()でY軸方向に散布図を書きます。
ここでY軸の単位が共通なので、BとCのグラフの軸名と目盛りを省略し、
さらに余白を調節して3つのグラフを連結しようと考えました。
つまり以下のように入力します。

F <- factor(c("X","Y"))
x1 <- rep(1:6,5)
y1 <- rep(7:12,5)
x2 <- rep(9:14,5)
y2 <- rep(15:20,5)
x3 <- rep(21:26,5)
y3 <- rep(27:32,5)

par(mfrow=c(1,3), mar = c(5, 4, 4, 0))
COL <- c("red","blue")
stripchart(rbind(x1,y1) ~ F, vertical = T,col=COL, xlab="A")
par(mar = c(5, 0, 4, 0)) 
stripchart(rbind(x2,y2) ~ F, vertical = T, yaxt = "n",
col=COL,xlab="B",ylab="")
par(mar = c(5, 0, 4, 2))
stripchart(rbind(x3,y3) ~ F, vertical = T, yaxt = "n", col=COL,xlab="C",ylab="")

しかし、中央のBのグラフのx軸が長くなるのと、各グラフのx軸の両端に
値がプロットされてしまいなってしまい不格好です。
x軸の長さをそろえ、かつx軸のプロットする位置を自由に指定することは
できないでしょうか?また、ここでは3つのグラフを書きましたが、
グラフの数に依存せずに調節したいと考えています。
どなたかご教授宜しくお願いします。

  • marは全部同じにしといてomaで左余白をつくればいいと思う。 -- 2009-03-03 (火) 00:13:05
  • ありがとうございます。mar=c(5,0,4,0), oma=c(0,3,0,3)でx軸の長さを揃えることができました。marとomaの違いを認識していませんでした。x軸上のXとYの位置を調整する方法はご存知でしょうか? -- 2009-03-03 (火) 18:44:07
  • factorは数値として処理されます.as.numeric(F)で、X=1、Y=2と分かります.ですから、xlim=c(.5,2.5)でしょうか? -- akira? 2009-03-03 (火) 19:50:21
  • factorを数値として扱うとは勉強になりました。ありがとうございます。ところで今気づいたのですが、marとomaでグラフの幅を調節すると、一番右側のグラフが短くなってしまうようです。これを回避する妙案は無いものでしょうか? -- R1? 2009-03-03 (火) 21:46:10
  • par(mar = c(5, 0, 4, 0)) を3回使えばいいのではないでしょうか?左右のマージンは oma で調節すれば解決になると思います。 -- 東京? 2009-03-04 (水) 04:21:09
  • なるほど。marで作図領域とプロット領域の余白をなくし、一方でomaでデバイス領域と作図領域の間の余白(外側余白)を調節すれば良い訳ですね。marとomaの違いを理解していませんでした。みなさんのおかげで理想のグラフを描くことができました。本当にありがとうございました。 -- R1? 2009-03-04 (水) 23:00:40

相関係数からクラスター分析

TM? (2009-02-22 (日) 16:33:45)

超初心者です。
マトリックスの相関係数からクラスター分析をしたいと考えています。相関係数rをd=2(1-r)の距離に直したマトリックスをエクセルで作成しています。既に距離になっているはずなのですが、これをクラスター分析しようと、入力したところ、

data1<-read.table("ox008.csv",header=TRUE,sep=",")
data1
data1.hc<-hclust(data1)
plot(data1.hc)


data1<-read.table("ox008.csv",header=TRUE,sep=",")

data1

 X A B C D

1 A 0 1 2 2
2 B 1 0 2 2
3 C 2 2 0 2
4 D 2 2 2 0

data1.hc<-hclust(data1)

以下にエラー if (n < 2) stop("must have n >= 2 objects to cluster") : 
  引数の長さが0です 

plot(data1.hc)

以下にエラー plot(data1.hc) :  オブジェクト "data1.hc" は存在しません 

のようなエラーメッセージが出ます。
何が問題なのでしょうか?

  • お騒がせいたしました。解決できました。 -- TM? 2009-02-22 (日) 20:32:21
  • どういう風に解決できたかくらい,書いたら?どうせ as.dist なんだろうけど
    それにも値しないと思うなら,記事自体を削除したらいかが -- 2009-02-22 (日) 20:59:35

タイプミスすると反応が遅い

ge? (2009-02-20 (金) 10:13:35)

コンソール画面でタイプミスをすると、エラーのダイアログが出てきますが、かなり反応(数秒以上)が遅いです。
設定か何か工夫して反応を早くできないものでしょうか。

R version 2.8.1 (2008-12-12)
i386-pc-mingw32
です。


plott(0,1)
"Error: could not find function "plott"

  • OS、ハード構成、メモリ容量、同時に立ち上げているアプリは? -- 2009-02-20 (金) 10:57:36
  • WindowsXP SP3,, Pentium 4 3GHz, 1GB RAM, 他のアプリ起動なしです。system.time()で調べたところ25秒ぐらいかかりました。そもそもありえないぐらい遅い状況と考えられますか? -- ge? 2009-02-20 (金) 11:44:49
  • 会社のPCが同じような構成(Pentium 4 3.2GHz, 1GB RAM, Windows XP SP2)なのでやってみましたが,Timing stopped at: 0.02 0 0.01 でした. -- surg? 2009-02-20 (金) 13:52:46
  • ありえないぐらい遅い状況だと思います。 -- 2009-02-20 (金) 13:58:51
  • 回答ありがとうございました。もう一度確かめてみたところ、Rの起動直後にやってみると、即座に反応がありました。しかし、ライブラリをいくつかロードして、オブジェクトをたくさん作った後になると遅くなるようです。(そんなの当たり前?あるいはそういう状況(オブジェクトがたくさんある)であっても遅い?) -- ge? 2009-02-20 (金) 15:11:23
  • 演算結果など(ワークスペース)保存して終了して, .RData(Winならマイドキュメント?)が成長し, 起動の度に呼び込んでメモリを圧迫. 都合Swapが発生し遅くなった. もちろんRの起動時間も遅い筈. `file.remove(".RData");q("no")` を実行後, 再度Rを起動. それでも同じであれば, そもそもメモリを使いすぎ. `gc()`等で確認すべし-- なかま 2009-02-20 (金) 15:32:26
  • タスクマネージャでRgui.exeがどれくらいメモリを食っているのか見てください。似たような環境で300Mを越すと極端に遅くなった経験があります。 -- 2009-02-20 (金) 17:07:48
  • コメントありがとうございました。メモリの使いすぎで遅くなっているのかもしれません。 -- ge? 2009-02-21 (土) 00:35:11

plclustのHeight値の範囲を変更

sh? (2009-02-18 (水) 12:20:14)

plclustのHeight値の範囲を変更することは可能でしょうか? 例えば、以下の例でHeightの目盛の上限を200や300に変更することは可能でしょうか?

hc <- hclust(dist(USArrests), "ave")
plclust(hc)

この場合、Heightの最大値は

max(hc$height)
 [1] 152.314

Heightの目盛の下限を20に変更するには

plclust(hc, hmin=20)
  • plot(as.dendrogram(hc), ylim=c(0,300)) -- 2009-02-19 (木) 13:57:11
  • アドバイスありがとうございます。以下のエラーを解決するにはどうすればよろしいでしょうか? -- sh? 2009-02-19 (木) 14:18:30
    > plot(as.dendrogram(hc), ylim=c(0,300)) 
     以下にエラー plot.default(0, xlim = xlim, ylim = ylim, type = "n", xlab = xlab,  : 
       仮引数 ”ylim” が複数の実引数にマッチしました
  • 私の環境( R version 2.8.1 (2008-12-22) i486-pc-linux-gnu)ではエラーは再現せず、描写は完了しましたが。エラーの意味はylimを同じ関数内で2回指定しているという意味です。どこかで指定していませんか? -- akira? 2009-02-19 (木) 19:53:53
  • R version 2.8.1にバージョンアップしたところ解決しました。ありがとうございました -- sh? 2009-02-19 (木) 21:33:48

太陽質量 M_\odot を表示

junkoda? (2009-02-17 (火) 08:26:06)

はじめまして。

太陽質量 (solar mass) の記号(latex で書くと M_\odot、M の添字に丸書いて点)をグラフのラベルに書きたいのですが、出来ますでしょうか。
一般化すると、Unicode や Harshey Vector Font に含まれるけれども plotmath にはない記号を添字として表示するよい方法はないものでしょうか。
添字は plotmath で書けます。

> plot(1, xlab=expression(M[O]))

太陽記号は Hershey Vector Font で書けます

> par(family="HersheySerif")
> plot(1, xlab="M\\SO")

しかし、Hershey と plotmath が並用できません。
太陽記号は unicode にはありますが("\u2299")、Adobe Symbol にはありません。
最終的には eps ファイルとして欲しいので、

> plot(1, xlab=expression(M["\u2299"]))
> dev.copy2eps(file="out.eps")

などと、強引にやってみますと

Warning messages:
1: In dev.copy(file = "out.eps", device = function (file = ifelse(onefile,  :
  font metrics unknown for Unicode character U+2299

以下、10個の警告が出されて、太陽記号は ... に変換されてしまいました。
助言などありましたら助かります。最後に sessionInfo を書いておきます。
R version 2.8.1 (2008-12-22)
i686-pc-linux-gnu
locale:
LC_CTYPE=ja_JP.UTF-8;LC_NUMERIC=C;LC_TIME=en_US.UTF-8;LC_COLLATE=en_US.UTF-8;LC_MONETARY=C;LC_MESSAGES=en_US.UTF-8;LC_PAPER=en_US.UTF-8;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=en_US.UTF-8;LC_IDENTIFICATION=C

  • Wiki書法を把握していなかったために醜くなったことをお詫びします。 -- junkoda? 2009-02-17 (火) 08:31:58
  • そのepsはLaTeXで使うのですか?もしそうなら、xlab='\\tex{$M_{\odot}$}'でOK。あとは、LaTeX文書にて、psfragパッケージにscanallオプションを追加。最終的にdvipdfmxを使うなら、RグラフィックだけのLaTeXソースを書いて、dvips -Eでeps化する。 その際、\pagestyle{empty}を忘れずに。
    Linuxユーザのようなので、私が以前に書き殴ったシェルスクリプトを置いておきます。-- 谷村 2009-02-17 (火) 11:01:08
    #!/bin/bash
    
    TMPTEX=$$
    TEX=/usr/bin/latex
    DVIPS=/usr/bin/dvips
    cd /tmp
    cat <<EOF > $TMPTEX.tex
    \documentclass{article}
    \usepackage[dvips]{graphicx}
    \usepackage[scanall]{psfrag}
    \begin{document}
    \thispagestyle{empty}
    \includegraphics[scale=.8]
    EOF
    echo {$1} >> $TMPTEX.tex
    cat <<EOF >> $TMPTEX.tex
    \end{document}
    EOF
    
    $TEX $TMPTEX
    $DVIPS -E $TMPTEX
    echo You got /tmp/$TMPTEX.ps
    rm $TMPTEX.tex $TMPTEX.dvi $TMPTEX.log $TMPTEX.aux $TMPTEX.pfg
    cd -
    使い方は、\tex{}を埋め込んだRグラフィックのepsをこのスクリプトの引数に指定します。
  • ありがとうございます! LaTeXに eps が処理できるとは、思ってもみませんした。psfragパッケージを活用してみます。私の環境で動かすために、以下の微調整をしました。(1) シングルクォート内でもエスケープが効くようなので xlab='\\tex{$M_{\\odot}$}' (2) 私の dvips はプリンタで印刷しようとするので -o オプションを $DVIPS -E $TMPTEX -o。あと、/tmp に移動するので epsファイル名はフルパスにすることに注意。(以上、後世の初心者のために。)望みの表示ができました。どうもありがとうございました。 -- junkoda? 2009-02-18 (水) 01:59:16
  • 解決してよかったです。検索してみたら、私の使い捨てスクリプトとは違ってちゃんと作り込んであるスクリプトがいくつも見つかりました。Pdfrackunpsfragfragmaster.plとか。 -- 谷村 2009-02-18 (水) 10:38:49

数値変換

初学者? (2009-02-16 (月) 14:21:57)

はじめまして。お世話になります。

使用環境は、Windows XPで、RのVersionは、下記の通りです。
R version 2.8.1 (2008-12-22)
i386-pc-mingw32

アンケートに逆転項目があるため、回答の数値を逆するため、下記のようなプログラムを記述しましたが、問題がありエラーになりました。

[プログラム例]
回答者1〜10の方のQ1のデータを、1は7に、2は6に、・・・7は1に変換するため、下記のプログラムを実行しました。(下記のデータでは、6や7の回答はありませんが、実データには含まれている可能性があるので、実データ6や7に対しても、データ変換を試みています)

sid<-c(1,2,3,4,5,6,7,8,9,10)
q01<-c(2,4,5,2,1,3,2,3,4,5)
RDT<-data.frame(SID=sid, Q01=q01)

RDT$Q01a<-NA

if(RDT$Q01 == 1) {RDT$Q01a <- 7}
if(RDT$Q01 == 2) {RDT$Q01a <- 6}
if(RDT$Q01 == 3) {RDT$Q01a <- 5}
if(RDT$Q01 == 4) {RDT$Q01a <- 4}
if(RDT$Q01 == 5) {RDT$Q01a <- 3}
if(RDT$Q01 == 6) {RDT$Q01a <- 2}
if(RDT$Q01 == 7) {RDT$Q01a <- 1}

以上、アドバイスよろしくお願いいたします。

  • RDT$Q01a <- 8-RDT$Q01 そんだけ。 -- 2009-02-16 (月) 14:43:34
  • どうしても条件分岐でやるなら,こんな感じでしょうか. -- surg? 2009-02-16 (月) 15:17:24
    > sid <- 1:10
    > q01 <- c(2, 4, 5, 2, 1, 3, 2, 3, 4, 5)
    > RDT <- data.frame(SID=sid, Q01=q01)
    > 
    > RDT$Q01a <- NA
    > RDT$Q01a[RDT$Q01 == 1] <- 7
    > RDT$Q01a[RDT$Q01 == 2] <- 6
    > RDT$Q01a[RDT$Q01 == 3] <- 5
    > RDT$Q01a[RDT$Q01 == 4] <- 4
    > RDT$Q01a[RDT$Q01 == 5] <- 3
    > RDT$Q01a[RDT$Q01 == 6] <- 2
    > RDT$Q01a[RDT$Q01 == 7] <- 1
    > RDT
       SID Q01 Q01a
    1    1   2    6
    2    2   4    4
    3    3   5    3
    4    4   2    6
    5    5   1    7
    6    6   3    5
    7    7   2    6
    8    8   3    5
    9    9   4    4
    10  10   5    3
  • まあ,せめて for (i in 1:7) RDT$Q01a[RDT$Q01 == i] <- 8-i -- 2009-02-16 (月) 16:12:01
  • どうもありがとうございます。みなさん、とてもエレガントな回答(プログラム)で関心するばかりです。特に、”RDT$Q01a[RDT$Q01 == i] <- 8-i ”のような利用の仕方は、参考書籍で見つけられませんでしたので、このようなプログラム記述ができるのだと、感銘を受けました。 -- 初学者? 2009-02-16 (月) 17:14:29
  • まあ,おもしろみという観点から言えば,RDT$Q01a <- (7:1)[RDT$Q01] というのもありますね。「なにがおもしろいんだ?」というご意見もありましょうが。単純な引き算じゃないんだよ(つまり対応付きは単純じゃないんだよ)というときにはこちらが有利(まあ,そこまでの真意がわかっているかはわからないんだよねえと言う,だめ押し。朝青龍の得意技)。 -- 2009-02-16 (月) 23:11:13
  • as.numeric(as.character(factor(RDT$Q01,levels=1:7,labels=7:1)))とか。良い例じゃないですが。 -- akira? 2009-02-18 (水) 07:40:40

lines()が使えない

capetapeta? (2009-02-14 (土) 10:06:54)

Macintosh、Windows、Linux(Win,Linuxは仮想マシン)いずれにしてもRを何回ダウンロードしてもlinesという命令文を書いても正しくQuartz2にUPされないんです。以前にも色々試してnew plot? abline?
という投稿をしましたが、結局線がプロットできないという結論に至りました。これを解決するためには何か有効な手だてはあるのでしょうか?或は線がプロットできるようになるようなパッケージがあるのでしょうか?

  • Windows,mac,Linux,AIX,Solaris, いろんなマシンでRを動かしましたが, 貴方のおっしゃる現象は確認されませんでした. linesは特別なパッケージを必要とはしません, みんな基本的な物です. par等で特別な事をしていない限り, 普通に出ると思います. -- なかま 2009-02-14 (土) 13:21:22
  • arrows, axis, box, grid, rect, polygon, segments などは描けますか? -- 2009-02-14 (土) 14:41:57
  • とりあえず問題の切り分けを考えてみてはどうでしょう。example(lines)でも線はプロットされていないのでしょうか?また,線以外の点や枠は正常に表示されているのでしょうか? -- ? 2009-02-14 (土) 16:04:19
  • 具体的にどのような命令をしているのかを示したらいいのではないでしょうか。そしてOSとRのバージョンを示した方がよいと思いますが。それにしても変な現象ですね。 -- ooki? 2009-02-14 (土) 17:46:04
  • 以前の情報からだと、Mac OS X 10.4.11 (Darwin8.11.1) のようですが、Macのハード構成はなんでしょうか? -- okinawa 2009-02-14 (土) 17:59:10
  • 具体的にどのような命令をしているのかを示したらいいのではないでしょうか。そしてOSとRのバージョンを示した方がよいと思いますが。それにしても変な現象ですね。 -- ooki? 2009-02-14 (土) 18:13:28
  • 戻って来たら、あれ、二重書きになっている。同時に書き込んでいる人がいるというメッセージがあった。okinawaさんのコメントのように、機器仕様(グラフックなど)が欲しいですね。この辺りが原因でしょうかね。nVi?? かな。 -- ooki? 2009-02-14 (土) 18:21:33
  • > Mac OS X 10.4.11 (Darwin8.11.1) のようですが
    もうねえ。ごめんください。勘弁してください。ああだこうだ,不具合の報告・苦情は,最新の環境と全てのパッチを当てた後でお願いします。勘弁してくださいよ。昔の名前で出ています,はよしてください。最新の状態で駄目ですけどということでお願いしますよ(まあ,昔の状態でも,こんな不具合はなかったので,あなたのせいではないとおもいますけど,ちゃんとした状態でも不具合が生じることもあるんですよ〜〜ということを報告する意味は十分あるんですけどね)。不具合を修正する以前の旧式な状態(環境)で,できませんよ〜〜〜なんて,なんて,わがままなことを言うんでしょうか。(まあ,今回は,バージョンアップの環境でも,不具合が生じるのに,99%かけるけど)。それと,前のコメントにもあるけど,何と何が不具合なのか,ぜ〜〜〜〜ぶ不具合なのかの回答を,ぜひぜひお願いします。できない,できないはもうたくさん。 -- 2009-02-14 (土) 19:03:39
  • すみません。私の環境(OSX10.5.6)でもdarwin8.11.1でした。(MacOSX10.4.11は間違いです)混乱させてごめんなさい。 -- okinawa 2009-02-14 (土) 19:22:41
  • 要するに,最新の状態で異常が生じますと言うことなら,報告してください。そうでないなら,問題外。 -- 2009-02-14 (土) 19:27:50
  • Mac OSX 10.5.6 でハードはMacBookPro? 15inchです.Rは2.8.1です.segmentが書けません. -- capetapeta? 2009-02-16 (月) 09:45:13
  • こちらはMacBookPro? 15インチ、MacOSX 10.5.6 R 2.8.1ですが、example(segments)は正常に動作していますよ。capetapetaさんはご自身の問題点を客観的に整理してもう一度考えられたらどうでしょう。 -- 2009-02-16 (月) 10:43:58
  • 勝手ながら見出しを修正させていただきました。 -- 2009-02-16 (月) 12:04:01
  • 僕自身の問題とは一体どういう点をさすのでしょうか? コマンドはほかの方々がエラーがでなかったということからコピー&ペーストして何度も試しましたし、インストールも繰り返したり、Macのキャッシュを奇麗に洗い直したり、考えられる事はすべてしたつもりでわからないからこそこの場で尋ねているのです。もし、このほかになにかすべき事が思いつかれるようであるならばお教え願えないでしょうか? -- capetapeta? 2009-02-16 (月) 19:00:10
  • お困りなのはよく分かりますが、私が勧めた「ご自身の問題点を客観的に整理する」が意図するところは、capetapetaさんが期待する回答を得られず、capetapetaさんにとって無意味な回答しか得られていない原因(理由)について省察されたらどうでしょうか、ということです。期待する回答を引き出すためにどのような工夫や配慮をされましたか? -- 2009-02-16 (月) 19:17:53
  • 忙しいのかも知れないけど、良い回答が得られているとcapetapetaさんが感じられるような記事の質問の仕方とか、「なに言ってるのかわかんないよ」的なコメントがある記事の質問の問題点とか、少し考慮してみられてはどうでしょうか?結果、その方が早く回答が得られるのかもしれないですよ.ここに回答してくださっている方は、みなさん、忙しいにもかかわらず、なんとかあなたの役に立ちたいと考えているはずです. -- 2009-02-18 (水) 10:42:38
  • あれからいろいろ試してみたんですがこのOSを仮想マシンでブートしても直らないということはインストール時にエラーが発生しているのかもしれないと思いました。これに関してはいかがでしょうか?或いは、問題点を客観的に述べますと、線以外のプロットは正常に行うことができました。このパソコンのRでできないのは線のプロットです。解決方法をご存知の方はよろしくお願いいたします。それと匿名さんが最新のパッチを当ててからいってくださいとおっしゃってますが、それは個人の経済状態によっても関係するので言い方として問題があると思います。投げ出してしまわれたのなら仕方ないですが、答えられる限り状況を述べたいと思いますのでよろしくお願いいたします。 -- capetapta? 2009-03-13 (金) 09:53:11
  • あなたの作図手順と結果(エラーメッセージも同じなのか)なのかもわかりません. 仮想環境だと仮想環境側の不具合かもしれません. 与えられた情報からすると, マシンのドライバもしくはハードの不具合(グラフィックカードによってはメモリーの問題?)も考えられます. いまどきならLCDの不具合かもしれません. 仮想環境というのは, 作業手順の誤りではないかと言う話から来たのだと思いますが, 手順が違ってはいないと言うことですよね. わたしのMacOSX10.5x86(R-2.8.1) では下にあったエラーは出ないのです. あのエラーが出るならば, 先のplotによる作図画面は閉じ(なくなっている)ている筈なのです. pdf();plot();abline()で書いてみてもいっしょ?なんでしょうか. あと, 仮想環境は人によっては再現不能ですから, ネイティブ環境でお願いします. 問題点というのは客観的には解決しないので, 余分だと思っても具体的に多くの情報を提供すると解決は早いものです. Macならたとえば全く同じハードを持っている人がいれば, ハード上の問題なのかも切り分けはすぐ済む問題です. (追記)そして, 書いてあったのを後から発見するのです.:-) X11を使ってもいっしょかとか, 色々試したサマリーで上の方に書き直すと良いでしょう. -- なかま 2009-03-18 (水) 15:31:48
  • クリーンな状態で描けないのかを試したのですか。この辺りが全く書かれていませんが、マシンをいじり過ぎているのではないでしょうか。困っているのは判りますが、あなたの情報は、あまりにも断片過ぎるのではないかと思います。見出しと内容が全く違うような気がしますが。 -- 2009-03-21 (土) 04:06:09
  • pdf("test.pdf"); x <- rnorm(20); y <- rnorm(20); a <- lm(y~x); plot(y~x); abline(a); dev.off() で,ファイルに描かれるであろう図の中にも,回帰直線は描かれませんか? -- 2009-03-21 (土) 09:57:10

while等で、1日廻したいが、1時間でハングする。

独学中? (2009-02-14 (土) 09:15:58)

いろいろ検索してみましたが、いい案がなく、どなたか助言をお願いします。
やりたいこと
 測定データのファイルが、あるディレクトリに入るのをwhileで待って、
 入ってくれば、統計処理させたい。
 測定は、約3分ごと。
 データファイルの大きさは、70KBで、36本ほど。
困っていること
 一時間ほど、走らせると、Rがハングしている。
 
使用環境 winXP, R ver2.8.1 memory.limitは、1500MB
以下の工夫をしているが、効果なし。
 変数は、使い終われば、rm(),gc(),gc().
 sinkで、出力先を変更
 Rconsoleが、メッセージで一杯かと思い、10分ほどで、ESCしてみるが、
 メッセージは、表示されない。(何事もなく、>を表示。)

  • こんなタイマー的な非同期処理はRの中でやることなの?Rの外で(別の言語で)タイマー作ってRをバッチ起動するのが普通だと思うが。 -- 2009-02-14 (土) 11:33:57
  • そうでもないと思いますけどね。うまくいかなかったからクレームが付くだけでは?
  • 例えば,以下のどこが悪いというんでしょうか? -- 2009-02-14 (土) 21:20:26
     > while(1) {
     	if (file.exists("test.R")) {
     		print("Oh!, I got it")
     		# do somethig
     		file.remove("test.R")
     	}
     }
  • ポーリングするのに, WAITが殆ど(全く)無いので応答の無いプログラムと思われたのかも. ifの前に, Sys.sleep(60) とか入れれば良いのでは? たとえSys.sleep(0)でも, 「おれ、ちょっとまってやってもいいよ!」と他のタスクへの配慮にはなります. 悪いと言えば電力会社に不要なお金を納める点でしょうか. タスクマネージャでCPU負荷を見比べましょう. -- なかま 2009-02-15 (日) 01:54:43
  • ご回答ありがとうございます。計測プログラムとファイルの読み書きが衝突していました。初歩的ミスで申し訳ありませんでした。 -- 独学中? 2009-02-15 (日) 13:12:09

コックス回帰でのAICの求め方について

R初心者7? (2009-02-08 (日) 22:42:22)

はじめまして。お世話になります。

使用環境は、WindowsXPで、Rのパッケージは下記のようになっています。
R version 2.6.2 (2008-02-08)
i386-pc-mingw32

locale:
LC_COLLATE=Japanese_Japan.932;LC_CTYPE=Japanese_Japan.932;LC_MONETARY=Japanese_Japan.932;LC_NUMERIC=C;LC_TIME=Japanese_Japan.932

attached base packages:
[1] stats graphics grDevices utils datasets methods base


私は、樹木の生存時間に効く要因を求めようとしています。
複数の要因を組み合わせたモデルを作成し、どのモデルが生存を良く説明しているのか、AICを使ってモデル選択をしようとしています。
例えば下記のようなデータでコックス回帰し、AICを求めようとすると、

testdata

time event density height light
5 1 3.05 48 2.7
5 0 6.36 44 6.3
3 0 5.38 107 6.9
8 0 2.57 39 5.8
2 1 0.38 150 2.7
9 1 1.99 194 3.1

#density, height, lightが要因

library(KMsurv)

要求されたパッケージ survival をロード中です 
要求されたパッケージ splines をロード中です 

require(survival)

data <- read.delim("testdata.txt",T)

model.01 <- coxph( Surv (time, event) ~ density + height , data=data)

AIC(model.01)

以下にエラー UseMethod("logLik") : 
  "logLik" に適用可能なメソッドがありません 


となり、AICが求められません。

どなたか、解決方法をご教示頂ければ幸いです。
ちなみにstepを使えば、AICが一応出てくることは確認しています。
必要な情報を失念している場合もあるかと思いますので、その場合はご指摘頂ければ幸いです。よろしくおねがいします。

  • extractAIC()が使えますよ. -- surg? 2009-02-09 (月) 09:02:30
    > library(survival)
    > data <- data.frame(
    + time = c(5, 5, 3, 8, 2, 9), 
    + event = c(1, 0, 0, 0, 1, 1),
    + density = c(3.05, 6.36, 5.38, 2.57, 0.38, 1.99),
    + height = c(48, 44, 107, 39, 150, 194),
    + light = c(2.7, 6.3, 6.9, 5.8, 2.7, 3.1)
    + )
    > model.01 <- coxph( Surv (time, event) ~ density, data=data)
    > model.02 <- coxph( Surv (time, event) ~ density + height, data=data)
    > model.03 <- coxph( Surv (time, event) ~ density + height + light, data=data)
    Warning message:
    In fitter(X, Y, strats, offset, init, control, weights = weights,  :
     Ran out of iterations and did not converge
    > extractAIC(model.01)
    [1] 1.000000 6.075746
    > extractAIC(model.02)
    [1] 2.000000 7.280983
    > extractAIC(model.03)
    [1] 3 6
  • 回答ありがとうございます。extractAIC()を初めて知りました。もっと勉強します。 -- R初心者7? 2009-02-09 (月) 12:48:10

高次多項式によるデータの近似式の作成

hoso? (2009-02-05 (木) 16:13:39)

データとして(X,Y)のペアが100個ぐらいあり、高次多項式Y=f(X) を求めてカーブフィッティングしたいと思っています。(データの性質にもよると思いますが、割と滑らかで高次多項式でのフィッティングが妥当と思わせるデータです。)これだけだったらエクセルでも可能です。ところがエクセルでやりますと、高次項の係数が2e-9などと桁落ちになっております。それらを用いて計算すると、Xの値を大きくして高次項が利き始めると大きなエラーとなってしまいます。係数が2.3462e-9などと精度が高い場合、エラーが小さくなるものと思います。エクセルの分析ツール+回帰分析を行ってみると直線近似でした。高次の式(6次ぐらい)でもエクセルの分析ツールで処理できるのでしょうか。

このような問題をRで実行するとどのようになるでしょうか。具体的なやり方(データの読み込みは分かりますが)を教えて頂けると助かります。あるいは関連した実例集を指示して頂くのも有難いです。

よろしくお願いします。

  • この記事は他の場所(R-jp メイリングリスト)に投稿され、回答も一つその場でえられましたね。もしこの記事が元投稿者による再投稿なら、その回答も転記するのが礼儀ですね. -- 2009-02-05 (木) 19:25:48
  • > エクセルの分析ツール+回帰分析を行ってみると直線近似でした。
    エクセルでは,Xの2乗の列,3乗の列,4乗の列...というのを,ユーザが明示的に用意してやらないといけません。
    R では以下のように。 -- 2009-02-05 (木) 21:17:00
    d <- data.frame(
            x = c(1.6, 2.7, 4.2, 5.6, 6.1, 6.7, 7.9, 8.8, 9.3, 9.7),
            y = c(6.9, 6.1, 5.6, 6.3, 7.2, 8.2, 7.9, 8.5, 8.4, 8.0))
    plot(y~x, data=d, ylim=c(1,9))
    a <- lm(y~x+I(x^2)+I(x^3)+I(x^4)+I(x^5)+I(x^6)+I(x^7)+I(x^8), data=d)
    x2 <- seq(1, 10, length=1000)
    d2 <- data.frame(x=x2)
    y2 = predict(a, newdata=d2)
    lines(y2~x2)
  • poly を使えばもっとスマートに書けますよ。 lm( y ~ poly( x , 11) ) -- 2009-02-08 (日) 19:57:41

par$maiをPDFに反映させたい

<ふ>? (2009-02-02 (月) 13:52:56)

R2.6.1を使っています。

グラフを書かせるにあたって、maiで余白を設定し(c(1,1,1,1))ちょうどいい具合になったので、PDFに出力しようとしたところ、maiの設定が反映されませんした。mfrow=c(2,2)のような設定もききません。

PDFに出力する場合の、このようなパラメータの設定はどこでやればいいでしょうか。

よろしくお願いいたします。

  • 雛形からこっちに移動させました。どこをどう読んだらわざわざあちらに投稿することになるのかが謎。 -- 2009-02-02 (月) 14:29:52
  • すみません。移動、ありがとうございます(汗)。 -- <ふ>? 2009-02-02 (月) 14:32:14
  • 設定を関数の中にもっていった際に、)を一つ忘れて、エラーになっておりました。ちゃんと反映されます。お騒がせいたしました。 -- <ふ>? 2009-02-02 (月) 14:43:08

パッケージのインストールエラーについて

新参? (2009-02-02 (月) 12:01:40)

お世話になります。
R2.8.1、XPにパッケージ(Rcmdr)をインストールした時、下記のエラーが出てしまいインストールができません。既存のQ&Aを見ると、Rの再インストールやミラーサイトの変更などが出てきたため試してみましたが、未だに解決されません。
また、zipファイルをローカルに落として、"ローカルにあるパッケージからインストール"を選んでも同様のエラーが出ます。
またRcmdrだけではなく、他のパッケージでも(例:glmmMLやfarawayなど)同様のエラーが出ますが、大部分のパッケージでは問題なくミラーサイトからインストールできます。
回復方法を教えていただけると助かります。よろしくお願いします。


utils:::menuInstallPkgs?()

--- このセッションで使うために、CRANのミラーサイトを選んでください --- 
URL 'http://cran.md.tsukuba.ac.jp/bin/windows/contrib/2.8/Rcmdr_1.4-7.zip' を試しています 

Content type 'application/zip' length 2389722 bytes (2.3 Mb)

開かれた URL 

downloaded 2.3 Mb

パッケージ 'Rcmdr' は無事に開封され、MD5 サムもチェックされました 
以下にエラー normalizePath(path) : 
 path[1]: 指定されたファイルが見つかりません。


library(Rcmdr)

以下にエラー library(Rcmdr) :  'Rcmdr' という名前のパッケージはありません。


パッケージのインストールでつまづくと、作業が進まず非常に困っています。
どなかたアドバイスいただけないでしょうか。お願いします。

  • パッケージを入れる場所が(Rにとって)不正である可能はありませんか? .libPaths()[1]を表示して確認しましょう。 -- 2009-02-02 (月) 12:24:15
  • 不正であるかはどのようにすればわかるのでしょうか? > .libPaths()[1]とすると、 [1] "C:/PROGRA~1/R/R-28~1.1/library"と出ました。教えていただけるでしょうか? -- 新参? 2009-02-02 (月) 19:27:33
  • 不正であるかはどのようにすればわかるのでしょうか? > .libPaths()[1]とすると、 [1] "C:/PROGRA~1/R/R-28~1.1/library"と出ました。教えていただけるでしょうか? -- 新参? 2009-02-02 (月) 19:49:49

plot.newとabline?

capetapeta? (2009-02-01 (日) 21:14:59)

x <- c(1,3,4,6,8,9,12)

y <- c(5,8,6,10,9,13,12)

par(mfrow = c(1,3))

plot(x,y,ylim = c(0,16))

abline(0,0.68)

以下にエラー int_abline(a = a, b = b, h = h, v = v, untf = untf, ...) : 
  まだ plot.new が呼ばれていません 


というエラーが発生しました。質問項目やヘルプを探しましたがエラーを改善する方法を見つける事ができませんでした。昨日Rを始めたばかりで右も左もわからない状態です。宜しくお願いいたします。

  • ablineする前にWindowを閉じました? -- なかま 2009-02-01 (日) 22:01:13
  • いいえ 閉じてはおりません。この画面通りそのまま打ちました。 -- capetapeta? 2009-02-02 (月) 00:52:16
  • sessionInfo() の実効結果の添付出来ますか? あまり思いつく原因はないのだけど... -- なかま 2009-02-02 (月) 01:21:09
  • R version 2.8.1 (2008-12-22) i386-apple-darwin8.11.1 locale: ja_JP.UTF-8/ja_JP.UTF-8/C/C/ja_JP.UTF-8/ja_JP.UTF-8 attached base packages: [1] stats graphics grDevices utils datasets methods base > -- capetapeta? 2009-02-02 (月) 11:21:12
  • アプリケーションの中のRを起動しましたか?それとも, 端末からコマンドでRを起動しましたか?後者であれば X11をインストールしていなければそのような状態になると思いますし, 前者なら見当がつきませぬ. 後者なら,plotの前にquartz()を実行すればquartz上に描画しますが, アイコン上から起動するのが良いでしょう. -- なかま 2009-02-02 (月) 20:02:51
  • 同じ環境で試しましたが、エラーが再現できませんでした。 -- okinawa 2009-02-02 (月) 20:31:36
  • 使っているOSはMacOSX(10.5.6)でバーチャルでWindows(XP,Vista)でもためしたのですが同じで、通常起動も、端末起動もやってみたのですが全くうまくいきません。 もう一度インストールし直すということもしてみたのですが結局同じ結果となりました。 -- capetapeta? 2009-02-08 (日) 15:51:04
  • どのようにインストールされたのでしょうか?また、あなたのネット環境にproxyやFirewall等の制限はありませんか? -- 2009-02-08 (日) 18:42:04
  • Rwikiの指示に従ってサイトに進みソフトをそれぞれインストールしました。windowsに関しましてはXPはproxy,Firewallは無効に設定してありましたが、Vistaは有効になるように設定してあります。MacOSXに関しては特にそういう設定は行っておりません。ClamXav?というウイルスソフトが入っていますが、これはスキャン機能のみでインターネット接続中にフィルターをかけるといったことはしないソフトです。なのでその点に関しましてはもんだいはないかと思っております。同様にLinuxでも試してみたいと思います -- capetapeta? 2009-02-09 (月) 07:53:40
  • ubuntuをつかってやってみましたがやはり同じ結果でした。 -- capetapeta? 2009-02-09 (月) 09:33:23
  • XPの環境でも試しましたが、エラーが再現されません。やはり、Rとは関係のない部分で、そちらの環境に問題があるとしか思えません。 -- okinawa 2009-02-09 (月) 13:40:14
  • もしかして、Rエディタから実行してませんか?abline(0,0.68)の部分だけ実行すると上記のエラーが出ますね。 -- okinawa 2009-02-09 (月) 13:49:26
  • plotの実行後, グラフが表示されていますか? (ablineの入力前の時点) -- なかま 2009-02-09 (月) 18:55:37
  • abline()の入力前はグラフは正常に表示されます。もしかしてここの前後で命令文が区別されて認識されているのではないかと思っていますがいかがでしょうか?もしそうならその場合どのように対処したらよいでしょうか? -- capetapeta? 2009-02-10 (火) 16:38:12
  • ↑たぶんそうだと思いますが、いずれにしてもこちらの環境ではエラーが出ないので、対処の仕様がないです。上記のソースをコピペして実行してもエラーになりますか?あなたの実行しているソースがおかしくないですか? -- okinawa 2009-02-10 (火) 17:15:02
  • 同じマシン上での問題(マルチブート環境)なら, マシンの問題かも. 異なるマシンでも同じなら, 益々判らないです. --vanillaで起動して環境依存を排除したり, PDFに出力したり, 色々やってみれば, 何かつかめるかもしれませんが, 当方(いろんなマシンのいろんなOS)では再現しませんでした. -- なかま 2009-02-10 (火) 17:35:13

ダイナミックパネルデータ分析における寄与率について

初心者? (2009-01-28 (水) 14:27:40)

こんにちわ。

「pgmm」を用いてダイナミックパネルデータ分析を行い、summaryで結果を確認すると、R-squareが表示されませんでした。

いろいろ自分で試行錯誤してみましたが、わからなかったので、ご存知の方がいらっしゃいましたら、やり方を教えてください。

  • str()してみたらどうですか?あと、回答する人が無駄打ちしないように試行錯誤したことや、デモデータがあると助かります。 -- akira? 2009-01-29 (木) 08:21:07

Vista版R 2.8.1でPDFを作成するときの日本語フォントが

Vista使い? (2009-01-27 (火) 00:51:14)

Vista版RでPDFを作成するときの日本語フォントはどうすればよいのでしょう?
setHook(packageEvent("grDevices", "onLoad"),function(...) grDevices::ps.options(family="Japan1"))
ですが、"Japan1"でも、"Japan1"のところをいろいろ変えても文字化けしてしまいます。
どうかコメントおねがいします。

  • s/ps/pdf/ しる. ?pdf.options も -- なかま 2009-01-27 (火) 09:28:10
  • ううん。"Japan1" "Japan1HeiMin?" "Japan1GothicBBB" "Japan1Ryumin" 全て駄目でした。難しいですねぇ。 -- Vista使い? 2009-01-27 (火) 13:51:23
  • pdf("hoge.pdf", family="Japan1") としても駄目? それに何処に(?Rprofile)どうやって設定しました? 難しいですなぁ.(泣 -- なかま 2009-01-27 (火) 15:29:57
  • pdf("hoge.pdf", family="Japan1")でうまくいきました!で、etcにあるRprofile.siteに、
setHook(packageEvent("grDevices", "onLoad"),function(...) 
        grDevices::ps.options(family="Japan1")) 
setHook(packageEvent("grDevices", "onLoad"),function(...)
        grDevices::pdf.options(family="Japan1")) 

とすることで、文字化けしないPDFが出来ました。以前だったらps.optionsだけ設定していればPDFの方にも反映されてたのですが、Vistaはpdf.optionsも設定しないといけないんですね。なかまさま、どうもありがとうございました。-- Vista使い? 2009-01-28 (水) 09:16:53

  • Vistaに依存するわけではなくって, 単にバージョンのちがいですよ. MacでもAIXでもSolarisでもLinuxでもいっしょ(postscript,pdf等は)です. -- なかま 2009-01-29 (木) 13:12:52

非標準化係数に関するデータ

kato? (2009-01-26 (月) 11:11:44)

こんにちは.
step関数を用いて重回帰分析を行った後,得られたそれぞれの説明変数の非標準化係数の95%信頼区間と決定係数(R2),F値を得たいのですが,それらを調べるには,どのような関数を使ったら良いのでしょうか.
検索で調べてみましたが,95%信頼区間はグラフ上に示す方法などは見つかりましたが,数値として出力する(上限と下限)ような記載は見つかりませんでした.
例えば以下のようなデータで,glm()後にstep()を行うと,

data

 身長 体重 年齢

1 179 82 26
2 170 67 31
3 188 89 36
4 180 88 39
5 183 89 35
6 181 94 26
7 184 83 27

summary(result.glm)

Call:
glm(formula = 体重 ~ 身長, data = data)

Deviance Residuals:

     1        2        3        4        5        6        7  
  • 0.4665 -4.4154 -4.5175 4.3056 1.6220 9.0777 -5.6059

    Coefficients:
                Estimate Std. Error t value Pr(>|t|)  
    (Intercept) -137.3270 78.1518 -1.757 0.1392
    身長 1.2279 0.4323 2.840 0.0362 *
    • Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

      (Dispersion parameter for gaussian family taken to be 35.02454)

         Null deviance: 457.71  on 6  degrees of freedom
      Residual deviance: 175.12 on 5 degrees of freedom
      AIC: 48.402

      Number of Fisher Scoring iterations: 2

      となりますが,その後にどのようにして95%信頼限界,R2,F値を求めたらよいかわかりません.
      すみませんが,よろしくお願いします.
  • 95%信頼区間は単に Estimate ± 2*Std.Error でしょう。一般化線形モデルではR^2値やF値は一般に意味を持ちません(だから要約に出力されない)。もしかして単なる重回帰がしたいなら lm() 関数ですよ。 -- 2009-01-26 (月) 12:07:12
  • ご返答ありがとうございます.よくわかっておらず,申し訳ありません.ということは,R^2のような”独立変数を用いて従属変数をどの程度説明できるか”,という指標(そのモデルの妥当性?)は,glmでは何を参考にしたらよいのでしょうか. -- kato? 2009-01-26 (月) 12:33:09
  • Deviance もしくは AIC。意味(特に Deviance) はDobsonの一般化線形モデルの(和訳)本でも見て確認してください。  -- 2009-01-26 (月) 14:26:05
  • わかりました.参考文献まで教えていただき,ありがとうございました.検索したら本が見つかりましたので,早速見てみることにします.ありがとうございました. -- kato? 2009-01-26 (月) 16:09:37

Rのコンソールの内容をファイルに保存する

初心者? (2009-01-25 (日) 20:43:44)

R で長いプログラムを書いております.
Rのコンソールの内容(命令+実行結果+エラーメッセージ+警告メッセージ)
をファイルに保存するにはどうすればよいのでしょうか?
例えば,sinkだと実行結果しか保存できません.教えていただければと思います.
ちなみに R 2.8.1, OS は Ubuntulinux を使っております.

  • RjpWiki の検索窓でキーワード「R出力の記録」で検索 -- 2009-01-26 (月) 09:36:19
  • ありがとうございます。「R | tee R.log」で実現できました。ちなみに、windows だったら tee が無いから難しいですよね?どうするんだろう。。 -- 初心者? 2009-01-27 (火) 00:42:47
  • tee では標準出力だけしか記録されませんね。エラーメッセージ等も含め全部記録したかったら emacs のシェルモードで R を実行するのが簡単です。 -- 2009-01-27 (火) 09:50:21
  • Windowsのteeコマンドについてはここここに記事がありました。使ったことないけど。 -- akira? 2009-01-27 (火) 14:27:06
  • R CMD BATCH hoge.R hoge.Rout ってすれば良いのでは? -- なかま 2009-01-28 (水) 16:34:15

plotでylim

nanbuwks? (2009-01-24 (土) 11:53:03)

こんにちは。

plot(1:10,type="l",ylim=c(0,10))

とすると、y軸の目盛が0,2,4,6,8,10と振られますが、y軸の底(x軸と交わる点)は0になりません。
大体プロット領域は-0.5から10.5ぐらいになっているようです。これを0から10までにするには
どうしたらいいでしょうか。
なお、barplotと重ね合わせをする目的なので、x軸を上にずらす以外のやりかたで方法がないでしょうか。

  • 軸の範囲はpar(yaxs="i")、ここですね。
    plot(1:10,yaxs="i")
    plotを重ねるならpoints()とか
    barplot(matrix(1:10,2))
    points(1:5)
    検索すればいろいろでてくると思います。デモデータとかあると試せますが… -- akira? 2009-01-25 (日) 10:20:05
  • 完璧です。ありがとうございます! parのマニュアルは見てたのですがyaxs を見落としてしまってました。すみません。 -- nanbuwks? 2009-01-26 (月) 17:20:00

メモリ不足

(2009-01-23 (金) 15:17:52)

SVMを使いたいのですが、「エラー:サイズ 276.9 Mb のベクトルを割り当てることができません」となってしまい、実行できません。
PCのメモリは2GBで、57600×101(ヘッダー含む)のデータを判別したいのです。

メモリを変える以外になにか解決方法ありませんでしょうか?

  • R.huge?使ったことないけど。R で大規模データを処理する -- 2009-01-26 (月) 10:00:36
  • R.hugeパッケージをインストールしてみましたが、調べてみても使い方がわかりません。 どのように使えばいいのでしょうか? -- 2009-01-27 (火) 12:52:36
  • ガベージコレクタをかけてみるとか、動いているアプリを落とすとかして、メモリを解放してみては?? -- myuhe? 2009-01-29 (木) 11:38:46
  • WindowsXPだとして、pdfのマニュアル「R-intro.pdf」に -- ななし? 2009-01-29 (木) 13:07:52
    ‘--max-mem-size=N’
    (Windows only) Specify a limit for the amount of memory to be used both for R
    objects and working areas. This is set by default to the smaller of 1.5Gb and
    the amount of physical RAM in the machine, and must be between 32Mb and the
    maximum allowed on that version of Windows.
  • という、オプションがあるらしいです.自分の環境「WindowsXP/メモリ4G/R-2.8.0」ではショートカットで
    "C:\Program Files\R\R-2.8.0\bin\Rgui.exe" --max-mem-size=1800M
    とすることで、使用できるメモリが増えました.ただしXPでは1プロセスで使用できるメモリが2Gまでなので、ご注意を.
  • オプションを付けずに起動したR
    > x <- matrix(0.0,57600,101*20)
     エラー:  サイズ 887.7 Mb のベクトルを割り当てることができません
    > gc()
             used (Mb) gc trigger (Mb) max used (Mb)
    Ncells 105955  2.9     350000  9.4   350000  9.4
    Vcells  74584  0.6     786432  6.0   353875  2.7
  • 「 --max-mem-size=1800M」を付けて起動したR
    > x <- matrix(0.0,57600,101*20)
    > gc()
                used  (Mb) gc trigger  (Mb)  max used  (Mb)
    Ncells    105950   2.9     350000   9.4    350000   9.4
    Vcells 116426576 888.3  128697668 981.9 116426905 888.3

クラスタ分析後の樹形図の作成

初学者? (2009-01-21 (水) 18:25:08)

はじめまして。お世話になります。

使用環境は、Windows XPで、RのVersionは、下記の通りです。
R version 2.8.1 (2008-12-22)
i386-pc-mingw32

locale:
LC_COLLATE=Japanese_Japan.932;LC_CTYPE=Japanese_Japan.932;LC_MONETARY=Japanese_Japan.932;LC_NUMERIC=C;LC_TIME=Japanese_Japan.932

attached base packages:
[1] stats graphics grDevices utils datasets methods base

other attached packages:
[1] cluster_1.11.12 MASS_7.2-45

loaded via a namespace (and not attached):
[1] tools_2.8.1

質問ですが、クラスター分析後に樹形図を作成しましたが、(縦型)樹形図の最下部にある表示が数字で表示されています。その部分を、たとえば、各サンプルの名前など、データに存在するサンプル名に表示できないでしょうか?

たとえば、下記のプログラム例ですと、(縦型)樹形図の最下部に数字が表示されます。irisデータで、Speciesの表記、setosa、versicolor、virginicaを表示させることは可能でしょうか?
※実際には、「単一の名前」を用いたデータを利用しますが、説明のためirisデータにより投稿いたしました。

(プログラム例)
DST.d <- dist(iris)
DST.hc1<-hclust(DST.d, method="ward")
plot(DST.hc1, hang=-1, main="ウォード法")

以上、アドバイスの程よろしくお願いいたします。

  • Rコンソール上で ?hclust を実行してみてください。hclustのplotにlabelsが指定できますよ。 -- 2009-01-21 (水) 20:59:24
    DST.d <- dist(iris)
    DST.hc1<-hclust(DST.d, method="ward")
    plot(DST.hc1, hang=-1, main="ウォード法",labels=iris$Species)
  • しっかりと作成できました。複雑に考えすぎ、上記プログラムで申し上げると、DST.d内のLabels=の部分に、表示させたいラベルが存在しないためと考え、dist()の部分にいろいろなオプションを試行錯誤しておりました。ヘルプを見る部分を誤っていました。アドバイスどうもありがとうございました。 -- 初学者? 2009-01-22 (木) 19:31:22

最小全域木

初心です? (2009-01-19 (月) 23:30:10)

最小全域木のようなグラフを描きたいです
matplot(x,type="p",pch=20)で点を書きsegments(7,70,8,78)で一本づつ線を描けばかけるのですが、数値を変更すると線は書き直しになり、細かく線を書いていくと時間がかかります。何かアドバイスを頂ければ幸いです。よろしくお願いします。

  • igraphパッケージやsnaパッケージのグラフ描画機能を使ってはいかがでしょうか。igraphには最小全域木を求める関数もありますし。 -- 2009-01-24 (土) 01:44:08
  • ありがとうございます。今勉強中です -- 初心です? 2009-01-28 (水) 22:40:29

パッケージインストールのエラーについて

初級者? (2009-01-18 (日) 19:17:48)

お世話になります。
R2.8.1、XPにパッケージ(tree)をインストールした時、下記のの用になりましたが、初心者で内容や、回復方法が分かりません。既存のQ&Aを見ましたが、見落としを含めて、見当たりません。回復方法を教えていただけると助かります。よろしくお願いします。

install.packages("tree")

--- このセッションで使うために、CRANのミラーサイトを選んでください --- 
URL 'http://cran.md.tsukuba.ac.jp/bin/windows/contrib/2.8/tree_1.0-26.zip' を試しています 

Content type 'application/zip' length 152558 bytes (148 Kb)

開かれた URL 

downloaded 148 Kb

パッケージ 'tree' は無事に開封され、MD5 サムもチェックされました 
以下にエラー normalizePath(path) : 
 path[1]: 指定されたファイルが見つかりません。

library(tree)

以下にエラー library(tree) :  'tree' という名前のパッケージはありません
  • 同じ環境で試しましたが、再現されません。コマンドではなく、メニューから再度やってみてください。エラーの内容からみるとRのインストールの問題かもしれませんので、Rの再インストールをしたほうがいいかもしれません。 -- okinawa 2009-01-20 (火) 08:34:44
  • Ver2.7.2、XPproで試してみましたが同じくエラーは出ませんでした。解決になってなくて申し訳ないです -- 多次元さん? 2009-01-20 (火) 18:49:40
  • お忙しい中、アドバイス、試行結果ありがとうございました。メニューからのインストール、Rの再インストール両方を試みましたが解決出来ませんでした、小生のパソコンに別の不具合があるものと思います。そちらを調査してみます。お忙しいところアドバイスしていただきながら、ご返事が遅れ、申し訳ありませんでした。 -- 初級者? 2009-01-21 (水) 23:01:28
  • 理由は分かりませんが、ミラーサイトを変更したらすんなりインストール出来ました。色々アドバイスをいただきありがとうございました。 -- 初級者? 2009-01-22 (木) 22:12:51

2変量混合正規分布に従う乱数

Rin? (2009-01-16 (金) 15:50:03)

はじめまして。
プログラムについての質問です。
φを平均-1,分散1の正規分布に従う確率変数,ψを平均2,分散1の正規分布に従う確率変数として

   f(x,y)=0.6φ(x,y)+0.4ψ(x,y)~

に従う2変量混合正規乱数を発生させたいのですが、どのようにすればよいでしょうか?
現在、自分が書いたものではないのですが、他の方が書いたプログラムとして、2変量正規乱数を発生させるための以下のようなプログラムがあります。

   # nc:発生させる乱数のデータ数~
   #r:相関係数~
   gendat <- function(nc, r)    ~
   {~
   # 仮のデータ行列を作る。この時点では変数間の相関は近似的に0である。
   z <- matrix(rnorm(2*nc), ncol=2)
   # 主成分分析を行い,主成分得点を求める。この時点で変数間の相関は完全に0である。
   res <- eigen(r2 <- cor(z))
   coeff <-  solve(r2) %*% (sqrt(matrix(res$values, 2, 2, byrow=T))*res$vectors)
   z <- t((t(z)-apply(z, 2, mean))/sqrt(apply(z, 2, var)*(nc-1)/nc)) %*% coeff
   # コレスキー分解の結果をもとに,指定された相関係数行列 を持つように主成分得点を変換する。
   z %*% chol(matrix(c(1, r, r, 1), ncol=2))
   }~

このプログラムを、2変量混合正規乱数を発生させるためのプログラムにしようと思い、改変したものが以下のプログラムです。

       gendat2 <- function(nc, r)~
       {
	z <- matrix((rnorm(2*nc)-1)+3*(runif(2*nc) > 0.6), ncol=2)#~
	res <- eigen(r2 <- cor(z))
	coeff <-  solve(r2) %*% (sqrt(matrix(res$values, 2, 2,
                          byrow=TRUE))*res$vectors)
	z <- t((t(z)-apply(z, 2, mean))/sqrt(apply(z, 2, var)*(nc-1)/nc)) %*% coeff
	z %*% chol(matrix(c(1, r, r, 1), ncol=2))
       }

1行目のzの部分を変えてみました。

       z <- matrix((rnorm(2*nc)-1)+3*(runif(2*nc) > 0.6) 

の部分は、rjpwikiの『ヒストグラムと密度の推定』の、『f(x) に従う乱数を生成する関数』の項目を参考にさせて頂きました。

しかし結果を見てみると、どうもf(x,y)=0.6φ(x,y)+0.4ψ(x,y)に従うような乱数が発生していないようです。
コレスキー分解の部分を理解していないので、きっとその辺りに原因があると思うのですが、このソースで間違えている部分が分かる方教えてください、お願いします。

  • X1,X2,R をそれぞれ φ1、φ2 と確率 0.6 で 1, 確率 0.4 で 0 となる乱数(sample(0:1, size=1, rep=TRUE, p=c(0.4,0.6)))として X <- R*X1+(1-R)*X2 とすればよい。 二変量正規分布乱数はCRANで探せばパッケージ(mvtnorm)があります。 -- 2009-02-02 (月) 17:32:11

点から伸ばした垂線が直線と交わる座標の求め方

Saito? (2009-01-14 (水) 23:49:00)

いつもお世話になっております。
ある点の座標とその座標からある直線までの距離がわかっているとき、ある点から直線に垂直に降ろした線分が直線と交わる点の座標を求めるにはどうすればよいでしょうか?以下にサンプルを示します。

x <- 0;y <- sqrt(2)#座標の作成
 plot(x, y, xlim=c(0,3), ylim=c(0,3), col="red")#座標の表示
abline(a=0, b=1)#直線式の定義(ここではy=x)
d <- 1#座標から直線までの距離(既知)

このようなとき、つまり(x,y)=(0,sqrt(2))という座標からy=xまでの垂直距離(今回は距離d=1)がわかっているときの交点の座標を求めたいのです。ちなみに答えは(sqrt(2)/2,sqrt(2)/2)になるはずです。もちろん手計算でやればでますが、どのようにプログラミングしてよいのかがわかりません。
最初にoptimを試して垂直距離が最小になるような座標を推定したところ、大体うまく推定できるようなのですがたまに初期値が悪いとうまく推定できないようです。solveで連立方程式が解けるらしいので勉強したのですがどうもよくわからず使いこなせません。
どなたか交点の座標が分かる方がおりましたらご教授願えませんでしょうか。
なお、環境はWindowsXp?、R-2.8.1です。
よろしくお願い致します。

  • これでどうでしょうか(初歩的な線形代数か). -- hidee? 2009-01-15 (木) 19:13:45
    x <- 0 ; y <- sqrt(2)/2 #座標の作成
    plot(x, y, xlim=c(0,3), ylim=c(0,3), col="red") #座標の表示
    intercept <- 0 ; slope <- 1 # 直線の定義 (y = x)
    
    abline(a = intercept, b = slope) # 直線の表示
    
    slope2 <- -1/slope # 直交する直線の傾き
    intercept2 <- -slope2 * x + y # 直交する直線の切片
    
    abline(b=slope2, a=intercept2) # 直交する直線の表示もしておくか
    
    cross.p <- solve( # 連立方程式の解(交点座標) = これが求めたい解
                    matrix(
                           c(-slope, -slope2, 1, 1), 2, 2),
                    matrix(
                           c(intercept, intercept2)))[,1]
    
    (d <- sqrt(sum((cross.p - c(x, y))^2))) # ついでに距離の計算

ちなみに例題の解は1にはならないような...

  • hideeさんありがとうございます。おかげ様で解決致しました。この度は大変勉強をさせていただきました。 また、ミスの指摘もありがとうございます。yはsqrt(2)/2ではなくsqrt(2)でしたので、修正しておきました。 -- Saito? 2009-01-15 (木) 23:55:27
  • えっと、そういえばhideeさんが示してくださった直交する直線の切片なのですが、slope2 *x +yとなっていますが、-1*slope2 *x +yですよね? -- Saito? 2009-01-16 (金) 14:54:28
  • ミスしていますね.点の座標がx=0で見落としていました.コード直しておきます. -- hidee? 2009-01-16 (金) 15:20:20

arulesで、listデータからtransactionの処理ができなくなった。

NewComer? (2009-01-14 (水) 14:18:19)

R2.7.0、XPで、アッソシエーション分析をしていました。1月になって
arulesを再インストール(全パケージをインストールしたため)したところ
listからtransactionの処理が出来なくなりました、本を見ながらあちこち試しましたがNG、友人にも友人のPCで試してもらいましたがNG、初心者で
分かりません。以下、データを添付しますので、よろしくお願いします。

#テスト用に作成したデータ~
install.packages("arules",dependencies=TRUE)
library(arules)
{data<-list(c("A","B","C","D"), c("E","A","G","B"))}
data.tran<-as(data,"transactions")
class(data.tran)
#結果
> {data<-list(c("A","B","C","D"),
+ c("E","A","G","B"))}
> data.tran<-as(data,"transactions")
以下にエラー validObject(.Object) : 
不正なクラス "ngCMatrix" オブジェクト:  row indices are not sorted within columns ←エラーの意味がわからない。

#昨年末arulesは改版されているので、これと関係あるのだろうか?
Package: arules
Version: 0.6-7
Date: 2008-13-12
Title: Mining Association Rules and Frequent Itemsets

#library(arules)を実行すると、下記の様なメッセージが出るようになったと思うが
関係あるのだろうか?

要求されたパッケージ Matrix をロード中です 
要求されたパッケージ lattice をロード中です 
次のパッケージを付け加えます: 'Matrix' 
       The following object(s) are masked from package:stats :
        xtabs 
       The following object(s) are masked from package:base :
        colMeans,
        colSums,
        rcond,
        rowMeans,
        rowSums 
次のパッケージを付け加えます: 'arules' 
       The following object(s) are masked from package:base :
        %in%
  • listをdata.frameにしてはいかがでしょうか. とりあえず. -- なかま 2009-01-15 (木) 11:27:26
  • ご多様中にも関わらず、早速のご回答ありがとうございました。添付のデータでは、listをdata.frameする事でうまくいきました。ただ、小生の例が悪かったのですが、実際のデータは各行でアイテム数が異なるため、データを読み込んだ時点で列数が不一致のエラーとなり、それでも強引に、transactionへの変換を行うと、質問時と同じエラーが発生しました。listがデータを上手く処理できないみたいなのですが、解決方法がわからないと言うところです。 -- NewComer? 2009-01-15 (木) 15:43:23
  • data.frameやmatrixに直して処理するしかないような. itemMatrixの中を直せばいいんでしょうけど... -- なかま 2009-01-15 (木) 16:57:36
  • 迅速なコメント、頭が下がります。ありがとうございます。ただ、超初級者の小生にとっては、実行に少々時間がかかりそうです。ご容赦ください。 -- NewComer? 2009-01-15 (木) 19:25:56
  • あっ〜〜, ど阿呆でした. data<-lapply(data,sort) と前処理してから, asで変換すればいい*だけ*です. -- なかま 2009-01-15 (木) 19:47:11
  • 元のコードに、 data<-lapply(data,sort)を追加したところ、見事解決。1週間悩んだことが解決し、これで分析が進みそうです。感謝・感謝です。ありがとうございました。 -- NewComer? 2009-01-16 (金) 08:35:49

VineLinuxでソースからのビルド

当方? (2009-01-11 (日) 19:28:21)

Linux の中には実行ファイルが用意されていないものがあります.その場合は Unix 版 R をインストールするのと同じ方法でソースからビルドするかと思います. 当方,VineLinux 4.2 を使っており,以下の手順でソースからのビルドを試みております.

  • ルート権限になった後,下記サイトから R-2.8.1.tar.gz をダウンロードする. http://cran.md.tsukuba.ac.jp/src/base/R-2/R-2.8.1.tar.gz
  • 「R HOME」というディレクトリを作成した後,ここで R-2.8.1.tar.gz を解凍(untar)する.
  • Linux 環境によっては「f77(g77で代替化)」「readline」「gcc」「c++」がない場合があるので,これらのパッケージを事前にインストールする.例えば,「g77」「c++」をインストールする場合は,ルート権限になった後,以下のコマンドを実行してパッケージをインストールする. ⇒ ここで,「g77」「c++」はインストールできるのですが,「readline」「gcc」は「すでに最新版が入っています」というメッセージが出ました.
$ apt-get update
$ apt-get install gcc-g77
$ apt-get install readline
$ apt-get install gcc
$ apt-get install gcc-c++
  • kterm 上で「R HOME」に移動し、下記コマンドを実行する。
$ ./configure
$ make
$ make install
  • 質問したいことは,「./configure」実行中に以下のエラーが出てしまいます.もし対処法をご存知の方はお教えいただければ幸いです.
configure: error: --with-readline=yes (default) and headers/libs are not available
  • 手元にVineがないので確認できませんが、readlineではなくreadline4を入れるとどうなりますか?むりやりコンパイルを通すなら、configureのオプションに--with-readline=noとか。でも、src.rpmからリビルドした方が楽かも。 -- 2009-01-11 (日) 21:21:56
  • 残念ながら「readline4」を入れても同様のエラーが出ました.ということで,
./configure --with-readline=no --with-x=no 

とすると,何とかインストールできました.ありがとうございます!ちなみに,「--with-readline=no」だけだと以下のエラーが出るので「--with-x=no」も付けました.-- 当方? 2009-01-11 (日) 22:03:09

configure: error: --with-x=yes (default) and X11 headers/libs are not available
  • Vineのgccは3.3系だったと思いますが, 3.4系以上でなければfortranに嫌らしいアライメントのバグがあったと思います. XOrg-devel libpng-devel pcre-devel libjpeg-devel readline-devel ncurses-devel bzip2-devel zlib-devel など, config.log の出力を頼りに 足りないヘッダやライブラリを追加しながら構築しましょう. readlineやXが無いものを無理に構築しても, 使い勝手が悪すぎます. テスト中にあるライブラリがあって, ヘッダが無いと言われれば, rpm -qf /usr/lib/libhoge.so 等とすればパッケージ名がわかりますから, hoge-develが無いか探してインストールすれば良いですし, apt-cache search boofoo 等とすればそんなパッケージが無いか探してくれるはずです. -- なかま 2009-01-13 (火) 12:11:39
  • なるほど。私はubuntuなのですが、Rライブラリのインストールでヘッダやライブラリの依存関係を探しきれず、手間取っていました。大変参考になりました。ありがとうございます。 -- akira? 2009-01-13 (火) 14:10:30
  • なかまさん、ありがとうございました!コメントいただいた命令を実行し、XOrg-develとreadline-develが足りなかったので、以下の命令を実行してライブラリを追加したら上手くインストールできました。 -- 当方? 2009-01-14 (水) 00:20:50
$ apt-get install XOrg-devel
$ apt-get install readline-devel

R2.8.1におけるRエディタの背景色の自動変更について

Saito? (2009-01-11 (日) 19:11:22)

いつもお世話になっております。
R2.8.1になって、編集→GUIプリファレンスと進みコンソール画面の背景色を変更するとRエディタの方でも背景色が自動で変更されるようなのですが、output text/User inputで入出力の色を変更してもRエディタの方は入力する文字の色が黒のままで変更されず、背景色との組み合わせによっては非常に見づらいです。何度もアンインストールとインストールと再起動をして確かめたのですがやはり直りません。どこかでRエディタの色を変えることができるのか調べたのですがわかりませんでした。このようなことになるのは私だけでしょうか?どなたか解決法をご存知でしたら教えていただけると幸いです。
なお使用環境はWindowsXp?です。

  • そこは黒固定です. -- なかま 2009-01-13 (火) 13:05:59
  • そうでしたか。では黒字に合わすしかないのですね。ありがとうございました。 -- Saito? 2009-01-13 (火) 17:20:14
  • 2.8.0までRエディタの背景色は白,黒文字で固定でした.どんな理由で2.8.1からはそのような仕様になったのでしょうね.Rエディタの文字が黒固定なら,実質的にconsoleの背景に暗い色が選べないので,ぼくはバグだと思ってました. -- black? 2009-01-22 (木) 23:57:27

Contourグラフ

EDI? (2009-01-11 (日) 09:02:29)

Contnurグラフを作成しようと考えています。

xy平面上にplot()を用いて散布図を作成しました。

平面上に散布された点(因子)の密度を数値化し、その数値をz値に使用と考えています。
まだ初心者なので、調べ方も不十分なのかとは思いますが、多くのContnurグラフを作成するfunctionたとえばcontour()などはこちらで(x,y,z)を定義する必要があるので使えていません。

そこで、(x,y)を定義するだけで、私の考えているようなContnurグラフを作成させられる関数があれば、教えていただければ幸いです。
あるいは、xy平面上に散布されたの点の密度分布をすべての格子点で求められるような関数があれば、そこからz値を定義できるのでそういった関数でもかまいません。何かアドバイスいただけると幸いです。よろしくお願いします。

  • 「そういった関数でもかまいません」だと答えにくいのではないでしょうか?「zをどう定義したいのか?」を具体的に質問した方がよいと思います -- 2009-01-11 (日) 14:55:53
  • xy平面上の任意の点から1単位距離に含まれる(xy平面に散布された)因子の個数をzと定義したいので、その値を求める関数と考えていました。ここまで書くうちに自分で関数を定義できそうな気がしてきたのでもう少し自分でも考えてみます。もちろん、皆様のアドバイスも引き続きいただけたら大変うれしいです。 -- 2009-01-11 (日) 20:34:30
  • もしかしたら私が過去に初級者コースに投稿した「ある範囲に含まれる生物の数をカウントするには(2008/9/17)」という記事が参考になるかもしれません。違ってたらごめんなさい。 -- Saito? 2009-01-12 (月) 16:47:30

回帰線の95%信頼区間

? (2009-01-10 (土) 20:09:47)

glmで誤差分布をポアソン分布とし,一般化線形回帰モデルを使用しています。その結果として出てくるモデルの”回帰線”の95%信頼区間を求めたいのですが,どなたか良い方法を教えていただけれませんでしょうか?

参考として,疑似データでの解析したスクリプトを添付いたします。

#疑似データ作成
x1<- c(1:10)
y1<- c(0,0,5,15,10,30,40,200,290,1000)
plot(x1,y1,ylim=c(0,1500))

#作図(回帰直線)
m <- glm(y1~x1,family=poisson(link=log))
summary(m)
x.val <- seq(min(x1),max(x1),0.1)
lines(x.val,predict.glm(m,newdata=data.frame("x1"=x.val),type="response"),lwd=2)

  • 正規分布ならこんなのがあるみたいです。金先生のサイトのブートストラップのところより、http://mjin.doshisha.ac.jp/R/
    data(cars)
    library(simpleboot)
    car.lm <- lm(dist~speed, data=cars)#線形モデルで回帰
    car.boot <- lm.boot(car.lm, R =2000)#ブートストラップ
    plot(car.boot, xlab="speed", ylab="dist") 
    ポアソンだとこれでは上手くいかないようですが、参考までに。-- Saito? 2009-01-12 (月) 16:34:09
  • ありがとうございます。ポアソンでも動くには動くには,ポアソン回帰ではリンク関数を使っていることやそもそもglmに対応していないみたいですので,そう簡単ではなさそうです。正規分布の場合であれば,あるxに対する母回帰の推定値の信頼区間の求め方は分かるのですが,ポアソン分布や他の分布となると,よくわかりません。この点について,何か参考となる文献をご存じないでしょうか? -- ? 2009-01-14 (水) 19:06:59
  • 推定値の信頼区間とはConfidential intervalのことですか?95%の信頼度で傾きの真の値が含まれる範囲のことですね?最初に聞いた質問は回帰直線の信頼区間とのことでしたので、てっきり予測区間(ある特定のxにおけるyの予測値の信頼限界)のことかと思いました。前者でしたら ポアソン回帰 予測区間でググるとトップにそれらしいパワポがヒットしましたがいかがでしょう。27枚目あたりがそれらしいかもしれません。 -- Saito? 2009-01-14 (水) 23:05:04
  • Saitoさま,ありがとうございます。すみません,適切な言葉が見つからず,混乱させてしまいました。予測値の信頼限界ではなく,母回帰式の95%信頼区間です(たとえば,http://homepage2.nifty.com/crop_shimane-u/kougi12.htmの”推定の信頼区間”)。単純に傾きや切片の95%信頼区間は出せるのですが,そこから,後者をどう推定した良いのかが,よくわからないという状態でした。webサイトも少し見てみます。 -- ? 2009-01-16 (金) 14:56:20

エクセルへの書き出し

みち? (2009-01-09 (金) 19:59:59)

Rでの実行結果をエクセルに書き出す方法を教えてください。

  • まず自分で調べなさい。そしてRでEXCELのファイルを読むをみなさい。 -- 2009-01-10 (土) 00:47:52
  • 「xlsフォーマットで書き出す」なら上記ですが、「エクセルで読めるフォーマットで書き出す」なら、やり方はたくさんありますよ。 -- okinawa 2009-01-11 (日) 09:12:14
  • 確かに。エクセルはdelimiterの指定ができるので、自由度は高いですね. -- 2009-01-11 (日) 14:57:06

DPpackageのインストール

tonton? (2009-01-08 (木) 22:38:15)

CRANのhttp://cran.r-project.org/web/packages/DPpackage/index.htmlでDPpackage_1.0-6.tar.gzをダウンロードしました。
これをRでインストールしようとしたのですが失敗します。
以下のようになります。

install.packages("C:/DPpackage_1.0-6.tar.gz",contriburl = NULL)

以下にエラー gzfile(file, "r") :  コネクションを開くことができません
追加情報:  Warning messages:
1: In zip.unpack(pkg, tmpDir) :~
  zip ファイルから抽出中にエラー 1 が起こりました
2: In gzfile(file, "r") :~
 圧縮されたファイル 'DPpackage/DESCRIPTION' を開くことができません, 理由は 'No such file or directory' です


WindowsXPでR2.8.0を使用しています。
どなたか解決方法を教えて下さい。

  • Windows版では.tar.gzではなくて,.zipをインストールするんです。でも,CRANにあるなら,install.packages()を使った方がいいと思います。 -- 2009-01-09 (金) 01:28:55
  • install.packages()で見れるインストールできるパッケージの一覧の中にDPpackageがありません。.zipは置いてなかったです。 -- tonton? 2009-01-09 (金) 12:44:57
  • リンク先をみるとWindowsバイナリはunavailableとなっていますね。Fortranだそうなのでソースから自分でbuildのは難しいと思います。Linux環境に移るか,または1つ前のバージョンでしたがhttp://www2.udec.cl/~ajarav/software.htmlからWindowsバイナリ(*.zipが取れるようです。 -- 2009-01-09 (金) 13:08:37
  • 1つ前のバージョンを.zipでインストールできました。ありがとうございました。 -- tonton? 2009-01-09 (金) 15:23:10

minhash法

okinawa (2009-01-08 (木) 17:40:48)

いつもお世話になっております。okinawaです。jaccard係数を用いたminhash法をRで利用する方法をどなたかご存じないでしょうか?数式の解説やsasのサンプルは見つけたのですが、読みこなせなくて・・・。
環境は:windowsXPSP3,R2.7.2

  • 自己レスです。veganというパッケージがあるようです。勉強します。 -- okinawa 2009-01-09 (金) 12:05:23
  • clv パッケージにありました。 -- okinawa 2009-01-09 (金) 16:19:59

繰り返し計算

ぽち? (2009-01-06 (火) 08:59:17)

すみません。一通り探したのですがわかりませんでした。
以下のような流れでspreadsheetについて計算をしたいのです。これ自体は動くのですが、問題はこれを1000回繰り返し、1000個のAB値を求めたいのです。

si <-data.frame(sample(data[2:11],10,replace=T))~
a <-data.frame(rowMeans(si[,1:5]))~
b <-data.frame(rowMeans(si[,6:10]))~
AB <-a/b~

どなたかお教えいただけないでしょうか?

  • forで回せばいいんじゃないの? -- 2009-01-06 (火) 11:48:54
  • よく使う機能なら、関数にして、lapply()するのも良いかと。 -- 2009-01-06 (火) 18:38:25
  • sapply( 1:1000 , function(i){ほにゃらら} ) ; でやってます。 -- 2009-01-06 (火) 22:38:36
  • ありがとうございます。 -- ぽち? 2009-01-07 (水) 02:47:52

sapplyでできました。

sapply( 1:10 , function(i)
 {si <-data.frame(sample(data[2:11],10,replace=T))
  a <-data.frame(rowMeans(si[,1:5]))
  b <-data.frame(rowMeans(si[,6:10]))
  AB <-a/b} ) 

forの場合、どうやら変なことをしてしまっているようで動かないのですが、どなたか間違いを指摘していただけないでしょうか?

set.seed(101)
m <- 10
replicate10 <- numeric(m)
for (i in 1:m) replicate500[i] <-function(i)
 {si <-data.frame(sample(data[2:11],10,replace=T))
   a <-data.frame(rowMeans(si[,1:5]))
   b <-data.frame(rowMeans(si[,6:10]))
   AB <-a/b}

また、関数を定義しようとしてみたのですが、これもどうやらおかしなことをしてしまっているようです。仮に、

ABC <-function(i)
      {si <-data.frame(sample(data[2:11],10,replace=T))
        a <-data.frame(rowMeans(si[,1:5]))
        b <-data.frame(rowMeans(si[,6:10]))
       AB <-a/b} 

とした際に、ABCとした際に、sourceを使って呼び出すというところまでやってみたのですが・・・。

更なるご助言をお願いします。

  • 引数のiがfunction内で使われていません。i=dataだと思います。
    ABC <- function(i)
          {si <-data.frame(sample(i[2:11],10,replace=T))
            a <-data.frame(rowMeans(si[,1:5]))
            b <-data.frame(rowMeans(si[,6:10]))
           AB <-a/b
          }
    ABC(i=data)
    でどうでしょうか? -- akira? 2009-01-07 (水) 12:48:09
  • なるほど。そこが抜けていたんですね。どうもありがとうございました! -- ぽち? 2009-01-08 (木) 03:36:41

凡例の文字のフォントについて

初心者です? (2009-01-06 (火) 00:45:24)

legend(0,0.6,c("R","TPR","ATP"),col=1,pch=c(4,0,16),lty=1:3)で凡例を表示させました。グラフに表示させると(R,TPR,ATP)が半角で描かれているようにみえません。全角のようにみえます。たぶんMSPゴシックで表示されていると思うのですが、MSゴシックのような半角文字で表示したいのです。
初心の質問で申し訳ありませんが、よろしくお願いします。

  • 全角も半角も同じ幅に見えるはずです. グリフもちゃんとフォントの全角なり半角の物です. Rだと見栄えが変わりませんからi等で見比べて下さい.文字幅と文字の間隔の事をおっしゃられているのだとは思いますが, 現時点ではそういった地域固有の慣習は非常に困難な場合を除いて考慮していません. -- なかま 2009-01-06 (火) 10:57:59
  • 手元にWindows環境がないので「MSゴシックのような半角文字」がどのようなグリフなのか確認できませんが、一般論として、現状のRで、凡例のフォントのみを変更することは出来ません。凡例のフォントのみを変更したい場合は、Rの出力を別のグラフィックソフトで編集することになります。しかし、全体のフォントを変更してもよいならEPS形式の出力が参考になるかも。 -- 谷村 2009-01-06 (火) 16:33:53
  • EPS形式の出力 > dev.copy2eps(file="ファイル名.eps",family="フォント名")で解決しました。ありがとうございました。 -- 初心者です? 2009-01-06 (火) 21:16:20

print.rpartの結果をオブジェクトとして保存できませんか?

rpart? (2009-01-06 (火) 00:13:24)

rpartオブジェクトのprintの結果をオブジェクトとして保存して加工したいです。
下記のようなテキストのツリー図が標準出力に表示されますがオブジェクトとして保存する方法が見つかりません。

1) root 150 102.1683000 5.843333  
  2) Petal.Length< 4.25 73  13.1391800 5.179452  
    4) Petal.Length< 3.4 

・・・・
どなたか方法をご存知でしょうか?
よろしくお願い致します。

  • capture.output(tree) で解決しました。 -- rpart? 2009-01-06 (火) 11:38:07

BRugsでの切断正規分布

お正月? (2009-01-05 (月) 12:47:11)

ベイズ推定でBRugsを使っていて、事前分布において、あるパラメータが切断正規分布(<0)に従うのですが、切断正規分布の関数がないため、モデルの記述ができません。年末年始ずっと調べたり考えたりしたのですが、方法が見つかりせん。
どなたか方法をご存知でしょうか?
よろしくお願い致します。

  • msmパッケージ内にtnormがあります。 -- 2009-01-05 (月) 14:54:01
  • お忙しい中ご回答ありがとうございます。この関数は知りませんでした。しかし、この関数をBRugsで用いたところ「unknown type of probability density」という理由でエラーが出てしまいました。BRugsではなく、他の方法を考えるしかないのでしょうか? -- お正月? 2009-01-05 (月) 21:54:48

オプション価格計算パッケージについて

しょうりゅう? (2009-01-03 (土) 14:33:22)

 データ分析においてRのすばらしさが実感しておりますが、デリバティブ(たとえばアメリカンオプションのプレミアムやリスクファクターの計算)が扱うようなパッケージはないでしょうか?よろしくお願いします。

関数scatterplotを見つけることができませんでした

nanbuwks? (2009-01-03 (土) 11:48:21)

こんにちは。Rを試そうとして、いくつかのサイトを参考にインストール・操作をしているのですが、

scatterplot.matrix( ~ID+月曜日+火曜日+水曜日, reg.line=lm, smooth=TRUE, span=0.5, diagonal = 'density', data=X )

エラー:  関数 "scatterplot.matrix" を見つけることができませんでした 


scatterplot( USD~seq, reg.line=lm, smooth=TRUE, labels=FALSE, boxplots='xy', span=0.5, data=X )

エラー:  関数 "scatterplot" を見つけることができませんでした 


となります。
MS-WindowsXP Professional上でバージョンはR2.8.1+Rcmdr1.4-6、およびパッケージとしてrglをインストールし、
"R User Configuration" http://androids.happy.nu/doc/r-tips#USER-CONFIG
を適用しています。
このエラーのためか、Rコマンダーのグラフメニューに「散布図行列」の項目が表示されません。
これは何かの不具合あるいはインストールミスなのでしょうか?それとも現バージョンではscatterplot関連は使えなくなっているのでしょうか?よろしくお願いします。

  • 解決? -- nanbuwks? 2009-01-03 (土) 13:00:17
  • ミス投稿失礼しました。解決したかもしれません。Rの再起動を2回程すれば使えるようになりました。Rコマンダーのメニューにも表示されました。お騒がせしました。 -- nanbuwks? 2009-01-03 (土) 13:01:12

3D棒グラフについて

totoro? (2008-12-28 (日) 20:14:54)

3D棒グラフ(縦)の作り方をご教示いただけないでしょうか。
Excelの3D棒グラフと同じようなものを作成しようと考えております。
persp関数も試したのですが、点を結ぶ形になってしまい上手くいきません。
よろしくお願いします。

  • 以下のコードで作成されるような図でしょうか?latticeExtraパッケージのサンプルコードですけど. -- ishida 2008-12-29 (月) 11:55:12
    > library(latticeExtra)
    > cloud(VADeaths, panel.3d.cloud = panel.3dbars,
         col.facet = "grey", xbase = 0.4, ybase = 0.4,
         screen = list(z = 40, x = -30))

  • ありがとうございます。大変助かりました。 -- totoro? 2008-12-29 (月) 12:59:43

Web 上の raw データを画像として扱う方法

師走? (2008-12-26 (金) 11:49:50)

Web 上より以下のように画像を取得して、画像として表示などの処理をする方法ご教示願えないでしょうか?

> library(RCurve)
> x<-getBinaryURL("http://www.okada.jp.org/RWiki/Rlogo.jpg")
> class(x)
[1] "raw"
> summary(x)
Length  Class   Mode 
 3173    raw    raw 


 上の"raw"形式を画像にする方法が分りません。rgdal も試してみましたが、ディスク上に保存しているものにしか対応できないようです。

  • writeBin(x,"c:/Rlogo.jpg")?それともrimageパッケージ? -- okinawa 2008-12-26 (金) 13:45:13
  • okinawa さん、ご教示ありがとうございます。writeBin でできました。rimage はまだ試していませんが。ところで、一旦ディスクに落とさず、オンメモリーで画像表示する方法はないでしょうか? -- 2008-12-26 (金) 14:12:55

関数内で引数のオブジェクト名を使うには?

hidee? (2008-12-25 (木) 19:08:22)

> a <- 5
> (function(x){x})(a)
[1] 5
>


ですよね.

ここで戻り値が"a"となるような関数定義は
どのようにすれば良いのでしょうか.

  • (function(x){substitute(x)})(a) -- なかま 2008-12-25 (木) 21:37:09
  • なかま さん,ありがとうございます.
    > a <- 10
    > (function(x){substitute(x)})(a)
    a
    > class((function(x){substitute(x)})(a))
    [1] "name"
    > (function(x){deparse(substitute(x))})(a)
    [1] "a"
    > class((function(x){deparse(substitute(x))})(a))
    [1] "character"
    > 
    であることがわかりました.-- hidee? 2008-12-25 (木) 23:50:24

gdbを使ったデバッグ

syou6162? (2008-12-23 (火) 13:46:15)

gdbを使ってRオブジェクトがどのように表わされるか調べようとしています。
http://www.is.titech.ac.jp/~mase/mase/R-exts.jp/R-exts.jp.html#SEC50
を参考にしているのですが、「中断点を do_get に置き、R のプロンプトに get("DF") とタイプすると、 DF のメモリ中のアドレスを得ることが出来る」の部分がよく分かりません。

Value returned is $1 = (SEXPREC *) 0x40583e1c
と書いてあるのですが、これをどうやって得ればよいのかが分かりませんでした。
途中までの操作は以下のようになっています。

/Users/yasuhisa% R -d gdb                                                  
GNU gdb 6.3.50-20050815 (Apple version gdb-768) (Tue Oct  2 04:07:49 UTC 2007)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-apple-darwin"...Reading symbols for shared libraries ..... done

(gdb) r
Starting program: /Library/Frameworks/R.framework/Versions/2.8/Resources/bin/exec/R 
Reading symbols for shared libraries ++++........... done
Reading symbols for shared libraries . done
Reading symbols for shared libraries . done

R version 2.8.0 (2008-10-20)
Copyright (C) 2008 The R Foundation for Statistical Computing
ISBN 3-900051-07-0

Rはフリーソフトウェアであり、「完全に無保証」です。 
 一定の条件に従えば、自由にこれを再配布することができます。 
配布条件の詳細に関しては、'license()'あるいは'licence()'と入力してください。 

Rは多くの貢献者による共同プロジェクトです。 
 詳しくは'contributors()'と入力してください。 
また、RやRのパッケージを出版物で引用する際の形式については 
 'citation()'と入力してください。 
 
 'demo()'と入力すればデモをみることができます。 
 'help()'とすればオンラインヘルプが出ます。 
 'help.start()'でHTMLブラウザによるヘルプがみられます。 
 'q()'と入力すればRを終了します。 

 [以前にセーブされたワークスペースを復帰します] 

Reading symbols for shared libraries ............................... done
Reading symbols for shared libraries . done
> DF <- data.frame(a = 1:3, b = 4:6)
> 
Program received signal SIGINT, Interrupt.
0x9037c5e2 in select$DARWIN_EXTSN ()
(gdb) b do_get
Breakpoint 1 at 0x3bbbdf: file envir.c, line 1600.
(gdb) c
Continuing.

Program received signal SIGINT, Interrupt.
0x9037c5e2 in select$DARWIN_EXTSN ()
(gdb) c
Continuing.
^D
Save workspace image? [y/n/c]: c
> get("DF")

Breakpoint 1, do_get (call=0xde0, op=0x1016c28, args=0x18529f0, rho=0x1852a98) at envir.c:1600
1600	    SEXP rval, genv, t1 = R_NilValue;
(gdb) 
  • finish と(gdbなら)入れてみましょう. たぶん, 書いた人は, Value returned って書いてあるんだから, その関数の終了までどんなデバッガか知らないけど実行してくれる事を期待しているでしょう. そうしないとデバッガのマニュアルが出来てしまうので, こういった部分の表現はたしかに難しいですね. 私もいちいち全ては覚えてないので, 脊髄反射か, マニュアル参照しないと出てこない部分です. (おなかいっぱいで動けない...) -- なかま 2008-12-23 (火) 21:49:47
  • コメントありがとうございます。 上と同じようなデータフレームを作るものをgdbからRのプロセスにattachしてやっています。「中断点を do_get に置き、R のプロンプトに get("DF") とタイプすると、 DF のメモリ中のアドレスを得ることが出来る」とあったところが再現できました。
    Current directory is ~/
    GNU gdb 6.3.50-20050815 (Apple version gdb-768) (Tue Oct  2 04:07:49 UTC 2007)
    Copyright 2004 Free Software Foundation, Inc.
    GDB is free software, covered by the GNU General Public License, and you are
    welcome to change it and/or distribute copies of it under certain conditions.
    Type "show copying" to see the conditions.
    There is absolutely no warranty for GDB.  Type "show warranty" for details.
    This GDB was configured as "i386-apple-darwin".
    /Users/yasuhisa/63250: No such file or directory.
    Attaching to process 63250.
    Reading symbols for shared libraries . done
    Reading symbols for shared libraries ....................... done
    0x9037c5e2 in select$DARWIN_EXTSN ()
    (gdb) b do_get
    Breakpoint 1 at 0x3bbbdf: file envir.c, line 1600.
    (gdb) finish
    Run till exit from #0  0x9037c5e2 in select$DARWIN_EXTSN ()
    0x004b864a in R_SelectEx (n=1, readfds=0x5cea40, writefds=0x0, exceptfds=0x0,
    timeout=0x0, intr=0x4b8bc0 <handleInterrupt>) at sys-std.c:152
    152		    val = select(n, readfds, writefds, exceptfds, timeout);
    (gdb) c
    Continuing.
    
    Breakpoint 1, do_get (call=0xde0, op=0x1012628, args=0x184a268, rho=0x184a310) at envir.c:1600
    1600	    SEXP rval, genv, t1 = R_NilValue;
    (gdb) finish
    Run till exit from #0  do_get (call=0xde0, op=0x1012628, args=0x184a268, rho=0x184a310) at envir.c:1600
    do_internal (call=0x11c9d18, op=0x1010238, args=0x184a268, env=0x184a310) at names.c:1143
    1143	    if (flag < 2) R_Visible = flag != 1;
    Value returned is $1 = (struct SEXPREC *) 0x192a4a8
    (gdb) p *$1
    $2 = {
      sxpinfo = {
        type = 19, 
        obj = 1, 
        named = 2, 
        gp = 0, 
        mark = 0, 
        debug = 0, 
        trace = 0, 
        spare = 0, 
        gcgen = 0, 
        gccls = 1
      }, 
      attrib = 0x14f208c, 
      gengc_next_node = 0x192a488, 
      gengc_prev_node = 0x192a4c8, 
      u = {
        primsxp = {
          offset = 2
        }, 
        symsxp = {
          pname = 0x2, 
          value = 0x0, 
          internal = 0x1a91c38
        }, 
        listsxp = {
          carval = 0x2, 
          cdrval = 0x0, 
          tagval = 0x1a91c38
        }, 
        envsxp = {
          frame = 0x2, 
          enclos = 0x0, 
          hashtab = 0x1a91c38
        }, 
        closxp = {
          formals = 0x2, 
          body = 0x0, 
          env = 0x1a91c38
        }, 
        promsxp = {
          value = 0x2, 
          expr = 0x0, 
          env = 0x1a91c38
        }
      }
    }
    (gdb) p R_PV($1)
    $3 = void
    (gdb) p R_PV($1->attrib)
    $4 = void
    (gdb) 
    アドレスは分かったのですが、R_PVで見てみようとするとvoidが返ってきてしまいます。また、*$1の内容も若干違うようです(vecsxpがない辺り)。sessionInfoは以下の通りです。
    > sessionInfo()
    sessionInfo()
    R version 2.8.0 (2008-10-20) 
    i386-apple-darwin9.5.0 
    
    locale:
    ja_JP.UTF-8/ja_JP.UTF-8/C/C/ja_JP.UTF-8/ja_JP.UTF-8
    
    attached base packages:
    [1] stats     graphics  grDevices utils     datasets  methods   base     

バージョン等で出力が違ったりするのでしょうか? -- syou6162? 2008-12-24 (水) 02:54:40

  • 東工大の元の記事を見るとreturn はvoidであってます。表示は元の画面に出てるんじゃない? -- 名無し? 2008-12-24 (水) 07:24:14
  • なるほど。voidでよさそうですね。ただ、"*$1の内容も若干違うようです(vecsxpがない辺り)"の付近がまだ分かっていません。 -- syou6162? 2008-12-24 (水) 11:01:10
  • この場合, 貴方が参照すべきは, Rinternals.h です. 表示例は相当古い物(1.0あたりの頃かな)なので, 実際の(今時点での)構造とは異なります. 商用ソフトであればメーカの怠慢ですが, フリーソフトウェアであれば我々ユーザの怠慢ですから, 最新の英語版ドキュメントに対して改善案をまとめて送ると, 他の初心者の方にも役立つと思います. 残念な事に, 私では読んだ時点(殆ど読み飛ばし...)で脳内変換が行われてしまい, 良い改善案が浮かびません.(gdbのマニュアル読めとか, ソース読めとかロクでもない文章しか出ませんので.) -- なかま 2008-12-24 (水) 14:33:06
  • 昔とは変わっているんですね、なるほど。Rinternals.hを読んで分かったらどこかにまとめてみようと思います。ありがとうございました -- syou6162? 2008-12-24 (水) 15:59:25

Windowsメタファイル

(く)? (2008-12-23 (火) 12:27:32)

クラスタ分析の樹形図をWindowsメタファイルとしてPowerPoint?に取り込もうとしています。(Windows版2.8.0)
画面上で日本語表示をさせて、それをメタファイルとしてPowerPoint?に取り込むとき:
1)クリップボード経由だと文字化けします。
2)ファイル経由で取り込むと一見表示できるように見えますが、メタファイルとして編集しようとすると文字化けしてしまいます。

おそらく、WMFに含まれていると思われるビットマップが表示される限りでは、日本語が正常に表示され、編集しようとすると図形の情報が使われて文字化けするのではないかと思います。
どのようにすれば日本語で編集可能なメタファイルが作成できるのでしょうか?

  • 受け取り側(PowerPoint?)にフォントが無いためだと思うので、受け取れるフォントで書き出す必要があると思います。日本語化掲示板の「図形出力デバイス pdf( ) の文字化け(Windows-XP)」 のおまじないファイル(Rdevga)を使うとうまくいくかも。 -- okinawa 2008-12-24 (水) 09:41:47
  • たぶん, 最後に一貫性が保たれてたのはR-2.6.2ぐらいです. ちょっとWindowsもOSXも手がまわっていません(現実). -- なかま 2008-12-24 (水) 14:55:15
  • 現実的な解として、dev.copy2eps()などでeps形式で保存したのちに、pstoedit
    $ pstoedit -f svm tmp.eps tmp.svm
    とsvm形式(OpenOffice?のメタファイル形式)に変換し、次に、OpenOffice? Drawでファイルを読み込んで、コンテキストメニューの「切り離し」を実行すれば、自由に編集できます。その後、PowerPoint?に持って行けばいかが?オブジェクトを切り離すのがコツです。 -- 谷村 2008-12-24 (水) 16:52:46
    oodraw01.png
  • 多くの方々からご返事いただきありがとうございます。これらを試してみて、結果をまとめて後でご報告します。 -- (く)? 2008-12-24 (水) 22:44:48
  • Rdevgaを修正する方法で、あっさりうまく行ってしまいました。
    私の場合は、\Program Files\R\R-2.8.0\R\etc\Rdevgaに含まれる記述のうち以下の4行を
    TT Arial : plain
    TT Arial : bold
    TT Arial : italic
    TT Arial : bold&italic
    次の4行に変更しました
    TT MS Gothic : plain
    TT MS Gothic : bold
    TT MS Gothic : italic
    TT MS Gothic : bold&italic
    すると、メタファイルが文字化けせず編集できるようになりました。
    ほとんど問題ないのですが、強いて言えば文字の表示場所が多少左により過ぎていることですね。
    一旦メタファイルを編集する際にフォントを大きくして、その次に文字を右寄せに設定し、最後にフォントを小さくするともっともらしい位置に動きます。多分文字幅の計算が大きく見すぎているのだと思います。
    pstoeditを使う方法は、gsのインストールで、現在躓いています-- (く)? 2008-12-28 (日) 08:34:54

因子分析:変数の数と因子の数について

flyer? (2008-12-20 (土) 15:21:53)

因子分析での因子数について

いつもお世話になります。
「すべてがわかるアンケートデータの分析」(菅民郎 現代数学社)で因子分析を勉強しています。
例題で10人の生徒の数学、国語、英語の試験データから文系能力、理系能力と2つの因子で分析
する問題が載っております。
Rにてこの問題を行おうとしたのですが、
"以下にエラーfactanal(seiseki, factors = 2) : 2 factors is too many for 3 variables"とエラーメッセージが表示されます。
factorsを"1"で指定すると、factanalを実行できますが、求めたい数字にはなりません。
3つの変数(ここでは3教科)では2つの因子を指定することは出来ないのでしょうか。
よろしくお願いします。

> seiseki <- matrix(c(2,3,3,1,4,5,2,2,3,3,2,1,5,4,5,4,4,4,8,5,4,6,3,4,7,6,7,4,5,6),10,3,byrow=TRUE)
> colnames(seiseki) <- c("数学","英語","国語")
> rownames(seiseki) <- c("001","002","003","004","005","006","007","008","009","010")
> seiseki
    数学 英語 国語
001    2    3    3
002    1    4    5
003    2    2    3
004    3    2    1
005    5    4    5
006    4    4    4
007    8    5    4
008    6    3    4
009    7    6    7
010    4    5    6
> (seiseki.fac <- factanal(seiseki, factors=2))
以下にエラーfactanal(seiseki, factors = 2) : 2 factors is too many for 3 variables

> (seiseki.fac <- factanal(seiseki, factors=1))

Call:
factanal(x = seiseki, factors = 1)

Uniquenesses:
 数学  英語  国語 
0.639 0.005 0.239 
 
 Loadings:
     Factor1
数学 0.601  
英語 0.998  
国語 0.872  

               Factor1
SS loadings      2.117
Proportion Var   0.706

The degrees of freedom for the model is 0 and the fit was 0.1292
  • 無理です。1因子のときの結果で、自由度が0とでていますね(最終行)。つまり、2因子では自由度が足りないということです。もう10年も前の書籍のようなので、主因子法前提なのかもしれません。Rでは最尤法という比較的新しい計算方法を採用しているのですが、主因子法に比べて、計算を走らせるための縛りがきびしいという特徴があります。 -- ? 2008-12-21 (日) 00:29:35
  • 林さん、どうもありがとうございます。最尤法を易しく説明している参考書などあるでしょうか。 -- flyer? 2008-12-21 (日) 17:33:14
  • 統計学を勉強したいのでなければ、分析手法として因子分析を解説しているものの方がよいと思います。次の書籍は文系向けに書かれていてわかりやすいと思います。http://www.amazon.co.jp/多変量データ解析法―心理・教育・社会系のための入門-足立-浩平/dp/4779500575/ref=sr_1_2?ie=UTF8&s=books&qid=1229856307&sr=8-2 -- ? 2008-12-21 (日) 19:50:49
  • 林さん、参考にさせていただきます。ありがとうございました。 -- flyer? 2008-12-23 (火) 00:24:19

txtファイルを区切る方法

tt? (2008-12-20 (土) 12:15:11)

00:18:37.25 13/08/2008 137.199799 35.094155 423.5 39.3 0.60 7.4
00:18:37.50 13/08/2008 137.199799 35.094154 423.5 39.3 0.52 12.0
00:18:37.75 13/08/2008 137.199800 35.094156 423.5 39.3 0.61 15.5
00:18:38.00 13/08/2008 137.199800 35.094156 423.5 39.3 0.30 15.0
00:18:38.25 13/08/2008 137.199799 35.094156 423.5 39.3 0.39 10.0
00:18:38.50 13/08/2008 137.199800 35.094157 423.5 39.3 0.55 5.0
00:18:38.75 13/08/2008 137.199800 35.094157 423.5 39.3 0.65 356.5
00:18:39.00 13/08/2008 137.199800 35.094157 423.5 39.3 0.68 348.0
00:18:39.25 13/08/2008 137.199800 35.094157 423.5 39.3 0.72 340.5
というようなtxtファイルがあった場合、:や/で数値を区切るにはどうしたらよいでしょうか?

  • 文字列処理関数を調べなさい。 -- 2008-12-20 (土) 21:04:40
  • GPSのデータに見えます。「:や/で数値を区切る」とは、:や/をセパレータとして文字列を分離するという意味でしょうか。Rの中で文字列処理関数を使うこともできますし、基本的なUNIXコマンドでも処理できます。MacOSXやLinuxユーザなら、積極的にテキスト処理コマンドを利用してはどうでしょうか。 -- 谷村 2008-12-24 (水) 13:01:10
    例えば、ファイル名がtmp.txtとしたら、
    $ sed -e 's/[:/]/ /g' tmp.txt
    00 18 37.25 13 08 2008 137.199799 35.094155 423.5 39.3 0.60 7.4
    00 18 37.50 13 08 2008 137.199799 35.094154 423.5 39.3 0.52 12.0
    00 18 37.75 13 08 2008 137.199800 35.094156 423.5 39.3 0.61 15.5
    00 18 38.00 13 08 2008 137.199800 35.094156 423.5 39.3 0.30 15.0
    00 18 38.25 13 08 2008 137.199799 35.094156 423.5 39.3 0.39 10.0
    00 18 38.50 13 08 2008 137.199800 35.094157 423.5 39.3 0.55 5.0
    00 18 38.75 13 08 2008 137.199800 35.094157 423.5 39.3 0.65 356.5
    00 18 39.00 13 08 2008 137.199800 35.094157 423.5 39.3 0.68 348.0
    00 18 39.25 13 08 2008 137.199800 35.094157 423.5 39.3 0.72 340.5
  • だいぶ前のですみません。質問どおりだとstrsplitですかね? それより日付時間処理関数をこちらを見て使ったほうがいいかも。 http://www.okada.jp.org/RWiki/?%C6%FC%C9%D5%A1%A2%BB%FE%B4%D6%B4%D8%BF%F4Tips%C2%E7%C1%B4 -- 2009-01-12 (月) 11:07:06

SASのLSMeans(調整済み平均値;Least-Square means)をRで

SASとRの両刀使い? (2008-12-19 (金) 15:36:28)

本質問をRjpWikiで質問するのは大変恐縮なのですが、
SASのLSMeans(調整済み平均値;Least-Square means)を
Rで計算する関数はあるのでしょうか?

> RSiteSearch("lsmeans")

で調べてみても、上手い関数が無さそうで、Google検索をしてみても
良さそうな記事がありません。「multcomp」パッケージで計算出来るかも
という記事があったのですが、「multcomp」パッケージの中の関数には、
それらしきものがありませんでした。
よろしければお教えください。

  • http://search.r-project.org/cgi-bin/namazu.cgi?query=lsmeans&max=100&result=normal&sort=score&idxname=functions&idxname=Rhelp02a -- 2008-12-19 (金) 16:05:43
  • 関数としてできているものがあるかどうか知りませんが,http://phi.med.gunma-u.ac.jp/grad/infop-text2008-2.pdfに計算方法は説明してあります。たぶんSASのLSMEANSと同じ計算方法だと思いますが…… -- 中澤? 2008-12-19 (金) 19:08:22
  • ありがとうございます!中澤先生のホームページの日記(【第932回】2007年11月21日付)で「multcomp」パッケージで計算出来るかも、という記事を拝見したのですが、上記PDFの説明のことだったのですね。 -- SASとRの両刀使い? 2008-12-20 (土) 08:56:20
  • SASと完全に一致したかどうか自信がないのですが、John Fox氏のeffectsパッケージでいけるはず -- ザブ? 2008-12-20 (土) 17:04:04
  • ご指導ありがとうございます!適当なデータ「DATA」を作って試してみました.
    • y:目的変数
    • GROUP:注目するカテゴリ
    • COV1:共変量(カテゴリ変数)
    • COV2:共変量(連続変数)
> set.seed(7777)
> y <- c(rnorm(10),1+rnorm(10))
> DATA=data.frame(Y    =y,
+                 GROUP=c(rep(1,10),rep(2,10)), 
+                 COV1 =rbinom(20,1,0.5),
+                 COV2 =jitter(y,amo=3))
> DATA$GROUP <- as.factor(DATA$GROUP)
> DATA$COV1  <- as.factor(DATA$COV1)
> head(DATA)
           Y GROUP COV1       COV2
1 -1.8779550     1    1 -2.6682028
2  0.3264572     1    0  1.0997025
3 -0.3018570     1    1 -1.7436962
4  1.1816399     1    0  0.3136283
5 -0.1637332     1    1 -0.7099280
6  1.2964903     1    1  3.1079893

データ「DATA」に対して,とりあえず関数 lm() で回帰分析(SASではGLMプロシジャまたはmixedプロシジャ)を行います.

> options(contrasts = c("contr.treatment","contr.treatment"))
> result       <- lm(Y ~ GROUP + COV1 + COV2, data=DATA)
> summary(result)

Call:
lm(formula = Y ~ GROUP + COV1 + COV2, data = DATA)
Residuals:
      Min        1Q    Median        3Q       Max 
-1.694067 -0.494184  0.002832  0.253098  2.225632 
Coefficients:
            Estimate Std. Error t value Pr(>|t|)   
(Intercept)   0.4867     0.3604   1.351  0.19562   
GROUP2        0.5943     0.5444   1.092  0.29110   
COV11        -0.3924     0.4754  -0.825  0.42131   
COV2          0.3774     0.1147   3.290  0.00461 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

この結果より,回帰直線の推定式は(GROUP(2):GROUP==2のときに1でそれ以外は0,COV1(1):COV1==1のときに1でそれ以外は0)

y=Intercept+GROUP(2)*0.5943+COV1(1)*(-0.3924)+0.3774*COV2

と推定されます.SASでは,この回帰直線の推定式からLSMeans(調整済み平均値;Least-Square means)を計算しています.

  • COV1などのカテゴリ変数には,各カテゴリの効果の重みなし平均値を代入
  • COV2などの連続変数には,(GROUPを無視した)COV1の平均値を代入
> mean(DATA$COV2)   # COV2の平均(GROUPを無視して全ての平均)
[1] 0.8944106
> 0.4867+0.0000-0.3924/2+0.3774*0.8944106   # GROUP==1 の y の LSMeans
[1] 0.6280506
> 0.4867+0.5943-0.3924/2+0.3774*0.8944106   # GROUP==2 の y の LSMeans
[1] 1.222351

上記の結果はSASの値と一致しています.中澤先生の方法で,正にSASと同じ方法が得られます!

> result2 <- dummy.coef(result)
> result2$GROUP + result2$"(Intercept)" + mean(result2$COV1) + result2$COV2*mean(DATA$COV2)
        1         2 
0.6280501 1.2223804 

ちなみに,ザブさんから教わったJohn Fox氏のeffectsパッケージですと,SASと若干結果が異なるようです.

> library(effects) 
> effect("GROUP", result) 

 GROUP effect
GROUP
        1         2 
0.6084311 1.2027614 

ただ,交互作用モデルになると,ちょっと計算が手間になるので,適当なパッケージがあればなぁと思った次第です.

> options(contrasts = c("contr.treatment","contr.treatment"))
> result       <- lm(Y ~ GROUP + COV1 + COV2 + GROUP*COV1 + GROUP*COV2 ,  data=DATA)
> summary(result)
Call:
lm(formula = Y ~ GROUP + COV1 + COV2 + GROUP * COV1 + GROUP * 
    COV2, data = DATA)
Residuals:
     Min       1Q   Median       3Q      Max 
-1.47336 -0.59849 -0.04832  0.24913  2.44732 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)  
(Intercept)   0.59860    0.42080   1.423   0.1768  
GROUP2        0.26255    0.92717   0.283   0.7812  
COV11        -0.65934    0.66949  -0.985   0.3414  
COV2          0.39928    0.16734   2.386   0.0317 *
GROUP2:COV11  0.58255    1.02201   0.570   0.5777  
GROUP2:COV2  -0.02241    0.24532  -0.091   0.9285  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 
> mean(DATA$COV2)
[1] 0.8944106
> 0.5986006+0.000000-0.6593449/2+0.3992763*0.8944106+0.0000000/2+0.00000000
[1] 0.6260451
> 0.5986006+0.262553-0.6593449/2+0.3992763*0.8944106+0.5825505/2- 0.02241451*0.8944106
[1] 1.159826
> 
> result2 <- dummy.coef(result)
> result2$ GROUP + result2$"(Intercept)" + mean(result2$COV1) + result2$COV2*mean (DATA$COV2)+
+ c(mean(result2$"GROUP:COV1"[c(1,3)]), mean(result2$"GROUP:COV1"[c(2,4)])) + 
+ result2$"GROUP:COV2"*mean(DATA$COV2)
       1        2 
0.626045 1.159826 

う〜ん,何時間も調べてみたのですが,適当なパッケージは無さそうですねぇ・・・.どうもありがとうございました!-- SASとRの両刀使い? 2008-12-21 (日) 10:00:25

複数のベクトルで同じ値のものを順に削除する方法

カホ? (2008-12-18 (木) 21:09:27)

いつも参考にさせていただいております。
さっそくですが、質問させていただきます。

今、ベクトルが3つあり、それぞれ

S1?=

    [,1][,2][,3]

[1,] 5 20 3

S2?=

    [,1][,2][,3]

[1,] 4 20 8

S3?=

    [,1][,2][,3]

[1,] 5 20 16

であるとき、

S1?=

    [,1][,2][,3]

[1,] 5 20 3

S2?=

    [,1][,2]

[1,] 4 8

S3?=

    [,1]

[1,] 16

というものに変更したいとき、どのようにすればよいでしょうか?
よろしくお願いいたします。

  • ヒント:apply()、s2[-which(s2==20)] -- 2008-12-19 (金) 09:46:13

plmにおけるNAの処理の仕方

take69? (2008-12-18 (木) 02:43:16)

Rの初心者です。

現在パネルデータを用いて、分析をしているんですが、パッケージ『plm』において、パネルデータに含まれる「NA」と表記されるデータがない場合の数値はどのようにパッケージ『plm』の中で処理されているんでしょうか?

パッケージの中身の内容なので、ご存知の方がいないかもしれませんが、よろしくお願いします。

  • ヘルプを見ればわかりますが、na.actionというargumentがあります。普通はリストワイズしていると思います。自由度を見て確認してみてください。 -- ? 2008-12-21 (日) 00:59:00

BRugsでのAIC,DICの計算について

yuki? (2008-12-17 (水) 11:57:15)

WinBUGSではDICの計算を行うコマンドがあるようですが,BRugsでもそのようなコマンドはあるのでしょうか?
できればAICとDICを計算したいのですが・・・

Rをサーバープログラムとして動かす事は可能でしょうか?

Rを使い始めた者? (2008-12-16 (火) 16:55:57)

<質問1>
クライアント・サーバー方式ですが、Rをサーバープログラムとして、動かす事は可能でしょうか?
<質問2>
C++からRを呼び出す事は可能でしょうか?
<質問3>
Rの連続したコマンド命令をスクリプトとして作成、スクリプトを自動実行する事は可能でしょうか?

  • Rserveを見よ。http://www.rforge.net/Rserve/ 基本的にソケット通信。-- 2008-12-16 (火) 17:03:30
  • みゅさんとことか -- 2008-12-16 (火) 18:38:07
  • <質問1>Rserveは、Linuxでデーモンとして動きます.psは下のような感じです -- ななし? 2008-12-16 (火) 18:39:43
    [name@zzzz ~]$ ps aux | grep Rserve
    name      5002  0.0  0.0 29132 3332 ?        Ss   May07  20:00 /usr/local/lib/R/bin/Rserve
    name     15142  0.0  0.0  4740  752 pts/31   S+   18:34   0:00 grep Rserve
  • <質問2>はC++からそのRのサーバーを呼ぶことが出来るかどうかということなら、Rserveのソースの中にclientというフォルダがあるので、その中にC++のクライアントサンプルプログラムがあります. -- ななし? 2008-12-16 (火) 18:44:37
  • <質問3>バッチならR cmd batch かな?それをwinならタスクスケジューラか何かで起動させるとか・・・。Rserveなら、それこそCやJavaでタイマーか何か作ってRserve側になげればいい。 -- 2008-12-17 (水) 08:16:19
  • 結論:<質問1>可能である<質問2>可能である<質問3>可能である -- 2008-12-17 (水) 08:26:55
  • あぁ、ただし、Rserveは接続が確立されるたびに、自分自身のクローン?をつくるので、別セッションのRserveの変数なんかは、参照できません・・・.別セッションで変数を共有したい場合は、R同士(Rserve同士)で通信するか、ファイルに保存して・・・.R(D)COMはどうなんだろ・・・ -- ななし? 2008-12-17 (水) 09:08:39
  • それにしてもRを使い始めたばかりの人がサーバーとして使いたいって^^; -- 2008-12-17 (水) 12:39:33

パッケージのインストールが出来ません。

初めの一歩? (2008-12-16 (火) 03:37:25)

Rを使い始めたばかりの初心者です。
Rversion 2.8.0をインストールし、さらに必要なパッケージ複数をインストールしたいのですが、

le.create(f.tg) :

  fife 'C:\PROGRA~1\R\R-28~1.0/doc/html/packages.html' を作れません, 理由は'Permission denied'です。


と表示されます。
何がいけないのでしょうか。
ネットや本で検索をするのですが、解決策が見出されません。

使用PCはパナソニック Let'note CF-Y7で、OSはWindows Vista Businessです。

sessionInfo()
R version 2.8.0 (2008-10-20)
i386-pc-mingw32

locale:
LC_COLLATE=Japanese_Japan.932;LC_CTYPE=Japanese_Japan.932;LC_MONETARY=Japanese_Japan.932;LC_NUMERIC=C;LC_TIME=Japanese_Japan.932

attached base packages:
[1] stats graphics grDevices utils datasets methods base

どなたか、解決方法をご教示頂ければ幸いです。
必要な情報を失念している場合もあるかと思いますので、その場合はご指摘頂ければ幸いです。

よろしくお願いします。

  • Vistaのユーザー・アカウント制御(UAC)の問題でしょう。htmlヘルプのパッケージ一覧の更新に失敗しているだけなので、パッケージのインストール自体は成功してませんか?libraryで読み込んでみてください。また、UACを切るか、パッケージをインストールするときだけ右クリックから「管理者として実行」で起動することで、解決できます。 -- ? 2008-12-16 (火) 06:06:45
  • 表の「Rのインストール」や↓の「RODBCのインストールのやり方」にも同じことが書いてありますよ。ちゃんと探してますか? -- 2008-12-16 (火) 08:48:46
  • 初心者のVistaネタは定期的にありますね。問題は学ぶ側なのか、教える側なのか。 -- 2008-12-16 (火) 14:58:12
  • たぶん・・・Vistaそのものです。 -- 2008-12-16 (火) 15:06:40

コサイナー法

学生? (2008-12-15 (月) 17:12:16)

Rでコサイナー法を行うためのパッケージや関数をご存知ないでしょうか.
インターネットで検索しても,ヒットしなくて困っています.
目的としては,血圧の日周変動の位相や振幅を求められるような解析をしたいと思っています.
よろしくお願いいたします.

  • RSiteSerch?()やGoogleでもHitしませんね。自作するしかないのでは?数式があれば可能かと・・・
    https://stat.ethz.ch/pipermail/bioconductor/2007-August/018853.html
    http://itoshi.tv/d/?date=20081106#p01
    こんなもんか? -- 2008-12-15 (月) 17:46:39
  • お返事ありがとうございます.特定の関数はないのですね.数式はのっていた本が確かあったと思うので,もう少し調べて実行可能かどうかを考えたいと思います.ありがとうございました. -- 学生? 2008-12-16 (火) 15:41:24
  • お返事ありがとうございます.特定の関数はないのですね.数式はのっていた本が確かあったと思うので,もう少し調べて実行可能かどうかを考えたいと思います.ありがとうございました. -- 学生? 2008-12-16 (火) 16:33:17
  • 上手くいったら、upしてください. -- 2008-12-16 (火) 22:05:49

RでX-12ARIMAを実行するには

初心者? (2008-12-15 (月) 15:53:02)

初心者で勉強不足で恐縮ですが、Rを使ってX-12ARIMAの季節調整を行う方法を、御存じの方がおられましたら、お教え下さりますようお願いいたします。

多変量自己回帰モデルの寄与率

R初心者? (2008-12-13 (土) 15:57:49)

mulnos()関数によりノイズ寄与率を求めるのは、多変量自己回帰モデルからノイズ寄与率(パワー寄与率)を求めていると考えて良いのでしょうか?
mulnos()関数で求めた寄与率を横軸に周波数、縦軸に寄与率(%)のグラフで表すにはどのようにすれば良いのでしょうか?
初心者なので出来るだけ具体的に教えていただけたら幸いです。

Random Forest

SE? (2008-12-13 (土) 03:39:22)

R を使って、集団学習のひとつである Random Forest 法に挑戦しました。
データはCSVファイル(cd_rf.csv)で以下のように1行目がヘッダで第1〜6列がデータ、第7列(status)が教師シグナル(-1 OR 1)になっています。

MAP Linda,S23 IgG,Red Star IgG,Bakers IgA,Red Star IgA,CA IgA,E faecalis,status
0.255048271,0.061732594,0.025085013,0.103566194,0.012575701,0.051569017,0.449583816,-1
0.269702681,0.100519062,0.106106155,0.332437714,0.022432332,0.078892899,0.528922137,-1
0.363834506,0.106774655,0.177443201,0.074255007,0.010397355,0.069219808,0.245495733,-1


このデータを使って以下のように解析を始めたのですが、classification でなく regression のモードになってしまいます。もし解決法(classification モードにする方法)をご存知でしたらご教示ください。

library(randomForest)
randomForest 4.5-25
Type rfNews() to see new features/changes/bug fixes.
Warning message:
package 'randomForest' was built under R version 2.6.2

cdtrain<-as.matrix(read.csv("myData/cd_rf.csv",header=T))

is.matrix(cdtrain)
[1] TRUE

cd.rf<-randomForest(status~., data=cdtrain,na.action="na.omit")
Warning message:
In randomForest.default(m, y, ...) :
The response has five or fewer unique values. Are you sure you want to do regression?

cd.rf$type
[1] "regression"

サイト1に紹介されている例(Rに組み込まれているspamデータを解析)は問題なく実行できましたので、どうもデータ読み込みなど基本的な部分で失敗している気がします・・・。

参考にしたサイト>
1)http://www1.doshisha.ac.jp/~mjin/R/0603_32.pdf
2)http://cran.r-project.org/web/packages/randomForest/randomForest.pdf


OS: Windows XP version 5.1 (Build 2600.xpsp_sp2_gdr.080814-1233, Service pack 2)

R version 2.6.1 (2007-11-26)
i386-pc-mingw32

locale:
LC_COLLATE=English_United States.1252;LC_CTYPE=English_United States.1252;LC_MONETARY=English_United States.1252;LC_NUMERIC=C;LC_TIME=English_United States.1252

attached base packages:
[1] stats graphics grDevices utils datasets methods base

  • あまり言いたくないのですが、http://cran.r-project.org/web/packages/randomForest/randomForest.pdfを本当に読んでいますか?引数「y」の定義に「A response vector. If a factor, classification is assumed, otherwise regression is assumed. If omitted, randomForest will run in unsupervised mode. 」と書いていますよね。as.factor(y)で吉。 -- akira? 2008-12-14 (日) 21:22:23
  • 時間ができたので、ちょっと書きます。
    cdtrain <- read.csv("myData/cd_rf.csv",header=T)
    cdtrain$"status" <- as.factor(cdtrain$"status")
    cd.rf <- randomForest(status~., data=cdtrain,na.action="na.omit")
    でどうかと。 -- akira? 2008-12-15 (月) 13:04:28
  • akira様、回答有難うございました。ご教示いただいたコマンドで Classification 解析が出来ました。R も RandomForest? も初心者でマニュアルを読んでも理解できずにいました。 -- SE? 2008-12-16 (火) 08:07:00
  • うまくいってよかったです。ただ、私はRandomForest?すら知りませんよ。問題はRやRandomForest?じゃなく、英語を読むか、読まないかじゃないかな。 -- akira? 2008-12-16 (火) 15:27:38

書籍の通りに進めてもエラーメッセージ

初心者? (2008-12-12 (金) 13:39:12)

最近Rを使い始めたばかりで初歩的な質問で申し訳ありません.
まずマニュアル本を使って,Rを触ってみているのですが,本の通りにデータを入力し,全く同じ方法で進めているはずなのに,エラーが出てしまいその理由がわかりません.
「Rによるやさしい統計学」のp.291からの重回帰分析でエラーが出るのですが,それ以前のT検定や分散分析,多重比較などは,本の通りに進めたらうまくいきましたので,この解析でいきなりなのです.
本の通りに進めると,

重回帰データ

   娘  父  母

1 155 159 167
2 158 168 156
3 163 173 153
4 151 153 153
5 157 169 158
6 158 169 152
7 155 163 149
8 155 163 158
9 155 163 151
10 154 161 155
11 156 164 151
12 155 160 161
13 153 162 153
14 157 167 152
15 157 172 153
16 156 166 148
17 157 163 150
18 157 161 145
19 160 161 149

lm(娘~父+母)

以下にエラー eval(expr, envir, enclos) :  オブジェクト "娘" は存在しません 


ということになります.
Rの使用環境は以下の通りです.
何かおかしいところがあれば,教えていただけましたら幸いです.

sessionInfo()
R version 2.8.0 Patched (2008-12-07 r47101)
i386-pc-mingw32

locale:
LC_COLLATE=Japanese_Japan.932;LC_CTYPE=Japanese_Japan.932;LC_MONETARY=Japanese_Japan.932;LC_NUMERIC=C;LC_TIME=Japanese_Japan.932

attached base packages:
[1] stats4 stats graphics grDevices utils datasets methods
[8] base

other attached packages:
[1] sem_0.9-14

loaded via a namespace (and not attached):
[1] tools_2.8.0

  • "娘" というデータはない、と言っています(試しに、コマンドに「娘」とだけ入れてみてください、エラーが帰ってくるはずです)。
    データフレームがなんらかの名前を付けて付置されていたとしても、その中の列名はそのままでは参照できません。
    たとえば、提示されたデータがxという名のデータフレームだとして、
lm(娘 ~ 父 + 母,data = x)

なり、

lm(娘$x ~ 父$x + 母$x)

とする必要があります。 -- 2008-12-12 (金) 14:21:54

  • 早速のコメントありがとうございます. -- 初心者? 2008-12-12 (金) 15:52:54
  • 教えていただいたとおり,lm(娘 ~ 父 + 母,data = x)としてやってみたら,ちゃんと先に進むことができました.本ではそのようには書いていなかったのですが,ちゃんとデータフレームを指定する必要があるのですね.勉強になりました.有難うございました. -- 初心者? 2008-12-12 (金) 15:54:51
  • attach(x)とかしてない? -- akira? 2008-12-12 (金) 22:27:53

4半期ごとに罫線を引きたいのですが

子羊? (2008-12-12 (金) 11:06:37)

時系列データのプロットで、見やすくするために4半期ごとに縦の罫線を引こうと思って、


quarterly.lines <- function(x){
x.ts<- as.ts(x,start=c(1900,1),frequency=4)
plot(x.ts,ylab=" ",type="l")
par(new=T)
abline(v=1:23*4,lty=3)
}

という関数を書いてみたのですが、罫線が出力されません。

どこが間違っているのでしょうか。どなたか御存じの方が
いらっしゃいましたら、お教え頂ければ幸いです。

  • 度々申し訳ございません。上記関数に対してquarterly.lines(ts(c(rep(1,92)),start=c(1990,1),frequency=4))という形で実行しましたが、罫線だけが表示されません。 -- 子羊? 2008-12-12 (金) 16:17:27
  • xlimの指定が違います。1990から2012までならseq(1990,2012,by=0.25)では? -- akira? 2008-12-12 (金) 17:00:19
  • akira様、本当にありがとうございます。無事に動かせることが出来ました。 -- 子羊? 2008-12-14 (日) 17:49:26

VineLinuxにR

当方? (2008-12-09 (火) 01:23:21)

VineLinux4.2を使っています.VineにRを入れようとしているのですが,apt-getでインストールできません.
etc/apt/source.listの中身を見ても「VinePlus? extra *1」に関するコメントがなく,どう編集していいか分かりません.どうか御教授いただければとおもいます.

  • Vineはrpm系ではないですか? -- 2008-12-09 (火) 17:34:41
  • それがCRANに行ってもVine用のrpmがなくて,,,Vineにインストールする場合はソースからのビルドになりそうですね. -- 当方? 2008-12-09 (火) 23:31:37
  • Vineはメンテナーが居ない状態なので, できれば貴方がなって下さい. source.listの編集は, main plus updates のお尻に nonfree extras を追加します. VineのextrasはR-2.5.1以降更新されていません. -- なかま 2008-12-10 (水) 09:50:21

多重比較の結果の読み方

peko? (2008-12-07 (日) 11:00:23)

Steel-Dwass法の結果の読み方を教えてください。

           t             p
1:2 3.866170 0.00006392122

のような表記の場合と、

           t             p
1:2 4.3593873 7.692932e-05

のように表記されるものがあります。
これらの結果の読み方を教えてください。

  • 7.692932e-05 という表記の読み方が分からないと言うことですか?e-05 は,×10の-5乗ということですよ。つまり,0.00007692932 ということ -- 2008-12-07 (日) 12:08:27
  • 上の方のおっしゃる通りですが浮動小数点表記のことでしたら以下を参照するとよいでしょう→http://aoki2.si.gunma-u.ac.jp/Yogoshu/128.html -- 2008-12-07 (日) 19:48:46
  • こういう基本的な(?)ことを知らない人が多いのですけど,いつ,どこでそのような知識を与えられるべきなんでしょうか。昔は,なにか分析をするプログラムをBASICで書いていれば,このような表記法があるんだということをいつの間にか学んでいたのですけど,全てが受け身で,あるソフトウェア(Excelだってそうなんですけど)が1.23e+04なんて言ったとたんに訳が分からなくなるんですよねぇ。ユーザの側だけの問題じゃないですよね。 -- 2008-12-07 (日) 22:20:05
  • ご回答ありがとうございます。ほんとうに基本的なことなんだと思います。だからテキストなどにも書いていないんですよね。お恥ずかしい限りです。恥のかきついでといっては何ですが、1と2のどちらがどちらに対してどの程度有意なのか有意でないのか、という意味も教えていただけるとありがたいです。 -- peko? 2008-12-09 (火) 13:16:39
  • これはもう、統計の質問ですね。Rの前に勉強することがあるでしょう。この時期、学校の宿題めいた質問が多すぎ。 -- 2008-12-09 (火) 17:36:29
  • 大変申し訳ありませんでした。勉強します。ありがとうございました。 -- peko? 2008-12-10 (水) 13:13:39
  • 浮動小数点表記のサイトを教えていただき、ありがとうございました。順序が逆になってしまいましたが、とても参考になり、助かりました。 -- peko? 2008-12-10 (水) 13:15:46

RODBCのインストールのやり方

文系で初心者です? (2008-12-06 (土) 11:15:20)

ビスタを使っています。
> install.packages(choose.files("", filters = Filters[c("zip", 中で>警告がありました:
> 'lib = "C:/PROGRA~1/R/R-28~1.0/library"' は書き込み可能ではありませ>ん
> 以下にエラー install.packages(choose.files("", filters = Filters[c>("zip", :
> パッケージをインストール出来ませんでした
というのが出てきて使えません。
パソコンのセキュリティの問題かもと言われたのですが、よくわかりません。どうすればいいでしょうか?

  • 解決のアプローチは2種類。install.packages("パッケージ名",lib="どこか")というようにlibオプションで自分に書き込みの権限があるディレクトリを指定するか、またはC:/PROGRA~1/R/R-28~1.0/libraryに書き込む権限があるユーザでインストールをする。好きな方をどうぞ。 -- 2008-12-06 (土) 11:28:28
  • ありがとうございます。なんで自分のパソコンなのに書き込む権限がないのかわからないのです、書き込む権限のユーザとかディレクトリがわかりません。 -- 文系で初心者です? 2008-12-07 (日) 14:56:40
  • vistaは基本的にC:\Program Files、C:\直下には書き込み権限はありません。C:\Users\アカウント名\Documentsは(たぶん)書き込み権限があるとおもいます。「なんで自分のパソコンなのに書き込む権限がないのかわからないのです」はごもっとも。世界中のビスタユーザーがそう思っているでしょう。 -- 2008-12-07 (日) 15:33:25
  • 解決しました。どこのどなたかは存じ上げませんが、助かりました。いろいろパソコンのことも勉強になりました。本当ありがとうございました。 -- 文系で初心者です? 2008-12-07 (日) 16:23:53

エラーメッセージの意味が分かりません

初心者です。? (2008-12-04 (木) 12:04:11)

最近、初めてRを使い始めた初心者です。
Rを立ち上げた時に必ず出てくるエラーメッセージの意味が分からないで困っています。
メッセージは『関数 "etHook" を見つけることができませんでした』です。
現在、使用しているPCはMacPro?(IntelMac?)でOSはleopardを使用しています。
非常に簡単な質問かもしれませんが、ご回答いただければ助かります。

  • .Rprofile を作りましたね?そのとき,コピーペーストか何かで内容をコピーしたのだと思いますが,本来 setHook と書くべきところが s が抜けて,etHook となっているのでしょう。vi などで編集するか,もう一度作り直すと良いでしょう。 -- 2008-12-04 (木) 12:19:27
  • ご回答ありがとうございます。しかし、.Rprofileは作成していません。関係ないのかもしれませんが、バイオインフォマティクスのRのパッケージを追加しようとして、失敗しました。何か関係があるかもしれません。ちなみに使用したパッケージというのはhttp://compbio.med.harvard.edu/Supplements/ChIP-seqにあるものです。 -- 初心者です。? 2008-12-04 (木) 15:41:55
  • ターミナルで cat .Rprofile と入力してみて下さい。そこに etHook という単語が入っていませんか? -- 2008-12-04 (木) 15:44:10
  • 早速のご回答、本当にありがとうございます。ご指摘のようにcat .Rprofileと入力しましたら、etHook(packageEvent("grDevices", "onLoad"),function(...) grDevices::ps.options(family="Japan1")) というメッセージが得られました。 -- 初心者です。? 2008-12-04 (木) 16:08:17
  • もしよろしければ,その後、どのような手順で解決していけば良いか、教えていただければ幸いです。何から何までお世話になり、申し訳ありません。 -- 初心者です。? 2008-12-04 (木) 16:11:02
  • vi なりなんなりのエディタで開いて s を加えればよいだけ。なお,直すならついでに,ps.options を pdf.options にしておくと吉。
    よくわからないなら,.Rprofile を作った覚えが無く,何かのインストールに失敗したためのようなら,rm .Rprofile で消去してしまえばよいかも。 -- 2008-12-04 (木) 16:12:22
  • ご回答ありがとうございました。早速やってみます。お手数をおかけして、申し訳ありませんでした。失礼します。 -- 初心者です。? 2008-12-04 (木) 16:15:54

n相主成分分析について

大学生? (2008-12-01 (月) 22:23:21)

R cranにてPTAkパッケージをダウンロードして,その中のPCAn(Principal component analysis on n modes)を利用しようと思ったのですが,

 以下にエラー if (length(X$met[[d]]) == dim(X$data)[d]^2) { : 
   引数の長さが0です 

とエラーが出てしまいます.
関数の引数(データ形式)はlist型で行うようだったので,

ex <- list(
	met = list(
		met1 = matrix(c(sample(1:25)),5,5),
		met2 = matrix(c(sample(1:25)),5,5)
	),
	data = list(
		data1 = matrix(c(sample(1:25)),5,5),
 		data2 = matrix(c(sample(1:25)),5,5)
	)
)

としてみました.どのような形式ならうまくいくのか,できるだけ具体的に教えてください.よろしくお願いします.

  • どのようなプログラムでエラーがでたのか,できるだけ具体的に教えてください。sessionInfo()の結果も提示してください。最近、投稿のルールを守らない人が多くなっています。 -- 2008-12-02 (火) 08:22:40
  • エラーの内容は書かれていますよ。 -- 2008-12-02 (火) 10:03:51
  • なぜだかわからないけど,PCAnプログラムの中で,一箇所変数名のおかしいところがある(定義されていないのに使っている)
    line 167
                PCnam <- outer(PCnam, 1:dim[q], FUN = "paste", sep = "")
    たぶんこれの間違い
                PCnam <- outer(PCnam, 1:dim[t], FUN = "paste", sep = "")
    そこを直してみて,第1引数を以下のように定義して,PCAn を実行するととにかく何か結果らしきものは出る。正しいかどうかわからないけど。
    ex <- array(matrix(24), dim=c(2,2,2,3))
    PCAn(ex, dim=c(2,2,2,3))
    どうなんでしょうね?
    質問者さんの形でデータを与えたときには,相変わらず質問者さんが見たのと同じエラーが出ますけど,それは,データの様式が違っているからかもしれない。 -- 2008-12-02 (火) 16:16:01
  • 上記のようにプログラムを修正したところ,うまく実行することができました.データはarrayで行ったらうまくいきそうです.ありがとうございました. -- 大学生? 2008-12-03 (水) 17:27:46

hist( )関数について

tt? (2008-12-01 (月) 03:34:05)

hist()関数で、y軸のfrequencyを%にするにはどうしたらよいのでしょうか?

  • %にするすべはなさそうです。自分で axis 関数を使って軸を描くしかないのかな? -- 2008-12-01 (月) 10:17:24
  • latticeパッケージの histogram() を使ってみたら? -- 2008-12-01 (月) 12:58:58
  • 以下のようにでも。 -- 2008-12-01 (月) 14:22:57
    a <- hist(x, ylab="%", yaxt="n")
    scale <- sum(a$counts)/100
    labels <- pretty(0:max(a$counts)/scale)
    axis(2, at=labels*scale, labels=round(labels, 1))
  • ありがとうございました。解決しました。 -- tt? 2008-12-01 (月) 14:32:42
  • どういう風に解決したか教えていただければ,後でこのスレッドを読む人に役に立つことでしょうね。 -- 2008-12-01 (月) 21:16:54
  • 指摘ありがとうございます。histgram( )を使ってみたら%で表示されました。 -- tt? 2008-12-21 (日) 20:14:26

ksvmの出力について

なお? (2008-12-01 (月) 01:27:36)

kernlabパッケージの中のksvmについて教えてください。
結果を別のシステムに実装するために、結果のパラメータなどを書き出すことは可能でしょうか?
predict()で指定する引数の部分を別のプログラム言語で使える形で出力したいのです。
勉強不足で申し訳ありませんが、よろしくお願いします。

  • もうすこし具体的に説明しないと答えようがないです。>結果を別のシステムに実装>結果のパラメータなどを書き出す>引数の部分を別のプログラム言語で使える形で出力 -- 2008-12-01 (月) 10:33:43
  • 説明不足で申し訳ありません。ksvmで学習した結果を使って、Rの外で、新しいデータの予測を、SQLやC言語などで行いたいと考えています。Rの外でというのは、予測するデータの量が100万件以上と多くなるためです。よろしくお願いします。 -- なお? 2008-12-01 (月) 13:02:42
  • ? ksvm で,Value という項にどのようなものが返されるか書いてある。また,str(ksvmが返すオブジェクト)で,実際にどのような名前で,どのような形式で返されるかが示されている。必要なものを選んでファイルに書き出せば良いだけではないでしょうか? -- 2008-12-01 (月) 14:29:23
  • ファイルへの書き出しはsink()とかwrite()とかでしょうか。ksvmクラスはS4クラスなので、変数@スロット名で取り出せます。どんなスロットがあるのかは、前の方が説明されています。 -- 2008-12-01 (月) 15:01:23
  • できました!str(ksvmが返すオブジェクト)で選んで、変数@スロット名で取り出せました。ありがとうございました! -- なお? 2008-12-01 (月) 23:51:14

c関数について

ふじたま? (2008-11-30 (日) 06:55:34)

本当に初歩的な質問で申し訳ないのですが、

x<-c(1.1,1)

x
[1] 1.1 1.0

is.double(x)
[1] TRUE

is.integer(x)
[1] FALSE
のように、引数を整数、小数を混在させた時は
最初の引数が優先されるのでしょうか?

  • 科学的には,仮説検証法というのがあります。もしかしたらこういうことなのかなという仮説が生まれたら,それを実例をもって検証すると言うことです。最初の要素の型になるのかな?という仮説が生まれたら,それを検証するために,最初の要素が実数の場合と整数の場合でどう違いが出るかやってみればよいのですね。
    > x <- c(1.1, 1)
    > x
    [1] 1.1 1.0
    > is.double(x)
    [1] TRUE
    > is.integer(x)
    [1] FALSE
    最初の要素を整数,二番目の要素を実数にして,同じことをやってみる。
    > y <- c(1, 1.1)
    > y
    [1] 1.0 1.1
    > is.double(y)
    [1] TRUE
    > is.integer(y)
    [1] FALSE
    どっちも同じ結果だ。
    これにより,最初の要素に影響されるのではないという結論が得られるでしょう。では,どういう規則に従っているのか。。。調べるのはちょっと面倒でしょうね。
    Rでは,あるオブジェクトに複数のデータ型が代入されたとき,それら全てを表現できるデータタイプがそのオブジェクトの型になります。実数と整数が含まれたら,実数は整数で表せないので全体としては実数で表現するしか方法がなくなってしまうわけです。 -- 2008-11-30 (日) 18:51:15
    > x <- c("1.2", 1.1, 1)
    > class(x)
    [1] "character"
    > x
    [1] "1.2" "1.1" "1"
  • help("NumericConstants?") と help("c") を御覧下さい -- なかま 2008-11-30 (日) 19:00:26
    > typeof(1.1)
    [1] "double"
    > typeof(1)
    [1] "double"
    > typeof(1L)
    [1] "integer"
    そもそも, 最初に整数として扱ってないので.
  • ご丁寧なご回答ありがとうございます。 -- ふじたま? 2008-11-30 (日) 19:45:36

Rの画像の画質について

さと? (2008-11-29 (土) 10:33:52)

表題の件について、質問いたします。
先日Rで作成したグラフを付けた論文を投稿し、アクセプトされたのですが、編集から画質が悪いので作り直すように指示がありました。(メッセージは以下の通りです)

Attached figures are not usable due to pixilated text and lines.

とりあえず Cairo packageをつかって、dpi=400で作り直しましたが、まだ画質が悪いといわれました。

作り直さねばいけませんが、何かよい方法をご存知の方がいらっしゃいましたら、ご教授いただければ助かります。

なにとぞよろしくお願いいたします。

  • OSはなんですか?OSによって対応が違うと思いますが。 -- 2008-11-29 (土) 12:07:13
  • コメントをいただきありがとうございます。OSはWindows XPとVistaの両方が利用可能です。図はscatter plotにlegendを加えたものです。なにとぞご助言をお願いいたします。 -- さと? 2008-11-29 (土) 12:29:48
  • 「図はscatter plotにlegendを加えたものです」なにを描いたかは無関係です。pdf でだしたのですか png ですか eps ですか,そのほかの何なんですか -- 2008-11-29 (土) 13:22:46
  • 続けてコメントをいただき、本当にありがとうございます。画像はjpegで出力したいのですが、私の環境では "Sorry, this Cairo was compiled without jpeg support." というメッセージが出てしまい、pngで出力したあとR以外のソフトでjpegにコンバートしております。 -- さと? 2008-11-29 (土) 14:47:45
  • 案の定。。。グラフをJpegなんかにしてはだめです。Jpegは画像圧縮するので,絶対に,だめ。Jpegは写真なんかのためのファイルフォーマットです。eps にするか pdf にするか,せめて png そのままにしておく。 -- 2008-11-29 (土) 14:52:39
  • windowsならwmf(win.metafile())でもだせると思います。論文の受付フォーマットが何なのかにもよりますね. -- okinawa 2008-11-29 (土) 15:16:36
  • 論文投稿用の画像の件ですが、雑誌の編集部と相談してpdfでの入稿を受け付けてもらいました。皆様のご助言に感謝いたします。ありがとうございました。 -- さと? 2008-12-01 (月) 05:36:31
  • ベクタ画像(eps/pdf)を受け取ってもらえず、ラスタ画像(TIFF,PNG)で投稿しなければならない場合(何度か経験有り)、少なくともdpi=1200はないと出版できるような品質にはなりません。dpi=400は少なすぎますよ。ファイルサイズが大きくなりすぎるときは、非可逆圧縮ではなく可逆圧縮をかけます。 -- 2008-12-01 (月) 10:56:19

軽くしました

R掲示板へ移動しました)

2つのデータを結合する方法は?

まいくろ? (2008-11-23 (日) 00:10:23)

マイクロアレイのデータ解析をしようとしているのですが、アレイのデータに別のファイルからの数値を結合したいと思っています。
この際、まず最初に2つのファイルに存在する「遺伝子名」が同じものを探し、その上でrowとrowを結合したいのですが、どのようにしたら良いでしょうか?
遺伝子が30万個ほどあるので、自動的にできる方法があればよいのですが。
よろしくお願いします。

  • マイクロアレイとか遺伝子名とか,本質に関係ない難しそうな言葉があり,あなたがやりたいことがよくわからないんですが,merge 関数を調べればよいのではないですか? -- 2008-11-23 (日) 08:41:10
    > (d1 <- data.frame(a=c(3,2,4), b=c(4,5,1), c=c(7,3,9)))
      a b c
    1 3 4 7
    2 2 5 3
    3 4 1 9
    > (d2 <- data.frame(e=c(4,3,1,6), f=c(3,5,8,7), g=c(4,2,5,9), b=c(3,4,5,7)))
      e f g b
    1 4 3 4 3
    2 3 5 2 4
    3 1 8 5 5
    4 6 7 9 7
    > merge(d1, d2)
      b a c e f g
    1 4 3 7 3 5 2
    2 5 2 3 1 8 5
    > merge(d1, d2, all=TRUE)
      b  a  c  e  f  g
    1 1  4  9 NA NA NA
    2 3 NA NA  4  3  4
    3 4  3  7  3  5  2
    4 5  2  3  1  8  5
    5 7 NA NA  6  7  9
  • どうもありがとうございます。この場合、d1, d2の行名(1,2,3)と数値が入れ替わっていますよね。実はこの行名と数値の関係を固定しておきたいんです。ただ、上の例と違って困難を感じているのは、d2における行がd1とは同じではなく完全に混ざってしまっている点です。したがって、最初にd1の行名(1,2など)と同じものをd2より探し、その後d2の行全体をd1に結合したいのです。さらに、この行名が30万個あると考えてください。 すみませんがよろしくお願いします。 -- まいくろ? 2008-11-23 (日) 09:47:50
  • 列名かと思った。上くらいのサイズで,実際の例を示してみたら?あなたのやりたいことがみんな分かるとは思えないんだけど? -- 2008-11-23 (日) 10:11:15
  • 行と列を転置したものについてやればよいのか? -- 2008-11-23 (日) 10:13:39
  • それでは、 -- まいくろ? 2008-11-24 (月) 10:27:58
  • 編集したものが表示されませんでした。”まいくろ”というところをクリックしてください。それで見えるようです。 -- まいくろ? 2008-11-24 (月) 10:34:51
  • 何度もすみませんでした。 -- まいくろ? 2008-11-24 (月) 17:12:51
  • 謝る前に,ちゃんとやろう。。 -- [[ ]] 2008-11-24 (月) 17:35:21

例えば、データセット1

	name	aa	bb	cc
	a	NA	6	4
	b	6	4	6
	c	4	4	1
	d	4	3	4

とデータセット2

	Name	ee	ff	gg
	b	NA	6	4
	c	6	4	6
	a	4	4	4

があった場合、求めたいものとして、

	name	aa	bb	cc	ee	ff	gg
	a	NA	6	4	4	4	4
	b	6	4	6	NA	6	4
	c	4	4	1	6	4	6
	d	4	3	4	NA	NA	NA

としたいのですが、できますでしょうか?

  • おかしなこというなあ。私が最初に示した merge じゃないの?以下のようになるよ?それと,やっぱり,あなたは投稿記事の書き方を見ていない。なさけないなあ。
    まえもっていっとくけど,両方のデータセットで name と Name はどっちかに統一しといてね -- 2008-11-24 (月) 17:36:47
    こんな風になるんだけど?それでもまだあなたのやりたいこととは違うというなら,
    例題が悪いんだね〜
    > a
      name aa bb cc
    1    a NA  6  4
    2    b  6  4  6
    3    c  4  4  1
    4    d  4  3  4
    > b
      name ee ff gg
    1    b NA  6  4
    2    c  6  4  6
    3    a  4  4  4
    > merge(a, b, all=TRUE)
      name aa bb cc ee ff gg
    1    a NA  6  4  4  4  4
    2    b  6  4  6 NA  6  4
    3    c  4  4  1  6  4  6
    4    d  4  3  4 NA NA NA
  • わかりました。ありがとうございました。本当にたびたびすみません。 -- 2008-11-24 (月) 17:55:45
  • ちょっとこの回答態度はひどい。ちなみに、merge()で結合するkeyカラムは統一する必要はなく、by.x by.yでそれぞれ指定すればよい。keyカラムを明示的に書いておかないとデバックとの時にはまることがある。 -- 2008-11-26 (水) 09:31:37
  • 質問者がさんざん,色々暴れ回ったんですよ -- 2008-11-26 (水) 11:23:30
  • もし, ここへ当事者第三者でも一言いたい場合は, ` Sys.sleep(1e5) ' の実行後書き込む事. これ以上は不毛です. -- なかま 2008-11-26 (水) 11:51:03
  • すみません、by.x by.yの具体的なスクリプトの書き方を教えてください。 -- 2008-11-26 (水) 23:05:56
  • ?mergeしてください。ヘルプを読まないで質問するのは失礼だと思います。 -- akira? 2008-11-26 (水) 23:29:54
  • 暴れん坊将軍ですね!! -- 2008-11-27 (木) 08:47:09
  • まいくろさん。あなたがやろうとしているのは30万個の遺伝子データのマージですよね。データの規模から言って付け焼刃的にRのmerge関数を勉強しても、Rの実行環境(CPUの速度・メモリ・プログラムの最適化など)の影響も十分考慮しないとうまく動かないと思いますよ。 -- okinawa 2008-11-27 (木) 09:10:08
  • 様々なご教示、ありがとうございます。どうやら、merge(fileX, fileY, all=TRUE)でできたようです。by.x by.yは使いませんでした(どなたか僕以外の質問者が現れたようですが・・・)。 Okinawaさん、確かにかなり時間がかかりました。ただ、Excelではフリーズしていたので、動いた分だけ得した気分です。 -- まいくろ? 2008-11-27 (木) 22:39:00
  • それはよかった。「この回答態度はひどい」なんてこと言われたから,ちょっと余計なことを書いたけど,解決のヒントになればという気持ちに偽りはなかったし,この掲示板(じゃない Wiki )を後で見る人のためのことも思ってのことだったので,まあ,言葉の荒っぽいところ乱暴な応対はご勘弁を。 -- 2008-11-27 (木) 23:49:17
  • 動いてよかったですね。このサイトは老婆心の塊のR魔人が多いもので・・・。 -- okinawa 2008-11-28 (金) 13:52:24

列の成分が同じものを削除した行列を作成

レオ? (2008-11-22 (土) 14:59:49)

いつも拝見させていただいております。


さて、
「ある行列において列の成分が完全に重複するもの(順番は問わない)を1つにまとめる」
のに良い方法はないでしょうか?
例えば、以下のようなデータでは、

A=  [,1] [,2] [,3] [,4] [,5] [,6]
  [1,] 2 2 5 3 2 2
  [2,] 5 3 2 2 4 1
  [3,] 3 4 3 5 3 5

とあった場合に

B= [,1] [,2] [,3]
 [1,] 2 2 2
 [2,] 5 3 1
 [3,] 3 4 5

という行列が返ってくるようなことを望みます。

今のところ、毎iに、A[,i]の成分をsortし、
すべてのiで、A[,i]と同じものはallで判定して削除する
というようにしていますが、効率が悪い気がします。

もっと単純な方法があれば教えてください。
よろしくお願いいたします

  • 結果は,列単位では並び順はどうでも良いのでしょうか? だったら,t(unique(t(apply(a, 2, sort)))) とすればよいのでは? -- 2008-11-22 (土) 17:36:44
    > a <- matrix(c(2,5,3,2,3,4,5,2,3,3,2,5,2,4,3,2,1,5), 3)
    > t(unique(t(apply(a, 2, sort))))
         [,1] [,2] [,3]
    [1,]    2    2    1
    [2,]    3    3    2
    [3,]    5    4    5
  • まさにuniqueという関数を知りたかったです!ありがとうございましたm(__)m -- レオ? 2008-11-23 (日) 04:42:52

for文を使って規則性のある名前の行列を生成したい

エル? (2008-11-22 (土) 14:07:23)

R歴3ヵ月の初心者です。
Cからの乗換で、Rにあったプログラムがなかなか書けていません。
行列を自動で複数個作りたいのですが、どのようにすればいいでしょうか。
イメージとしては以下のような感じです。

for(i in 1:3){
  A[i] <- matrix(nrow=i,ncol=5)
}


とすると


A1 =      [,1] [,2] [,3] [,4] [,5]
     [1,]


A2 =      [,1] [,2] [,3] [,4] [,5]
     [1,]
     [2,]


A3 =      [,1] [,2] [,3] [,4] [,5]
     [1,]
     [2,]
     [3,]


このようなマトリックスを作るようなプログラムを作成したいです。
上記のプログラムだと以下のようなメッセージが出てきます。

以下にエラー A[i] <- matrix(nrow = i, ncol = 5) :
オブジェクト "A" は存在しません

詳しい方ご教授願います。

  • あまり考えずに...
    A <- NULL
    for(i in 1:3){
       A[[i]] <- matrix(NA, nrow=i, ncol=5)
    }
    ~
    やりたいこととはちょっと違うのかな? --トマソン? 2008-11-22 (土) 14:15:19
  • いえ!まさにこれです!!簡単なことでお手をわずらわせてしまって申し訳ありません。 -- エル? 2008-11-22 (土) 15:03:00
  • お早い回等ありがとうございますm(__)m -- エル? 2008-11-22 (土) 15:05:05
  • お早い回等ありがとうございますm(__)m -- エル? 2008-11-22 (土) 15:09:21
  • はい。その解のパクリで sapply(1:3, function(i) matrix(NA, i, ncol=5)) -- 2008-11-22 (土) 20:52:42
  • for文ではなく、apply関数族を使うところがRっぽくって好きです。こちらでも書いてみたいと思います。回等ありがとうございましたm(__)m -- エル? 2008-11-23 (日) 04:48:34

積分を最尤法に組み合わせて最適値を求めたい

山口? (2008-11-21 (金) 10:49:28)

いつも拝見させていただいております。
ある関数式がありまして、その関数をパラメータが未知のまま(-1.96,∞)まで積分したものを、最尤推定によってパラメータを推定するにはどうすればよいでしょうか。integrate()、optim()、function()など組み合わせてみたのですが、私の理解が足りないために全く動いてくれません。以下がそのプログラムです。

set.seed(1);th1<-rnorm(10000)
myfunk<-function(x,sigma,u){
integrate((x/sqrt(2*pi*(sigma^2)))*exp(-((x-u)^2)/(2*(sigma^2)), -1.96, Inf)/
    integrate((1/sqrt(2*pi*(sigma^2)))*exp(-((x-u)^2)/(2*(sigma^2)), -1.96, Inf)
    #sigmaとuがパラメータ
}
optim(c(1,1),myfunk,method="L-BFGS-B",th1)

どなたか分かる方がいらっしゃいましたらご教示願います。
なお、環境はWindowsXp?,R-2.8.0です。
どうぞよろしくお願いします。

  • integrate(ほにょほにょ)$value かな、とりあえず。 -- トマソン? 2008-11-21 (金) 13:12:45
  • もうちょっと問題を正確に記述しないと回答は難しいのでは?たとえば,th1はどういう関係があるのかわかりませんし,二つのintegrateをとってその比を取ることの意味が何であるかとか。また,あるデータを与えたときの,答えが分かっているならその答えとか(例えば,二次方程式の解を求めるという問題のとき,3つの係数を与えたとき解はこのようになりますというような,例解を示すということですけど)。曖昧な問題定義で,答えも示されないとなると,回答を作ったと思ってもその回答が正しいかどうか,回答者自身が確認できないのですから,回答記事を書こうというインセンティブがありませんよね。 -- 2008-11-22 (土) 20:34:31
  • まず「integrate」ですが、 -- ななし? 2008-11-27 (木) 14:36:36
    integrate(f, lower, upper, subdivisions=100,
             rel.tol = .Machine$double.eps^0.25, abs.tol = rel.tol,
             stop.on.error = TRUE, keep.xy = FALSE, aux = NULL, ...)
    ですので、【f】のところは関数オブジェクトを与えてあげなければなりません.なので
    func1 <- function(x, sigma, u){
        (x/sqrt(2*pi*(sigma^2)))*exp(-((x-u)^2)/(2*(sigma^2))
    }
    func2 <- function(x, sigma, u){
        (1/sqrt(2*pi*(sigma^2)))*exp(-((x-u)^2)/2*(sigma^2))
    }
    こんな感じにしましょう.また【optim】で推定したいパラメータはベクトルとしてひとつの変数かつ第一引数として与えなければならないので
    myfunk<-function(par, x){
        sigma <- par[1]
        u <- par[2]
        integrate(f=func1, lower=-1.96, upper=Inf, sigma=sigma, u=u)$value/
            integrate(f=func2, lower=-1.96, upper=Inf, sigma=sigma, u=u)$value
        #sigmaとuがパラメータ
    }
    【par】がoptimで動かす変数になります.でも、まあ、いまのままだと【th1】がどういう意味を持ってるのかさっぱりなので、これでも動かないとは思いますが・・・.これを参考にがんばってみてください・・・
  • ご回答ありがとうございます。th1ですが、「最尤法による最適関数の導出について」という記事で、ななしさんがsplというオブジェクトrnormで作ってそれをoptim()に組み合わせていたので、真似したのでした。すみません、optim()がよくわかっていないようです…。 -- 山口? 2008-11-28 (金) 12:40:13
  • ははあ、なるほどぅ・・・ということは「myfunk」のxはいらないわけですね.ということは -- ななし? 2008-11-28 (金) 12:54:16
    myfunk<-function(par){
        sigma <- par[1]
        u <- par[2]
        integrate(f=func1, lower=-1.96, upper=Inf, sigma=sigma, u=u)$value/
            integrate(f=func2, lower=-1.96, upper=Inf, sigma=sigma, u=u)$value
        #sigmaとuがパラメータ
    }
    なるのかな・・・.これでc(1,1)を入れてみると
    > myfunk(c(1,1))
    [1] 1.005001
    となりますね.これでoptimを動かそうと思ったら
    optim(c(1,1),myfunk,method="L-BFGS-B")
    こうかな.でも、これだと推定したい値が、どこまでも動いてしまって「myfunk」でエラーが出るときがあると思うので、「optim」の
    lower, upper
    引数を使って、その範囲を指定してあげてください.でもその前に、func1とfunc2が山口さんの思ってる式になっているか確認してみてくださいね・・・.
  • ななしさんありがとうございます。大変恐縮なのですが、何度やってもできなかったのでもう一つ細かなことを質問させてください。実は
    integrate(f=func1, lower=-1.96, upper=Inf,  u=u)$value/
    integrate(f=func2, lower=-1.96, upper=Inf,  u=u)$value
    はある定数値を取ることを事前に仮定していまして、ある定数値を与えたときのsigmaとuの値を最尤推定したいのです。私は単純に
    myfunk<-function(par,spl){
       sigma <- par[1]
       u <- par[2]
       spl<-integrate(f=func1, lower=-1.96, upper=Inf, sigma=sigma, u=u)$value/
           integrate(f=func2, lower=-1.96, upper=Inf, sigma=sigma, u=u)$value
       #sigmaとuがパラメータ
    }
    optim(c(1,1),myfunk,method="L-BFGS-B",lower=1, upper=5,spl=4)#仮にある定数値を4とする。
    としてやったのですが、何とか動いてくれるもののlowerの値に左右されてうまくいっていないように思います。この部分は私が自分でできると思い質問しなかったのですが、逆に二度手間になってしまい申し訳ありません。これはlowerの値に左右される性質のものなのでしょうか。ちなみにfuncは正規分布の式にxをかけたものが分子でそのままのものが分母になると考えているので、これで合っていると思います。 どうぞよろしくお願い致します。 -- 山口? 2008-11-28 (金) 17:05:52
  • myfunc の引数 spl を通じて 4 を渡したつもりでしょうけど,myfunc の中では spl を何処でも使わずに spl <- で付値しているじゃないですか?そして,myfunk はその付値された値を返すようになっていますが,なんかへんですね? -- 2008-11-28 (金) 17:45:29
  • 積分値の比が spl に近くなるようにしたいんですか?差の二乗をとってそれを返すようにしたら,一応解は求まった風に見えるんですけど。lower も0 に近い小さな値にして見ましたけど。なんか,正解例というのはないのですか。あなたのやりたいであろうと思うことを推し量ってやってみても,正しい答えかどうかわからないとどうしようもない。 -- 2008-11-28 (金) 17:59:08
    > myfunk<-function(par, spl){
    +    sigma <- par[1]
    +    u <- par[2]
    +   (spl-integrate(f=func1, lower=-1.96, upper=Inf, sigma=sigma, u=u)$value/
    +        integrate(f=func2, lower=-1.96, upper=Inf, sigma=sigma, u=u)$value) 2
    +    #sigmaとuがパラメータ
    + }
    > optim(c(1,1),myfunk,method="L-BFGS-B",lower=0.01, upper=25, spl=2, control=list(maxit=10000, trace=10))#仮にある定数値を4とする。
    final  value 0.000000 
    converged
    $par
    [1] 0.950756 1.999649
    
    $value
    [1] 4.374987e-18
    
    $counts
    function gradient 
           6        6 
    
    $convergence
    [1] 0
    
    $message
    [1] "CONVERGENCE: REL_REDUCTION_OF_F <= FACTR*EPSMCH"
  • 大変申し訳ありません、何とか正解例を用意しようと試みているのですが、技術不足のためにうまくいきません。不完全ながら正解例らしきものを示させていただきます。 まず、
    integrate(f=func1, lower=-Inf, upper=Inf,  u=u)$value/
    integrate(f=func2, lower=-Inf, upper=Inf,  u=u)$value
    としたときに、それは正規分布の平均値を表していることを確認します。
    func11 <- function(x){
       (x/sqrt(2*pi*2^2))*exp(-((x-3)^2)/(2*(2^2)))#平均3標準誤差2とします。
    }
    func22 <- function(x){
       (1/sqrt(2*pi*2^2))*exp(-((x-3)^2)/(2*(2^2)))
    }
    integrate(func11,-Inf,Inf)$value/
    integrate(func22,-Inf,Inf)$value
    [1] 3#ちゃんと3という値が返ってきます。
    ですので、
    integrate(func11,tau,Inf)$value/
    integrate(func22,tau,Inf)$value#今まではtau=-1.96としていました。
    はtauに影響を受けて平均からずれた、平均値が返ってくることになります。今tau=-1.96とすると
    integrate(func11,-1.96,Inf)$value/
    integrate(func22,-1.96,Inf)$value
    [1] 3.03709#若干3からずれました。この値が定数値splとなります。
    私がやりたいのはtauが与えられているときに得られたsplを使ったuとsigmaの最尤推定ですので(ずれた後の平均値が分かっているときにずれる前のパラメータを推定したい)、
    func1 <- function(x, sigma, u){
       (x/sqrt(2*pi*(sigma^2)))*exp(-((x-u)^2)/(2*(sigma^2)))
    }
    func2 <- function(x, sigma, u){
       (1/sqrt(2*pi*(sigma^2)))*exp(-((x-u)^2)/(2*(sigma^2)))
    }
    myfunk<-function(par, spl){
       sigma <- par[1]
       u <- par[2]
      (spl-integrate(f=func1, lower=-1.96, upper=Inf, sigma=sigma, u=u)$value/
           integrate(f=func2, lower=-1.96, upper=Inf, sigma=sigma, u=u)$value)^2
       #sigmaとuがパラメータ
    }
    optim(c(1,1),myfunk,method="L-BFGS-B",lower=0.01, upper=25, spl=3.03709, 
       control=list(maxit=10000, trace=10))
    final  value 0.000000 
    converged
    $par
    [1] 1.100345 3.037075
    
    $value
    [1] 1.397589e-20
    
    $counts
    function gradient 
           6        6 
    
    $convergence
    [1] 0
    
    $message
    [1] "CONVERGENCE: REL_REDUCTION_OF_F <= FACTR*EPSMCH"
    と、平均値は大体上手く推定できているような気がしなくもないですが、sigmaの精度はよくないようです。正解例を示したかったのですが、sigmaが全くうまくいきませんでした。申し訳ありません。 -- 山口? 2008-11-28 (金) 19:26:05
  • 今更ながらですが,-1.96〜Inf(でなくても2とか3とか)における,func1 の図は描いてみましたよね。あんなのでよいのですか? -- 2008-11-28 (金) 20:13:38
  • 大変申し訳ありませんでした。括弧の数と位置がおかしかったようです。全て修正させていただきました。 -- 山口? 2008-11-28 (金) 20:39:32
  • え,どないなったん -- 2008-11-28 (金) 20:40:42
  • すみません。定義式を
    func1 <- function(x, sigma, u){
       (x/sqrt(2*pi*sigma))*exp(-(x-u)^2/2*(sigma)^2)
    }#Before
    から
    func1 <- function(x, sigma, u){
       (x/sqrt(2*pi*(sigma^2)))*exp(-((x-u)^2)/(2*(sigma^2)))
    }#After
    のように、最初のルートの中のsigmaを二乗したのと、それに伴い括弧を付けたし、後半のexpの中も括弧で計算の順序を整えました。func2については
    func2 <- function(x, sigma, u){
       (1/sqrt(2*pi*sigma))*exp(-(x-u)^2/2*(sigma)^2)
    }#Before
    から
    func2 <- function(x, sigma, u){
       (1/sqrt(2*pi*(sigma^2)))*exp(-((x-u)^2)/(2*(sigma^2)))
    }#After
    とfunc1と同様、sigmaを二乗してから括弧を付けたし、expの中も括弧で整えました。要は正規分布を表す式となっていなかったので、それを正しく直しました。 -- 山口? 2008-11-28 (金) 20:49:55
  • 同様です,で済ませずに,ちゃんとしめしてくださいな。基本の確認が出来ていなかったのですから。それと,そう言う風に変更したら,ちゃんと解が求まるようになったのでしょうか?ならなかったのでしょうか?その辺りもちゃんと,フォローしましょうね。(また,この回答態度はいったい何だなんて,言われたくはないのだけど,要求すべきは要求し,明らかにすべき所の説明を求めているに過ぎないんだけどね) -- 2008-11-28 (金) 21:02:25
  • だから、「func1とfunc2が山口さんの思ってる式になっているか確認してみてくださいね」と、忠告したのに・・・(汗◆がんばれぇ -- ななし? 2008-11-28 (金) 21:05:11
  • 申し訳ありません。確認が足りませんでした。以後きちんとplotして視覚化するよう努めます…。修正を施してもやはり上手く最尤推定されないようです。というか、私が最後に載せた結果は修正後のfunc1とfunc2を使っていました。上のほうのfunc1,2の定義と違ったために混乱が生じてしまい申し訳ありませんでした。今後気をつけます。 -- 山口? 2008-11-28 (金) 21:08:13
  • 図まで描かなかったということでしょうね。図を描けば一目瞭然なのに。ところで,定義式から当然なんだけど,x < 0 の領域で func1 < 0 になるのでいいのだろうか。私にはその問題の細部が分からないから,良いも悪いも判断できないのだけど? -- 2008-11-28 (金) 21:10:51
  • まあ、このひとは、暴れたいだけやろうから、きにせんとって(笑 -- 2008-11-28 (金) 21:22:29
  • 暴れながらも,ヒントはあげてるじゃないですか -- 2008-11-28 (金) 21:24:58
  • わはは、暴れずにヒントをあげることはできへんみたい.でも、確かにヒントにはなってるところはあるんで、暴れてるのはきにせんとってね(笑 -- 2008-11-28 (金) 21:26:51
  • 暴れていると 思うあなたは 傍観者
    > optim(c(1,1),myfunk,method="L-BFGS-B",lower=0.01, upper=25, spl=3.03709,
        control=list(maxit=10000, trace=10))
    final  value 0.000000 
    converged
    $par
    [1] 1.100345 3.037075
    
    $value
    [1] 1.397589e-20
    
    $counts
    function gradient 
           6        6 
    
    $convergence
    [1] 0
    
    $message
    [1] "CONVERGENCE: REL_REDUCTION_OF_F <= FACTR*EPSMCH"
  • (うはぁ、なんか2chみたいになってますね・・・)◆でも、うまくいったみたいで、よかったよかった.こりずに、これからも長くRを使っていただけることを期待しています.◆と書き込んでよく読んだらまだうまくいってないと・・・◆良く見えなかった・・・ -- ななし? 2008-11-28 (金) 21:31:19
  • うまくいったかどうかは分からないでしょう。こういうのは,丁々発止やって,たのしまなきゃ。批判したのされたの,馬鹿にしたのされたのじゃおもしろくない。結果が得られれば,それでいいじゃないか。 -- 2008-11-28 (金) 21:35:47
  • x<0でfunc1<0となっても、ちゃんと
    integrate(func11,-Inf,Inf)$value/
    integrate(func22,-Inf,Inf)$value
    [1] 3
    で平均値が返ってくるので問題ないかと思っておりましたが…これが原因なのでしょうか?? -- 山口? 2008-11-28 (金) 21:38:14
  • 3が正解ならそれで良いのですけど。それが正解かどうか私には分からないと言うだけのことです。 -- 2008-11-28 (金) 21:41:50
  • すみません。改めて上記を引用させていただきますと、正解例らしきものを出したときに
    func11 <- function(x){
      (x/sqrt(2*pi*2^2))*exp(-((x-3)^2)/(2*(2^2)))#平均3標準誤差2とします。
    }
    func22 <- function(x){
      (1/sqrt(2*pi*2^2))*exp(-((x-3)^2)/(2*(2^2)))
    }
    と定義しておりまして、このときに平均値を3、標準誤差を2と定めています。すみません、計算式の横に書いてあったのが不適切でした。ですから、3という正解が返ってくる以上、負の値をfunc1がとっても問題ないかと思いました。また、このように定義していますのでoptim()で最後に求まる値はsigma=2とu=3であってほしいのです。 -- 山口? 2008-11-28 (金) 21:44:00
  • 「optim()で最後に求まる値はsigma=2とu=3であってほしいのです」この表明が欲しかったんですよ。これ以外の答えが出るプログラムを呈示しなくて済む。 -- 2008-11-28 (金) 21:51:40
  • 申し訳ありません。質問の仕方が下手でした。改めまして、どうぞよろしくお願い致します。 -- 山口? 2008-11-28 (金) 21:57:55
  • ここまでの道のりは長かったけど,あなたの忍耐を賞賛します(^_^;) -- 2008-11-28 (金) 22:01:22
  • とりあえず、「integrate」「optim」、あと「func1」「func2」の問題は解決したようですね.ななし的には、そこのところでお役に立てればいいなと思いました.ななしがやっても山口さんと同じ結果になるので、どうもデザインの問題のような気がしますが・・・.ちょっとRの問題とは離れてしまいますかね・・・?長くなりましたし、Rと質問のされ方のスキルもあがったと思いますので、新規で記事を立てられたほうが良いかもしれませんね.(にせ者ななしがいるような) -- ななし? 2008-11-28 (金) 22:27:44
  • 私は,「ななし」を名乗ったりしてませんよ。相手を賞賛するのは,「ななし」氏にかぎらないでしょう?それとも,署名に「ななし」を名乗った不届きものがいるの?自意識過剰? -- 2008-11-28 (金) 22:35:46
  • デザインの問題ですか…、それは困りました。一応、仮にsigmaが与えられるものとしてuを推定してみると
    func1 <- function(x, u){
        (x/sqrt(2*pi*(2^2)))*exp(-((x-u)^2)/(2*(2^2)))
    }
    func2 <- function(x, u){
        (1/sqrt(2*pi*(2^2)))*exp(-((x-u)^2)/(2*(2^2)))
    }
    
    myfunk<-function(par, spl){
        u <- par[1]
       (spl-integrate(f=func1, lower=-1.96, upper=Inf,  u=u)$value/
            integrate(f=func2, lower=-1.96, upper=Inf,  u=u)$value)^2
        #uのみがパラメータ
    }
    optim(1,myfunk,method="L-BFGS-B",lower=0.01, upper=25, spl=3.03709,
         control=list(maxit=10000, trace=10))
    final  value 0.000000 
    converged
    $par
    [1] 3.000000
    
    $value
    [1] 6.01349e-16
    
    $counts
    function gradient 
           7        7 
    
    $convergence
    [1] 0
    
    $message
    [1] "CONVERGENCE: REL_REDUCTION_OF_F <= FACTR*EPSMCH"
    となり、きれいなu=3という推定値が導けるようです。もう少しデザインがどうにかならないか考えてみます。ありがとうございました。 -- 山口? 2008-11-28 (金) 23:08:43
  • 山口さん、もうoptimもintegrateもマスターされてますね!.つまりここからはRに関する話題ではなくて、山口さんが本来やりたかったことの話題になるわけです.だけどななし個人的にもとても興味があるのでこっそりとresしてしまいます. -- ななし? 2008-11-29 (土) 22:54:11
    山口さんが書いたこと:
    splを使ったuとsigmaの最尤推定ですので(ずれた後の平均値が分かっているときにずれる前のパラメータを推定したい)
    これを読んで感じたのは「tau=-1.96」でtauをずらした場合平均値も分散もずれるんじゃないかなと言うことです.それなのに「spl=3.03709」とずれたあとの平均だけを指定して、元の平均と分散を求めようとしている?このあたりにヒントがありそうな気がしますが、いかがでしょう???(まったくの思い付きです)
    つまりずれる前の平均と分散を求めたいのなら、ずれた後の平均と分散を教えてあげる必要があるんじゃないかなと・・・.
  • あぁ、デザインとはそういう意味でしたか(汗)えっと…確かに仰るとおり平均値だけではおかしいですね。少し考えてみます。取り急ぎ返信を。 -- 山口? 2008-11-30 (日) 15:44:13
  • おそらくできました。以下にプログラムを示します。
    func33 <- function(x){
              ((x-3)^2)*(1/sqrt(2*pi*2^2))*exp(-((x-3)^2)/(2*(2^2)))
    }#分散を確率密度を使って表現、平均3標準誤差2
    
    integrate(func33,-Inf,Inf)$value/
    integrate(func22,-Inf,Inf)$value
    [1] 4
    #確かに2^2の値が返ってきます(標準誤差を2と定めているので)
    
    sqrt(integrate(func33,-1.96,Inf)$value/
    integrate(func22,-1.96,Inf)$value)
    [1] 1.953467
    #これがtauによって2からずれた標準誤差の値
    ということを確認して、以下が作成したプログラムです。
    func1 <- function(x, sigma, u){
       (x/sqrt(2*pi*(sigma^2)))*exp(-((x-u)^2)/(2*(sigma^2)))
    }
    func2 <- function(x, sigma, u){
       (1/sqrt(2*pi*(sigma^2)))*exp(-((x-u)^2)/(2*(sigma^2)))
    }
    func3 <- function(x, sigma, u){
       ((x-u)^2)*(1/sqrt(2*pi*(sigma^2)))*exp(-((x-u)^2)/(2*(sigma^2)))
    }
    myfunk<-function(par, spl, spl2){
       sigma <- par[1]
       u <- par[2]
      (spl-integrate(f=func1, lower=-1.96, upper=Inf, sigma=sigma, u=u)$value/
           integrate(f=func2, lower=-1.96, upper=Inf, sigma=sigma, u=u)$value)^2+
      (spl2-sqrt(integrate(f=func3, lower=-1.96, upper=Inf, sigma=sigma, u=u)$value/
                 integrate(f=func2, lower=-1.96, upper=Inf, sigma=sigma, u=u)$value))^2
    #sigmaとuがパラメータ,splにずれた平均値を,spl2にずれた標準誤差を設定します
    }
    optim(c(1,1),myfunk,method="L-BFGS-B",lower=0.01, upper=25, spl=3.03709,
         spl2=1.953467, control=list(maxit=10000, trace=10))
    final  value 0.000000 
    converged
    $par
    [1] 2.000000 3.000000#きれいに標準誤差と平均値が推定できました。
    
    $value
    [1] 1.235012e-14
     
    $counts
    function gradient 
           7        7 
    
    $convergence
    [1] 0
    
    $message
    [1] "CONVERGENCE: REL_REDUCTION_OF_F <= FACTR*EPSMCH"
    おかげさまで当初の目的を達成することができました。皆様本当にありがとうございました。そしてななしさん、適切なアドバイスに心から感謝申し上げます。 -- 山口? 2008-11-30 (日) 16:29:08
  • good job! -- 2008-11-30 (日) 19:11:52
  • インセンティブがないんだったら、汚れるだけだからだまってろよ(このコメントもだがw).トマソンとかななしみたいにわかるところから答えてやればいいんじゃね? -- 2008-12-04 (木) 12:37:49

データフレームの特定の行だけ消去したい

心理学徒? (2008-11-20 (木) 15:52:44)

こんにちは。
下のような感じのデータフレームで多変量解析を試みたのですが,多変量外れ値を示すオブザベーションがあったので,その行だけ消去して新しいデータフレームを作りたいのですが,どうやればよいでしょうか?
どうぞよろしくお願いします。

  sex age   id x1 x2 x3 x4 x5 x6 x7 x8 x9 x10
1   0  19 8055  3  3  2  3  2  2  2  1  1   1
2   1  19 8045  5  5  4  3  4  5  2  4  5   4
3   0  19 8061  4  4  1  1  1  1  2  1  5   4
4   0  18 8084  5  4  2  4  5  4  4  2  2   5
5   1  19 8051  3  2  3  4  4  2  2  1  1   2
6   0  18 8047  4  4  1  4  2  1  1  1  1   2
  • 消去を表す添え字形式は,foo[-c(3,7,15),] オンラインヘルプでかくにんして,やってごらんなさいませ -- 2008-11-20 (木) 15:59:20
  • 感動しました。ありがとうございました。 -- 心理学徒? 2008-11-20 (木) 16:06:53
  • 横槍で申し訳ございませんが、どのようなコマンドを打ったか書き込んでいただけないでしょうか? 同様のことをやろうと思ったのですが fooが認識されません。 -- 2008-12-15 (月) 14:10:17

行列の計算について

北京原人? (2008-11-19 (水) 10:39:21)

Rの初心者です。
下記のデータを「Re1」で取り込んで、

    V1        V2        V3        V4

1 16.01704  7.389199  8.523638  2.508838
これを下記のコマンドで4行10列の行列に拡張(Re2)して
Re2 <- matrix( Re1 , nrow=10 , ncol=4, byrow=T)

        V1       V2       V3       V4

1 16.01704 7.389199 8.523638 2.508838
2 16.01704 7.389199 8.523638 2.508838
3 16.01704 7.389199 8.523638 2.508838
4 16.01704 7.389199 8.523638 2.508838
5 16.01704 7.389199 8.523638 2.508838
6 16.01704 7.389199 8.523638 2.508838
7 16.01704 7.389199 8.523638 2.508838
8 16.01704 7.389199 8.523638 2.508838
9 16.01704 7.389199 8.523638 2.508838
10 16.01704 7.389199 8.523638 2.508838

行列計算しようとするとエラーが出てしまいます。

Re2+Re2
以下にエラーRe2 + Re2 : 二項演算子の引数が数値ではありません

何が問題でエラーが出るのかが分かりません。
おそらく基本的なミスをしているのだと思いますが原因が分かる方ご教示ください。

  • class(Re1); class(Re2); mode(Re1); mode(Re2) の結果を知らせてください。 -- 2008-11-19 (水) 11:04:58
  • ありがとうございます。 class( Re1) [1] "data.frame" class(Re2) [1] "matrix" mode(Re1)[1] "list" mode(Re2)[1] "list"となりました。 -- 北京原人? 2008-11-19 (水) 14:34:44
  • Re1 をなんで,1行のデータフレームにしなければならないのか理解できませんが,Re2を作るところを以下のようにすれば取りあえずは問題解決?
    あなたの作った Re2 と シタのやり方で作る Re2 に str 関数を適用してみると違いがわかる。あなたの作った Re2 は10行4列に表示されるリストですね。で,四則演算できない。 -- 2008-11-19 (水) 19:30:36
    > Re2 <- matrix( data.matrix(Re1) , nrow=10 , ncol=4, byrow=T)
    > Re2+Re2
              [,1]     [,2]     [,3]     [,4]
     [1,] 32.03408 14.77840 17.04728 5.017676
     [2,] 32.03408 14.77840 17.04728 5.017676
            途中省略
     [9,] 32.03408 14.77840 17.04728 5.017676
    [10,] 32.03408 14.77840 17.04728 5.017676
  • ありがとうございます。 -- 北京原人? 2008-11-20 (木) 09:19:08
  • ちなみに、Re1ですが Re1 <- (read.table("return.txt")) でテキストファイルを読み込みますと自然とデータフレームとなってしまいますが、これは、テクストファイルの作りに問題があるのでしょうか? -- 北京原人? 2008-11-20 (木) 09:24:31
  • read.table で読み込んだものはデータフレームになります(問題ありません。当然のことです)。要素の名前(V1, V2,...)がほしいので,read.tableで読みたいのかも知れませんが,読み込んだものをmatrix関数で展開するときにRe1をdata.matrix関数で行列にしてやれば済むことでしょう。 -- 2008-11-20 (木) 11:58:52
  • ありがとうございました。 -- 北京原人? 2008-11-20 (木) 15:55:37

画像ファイルの読み込みについて

さと? (2008-11-19 (水) 06:21:51)

jpeg, pngなどの画像ファイルを、Rに読み込む方法についてお尋ねします。

jpeg(), png()などのコマンドによって、Rで作った図を様々なファイル形式で保存することが可能ですが、逆に既に保存されている画像ファイルをRの中に読み込んで表示することは可能でしょうか。

具体的には、graphics windowをいくつかに分割して、その一部にはRで作った図を書き込み、他の部分にはすでに作成して保存しているpngなどのファイルの画像を張り込むことを考えています。

ご教授いただければ幸いです。

  • library(rimage);?read.jpeg -- 2008-11-19 (水) 08:02:01
  • ご解答ありがとうございます。jpegの読み込みに成功いたしました。 -- さと? 2008-11-20 (木) 11:41:04

windowsパスのRでの自動置換

windows? (2008-11-18 (火) 10:16:24)

いつもお世話になっております。
windowsパスをRで読み込む際に"\"を"/"に置き換えなくてはいけないことが
わかりましたが、手作業ではなく自動で置き換えることを検討しています。

下記のようなコマンドを作成しましたが、エラーが出て止まってしまいます。
解決策をご教授いただけないでしょうか。
よろしくお願いいたします。

a <- gsub("\", "/", "C:\Documents and Settings\user\デスクトップ\hoge")

  • 次のようにすべし。
    a <- gsub("\\\\", "/", "C:\\Documents and Settings\\user\\デスクトップ\\hoge") -- 2008-11-18 (火) 14:05:10
  • ご回答ありがとうございます。"C:\Documents and Settings\user\デスクトップ\hoge"を変更せずに操作する方法はありますでしょうか。 -- windows? 2008-11-18 (火) 16:48:15
  • よくわからんのですが,一度だけ,作業ディレクトリを C:\Documents and Settings\user\デスクトップ\ にしてやれば,後は\に煩わされないのでは? -- 2008-11-18 (火) 17:03:31
  • 実は、コマンド操作が苦手な人用にSPSSからの操作を考えています。SPSSからRへファイル保存のダイアログで設定すると"C:\Documents and Settings\user\デスクトップ\hoge"となってしまい、途方に暮れているところです。できるだけ煩雑な操作をしたくなくないので、Rのコマンドで自動に変換できればと考えています。 -- windows? 2008-11-18 (火) 20:29:12
  • "C:\\省略"は'C:\省略'のエスケープされた出力なので"\\"と入力しても'\'になるだけです. したがって「変更せずに操作する」と言うのは意味が通じません. あと, 日本語ファイル名はうまくいかのでそれが原因かもしれませんし, SPSSからRと言われてもどのような事をしているのか皆目見当がつきませんし, なにより再現方法を詳細に記述しないとこれ以上何も返せないでしょう. あと x<-"C:\\";(x);cat(x,fill=T) とかするとエスケープされている事がわかると思います. -- なかま 2008-11-18 (火) 23:08:58

グリッドデータ作成について

Saito? (2008-11-17 (月) 20:45:38)

いつもお世話になっております。
地形の変化などによって調査区内において予測地点間が均質でない場合、どうやれば不均一なグリッドデータ(緯度経度の座標)が作成できるでしょうか。例えば以下のような場合です。

library(geoR)
a<-pred_grid(c(10,20), c(10,20),by=1)#予測グリッドの作成
plot(a,xlab="long",ylab="lat")
b<-c(10:20,20:10)
c<-sample(b,11)
c2<-c(c,numeric(11))
d<-data.frame(b,c2)
points(d,col=2,type="l")
polygon(d,col=2)#赤色で塗り潰されて"いない"ところが予測したい場所。この場所だけを含む緯度経度データを作成したい。

似たような質問で"gstatパッケージでのクリギングについて"という記事の中で、expand.grid()を用いたグリッドデータの作成方法が紹介されています。ですが、この方法だと長方形のグリッドデータが用意されてしまいます(上記のpred_gridと一緒)。予測したい地点の緯度経度のみを算出するにはどうすればよいでしょうか。
ちなみに環境はWindowsXP、R-2.8.0です。
よろしくお願いします。

  • 関数 pred_grid() はどこにあるのですか? -- 2008-11-18 (火) 00:14:54
  • geoR にあるということは,探せばわかるといわれればそうなんだけど,探してまで答えてやろうと思う人は少ないだろう。上の方の注意書きに「使用非標準パッケージ名)を添えることをお勧めします」とも書かれていますよ。読みました? -- 2008-11-18 (火) 09:41:53
  • 大変失礼しました。上の行にlibrary(geoR)を貼り付けるのを忘れていました。仰られているように、回答者の方に大変手間を取らせる失礼な質問でした。もし、無礼を許していただけるなら、どうかご教授お願い致します。 -- Saito? 2008-11-18 (火) 10:46:22
  • geoR が予測領域としてどのようなデータ構造を仮定しているのか知りませんが、おそらく単にx座標とy座標を並べたデータフレームでしょう。不規則とは規則が無いことですから、一般的な処方は無いわけです.手作業でx,y座標を並べたデータフレームを作る他ありません。参考例のような具体例ではもう少し知恵のある方法も考えられるでしょうが、やり方はケースバイケースでしょう。例えばつぎのようにする。(ついでに言えば、不規則領域に限るのは予測をしてからにした方が面倒でないと思います。) -- 2008-11-18 (火) 21:44:05
    > library(geoR)
    > a<-pred_grid(c(10,20), c(10,20),by=1)#予測グリッドの作成
    > plot(a,xlab="long",ylab="lat")
    > b<-c(10:20,20:10)
    > set.seed(1); c<-sample(b,11) # 再現性のため乱数種を指定
    > c2<-c(c,numeric(11))
    > d<-data.frame(b,c2)
    > points(d,col=2,type="l")
    > polygon(d,col=2)
    >  
    > J <- NULL
    > d1 <- d[,1]; d2 <- d[,2]
    > for (i in seq(nrow(d))) {
        for (j in seq(nrow(a))) {
          if (d1[i] < a[j,1] & d2[i] == a[j,2]) 
            J <- c(J,j)
      }}
    > a <- a[unique(J),]
    > dim(a)
    [1] 51  2
  • ご返信ありがとうございます。追加でいくつか質問をさせてください。まず上記のオブジェクトaですが、これは合っている部分とそうでない部分があるような気がします。 私の理解では、aの中のVar1はy軸、Var2はx軸を表していると思いますが、 それだと例えばVar2の19は図から見るに11〜20の値を取ると思います。ですが、実際には18,19,20しか取っていません(aを参照)。 aは(set.seed(1)の場合)
    cc<-rep(c(10,11,13,14,15,16,17,18,19,20),c(5,3,6,7,4,5,1,2,10,8))#x軸の作成
    cc2<-c(16,17,18,19,20,18,19,20,15,16,17,18,19,20,
          14,15,16,17,18,19,20,17,18,19,20,16,17,18,19,20,
          20,19,20,11,12,13,14,15,16,17,18,19,20,13,14,15,16,17,18,19,20)#y軸の作成
    a2<-data.frame(cc,cc2)
    a2
    と一致するはずなのですが、私の理解が間違っているでしょうか。 また、「不規則領域に限るのは予測をしてからにした方が面倒でないと思います」と言って下さったので、私がやりたかったことを言いますと、クリギングによって予測された地点の値の合計です。具体例としましては、
    library(geoR)
    a<-pred_grid(c(10,20), c(10,20),by=1)
    plot(a,xlab="long",ylab="lat")
    b<-c(10:20,20:10)
    set.seed(1); c<-sample(b,11)
    c2<-c(c,numeric(11))
    d<-data.frame(b,c2)
    points(d,col=2,type="l")
    polygon(d,col=2)
    cc<-rep(c(10,11,13,14,15,16,17,18,19,20),c(4,2,4,4,4,5,1,2,5,4))
    cc2<-c(16,17,18,20,18,20,15,17,19,20,
          14,15,16,20,17,18,19,20,16,17,18,19,20,
          20,19,20,11,17,18,19,20,13,15,17,20)
    cc3<-rep(c(10,11,13,14,15,16,17,18,19,20),c(5,3,6,7,4,5,1,2,10,8))
    cc4<-c(16,17,18,19,20,18,19,20,15,16,17,18,19,20,
          14,15,16,17,18,19,20,17,18,19,20,16,17,18,19,20,
          20,19,20,11,12,13,14,15,16,17,18,19,20,13,14,15,16,17,18,19,20)
    par(mfrow=c(1,3))
    plot(a,main="予測グリッド")
    plot(cc,cc2,main="実際の観測点")
    plot(cc3,cc4,main="予測値を合計したい地点")
    set.seed(2);cc5<-abs(rnorm(35))
    cc6<-data.frame(long=cc,lat=cc2,value=cc5)
    library(gstat)
    library(lattice)
    vario<-variogram(object=value~long+lat,
                    locations=~long+lat,cutoff=5,width=1,data=cc6)
    plot(vario$dist,vario$gamma)
    model2<-fit.variogram(vario,model=vgm(0.03,"Sph",2.5,0.42))
    cc7<-gstat(id="val",formula=value~long+lat,locations=~long+lat
    ,data=cc6,model=model2)
    a<-data.frame(long=a$Var1,lat=a$Var2)
    cc8<-predict.gstat(cc7,a)#予測グリッドにおける内挿
    levelplot(val.pred~long+lat,cc8)
    sum(cc8$val.pred)#合計したくないところまで値が合計されてしまう:plot(cc3,cc4)で 表される地点の合計値のみが欲しい 
    このような感じになります。つまり合計したい値は任意の緯度より上の値だけなのです。
    library(gstat)
    data(meuse.grid)
    plot(meuse.grid$x,meuse.grid$y)
    で表されるように、クリギングをする前には最初から予測グリッドを任意の地点のみに指定しておいたほうがあとで合計するときなどに便利だとと思い質問させていただいたのです。私の場合は(イメージとして)山の裾野の境界の緯度データがありまして、平地だけでクリギングを行いたいと考えています。境界データはものすごく長いので、手作業で予測グリッドを作ると、どこかで呪われそうなのです。そういうわけで、なんとか境界の位置データがわかっている場合に、そこを末端とする予測グリッドを作成したかったのです。しかし、予測したあとに不規則領域を区切ったほうが面倒でないということは、何か上手いやり方があるのでしょうか?もし何かご存知でしたら、どうかご教授願えないでしょうか? -- Saito? 2008-11-18 (火) 23:41:47
  • だから広い領域で予測しておいて、その不規則領域分だけ足せば済むことでしょう.不規則領域に限る方法は、該当領域に相当する添字ベクトルを個別に計算するより仕方ないでしょう(先の例の J のように)。 -- 2008-11-19 (水) 06:55:02
  • ご返信ありがとうございます。すみません、やっぱりaが予想している値(a2)と違うので、何故違うのか考えています。 -- Saito? 2008-11-19 (水) 15:16:28
  • 結局提示していただいたプログラムはよくわからなかったのですが、そのプログラムを参考に自分で作ることに成功しました。以下がそのプログラムです。
    set.seed(1);b<-c(10:20,20:10);c<-sample(b,11)
    S2<-NULL
    R2<-NULL
    c3<-20-c
    for(i in 1:length(c)){
     ifelse(-c[i]==-20,S<-0,
            S<-seq(-20,-c[i]-1))
     ifelse(c3[i]==0,R<-0,
            R<-rep(c(9+i),c3[i]))
       R2<-c(R2,R)
       S2<-c(S2,S)
    }
    a<-data.frame(R2,S2)
    a<-subset(a,a["R2"]!=0)
    a$S2<--a$S2
    c2<-c(c,numeric(11))
    d<-data.frame(b,c2)
    plot(a)
    points(d,col=2,type="l")
    polygon(d,col=2)
    どうもありがとうございました。 -- Saito? 2008-11-19 (水) 17:37:04

添付ファイル: filesamplenanbuwks20090312.png 1477件 [詳細] fileoodraw01.png 1610件 [詳細] filesample.png 1488件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Google
WWW を検索 OKADAJP.ORG を検索
Last-modified: 2015-03-01 (日) 01:15:59 (1719d)