【R言語】統計解析フリーソフトR 第4章【GNU R】
■ このスレッドは過去ログ倉庫に格納されています
0001132人目の素数さん
2011/01/09(日) 17:31:49統計計算で重宝するデータ型や、複数要素を処理する演算や関数、
解析結果を表示するグラフィックなど、多彩な機能を提供します。
●関連サイト
The R Project
http://www.r-project.org/
RjpWiki
http://www.okada.jp.org/RWiki/
リンク集
http://www.okada.jp.org/RWiki/?%A5%EA%A5%F3%A5%AF%BD%B8
0652132人目の素数さん
2012/10/08(月) 17:29:34.670653132人目の素数さん
2012/10/08(月) 17:43:54.24> 活用できる社員を育成するのに金が掛かるし、企業での課題だと思う。
亀の甲羅を火にあぶる司祭たち……
0654132人目の素数さん
2012/10/08(月) 18:07:35.04, '´ _. -‐'''"二ニニ=-`ヽ、
/ /:::::; -‐''" `ーノ
/ /:::::/ \
/ /::::::/ | | | |
| |:::::/ / | | | | | |
| |::/ / / | | || | | ,ハ .| ,ハ|
| |/ / / /| ,ハノ| /|ノレ,ニ|ル'
| | | / / レ',二、レ′ ,ィイ|゙/ 私は只の数ヲタなんかとは付き合わないわ。
. | \ ∠イ ,イイ| ,`-' | 頭が良くて数学が出来てかっこいい人。それが必要条件よ。
| l^,人| ` `-' ゝ | さらに Ann.of Math に論文書けば十分条件にもなるわよ。
| ` -'\ ー' 人 一番嫌いなのは論文数を増やすためにくだらない論文を書いて
| /(l __/ ヽ、 良い論文の出版を遅らせるお馬鹿な人。
| (:::::`‐-、__ |::::`、 ヒニニヽ、 あなたの論文が Ann of Math に accept される確率は?
| / `‐-、::::::::::`‐-、::::\ /,ニニ、\ それとも最近は Inv. Math. の方が上かしら?
| |::::::::::::::::::|` -、:::::::,ヘ ̄|'、 ヒニ二、 \
. | /::::::::::::::::::|::::::::\/:::O`、::\ | '、 \
| /:::::::::::::::::::/:::::::::::::::::::::::::::::'、::::\ノ ヽ、 |
| |:::::/:::::::::/:::::::::::::::::::::::::::::::::::'、',::::'、 /:\__/‐、
| |/:::::::::::/::::::::::::::::::::::::::::::::::O::| '、::| く::::::::::::: ̄|
| /_..-'´ ̄`ー-、:::::::::::::::::::::::::::::::::::|/:/`‐'::\;;;;;;;_|
| |/::::::::::::::::::::::\:::::::::::::::::::::::::::::|::/::::|::::/:::::::::::/
| /:::::::::::::::::::::::::::::::::|:::::::::::::::::::::O::|::|::::::|:::::::::::::::/
0655132人目の素数さん
2012/10/12(金) 10:40:00.67要素M個のリストにしたいです。
x <- matrix(1:9, 3)
x_list <- list(x[,1], x[,2], x[,3])
as.list(x)でやると要素9になってしまいます。
要素M個にしたい場合は、どうすればいいですか?
0656132人目の素数さん
2012/10/12(金) 11:49:23.96split(x, col(x))
>知っているといつか役に立つ(?)関数達 - RjpWiki
(6) ベクトル、行列、データフレームをある性質で分割する、split(x,f)
0657132人目の素数さん
2012/10/14(日) 11:18:40.27x = matrix(1:12, 3, 4)
y = c(2, 5, 10)
x[1,] + y[1]
x[2,] + y[2]
x[3,] + y[1]
0658132人目の素数さん
2012/10/14(日) 11:48:08.74> x[1,] + y[1]
> x[2,] + y[2]
> x[3,] + y[1]
x[1:3,]+y[c(1,2,1)]
0659132人目の素数さん
2012/10/15(月) 13:56:05.47これでもできる。xに対して縦にしたベクトルを横に走らせながら足し算するみたいな意味。
sweep(x, 1, y[c(1,2,1)], "+")
0660馬と鹿と豚さん
2012/11/05(月) 13:00:29.47, '´ _. -‐'''"二ニニ=-`ヽ、
/ /:::::; -‐''" `ーノ
/ /:::::/ \
/ /::::::/ | | | |
| |:::::/ / | | | | | |
| |::/ / / | | || | | ,ハ .| ,ハ|
| |/ / / /| ,ハノ| /|ノレ,ニ|ル'
| | | / / レ',二、レ′ ,ィイ|゙/
. | \ ∠イ ,イイ| ,`-' |
| l^,人| ` `-' ゝ | このスレは馬と鹿と豚ばかりね。
| ` -'\ ー' 人
| /(l __/ ヽ、
| (:::::`‐-、__ |::::`、 ヒニニヽ、
| / `‐-、::::::::::`‐-、::::\ /,ニニ、\
| |::::::::::::::::::|` -、:::::::,ヘ ̄|'、 ヒニ二、 \
. | /::::::::::::::::::|::::::::\/:::O`、::\ | '、 \
| /:::::::::::::::::::/:::::::::::::::::::::::::::::'、::::\ノ ヽ、 |
| |:::::/:::::::::/:::::::::::::::::::::::::::::::::::'、',::::'、 /:\__/‐、
| |/:::::::::::/::::::::::::::::::::::::::::::::::O::| '、::| く::::::::::::: ̄|
| /_..-'´ ̄`ー-、:::::::::::::::::::::::::::::::::::|/:/`‐'::\;;;;;;;_|
| |/::::::::::::::::::::::\:::::::::::::::::::::::::::::|::/::::|::::/:::::::::::/
| /:::::::::::::::::::::::::::::::::|:::::::::::::::::::::O::|::|::::::|:::::::::::::::/
0661132人目の素数さん
2012/11/09(金) 15:34:45.80http://homepage2.nifty.com/nandemoarchive/toukei_hosoku/gazou/anova_jizen_kentei_03.png
回帰直線の例である、よく教科書に載ってる図で、
「誤差が正規分布」してる様子を表したいです。
確率密度関数のプロット図を横に複数個並べたいんです。
0662132人目の素数さん
2012/11/09(金) 15:48:43.41http://t2.gstatic.com/images?q=tbn:ANd9GcSrGXCsyQu2rLsUEyeHakE0NWzk9-6hHsQhc390LDitoxLXxr0UydG2HTDv
0663132人目の素数さん
2012/11/09(金) 16:13:59.17描ける。でもちょっと頭の体操が必要かも。
>>662
同上。でもオレならPGF/Tikzで描くかな。
ttp://www.texample.net/tikz/examples/feature/plotting/
0664663
2012/11/09(金) 17:14:42.51RjpWikiと違って図を載せられないし、半角スペースは削除されるので、
わかりにくいかも知れない。
# サンプルデータ
dat <- data.frame(x = c(rnorm(50) - 2, rnorm(50), rnorm(50) + 2),
g = c(rep("x", 50), rep("y", 50), rep("z", 50)))
# 作図
d <- tapply(dat$x, dat$g, density)
plot(as.numeric(dat$g), dat$x, xlim = c(0, 4), axes = FALSE,
xlab="", ylab="x")
lines(d[[1]]$y + 1, d[[1]]$x)
lines(d[[2]]$y + 2, d[[2]]$x)
lines(d[[3]]$y + 3, d[[3]]$x)
axis(2)
axis(1, at = 1:3, labels = LETTERS[24:26])
あとはsegments()で適当に赤の横破線を引いてくれ
0665132人目の素数さん
2012/11/09(金) 21:12:18.680666132人目の素数さん
2012/11/28(水) 20:53:30.87Lapack routine dgesv:システムは正確に特異です という意味不明なメッセージが...
変数ごとの尺度が違いすぎると発生するってことで一部に1/100したりしてみたけど
変わらず出てしまう...「そのエラー文こんな場合に出てくるでー」みたいなのあれば教えて頂けるとありがたいです.
0667132人目の素数さん
2012/11/28(水) 21:07:45.01エラー文でググると、
>分散共分散行列の行列式が正定値では無いため
0668132人目の素数さん
2012/11/28(水) 21:27:27.31ありがとうございます!
分散共分散行列、正定値か...初めての単語です.
調べてみようっと
0669132人目の素数さん
2012/11/28(水) 22:30:52.44singularって単数と思っていたが、数学では「特異」なんだな。
勉強になった。
0670132人目の素数さん
2012/11/29(木) 22:21:50.04singular matrixって、逆行列を持たない行列。つまり
1 2
2 4
とか、そういうやつじゃないの?
Octaveでそういうのをやると
octave-3.2.4.exe> A=[[1,2];[3,4]]
A =
1 2
3 4
octave-3.2.4.exe> inv(A)
ans =
-2.00000 1.00000
1.50000 -0.50000
octave-3.2.4.exe:> A=[[1,2];[2,4]]
A =
1 2
2 4
octave-3.2.4.exe> inv(A)
warning: inverse: matrix singular to machine precision, rcond = 0
ans =
Inf Inf
Inf Inf
0671132人目の素数さん
2012/11/30(金) 15:39:16.010672132人目の素数さん
2012/12/01(土) 09:59:19.11R研究集会 「データ解析環境Rの整備と利用」2012
http://live.nicovideo.jp/watch/lv116268591
0673132人目の素数さん
2012/12/03(月) 20:43:08.44それは質問かい?
それとも上のどこかの書き込みの対する助言かい?
0674132人目の素数さん
2012/12/04(火) 10:40:04.46id time sex
1 13 male
2 24 female
・・・
てな感じのデータ(population)を、timeでヒストグラムを書いた時にsexで色分けしたいのですが
基本グラフィックを使った方法で何か良いのは無いでしょうか?
ちなみにggplot2だと以下のコマンドで出来ますが、基本グラフィックで書く必要があります
ggplot(population, aes(time, fill=sex))+geom_histogram()
0675132人目の素数さん
2012/12/04(火) 11:26:35.26hist()はグループ分けができません。
> set.seed(1234)
> a <- data.frame(time = round(rnorm(100)^2*10+5), sex = sample(as.factor(c("male", "female")), 100, replace = TRUE))
と適当なサンプルで、
> max(a$time)
[1] 70
なので、0から100まで10刻みで頻度を計算して棒グラフを書けばよいのでは。
> brks <- (0:5)*4
> b <- cbind(table(findInterval(a$time[a$sex == "male"], brks)), table(findInterval(a$time[a$sex == "female"], brks)))
> barplot(t(b), beside = TRUE, names.arg = brks[as.integer(row.names(b))])
参考まで。
0676132人目の素数さん
2012/12/05(水) 08:26:29.52なるほど、histはグループ分けが出来ないのですね・・・
アドバイスに従って棒グラフで作成してみます
回答ありがとうございました
0677132人目の素数さん
2012/12/18(火) 04:57:50.10今は↓こんな感じでやってるのですが、要素数が増えると面倒で、
良いやり方があれば教えてください。
m = list(1, 2, 3, 4)
a = m[[1]]
b = m[[2]]
c = m[[3]]
d = m[[4]]
0678132人目の素数さん
2012/12/18(火) 07:38:18.90うーん、あんま短くないか。
0679132人目の素数さん
2012/12/18(火) 11:05:31.28>>678が示すように、assignを使えばよいよ。
for()を使うならこんか感じ。
## mを適当に用意
m <- lapply(1:4,function(x){sample(month.name, 3)})
v.name <- letters[1:4] #変数名を準備
for(i in 1:length(v.name)) assign(v.name[i], m[[i]])
>>678
試さないで質問して申し訳ないけど、.GlovalEnvの指定は必須?
envirの指定を省略すれば.GlovalEnvになるのかなとと思って。
0680132人目の素数さん
2012/12/18(火) 14:51:39.010681132人目の素数さん
2012/12/21(金) 23:08:27.59このデータフレームをファクター値によって5分割したいのですが、
ループを使わない簡単な方法ありますでしょうか?
現在はquantile関数とforループを併用しております。
よろしくお願いいたします。
0682132人目の素数さん
2012/12/22(土) 05:08:48.15>ファクター値
どういう意味?
因子型変数が内部で保持している実体の整数型の値のこと?
例を示してくれないと、その説明ではどうしたいのか分からない。
0683132人目の素数さん
2012/12/22(土) 06:30:38.17split(x, x$B)
ってこと?
0684681
2012/12/22(土) 09:52:42.80ありがとうございます。
説明が悪くて申し訳ありません。
ファクター値は因子ではありません。
只の実数値の意味です。
DF
CODE DATA
"A" 1
"B" 2
"C" 3
"D" 4
"E" 5
と単純なデータフレームを考えた場合、
DATAの大きさでデータフレームを分割し5個のデータフレームにしたいのです。
現状はforループとquantile(DF$B, prob = i / 5)という関数を用いて分割している次第です。
よろしくお願いいたします。
0685132人目の素数さん
2012/12/22(土) 12:16:27.28意味が全く分からないのはオレだけか?
そもそもDF$Bやiはどこから出てきたんだ。
data.frameの要素にdata.frameを入れた階層構造なのか?
もしかすると、こういうことか?
> DF <- data.frame(CODE = sample(LETTERS, 100, replace = TRUE), DATA = sample(1:5, 100, replace = TRUE))
というDFがあったとして、
> lapply(unique(DF$DATA), function(x){DF[DF$DATA == x, ]})
とすると5つのデータフレームをもつリストが出来る。
0686681
2012/12/22(土) 12:33:52.37申し訳ありません。DF$BではなくDF$DATAです。
ご提示していただいた例ですとDATAが整数の場合には正しく分割できるのですが、
実際には整数ではなく実数値です。
例えば、
DF <- data.frame(rand)
colnames(DF) <- c("a", "b", "c")
というデータフレームを作成した場合、DF$bの大きさで任意の分位に分割したいのです。。。。
0687132人目の素数さん
2012/12/22(土) 13:38:29.27まだ意味が分からないorz
回答する側に憶測に憶測を重ねさせる質問の仕方はどうなのか、
後出しがガシガシ出てくる質問の態度はいかがかと思うが、
丁寧な口調なので、もう1度だけ「想像」した範囲で答える。
> DF <- data.frame(a = runif(100), b = runif(100), c = runif(100))
というDFがあったとして、DF$bを任意の分位、たとえば、0.1と0.3と0.5と0.9で区切って5分割したいとする。
> i <- findInterval(DF$b, c(0.1, 0.3, 0.5, 0.9))
> lapply(unique(i), function(x){DF$b[x == i]})
これで5分割されたデータのリストが得られる。
データフレーム構造を保持したいという話なら、
> lapply(unique(i), function(x){DF[x == i, ]})
これでも、これが質問の意図と異なるなら、他の人にパス。
0688687
2012/12/22(土) 13:51:45.59> lapply(0:max(i), function(x){DF$b[x == i]})
および
> lapply(0:max(i), function(x){DF[x == i, ]})
0689132人目の素数さん
2012/12/22(土) 20:11:43.37見やすく自動で整形する方法ってありますか?
他の言語だと整形ツールがあるんだけど
Rにもあるのかな
0690132人目の素数さん
2012/12/22(土) 23:19:32.32外部ツールとしてはないけど、そういう関数もある(名前は忘れた)。
0691681
2012/12/23(日) 01:16:13.76ありがとうございます。
分位は等分位です。
quantileで分位点を求めて、教えていただいた方法で無事いけました。
質問の仕方が悪かったようで申し訳ありませんでした。
以後気を付けたいと思います。
本当にありがとうございました
0692132人目の素数さん
2012/12/23(日) 20:34:14.28https://github.com/yihui/formatR/wiki
0693令嬢
2012/12/23(日) 23:13:41.87, '´ _. -‐'''"二ニニ=-`ヽ、
/ /:::::; -‐''" `ーノ
/ /:::::/ \
/ /::::::/ | | | |
| |:::::/ / | | | | | |
| |::/ / / | | || | | ,ハ .| ,ハ|
| |/ / / /| ,ハノ| /|ノレ,ニ|ル'
| | | / / レ',二、レ′ ,ィイ|゙/ 私は只の数ヲタなんかとは付き合わないわ。
. | \ ∠イ ,イイ| ,`-' | 頭が良くて数学が出来てかっこいい人。それが必要条件よ。
| l^,人| ` `-' ゝ | さらに Ann.of Math に論文書けば十分条件にもなるわよ。
| ` -'\ ー' 人 一番嫌いなのは論文数を増やすためにくだらない論文を書いて
| /(l __/ ヽ、 良い論文の出版を遅らせるお馬鹿な人。
| (:::::`‐-、__ |::::`、 ヒニニヽ、 あなたの論文が Ann of Math に accept される確率は?
| / `‐-、::::::::::`‐-、::::\ /,ニニ、\ それとも最近は Inv. Math. の方が上かしら?
| |::::::::::::::::::|` -、:::::::,ヘ ̄|'、 ヒニ二、 \
. | /::::::::::::::::::|::::::::\/:::O`、::\ | '、 \
| /:::::::::::::::::::/:::::::::::::::::::::::::::::'、::::\ノ ヽ、 |
| |:::::/:::::::::/:::::::::::::::::::::::::::::::::::'、',::::'、 /:\__/‐、
| |/:::::::::::/::::::::::::::::::::::::::::::::::O::| '、::| く::::::::::::: ̄|
| /_..-'´ ̄`ー-、:::::::::::::::::::::::::::::::::::|/:/`‐'::\;;;;;;;_|
| |/::::::::::::::::::::::\:::::::::::::::::::::::::::::|::/::::|::::/:::::::::::/
| /:::::::::::::::::::::::::::::::::|:::::::::::::::::::::O::|::|::::::|:::::::::::::::/
0694132人目の素数さん
2012/12/25(火) 01:22:28.37n桁の整数(文字列)を生成したい。
1桁目: 1, 2
2桁目: 4, 5, 6
3桁目: 7, 8
この場合だと 2*3*2 = 12 通りの整数が作れます。
forを3重にすればできるのですが、このやり方は避けたい。
n桁になっても対応できるコードを書きたいです。
いいやり方、教えてください。
0695132人目の素数さん
2012/12/25(火) 10:23:00.30またまた説明不足で不明瞭な質問が来た。同じ人か。
例では、3桁の12種類全ての整数(文字列)を得たいのか、
それとも1つの3桁の整数(文字列)を得たいのか、
判然としない。
後者と想定して、例示すると、
a <- list()
a[[1]] <- 1:2
a[[2]] <- 4:6
a[[3]] <- 7:8
というリストがあった場合、
> paste(sapply(a, sample, 1), collapse = "")
[1] "247"
aの要素数がn個でも(つまり、n桁でも)同じ。
0696132人目の素数さん
2012/12/25(火) 21:10:27.10[,1] [,2] [,3]
[1,] 1 4 7
[2,] 1 4 8
[3,] 1 5 7
[4,] 1 5 8
[5,] 1 6 7
[6,] 1 6 8
[7,] 2 4 7
[8,] 2 4 8
[9,] 2 5 7
[10,] 2 5 8
[11,] 2 6 7
[12,] 2 6 8
0697695
2012/12/25(火) 21:25:57.68それなら、expand.grid()を再帰的に使えば良い。
入れ子にするのは面倒なので二項演算子を定義すると、
> "%+%" <- function(x, y) apply(expand.grid(x, y), 1, paste, collapse = "")
> a[[1]] %+% a[[2]] %+% a[[3]]
[1] "147" "247" "157" "257" "167" "267" "148" "248" "158" "258" "168" "268"
あとはRecall()を使って、これを一般化すれば良い。
> f696 <- function(x) { f <- function(i){ if(i > 0) return(Recall(i - 1) %+% x[[i]])
+ else return("")}
+ return(f(length(x)))
+ }
> f696(a)
[1] "147" "247" "157" "257" "167" "267" "148" "248" "158" "258" "168" "268"
次に質問するときは、最初から>>696のように書いた方が良いよ。
または、
> forを3重にすればできるのですが、
この具体的なコードを書くとか。抽象的に説明すると、解釈の余地に幅が生まれる。
0698132人目の素数さん
2012/12/25(火) 21:29:26.760699695
2012/12/25(火) 21:31:46.70n桁の整数は連結させるのではなく、
桁をばらばらにして行列にしたかったのか。
それなら話はもっと簡単だ。
pasteの処理をやめれば良い
0700132人目の素数さん
2012/12/25(火) 22:31:04.88(function() as.matrix((expand.grid(a)->x)[do.call(order, x),]))()
0701132人目の素数さん
2012/12/26(水) 09:37:32.22あぁ、しまった。expand.grid()は3次元次元でも使えたのか。
>>700さんの別解。rev()を2重に使う。
as.matrix(rev(expand.grid(rev(a))))
0702令嬢
2012/12/26(水) 21:17:40.81, '´ _. -‐'''"二ニニ=-`ヽ、
/ /:::::; -‐''" `ーノ
/ /:::::/ \
/ /::::::/ | | | |
| |:::::/ / | | | | | |
| |::/ / / | | || | | ,ハ .| ,ハ|
| |/ / / /| ,ハノ| /|ノレ,ニ|ル'
| | | / / レ',二、レ′ ,ィイ|゙/
. | \ ∠イ ,イイ| ,`-' |
| l^,人| ` `-' ゝ | このスレには馬と鹿と豚さんしかいないのね。
| ` -'\ ー' 人
| /(l __/ ヽ、
| (:::::`‐-、__ |::::`、 ヒニニヽ、
| / `‐-、::::::::::`‐-、::::\ /,ニニ、\
| |::::::::::::::::::|` -、:::::::,ヘ ̄|'、 ヒニ二、 \
. | /::::::::::::::::::|::::::::\/:::O`、::\ | '、 \
| /:::::::::::::::::::/:::::::::::::::::::::::::::::'、::::\ノ ヽ、 |
| |:::::/:::::::::/:::::::::::::::::::::::::::::::::::'、',::::'、 /:\__/‐、
| |/:::::::::::/::::::::::::::::::::::::::::::::::O::| '、::| く::::::::::::: ̄|
| /_..-'´ ̄`ー-、:::::::::::::::::::::::::::::::::::|/:/`‐'::\;;;;;;;_|
| |/::::::::::::::::::::::\:::::::::::::::::::::::::::::|::/::::|::::/:::::::::::/
| /:::::::::::::::::::::::::::::::::|:::::::::::::::::::::O::|::|::::::|:::::::::::::::/
0703132人目の素数さん
2012/12/26(水) 23:44:03.23revの二重使いは柔軟な思考ですね。参考になりました。
0704狢 ◆yEy4lYsULH68
2012/12/27(木) 09:03:34.27>増田哲也こそ笑い者。
>俺が逮捕されて懲戒免職させる日本こそ沈めって、一発逆転をねらっている愚民そのもの。
>
0705132人目の素数さん
2012/12/29(土) 23:41:13.98SASでQ01-Q50などとやるようなことをしたいのですが、方法がわかりません。ご存知の方、お教えください。
50項目で主成分分析をしようなどという場合を考えると、気が遠くなります。
0706132人目の素数さん
2012/12/30(日) 07:20:47.800707132人目の素数さん
2012/12/30(日) 08:39:23.19outcome ~ .
って指定するとすべての変数が入る
0708132人目の素数さん
2012/12/30(日) 11:33:43.75できるけど、"Q01-Q50"のような記法ではできない。
>>707が助言するようにまるごと入れることもできるし、
paste()とas.formula()をつかって長いformulaを作成することもできる。
formulaのヘルプにある例
> xnam <- paste0("x", 1:25)
> (fmla <- as.formula(paste("y ~ ", paste(xnam, collapse= "+"))))
y ~ x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10 + x11 +
x12 + x13 + x14 + x15 + x16 + x17 + x18 + x19 + x20 + x21 +
x22 + x23 + x24 + x25
0709132人目の素数さん
2012/12/30(日) 12:25:38.54ありがとうございます。
これで、エクセルのオートフィルで変数リスト作成してRのコンソールに貼り付ける作業から解放されます。
0710132人目の素数さん
2012/12/30(日) 14:53:50.700711132人目の素数さん
2012/12/30(日) 14:55:00.08その中で、irisデータを用いてコマンドの学習をしているのですがエラーが出てしまい先に進めなくなってしまいました。
以下にコマンドを載せますものが私の用いたものです。
library(rpart)
library(adabag)
data <- iris
ndata <- nrow(data)
#乱数指定
set.seed(101)
#学習データ(data.learn)とテストデータ(data.test)に分ける
ridx <- sample(ndata, ndata * 0.5)
data.learn <- data[ridx,]
data.test <- data[-ridx,]
#3-fold crossvalidation、弱識別器の数を10とし、学習データに対しboostingを行ったものをdata.adaCvに代入
data.adaCv <- boosting.cv(Species ~ .,data = data.learn,v=3, mfinal = 10)
#テストデータに学習データを照らし合わせる。
resultPredict <- predict(data.adaCv, newdata = data.test, type="class")
というコマンドですが「predict」を行った際に
以下にエラー UseMethod("predict") :
'predict' をクラス "character" のオブジェクトに適用できるようなメソッドがありません
というエラーが出てしまい、ネットや参考文献を見てもわからず投稿させていただきました。
もしこのエラーの解決方法がお分かりのかたがいらっしゃいましたらよろしくお願いします。
0712695
2012/12/30(日) 20:21:19.02>以下にエラー UseMethod("predict") :
>'predict' をクラス "character" のオブジェクトに適用できるようなメソッドがありません
分かるも何も、書いてあるままだよ。
> class(data.adaCv)
[1] "list"
boosting.cv()は、predictメソッドをもつクラスを吐かず、単純にlistクラスを吐く。
それだけの話。
0713132人目の素数さん
2012/12/30(日) 20:22:36.64名前欄にゴミが入ったorz
0714132人目の素数さん
2012/12/30(日) 23:08:32.14実行してみたところおっしゃたように"list"と出力されました。
ということはboosting.cvで得られた変数(data.adaCv)を用いての
predictはできないということでしょうか?
また、もしできるのであればそのコマンドと使用例を教えていただきたいです。
宜しくお願いします。
0715132人目の素数さん
2012/12/31(月) 15:27:18.84, '´ _. -‐'''"二ニニ=-`ヽ、
/ /:::::; -‐''" `ーノ
/ /:::::/ \
/ /::::::/ | | | |
| |:::::/ / | | | | | |
| |::/ / / | | || | | ,ハ .| ,ハ|
| |/ / / /| ,ハノ| /|ノレ,ニ|ル'
| | | / / レ',二、レ′ ,ィイ|゙/
. | \ ∠イ ,イイ| ,`-' |
| l^,人| ` `-' ゝ | このスレには馬と鹿と豚さんしかいないのね。
| ` -'\ ー' 人
| /(l __/ ヽ、
| (:::::`‐-、__ |::::`、 ヒニニヽ、
| / `‐-、::::::::::`‐-、::::\ /,ニニ、\
| |::::::::::::::::::|` -、:::::::,ヘ ̄|'、 ヒニ二、 \
. | /::::::::::::::::::|::::::::\/:::O`、::\ | '、 \
| /:::::::::::::::::::/:::::::::::::::::::::::::::::'、::::\ノ ヽ、 |
| |:::::/:::::::::/:::::::::::::::::::::::::::::::::::'、',::::'、 /:\__/‐、
| |/:::::::::::/::::::::::::::::::::::::::::::::::O::| '、::| く::::::::::::: ̄|
| /_..-'´ ̄`ー-、:::::::::::::::::::::::::::::::::::|/:/`‐'::\;;;;;;;_|
| |/::::::::::::::::::::::\:::::::::::::::::::::::::::::|::/::::|::::/:::::::::::/
| /:::::::::::::::::::::::::::::::::|:::::::::::::::::::::O::|::|::::::|:::::::::::::::/
0716132人目の素数さん
2013/01/02(水) 11:10:09.30プログラミング言語の解説というかRをアプリケーションとしてみた解説って感じで
言語的なことはほとんど勉強になりませんでしたね。
やっぱ俺はS言語の本読むべきでしたね。
0717132人目の素数さん
2013/01/04(金) 09:40:38.25ttp://www.amazon.co.jp/dp/4873115795
ttp://www.amazon.co.jp/dp/4621061313
0718132人目の素数さん
2013/01/04(金) 10:07:16.37Rjpwikiの方に書いたからもういいと思うのだけど、念のため。
boosting.cvの中身は見た?
bootsting()とpredict.boosting()を中で使っているよね。
> boosting.cv
function (formula, data, v = 10, boos = TRUE, mfinal = 100, coeflearn = "Breiman",
control)
{
vardep <- data[, as.character(formula[[2]])]
n <- length(vardep)
if (v > n)
stop(" v should be in [2, n]")
if (v < 2)
stop(" v should be in [2, n]")
predclass <- rep("O", n)
for (i in 1:v) {
test <- v * (0:floor(n/v)) + i
test <- test[test < n + 1]
fit <- boosting(formula, data[-test, ], boos, mfinal,
coeflearn, control = control)
fit.predict <- predict.boosting(fit, data[test, ])
predclass[test] <- fit.predict$class
cat("i: ", c(i, date()), "\n")
}
tabla <- table(predclass, vardep, dnn = c("Predicted Class",
"Observed Class"))
error <- 1 - sum(predclass == vardep)/n
output <- list(class = predclass, confusion = tabla, error = error)
}
<environment: namespace:adabag>
このfit.predictが欲しいなら、自分でbooting.cv()をコピーして編集すればよい。
そうじゃないなら、何をしたいのか、もっとはっきり伝えること。
0719132人目の素数さん
2013/01/05(土) 03:55:18.11Rノウハウ本の購入層はやりたい解析があってそこまでたどり着ければいい
って人が大多数なんじゃないかな、んでそれにあわせた内容になってると
+αを求める人は多くは無いと思う
0720132人目の素数さん
2013/01/05(土) 12:25:03.16質問です。
x<-c(1,2,3,4,5,6)
y<-c(1,4,9,7,6,8)
というデータがあったとして、
sp<-smooth.spline(x,y)
predict(sp,x=2.5)
とすると、xが2.5のときのyの値は下記のように予測できます。
$x
[1] 2.5
$y
[1] 6.923206
逆にyからxを求める方法がお分かりの方、いらっしゃいましたらお教えください。
0721132人目の素数さん
2013/01/05(土) 14:02:30.39stats:::predict.smooth.spline.fitにざっと目を通した限りは、
できなさそうだけど。
GAMFIT (http://lib.stat.cmu.edu/general/gamfit)の中までは読んでいない。
sp$fitの中身を使って数学的に解くか、xを細かい間隔でpredict()に与えて、
与えられたyに最も近いものを選ぶしかなさそうだが、
ちゃんとした識者に答えてもらった方がよいかも。
後者なら、
predict.y <- function(y){
x0 <- c(1, 2, 3, 4, 5, 6)
y0 <- c(1, 4, 9, 7, 6, 8)
sp <- smooth.spline(x0, y0)
i <- seq(from = min(x0), to = max(x0), by = 0.0001)
Y <- predict(sp, i)
j <- which.min((Y$y - y)^2)
return(list(y = y, x = i[j], fitted = Y$y[j]))
}
こんな感じでよいのでは。
> predict.y(2.345)
$y
[1] 2.345
$x
[1] 1.4487
$fitted
[1] 2.345004
0722132人目の素数さん
2013/01/05(土) 14:47:31.66, '´ _. -‐'''"二ニニ=-`ヽ、
/ /:::::; -‐''" `ーノ
/ /:::::/ \
/ /::::::/ | | | |
| |:::::/ / | | | | | |
| |::/ / / | | || | | ,ハ .| ,ハ|
| |/ / / /| ,ハノ| /|ノレ,ニ|ル'
| | | / / レ',二、レ′ ,ィイ|゙/ 私は只の数ヲタなんかとは付き合わないわ。
. | \ ∠イ ,イイ| ,`-' | 頭が良くて数学が出来てかっこいい人。それが必要条件よ。
| l^,人| ` `-' ゝ | さらに Ann.of Math に論文書けば十分条件にもなるわよ。
| ` -'\ ー' 人 一番嫌いなのは論文数を増やすためにくだらない論文を書いて
| /(l __/ ヽ、 良い論文の出版を遅らせるお馬鹿な人。
| (:::::`‐-、__ |::::`、 ヒニニヽ、 あなたの論文が Ann of Math に accept される確率は?
| / `‐-、::::::::::`‐-、::::\ /,ニニ、\ それとも最近は Inv. Math. の方が上かしら?
| |::::::::::::::::::|` -、:::::::,ヘ ̄|'、 ヒニ二、 \
. | /::::::::::::::::::|::::::::\/:::O`、::\ | '、 \
| /:::::::::::::::::::/:::::::::::::::::::::::::::::'、::::\ノ ヽ、 |
| |:::::/:::::::::/:::::::::::::::::::::::::::::::::::'、',::::'、 /:\__/‐、
| |/:::::::::::/::::::::::::::::::::::::::::::::::O::| '、::| く::::::::::::: ̄|
| /_..-'´ ̄`ー-、:::::::::::::::::::::::::::::::::::|/:/`‐'::\;;;;;;;_|
| |/::::::::::::::::::::::\:::::::::::::::::::::::::::::|::/::::|::::/:::::::::::/
| /:::::::::::::::::::::::::::::::::|:::::::::::::::::::::O::|::|::::::|:::::::::::::::/
0723132人目の素数さん
2013/01/05(土) 16:46:53.71ありがとうございました。参考になりました。
0724132人目の素数さん
2013/01/05(土) 20:24:09.52, '´ _. -‐'''"二ニニ=-`ヽ、
/ /:::::; -‐''" `ーノ
/ /:::::/ \
/ /::::::/ | | | |
| |:::::/ / | | | | | |
| |::/ / / | | || | | ,ハ .| ,ハ|
| |/ / / /| ,ハノ| /|ノレ,ニ|ル'
| | | / / レ',二、レ′ ,ィイ|゙/
. | \ ∠イ ,イイ| ,`-' |
| l^,人| ` `-' ゝ | このスレには馬と鹿と豚さんしかいないのね。
| ` -'\ ー' 人
| /(l __/ ヽ、
| (:::::`‐-、__ |::::`、 ヒニニヽ、
| / `‐-、::::::::::`‐-、::::\ /,ニニ、\
| |::::::::::::::::::|` -、:::::::,ヘ ̄|'、 ヒニ二、 \
. | /::::::::::::::::::|::::::::\/:::O`、::\ | '、 \
| /:::::::::::::::::::/:::::::::::::::::::::::::::::'、::::\ノ ヽ、 |
| |:::::/:::::::::/:::::::::::::::::::::::::::::::::::'、',::::'、 /:\__/‐、
| |/:::::::::::/::::::::::::::::::::::::::::::::::O::| '、::| く::::::::::::: ̄|
| /_..-'´ ̄`ー-、:::::::::::::::::::::::::::::::::::|/:/`‐'::\;;;;;;;_|
| |/::::::::::::::::::::::\:::::::::::::::::::::::::::::|::/::::|::::/:::::::::::/
| /:::::::::::::::::::::::::::::::::|:::::::::::::::::::::O::|::|::::::|:::::::::::::::/
0725132人目の素数さん
2013/01/07(月) 16:01:51.28いまさらだけどビギニングス ガイド イン Rのミススペルな。
0726132人目の素数さん
2013/01/07(月) 18:48:16.16ttp://www.amazon.com/dp/0387938362
これのことか?
でも「ビギニングス ガイド イン R」じゃないぞ。
0727132人目の素数さん
2013/01/09(水) 09:49:00.54正確には
ビギニングス ガイド イン R
でした。
0728132人目の素数さん
2013/01/11(金) 23:37:12.84コード 日付1 日付2 日付3 データ1 データ2 データ3
0001 201201 201103 201003 52 33 34
0002 201203 NA NA 22 NA 3
0003 201103 201001 200901 32 2 73
0004 201003 200905 200804 98 87 88
0005 NA NA NA NA NA NA
0006 201105 201102 201009 NA 32 55
日付XとデータXが対応
日付1>日付2>日付3となっている
この時、日付が201101よりも大きい日付に対応するNAでないデータを取得したい
即ち望まれる出力は以下の通り
コード 日付 データ
0001 201201 52
0002 201203 22
0003 201103 32
0004 NA NA
0005 NA NA
0006 201102 32
このように取得したい場合どのような操作をすればよいでしょうか?
実際には数千のコードがあるのでループで一行ずつ回すのはあまり現実的ではありません。
よろしくお願いします
0729132人目の素数さん
2013/01/12(土) 03:32:35.10宿題じゃないよね?
> a <- scan(text="0001 201201 201103 201003 52 33 34
+ 0002 201203 NA NA 22 NA 3
+ 0003 201103 201001 200901 32 2 73
+ 0004 201003 200905 200804 98 87 88
+ 0005 NA NA NA NA NA NA
+ 0006 201105 201102 201009 NA 32 55")
Read 42 items
> b <- data.frame(t(matrix(a, ncol = 6)))
> names(b) <- c("コード", paste0("日付", 1:3), paste0("データ", 1:3))
で、ヒントは次の通り。
> m <- ((b[, 2:4] > 201101) & (b[, 2:4] & b[, 5:7])) * b[, 2:4]
> m[(m == 0)] <- NA
> i <- apply(m, 1, which.max)
> unlist(sapply(1:length(i), function(j){ifelse(length(i[j][[1]]) == 0, NA, (b[j, 5:7])[i[j][[1]]])}))
[1] 52 22 32 NA NA 32
> unlist(sapply(1:length(i), function(j){ifelse(length(i[j][[1]]) == 0, NA, (b[j, 2:4])[i[j][[1]]])}))
[1] 201201 201203 201103 NA NA 201102
0730132人目の素数さん
2013/01/13(日) 13:37:10.99確認したいのですが、↓だと何故か2になってしまいます。
どこがダメなんだしょう?
x = rnorm(500)
hist(x, prob=T)
sum(hist(x, prob=T)$density)
0731132人目の素数さん
2013/01/13(日) 13:52:12.00乱数の分散を変えてみると、理解出来るのでは?
> set.seed(1234); sum(hist(rnorm(500, sd = 2), prob = TRUE)$density)
[1] 1
> set.seed(1234); sum(hist(rnorm(500, sd = 5), prob = TRUE)$density)
[1] 0.2
> set.seed(1234); sum(hist(rnorm(500, sd = .1), prob = TRUE)$density)
[1] 20
0732132人目の素数さん
2013/01/13(日) 15:13:55.16わからないよ (´・ω・`)
sum(hist(x, prob=T)$density)
と
sum(hist(x, prob=T)$count/500)
は同じになると思ったんだけど、違うってことですかね??
0733132人目の素数さん
2013/01/14(月) 13:24:07.24730 の最後の式では、確率密度の積分 ∫f(x) dx = 1 の dx の部分が
抜けてしまっています。
hist を用いる場合、dx に相当する値は
diff(hist(x, prob=T)$breaks) で求めることができます。
x <- rnorm(500)
h <- hist(x, prob=T)
sum(h$density * diff(h$breaks))
0734132人目の素数さん
2013/01/14(月) 22:54:04.42ありがとうございます!
0735132人目の素数さん
2013/01/16(水) 12:15:17.92言語を英語にすると、立ち上げた際のメッセージなどはきちんと英語になるのですが、
cor.test()などの関数を実行すると出力が日本語メッセージでかえってきます
日本語のwinOSでRの返答を完全に英語にする方法をどなたかご存知ないでしょうか?
ちなみに↓サイトの起動アイコンカスタマイズの方法で英語化しています
ttp://minato.sip21c.org/swtips/R.html
0736132人目の素数さん
2013/01/16(水) 12:41:27.37妙な挙動ですね。WindowsだとLANG=Cがどこかで強制的に書き換えられるのでしょうか。
Sys.getenv()で、メッセージが日本語になる前後でLANGやLC_ALLを確認してみてはどうでしょうか。
LANGを確認するには、Sys.getenv("LANG")とすればOKです。
なお、メッセージの言語を指定する環境変数はLC_MESSAGESです。
環境変数によるローケルの管理を知っておいても損はないと思います。
例えば、ttp://www.itmedia.co.jp/enterprise/articles/0605/16/news027.html
の「環境変数の階層」とかに目を通すとか。
0737736
2013/01/16(水) 12:54:26.20ttp://www.itmedia.co.jp/enterprise/articles/0605/16/news027.html
を読んで思い出したが、昔、起動アイコンに、LANG=Cじゃなくて、language=enをつけていた。
「R language=en」でググるとCRANのR for Windows FAQがヒット。
ttp://cran.r-project.org/bin/windows/base/rw-FAQ.html
... if you want to ensure that menus and messages are in (American) English, LANGUAGE=en.
とか、
You can ensure that R uses English messages by appending LANGUAGE=en to the shortcut
you use to start R, or setting it in the Rconsole file.
って書いてあるよ。FAQに。
0738132人目の素数さん
2013/01/16(水) 23:32:51.99遅くなりましたがありがとうございました。
無事動作しました。
0739728
2013/01/16(水) 23:41:01.80再び質問です。
横型ではなく縦型の場合はいかがでしょうか?
以下のようなデータフレームを仮定します
コード 日付 データ
0001 20120101 332
0001 20120111 542
0002 20120201 5554
0002 20120301 52334
0002 20120511 15234
0003 20121101 35234
0003 20121201 NA
0004 20120501 75234
0005 20120601 NA
各コードに対してデータがNAでない日付が最大の値を取得したいのです。
NAしかない場合にはその値を取得します。
上記の場合以下の値が期待されます。
コード 日付 データ
0001 20120111 542
0002 20120511 15234
0003 20121101 35234
0004 20120501 75234
0005 20120601 NA
ヒントだけでも結構ですのでよろしくお願いいたします。
0740132人目の素数さん
2013/01/17(木) 00:37:07.40ローカルに保存したCSVファイルではなく、直接ダウンロード、読込みをするファイルの文字化けを解消したいのですが、
エンコードを変える記述では上手くいきません。
ご教示いただけないでしょうか?
例)
url.data <- "http://maxis.muam.jp/e/fund/download/"
eMAXIS <- read.table(url.data, sep=",", stringsAsFactor = FALSE)
0741132人目の素数さん
2013/01/17(木) 14:18:27.23fileEncoding = "SJIS"
オプションとかではダメってこと?
0742132人目の素数さん
2013/01/17(木) 14:25:14.37plyrにあるddply()でIDで分割してwhich.max()で日付が最大のところのindexをとって、その場所の数字を取ればいいかな。
NAの処理を条件分岐を使わないでやるなら、ID日付でソートしたうえで、ddply()の中でzooのna.locf()を使えばいいか?
結構重くなってしまうかも。
0743132人目の素数さん
2013/01/17(木) 19:30:55.74, '´ _. -‐'''"二ニニ=-`ヽ、
/ /:::::; -‐''" `ーノ
/ /:::::/ \
/ /::::::/ | | | |
| |:::::/ / | | | | | |
| |::/ / / | | || | | ,ハ .| ,ハ|
| |/ / / /| ,ハノ| /|ノレ,ニ|ル'
| | | / / レ',二、レ′ ,ィイ|゙/
. | \ ∠イ ,イイ| ,`-' |
| l^,人| ` `-' ゝ | このスレは馬と鹿と豚さんばかりね。
| ` -'\ ー' 人
| /(l __/ ヽ、
| (:::::`‐-、__ |::::`、 ヒニニヽ、
| / `‐-、::::::::::`‐-、::::\ /,ニニ、\
| |::::::::::::::::::|` -、:::::::,ヘ ̄|'、 ヒニ二、 \
. | /::::::::::::::::::|::::::::\/:::O`、::\ | '、 \
| /:::::::::::::::::::/:::::::::::::::::::::::::::::'、::::\ノ ヽ、 |
| |:::::/:::::::::/:::::::::::::::::::::::::::::::::::'、',::::'、 /:\__/‐、
| |/:::::::::::/::::::::::::::::::::::::::::::::::O::| '、::| く::::::::::::: ̄|
| /_..-'´ ̄`ー-、:::::::::::::::::::::::::::::::::::|/:/`‐'::\;;;;;;;_|
| |/::::::::::::::::::::::\:::::::::::::::::::::::::::::|::/::::|::::/:::::::::::/
| /:::::::::::::::::::::::::::::::::|:::::::::::::::::::::O::|::|::::::|:::::::::::::::/
0744132人目の素数さん
2013/01/17(木) 22:40:29.47ありがとうございます。
ddplyで無事いけました。
20万行程度のデータフレームですが、数秒で完了するので問題ありませんでした。
0745132人目の素数さん
2013/01/18(金) 01:06:24.60すみません。勘違いしてました。
オプションでいけました。
ご指摘ありがとうございます。
0746132人目の素数さん
2013/01/26(土) 23:13:16.48> install.packages("RMySQL", type="source")
Installing package(s) into ‘D:/program_files/R-2.15.2/library’
(as ‘lib’ is unspecified)
URL 'http://cran.rstudio.com/src/contrib/RMySQL_0.9-3.tar.gz' を試しています
Content type 'application/x-gzip' length 165363 bytes (161 Kb)
開かれた URL
downloaded 161 Kb
* installing *source* package 'RMySQL' ...
** パッケージ 'RMySQL' の解凍およびMD5サムの検証に成功しました
checking for $MYSQL_HOME... D:program_filesMySQL
MYSQL_HOME is set but does not point to a directory
ERROR: configuration failed for package 'RMySQL'
* removing 'D:/program_files/R-2.15.2/library/RMySQL'
Warning in install.packages :
命令 'D:/PROGRA~1/R-215~1.2/bin/x64/R CMD INSTALL -l "D:/program_files/R-2.15.2/library" C:\Users\<<User>>\AppData\Local\Temp\RtmpmAoBu3/downloaded_packages/RMySQL_0.9-3.tar.gz' の実行は状態 1 を持ちました
Warning in install.packages :
installation of package ‘RMySQL’ had non-zero exit status
The downloaded source packages are in
‘C:\Users\<<User>>\AppData\Local\Temp\RtmpmAoBu3\downloaded_packages’
が出て、MYSQL_HOMEの値がダメなんだと思いますが、mysql自体にはパスが通るので合ってるはずです。どこが悪いんでしょうか?
0747132人目の素数さん
2013/01/27(日) 08:48:14.43これってソースしかないの?
0748746
2013/01/27(日) 23:38:33.32やっぱりMYSQL_HOMEの値がおかしかったようです。
0749132人目の素数さん
2013/02/01(金) 10:37:40.43Rjpwikiの時間の数値変換を、使っているデータの時間フォーマットにあわせてアレンジしてるんですが
date2num <- function(x, ...) {
.day <- as.numeric(substr(x,10,11))
.hour <- as.numeric(substr(x,13,14))
.minute <- as.numeric(substr(x,16,17))
.second <- as.numeric(substr(x,19,20))
.year <- as.numeric(substr(x,2,5))
.mon <- as.numeric(substr(x,7,8))
a <- .day - 1
b <- .year - 1970
c <- 1
if(.mon==2) c <- 31
else if(.mon==3) c <- 59
else if(.mon==4) c <- 90
else if(.mon==5) c <- 120
else if(.mon==6) c <- 151
else if(.mon==7) c <- 181
else if(.mon==8) c <- 212
else if(.mon==9) c <- 243
else if(.mon==10) c <- 273
else if(.mon==11) c <- 304
else if(.mon==12) c <- 334
else if(.mon==1) c <-0
else m <-1
0750132人目の素数さん
2013/02/01(金) 10:40:10.94cat(file) # 画面に出力
cat("\n") # 改行コード
file<-sprintf("%03d",a)
cat(file) # 画面に出力
cat("\n") # 改行コード
file<-sprintf("%03d",c)
cat(file) # 画面に出力
cat("\n") # 改行コード
c<-c+a
file<-sprintf("%03d",c)
cat(file) # 画面に出力
cat("\n") # 改行コード
return(b*31556926+c*86400+a*86400+.hour*3600+.minute*60+.second)
}
これに" 2012/11/30 16:50:00"のような時刻データを
date,sum
2012/12/05 20:30:00,17012
2012/12/05 20:30:00,16512
2012/12/05 19:53:00,16512
2012/12/05 19:53:00,16012
以上のようなデータフレームで入力しているのですが
月を調べているif文が1度しか動きません
if文が問題なのだと思っているのですがどう直せばよいものでしょうか
0751132人目の素数さん
2013/02/01(金) 11:19:52.70よく分からない。date2numの引数はxだけなのに、なんで、dateとsumのデータフレームを入れるの?
それに、月を7文字目と8文字目ってしているけど、6文字目と7文字目じゃないの?
> date2num("2012/12/05 20:30:00")
以下にエラー if (.mon == 2) c <- 31 else if (.mon == 3) c <- 59 else if (.mon == (from #11) :
TRUE/FALSE が必要なところが欠損値です
[snip]
再現できるように質問しようよ。
もっと言えば、
> as.numeric(as.POSIXlt("2012/12/05 20:30:00"))
[1] 1354707000
とかを使うのは嫌いなの?
■ このスレッドは過去ログ倉庫に格納されています