【R言語】統計解析フリーソフトR 第4章【GNU R】
レス数が950を超えています。1000を超えると書き込みができなくなります。
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
0939132人目の素数さん
2013/08/11(日) NY:AN:NY.AN「アイコン」という言葉が出てきたので、
R本体の話ではなくて、付属品のR.app GUIとかRGui.exeの話をしているんだね。
想像するに、それらのOS固有に開発されているGUI系ラッパーに独自のテキストエディタが付いているのかな。
違うのかな。
まぁ、そのどっちのOSを使っているか知らないけど、
「MacOSX限定の話なんだけど、」とか「Windows限定の話なんだけど」って、
>>933の頭につけておいてくれたら、>>933を読み飛ばせたんだけど、と言ってみる。
0940132人目の素数さん
2013/08/11(日) NY:AN:NY.ANこれ常識だから。
0941132人目の素数さん
2013/08/11(日) NY:AN:NY.ANマルチプラットフォームに対応するUNIX由来のRに、
そんな常識が通用するのか。ばかばかしい。
これはWindowsに移植した弊害だな。
0942132人目の素数さん
2013/08/11(日) NY:AN:NY.AN優秀な人材はwindowsを使っているから
開発測度が飛躍的にたかまってな。
0943132人目の素数さん
2013/08/11(日) NY:AN:NY.AN普及に関しては、首肯する。
でも、開発速度は違うよ。
Rの開発Coreチームの人間と会ったり話したりしたことがないの?
Prof. Brian RipleyはDebianとSolarisだよ。
彼らがMinGWをメインで使っているとでも言うの?
0944132人目の素数さん
2013/08/11(日) NY:AN:NY.AN0945132人目の素数さん
2013/08/11(日) NY:AN:NY.AN>Rの開発Coreチームの人間と会ったり話したりしたことがないの?
貴殿はどこでそんな人と会うのか。
0946132人目の素数さん
2013/08/12(月) NY:AN:NY.AN絶対に会えるのはuseR!かな。
今年のuseR!はもう終わったけど、2014年はロサンゼルスだよ。
ttp://user2014.stat.ucla.edu/
0947132人目の素数さん
2013/08/12(月) NY:AN:NY.ANどこで会えるかを答えるアホ
0948132人目の素数さん
2013/08/12(月) NY:AN:NY.ANまあ、ソーシャルメディアでも同じだけど。
0949132人目の素数さん
2013/08/13(火) NY:AN:NY.AN0950132人目の素数さん
2013/08/13(火) NY:AN:NY.AN2つを1つにしないといけないんですか?
0951132人目の素数さん
2013/08/13(火) NY:AN:NY.AN一日目
a b
1 4
2 5
3 6
2日目
a b
1 7
2 8
というでーたふれーむがあったら
a b1 b2
1 4 7
2 5 8
3 6 NA
見たいなのをつくって、b1-b2を計算するんですか?
0952132人目の素数さん
2013/08/13(火) NY:AN:NY.ANする必要ないです。そのまま使えばよいです。
「必要がない」というだけで、1つにしてもOKです。
表計算の感覚だと1つに統合する必要がありそうな気がしますが、
データの並びにだけ気をつければ、問題ありません。
0953132人目の素数さん
2013/08/13(火) NY:AN:NY.ANありがとうございます。
でもデータの順番がバラバラで
入っているaもバラバラの場合は
1つにした方が簡単ですよね。
0954132人目の素数さん
2013/08/13(火) NY:AN:NY.ANRでは、表形式にできないようなデータ構造を含む多種多様で複雑な構造が可能なので、
もう少し具体的なデータ構造についての説明がないと、
あなたの場合はどうなのか、何とも言えない。
ただ、1つにした方が簡単と感じるなら1つにすればどうだろう。
0955132人目の素数さん
2013/08/13(火) NY:AN:NY.AN2つにしてやる関数は作らないといけないっぽくないですか?
0956954
2013/08/13(火) NY:AN:NY.ANそれなら、データ構造は明らかで申し訳ない。
> (d1 <- data.frame(a = 1:3, b = 4:6))
a b
1 1 4
2 2 5
3 3 6
> (d2 <- data.frame(a = c(2,1,3), b = c(7:8, NA)))
a b
1 2 7
2 1 8
3 3 NA
だとすると、aごとにbの差分を計算するなら、
> d1$b - d2[order(d2$a), ]$b
[1] -4 -2 NA
とする。
0957132人目の素数さん
2013/08/13(火) NY:AN:NY.ANありがとうございます。
そんな感じです。
ただ違うのはaに1 2 3が存在するとは限らないということです。
たとえば初めの日には1がいたけど次の日には2が居なかったりします。
0958132人目の素数さん
2013/08/13(火) NY:AN:NY.ANformulaを作成するときは、変数名と値をdataに入れると便利な場合はある(一括指定とか)。
でも、dataのしては必須ではない。
> lm(d1$b~d2$b)
Call:
lm(formula = d1$b ~ d2$b)
Coefficients:
(Intercept) d2$b
-3 1
これで、1日目のbと2日目のbの回帰モデルを検討できる。
別に1つにする必要はない。
0959132人目の素数さん
2013/08/13(火) NY:AN:NY.ANそれなら、1つにした方が分かりやすいね。
> (d1 <- data.frame(a = sample(1:10, 5), b = 1:5))
a b
1 1 1
2 2 2
3 9 3
4 4 4
5 7 5
> (d2 <- data.frame(a = sample(1:10, 5), b = 5:1))
a b
1 3 5
2 4 4
3 1 3
4 8 2
5 2 1
> merge(d1, d2, by = "a", all = TRUE)
a b.x b.y
1 1 1 3
2 2 2 1
3 3 NA 5
4 4 4 4
5 7 5 NA
6 8 NA 2
7 9 3 NA
0960132人目の素数さん
2013/08/18(日) NY:AN:NY.ANその認識はスレによっては非常識でしかないから今すぐ治せ
0961132人目の素数さん
2013/08/21(水) NY:AN:NY.AN再帰関数を書きたいのだけど、
再帰処理の終了判定条件なしで、
単純に再帰の回数を指定して処理を終了させるにはどうすればよいのだろう。
x' = f(x) みたいな関数があって、
f(f(f(f(f(f(x))))))という風に有限回数で入れ子にしたい。
0962132人目の素数さん
2013/08/22(木) NY:AN:NY.AN「なにも書いてなければ(馬鹿な)windows(ユーザー)」というのはもやは常識だろ
0963961
2013/08/22(木) NY:AN:NY.ANf <- function(x){
return(x + 1)
}
f.main <- function(x, i = 3){
for (j in 1:i){
x <- f(x)
}
return(x)
}
とすれば、forループ終了後に最終的なxの値はそのまま残ってくれるみたいだ。
> f.main(1, i = 100)
[1] 101
Recall()とか考えて迷宮に入っていた。
0964132人目の素数さん
2013/08/22(木) NY:AN:NY.ANどうせならこうだな
f <- function(x) {x + 1}
g <- function(x) {x + 2}
f.main <- function(a, x, i){
for (j in 1:i){
x <- a(x)
}
return(x)
}
f.main(f, 1, 100)
f.main(g, 1, 100)
0965132人目の素数さん
2013/08/23(金) NY:AN:NY.ANapplyとsetequalで出来るかと思ったのですがうまくいきませんでした
forループ2つで行と列を見ていけば出来ることは出来たのですが、どうも非効率的な気がします
0966132人目の素数さん
2013/08/23(金) NY:AN:NY.AN?Reduceより
Iterate <- function(f, n = 1) function(x) Reduce(function(g, ...) g(...), rep.int(list(f), n), x, right = TRUE)
h <- function(x) 1 + 1 / x
> Iterate(h, 40)(1) == (sqrt(5) + 1) / 2
[1] TRUE
関数言語っぽく
Compose <- function(f, g) function(x) f(g(x))
nest.fun <- function(f, n){
if (n == 0) function(x) identity(x)
else Compose(f, nest.fun(f, n - 1))
}
> nest.fun(h, 40)(1) == (sqrt(5) + 1) / 2
[1] TRUE
末尾再帰かつ高速化
nest.fun <- function(f, n, acc.fun = identity){
if (n == 0) return(acc.fun)
else if (n %% 2 == 0) nest.fun(Compose(f, f), n / 2, acc.fun)
else nest.fun(f, n - 1, Compose(f, acc.fun))
}
0967132人目の素数さん
2013/08/23(金) NY:AN:NY.ANありがとうございます。大変参考になりました。
>>966の9行目、
function(x) retrun(x) じゃなくて、function(x) identity(x)にするのは何か理由があるのでしょうか。
以前から、identity()の存在意義がよく分からないのです。
>>965
よく理解できていないけど、Xから抽出したものが、vと同一ならば、vそのものだよね?
だとすると、vのままでよいので、抽出する意味がない。
vと同一の行番号が知りたいとか、
vと同一の行がXに複数含まれていて、その全てを取り出したい、
または、vと一致する行がXに含まれているかどうかの有無をチェックしたいという意味でしょうか。
> X <- matrix(1:100, 10)
> v <- (1:10) * 10 - 4
としたとき、
> X[apply(X, 1, all.equal, v) == TRUE, ]
[1] 6 16 26 36 46 56 66 76 86 96
と抽出できるけど、これは
> v
[1] 6 16 26 36 46 56 66 76 86 96
と同一なわけで。
0968132人目の素数さん
2013/08/23(金) NY:AN:NY.AN下記データ( r t )があります。
r <- c( 0.727 , 0.634 , 0.500 , 0.443 , 0.416 , 0.328 , 0.272 , 0.225 , 0.133 )
t <- 1:9
このとき、以下のようにロジスティック回帰を行うと、
glm( r ~ x , family=binomial )
>In eval(expr, envir, enclos) : 二項 glm で整数でない成功数がありました!
とエラーになります。
ここで質問です。
1.小数データを目的変数に、ロジスティック回帰はできないのですか?
できるのであれば、どうすればよいのでしょうか?
2.ふと疑問に思ったのですが、目的変数が0、1って、そのままでは、ロジット変換できないと思うのですが、
内部的にどのように計算されているのでしょうか?(微小数を加減算している?0+0.0000001と1-0.0000001 )
0969132人目の素数さん
2013/08/23(金) NY:AN:NY.AN> エラーになります
エラーになりません。「警告」と「エラー」は違います。
> 小数データを目的変数に、ロジスティック回帰はできないのですか?
できますが、多分あなたが思っているものと違います。
glm()でロジスティック回帰をやるときには、
目的変数の設定仕方が3通りあります。
>>968を見ると、目的変数は、二値でも、説明変数カテゴリごとの計数(整数)でもないから、
説明変数カテゴリごとの割合(小数)だよね。
その場合は、分母に相当するweightsを指定しないと駄目だよ。
何を言っているのか、分からなければ、Rの解説書を読んだ方がよいよ。
Rで学ぶデータサイエンスシリーズ「一般線形モデル」なら、pp.53-56のあたり。
2. の質問は、目的変数をロジット変換するという思いこみによる誤解。
実測値(0,1)とモデル値exp(beta_1x_1+beta_0)/(1-exp(beta_1x_1+beta_0))を比較して、
当てはまりを見る話じゃないの?
0970132人目の素数さん
2013/08/23(金) NY:AN:NY.ANレスありがとうございます。
確かに「警告」であって「エラー」ではないですね。
私が提示した例は、説明変数カテゴリごとの割合(小数)です。
その上で、明示的に分母に相当するweightsを指定しなくても
同じウエイトが設定されるのでは?と思いました。如何でしょう?
そうだとしたら、「警告」を出力しなくても良いのではと思いました。
2.
> 実測値(0,1)とモデル値exp(beta_1x_1+beta_0)/(1-exp(beta_1x_1+beta_0))を比較
なるほど。すっきりしました!
実測値(0,1)とモデル値が、完全に一致しない(限りなく近くはなるが・・・)ところに
私は何か引っかかっていたようです。
0971966
2013/08/23(金) NY:AN:NY.AN>function(x) retrun(x) じゃなくて、function(x) identity(x)にするのは何か理由があるのでしょうか。
朝だったので単なる勘違いでした。
-if (n == 0) function(x) identity(x)
+if (n == 0) identify
個人的には恒等写像って意味を明確にしたいからidentityを使う感じでしょうか。
むろんfunction(x) x でも機能は同等ですが。
0972965
2013/08/24(土) NY:AN:NY.AN言葉足らずで申し訳ありませんでしたが、最終的にやりたかったことは変数の組合せ別の集計でした
適当で申し訳ありませんが結局こうなりました
X <- as.data.frame(matrix(1:100, 10))
X <- rbind(X, X, X[1:5,], X[1:4,])
Y <- data.frame(unique(X), freq=NA)
for (i in 1:nrow(Y)) {
Y$freq[i] <- nrow(X[which(apply(X, 1, identical, as.matrix(Y)[i,1:(ncol(Y)-1)])),])
}
0973132人目の素数さん
2013/08/24(土) NY:AN:NY.ANこんなんもあるよ。変数も指定できるみたい
library(plyr)
count(X)
count(X, c("V1", "V2"))
0974132人目の素数さん
2013/08/24(土) NY:AN:NY.AN知りませんでした。そのまんま私のやりたいことができてびっくりです
ありがとうございます
0975132人目の素数さん
2013/08/26(月) NY:AN:NY.ANちょっとピントがずれている気がする…
元データ解らないからなんとも言えないんだが、
>>969氏の回答がより正しいだろうことを前提に、あえて>>968氏の欲しい答えを返すと
glm( r ~ t , family = "gaussian"( link = "logit" ) )
となる (これは誤差構造に正規分布を仮定して、ロジスティック式のパラメータを推定している)
ちなみに>>969氏の方法だと誤差構造に二項分布を仮定して(以下同文)となる (おそらくこっちの方がより正しい)
0976132人目の素数さん
2013/08/30(金) NY:AN:NY.AN0977132人目の素数さん
2013/08/30(金) NY:AN:NY.ANうーん、口調が違う気がするけど。
それより、河童さんが誰か気になる。
0978132人目の素数さん
2013/09/07(土) 12:43:56.32最近、河童さんと俺しかQ&A初心者コースに回答していない。
過疎化が進んでいるのかな。
0979132人目の素数さん
2013/09/09(月) 00:44:44.31kwsk
0980132人目の素数さん
2013/09/23(月) 09:35:45.96作業ディレクトリではなく、ホームディレクトリです。
0981980
2013/09/23(月) 09:54:08.60ホームディレクトリというのはたんにRのアプリが入ってる場所のことなのかな
0982132人目の素数さん
2013/09/23(月) 17:01:03.55> Rのホームディレクトリの場所は変更はできないんでしょうか?
もちろん、出来ます。
でも、突拍子もないところにインストールすると、
見つけてもらえない場合があるので、
標準的な場所以外は、念のために環境変数R_HOMEを設定しておく方が良いでしょう。
ただし、設定したことを忘れると、トラブルシューティングではまることがあるので注意。
0983980
2013/09/23(月) 21:47:00.43ありがとうございます
初心者……というかパソコン自体もあまり詳しくないのですが(Macをつかってます)、ホームディレクトリっていうのは、単にRをインストールした場所という意味なんでしょうか?
作業ディレクトリには、.RDataとか.Rhistoryとか.Rprofileとかが入っているのですが、ホームディレクトリというのはそういう、設定ファイル的なものを置く場所ではないのでしょうか。
なんか、置き場のようなものとしてホームディレクトリってのがあるんであれば、作業ディレクトリの近くに置いといたほうがいいのかな…とか思ったのですが
0984132人目の素数さん
2013/09/24(火) 00:07:26.50コンピュータの世界では一般的に、
例えば、○○というソフトウェアがあったとして、
○○のホームディレクトリというのは、
○○をインストールしたディレクトリと実用上は同等です。
これはRに限った話ではなくて、一般的な話です。
> 作業ディレクトリには、.RDataとか.Rhistoryとか.Rprofileとかが入っている
それらは、システム全体に有効にさせる場合を除いて、
ユーザのホームディレクトリ(つまりMacOSXの場合、/Users/ユーザ名)に置くファイルです。
作業ディレクトリに置いた場合にどうなるか実験したことはありませんが。
0985984
2013/09/24(火) 00:11:07.87訂正します。
Rを終了するときに、作業内容と履歴を保存すれば、
.Rdataと.Rhistoryはそれぞれの作業ディレクトリに残ります。
0986980
2013/09/24(火) 08:03:34.73おっと、わたし、.Rprofileも作業ディレクトリにおいてました…たしかにいま解説サイトをいくつか見るとホームディレクトリだよ〜んと書いてありました
最初、グラフの日本語化のために解説サイトに公開されてる.Rprofileの例をいくつか試してダメだったんですが、作業ディレクトリに置いてたからかな…
でも今は日本語化に成功してるので、後で自分の環境がどうなってるか確認してみます
ありがとうございます
0987132人目の素数さん
2013/09/24(火) 09:07:46.53> たしかにいま解説サイトをいくつか見ると
正しいかどうか確証がないサイトの解説よりも、
helpを読もうよ。
help("Rprofile")
Rはどんどん進化しているので、Webサイトや書籍で解説しても、
すぐに内容が陳腐化します。
自分が使っているバージョンのRではどうなのか、
自分がインストールしているRに尋ねるのが最短だと思いますよ。
0989132人目の素数さん
2013/09/25(水) 12:34:56.57レス数が950を超えています。1000を超えると書き込みができなくなります。