初心者のための R および RjpWiki に関する質問コーナー
新規投稿はできません
abc (2004-11-30 (火) 19:25:46)
windows版のRを使用しているのですが、丸めモードの変換を行い、上向けに丸めたときの結果と下向きに求めた時の結果の比較を行いたいのですが、
どのようにすればよろしいのでしょうか?教えてください。
よろしくお願いします。
ABA (2004-11-29 (月) 23:47:56)
Rで数値データを一列に出力させたとき、値の横に一行目には[1,]、
2行目には[2,]・・・と表示されるのですが、出力されたデータの値のみを
エクセルにコピー&ペーストするには、どうすればよいのでしょうか。
色々と試行錯誤したのですが、分からないので教えてください。
宜しくお願いします。
d.list <- function(d) { invisible(apply(d, 1, function(i) cat(paste(i, c(rep("?t", length(i)-1), "?n"))))) }質問を読み返してみたら,数値データはベクトルに入っていることを想定していて,Excelには縦に一列にペーストしたいのだろうか。だとしたら,y <- rnorm(10) などになっているなら,cat(paste(y, "?n")) -- 青木繁伸 2004-11-30 (火) 12:54:30
B (2004-11-26 (金) 13:58:42)
重回帰をした際に標準化回帰係数を知りたいのですが、summaryでは表示されません。手計算で出すことができると思うのですが、出力する関数があれば教えてください
ds <- data.frame(scale(d)) # 標準化する lm(y ~ x1+x2+x5, d) lm(y ~ x1+x2+x5, ds) # 第二引数だけが違う # 厳密に言えば,後者のモデルの最後に -1 を付けておくのがいいのかもしれない前者は回帰係数,後者は標準化回帰係数が得られる(^_^) -- 青木繁伸 2004-11-26 (金) 19:20:51
ささかま (2004-11-26 (金) 00:10:45)
R2.0.1 mac版を使っています。OS10.3.6 Xcode 1.1を入れてあります。 rimageをインストールするため、Finkを使ってfftwとlibjpegを入れました。その後R上からrimageをインストールしようとしましたが、checking jpeglib.h usability... no checking jpeglib.h presence... no checking for jpeglib.h... no configure: error: Sorry, can't find jpeglib headerと出てしまい、インストールできませんでした。fftwをcheckするときにも同様のメッセージが出ましたが、以前教えて頂いたように(「macでソースファイルからパッケージをインストールする方法」という題です)/usr/local/include/にシンボリックリンクを作ることでエラーは回避できました。しかし、jpeglib.hについては、シンボリックリンクを作ってもエラーが出てしまいます。別の場所にリンクを作らなければならないのでしょうか?どなたかご存知の方ご教授願います。 この掲示板の使い方がよくわからず上手く書き込めませんでしたが、どなたか直して頂いたようで、ありがとうございました。
y.a. (2004-11-20 (土) 22:37:54)
例えば,回帰分析の結果に対して summary.lm()を signif.stars=T
オプション付きで実行するとt値の各有意水準に応じて星をつけてくれます.
この星の水準を変更するにはどうすればよいでしょうか?
具体的には,10%, 5%, 1% 水準でそれぞれ,*, **, ***
をつけたいのです(経済学ではこれがデフォルトです).
summary.lm をみると,係数の行列は ans$coefficients ですが,
これに星をつけている箇所はよく分かりませんでした.
For example, calling summary(lmObject) dispatches on method summary.lm() hwich creates an object of class "summary.lm". The latter is printed by method print.summary.lm() which calls printCoefmat(). The stars are hard-coded there, and I don't think anybody is going to change that. I suggest to turn of the printing of siginificant codes by specifying print(summary(.....), signif.stars = FALSE) or by setting the corresponding option(). Uwe Ligges It would be possible to re-define 'printCoefmat' privately so as to change the lines cutpoints = c(0, 0.001, 0.01, 0.05, 0.1, 1), symbols = c("***", "**", "*", ".", " ")) towards the end of its code into whatever you prefer, e.g. cutpoints = c(0, 0.01, 0.05, 0.1, 1), symbols = c("***", "**", "*", " ")) or cutpoints = c(0, 0.001, 0.01, 0.05, 0.1, 1), symbols = c("****", "***", "**", "*", " ")) (both of which are compatible with your description of what is needed). The most straightforward way of redefining it is to copy the code for 'printCoefmat' into a file, e.g. sink("printCoefmat.R") printCoefmat sink() and then edit that file. NOTE that the code written to the file does not include the name of the function, i.e. it starts function (x, digits = max(3, getOption("digits") - 2),.... so the first modification has to be printCoefmat<-function(x, digits = .... ) Then, when you want your private version, simply do source("printCoefmat.R") and it will overlay the original version. (Experts will have to advise whether this clashes with any "namespace" issues. On my reading of the code, it doesn't seem to; but I'm no expert!) If your friend wants to use this new definition all the time, then one way to arrange this is to put the revised function definition (as in the edited file) into his .Rprofile, or put the command source("printCoefmat") into that file. Best wishes, Ted.
> tail(printCoefmat, 15) 74 Signif <- symnum(pv, corr = FALSE, na = FALSE, 75 cutpoints = c(0, 0.001, 0.01, 0.05, 0.1, 1), 76 symbols = c("***", "**", "*", ".", " ")) (以下略) > data(swiss) > summary(lm(swiss$Fertility ~ swiss$Education + swiss$Examination)) (前略) Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 85.2533 3.0855 27.630 <2e-16 *** swiss$Education -0.5395 0.1924 -2.803 0.0075 ** swiss$Examination -0.5572 0.2319 -2.402 0.0206 * --- Signif. codes: 0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1 (略) > # 上記の方法でprintCoefmatを上書きする > source(file="printCoefmat.R") > tail(printCoefmat, 15) # 上書きできているか確認 74 Signif <- symnum(pv, corr = FALSE, na = FALSE, 75 cutpoints = c(0, 0.01, 0.05, 0.1), symbols = c("***", 76 "**", "*")) (略) > summary(lm(swiss$Fertility ~ swiss$Education + swiss$Examination)) (前略) Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 85.2533 3.0855 27.630 <2e-16 *** swiss$Education -0.5395 0.1924 -2.803 0.0075 ** swiss$Examination -0.5572 0.2319 -2.402 0.0206 * --- Signif. codes: 0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1 (略)
Ted, it "clashes"! Functions in the namespace are looked up at first.そしてこうすれば良いという G. Grothendieck 氏(r-help の常連回答者) からの有望な提案(やはり namespace とやらを操作する必要があるそうです、私はうまくいくかどうか未確認)。こうしたいわば R の聖地にある関数を変更した場合、何か思わぬ副作用があるかも知れません。
True, but one can still get the effect by using assignInNamespace. For example, run these two lines (the body(...) <- line is just for illustration here. You want to ultimately replace that line with your redefined printCoefmat: printCoefmat <- function... as discussed by Ted.) body(printCoefmat) <- parse(text = "cat('Greetings from printCoefmat!!!')") ## 次の命令が namespace を操作する魔法の呪文らしい?! assignInNamespace("printCoefmat", printCoefmat, "stats") Now running summary.lm as shown below displays the desired Greetings line: R> example(lm)...snip... R> summary(lm.D90) Call:lm(formula = weight ~ group - 1) Residuals: Min 1Q Median 3Q Max -1.0710 -0.4938 0.0685 0.2462 1.3690 Coefficients:Greetings from printCoefmat!!! Residual standard error: 0.6964 on 18 degrees of freedom Multiple R-Squared: 0.9818, Adjusted R-squared: 0.9798 F-statistic: 485.1 on 2 a
cutpoints = c(0, 0.01, 0.05, 0.1, 1), symbols = c("TottemoYuui!", "KanariYuui!", "MaamaaYuui!", "YuuijyaNai!"))次に
> assignInNamespace("printCoefmat", printCoefmat, "stats") > example(lm) --- snip --- > summary(lm.D9) Call: lm(formula = weight ~ group) Residuals: Min 1Q Median 3Q Max -1.0710 -0.4938 0.0685 0.2462 1.3690 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 5.0320 0.2202 22.850 9.55e-15 TottemoYuui! groupTrt -0.3710 0.3114 -1.191 0.249 YuuijyaNai! --- Signif. codes: 0 `TottemoYuui!' 0.01 `KanariYuui!' 0.05 `MaamaaYuui!' 0.1 `YuuijyaNai!' 1 Residual standard error: 0.6964 on 18 degrees of freedom Multiple R-Squared: 0.07308, Adjusted R-squared: 0.02158 F-statistic: 1.419 on 1 and 18 DF, p-value: 0.249注意:こうして printCoefmat 関数を変更すると rm(printCoefmat) としても、今度は逆に元には戻らないようです。仕方がないからまた同じ手順で既定動作に戻すはめになりました。あまり面白がってあれこれ変更しない方が良さそうです。
学生 (2004-11-19 (金) 19:30:47)
日本語版R 2.00(Win版)を使用しています.
グラフを描くに,x軸やy軸のラベルを縦書きにしたいです.
以前,掲示板に少し書かれていますが,具体的に,どこをどう設定すれば,実現するのかが分かりません.
どなたか,ご存知の方,ご助言頂ければ幸いです.
> plot(1:10, type="n", ylab="") > text(3,3, "A?nB?nC?nD?nE")
x <- rnorm(10) pictex("test.tex") plot(x) dev.off()これで作られたファイル test.tex の最初に次を加える
?documentclass[a4paper]{jarticle} ?usepackage{pictex} ?begin{document}当然最後に次を加える
?end{document}次に test.tex からx,y軸ラベルに相当するところを見つけ編集、つまり
?put {Index} [rB] <0.00pt,0.00pt> at 169.59 5.17 ?put {x} [lB] <0.00pt,0.00pt> at 9.72 154.73をたとえば
?put {インデックス} [lB] <0.00pt,0.00pt> at 169.59 5.17 ?put {?shortstack[r]{ス??[-7mm] ク??[-7mm] ッ??[-7mm] エ}} [rB] <0.00pt,0.00pt> at 2 154.73に変更する。at 以下はテキストをおく位置の x,y 座標ですから、これをいじくれば見栄えの良い位置になります。?shortstack 内のテキストはさかさまにします。??[-7mm] は垂直間隔を調整するためです。さらに微妙な調整をするには pictex の命令を勉強する必要がありそうです。画像ファイルが欲しければ dvips test.dvi で ps ファイルにし、さらに Imagemagick 等の画像ソフトで最終的に欲しいフォーマットに変換する、でしょうか。特に複雑な画像はひょっとすると latex コンパイル時にトラブルが起きるかも知れません。参考画像は latex の一頁分そのままです(でっかく、見苦しくて済みません)。x 軸マークはお遊びです、どうやったかはもうおわかりだと思います。
MI (2004-11-19 (金) 17:51:39)
RでDecisiontreeができると人づてに聞きました。
調べるとtreeのような感じですが、よくわかりません。
どなたか、ご存知ないでしょか?
みち (2004-11-15 (月) 16:12:57)
色々調べてみても分からなかったので、こちらに投稿させて頂きました。
1.Scatterlot3D で Type=h として、プロットした点から底面に垂直線を引かせた後、点を滑らかな線で繋ぐにはどうしたら良いのでしょうか。
2.Scatterlot3Dで軸ラベルを回転させたり移動させたりするにはどうすればよいのでしょうか。
宜しくお願いします。
P (2004-11-13 (土) 18:14:19)
初歩的な質問と思いますが,あれこれと調べてどうしても分からなかったので,質問させていただきます.
例えば,dataという配列もしくはデータフレームがあったとして,A列が1,B列が2を満たすC列を取り出したい場合,
data[,3][data$A==1][data$B==2]
では上手く行かないのですが,どのようにすればよいのでしょうか.
ご教示いただければ幸いです.
> x = matrix(c(2,1,2,2,2, 3,4,3,4,3, 5,6,7,8,9), 5,3) > x [,1] [,2] [,3] [1,] 2 3 5 [2,] 1 4 6 [3,] 2 3 7 [4,] 2 4 8 [5,] 2 3 9 > x[x[,1]==2 & x[,2]==3, ] [,1] [,2] [,3] [1,] 2 3 5 [2,] 2 3 7 [3,] 2 3 9 > x[x[,1]==2 & x[,2]==3, 3] [1] 5 7 9データフレームなら
> x = data.frame(C1=c(2,1,2,2,2), C2=c(3,4,3,4,3), C3=c(5,6,7,8,9)) > x C1 C2 C3 1 2 3 5 2 1 4 6 3 2 3 7 4 2 4 8 5 2 3 9 > x[x$C1==2 & x$C2==3,] # 結果はデータフレームになる C1 C2 C3 1 2 3 5 3 2 3 7 5 2 3 9 > x[x$C1==2 & x$C2==3,]$C3 [1] 5 7 9
ささかま (2004-11-12 (金) 20:33:39)
R2.0.0 mac版を使用しています。OSは 10.3.6です。xcode1.0を入れてあります。
lpSolveというパッケージを導入したいのですが、CRANにはmac用のバイナリはありません。Package Installer を使ってソースからインストールしようとしましたが、
In file included from commonlib.c:17:
commonlib.h:6:20: malloc.h: No such file or directory
make: *** [commonlib.o] Error 1
ERROR: compilation failed for package 'lpSolve'
というエラーが出てしまい、出来ませんでした。
ソースを手動でダウンロードし、ターミナルから
R CMD INSTALL lpsolve
と実行しても同様のエラーが出てしまいました。ルートになってもだめでした。
Rを使い始めて数週間ですし、UNIXは素人です。色々と検索しては見たのですが、解決できませんでした。どなたか解決法をご存知の方、教えていただけないでしょうか?
NK (2004-11-10 (水) 14:44:56)
R(D)COM Server V1.2を今まで使っていて、V1.2をアンインストールして残っていた関係したファイルも全て削除してからV1.35をインストールしましたが,インストールの途中で”C:WINNT?System32?msvcirt.dll Restart Replace failed Move FileEx Failed code 5"というエラーが出てしまい正常にインストールできません。どのように対応すれば良いでしょうか?宜しくお願いします。
fujim (2004-11-04 (木) 22:15:36)
初めまして。近頃Rをはじめようと思い、R-tips,データサイエンス入門
などを読みつついろいろと試しているものです。
環境:Windows2000,R2.0.0jp 実行方法:test.Rファイルを作成し.batファイルより R.exe CMD BATCH --slave --vanilla test.Rで実行
分からない点:例えばグラフィックス参考実例集barplotの項のbarplot03.R等において、出力画像.pngのサイズをどのように変更すればよいのでしょうか?
調べた点:parパラメータを以下のように変更してみた。
1) par(pin=c(5,10))
2) par(fin=c(5,10))
いずれも.outファイルにエラーが出て画像が出力できなくなります。
エラーは以下の通りです。
Error in plot.new() : Figure region too large
Execution halted
Warning message:
calling par(new=) with no plot
宜しくお願いします。
関数 | 単位 | default width & height | default pointsize |
bitmap() | inch | 6 | ‐(適当) |
bmp() | pixel | 480 | 12 |
dev2bitmap() | inch | 6 | ‐ |
jpg() | pixel | 480 | 12 |
pdf() | inch | 6 | ‐ |
pictex() | inch | w=5, h=4 | なし |
png() | pixel | 480 | 12 |
postscript() | inch | ‐ | ‐ |
quartz() | inch | 5 | 12 |
windows() | inch | 7 | 12 |
win.graph() | inch | 7 | 12 |
win.metafile() | inch | 7 | 12 |
win.print() | inch | 7 | 12 |
x11() | inch | 7 | 12 |
X11() | inch | 7 | 12 |
xfig() | inch | ‐ | ‐ |
本に載せるいいネタを戴きました.ありがとうございます! -- 舟尾 2004-11-06 (土) 13:53:27
taku (2004-11-04 (木) 14:19:56)
perlやrubyの様に、一行目に次のようなRのパスを書いて、
一連のコマンドをスクリプトとして実行したいのですが、(ファイル名hello)#!/usr/bin/R
ARGUMENT './hello' __ignored__
というメッセージが出て、普通にRのプロンプトが出てしまいます。
Rプログラムをスクリプトとして実行するにはどうしたらいいのでしょうか?
#!/usr/bin/R x <- rnorm(2000) print(mean(x)などとして,それを chmod 755 hello なんかしても,./hello では実行できませんよね。
$ cat prog x <- rnorm(2000) print(mean(x))そこから入力して R を実行する
$ R --vanilla --quiet < prog > x <- rnorm(2000) > print(mean(x)) [1] -0.007029891こういうことをやりたいのでしょう?
#!/usr/bin/sh R --vanilla --slave <<EOF x <- rnorm(50) y <- rnorm(x) plot(x,y) EOF
alias rb 'R --vanila --slave ?!*'~しておいて,
rb < ファイル名で動くようにしておいたらいかが。
#!/usr/bin/sh R --vanilla --slave <<EOF なんたら EOFなんて書く方が面倒だ。 -- 2004-11-05 (金) 11:12:45
R --vanilla --slave < $1な実行ファイルを/usr/bin/Rsとでもしておけば,
#!/usr/bin/Rsで動く. -- 2004-12-01 (水) 11:15:44
akosuke (2004-10-29 (金) 10:45:01)
自分で作った関数で名前はわかるけど中身を忘れてしまった、、、というような場合に関数の中身を見るための関数はありますでしょうか?
ここでも調べてみたのですが調べ方が悪いのか見つかりませんでした。
くだらない質問で申し訳ありませんがどうぞよろしくお願いします。
AIC (2004-10-26 (火) 21:50:37)
The R Bookの第5章を読んでいる者です。p.109の上から2行目で「ARIMA分析で行ったようにプログラムを組む・・・」と書いてあるのですが、このARIMAモデルではq=0としてpのみ動かすという形にしていますよね。ところがGARCHでパラメタp,qを2つ動かしてAICを最小にするp,qを求めるにはどのようにプログラムを組んだら良いのかが分からないので、教えていただけると幸いです。
また、AICのパラメータ数はこの場合npram<-2と定義していますが、GARCHの
場合、式(5.14)にあるようにω、α、βの3と定義するべきではないのでしょうか?
それから(長くてすみません)GARCHの派生モデルを"fSeries"というパッケジで分析できると聞き、garchと同じ要領で書けばよい(例えばGJRなら
gjr(data,order(p,q,γ))??)と思ってやってみたのですができません。
ご存知でしたら教えていただけないでしょうか。
for (p in 1:3){ for ( q in 1:3){ tmp <- garch(dnikkei, order=c(p,q)) cat("p=", p, "q=",q, ", AIC=", (tmp$n.likeli+p+q),"?n") } }warningなどが出て少し見づらいですが、とりあえず。-- 矢野 2004-10-27 (水) 09:57:52
library(fSeries) tmp <- aparchFit(x=dnikkei, order = list(alpha.lags = 1, beta.lags = 1, delta = 2), opt = list(gamma = TRUE, delta = FALSE, disparm = FALSE), doprint = FALSE) tmpポイントは上でgamma=TRUEとなっている部分です。この 部分がGJR定義式でのγを示します。gamma=FALSEとすると ただのGARCHになります。GJRで日経225を推定すると非対称性があることが 分かります。aparchFitについてより詳しくは
help(aparchFit)としてhelpの内容を参照してください。-- 矢野 2004-10-28 (木) 18:51:27
(2004-10-25 (月) 18:52:25)
とってもFAQだと思うのですが…
1 -> 001,42 -> 042
のように有効桁数(この例だと3ケタ)を決めて,
それに満たない場合は0で埋めるにはどうすればいいでしょうか?
x <- c(1:20) formatC(x,width=2,flag="0")
> x <- c(1:20) > formatC(x,width=2,flag="*")flag にいろいろな文字を指定するとおもしろい結果が出てきます。
質問者 (2004-10-23 (土) 15:43:00)
大変初歩的な質問と思いますが、うまくいかないのでよろしくお願いします。month <- c("Jan","Feb","Mar","Apr","May","Jun", "Jul","Aug","Sep","Oct","Nov","Dec") for (i in 1:12) paste("Hoge.",month[i],".total",sep="") <- 0として、例えばHoge.Jan.totalに0が格納されるようにしたいのですが、paste()の結果がクオートされているせいか、Error: Target of assignment expands to non-language objectとエラーになります。ご指導をお願いします。
> month <- c("Jan","Feb","Mar","Apr","May","Jun", "Jul","Aug","Sep","Oct","Nov","Dec") > for (i in 1:12) eval(parse(text=paste("Hoge.",month[i],".total <- 0",sep="") )) > Hoge.Apr.total [1] 0ついでですが次のようにしても良いわけです。
> for (i in 1:12) eval(parse(text=paste("Hoge",month[i],"total <- 0",sep=".")))また R は月名を表す組み込みの文字列ベクトルを最初から持っています。
>month.abb [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec" > month.name [1] "January" "February" "March" "April" "May" "June" [7] "July" "August" "September" "October" "November" "December"
R-Fan (2004-10-18 (月) 14:38:21)
このサイトでRを知りました。いつも有益な情報をありがとうございます。
表題についてですが、大きなデータをキー項目(下記例ではdate)ごとに分割して処理するプログラムを作っています。subset()によるデータ抽出は大変便利ですがデータが大きくなると処理にかかる時間も増えてしまいます。この処理を高速化したいと考えておりますが、データフレームをキー項目で分割するような組み込み関数はないでしょうか。それともデータが大きくなる場合は、前処理段階でデータファイルを分割しておくのが良いでしょうか。全体のデータサイズは20〜30万件で、取り出すデータは1000〜2000件です。(案1) for (key in sort(unique(maindata$date))){ subdata <- subset(maindata, date == key) #subdataの処理 }自己レスになりますが、subset()を使用するかわりにキー項目に対応する行の索引を作成することで処理時間を4割程度削減することができました。
(案2) idx <- tapply(1:nrow(maindata), maindata$date, function(subidx){return (subidx)}) for (key in sort(unique(maindata$date))){ subdata <- maindata[idx[[toString(key)]],] #subdataの処理 }もっと根本的に改善する方法がありましたらご教授いただければ思います。 どうぞよろしくお願いいたします。
> d <- data.frame(x = factor(c(1,1,1,2,2,3)), y = 10:15) > d[levels(d$x) == 1,] x y 1 1 10 4 2 13
> d[levels(d$x)[1]==d[,1],] x y 1 1 10 2 1 11 3 1 12 > > d[levels(d$x)[2]==d[,1],] x y 4 2 13 5 2 14 > d[levels(d$x)[3]==d[,1],] x y 6 3 15データファイルが分析のたびに付け加わっていくのでなければ,事前にファイル分割しておいた方がよいような気はします。
(案3) by(maindata, maindata$date, function(subdata){ #subdataの処理 } )
恐縮です (2004-10-17 (日) 00:24:05)
Rを使い始めて間もない者です。
Rで色々な関数をinstall.packages()でインストールするのですが、ワークスペースを閉じるたびにまたインストールし直しになります。
一度インストールした関数をそのまま使い続けるにはどう保存すればよいのでしょうか?宜しくお願いします。
撃墜王 (2004-10-14 (木) 15:39:55)
R言語には、INTERSECTとUNIONといったコマンドが存在します。
ただ、入力されるリストが非常に多く存在した場合に、「それら全てのINTERSECT」を取ると、最終的なアウトプットがほぼ0になってしまいます。
また、「それら全てのUNION」を取ると、当然ながらアウトプットが膨大なものになってしまいます。。。どちらを採択するにしても大変悩ましく感じています。
そこで、質問させて頂きたいのは、INTERSECTとUNIONの中間的のようなもの、もしくは考え方などがあったら是非アドバイスいただければと思います。
なお、自分の中のイメージとしては
入力されるリスト 100個
1リストあたりに含まれる変数名(Aomori,Miyagi,Hokkaido...etc) 100個
全てのINTERSECTを取った場合 最終的に残る変数名 3個(少なすぎる。。。)
全てのUNIONを取った場合、 最終的に残る変数名 1024個(多すぎる。。。)
そこで、単純なUNIONではなくて、1つのリストにしか含まれないような変数名は除くようにしたいと思っています。
具体的な例をさらにあげますと
list1 Kanagawa,Tokyo,Saitama
list2 Chiba,Kanagawa,Tokyo
list3 Tokyo,Irabaki,Gunma
Intersect = Tokyo,Union=Kanagawa,Tokyo,Saitama,Chiba,Ibaraki,Gunma
となってしまいますが、上のようなリストの場合Kanagawaはlist1,2に共通して含まれ、唯一list3には含まれないような形なので、これは採用するといったようなUnionの考え方とIntersectの考え方をいっしょくたにしたような方法と言うのは実現可能でしょうか。色々調べたのですが、よい情報がみつからなかったので、諸先輩方アドバイスの程どうぞよろしくお願いいたします。
> top.n <- function(lst, n) + { + result <- table(unlist(lst)) + result[result >= n] + } > lst <- list(no1=c("aa", "bb", "cc"), no2 =c("bb", "dd", "ff", "hh"), no3=c("cc", "ff", "xx", "yy"), no4=c("aa", "cc")) > top.n(lst, 3) cc 3 > top.n(lst, 2) aa bb cc ff 2 2 3 2探すのがめんどいから作っちゃった。関数にするまでもないが。仕様が詳細に決まれば,お化粧はいかようにも。 -- 青木繁伸 2004-10-14 (木) 16:57:25
竹内 (2004-10-10 (日) 19:42:29)
こんにちは。Rを使い始めてまだ5日目の初心者です。使用環境は Mac OS 10.3)で Rの versionは 1.91(英語版)です。 R-Bookの p59にある read.csv("ファイル名 ")で CSVファイルを読み込ませようとしても次のようなメッセージが出てしまいます。Error in file(file, "r") : unable to open connection In addition: Warning message: cannot open file `test.csv'R-Bookや googleで一応は調べた(つもり)なのですが、 errorが何を意味しているかわかりません。どなたかご教授をお願いします。
R初心者 (2004-10-07 (木) 23:49:37)
Rで株価の時系列分析をしようとしている者ですが、frequencyについて、年次のデータであれば1を、月次のデータであれば12とすればよいと分かるのですが、株価のように日次データでしかも日曜日の値がない場合、frequency=365とするとずれが生じて横軸の値が正確でなくなるのですが、どのように解決すればよいのでしょうか?
> ts(1:10, frequency = 5) Time Series: Start = c(1, 1) # 始点は第一週の第1日と解釈 End = c(2, 5) # 終点は第二週の第5日と解釈 Frequency = 5 [1] 1 2 3 4 5 6 7 8 9 10
ピエロ (2004-10-07 (木) 22:18:58)
RでGARCHモデル分析する際、パラメータ推定は何の方法を用いているのでしょうか?
擬似最尤法とかいうやつでしょうか?
あと、Rでの時系列分析の細かな手法を扱っている本あるいはサイト等ございましたら、教えて頂けると幸いです。
宜しくお願い致します。
ぷーすか (2004-10-07 (木) 20:17:03)
散布図行列で、プロット点をドットに変え、y=xの直線を書きもうとして、
pairs(x,panel=function(x,y){points(x,y,pch=".");abline(0,1,col=2)})
でうまくできました。
ここでさらに各図のプロット範囲を同じにしようとxlim、ylimの指定を追加しようと思いましたが、
pairs(x,xlim=c(-3,3), ylim=c(-3,3), panel=function(x,y){points(x,y,pch=".");abline(0,1,col=2)})
ではエラーが出てしまいます。
プロット範囲以外のカスタマイズはあきらめ、
pairs(x,xlim=c(-3,3), ylim=c(-3,3))
とすれば、warningは出ますが、一応プロット範囲は制御できました。
プロット内容とプロット範囲のカスタマイズを両立させる方法はないのでしょうか?
data(USJudgeRatings) pairs(USJudgeRatings[1:3], panel=function(x,y, ...) {points(x, y, pch="."); abline(0,1,col=2)}, xlim=c(5, 10), ylim=c(5, 10) )
(2004-10-04 (月) 19:18:27)
eclipse (eclipse-SDK-3.0-linux-gtk.zip)をダウンロードし、3.0 用 Plug-inを入れました。eclipseを起動させたのですが、はて、使い方が分かりません。Window->Open Perspective->Other->StatET perspectiveを選択してみましたが、新規プロジェクトでRを選ぶこともできず、最初から躓いています。Eclipseを用いたRの使用について分かりやすく解説したサイトはないでしょうか?
初心者 (2004-09-27 (月) 11:51:31)
Rの初心者ですが、どうやってエクセルファイルのデータをRに取り込むんでしょうか?よろしくお願いいしマース〜〜
tofu (2004-09-21 (火) 11:11:26)
度数分布をヒストグラムにしたときののX軸の目盛の数字、目盛り幅を変えるのはどのようにすればいいのでしょうか?区間の境界値をいれたいのですが…教えてください。
x <- rnorm(2000) hist(x, axes=F) axis(1, at=c(-1.96,0,1.96), labels=c("-1.96 SD", "Zero", "1.96 SD"))
KabuTaro (2004-09-20 (月) 04:02:13)
plot(c(1,2,3),c(4,5,6),type="p")
とすると(1,4),(2,5),(3,6)に丸印でプロットされますが
これを単にドットだけにするにはどうしたらよいでしょうか?
pchを弄くっても形が変わるだけでうまくいきません。
よろしくお願いいたします。
ちょろべぇ (2004-09-14 (火) 18:57:31)
gregmiscパッケージのheatmap.2を用いてヒートマップを作図しております。
heatmap.2は様々なパラメータ設定が可能であり、自分としては、distfun,hclustfunを下記のように設定してHeatmapを書きたいと思っております。
(希望)
?distfun→距離関数だと思われるので、ユークリッド距離を計算したい
?hclustfun→average linkageで結合したい
?できればdivisiveではなくagglomerativeでクラスタしたい
ただ、heatmap.2(data,distfun=dist(method="euclidian"), hclustfun=hclust(dist(method="euclidian"),method="average"), dendrogram="both")
のように設定しても、hclustfun部分でエラーが帰ってきてしまいます。(T_T)
かなり愚かな質問だとは思いますが、アドバイスありましたらどうぞよろしくお願いいたします。
Hclust <- function(d) hclust(d, method = "average", members=NULL) heatmap.2(data, hclustfun=Hclust, dendrogram="both") # もしくは一度に済ませるには heatmap.2(data, hclustfun=function(d) hclust(d, method = "average", members=NULL), dendrogram="both")
Error in as.matrix(x) : Argument "x" is missing, with no default
my.dist <- function(x) dist(x, method="binary") my.hclust <- function(d) hclust(d, method="ward") hm <- heatmap(blablabla, distfun=my.dist, hclustfun=my.hclust)
library(gregmisc) data(mtcars) x <- as.matrix(mtcars) rc <- rainbow(nrow(x), start=0, end=.3) cc <- rainbow(ncol(x), start=0, end=.3) my.hclust <- function(d) hclust(d, method = "average") hv <- heatmap.2(x, col = cm.colors(256), scale="column", hclustfun=my.hclust, RowSideColors = rc, ColSideColors = cc, margin=c(5,10), xlab = "specification variables", ylab= "Car Models", main = "heatmap(<Mtcars data>, ..., scale = ?"column?")", tracecol="green", density="density", dendrogram="both") # 形式 hclustfun=function(d) hclust(d, method = "average") でも可
#ref(): The style ref(filename,pagename) is ambiguous and become obsolete. Please try ref(pagename/filename)
Kei (2004-09-11 (土) 16:54:52)
実験のデータをエラーバーで表現したいですが、R言語でどのふうすればいいのかよく分かりません。一応、自分で作ってみました。内容は以下のようです:mybar <- function(X) { n <- nrow(X) df <- n-1 X.mean <- apply(X,2,mean) X.var <- apply(X,2,var) d.error<-qt(0.975,df)*sqrt(X.var/n) d.error.x <- (0.2 + 1) * 1:5 - 1/2 # エラーバーを表示する位置(x座標) barplot(X.mean, names.arg=colnames(X), ylim=c(0,ceiling(max(X.mean+(d.error)))), col=c("blue", "green", "red", "yellow")) arrows(d.error.x, X.mean, d.error.x, X.mean+ d.error, angle=90) } mybar(分析するデータ[,列:列])軸の調整方についてちょっと質問したいですが、教えてください。
plot(c(x軸の最小値, 同最大値), c(y軸の最小値, 同最大値), type="n", # 描画しない xaxt="n", # x 軸を描かない(必要なら) yaxt="n", # y 軸を描かない(必要なら) その他のパラメータ) : points(...) lines(...) axis(...) その他諸々の描画関数健康のために使いすぎに注意。 -- 青木繁伸 2004-09-11 (土) 17:35:13
TETSU (2004-09-10 (金) 11:51:50)
2つの棒グラフをbarplot関数を用いて描画したのですが、これらのグラフを比較するために、積み上げではなく重ね合わせで描画したいと思っています。色々と調べてみたのですがうまい方法が見つかりませんでした。どなたか描画法をご存知でしょうか?
barplot(VADeaths, border = "dark blue", space=c(-0.5))
HOJO (2004-09-10 (金) 11:39:45)
欠損値を含む二つの変数について,相関値をcor(x,y,use=pairwise complete observations)で計算しました.そうしたところ,全体では0.919だったのに,上位30件では,0.910,次の70件では,0.395, 残りの100件のデータでは,0.045となってしまいました.このようなことはどうして起こるのでしょうか.層別の方法に何か問題があるのでしょうか.
> gendat2 # 任意の相関係数を持つデータを生成する関数 function(nc, r) { z <- matrix(rnorm(2*nc), 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)) } > d1 <- gendat2(10,0) > d2 <- gendat2(10,0)+10 > cor(rbind(d1,d2)) [,1] [,2] [1,] 1.0000000 0.9615385 # プールすると相関は0.962 [2,] 0.9615385 1.0000000 > cor(d1) [,1] [,2] [1,] 1.000000e+00 -1.010639e-16 # プールする前は無相関 [2,] -1.010639e-16 1.000000e+00 > cor(d2) [,1] [,2] [1,] 1.00000e+00 3.27047e-16 # プールする前は無相関 [2,] 3.27047e-16 1.00000e+00極端な場合,層別では負の相関,全体では正の相関ということだってあるんですよぉ!
(2004-09-10 (金) 02:07:41)
2元配置の分散分析(完全無作為)をする場合に
交互作用がある場合,
1.「単純主効果の検定」,
2.「単純主効果の多重比較」
をしたいのですが,Rではどのよなプログラムを書けば良いのでしょうか.
参考までに, SASでの単純主効果についての情報と,そのデータを以下にリンクします.
例:http://koko15.hus.osaka-u.ac.jp/~kano/lecture/faq/interaction.doc
データ:http://mat.isc.chubu.ac.jp/R/tech.html#CRFpq
ご存知の方,教えて頂ければ幸いです
HOJO (2004-08-31 (火) 16:06:53)
たびたびですみません.RcmdrでIndexPlotなどを用いてグラフを作画しようとしても,変数選択欄に必要な変数名称が全ては現れず,作画することができません.またこの内容は作画すべきグラフの種類によっても異なりますがこれはどうしてでしょうか.なおPCは,W2Kを利用しています.
HOJO (2004-08-31 (火) 11:26:52)
エクセルで作成した200行,20列程度の数値データのみのCSVファイルをRcmdrで読み込んだ時に次のエラーメッセージが出ます。RはV.1.9.0です.
1. Error: unable to open connection
2. data is not a data frame and cannot be attached
これはどのような点に気をつければよいのでしょうか。
(2004-08-24 (火) 19:12:06)
正確な用語がわからないのですが
SASではTNONCT関数で算出できる,
「t分布の非心パラメータ(引数は,x, df, prob)を求める関数」は,
Rにないでしょうか?
http://support.sas.com/91doc/getDoc/lrdict.hlp/a000245960.htm
例えば,
x <- 3.1; df<- 58; prob <- .975;
?(x,df,prob)1.04844
と求めたいのです.
> TNONCT <- function(x, df, prob, interval = c(-30, 30)) { temp <- function(ncp) pt(x, df, ncp) - prob uniroot(temp, interval)[[1]] } > TNONCT(3.1, 58, 0.975) [1] 1.048444
> TNONCT <- function(x, df, prob, interval=c(0, 37.62)) + { + uniroot(function(ncp) pt(x, df, ncp)-prob, interval)$root + } > TNONCT(3.1, 58, 0.975) [1] 1.048444
> TNONCT(3.1, 58, 0.975) [1] 1.048444 > TNONCT(-3.1, 58, 0.025) [1] -1.048444という関係があるようです。interval=c(-37.62, 37.62) としておいた方が無難ですね。
川村健介 (2004-08-18 (水) 13:14:01)
お世話になります。
行列をグラフィカルに表示するimage()関数の色調を任意に割り当て,さらにその色を凡例(棒)で表示するにはどうすればよいのでしょうか。
例えば配列の値が0〜0.88の間にあった場合,0.0〜0.5に白を割り当て,0.5〜0.9の間を0.1間隔でGreyの色調を与えたいのですが。
(2004-08-18 (水) 00:22:26)
10ほど並べた散布図で、最初の1つだけ軸の数値を表示し、残りの9個は軸の数値を省略したいとのですが、ラベルはxlab="",ylab=""でOKですが、数値の方はどうすればよいか分かりません。よろしくお願いします。par(mfrow=c(2,5)) plot(sin) plot(sin, xaxt = "n", yaxt = "n", xlab="", ylab="") plot(sin, xaxt = "n", yaxt = "n", xlab="", ylab="") # あと 7 回繰り返し上のような感じで如何でしょうか?ご参考になれば幸いです.-- 舟尾 2004-08-18 (水) 00:40:00
- ありがとうございます。目的の図を得ることができました。 -- 2004-08-18 (水) 11:21:11
石川誠 (2004-08-16 (月) 01:26:14)
お世話になります。
Rで扱える統計手法を知りたいのですが、何処かに日本語で一覧のようなものはないでしょうか?
川村健介 (2004-08-14 (土) 09:05:51)
初めて投稿させていただきます。
630*630の配列の値の中から,上位5位までの要素の位置(x,y)をしるいい方法はありませんか?
which.maxだと最も高い値の位置,例えば39726と帰ってきます。
できれば,上位から[326,52],[555,156]...といった感じで位置を知りたいのですが。
> y [,1] [,2] [,3] [1,] NA 0.7122784 0.7761505 [2,] 0.47935820 0.4700606 0.4547836 [3,] 0.02593524 0.8849352 0.3914027 > yy = matrix(length(y)+1-rank(y, na.last=F), dim(y), byrow=FALSE) > y [,1] [,2] [,3] [1,] 9 3 2 [2,] 4 5 6 [3,] 8 1 7 > lapply(1:5, function(i) which(yy==i, arr.ind=T)) [[1]] row col [1,] 3 2 [[2]] row col [1,] 1 3 [[3]] row col [1,] 1 2 [[4]] row col [1,] 2 1 [[5]] row col [1,] 2 2
# ベクトル(行列、配列も可)の n 番目に大きな値を求める関数 # タイ や NA があっても使える(はず?) > nthmax function(x, n) { if ( !(n %in% 1:length(x)) ) stop( "n is not in 1:length(x)" ) if (n == 1) return(max(x, na.rm=TRUE)) else for ( i in 1:(n-1) ) { x <- x[x != max(x, na.rm=TRUE)] if ( length(x) == 0 ) stop("no 'n'-th max element in x") } return(max(x, na.rm=TRUE)) } > x = matrix(runif(9), 3,3) > for (i in 1:length(x)) print( which(x==nthmax(x,i), arr.ind=T) ) row col [1,] 1 1 row col [1,] 3 1 row col (途中略) row col [1,] 1 2 > x[1,2] <- x[1,1] # タイを入れる > for (i in 1:length(x)) print( which(x==nthmax(x,i), arr.ind=T) ) row col [1,] 1 1 # <- 最大値が二つある [2,] 1 2 row col (途中略) row col [1,] 1 3 Error in nthmax(x, i) : no 'n'-th max element in x > x[1,2] <- NA # 欠損値を入れる > for (i in 1:length(x)) print( which(x==nthmax(x,i), arr.ind=T) ) row col [1,] 1 1 row col (途中略) row col [1,] 1 3 numeric(0) # 最後がエレガントでない(欠損値のせい) Warning message: no finite arguments to max; returning -Inf
> x = matrix(runif(9), 3,3) > which(x==max(x), arr.ind=T) row col [1,] 2 3 > x[which(x==max(x), arr.ind=T)] <- -Inf > which(x==max(x), arr.ind=T) row col [1,] 1 3 > x[which(x==max(x), arr.ind=T)] <- -Inf > which(x==max(x), arr.ind=T) row col [1,] 3 2 ----- > x[ print(which(x==max(x), arr.ind=T)) ] <- -Inf # 一行で済ませるにはこうする
> x <- matrix(runif(630*630),630) > > max.at <- function (x, top=10) + { + result <- matrix(0, top, 3) + for (loop in 1:top) { + mx <- x[1,1] + for(i in 1:630) { + for (j in 1:630) { + if (x[i,j] > mx) { + mx <- x[i,j] + mxi <- i + mxj <- j + } + } + } + result[loop,] <- c(mxi, mxj, mx) + x[mxi, mxj] <- -Inf + } + result + } > > system.time(max.at(x)) [ 1] 78.30 4.31 89.11 0.00 0.00 > max.at(x) [,1] [,2] [,3] [1,] 466 95 0.9999976 [2,] 239 31 0.9999970 [3,] 205 620 0.9999952 [4,] 595 183 0.9999935 [5,] 500 609 0.9999923 [6,] 37 556 0.9999901 [7,] 292 3 0.9999889 [8,] 515 278 0.9999818 [9,] 539 237 0.9999802 [10,] 483 331 0.9999786速くしたいなら,C ででもプログラムすればいいだけです。プログラムするにはアルゴリズムが必要ですが,これはアルゴリズムというような大げさなものでもないし。-- 青木繁伸 2004-08-14 (土) 19:55:23
max.at2 <- function (x, top=10) { n <- nrow(x)*ncol(x) col <- col(x) row <- row(x) o <- order(x) cbind(row[o], col[o], x[o])[n:(n-top+1),] } > system.time(max.at2(x)) [1] 2.52 0.18 2.80 0.00 0.00 # すんばらしく,速いわ! > max.at3(x) [,1] [,2] [,3] [1,] 2 3 NA # NA はこの位置に入る [2,] 18 178 99.99992 [3,] 549 252 99.99988 [4,] 208 115 99.99891 [5,] 182 140 99.99866 [6,] 308 597 99.99823 [7,] 207 156 99.99820 [8,] 616 112 99.99811 [9,] 499 249 99.99801 [10,] 355 79 99.99794本当は,以下のようにしたいのだが,decleasing=TRUE が効かない??
max.at3 <- function (x, top=10) { n <- nrow(x)*ncol(x) col <- col(x) row <- row(x) o <- order(x, decreasing = TRUE) cbind(row[o], col[o], x[o])[1:top,] }いずれにせよ,
max.at4 <- function (x) { o <- order(x) cbind(row(x)[o], col(x)[o], x[o]) }とすれば,小さい順の結果は全部得られるので,必要なところだけ(いくらでも)使えばよい。NA も考える必要はない?(考えて処理すればよい) -- 青木繁伸 2004-08-14 (土) 21:21:49
○田五郎 (2004-08-10 (火) 01:45:09)
こんばんわ。○田です。
この度はstasライブラリ内のheatmap関数について相談させていただきたく。
statsライブラリをロードして、heatmapがかけることはわかったのですが、
?heatmap内のデモスクリプトを書くなどしてみましたが、
heatmap関数の引数であるcol引数の種類が良くわかりません。。。
自分としては正の値が赤系、マイナスの値を青系で表示したいのですが
デモのcol = cm.colors(256)はレインボー系、、、
col = topo.colors(16)は緑と薄いこげ茶系と、自分の望んでいる色が出せないんですよね。。ググってもあまり良い情報も無く、もしみなさんどこか素敵なソース(情報源)等お知りでしたら、ご教授ください。
どうぞよろしくお願いしますm(_ _)m。
rainbow(n, s = 1, v = 1, start = 0, end = max(1,n - 1)/n, gamma = 1) heat.colors(n) terrain.colors(n) topo.colors(n) cm.colors(n)と同じように使えます。一般的には個人で配色を決めるよりはこうした慎重に選択された配色を使う方が賢いです。-- 2004-08-10 (火) 08:05:42
## help(brewer.pal) より mypalette<-brewer.pal(7,"Greens") image(1:7,1,as.matrix(1:7),col=mypalette,xlab="Greens (sequential)", ylab="",xaxt="n",yaxt="n",bty="n")
data(volcano) x <- 10*(1:nrow(volcano)) y <- 10*(1:ncol(volcano)) image(x, y, volcano, col = c(topo.colors(12)[1:4], heat.colors(8)[c(1,3,5,8)]), axes = FALSE)
ちょろちゃん (2004-08-08 (日) 15:34:16)
お世話になっております。
Rのmultcompライブラリのsimtest、method=dunnettを
利用しております。
同じデータセットを入力した際に、simtestのダネットの結果中、
T値は常に一定の値が帰ってくるのですが、P値の小数点4桁よりも小さな値は
計算するたびに異なっております。
どこで値が異なってしまったか追跡したところ、mulcompから呼び出されている
mvtnorm内でP値を計算するときにどうやら異なった値が帰ってきているようでした。
これは仕様なのでしょうか、それともmvtnormのバグなのでしょうか。
もしご存知の方がいらっしゃいましたらアドバイスいただければ幸いです。
どうぞよろしくお願いいたします。
Randomized quasi-Monte Carlo methods are used for the computations.とか
Value: error: estimated absolute errorとか読めますが。
はまちゃん (2004-08-03 (火) 18:12:58)
お世話になっております。a<-matrix(rnorm(96),c(16,6)) for (i in 2:6) t.test(a[,1],a[,i])のように、繰り返しでt検定を行う場合に、結果が表示されません。
なにか方法があったら、教えてお願いできますか?
ほかの検定でも同じことが起こるのでしょうか?宜しくお願いします。
a<-matrix(rnorm(96),c(16,6)) for (i in 2:6) print(t.test(a[,1],a[,i]))これで,うまくいくでしょう。
x = sapply(2:6, function(i) {a<-matrix(rnorm(96),c(16,6)); t.test(a[,1],a[,i])} )
結果は [,1] [,2] [,3] statistic -0.3054952 0.3751029