【R言語】統計解析フリーソフトR 第5章【GNU R】
見れば分かるだろ。
Rコマンダーのカスタマイズについての質問です。
判別的中率の計算の途中で
次のようなコマンドを実行したいのですが、
hanbetsu.result <- table(データセット$朝食有無, データセット$予測群)
↓これ、だとうまくいきません。
doItAndPrint(paste("hanbetsu.result <- table(",ActiveDataSet(),"$",tclvalue(lhsVariable),",",ActiveDataSet(),"$予測群)" sep=""))
,(コンマ)をペーストするにはどうしたらいいのでしょうか?
>>5 Rcmdrはまったく分からないんだけど、
> ,(コンマ)をペーストするにはどうしたらいいのでしょうか?
","で合っているよ。うまくいかない原因は別にあると思うよ。
いずれにせよ、読んでいる人が再現できるものを提示しないと、
誰も助言できないよ。
特に、GUIな人は、トラブルを全て「うまくいきません」ですませてしまって、
読んでいる側は意味不明。←他人からは解決する気がないと判断される
あと、いちいちsep=""と書くのは面倒ではありませんか?
私はpaste0()を使います。
うまくいきました。
うまくいったのはこちらです。
doItAndPrint(paste("hanbetsu <- table(", ActiveDataSet(), "$", tclvalue(lhsVariable), ",", ActiveDataSet(), "$予測群)", sep=""))
コンマの後の空白をきちんと空けたのが良かったようです。ありがとうございました。
>>7 > コンマの後の空白をきちんと空けたのが良かった
違うと思う。
>>5 はsepの前にあるべきコンマが抜けていたから。
>>8 比較するとそうですね。
ありがとうございます。勉強になりました。
10 :
132人目の素数さん:2013/10/12(土) 18:44:10.94
実にどうでもいい話かもしれませんが、RってTeXみたいに書き方の規定ありますか?
フォントとか配置とかそういう感じの
コイツら、無職の、女性恐怖症の、ゴミ・クズ・カス・無能・虫けらのクソガキども!
無職のクソガキども! 大変なコトになるな!
憲法改正だ! 96条を改正してから、9条を改正する。 そして、何条を改正するか?
18条だ! そうして、国家総動員法ができて、オマエたち、無職のクソガキどもは、真っ先に徴兵だ!
オマエたちは、頭デッカチの虚弱児・ひ弱だから、最下等兵! すぐ戦死だ!
アハハハハハハハハハハ!!!!!!!!!!!!!!!!!!!!
死にゆく、クソガキどもに、大伴家持の詩を贈ってやろう!
海行かば 水浸く屍 山行かば 草むす屍 大君の 辺にこそ死なめ かえりみはせじ!
14 :
10:2013/10/13(日) 11:55:33.09
>>13 すいません確かに意味不明でした
文章中に「TeX」と書くときは「全部大文字でEはTより下で・・・が本当の表記だけど出来ないならしょうがないからTeXと書くように」とか決まっていたと思います
Rも同様に書式の決まりがありますか?
というのも、文章で「R」ただ1字を書くとどうも可読性が悪い気がしてしまって、何かいい方法はないかと・・・フォントくらい変えた方がいいかと悩み中です
>>14 全く文意をくみ取れていなかったようだorz
¥TeX{}のR版を探しているといことだよね。
R界隈の論文を見れば分かると思うけど、*ない*です。
journal of statistical softwareのLaTeXクラスファイルに定義されていた気もするが、
標準化されていない。
スライドなど少々の遊びが許される場合で、Rの可読性を高めるたいなら、
「全ての解析は¥includegraphic[with=1.5zw]{Rlogo-4.png} ver.3.01で行いました。」
などと、ロゴを使えばどうか。
ttp://developer.r-project.org/Logo/
16 :
10:2013/10/13(日) 13:16:07.80
>>15 なるほど、ロゴを使うというのは盲点でした
今度試してみます
ありがとうございました
17 :
132人目の素数さん:2013/10/22(火) 20:02:55.39
積み立て棒グラフ出したいんだけど行列の要素にマイナスの値はいってるとちゃんと
表示されなくておかしくなる。そういうものなの?
>>17 おかしくなるも何も、負の値を含む積み上げって、
どういう図を期待しているんだ。
> barplot(matrix(c(1:3, -1, 4:5),3))
予想通りの図になるが、これがおかしいということ?
19 :
132人目の素数さん:2013/10/22(火) 21:02:15.43
>>18 サンクスwそのグラフで俺の頭がおかしかった事に気がついたw
20 :
132人目の素数さん:2013/10/25(金) 00:01:31.53
Rコマンドー
これでMC法使えるオススメのマニュアル(書籍)紹介して下さい。
22 :
132人目の素数さん:2013/10/28(月) 05:58:06.04
アメリカサマータイムにできないんだけど。なんで?もとからないのか?
ヨーロッパサマータイムあるのに意味分からん。
23 :
132人目の素数さん:2013/10/28(月) 06:58:08.95
あっできた。
EDT指定してもできなかったがAmerica/New_Yorkにしたらできたわ。イミフだわ。
25 :
132人目の素数さん:2013/10/28(月) 11:13:49.49
>>24 引数にEDT入れたらそんなのありませんって言われたw
EST5EDTって入れればいいのかな?まぁ"America/New_York"って入れたらできたから解決したけど。
ちなみにBSTイギリス夏時間もだめだった。でもWET西ヨーロッパ夏時間はちゃんと認識した。
できたりできなかったりよくわからんわ。
変数A,B,C,D,Eがあるデータを2グループや3グループに可能な限り均等に分けたいんですが、
層別ランダム割付という手法があるというところまでは調べられました。
Rでランダム割付が可能と聞いたのですが、やり方を解説しているサイトなどありませんか?
またはご存知の方いらっしやいませんか?
28 :
27:2013/10/31(木) 21:28:55.98
29 :
132人目の素数さん:2013/11/09(土) 14:18:52.90
ARモデルのAICに関する質問です。
ar(データ)
データ$aic
では、相対的なAICの値しか表示されないため、最適な次数はわかってもAICの値がわかりません。
また、arima(データ, order=c(x,0,0))
で行うと定数項が含まれているため純粋なARモデルのAICを求める事が出来ません。
ARモデルのAICを求める方法、教えてください。
>>29 > ar(lh)$aic
0 1 2 3 4 5 6
18.3066645 0.9956542 0.5380214 0.0000000 1.4903597 3.2127890 4.9932119
7 8 9 10 11 12 13
6.4694960 8.4625678 8.7411958 10.7408834 12.5338637 14.4847850 16.4617958
14 15 16
18.0437158 17.4398358 19.3449467
> library(timsac)
> unimar(lh)$aic
[1] -34.34604 -46.87367 -47.40513 -46.86175 -44.86637 -43.20116 -41.34344
[8] -40.37922 -38.39713 -41.00437 -39.38885 -37.39977 -35.53922 -33.63709
31 :
132人目の素数さん:2013/11/09(土) 16:34:03.27
>>30
ありがとうございます。
無事できました。
Rの教科書で一番オススメなのはなんでしょうか?
33 :
132人目の素数さん:2013/11/10(日) 19:25:09.00
windowsのエクスプローラーからディレクトリの場所をコピペすると、
例えば(E:\R)となりこのままではsetwd("E:\R")と行うことができません。
いつもはsetwd("E:\\R")やsetwd("E:/R")に手で修正しています。
何かもっと簡単な方法はないでしょうか?
>>33 Windowsをやめると幸せになれます
>>32 人による。
なお、コーディングはひたすら他人のコードを読むのが上達の近道。
>>33 "E:\R"を"E:\\R"や"E:/R"に自動置換してsetwd()に渡すオレ様関数を書けばよいのでは。
my.setwd <- function(p) setwd(nomalizePath(p))
こんな感じかな。こちらはWindowsじゃないので未検証。
ちなみに、文化の違いだと思うけど、
私は、対象ディレクトリに移動して、
ごにょごにょ作業や確認をしてからRを起動するので、
setwd()が必要な場面に出会わない。
>>32 何をやりたいかによる。
しかし確実に言えるのは、日本人(含在日)の本は全てダメ。
>>36 文系で、あまり高度でない実験結果や計量分析のまとめなど、普通はSPSSとかでやる人が多いことをRでやるばあいは?
かまってちゃん登場
R in Action や著者のページをまず読んで、
R Cookbook (邦訳あり)で忘れたことを参照したり、
R Graphics Cookbook でグラフの書き方を学んだら?
あとは、reshape や plyr の使い方を作者の論文で勉強しておくと便利
>>40 > R in Action
おぉ、これは初めて知った。
講義に使えそう。
ENTERを押すと次のグラフが表示されるようなときに、そのグラフ全部を並べて表示するにはどうしたらいいですか?
>>43 plot(〜〜)を何度もする場合は確かにそれでなりますが、今は一回のplot(〜〜)で
「クリックまたはENTERキーを押すと次のページに移ります」って出て
エンターを押すたびに次のグラフがプロットされるようなものなので出来ません。
par(ask=TRUE)
なんかおかしな。
ask=TRUEになっていても、mfrow=c(1,1)でなければ、
一度に描画されると思うが。
>>44は何か勘違いをしていないか。
具体的に再現できるコードを示して。
例えば
library(vars)
data(Canada)
plot(VAR(Canada))
などです。
>>47 どんだけ特殊なケースを持ち出すんだよ。
plot.varest()って、ここまで変態な関数にはびっくりだ。
vars:::plot.varest を見たら分かると思うけど、layout()を使っている時点で、
mfrowで制御できないし、
if (nv > 1)
par(ask = TRUE)
ってハードコーディングされているから、関数のオプションでどうにかなるものでもない。
結論は、あきらめろ。
>>48 なるほど
難しいことはわかりませんがどうにもならないということだけはわかりました
別々に保存して並べて貼るぐらいで我慢します
ありがとうございます
>>49 厳密に言うと、どうにもならないこともないんだけど、
必要な労力は、その目的にペイしないと思う。
pdf(file="hoge.pdf")
plot(VAR(Canada))
dev.off()
ってして、3ページになっているhoge.pdfをぐりぐりスクロールして見るのはだめなの?
3つをきちんと並べて1枚の図にしなくてはいけないの?
51 :
132人目の素数さん:2013/11/14(木) 23:29:34.23
文字列”123,456,789.123”を数値に変換するにはどうすれば良いのでしょうか?
一つの場合はカンマを取って変換を行えば良いとわかるのですが、
文字列の数が200あるのといくつかの文字列の小数点の位置が僅かに異なるため、効率よく行う方法が知りたいです。
>>51 それ専用の関数を見たことがあるが、どのパッケージだったか覚えていない。
5000パッケージなんて数が増えすぎ。
まぁ、普通に置換すれば良いと思うが。
> a <- "123,456,789.123"
> options(digits = 15)
> as.numeric(gsub(',','',a))
[1] 123456789.123
>>52だが、誤解されるかも知れないので、
先回りするが、文字列の数がいくつあろうが、
小数点の位置が異なろうが、
>>52の提案はそのまま通用する。
> A <- rep(a, 10)
> A[5] <- paste0(A[5], "4")
> A[6] <- "9.1"
> A
[1] "123,456,789.123" "123,456,789.123" "123,456,789.123" "123,456,789.123"
[5] "123,456,789.1234" "9.1" "123,456,789.123" "123,456,789.123"
[9] "123,456,789.123" "123,456,789.123"
> as.numeric(gsub(",","",A))
[1] 123456789.1230 123456789.1230 123456789.1230 123456789.1230 123456789.1234
[6] 9.1000 123456789.1230 123456789.1230 123456789.1230 123456789.1230
>>50 あぁこれは確かに楽でなかなかいい感じだなー
管理するにしてもこっちの方がよさそう
55 :
132人目の素数さん:2013/11/15(金) 00:55:31.21
>>53 ご丁寧にありがとうございます。
無事できました。
狸
○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●
●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○
○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●
●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○
○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●
●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○
○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●
●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○
○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●
●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○
○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●
●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○●○
SEXPなんていやらしい型なんだ。
>>57 そんな小中学生みたいな反応は好きにすればよいが、
REXPじゃなくて何でSEXPなんだろうかと疑問に思ったまま幾数年。
とあるアプリのC言語のDLLから、Rとデータのやり取りをしたいのですが、
難易度は高いですか?というかできますか?
>>59 出来ます。
難易度は人によりますが、
そのような質問をする人には無理だと思います。
>>60 ありがとう。できることがわかれば、時間をかければなんとか、、。
63 :
132人目の素数さん:2013/11/20(水) 23:38:43.40
すみません
tmp <- sample(1:150, 100)
のtmpって何を表してるんですか?
参考書のどこにも説明がなくて困ってます
>>63 何を表しているのかという問いに対する答えはRオブジェクトです。
tmpという文字列はRオブジェクトにつける名前で、
ユーザが任意に決めます。
>>62 ヒントありがとうございました。MinGWですか、、VC++で無理目だったらMinGWでアタックしてみます。
時間はあるんで、いろいろ勉強していきます。
メモリが足らんが高くて買う気しない
67 :
132人目の素数さん:2013/12/10(火) 07:27:48.64
例えば
result <- lm(Sepal.Length ~ ., data=iris)
とでもして、result$coefficientsを取り出したいとき、
result$coe
でも出ちゃうんですが、この補完機能(?)は切れないのでしょうか?
ちょっとスペルが足りなくてもエラーがでないのでいつか問題が起きそうな気が
してしまうのですが、それとも心配しすぎでしょうか
>>67 逆に、プログラムの内部で、
result$coefficientsの代わりにresult$coeとコーディングしているものがあれば、
プログラムが動かなくなるけど、そういう副作用はいいの?
一意の場合は省略可能というルールがある限り、そのルールでRが動いているのだから、
それでよいのでは?
k-meansクラスタリングで質問があります
クラスタリングベクトルを出した後、その結果を元のデータフレームに結合して
それをもとに条件抽出し該当データフレームを抽出したいのですが、クラスタリングベクトルの数値を条件にすることはできないのでしょうか
たとえば、
SEX HEIGHT WEIGHT
1 F 158 51
2 F 162 55
3 M 177 72
4 M 173 57
5 M 166 64
とあったとき
SEX HEIGHT WEIGHT CLUSTER
1 F 158 51 1
2 F 162 55 2
3 M 177 72 3
4 M 173 57 3
5 M 166 64 2
というように結合してCLUSTERの数値をもとに抽出を行いたいです
>>71 > (a <- data.frame(sex=factor(c("F","F","M","M","M")), height=c(158,162,177,173,166), weight=c(51,55,72,57,64)))
sex height weight
1 F 158 51
2 F 162 55
3 M 177 72
4 M 173 57
5 M 166 64
> a$sex <- as.numeric(a$sex)
> cl <- kmeans(as.matrix(a), 3)
> (b <- cbind(a, cluster=cl$cluster))
sex height weight cluster
1 1 158 51 1
2 1 162 55 1
3 2 177 72 2
4 2 173 57 3
5 2 166 64 3
3だけ抽出
> b[b$cluster == 3, ]
sex height weight cluster
4 2 173 57 3
5 2 166 64 3
こういうこと?ちなみに、cbind()で結合する必要はないよ。
74 :
132人目の素数さん:2013/12/14(土) 16:20:31.15
R使ってる人って分析前のデータ整形もRでやろうとするけど、これって効率的なのか?
整形はExcelでやって、統計解析だけRを使うのは異端なのか?
75 :
132人目の素数さん:2013/12/14(土) 16:28:21.09
整形は自分で別途バッチを組むな
SQLじゃね?
>>74 そんなことはないし、Excelでも何でも使えるなら使えば良いと思う。
でも、世の中のデータはそんな単純なデータばかりじゃない。
>>74 RExcelとか使うでしょ。
他にも
「RとRubyによるデータ解析入門」とか
「R&JavaScriptによるデータ解析と視覚化テクニック」
とか言う本が出ているくらいだから、お察し。
ただ、最近は、R使わずに全部Pythonでやっちゃえとかいう Python好きが居て、
それはそれでうっとおしい。
>>74 >>78 コマンド一つで処理できれば言語はどうでもいい。適当なのを使えばいいだけ。
81 :
132人目の素数さん:2013/12/19(木) 15:45:13.08
平均値の95%の信頼区間の下限値を数値として、取り出したいのだけど。
t.test()だと、T検定の平均値ほかいくつもの結果が表示される。
他のプログラムからRの計算結果(信頼区間の下限値)だけを取り出したいのだが。
良い方法ありますか?
>>81 よく分からないな。
信頼区間の下限値を取り出せばよいのでは?
例えば、t.test()はhtestクラスのlistを返す。そのlistにはconf.intという名前の要素があり、
それは数値ベクトル(要素数は2)だ。その1つめの要素が下限。
他のプログラムって何?javaやpythonなど専用のインファーフェイスがあるよ。
探してみれば?
パイプで渡したいなら、パイプで渡せば良い。
パイプで渡すならこんな感じ?
$ Rscript -e 't.test(1:100)$conf.int[1]' |sed 's/¥[.¥]//g'
44.74349
$conf.int[2]
をつけて解決しました。
ありがとうございます。
他のプログラムというのは、CのDLLです。Rccpを利用するか悩みどころです。
>>83 それ、下限じゃなくて上限では?
> 他のプログラムというのは、CのDLLです。Rccpを利用するか悩みどころです。
またしても意味不明瞭。よく分からないな。
Rの中からCプログラムを呼び出すのか、Cプログラムの中でRを呼び出したいのか。
なぜ、exeじゃなくてdllと言うのか。「CのDLL」という表現ならWindows限定なのか。
Windows限定ならRと通信する方法がもっと別にあるのじゃないだろうか。
>それ、下限じゃなくて上限では?
すいません。$conf.int[1]で下限ですね。
>またしても意味不明瞭。よく分からないな。
>Rの中からCプログラムを呼び出すのか、Cプログラムの中でRを呼び出したいのか。
Cプログラムの中でRを呼び出したいです。
これはきちんと説明せねば。少し長くなりますが、、
MT4という為替取引(いわゆるFX)を支援するアプリがあり、
このアプリには自由に取引のアルゴリズムを作れるよう独自のプログラム作成機能があります。
その言語がC言語に似たmqlと呼ばれるものです。
通常は、mqlファイルを専用のコンパイラでコンパイルしてMT4で実行します。
ただ、MT4で実行されるものはメモリや実行速度において弱い部分があり、
その為、MT4に利用できる.dllをC言語などで作成し、dll上でアルゴリズム計算をさせMT4に返す
という方法をとる人もいます。というか自分がそういう状態です。
MT4(mql) → my.dll
記述的にはmqlファイルにmy.dllをimportさせます。
このdllから、Rに対して統計的な計算をさせその結果を得たいと思案して先の質問となりました。
t.test()で表示される内容は解っていたのですが、そこから数値だけをどうすれば返すのか、わからなかったのです。
当方は、直接dllからRに対して計算をさせその結果を返す方法を知りません。
どうやら、Rcppを使えば良いかも?というレベルです。
ただし、MT4において、mt4R.dllというフリーのライブラリがあり、それを用いると
簡単な記述でMT4とRを連携させることができます。それは当方も確認済みです。
下のような流れです。
MT4(mql) → mt4R.dll → R
さて、自分は my.dllを作成していますが、mt4R.dllを利用してRを計算するには、
MT4(mql) → my.dll → MT4(mql) → mt4R.dll → R
という手順を踏まないといけません。MT4(mql) ⇔ my.dllとの配列の扱いも実は面倒な仕様があり、できれば
MT4(mql) → my.dll → R
のように直接my.dllからRを呼び出し計算させその答えが得たらいいなと思います。
とりあえず、t.test()から知りたい統計結果だけをとりだせたのでまずは一歩すすみました。
Rcppを持ちいるほかに良い方法があるようでしたら、教えてくだされば幸いです。
書き忘れました。MT4はWindowsで動作できるアプリです。
ありがとうございます。
よく読んで参考にさせていただきます。
参考にするってのは何もしないという意味の枕詞
一理あるw
すみません、このサイトナノデスの
http://d.hatena.ne.jp/yutakikuchi/20120730/1343605481 kabu_data_close = as.ts( scan( "/home/yuta/work/R/kabu/data/kabu_ar_training_close.txt" ) )
ar_predict_result <- matrix()
arima_predict_result <- matrix()
j <- 1
for( i in 123:136) {
training_kabu_data <- kabu_data_close[1:i]
#ARModel
ar_data_close <- ar( training_kabu_data )
ar_predict_close <- predict( ar_data_close, n.ahead = 1 )
#ARIMAModel
arima_data_close <- arima( training_kabu_data, order=c(1,0,1) )
arima_predict_close <- predict( arima_data_close, n.ahead = i )
ar_predict_result[j] <- ar_predict_close$pred[1]
arima_predict_result[j] <- arima_predict_close$pred[1]
j <- j+1
}
scanでよみこんだtxtはデータの数が123こあります。なのにfor文は123:136で
<- kabu_data_close[1:i]となっています。123以降はkabu_data_closeには入ってないのではないのでしょうか??
というか違うデータでですがError in na.fail.default(as.ts(x)) : missing values in object
とでます
>>93 エスパー募集ですか?
さすがに、kabu_data_closeの構造を秘密にされたら答えようがない。
str()ぐらい示そうよ
ちなみに、
> hoge <- as.ts(1:100)
> str(hoge)
Time-Series [1:100] from 1 to 100: 1 2 3 4 5 6 7 8 9 10 ...
> hoge[101:110]
[1] NA NA NA NA NA NA NA NA NA NA
という仕様。
>>94 返信ありがとうございます。
>>93のkabu_data_closeとは違いますが
> kabu_data_close = as.ts( scan( "C:/Users/root/Documents/kabu_ar_training_close.txt" ) )
Read 120 items
> ar_predict_result <- matrix()
> arima_predict_result <- matrix()
> j <- 1
> for( i in 120:133) {
+
+ training_kabu_data <- kabu_data_close[1:i]
以下同文
で
Error in na.fail.default(as.ts(x)) : missing values in object
> str(kabu_data_close)
Time-Series [1:120] from 1 to 120: 10688 10599 10508 10579 10653 ...
とでます
96 :
93:2013/12/23(月) 00:09:31.23
>>93のサイトのままなのでコードはかえないでいいはずなのですが
したいことは一回一回学習して予測することです。
+ j <- j+1
kabu_data_close[i+1]<-ar_predict_result[j]
}
を加えてみましたが
Error in `[<-.ts`(`*tmp*`, i, value = NA_real_) :
only replacement of elements is allowed
とでます。
97 :
93:2013/12/23(月) 01:17:20.89
すみません。解決しましたmm;;
サイトのコメント欄に同じ質問がありました。。。
>>97 そういうときは、どういう風に解決したかをまとめて、ここにも貼るものでしょ!
普通は回帰係数を求める時っていろんな説明変数を試すものなのに、
株価予測は株価だけしか使わないのが当たり前になってるのが不思議。
100 :
93:2013/12/23(月) 09:00:50.98
>>98 普通にfor文の136までのデータを使ってるようでした;;
技術的な問題じゃないので申し訳ないのですが
予測するデータは2012年7月以降、学習データは2012-01-04〜予測の前日
このサイトの流れから予測の前日というのが7月の前日まで
と勘違いしていました。;
自分には何を言ってるのか分からんが、本人が分かったならそれでいいのでは?
>>101 scan()するデータがそもそも間違っていたのに、
思い込みが原因で混乱していましたってことだろ(違うかもしれんが)。
最小のサンプルデータも提示せず、まさしく「エスパー募集」だったてことだ。
Error in arima(training_kabu_data, order = c(1, 0, 1)) :
non-stationary AR part from CSS
In addition: Warning messages:
1: In arima(training_kabu_data, order = c(1, 0, 1)) :
possible convergence problem: optim gave code = 1
2: In arima(training_kabu_data, order = c(1, 0, 1)) :
possible convergence problem: optim gave code = 1
3: In arima(training_kabu_data, order = c(1, 0, 1)) :
possible convergence problem: optim gave code = 1
すみません。このエラーってどうゆう意味でしょうか;;
104 :
132人目の素数さん:2014/01/07(火) 14:10:27.54
Rを用いたパネル分析(ランダム効果モデル)におけるエラーについて
Rを用いて、パネル分析を行ったのですが、
「 以下にエラー swar(object, data, effect) :
the estimated variance of the individual effect is negative」
というエラーが出てきます。
どのような対処を行えば、エラーを解消することが可能でしょうか。
>>104 エスパー募集ですか?
負の分散が生じるということはデータに問題があり、解決策はない気がしますが、
あなたが書いた式にケアレスミスがあることが原因である場合は、
エスパーでもない限り、読み手には分かりません。
再現できる最小のサンプルデータセットと、サンプルコードを示せば、
誰かがあなたの間違いを指摘してくれるかも知れません。
まずは、データを半分、そのまた半分と削って、エラーの再現を確認してはどうですか。
すみません、Mac OS X Mavericksで、R3.0.2をつかっているのですが、起動すると下記のような警告メッセージが表示されるようになってしまいましたが、意味がよくわかりません・゜・(ノД`;)・゜・
何がおきているのでしょうか・・・
During startup - Warning messages:
1: Setting LC_CTYPE failed, using "C"
2: Setting LC_COLLATE failed, using "C"
3: Setting LC_TIME failed, using "C"
4: Setting LC_MESSAGES failed, using "C"
5: Setting LC_MONETARY failed, using "C"
[R.app GUI 1.62 (6558) x86_64-apple-darwin10.8.0]
WARNING: You're using a non-UTF8 locale, therefore only ASCII characters will work.
Please read R for Mac OS X FAQ (see Help) section 9 and adjust your system preferences accordingly.
[Workspace restored from /Users/ユーザ名/Documents/R/R_Working/.RData]
[History restored from /Users/ユーザ名/Documents/R/R_Working/.Rapp.history]
2014-01-11 13:20:07.129 R[1292:707] Can't open input server /Users/ユーザ名/Library/InputManagers/SafariStand5.1.182
107 :
132人目の素数さん:2014/01/11(土) 13:39:16.70
きもい
>>106 意味も何も、読んだそのままの意味だと思うけど。
ローケルがCなら、日本語を使っちゃダメだよ。
ターミナルでRと打ち込んでRを起動させたら何か変化がある?
109 :
106:2014/01/11(土) 14:30:33.12
>>108 言語の問題だったですか・・・
最近、Macの言語環境を英語⇔日本語で何回か切り替えたのですがそれがいけなかったんでしょうか(ふだんは英語環境)
とりあえずあとでlocaleというのの設定をやってみます(localeという言葉をそもそも知らず、localかと思いました)
ターミナルから起動したら、とくに警告は表示されなかったです
110 :
132人目の素数さん:2014/01/12(日) 12:58:03.91
[1]1 2 3 4 5 6 7
[2]8 9 10
を
1
2
3
4
5
6
7
8
9
10
と表示させるにはどうせたらよいでしょうか
111 :
110:2014/01/12(日) 13:58:14.10
すんません、解決しました
おお、ちょうどレスしようと思ったのに
> a<-1:7
> b<-8:10
> c<-c(a,b)
> c.df<-as.data.frame(c)
> c.df
一応どうやって解決したかも書いてほしいな
113 :
132人目の素数さん:2014/01/12(日) 19:39:44.30
ans<-lm(ch1~.,data)
ans2<-stepAIC(ans)
(略)
Step: AIC=6680.92
ans3<-lm(ch2~.,data)
ans4<-stepAIC(ans3)
(略)
Step: AIC=6260.8
:
(略)
:
ans47<-lm(ch24~.,data)
ans48<-stepAIC(47)
(略)
Step: AIC=8953.5
この出力されたAICの値(計24個)の値を比較して一番値が低いAICを表示したいです。
できる人いましたらやり方教えて下さい。
データフレームで、各行のすべての列の値を合計した列をつくることってできますか?
たとえば列が1月、2月、3月、、、ってなってて最後に年間計の列をつくりたいとか。
列を1個1個ベクトルで取り出して合計してからデータフレームに入れないとダメ?
data$total <- apply(data, 1, sum, na.rm=TRUE)
こうスレをみると、データフレームの勉強はした方が良さそうだな。
Rで統計計算ができるよお。だけじゃなくて、どうやってデータを揃えるかとかが大事になってくるなあ。
>>115 ありがとうございます。
そうでした、applyだった・・・
R-Tipsを読み直しました。
>>116 初心者なんですが、基本の操作を早く覚えたいです・・・
列名称やベクトルの名称などの、数字ではない情報を、for文などによって繰り返しで大量に生成することってできますでしょうか?
たとえば、"V1"という名称のベクトルから"V100"という名称のベクトルを、何らかの規則(たとえば1〜99までの奇数の列を1倍したベクトル、2倍したベクトル、3倍したベクトル……など)
ようは、規則にしたがって名前をたくさんつけるという操作が可能なのかどうかを知りたいです
途中が消えてましたm(_ _)m
列名称やベクトルの名称などの、数字ではない情報を、for文などによって繰り返しで大量に生成することってできますでしょうか?
たとえば、"V1"という名称のベクトルから"V100"という名称のベクトルを、何らかの規則(たとえば1〜99までの奇数の列を1倍したベクトル、2倍したベクトル、3倍したベクトル……など) に従って生成したい場合などです
ようは、規則にしたがって名前をたくさんつけるという操作が可能なのかどうかを知りたいです
as.character()
121 :
132人目の素数さん:2014/01/13(月) 16:12:10.53
マニュアル読む気ゼロな奴が住み着いたな
123 :
132人目の素数さん:2014/01/15(水) 03:09:36.46
&& || をにデータフレームの条件に使ってもエラー出ないのえぐくない?
ifの癖で間違っちゃうのだが。
124 :
132人目の素数さん:2014/01/15(水) 03:10:17.66
あれっ?なんか文字化けみたいになったw
質問があります
A B
10 0.6
20 1.7
30 6.9
2.5 0.3
15 5.7
30 6.9
11 0.1
38 3.2
45 4.8
70 6.8
というようなデータフレームがあるのですが
Bは0<B<7の範囲をとる数字になっていていくつもの昇順データの連結物になっています
これをBの値が大きいものから小さいものに変わったときで切ってデータフレームを新しく切り出したいのですがどうしたらいいでしょうか
>>113 traceの最後に出てくるAICはextractAIC()で取出せるから、
ans2, ans4, ..., ans48をリストにして、
sapply(selectedModelList, extractAIC)して、sort()
>>125 グループ化すれば
grp <- 1
for(i in 2:nrow(data)-1){
if(data$B[i] < data$B[i+1]) grp <- c(grp, grp[i])
else grp <- c(grp, grp[i]+1)
}
psychというパッケージをつかってるんですが、たとえばfa()関数で因子分析をやったときに、その結果を全部まとめてcsvに出すことってできないんでしょうか?
因子パタンだけを
write.csv(分析結果$loadings, "分析結果.csv", quote=F)
とかやることはできるのですが、一式全部出力できないもんかと……
行列でできなくてデータフレームだとできることって何があるの?
>>127 >一式全部
多義的な表現なので、全部とは具体的にどのことかきちんと説明しないと、
期待する助言は得られないよ。Rオブジェクトとそのものなのか、
printメソッドなのか、summaryメソッドなのか、strか?
>>125 ずばっとやる方法は思いつかないなぁ。
B[i] > B[i+1]が成立したときのiを取り出して、
そこで切るとか。
131 :
130:2014/01/17(金) 10:48:05.50
>>126 がすでに答えていたorz
なるほどね。グループ番号を付与するか、
思いつかなかった。
>>126 for文じゃなくてベクトルで一括処理するなら、
grp <- cumsum(c(F, diff(data$B)<0)) かな。
>>132 オォそれはスッキリ。皆よくヌルっとそういうのが出てくるね
>>132 すげー、天才だ!
こんなのが思いつくなって人間じゃない、イカれている
.Rprofileって、ワーキングディレクトリに置いておけばいいのでしょうか?
分析ごとにワーキングディレクトリをかえようと思っている場合、.Rprofileをコピーしてそれぞれのディレクトリにいれて、setwd()すればいいだけでしょうか?
Rを立ち上げているとき、どの.Rprofileが読み込まれて作動しているのか確認する方法が分からず・・・
どなたかアドバイスおねがいします
>>135 > どの.Rprofileが読み込まれて作動しているのか確認する方法
$ cat .Rprofile
Rprofile.version <- "1.0"
として、Rを起動してみると、
> ls()
[1] "Rprofile.version"
と.Rprofileが読み込まれている。
中身はもちろん
> Rprofile.version
[1] "1.0"
となる。つまり、識別のためのRオブジェクトを個別に.Rprofileに書いておけば、
区別はつく。
>>135 > .Rprofileって、ワーキングディレクトリに置いておけばいい
はい。ただし、起動時のカレントディレクトリとワーキングディレクトリが異なる場合は駄目。
?Rprofile
?Rprof
あたりは読もう。
>>136 なるほどたしかに!
ありがとうございます。
.Profileの置き場は、起動時の初期ワーキングディレクトリにおいてあるものが読み込まれるみたいなので、
preference > start upの画面で設定したディレクトリに置いとくしかないことも分かりました。
>>138 Rを起動する流儀はひとそれぞれだけど、
csvファイルなどデータをおいたワーキングディレクトリに移動して、
csvファイルの中身や、その他のファイルの確認をしてから、
そこで(そのディレクトリで)Rを起動すると、
起動時のカレントディレクトリとワーキングディレクトリは同一になる。
つまり、ワーキングディレクトリに移動してからRを起動した方がいろいろと都合がよいし、
私はRを使い始めて10年来、このようにRを起動している。
どのディレクトリでRを起動しても、あなたの自由だよ。
>>140の追記。
ワーキングディレクトリに移動してからRを起動すると、
そのときにワーキングディレクトリに置かれた.Rprofileを読み込む。
だから、それぞれのワーキングディレクトリにそれぞれの.Rprofileを置くのは正解。
レベルの低いお話で恐縮です。
Rでは推測統計などで利用をしていましたが。プログラム的なものを作りたいと思うのですがちょっと歯が立たないです。
きっかかりを付けたいと思います。以下のような内容をスクリプトで書くと、どうなるかご提示いただけますでしょうか。
5*10の行列(一般的な意味)を用意して、これを"matA"とします。
//2行4列の場所をmatA[2][4]とします。
rowA = 3 colA = 5 coubA = 0.3 をmatAに入力します。
//上の式の意味はmatA[3][5]に0.3を配置します。という意味です。
以下同じように
rowA = 2 colA = 7 coubA = -0.3 をmatAに入力します。
rowA = 1 colA = 4 coubA = 0 をmatAに入力します。
rowA = 3 colA = 5 coubA = 0.4 をmatAに追加します。※
rowA = 1 colA = 4 coubA = 0.3 をmatAに追加します。※
//追加されたデータは元のデータ上に重ねていく3次元のイメージです。追加されるデータは、今後も増えていきます。
matA[2][7]を参照する。→ (-0.3) が返ってくる。(-0.3 0) が返ってくるのはNG
matA[3][5]を参照する。→ (0.3 0.4) が返ってくる。
matA[1][2]を参照する。→ 何も返さないか。(NA)が返ってくる。(0)や(0 0)が返ってくるのはNG
以上、お時間のある方、ぜひご教授くださいませ。
>>140 ありがとうございます
移動ってのは、ターミナルで操作されてるということでしょうか
>>142 arrayを使うのはどう?
簡単のために、重ねの最大が2つまでとして、
> matA <- array(NA, c(5, 10, 2))
> matA[3, 5, 1] <- 0.3; matA[2, 7, 1] <- -0.3; matA[1, 4, 1] <- 0;
> matA[3, 5, 2] <- 0.4; matA[1, 4, 2] <- 0.3
> matA[2, 7, ]
[1] -0.3 NA
> matA[3, 5, ]
[1] 0.3 0.4
> matA[1, 2, ]
[1] NA NA
NAがいやなら、na.exclude()でも使えばいい。
matA[3, 5, i]がNAでないなら、matA[3, 5, i + 1]に代入するような条件分岐で一般化すればいい。
別アプローチとしては、要素がlistの行列を作るという手もある。
>>142 matA<-matrix(NA,nrow=5,ncol=10)
じゃあダメなの?
>>144さん
>>145さん ありがとうございました。スルーされるかと思ってた。
>>145さん。matrix 使うべきなのか array を使うべきなのか list なのか。
まだよく分かっていないのが正直なところです。
>>144さん スクリプト作成。ありがとうございます。
リストを使うのは難しくなりますでしょうか?
イメージとしては5*10の行列の碁盤の上に、個々のベクトルが上に育っていくような。
わかりずらいですね、、。
追加されていく要素は、今後も増えていく予定です。
重ねの数を初期値で決めずに、追加される要素によって個々に増えていくという設定は難しい
でしょうか。
>>146 リストがお好みなら
> dat <- data.frame(rowA=c(3, 2, 1, 3, 1), colA=c(5, 7, 4, 5, 4), coubA=c(0.3, -0.3, 0, 0.4, 0.3)) #1
> dat2 <- dat[dat$coubA!=0] #2
> matA <- lapply(1:5, function(i) lapply(1:10, function(j) NULL))
> for(i in 1:nrow(dat2)) {
+ v <- dat2[i,]
+ matA[[v$rowA]][[v$colA]] <- c(matA[[v$rowA]][[v$colA]], v$coubA)
+ }
> matA[[2]][[7]]
[1] -0.3
> matA[[3]][[5]]
[1] 0.3 0.4
> matA[[1]][[2]]
NULL
#1 データはデータフレームが分かり易いかと思ってそうしたけど、ベクタでもマトリクスでも
#2 先にcoubA==0を除いたけど後から条件分岐でも良い。
#3 どうも俺が書くと美しくない...( ´・ω・`)
>>145 ダメに決まってるじゃん。
質問者の要件を良く読めよ。
146 > 重ねの数を初期値で決めずに、追加される要素によって個々に増えていくという設定
どうしても初期値があるとダメなら、
144 > 要素がlistの行列を作るという手
なんだけど(または
>>147さんの方法)、
10000とか10000000000000000とか十分に大きな値を初期値に出来ないの?
>>143 はいそうです。実際には、Emacsの中でRを起動する訳だけど、
ターミナルというか、シェルから起動するのと概念的に同じです。
ソフトウェアの起動には2つに大別できて、
(1) ランチャーメニューから起動→ファイルを読み込む
(2) ファイルのあるディレクトリまで移動してファイルを開く=ソフトを起動する
あなたは(1)の方法でRを起動し、私は(2)の方法で起動するという違い。
(2)の場合は、シェルの中で移動するわけだけど、
OS XやLinuxのシェルはbashだったり、WindowsのシェルだとExplorerだったり。
bashを使うにはターミナルが必要。
>>147 ありがとうございます。いただいたスクリプトを吟味させていただきます。
これだけ作っていただけたら、リファレンス本を元に解読して理解できるようになると思います。
ついで、、読み飛ばしてかまいません。
自分の環境では以下の行で
dat2 <- dat[dat$coubA!=0]
次のエラーが発生してそれ以降の行で実行不可になってしまったのですが、
underfined colums selected
何かの理由があるか、自分の基本的なところの無知なんでしょうね。
>>148 フォローありがとうございます。
>10000とか10000000000000000とか十分に大きな値を初期値に出来ないの?
最終的には、10000件もの行列の要素の上にデータを重ねようと思っています。
Rがどのようにメモリを扱っているかわかりませんが、初期値によってメモリを確保する
のであれば避けておきたいと思っています。
>>149 すんません。コピペの後ごにょごにょしてたらカンマを落としたようです。
dat2 <- dat[dat$coubA!=0,]
すいません。ほんとうにありがとうございました。
>>147 ありがとうございます。
いろいろ検証させていただいています。
もう完璧ですね。Rに慣れていないから、と思っていたけど。
Rに慣れてもこのようなコード書けるかは自信がありません。
でもありがとうございました。
嵐山光三郎でR
>>154 以前に、R NewsからJournalに昇格した。
本買って読み始めたんだけど、
scores <- data.frame()
scores <- edit(scores)
で、いきなりR落ちた。
すいません先の
>>147のスクリプトの下の文なのですが1行で表すことは可能でしょうか。
あるアプリから、この文をRに渡したいのですが。1構文1行じゃないといけないらしくて。
単純に改行を削るだけではRでエラーを返してしまいます。
> for(i in 1:nrow(dat2)) {
+ v <- dat2[i,]
+ matA[[v$rowA]][[v$colA]] <- c(matA[[v$rowA]][[v$colA]], v$coubA)
+ }
>>157 よく分からないけど、1行なら
for(i in 1:nrow(dat2)){v <- dat2[i,]; matA[[v$rowA]][[v$colA]] <- c(matA[[v$rowA]][[v$colA]], v$coubA)}
だけど
>>158 セミコロンが構文の区切りなのですね。
うまく動きました。ありがとうございました。
>>159 まじで入門書を一度通読した方がよいと思う。
161 :
132人目の素数さん:2014/01/25(土) 00:04:22.24
分割表からロジスチック回帰で使うようなデータフレームを作成する方法ってありますか?
>>161 そんなオナニー質問で、本気で助言をもらえると思ってるの?
うっせーハゲ
>>163 >>161本人か?
本人なら、分かるように質問し直せよ。
それとも、あんたは、
1. 先日拾った木材から寝室で使うような家具を作成する方法はありますか?
2. 朝摘みした野菜から夕食に出せるような食事を作成する方法はありますか?
3. 数字を使って数学のテストに出題するような問題を作成する方法ありますか?
という質問に対して、質問者が期待する回答を与えられるのか?
初心者には初心者に分かりやすく説明すればいいんだよ
お前は単に偉そうに説教したいだけだろ
2ちゃんでやっすい承認要求みたしておめでたい奴だなw
こういう毎日張りつくようなものでもないスレでカリカリしてるやつは見なきゃいいと思うんだけど
説明したいやつが説明するだろうし
>>165 はぁ?じゃあ、あなたは何故
>>161 に答えてあげないのですか?
オナニー質問には答えようがないからでしょう?違いますか?
違うなら、あなたが助言してあげて下さい。
自分しか理解できないオナニー質問をするかしないかは、
質問者が初心者かどうかとは独立です。
168 :
161:2014/01/25(土) 22:30:46.52
不完全な質問をして申し訳ありませんでした
その後Titanicのデータとepitoolsでなんとか理解することが出来ました.
カウントデータにNA が含まれていたため,分割表から個体ベースのデータフレームに出来ないことが判明しました..
お騒がせして申し訳ありませんでした
>>168 >>163が
>>161じゃなかったのなら非言申し訳ない。
>>165が助言する様子はないので簡単に。
Rのglm()で指定するデータフレームは、必ずしも行が症例(個人)になっている必要はない。
条件ごとにカウントしたデータフレーム(たぶん、あなたが言う分割表)のデータフレームを用いる。
例えば、
> d <- data.frame(gender=rep(c("Male","Female"),c(6,6)),
+ dept=rep(LETTERS[1:6],2),
+ yes=c(512,353,120,138,53,22,89,17,202,131,94,24),
+ no=c(313,207,205,279,138,351,19,8,391,244,299,317))
> d
gender dept yes no
1 Male A 512 313
2 Male B 353 207
[snip]
11 Female E 94 299
12 Female F 24 317
という集計したデータフレームがあったとして、ロジスティックモデルを当てはめるには
下記のようにすればOK
> m <- glm(cbind(yes,no) ~ gender * dept, family = binomial(logit), data = d)
したがって、実験研究でよくあるカテゴリカルの場合は「個体ベースのデータフレーム」を用意する必要はない。
データが多くなると、DBの利用を考えたくなりますが、
お勧めありますか。SQLiteを使っている人が多い気がしますが。
>>171 要するに、ほとんど運だということなのかね?
//質問させてください。
matB <- array(dim=c(5,10,2))
matB[3,5,1]<-0.3
matB[2,7,1]<--0.3
matB[1,4,1]<-0
matB[5,4,2]<-2.5
//という3次元の配列があるとします。
//数値要素以外はNAです。
//ここから3次元目の1つ目の表の最大値を取り出したいです。
//期待する値は0.3となります。
//apply(na.omit(matB),3,max)[1]など、いろいろ考えてみましたが
//違うようです。
//どのように表記すればよいか教えてください。
>>173 > max(matB[,,1], na.rm=TRUE)
[1] 0.3
>>175 まぁ、これは初心者がはまりやすいポイントだからね。
> max(c(3, NA, 3, 3, 3))
[1] NA
> max(c(3, NA, 3, 3, 3), na.rm = TRUE)
[1] 3
177 :
132人目の素数さん:2014/01/28(火) 18:02:47.69
>>176さん。ありがとうございます。
//>すいません、また質問させてください。
matB <- array(dim=c(5,10,2))
matB[3,5,1]<-0.1
matB[2,7,1]<-0.3
matB[1,4,1]<-0.3
//上のような3次元の配列があります。3次元目の一つ目の表には値が含まれていますが、
//二つ目の表は値が含まれておりません。
//3次元の各表に対して、値が入っているか値が入っていないかを知りたいと思います。
length(na.omit(matB[,,1]))
length(na.omit(matB[,,2]))
//では駄目でした。
//期待とする値は、入っているか入っていないかのブール値でも、
//入っている要素数の数(全部の要素がNAならば0)でも構いません。
//どうぞよろしくお願いします。
>>177 何か、このスレ、オレしか答えいない。
> for(i in seq_len(dim(matB)[3])){print(ifelse(sum(! is.na(matB[,,i])) == 0, "空でーす", "入っています"))}
[1] "入っています"
[1] "空でーす"
上記はmatB[,,1]は「入っています」、matB[,,2]は「空でーす」という意味。
forが嫌いなら、sapplyでも。
オナニー質問じゃない限りなるべく答えるけど、関数の意味は自分で調べてね。
>>178さん
同じ人でしたか。恐縮です。
もちろん関数の意味は、自分で調べます。
本当にありがとうございました。
//質問いたします。
matB <- array(dim=c(5,10,2))
matB[3,5,1]<-0.3
matB[2,7,1]<--0.3
matB[1,4,1]<-0
matB[5,4,2]<-2.5
maxvol<-max(matB[,,1], na.rm=TRUE)
maxvecB<-which(matB == maxvol)
lenrowB<-length(matB[,1,1])
if(maxvecB%%lenrowB==0){rowB <- lenrowB;colB <- maxvecB%/%lenrowB}else {rowB <- maxvecB%%lenrowB; colB <- maxvecB%/%lenrowB+1}
//上記は3次元の配列のうち3次元目の一枚目の表から、最大値を求め
//その要素の行値、列値を求めるスクリプトです。以下のように返ってきます。
> rowB
[1] 3
> colB
[1] 5
//わざわざ、maxvecBの要素番号を列の総数で割り、その剰余を利用して答えをだしています。
//たまたま、maxvecBの要素番号が列順に振られているのでうまくいきましたが、行順に振られていたら
//誤った値が返ってくるかと思います。
//もうすこし、シンプルな書き方があるような気がしてなりません。
//修正できるとこがありましたら教えていただきたいと思います。
//よろしくお願いします。
>>180 > シンプルな書き方
まぁ、そうだね。
> arrayInd(which.max(matB[,,1]), dim(matB))
[,1] [,2] [,3]
[1,] 3 5 1
とか。この位置の値を確認したければ、
> matB[arrayInd(which.max(matB[,,1]), dim(matB))]
[1] 0.3
関数の意味は自分で調べてね。
ありがとうございます。いつもの同じ方でしょうか。
自分のが恥ずかしいぐらいシンプルです。
こうかけるようになれたらいいなあ。
ありがとうございました。
このスレ、かえって有害
184 :
132人目の素数さん:2014/01/31(金) 20:29:09.26
rpubs.com って自分でホスティングするのは無理?
185 :
132人目の素数さん:2014/02/02(日) 21:38:49.85
最近,emacsのorg-modeのorg-babelを使って,Rの解析結果をhtmlにexportした
レポートもどきを作成して,同僚に渡すようにしてる.やってることの解説と
code blockを交互に書くことで,同僚の理解も容易になって喜んでるんだけど,
問題は,code blockの数だけReturnを押さないといけないこと.5個や10個の
code blockなら良いけど,100個以上になると指がつりそうになる.全部を一気
に実行する方法を誰か知ってますか? スレ違いならゴメン.
186 :
sage:2014/02/02(日) 22:53:46.35
>>185l
knitrはemacsもサポートしてるみたいだけど
グラフィックに続いておらいリーからまた本でたね。何でも載ってそうなんで、まよってるんだけど誰か買ったかな?
188 :
132人目の素数さん:2014/02/03(月) 00:02:22.42
knitrは使ったことないんだけど,code blockを一気に処理できるの?
どなたか条件を指定して3次元プロットをする方法を教えていただきないでしょうか?
以下のデータを3Dプロットしようとする時、modernの値が3の場合赤、2の場合白、1の場合黄色とし、x軸はLの値、y軸はAの値、z軸はBの値としたいです。
L A B modern
1 48 54 32 3
2 21 32 15 2
3 87 2 78 2
4 45 102 12 3
5 54 91 31 2
6 7 21 81 3
7 87 64 12 1
>>189 3次元プロット自体はできるよね。
色分けは、例えばscatterplot3d()を使うなら、colorに色名のベクタを与えればよいだけ。
> modern <- c(3, 2, 2 ,3, 2, 3, 1)
なら、
> cols <- c("yellow", "white", "red")
> cols[modern]
[1] "red" "white" "white" "red" "white" "red" "yellow"
とすれば、色名のベクタが出来る
>>190 ありがとうございます。
3次元プロットは出来ます。
それぞれのデータ数が130ほどあるのですがこれも同じような形で解くのがよろしいのでしょうか?
質問ばかりしてしまい申し訳ないです。
できました!
本当に助かりました!
193 :
132人目の素数さん:2014/02/03(月) 22:32:09.24
> knitrは使ったことないんだけど,code blockを一気に処理できるの?
自己レスです.ox-ravel.elというのを使えば,org-modeからknitrを使えるこ
とが分かった.
ttps://github.com/chasberry/orgmode-accessories こいつでorg-modeからRhtmlを作って,それをRstudioにcompileさせるという流
れだな.複数のcode blockも一気に処理できるようだし,二度手間だけど100回
以上Return押すよりはマシなので,この方式に乗換を試してみる.初めて
knitr使ったけど,綺麗なhtmlできるのな.Rstudioちょっと見なおした.
> 186
ポイント,さんきゅ
194 :
132人目の素数さん:2014/02/04(火) 00:04:08.66
真鍋●度は数学科だったんだな〜
すいません自己解決できました
お騒がせしました
197 :
132人目の素数さん:2014/02/05(水) 22:57:41.23
質問があります。
環境はWindows7 32bitで、R3.0.1です。
RからC++のコードを呼びたいのですが、うまくいかないという話です。
C/C++コンパイラは、MinGW 4.8.1を入れて、RもMinGWも単体では問題無く動いています。
とりあえず、
--------------------
#include <vector>
extern "C" void test(double* a) {
std::vector<std::vector<double> > x(5);
}
--------------------
という何もしないファイルを、test.cppとして作って、Rcmd.exe SHLIB test.cppでコンパイルして、
さらに、Rから、
dyn.load("test.dll")
.C("test", arg1=as.double(c(1,2,3)))
dyn.unload("test.dll")
とかすると、問題無く実行できます。
(まあ何もしないですが。)
続きます。
198 :
197:2014/02/05(水) 22:58:34.64
続きです。
でも、上のtest.cppを
--------------------
#include <vector>
extern "C" void test(double* a) {
std::vector<std::vector<double> > x(5);
std::vector<double> y(5);
}
--------------------
と変えてコンパイルして、Rから
dyn.load("test.dll")
dyn.unload("test.dll")
と実行すると、dyn.unloadのところでR毎エラーで止まってしまいます。
エラーメッセージは
Microsoft Visual C++ Runtime Library
This application has requested the Runtime to terminate it in an
unusual way.
Please contact the application's support tem for more information.
となぜか英語で出てきます。
メモリ管理周りが怪しい気がしますが、そもそも.Cでコードを実行していなくて、dllを
ロードしてアンロードしただけでエラーが出るのもわかりません。
だれが原因がわかるかたいませんか?
>>197 C++を使ったことがないので、
あまり価値のない情報だと思うが、
R 3.0.2 on Ubuntu 13.10で追試したところ、
x(5)のみのソースも、y(5)の行を足したソースも、
どちらも、エラーなし。
> dyn.load("test.so")
> .C("test", arg1=as.double(c(1,2,3)))
$arg1
[1] 1 2 3
> dyn.unload("test.so")
>
質問させてください
「data」+通し番号で150個存在するデータフレームがあるのですが
データを整形加工していくうちにデータ長が0になってしまったデータフレームをデータ長が1以上残っているものでリネームして通し番号を詰めていきたいのですが
地道に調べてやっていくしかないでしょうか
具体的には
data002がnrow(data002)=0の時、次にnrowでデータ長を調べて0じゃないものがdata003の時
nrow(data003)>0の時data002<-data003
data004とdata005のデータ長が0でdata006が0じゃないときはdata004<-data006といった具合に
のように代入して詰めたいです
>>200 自分なら次のようにします。
操作が面倒なので、150個のデータフレームを1つのリストオブジェクトにぶち込んで、
nrow()で判定して、削除。次に、連番を振りながら、個々のデータフレームを出力。
これで少なくとも見かけ上は「番号を詰めた」状態になります。
> a <- list(data002 = data.frame(x=1:10), data003 = data.frame(), data004 = data.frame(x=1:10))
簡単のために3つのデータフレームからなるリストで説明すると、
リストaの2番目の要素であるデータフレームの行が空になった状態。
> i <- sapply(a, function(x){nrow(x) != 0})
> a.truncated <- a[i]
これで、nrow()が0のデータフレームが削除されたリストができる。
Rでは、"["関数を積極的に利用した方が効率がよいと思う。
分かりやすいように2行に分けてたけど、
> a.truncated <- a[sapply(a, function(x){nrow(x) != 0})]
1行で十分。
リストから、個々のデータフレームに出力するにはassign()を使えばいい。
> for(i in seq_along(a.truncated)){assign(paste0("data", sprintf("%03d", i)), a.truncated[[i]])}
とすれば、data001, data002が出力される。
できました!
ありがとうございました!
203 :
132人目の素数さん:2014/02/09(日) 14:53:49.19
Rをq()という関数で閉じようとするとき、
「workspaceを保存しますか。」というウィンドウが表示されます。
「いいえ」と答えて、そのまま閉じる過程まで、
スクリプトで指示することができますか?
>>203 さすがにこれはヘルプ見ろと叱られても仕方がないレベルでは?
?q
205 :
132人目の素数さん:2014/02/09(日) 16:31:07.01
10日前にMacBook Pro 買って断然プログラム
モチ(マスター)ベーション
があがったよ
206 :
132人目の素数さん:2014/02/09(日) 18:02:24.94
>>205 おめでとう*\(^o^)/*
Macは本物のUNIXマシンだから
数学やるには最適
頑張ってね
207 :
132人目の素数さん:2014/02/09(日) 18:04:33.54
UNIXマシン?
208 :
132人目の素数さん:2014/02/09(日) 21:21:46.25
UNIXを個人で使ってもあんまり意味ねえだろw
UNIXの発展系Cが本物のプログラム言語だから
いろいろな意味で最適
ならわかるがw
Macは邪悪なBSDと言われていて本物のUNIXじゃないよ。
パクリもののなんちゃってUNIX。
210 :
132人目の素数さん:2014/02/10(月) 04:10:41.30
素人解説ww
OSXは正式にUNIX 03の商標を取得しているホンモノだよ。
UnixライクなOSとは別次元。
UNIX 03で個人が気軽に使えノートも有るのはMacだけ
211 :
132人目の素数さん:2014/02/10(月) 04:51:59.73
OSの開発に失敗して、ソースパクっておいて自分だけ申請して自分こそが本物だと名乗る。
まさに詐欺師。
マカーは捏造ばっかりするから嫌われる。
213 :
132人目の素数さん:2014/02/10(月) 18:03:51.66
繰り返し文わかる人いますか?
a1_1<-lm(x1_1~.,data_1)
a1_3<-lm(x1_2~.,data_1)
a1_5<-lm(x1_3~.,data_1)
:
a1_43<-lm(x1_22~.,data_1)
a1_45<-lm(x1_23~.,data_1)
a1_47<-lm(x1_24~.,data_1)
a2_1<-lm(x2-1~.,data_2)
a2_3<-lm(x2-2~.,data_2)
a2_5<-lm(x2-3~.,data_2)
:
a2_43<-lm(x2-22~.,data_2)
a2_45<-lm(x2-23~.,data_2)
a2_47<-lm(x2-24~.,data_2)
:
a12_1<-lm(x12_1~.,data_12)
a12_3<-lm(x12_2~.,data_12)
a12_5<-lm(x12_3~.,data_12)
:
a12_43<-lm(x12_22~.,data_12)
a12_45<-lm(x12_23~.,data_12)
a12_47<-lm(x12_24~.,data_12)
このようにa12までを、くり返し文を使って短く表すことは出来ますか?
参考書を見てもわからなかったので、質問しました。
>>213 > くり返し文を使って短く表す
念のために確認しますが、「繰り返し文」は必須ですか?
繰り返し文を使わずに短くするのがルール違反なら、面倒くさいんだけど。。。
215 :
214:2014/02/10(月) 20:06:33.32
反応ないけど、繰り返し文なしの一括化+マルチコア化を書いておこう。
説明を簡単にするために、デモデータをdata_1の分だけ作成。
data_2...data_12は今から説明するlapply()を入れ子にすればよい。
> data_1 <- data.frame(matrix(runif(100 * 47), 100))
> names(data_1) <- paste("x1", 1:47, sep = "_")
さて、先に式のリストを作成する。
> a <- sapply(paste0("x1_", 1:47, "~."), as.formula)
このaに対して、lmを実行すればよい。
> lapply(a, function(x){lm(x, data_1)})
ちなみに、multicoreパッケージを入れると、
> library(multicore)
> system.i lapply(a, function(x){lm(x, data_1)})
system.file system.time
> system.time(lapply(a, function(x){lm(x, data_1)}))
ユーザ システム 経過
0.398 0.001 0.399
> system.time(mclapply(a, function(x){lm(x, data_1)}))
ユーザ システム 経過
0.347 0.083 0.183
こんなに早くなる。
「> system.i lapply(a, function(x){lm(x, data_1)})
system.file system.time 」
↑ゴミが入ったorz
217 :
132人目の素数さん:2014/02/11(火) 00:00:16.50
繰り返し分は使わなくて大丈夫です。
できました。ありがとうございました。
一括化とマルチコア化は勉強になりました。
商標とかそういうのじゃなくて、UNIXの精神を受け継いでいないよなMacは
219 :
132人目の素数さん:2014/02/11(火) 22:58:26.31
Mac retina Pro 良いよ
220 :
132人目の素数さん:2014/02/11(火) 23:18:33.31
>>218 じゃあ誰がUNIXの精神を引き継いでいるんだ?
アホはMacを使いこなせないだけ
ノータリンのミュージシャンでも
Macは使えるが、ちゃんとUNIXとして
使えば偽UNIX類とは別次元の完成度だな
Unixがアレだからなぁ。
マカーもずっとUnixの悪口言ってたのに
どの口でMacこそ本物のUNIXとか言ってるんだろう?
ほんとマカーは馬鹿だと思う。
222 :
132人目の素数さん:2014/02/13(木) 19:00:41.28
windows Let's note
thinkpad
apple Mac ritena Pro
いろいろ便利だな〜
223 :
132人目の素数さん:2014/02/14(金) 22:03:16.24
アホですな。そんな意見聞いてたら捏造コピペしまくるネトウヨの思うツボです。
plot3dで濃淡を指定ってできますかね?
scatterplot3dで図を作ったのですが動かせるようにしてくれと言われたので…
すいません。
>>189をplot3dで濃淡表示したいのです。
ホームページを参考にして
color = rep( grey( c( length(Modern ):1 ) / length( Modern ) ) )
として
plot3d(x=l,y=a,z=b,col=color,size=8)としたら濃淡表示にはできるのですがmodernの数字と濃淡が一致しないのです…。
番号が小さいほど黒くしたいです。
>>226 濃淡(明度)と彩度と色相は独立なので、いまいち意味が分からないが、
君の言う「濃淡」とは、グレー階調のこと?
それなら、
grey(Modern / max(Modern))
とか、
grey(1 - Modern / max(Modern))
じゃないの?番号が小さい方を濃くしたいなら、前者か。
> color = rep( grey( c( length(Modern ):1 ) / length( Modern ) ) )
意味不明。特にrep()。
c( length(Modern ):1 )はc()を使う必要なし、( length(Modern ):1 ) でOK
> Modern <- sample(3, 10000000, TRUE)
> system.time(c( length(Modern ):1 ))
ユーザ システム 経過
0.154 0.052 0.359
> system.time(( length(Modern ):1 ))
ユーザ システム 経過
0.020 0.001 0.022
c()で激遅になる。
ありがとうございます。
R初心者で分厚い本とHPを参考にしながら只今奮闘中です^^;
右も左もわからない自分にとってここのサイトはとても助かります!!
連投すいません
グレー階調を行った場合一番高い数字は白になりますか?
>>229 > grey(1)
[1] "#FFFFFF"
> grey(0)
[1] "#000000"
1を代入したら白ですね
ありがとうございます。
なんとか白が見えるようにならないでしょうか?
背景色をかえれるかなと思ってコマンドを打ってみたのですが変わらなくて…
Modernの数値を変えたらいいのでしょうか?
背景色変えられました!
bg3dではなくbgと打ってました…
>>185 Emacs に不可能はない
C-c C-v b or C-c C-v C-b org-babel-execute-buffer
234 :
132人目の素数さん:2014/02/22(土) 14:58:46.83
質問です。optimizeでパラメーターを求めたいのですがエラーが出てしまい、出来ません。
X<-c(1,2,3,4,5,6,7,8,9,12,13,24)
T<-length(X) #データ数
q<-3 #次数
eps<-X #diff(log(X))#収益率
ty<-function(alpha,omega){
for( t in 1:T){
alpha[1]
alpha[2]
alpha[3]
omega
for( j in 1:q ){
AA <- alpha[j]*eps[t+3-j]*eps[t+3-j] + AA
A<-(log(omega+AA)^2)*(-1/2)
print(eps[abs(t+3-j)])
}
}
}
optimize(c(2,1,2,3),ty, maximum=TRUE)
目的関数がよくわからん
何を最適化したいのかな
あとoptimizeは1変数じゃなかったっけ、optimのほうがいいかも
あとAAの初期値がいるかな
Aを目的関数にしてみた
X<-c(1,2,3,4,5,6,7,8,9,12,13,24)
T<-length(X) #データ数
q<-3 #次数
eps<-X #diff(log(X))#収益率
AA<-0 #initial
ty<-function(par){
for( t in 1:T){
alpha<-c(par[1],par[2],par[3])
omega<-par[4]
for( j in 1:q ){
AA <- alpha[j]*eps[t+3-j]*eps[t+3-j] + AA
A<-(log(omega+AA)^2)*(-1/2)
#print(eps[abs(t+3-j)])
return(A)
}
}
}
opt.Nelder<-optim(c(2,1,2,3),ty,control=list(fnscale=-1,maxit=200000,
trace=TRUE),method="Nelder-Mead")
opt.BFGS<-optim(c(2,1,2,3),ty,control=list(fnscale=-1,maxit=200000,
trace=TRUE),method="BFGS")
なんか変だな、ナシで
>>234 >AA <- alpha[j]*eps[t+3-j]*eps[t+3-j] + AA
これはepsの長さ超えるぞ
239 :
132人目の素数さん:2014/02/23(日) 02:23:09.17
234です。皆様ご教授ありがとうございます。
>>235 目的関数はAAです。オメガ、アルファを求めたいです。
optimで実行した際にエラーが出てしまい、optimizeで実行しろと表示されてしまったため、optimizeを使っています。
やりたい事は、ARCHモデルの対数尤度関数を表示したく、練習として3次のARCHモデルの対数尤度関数に近いものを作りました。
>>234 確かにepsの長さが超えてますね。ご指摘ありがとうございます。
自己回帰なので過去の値に戻りたいのですが...勉強します。
240 :
132人目の素数さん:2014/02/23(日) 02:25:18.09
241 :
132人目の素数さん:2014/02/23(日) 08:31:12.95
受験勉強の合間に
息抜きで作業してるとMacBook Pro13インチが小さく感じるな・・・
15インチかiMac 2□インチが必要な気が・・・
老眼か?
いったい何浪してるんだよ
243 :
132人目の素数さん:2014/02/24(月) 06:16:12.29
244 :
132人目の素数さん:2014/02/25(火) 17:06:50.33
質問です。
optim関数を実行した際に、「初期パラメータで関数を表示出来ません」とエラーが出てしまいます。
関数の式は間違ってないと思うのですが、原因がわからないため、ご教授お願いいたします。
コードはこちらです。
sai <- function(x)
{
T<-length(x); q<-3; eps<-diff(log(x))
ts.plot(eps)
Mean <- mean(x); Var <- var(x); S = 1e-6
parm <- c(0.1,0.1*Var )
archsai<-function(par){
for( t in 2:T){
alpha<-c(par[1])
omega<-par[2]
if(t<=1){
htt<-omega
}else {
htt <- (omega+alpha[1]*eps[t-1]^2)
ht <- sqrt(htt)
A <- -(log(htt))^2*(1/2)
B <- -(((eps[t])^2)/htt)*(1/2)
ln <- A+B
}
}
return(ln)
}
optim(parm,archsai,control = list(fnscale=-1) )
}
>>244 この前の人かな?xは前のXでいいのかな?
>B <- -(((eps[t])^2)/htt)*(1/2)
ここt-1じゃないのか
246 :
132人目の素数さん:2014/02/25(火) 21:32:07.00
>>245 そうです。236の際はお世話になりました。
xは前のXで大丈夫です。
ありがとうございます。無事に出来ました。
247 :
132人目の素数さん:2014/02/25(火) 21:34:35.44
236ではなく、234ですね。
>>246 そうかそうか。一応言っておくけどhttが負になってsqrt()でwarnings()出てるよ
何か制約条件があれば追加したほうがいいかな
249 :
132人目の素数さん:2014/02/25(火) 22:29:08.17
>>248 ご丁寧にありがとうございます。
条件つける事で無事解決しました。
250 :
132人目の素数さん:2014/02/25(火) 22:57:04.23
明日の16時39分頃に気をつけて下さい。
日本にも世界にも巨大地震が起きませんように。
皆さんも一緒に祈って下さい。
太陽フレアのXが発生しました。
太陽黒点数の100越えが24日間継続しているようです。
library(foreign)
yield <- read.dta("
http://www.stata-press.com/data/r12/yield.dta")
tx <- with(yield, interaction(fertilizer, irrigation))
amod <- aov(yield ~ tx, data=yield)
library(agricolae)
HSD.test(amod, "tx", group=TRUE)
これをちゃんと動作させることって出来ますか?結果が出てきません。どこかミスしているんでしょうか?
ちなみにyield.dtaは表です。
>>251 動作しないとは具体的にどういうこと?
> HSD.test(amod, "tx", group=TRUE, console = TRUE)
Study: amod ~ "tx"
HSD Test for yield
Mean Square Error: 24.93463
tx, means
yield std r Min Max
1.0 36.91257 5.335857 20 25.54710 46.60105
[snip]
5.1 44.55313 4.663802 20 31.20605 51.55704
alpha: 0.05 ; Df Error: 190
Critical Value of Studentized Range: 4.527912
Honestly Significant Difference: 5.055736
Means with the same letter are not significantly different.
Groups, Treatments and means
a 2.1 51.18
ab 4.1 50.75
[snip]
pre_vecB<- c(1,2,3,4,0)
#pre_vecB<- c(0,0)
out_vecB<-mean(pre_vecB[pre_vecB!=0])
0があれば、0を除いて平均を求める。
0しかなければ、NAを返す。(NAN)でない。
というスクリプトを書きたいのですが、スマートな書き方ありますでしょうか?
>>253 スマートかどうか分からんが、自分ならこうする。
ifelse(is.nan(a <- mean(pre_vecB[pre_vecB != 0])), NA, a)
>>252 ありがとうございます。結果が表示されるようになりました。ってconsole=TRUEが抜けてただけでした。
申し訳ありませんでした。R初心者にも門戸を開いて頂きありがとうございました。
私は分散分析、回帰分析がRで出来るようになれればなーと思っているところです。
SPSSからの移行です。頑張って精進します。
>>254 ありがとうございました。参考にさせてください。
均一分散の仮定をせずにWhiteの推定量で回帰するにはどうしたらいいの?
普通にlmじゃ無理?
>>257 > RSiteSearch("heteroscedasticity white")
これでcarパッケージのhccm関数やrmsパッケージのrobcov関数にたどり着くよ
259 :
132人目の素数さん:2014/03/20(木) 19:50:08.95
> x<- seq(1,20,2)
> x
[1] 1 3 5 7 9 11 13 15 17 19
こういったベクトルがあって、このベクトルの後ろからN個の要素
を抜き出したいです。
Nが4なら
13 15 17 19
と返したいです。どのように書けばよろしいでしょうか?
tail(x,4)
>>260 ありがとうございます。そのまんまの関数ですね。
知らなかった。
262 :
132人目の素数さん:2014/03/22(土) 15:00:41.16
0が含まれれば0を除外して平均を求める。0しかなければNAを返す。
というサンプルです。
これを実際に運用してみると、単に平均を求めるスクリプトに比べ大変時間が
掛かることに気づきました。
webで調べてみると、ifelse文を使うと遅くなるという記事をみかけます。
同じ意味で、早く稼働するスクリプトがありましたら教えてください。
#vecA<- c(0,0,0)
vecA<- c(1,3,0)
ifelse(is.nan(a<- mean(vecA[vecA!=0])),NA,a)
ifelse(is.na(b1<-median(pre_listB[pre_listB!=0])),0,b1)
あぁ、本当だねぇ。ifelseにするとifよりも遅くなるねぇ。
ifelseを提示したのは、そちらの方が分かりやすいと思ったから。
すまなかったねぇ。
> system.time(sapply(1:1000, function(x){vecA = c(1, 3, 0); ifelse(is.nan(a <- mean(vecA[vecA != 0])), NA, a)}))
ユーザ システム 経過
0.042 0.000 0.059
> system.time(sapply(1:1000, function(x){vecA = c(1, 3, 0); if(is.nan(a <- mean(vecA[vecA != 0]))){mean(a)}else{NA}}))
ユーザ システム 経過
0.023 0.000 0.029
>>263 ありがとうございます。ifelse文がわかりやすかったから大変勉強に
なりました。
実装データの量が多くてどうしたもんだかと悩んでたもので、
新たなスクリプト助かります。
自分は基本Cを書いてますが、Rの文が摩訶不思議に思えてしまいます。
system.time()の使い方も初めて知りました。ありがとうございました。
>>264 Cの人から見たらRは摩訶不思議かも知れないけど、
変態言語のPerlよりもずっとまし。
266 :
132人目の素数さん:2014/03/26(水) 23:24:54.38
id <-c(1,2,3,4,5)
sex <-c("F","F","M","M","M")
height<- c(180,192,170,175,180)
weight<- c(50,65,60,55,70)
(MYDATA<- data.frame(ID= id, SEX= sex, HEIGHT= height))
上のようなデータフレームがあるとします。
ここでid=3の行データを以下のように変更(差し替え)したいとするとき、
ID = 3;
SEX = "F"
HEIGHT =150
WEIGHT =55
どう書けばいいでしょうか?
>>266 >(MYDATA<- data.frame(ID= id, SEX= sex, HEIGHT= height))
じゃなくて、
> (MYDATA<- data.frame(ID= id, SEX= sex, HEIGHT= height, WEIGHT = weight))
だよね。で、date.frameのrow向きの差し替えは、べたな方法しかないと思うよ。
どこかのパッケージに当該機能を有する便利な関数があるのかもしれないが。
> MYDATA[3, ] <- list(ID = 3, SEX = "F", HEIGHT = 150, WEIGHT = 55)
> MYDATA
ID SEX HEIGHT WEIGHT
1 1 F 180 50
2 2 F 192 65
3 3 F 150 55
4 4 M 175 55
5 5 M 180 70
268 :
267:2014/03/27(木) 10:10:01.03
気になって試行錯誤をしたら、順番が正しければ変数名は省略できるようだ。
> MYDATA[3, ] <- list(3, "F", 150, 55)
ただし、変数名があってもなくても、順番を間違えると、期待通りの結果を得られないから要注意。
また、変更箇所が多ければ、edit()を使うことを勧める。
うちは、
> Sys.getenv("EDITOR")
[1] "vi"
だけど、使い慣れたテキストエディタを設定しておいた方がよいだろう。
viのキーバインドを知らなかったら、混乱すると思う。
>>267 ありがとうございます。WEIGHT忘れてました。
list()と、MYDATA[,]でデータフレームのリスト要素を変更できるの
ですね。
これを使えば、変更(差し替え)だけでなく、列を追加するのにも
同じやり方なので便利ですね。
edit()の使い方もありがとうございました。
>>269 お役に立ったようで、どうも。
行(row)や列(col)の追加は、もっと簡単でrbind()やcbind()を使います。
列の場合は
MYDATA$新変数 <- runif(5)
とかでも、MYDATAデータフレームの中に新しく「新変数」が作成されます。
# RjpwikiのQ&Aで質問が放置されていたので回答したけど、
# 河童さんはやっぱりggplotが嫌いなんだな。
普通のプログラムでは、0割するとクラッシュしてしまうから、
事前に0割を避ける条件文を作らなくてはいけないんだけど。
Rでは、Infが返ってくるだけなのだから、(クラッシュしない)
答を求めて、Infが出たときに対応の処理をさせてもいいですよね。
プログラムとして0割に対して特に対応しなくてもいいですかね。
>>271 そんなのプログラムによる話で、一般化できない。
273 :
132人目の素数さん:2014/03/29(土) 10:39:15.46
>>271 まともな統計ソフトならみな対応してるよ
Excelは表計算ソフトでしょ。
アドインは発注品だし、マイクロソフトは統計ソフト作っているわけじゃないし。
アドインの酷さは検索すれば出てくるよ。
276 :
132人目の素数さん:2014/03/30(日) 18:10:19.21
Perlの小飼弾は天才
UCB
河童さんは関西人だったのか。
東京の人はチャーリー浜なんて知らないよね。
278 :
132人目の素数さん:2014/04/02(水) 07:56:27.99
Mac版だと--interactiveという起動オプションがありますが、
Windows版だとこれではなく、変わりに--essという起動オプションがあります
この2つのオプションの挙動に何か違いはありますか?
VimShellの:VemShellInteractiveで呼んでいるのですが、現状違いはないように
思えて、オプション名が違う理由がよくわかりません
オプションが名が違うのは別のオプションだからです。以上。
>>278 >VimShell
初めて聞いた。便利そうだけど、所詮、ESSには勝てないと思う
281 :
132人目の素数さん:2014/05/11(日) 14:07:13.75
マルチタスク学習やりたいんだけどパッケージありませんか?
月曜日までに必要なのでお願いしますね
>>281 スルー検定は全員合格か。素晴らしい。
ExtraTrees法なら、extraTreesパッケージかな。
writewebGLで保存した図をパワーポイントに図として乗せたいのですが動かせる形でパワーポイント上に図として乗せるにはどうすればいいでしょうか?
Livewebってやつのpptアドインがあるみたいだけど上手く行かんな
グラフをアスキーアートで書くとか
フレームバッファに書くとか
できますか?
ThreeWayパッケージのT3って三相因子分析のことなのでしょうか?
>>286 何でマニュアルを読まないの?
T3: Interactive Tucker3 analysis
Description: Detects the underlying structure of a three-way array according to the Tucker3 (T3) model.
とりあえず、下記を読んだら?
P. Giordani, H.A.L. Kiers, M.A. Del Ferraro (2014). Three-way component analysis using the R
package ThreeWay. Journal of Statistical Software 57(7):1–23.
L.R Tucker (1966). Some mathematical notes on three-mode factor analysis.
Psychometrika 31:279–311
ありがとうございます。
PCAUSP(超行列の主成分分析?)でcomponentの数の決定を行うと思うのですがここでのcomponentはそれぞれのモード?の因子数を選択しているのでしょうか?
よろしくお願いします。
皆様は画像はpdfで出していますか?
アスキーアートでも出せますか?
なぜにアスキーアートにこだわるのか分からないけど
出せるかどうかということならあなたがそういう関数を自作すれば出せる
現状でそういう機能を持ったライブラリが存在するかということなら恐らく存在しない
理由はアスキーアートでは現実的な精度のグラフを書くことが難しいから
csoundっていうソフトでは出せますよ?
そのソフトが使っているライブラリーわかりますか?
ここはRのスレだからなぁ
そのソフトのスレに行って聞くといいんじゃないかなー
>>289 LaTeX用に出力するときはpdfだけど、
普段使いには、X11()かquartz()でしょ。
なぜ、いちいち全てをpdfに出力しなくてはならないのだ。
>>290,292,294
aalibを入れて、Rから呼び出せばよいのでは?
色つきならlibcacaで。
仕事なら(対価を支払ってくれるなら)、
ここにデモコードを貼るけど、
そうではないなら自分で頑張れ。
>>33 これですが、自己解決しました。
setwd(readline())
パスコピペ
で、できます
297 :
132人目の素数さん:2014/08/27(水) 01:38:55.66
機械学習のスレってどこの板にある?
298 :
132人目の素数さん:2014/08/27(水) 01:40:55.49
299 :
132人目の素数さん:2014/08/28(木) 00:28:03.88
>>292 linux なら
ldd `which csound`
でリンクしてるダイナミックライブラリの一覧表示できるよ。
>>299 そいつに触るなよ。
何を助言しても意味をなさないよ。
301 :
132人目の素数さん:2014/08/28(木) 19:43:48.09
質問させてください。
Rにはすでにdatasetsが入っていて、すぐ解析出来ると聞いています。
いくつか試したいのですが、datasetsの名前や内容を紹介しているサイトはあっても、属性や変数の数などを記載しているサイトが見つかりません。
もしくは、datasetsの属性などを一覧表示できるコードがあると助かるのですが…
どなたかご助力いただけませんでしょうか?
303 :
132人目の素数さん:2014/09/08(月) 23:27:22.65
>>303 丁寧にありがとう!
2chに書き込むの初めてだったから、きついこと言われると思ってヒヤヒヤしてたよ
原始的だけどdatasetsの名前をベクトルとして作って、headとかdimとかを使ってみる
R始めたばっかで右往左往しとるけど、先が見えてきて良かった
>>304 なんとか自動化出来ないかと思いまして…
一個一個手入力でもいいんですが、もしかしたらスマートな方法があるかと思い質問していまいました。すみません。
なにをどう自動化したいのかイマイチつかめないけどデータセット自体の説明なら
ヘルプをデータセット名で検索すれば項目の説明とか出てくるよという意味ですよ
308 :
132人目の素数さん:2014/09/09(火) 01:08:30.81
>>307 さんを擁護したげよう。
俺が上の検索方法を書いたんだけど
あの画面ってヘルプ画面だし。
help.start()
でヘルプを起動するとブラウザがたちあがる。
パッケージにdatasetsがあるなら、パッケージを選択して datasets をみると
ほぼ同じの画面になる。(バージョンが異なってたら差があるかも。)
309 :
302:2014/09/09(火) 01:37:25.01
お騒がせしてしまったようですみません。50個ほどのdatasetsについて、headやnrowとかを使ってdatasets名を手入力して調べてました。
str(AirPassengers),str(BJsales),...,
nrow(AirPassengers),str(BJsales),...
さすがにこれを全てのdatasetsについてやるのはしんどいので…
datasets名の手入力をなくす方法を模索してたわけですが…
どうも下記サイトに答えがあったようです。\\(.*\\)といった呪文があって、理解するのには時間かかりそうですがもうちょっと調べてみます。
http://qiita.com/wakuteka/items/c4e341637c6ae77b4ead
310 :
302:2014/09/09(火) 01:38:30.58
すみません。誤植がありました。
お騒がせしてしまったようですみません。50個ほどのdatasetsについて、headやnrowとかを使ってdatasets名を手入力して調べてました。
str(AirPassengers),str(BJsales),...,
nrow(AirPassengers),nrow(BJsales),...
さすがにこれを全てのdatasetsについてやるのはしんどいので…
datasets名の手入力をなくす方法を模索してたわけですが…
どうも下記サイトに答えがあったようです。\\(.*\\)といった呪文があって、理解するのには時間かかりそうですがもうちょっと調べてみます。
http://qiita.com/wakuteka/items/c4e341637c6ae77b4ead
311 :
132人目の素数さん:2014/09/09(火) 02:22:11.83
>>310 いいこと教えてくれてありがとう。
Itemをstrsplitで" "で区切って1番目の要素を名前にして
pasteとparseと命令を作成してevalしてやれば半自動で命令実行できる。
他の方法としては、csvファイルで保存してもっとテキスト処理が得意なRubyとかPerlとかPythonで処理して
Rで実行できる命令に整形するとか。
for ループでまわすと自動で str(..) NROW(...)を実行できるよ。
strじゃなくてcolnamesでデータの名前を取得した方が良いかも。
sapplyでよいのでは?
>>310 正規表現を「呪文」と表現すると言うことはITの基本的な知識が全くないに近い。
Rを使うのはこの先かなり大変かも。
学生なら情報処理入門のような講義を受けた方がよいかも。
314 :
302:2014/09/09(火) 11:36:26.39
ご指摘の通り学生です。生物系の専攻ですが研究で必要になりました。
ひとまず基本情報技術者試験の本を見ながら知識を身につけてみます。
315 :
132人目の素数さん:2014/09/09(火) 15:04:20.46
情報系の講義ははっきり言って無駄だ。
俺の経験からすると。
Youtubeのチュートリアルとか本家のサイトとか
正規表現なら「正規表現 入門」とか「正規表現 最速マスター」とかでヒットしたサイトで勉強した方がよい。
大学の講義って自分のペースにあってないし終るまで半年とかかかるし効率悪すぎる。
316 :
132人目の素数さん:2014/09/09(火) 15:06:05.11
よっぽど評判良いなら受講しても良いとは思うけど
先生とか内容によるから。
Rの講座とかあるなら受けてみる価値はあるかもしれないけど。
正規表現って理系の研究室あまり重視してないっぽいしな
数値計算とかを重視してそう。
情報の基礎講座うけてうんざりした記憶がある。
317 :
132人目の素数さん:2014/09/09(火) 15:09:56.22
重視してないもなにも、適当にマニュアル読んで分からないなら死ねっていう扱いなだけだろ
当然そうだわな
318 :
132人目の素数さん:2014/09/09(火) 16:43:00.21
マニュアルなんぞ
必要箇所以外読まんだろ。
機能確認したら俺の環境だとhelp.start()でブラウザたちあげて
datasetsのhtmlページみれなくなってた。
これって異常?
>>318 異常だよ。
> library(help = "datasets")
はちゃんと出力される?
320 :
132人目の素数さん:2014/09/10(水) 00:14:13.44
>>319 回答ありがとう。
library(help = "datasets")
は表示されるけど
help.start() してパッケージのdatasetsをみると以下の
文字がブラウザに表示されてる。
No package index found for package datasets
なんでだろ?
ローカルに install.packages()で入れたパッケージのヘルプは見れるんだけどな。
root権限でインストールしたパッケージのヘルプが見れなくなってる。
baseパッケージヘルプもブラウザでみれない。
library(help=base)
はちゃんと表示されるんだけど。
設定がちゃんとできてないのかな?
321 :
132人目の素数さん:2014/09/10(水) 00:25:12.38
原因わかりました。
パッケージを入れないとそれらのパッケージのhtmlファイルがはいってないみたい。
Debian Linuxをつかってるんだけど。
r-base-html
ってパッケージを入れたら多分表示される。
322 :
132人目の素数さん:2014/09/10(水) 00:27:51.48
いま入れてみたそのパッケージ。
ちゃんと表示されるようになりました。
いつもネット検索して調べてたから気付かなかった。
Rcmdrの使い方について分かりやすく解説されたサイトや成書はありますか?
324 :
132人目の素数さん:2014/09/28(日) 22:42:09.57
>>323 群馬大学の大学院の研究室のサイトにあったよ
教授の名前忘れてもうた!・
>>323 「「R」 Commander ハンドブック」は? ちょっと古いけど
>>324 群馬大学なら青木先生だと思うけど
Rcmdrなんて使うくらいならJSTATなり市販ソフト使えよ
Rは、中身わかんないけどとにかく結果だけ欲しい、って人向けじゃない
>>327 いやいや、誰もwelcomeだよ。
使いたい人が使えばいい。その自由がOSSのよさだよ。
中身は分からないけどとにかく「無料で」結果だけが欲しい人であっても。
Rcmdrを使いたい人は、Rcmdrを入り口にして、普通のRコンソールを使うようになればいい。
いいよそういう奇麗ごとは
>>330 馬鹿が他人をタダ働きさせようとするブログにしか見えない。
dはデータフレームで、1列目(V1)にクラスを表わす文字列、他の列はその特徴量が入ってます
library(kernlab)で読み込んだ状態です
> set.seed(0)
> ksvm(V1~.,d) (ここがksvm(d$V1~.,d)も同じ)
と
> set.seed(0)
> ksvm(d[,1]~.,d)
で結果が変わります。下の方は誤分類率0%となり不自然?で、正しいのは上のV1を使うほうなのでしょうが、なぜ結果が変わるのかがわかりません。
どなたか詳しい方教えてください
> str(d)
'data.frame': 512 obs. of 3 variables:
$ V1: Factor w/ 4 levels "a","b","c","d": 1 1 1 1 1 1 1 1 1 1 ...
$ V2: num 0 0 0 0 0 0 0 0 0 0 ...
$ V3: num 0 0 0 0 0 0 0 0 0 0 ...
kernlabは知らないけどlm()だと正しくformulaを渡せないね。
> formula(lm(V1 ~ ., d))
V1 ~ V2 + V3
> formula(lm(d$V1 ~ ., d))
d$V1 ~ V2 + V3
> formula(lm(d[,1] ~ ., d))
d[, 1] ~ V1 + V2 + V3
同じようなことになってるんじゃない?
>>333 formulaって関数は使えなくて実際にやってみられてないんですけど
その「V1 ~ V2 + V3」というのは、「クラスV2、V3を使って(dから)V1を予測しよう」という意味で、それをformulaに渡せているということですかね
(
ttp://d.hatena.ne.jp/araili/20100728/1280313431)
d[,1]~.でダメだったのは、d[,1]という定数を指定したために変数からV1を除外できていない(V1も予測するために使う変数として考えられていた)
予測する対象はd[,1]にV1読んだのと同様に順番・値がそろっていて、分類を予測するときはクラスそのものであるV1を使うので、誤分類率0%となってるわけですか
文が長くなってすみません。結構考えてたんですが、質問してみてよかったです。同時に、予兆はあったのに情けないです。
答えていただきありがとうございました。
ThreeWayパッケージのCP関数を実行した場合寄与率に当たる個所はどこになるのでしょうか。
よろしくお願いいたします。
連投すいません。
PCA of MEANを実行した際に固有値とfitが出てきたのでfitが累積寄与率になるのではないかと解釈しております。
この解釈で良いのでしょうか。
よろしくお願いいたします。
337 :
132人目の素数さん:2014/10/09(木) 02:19:56.75
質問させてください。
例えば、100×100の行列のデータがあったとして、11から40列の各行の数字を掛け算した
1×100の行列を作成するにはどのように記述すれば宜しいでしょうか。
apply(A[,11:40],1,prod)
これでダメかな
339 :
132人目の素数さん:2014/10/10(金) 00:20:16.58
>>338さん
ありがとうございました!
もう一つ質問なのですが、文字列を含むcsvファイルを読み込みました。
数字しか入っていない列も文字列として認識されてしまっているのですが、
数字しか入っていない列を切り取って、これを数字形式に変換するにはどうすればよいでしょうか。
340 :
338:2014/10/10(金) 00:33:16.71
as.numeric(a$b)
でどうかしらん?
あとはリード.シーエスヴィーのオプションをちゃんとしていする方法もあるわよん
341 :
132人目の素数さん:2014/10/10(金) 00:46:11.72
>>340さん
ありがとうございます。
が、初心者なので具体的にどうすればよいかまだ分かりません。
例えばread.csvのオプションは銅のように設定すればよいのでしょうか。
>>339 >数字しか入っていない列も文字列として認識され
数字以外のものが混入しているパターンとエスパー
例えば、半角空白は文字であって数字ではない。
表計算ソフトじゃ無くてテキストエディタでcsvの中を確認しては?
343 :
342:2014/10/10(金) 01:45:15.16
追記。
例えば、
$ echo -e "x1,x2¥n11,A¥n22,B¥n' ',C¥n33,D" > test.csv
$ cat test.csv
x1,x2
11,A
22,B
' ',C
33,D
というcsvファイルがあったとして、
> read.csv("test.csv")
x1 x2
1 11 A
2 22 B
3 ' ' C
4 33 D
> class(read.csv("test.csv")$x1)
[1] "factor"
というように、数値型にならずに因子型になる。
表計算ソフトではx1の3番目は空白なので見えない。
再現できるcsvくれ
>>336 どうもPCA pf MEANは2相の主成分分析の様です。
CPfuncで計算されるfitにあたるものが累積寄与率にあたるものなのでしょうか?
346 :
132人目の素数さん:2014/10/11(土) 21:18:27.38
質問です。データフレームの列名の一部を変更したいのですがどのように操作すれば宜しいでしょうか。
よろしくお願いします。
>>346 > (dat <- data.frame(x = 1:3, y = month.name[1:3], z = LETTERS[1:3]))
x y z
1 1 January A
2 2 February B
3 3 March C
というデータフレームがあったとして、
yをhogeに替えるなら、
> names(dat)[2] <- "hoge"
> dat
x hoge z
1 1 January A
2 2 February B
3 3 March C
例では1つの列名だけだが、もちろん、複数の列名を同時に替えることもできる。
348 :
132人目の素数さん:2014/10/12(日) 09:52:52.95
>>347さん
ありがとうございます!
もう一つ質問させてください。
例えば以下のようなデータフレームがあったとします。
data1、data2、data3、・・・
下の繰り返し処理の中で、ループの中でdata1、data2、・・・のデータフレーム
を読み込みたいのですが、どのように記述すればよいのでしょうか。
#for (i in 1:5) {
}
下記のように記述したのですがうまくいきませんでした。
(pastedateにはdata1という名前のデータが入ってしまい、以前に入ってたデータは消えてしまっているようです。)
pastedate <- paste("data",i,", sep = "")
sumdata<-rbind(XXXXX,pastedate)
よろしくお願いします。
>>348 いまいち状況が分からない。
data1, data2, ...をファイルから読み込みたいのか、
それとも、単に既存のデータフレーム(data1, data2, ...)をrbindで連結したいのか。
後者なら、
> data1 <- data2 <- data3 <- data.frame(x = runif(3))
というデータフレームがあったとして、
> alldata <- lapply(paste0("data", 1:3), get)
という感じでリスト化して、
> Reduce(rbind, alldata)
とすれば結合できる。
他にも、いろいろな連結方法があると思うけど、
自分は、シリーズになっているデータフレームは常にリスト化して運用するので、
do.call()やReduce()で連結している。
## S4 method for signature 'formula'
ksvm(x, data = NULL, ..., subset, na.action = na.omit, scaled = TRUE)
ってヘルプに書いてあったのに、xがformulaのときここに出てない引数を使えるんですけどどうしてですか?
一つ和訳がわからなかったのですが、...(説明:additional parameters for the low level fitting function)が関係あるんでしょうか
>>350 引数「...」は下請け関数にそのまま渡す引数。
kvsm()は直接使わないけど、
下請け関数が使う引数を指定できますよという意味。
もし「...」がなければ、kvsm()が指定した引数以外を指定するとエラーになる。
例えば、
> f <- function(x = 1){return(x)}
という関数を定義して実行すると、
> f()
[1] 1
となるが、x以外を指定するとエラーになる。
> f(y = 2)
以下にエラー f(y = 2) : 使われていない引数 (y = 2)
でも「...」を追加するとエラーにならない。
> f <- function(x = 1, ...){return(x)}
> f(y = 2)
[1] 1
>>351 なるほど。
たとえば
「ksvm(x,data=y,cross=n)」→分析結果(分類法、誤分類率、n重交差確認法による誤分類率)
(「ksvm(x,data=y)」(xはyの列の内クラスを表わす列を指す)→分析結果(分類法、誤分類率))
というようにヘルプの形式に明示してないけど使えたcrossは、総称的関数ksvmからこの時呼ばれた下請け関数に渡され、使われたのですね
すっきりしましたありがとう!
353 :
132人目の素数さん:2014/10/14(火) 23:54:05.52
テキストファイルから、Rのデータフレームに格納することを考えています。
例えば2014年10月10日の血液検査のデータが
WBC 4900, RBC 470, Plt 47.3, ALT 32, CRP 7.2, AdV -, Ur.WBC 3+
このようなテキストデータで与えられたとします。
これを読み込んでデータフレームに次のように格納するにはどのようにすればよいでしょうか。
data.frame(20141010, WBC)=4900, data.frame(20141010, RBC)=470, .........
Rだけでやるより、ほかの言語で読み込んで、Rに渡す方がいいでしょうか。
その後で、そのデータフレームからopen office calcのworksheetの相当するセルに値を入れることを考えています。そこはR4Calcでできるかと考えているのですが。アドバイスお願いし
>>353 お、同業者が来た。
そのままcsvとして読み込んで、データを分離しちゃえば?
2行のtmp.csvがあったとして、
> (a <- read.csv("/tmp/tmp.csv", header = FALSE))
V1 V2 V3 V4 V5 V6 V7
1 WBC 4900 RBC 470 Plt 47.3 ALT 32 CRP 7.2 AdV - Ur.WBC 3+
2 WBC 4900 RBC 470 Plt 47.3 ALT 32 CRP 7.2 AdV - Ur.WBC 3+
とdata.frameにする。変な空白が混入したので前処理。空白が混入しなければ不要。
> library(stringr)
> (b <- t(apply(a, 1, str_trim)))
V1 V2 V3 V4 V5 V6 V7
[1,] "WBC 4900" "RBC 470" "Plt 47.3" "ALT 32" "CRP 7.2" "AdV -" "Ur.WBC 3+"
[2,] "WBC 4900" "RBC 470" "Plt 47.3" "ALT 32" "CRP 7.2" "AdV -" "Ur.WBC 3+"
さて、次にstrsplit()で分離して、必要なところだけを回収する。
> sapply(apply(b, 2, strsplit, split = " "), function(x){sapply(x, function(y){y[2]})})
V1 V2 V3 V4 V5 V6 V7
[1,] "4900" "470" "47.3" "32" "7.2" "-" "3+"
[2,] "4900" "470" "47.3" "32" "7.2" "-" "3+"
355 :
354:2014/10/15(水) 01:43:41.07
read.csv()のstrip.whiteオプションの存在を忘れていた。
これを指定すれば前処理は不要。
> (a <- read.csv("tmp.csv", header = FALSE, strip.white = TRUE))
V1 V2 V3 V4 V5 V6 V7
1 WBC 4900 RBC 470 Plt 47.3 ALT 32 CRP 7.2 AdV - Ur.WBC 3+
2 WBC 4900 RBC 470 Plt 47.3 ALT 32 CRP 7.2 AdV - Ur.WBC 3+
> (b <- sapply(apply(a, 2, strsplit, split = " "), function(x){sapply(x, function(y){y[2]})}))
V1 V2 V3 V4 V5 V6 V7
[1,] "4900" "470" "47.3" "32" "7.2" "-" "3+"
[2,] "4900" "470" "47.3" "32" "7.2" "-" "3+"
> b <- data.frame(b)
> names(b) <- c("WBC", "RBC", "Plt", "ALT", "CRP", "AdV", "Ur.WBC")
> b
WBC RBC Plt ALT CRP AdV Ur.WBC
1 4900 470 47.3 32 7.2 - 3+
2 4900 470 47.3 32 7.2 - 3+
追記。いまいち意図がくみ取れないけど、
「20141010」は行名ということかな。
そして、「WBC 4900, RBC 470, Plt 47.3, ALT 32, CRP 7.2, AdV -, Ur.WBC 3+」は2014年10月10日のデータで、
次のデータ行は2014年10月11日だったりするのかな?
それなら、2014年10月10日と翌日のデータが入ったtmp.csvがあったとして、
> a <- read.csv("tmp.csv", header = FALSE, strip.white = TRUE)
> b <- sapply(apply(a, 2, strsplit, split = " "), function(x){sapply(x, function(y){y[2]})})
> b <- data.frame(b, row.names = seq(20141010, length.out = nrow(b)))
> names(b) <- c("WBC", "RBC", "Plt", "ALT", "CRP", "AdV", "Ur.WBC")
> b
WBC RBC Plt ALT CRP AdV Ur.WBC
20141010 4900 470 47.3 32 7.2 - 3+
20141011 4900 470 47.3 32 7.2 - 3+
こんな感じかな。
357 :
132人目の素数さん:2014/10/16(木) 21:16:18.81
356さん
有難うございます。
apply関数の使い方をべんきょうしてみます。
また質問させてください。
RをUSBにインストールしたいんですが
一応あるブログを参考にインストールできたのですが
パッケージをインストールしたさいにUSBに保存されないのはどうしたらいいでしょうか?
>>358 パッケージのインストール先をUSBに指定すればいいと思うよ
>>359 それはどうしたら指定できますか?
パッケージをインストールすると
ダウンロードされたパッケージは、以下にあります
C:\Users\NEC-PCuser\AppData\Local\Temp\Rtmpgdg0TT\downloaded_packages
と表示されるのでUSBに保存されていないようです
>>360 >それはどうしたら指定できますか?
いろいろな方法があるけど、
とりあえずは、install.pacakges()のlibオプションでインストール先を指定すればどうだい?
見たところ、Windows? USBブータブルなLinuxの話じゃ無かったの?
「あるブログ」とか話をぼかさずにちゃんと伝わるように説明しようよ。
Windowsのパスの仕組みはよく知らないけど、例えば、DとかEとかなら、
> install.packages(c("hoge", "fuga"), lib = "D:/library", dependencies = TRUE)
とか。Windowsのパス表記が間違っていたらすまん。
Windowsのパス区切り記号は変態的だから、normalizePath()とかで正常化してやる必要があるかも。
逐次的に指定するのではなく、恒久的にパッケージのインストール先をUSBにしたいなら、
$HOME/.Rprofile に「.libParhs(USB内のインストール先)」を書いておく。
install.packages()のlibオプションが省略された場合、.libPaths()の最初の要素が使われるので、
それをR起動時に設定してしまうという方法。
>>362 install.packages()でlibを指定して、ちゃんとUSB内にインストールされるのことは確認したの?
また、そのブログには環境変数R_LIBSをちゃんと設定するように書いてあるけど。
| 環境変数R_LIBSを設定することで、追加したライブラリがUSBメモリ内に
| インストールされるようにする
ドライブレターが毎度変わるから、R起動前にカレントディレクトリを変更して、
R_LIBSをフルパスではなく相対パスにするのはさすがだ思った。
ブログに書いてある通りに、バージョンを読み替えながら設定したら、
うまくいきそうなんだけどなぁ。
私は、Winodwsユーザじゃないので、Rの話ではないWindows操作の話なら、
他の方にパス。
364 :
132人目の素数さん:2014/10/20(月) 09:10:02.77
なにも設定してないと自分のホームディレクトリのRのディレクトリ内にパッケージがインストールされるはずだけど。
LinuxならそれをシンボリックリンクでUSBのところにして上手くUSBのところに保存されるようにするとか
mount --bind
してやれば希望の動作になりそうな気がするけどな。
>>364 仕様が変わったの?
ホームディレクトリにRのディレクトリを作らなければ、システム側にインストールされるはずだけど。
ホームディレクトリに、Rのディレクトリが存在する場合は、そちらが優先されるらしいが。
RStudioとかは、ホームディレクトリ内にRのディレクトリを勝手に掘っちゃうので迷惑する。
366 :
132人目の素数さん:2014/10/20(月) 14:04:45.85
>>365 ユーザでinstall.package("hogehoge")
したら普通に自分のホームディレクトリにRを作ってその中にさらにディレクトリ、その中にインストールしてくるけどな。
それをmount --bind であらかじめusbの該当のディレクトリに繋げとけば楽だと思うけどな。
>>366 新ユーザを作成して試してみた。
$ R --vanilla
[snip]
> install.packages("A3")
Installing package into ‘/usr/local/lib/R/site-library’
(as ‘lib’ is unspecified)
install.packages("A3") 中で警告がありました:
'lib = "/usr/local/lib/R/site-library"' は書き込み可能ではありません
Would you like to use a personal library instead? (y/n) n
以下にエラー install.packages("A3") :
パッケージをインストール出来ませんでした
以上により、.libPaths()[1]は、
ホームディレクトリのRディレクトリではなく、
/usr/local/lib/R/site-library であることが確認できた訳だけど、
「personal libraryを作る」に y と回答すれば、
確かに勝手にディレクトリを掘りそうだな。
拒否すれば勝手なことはされないけど。
拒否せずに許可するのが「普通」であれば、
>>366 は正しいな。
$HOMEを汚されたくない人 (system-wideにしたい人)は、
/usr/local/lib/R/site-libraryにsetgidが立っているから、
このグループに自分のユーザ名を追加することだね。
368 :
132人目の素数さん:2014/10/20(月) 15:23:14.73
>>367 Linuxならシンボリックリンクはっとくとか
mount --bindしとけば汚れないよ。
>>368 「Linuxなら」とか、元質問者であるWindowsユーザを置いてけぼり
370 :
132人目の素数さん:2014/10/20(月) 17:50:22.09
はよWindows消してLinuxとかBSDにしてしまえ!
そうすれば寿命伸びるよPCの。
無理してバージョンアップで肥大化するOSのためにハードを強化する必要なくなるし。
話題がズレてるし
362です
R_LIBS=の後にインストール先を入力すればいいってことですか?
>>372 その方法も正しいです。
ただし、USBだと、ドライブレターがころころ変わるので、
インストール先を設定するのが難しく、
そこを乗り越える必要があります。
どうやって乗り越えるのか、その一例が、あなたが示したブログに書かれています。
念のために、申し添えますが、R_LIBSはOSの環境変数です。
(出来なくはないけど)Rの操作によって設定するものではありません。
374 :
132人目の素数さん:2014/10/21(火) 20:46:25.64
>>372 消せるディレクトリを指定して容量の少ないパッケージをインストールしてみたら話はやいんだよ。
それでどういうディレクトリ掘られるかわかるでしょ。
あとはインストールしたいディレクトに微調整すればOK。
Linuxなら上に書いたようにmount --bindとかシンボリックリンクでいけるけど
Windowsにはそういうの無いの?
>>375 Rじゃないrは便利ですよ。
bcで十分と考える人には必要ないですが、
例えば、sin(10)っていくつだったけと思ったとき、
$ echo 'print(sin(10))' |r
[1] -0.5440211
とすれば、Rを起動してなくても即座に結果を得ることが出来る。
また、統計的検定なら、
A群(145/300)とB群(157/250)の比率の差を検定するとき、
わざわざRを起動しなくても、rに流し込めばその場で結果を得ることが出来る。
$ echo 'print(prop.test(c(145, 157), c(300,250)))' |r
2-sample test for equality of proportions with continuity correction
data: c(145, 157) out of c(300, 250)
X-squared = 10.9497, df = 1, p-value = 0.0009362
alternative hypothesis: two.sided
95 percent confidence interval:
-0.23071879 -0.05861454
sample estimates:
prop 1 prop 2
0.4833333 0.6280000
377 :
132人目の素数さん:2014/10/22(水) 14:56:44.89
>>375 実行ファイルとして
/usr/bin/r
がイストールされるみたい。
シェルスクリプトのように
#!/usr/bin/r
ではじまる ファイルでRのコマンドが実行できるみたい。
俺もインストールした知らなかったありがとう。
>>376 さんの使い方も参考になった。
インストールして以下で内容物確認
dpkg -L littler
あとは
man r
読むとわかりやすいよ。
>>377 スクリプト言語として使うなら、
littlerよりも、
#!/usr/bin/Rscript
の方がよいとどこかで読んだ気がする。
379 :
132人目の素数さん:2014/10/22(水) 18:47:04.91
あ
3次元ヒストグラムを書いたプログラム例などありませんでしょうか?
>>381 3次元というのは、3変量という意味か、2変量で立体的にしたヒストグラムか、
どんなものをイメージしているの?
>>382 レスありがとうございます
2変量?でしょうか?
x,yの値があって、z軸に頻度分布、のような。
ありますでしょうか?
>>383 なるほど。では、手作業でやるとこんな感じかな。自分で関数化して使って。
> d <- data.frame(x1 = rnorm(100), x2 = rnorm(100))
というデータがあったとして、
> h1 <- hist(d$x1, plot = FALSE)
> h2 <- hist(d$x2, plot = FALSE)
> c1 <- cut(d$x1, h1$breaks, right = FALSE)
> c2 <- cut(d$x2, h2$breaks, right = FALSE)
> table(c1, c2)
c2
c1 [-4,-3) [-3,-2) [-2,-1) [-1,0) [0,1) [1,2) [2,3)
[-3,-2.5) 0 0 0 0 1 0 0
[-2.5,-2) 0 0 0 1 1 1 1
[-2,-1.5) 0 0 0 1 3 1 0
[-1.5,-1) 0 1 0 2 2 0 0
[-1,-0.5) 0 0 3 4 8 2 0
[-0.5,0) 1 0 2 10 5 0 1
[0,0.5) 0 0 2 2 12 1 0
[0.5,1) 0 0 3 6 6 0 0
[1,1.5) 0 0 0 4 4 1 0
[1.5,2) 0 0 1 1 1 3 0
[2,2.5) 0 0 0 0 1 0 0
[2.5,3) 0 0 0 0 1 0 0
と2次元の度数分布表が作成できるから、scatterplot3dパッケージでプロット。
> library(scatterplot3d)
> scatterplot3d(as.data.frame(table(c1, c2)), type="h", lwd=5, pch=" ")
期待したのと違うなら、もっと具体的に説明して。
>>384 ありがとうございます。
まさに、これです。大変助かりました。
いただいたサンプル利用させていただきます。
ありがとうございました。
386 :
132人目の素数さん:2014/11/01(土) 13:07:52.20
R 3.1.2 来た!
Win用バイナリはあるけど、MacOSX用バイナリはまだない。
Ubuntu PPAにも来ていない。Debianもまだ。
387 :
132人目の素数さん:2014/11/01(土) 13:14:46.47
自分確認すべきだけど大きな変更あった?
便利になる機能ある?
バグフィックスがメインかな?
>>387 OS XでCLIのRを使っている人はXQuartzがらみで要確認だけど、
Yosemite対応もしているみたいだし、それほど変更点はなさそう。
WindowsのR.exeは64bit固定になったみたいだが、関係ないので読み飛ばした。
個人的に注目したのはembedFonts()のformat引数の値が、
今までNULLだったけど"ps2write"に変わったことぐらい。
なんだかんだ言っている間に、OS X版バイナリが来た。
でも、Snow Leopard版とMarvericks版のみ
390 :
132人目の素数さん:2014/11/01(土) 18:25:44.30
Macおじさん多いんだね
392 :
132人目の素数さん:2014/11/02(日) 10:26:48.46
Linux Debian Sidだとすでに3.1.2のパッケージ昨日の段階で供給されてたみたい。
今確認したら3.1.2になってた。
plot()の技術的な質問失礼します
plot(iris$Sepal.Width, iris$Sepal.Length, col=c(2,3,4)[iris$Species])
のように記述すれば質的変数で点の色分けが出来ますが、
x種はy色、と明示的に記述する方法などありますか?
(質的変数の名前順を確認して色を割り振る、最初に質的変数毎に分けておいてpointsする、などで
簡単に実現できるので絶対必要というわけではありませんが、何か簡単な書き様があるのではと気になっています)
>>393 せっかく簡単に色指定できるようにRで工夫されているのに、
いちいちx種はy色とか個別に指定すると逆に面倒な気がするが、
次のようにすれば、x種はy色と指定できる。
> cols <- character(nrow(iris))
> cols <- NA
> cols[iris$Species == "setosa"] <- "orange4"
> cols[iris$Species == "versicolor"] <- "violetred"
> cols[iris$Species == "virginica"] <- "tan4"
> plot(iris$Sepal.Width, iris$Sepal.Length, col = cols)
395 :
394:2014/11/14(金) 14:50:16.66
別解として、事前に色対応のデータフレームを作成しているとすると、
次のような感じ。
> (col.table <- data.frame(Species = c("setosa", "versicolor", "virginica"), cols = c("orange4", "violetred", "tan4")))
Species cols
1 setosa orange4
2 versicolor violetred
3 virginica tan4
という対応テーブル(データフレーム)が事前にあったとして、
> iris2 <- merge(iris, col.table, x.all = TRUE)
> with(iris2, plot(Sepal.Width, Sepal.Length, col = cols))
>>394-395 レス遅くなりまして申し訳ありません
参考にさせていただきます、ありがとうございました
397 :
132人目の素数さん:2014/11/28(金) 18:55:36.77
積分を含んだ関数のフィッティングってできますか?
例えば、
f(x) = ∫^1_x {a*t^b/√(t^2 - x^2)}dt
0<x<1
のようなやつです
>>397 与えられた関数ではたぶんt^2-x^2が負になることがあるのがめんどいので変えました
できてるかな?コードが汚いのは勘弁して下さい
SS<-function(par){
a=par[1]
b=par[2]
t=par[3]
fx<-c()
for(m in 1:10){
fx<-c(fx,integrate(f,lower=1,upper=x[m],a=a,b=b,t=t)$value)
}
print(fx)
return(sum((y-fx)^2))
}
f<-function(x,a,b,t){
#if(0<x && x<1){return(0)}
#return((a*t^b)/(sqrt(t^2-x^2)))
return(a*x^b+t*log(x))
}
x<-1+2*runif(10)
y<-x+runif(10)
SS(c(1,1,1))
fx=integrate(f,lower=1,upper=12,a=1,b=0.5,t=1.2)
optim(c(1,1,1),SS)
399 :
132人目の素数さん:2014/11/28(金) 22:48:41.97
うひょー、こんなパッとできるのですか!
ありがとうございます
>400
生中継のみで録画なしか。
出遅れた。残念。
402 :
132人目の素数さん:2014/12/04(木) 14:43:19.93
optim関数を実行した時に「オブジェクトは 'double' に変換できません」というエラーが出ます。
何が原因でしょうか?
以下コード
data <- read.table("RSRF_mc150k_80kev.txt", header=FALSE, sep="\t")
f <- function(par){
b <- par[1]
c <- par[2]
d <- par[3]
l <- par[4]
f <- par[5]
g <- par[6]
h <- par[7]
m <- par[8]
V1 <- data[1]
V2 <- data[2]
w <- (-V2 + 1 - ((b*exp(-f*V1))/(1-exp(-f)) + (c*exp(-g*V1))/(1-exp(-g)) + (d*exp(-h*V1)/(1-exp(-h)) + (l*exp(-m*V1))/(1-exp(-m))))^2 )
return(w)
}
init <- c(1.611e-5, 1.468e-4, 9.19e-4, 1.48e-2, 0.0023, 0.0150, 0.0827, 0.5786)
opt <- optim(par=init, fn=f, NULL, method = "SANN")
以下にエラー optim(par = init, fn = f, NULL, method = "SANN") :
(list) オブジェクトは 'double' に変換できません
optim関数は関係ない
V1、V2にデータフレームが入っているからエラーが出る、たぶん
(参考) irisを例にstr()で構造を確認してみれば、これらで構造が違うことが解る
str(iris[1])
str(iris[,1])
404 :
132人目の素数さん:2014/12/04(木) 18:05:52.54
>>403 ありがとうございます。
エラーメッセージが変わりました。↓
optim の目的関数が 1 つではなくて 1135 個の結果を評価しています
nlsのかわりとしてoptimを使ったのですが、nlsのように連立方程式を解くというようなことはできないということでしょうか?
どうせ目的関数がベクトルになってんだろ
略
V1 <- data[,1]
V2 <- data[,2]
w <- (-V2 + 1 - ((b*exp(-f*V1))/(1-exp(-f)) + (c*exp(-g*V1))/(1-exp(-g)) + (d*exp(-h*V1)/(1-exp(-h)) + (l*exp(-m*V1))/(1-exp(-m))))^2 )
www <- sum(w^2)
return(www)
}
略
これじゃダメ?
407 :
132人目の素数さん:2014/12/05(金) 13:04:42.76
1−100の整数を、すべて一回ずつランダムな順番で表示(発生?)させたいのですが
そのような関数はありますでしょうか
sample(1:00)でいいんじゃない?
sample(1:100,100)
>>410 全て1回ずつなら、引数sizeは省略可能だよ。
412 :
408:2014/12/10(水) 07:25:42.80
ありがとうございます!
413 :
ほげ:2014/12/10(水) 19:10:41.03
Rの入力画面が“+”になったままです。
通常の“>”にするにはどうすればいいのでしょうか。
ご教示ください。
414 :
ほげ:2014/12/10(水) 19:17:12.30
”STOP”をクリックして解決しました。
どうも失礼しました。
415 :
132人目の素数さん:2014/12/10(水) 19:21:13.85
別に失礼しなくて良いから死ね
いちおう答えておくと入力が足りないというメッセージだから足りないものを補うか、
ESCキーで逃げる。
417 :
132人目の素数さん:2014/12/24(水) 08:45:38.47
macさいこう〜
418 :
132人目の素数さん:2015/01/04(日) 21:18:39.64 ID:81Vyorrh
みなさんCPU何使ってますか?
わたしはintel i5 の2coreですが
nnetや深層学習で遅さを感じるように
なりました
420 :
132人目の素数さん:2015/01/09(金) 13:10:53.64 ID:QZWUgko2
>>419 バッチとかシェルとか使って
次々作業を自動でするようにするとか
もっと高いCPU使うとか
並列処理させてみるとか。
安いんだから台数増やして対応したらどう?
俺は基本的に一番安いノートを使ってる。
昔は高いCPUとか部品とか購入してたけど
数年たつと安物に速度も容量も負けるので
バカらしくなって高級部品は買わずに
一番安い機種を購入することにしてるよ。
421 :
至高の狐独文武学者cafeーSHO-GUNイスラム金融系最高指導者遅獄先生:2015/01/09(金) 14:20:10.06 ID:fTyN8wof
統計学は太兵を失い敗退し、時代遅れだが、
虚実混合実数確率集合論は、世界二十世紀最後の最難関
だったから、一読の価値あり。兵法書としても。
戦場で探せるかな。盗み読み。走り読み。
422 :
至高の狐独文武学者cafeーSHO-GUNイスラム金融系最高指導者遅獄先生:2015/01/09(金) 14:21:12.56 ID:fTyN8wof
大兵。
423 :
132人目の素数さん:2015/01/09(金) 21:55:55.72 ID:QZWUgko2
そうか?
数学の中で統計って結構役にたつよ。
特にコンピューター関係で非常に役にたってるじゃん。
Rを使ったクラスター分析についてわからないことがあるので教えて下さい。
Rコマンダーを使ってクラスター分析をウォード法、ユークリッド距離を使って行いました。
その際クラスター数を何個にするべきかクラスターの距離?を使って判断したいんですが
どのようにその距離を数値化することができますか。
JMPを使ったクラスター分析では例えば
クラスター数が1の場合、距離という項目が10.389
2の場合は10.256
3は10.132
4は9.618
5は9.578
というような形で明記されます。
この時3と4の間の距離が大きいのでクラスター数を3個にするといった判断基準を行ってきました。
これと同様のことをRを使って行いたいのですが、調べてもわかりません。
上記をする方法を教えていただきたいです。お願いします。
>>424 一般的に、
回答できない人 → Rコマンダーユーザ層
回答できる人 → 普通のRユーザ層
と思われるので、
Rコマンダーをメニューから実行したときに出現するコマンドを書いた方が
回答を得やすいと思うよ。
426 :
132人目の素数さん:2015/01/31(土) 12:50:36.50 ID:C1UilbcO
ネット検索しろよ
ツール名 やりたい事
でネット検索したら簡単に調べれるだろ。
osoパッケージ入れてキーワード検索するのも良いかも。
427 :
132人目の素数さん:2015/01/31(土) 21:48:54.24 ID:Epu3UWxe
30名限定!銀座で飲みながら「人生でやりたいことを諦めない」パラレルキャリアについて語り合うイベントを開催!
ってのがヒットした
428 :
132人目の素数さん:2015/01/31(土) 21:56:57.08 ID:RXQnWHQr
>>427 どんだけ検索ヘタッピなんだよ。
メンドクセーやつ。
もっと馬鹿向けのツールにかえた方が良いよ。
429 :
132人目の素数さん:2015/01/31(土) 22:10:30.13 ID:BZTS7IuP
自分が馬鹿なのを人のせいにするなよ
430 :
132人目の素数さん:2015/01/31(土) 23:00:35.19 ID:19ip1QXI
>>429 自分で使えないようなツールつかうなよ。
検索すらできないおバカ!
卒論シーズンになると子供が湧くなw
罵倒している子供も、質問している子供と50歩100歩
>>424 クラスターの個数を決めるなら、例えばNbClustパッケージを使うとか
ウォード法、ユークリッド距離を使った例
> data <- iris[,-c(5)]
> library(NbClust)
> res <- NbClust(data, diss=NULL, distance = "euclidean", min.nc=2, max.nc=6,
+ method = "ward.D2", index = "kl")
All 150 observations were used.
> print(res)
$All.index
2 3 4 5 6
5.6522 4.1503 1.5906 1.5679 2.5556
$Best.nc
Number_clusters Value_Index
2.0000 5.6522
$Best.partition
[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[38] 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[75] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[112] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[149] 2 2
432 :
419:2015/02/13(金) 17:34:03.21 ID:Wh9OMXZ9
>>420 ご助言ありがとう
高いスペックのPC買うより
安いのを複数で並列にしますわ
424です
自分なりに調べてみたんですがやはりわからないです
どうやら私が知りたいのはクラスター分析の履歴で、距離の結合過程のようです
すみませんがどなたか教えてください、困ってます
>431さんのはたぶん距離の結合過程ではないようです、でもありがとうございました
>425さん
コマンドで表すと
HClust.1 <- hclust(dist(model.matrix(~-1 +j+k+n+m, A)) , method= "ward")
plot(HClust.1, main= "Cluster Dendrogram for Solution HClust.1", xlab= "Observation Number in Data Set A", sub="Method=ward; Distance=euclidian")
です
434 :
132人目の素数さん:2015/03/01(日) 00:45:41.96 ID:TyvXqwym
>>433 昔ネット検索したときに
距離の関数を自作すれば計算してくれるパッケージあったけどな
ちゃんと検索しろよ
面倒くさくなって検索ちゃんとしとらんだろ
自分でプログラム作れないなら
検索くらいしっかりしろよ
>>434 色々と検索してみたんですがダメでした
検索するときに重要なキーワードとかあったら教えて下さい
437 :
132人目の素数さん:2015/03/01(日) 08:37:56.17 ID:TyvXqwym
>>435 途中であきらめとるだろ
俺がみつけれとんだし
まず検索しなおせよ
438 :
132人目の素数さん:2015/03/01(日) 08:38:24.79 ID:TyvXqwym
>>435 そんな手間かけずにみつけれたぞ
なんて名前のパッケージか忘れたけど
440 :
132人目の素数さん:2015/03/01(日) 18:26:16.55 ID:08QQ84Zx
>>439 OSOパッケージつかうと検索はしやすい
424です
いやもう限界です
もう自力では無理です
教えてくださいお願いします
442 :
132人目の素数さん:2015/03/01(日) 20:55:32.53 ID:08QQ84Zx
>>441 検索すらまともにできんのかよ
この馬鹿は
検索は忍耐力だけ
耐えんかい!
>>442 忍耐力というか
もう検索するキーワードがなくてどうしようもないんです
お願いですから教えて下さい
444 :
132人目の素数さん:2015/03/01(日) 23:12:06.71 ID:wKImvE5a
>>424 Rではできないと思う
おれはあきらめて、Rubyでプログラムを作ったよ
プログラミングは得意だと思っていたが二か月かかった
ネットで探しても、参考になるようなソースは見つからなかったから
かなり大変だった
健闘を祈る!
自分がした苦労はさせたくなる
RubyGemsが特別CRANより優れている訳でもないから
Rubyで書ける計算はRでも書けると思うのだが?
達成感は味わえるからね
山登り同じ