929 :
132人目の素数さん :2008/08/15(金) 17:51:35
パッケージkernlabの二次計画ソルバーipop使ってる人いますか? 二つの変数があるときの二次計画をときたいのですが。。 ipopでは無理なのでしょうか?
930 :
教えてください2-1 :2008/08/15(金) 22:32:45
>>926 ありがとうございます。
ifelseよりシンプルに書けそうですね。
申し訳ありませんが下の2行の翻訳をお願いいます。
> z <- cut(z,c(-Inf,100,150,Inf),include.lowest=TRUE)
> levels(z) <- LETTERS[1:3]
A、B、Cの指示はどの部分ですか?
よろしくお願いします。
932 :
926 :2008/08/16(土) 21:33:49
>>931 代返ありがと
>>925 ベクトルではなくてデータフレームを扱いたいと言うこと?cbind()で足せばOK
> dat <- data.frame(x=month.name[1:5],y=runif(5),z=c(120,201,150,96,115))
> dat
x y z
1 January 0.63212456 120
2 February 0.19865357 201
3 March 0.31978766 150
4 April 0.88575752 96
5 May 0.01307491 115
> z.s <- cut(dat$z,c(-Inf,100,150,Inf),include.lowest=TRUE)
> levels(z.s) <- LETTERS[1:3]
> dat <- cbind(dat,z.s)
> dat
x y z z.s
1 January 0.63212456 120 B
2 February 0.19865357 201 C
3 March 0.31978766 150 B
4 April 0.88575752 96 A
5 May 0.01307491 115 B
933 :
教えてください2-2 :2008/08/17(日) 10:37:05
<<932 ご説明ありがとうございます。 data=(X,Y,Z)の中でZについてある範囲でいくつかに分類したかった ので質問させていただきました。 これまではsubset()を何度も繰り返していました。 cbind()はとても便利そうですね。助かりました。
934 :
教えてください2-3 :2008/08/17(日) 16:39:23
「聞くは一時の恥、聞かぬは一生の恥」という諺もありますので 皆様にもう一つ質問させてください。 次のようなデータがあります。 X Y Z 20 10 120 30 56 201 5 40 150 12 25 96 19 27 115 2 30 165 10 23 85 X,Yの散布図を描きたいのですが、条件としてZ<100のときは赤丸(凡例)、100<=Z<150のとき青丸、 Z>=150のとき緑丸とするにはどのようにしますか? どうぞよろしくお願いいたします。
>>934 もはやあなたを相手しているのは私だけのような気がするが、
> dat <- data.frame(x=c(20,30,5,12,19,2,10),y=c(10,56,40,25,27,30,23),z=c(120,201,150,96,115,165,85))
> cols <- c("red","blue","green")
> z <- cut(dat$z,c(-Inf,100,150,Inf),include.lowest=TRUE)
> plot(dat$x,dat$y,col=cols[z],pch=19)
legendは自分で考えてみなさい
超基本的なことかもしれないんだけど、 > 123.05 - 123.02 [1] 0.03 > (123.05 - 123.02) == 0.03 [1] FALSE で、FALSEが返ってくるのは、なぜ? 色々本を見たんだけど、どこにも理由が出ていないし・・・ 俺のOSX版だけかな。
浮動小数点演算による誤差。そのままでは、どうやっても回避不能。 > 123.05-123.02 [1] 0.03 > sprintf("%.15e", 123.05-123.02) [1] "3.000000000000114e-02" > どうしてもそこで TRUE が欲しい場合には、 > (1.0 - 123.02/123.05) - 0.03/123.05 < 1.0e-15 などとする。
間違った、こっちの方が良いな。 >abs(1.0 - 123.02/123.05 - 0.03/123.05)< 1.0e-15
>>936 いいところに気がついたね。数値計算の世界にようこそ。
> (123 - 122) == 1
[1] TRUE
> (123 - 122.5) == 0.5
[1] TRUE
> (123 - 122.75) == 0.25
[1] TRUE
> (123.05 - 123.02) == 0.03
[1] FALSE
> (123.06 - 123.02) == 0.04
[1] FALSE
整数は正確に保持され、小数部分を持つ数も,小数部が2進数で表されるもの(0.5, 0.25, 0.125 など
などや,それらの和で表現されるもの)は,正確に保持される。一方、それ以外の数は,"近似値"が保
持され、上記ような結果になる。Execelの計算がいい加減なのは上記問題を無視しているから。Rユー
ザは、きちんと考慮してプログラムを作るべき
>>937 >>938 >>939 ご親切なご指導ありがとう後います。
何となく浮動小数点関連ではないかなと考えていたのですが
思ってたより、誤差が入ってしまうので正確に計算するのは難しそうですね。
とりあえず、最大小数点二位までのデータなので
全てのデータを百倍して、整数域で扱うことにしました。
ありがとうございました。
941 :
132人目の素数さん :2008/08/26(火) 22:44:00
質問させていただいてもいいでしょうか。。 データフレームでV2は世帯番号、V3は個人番号だとして $ V2 : int 1 1 1 1 1 1 1 1 3 14 ... $ V3 : int 1 1 2 2 3 3 4 5 1 1 ... unique()で重複する要素をのぞいて以下のように各個人の合計を数えたいのですが 1-1,1-2,1-3,1-4,1-5,3-1,14-1,.... どのようにuniqueを使えばよいでしょうか? また他にやり方があれば教えていただけないでしょうか。。
>>941 その答えと同じにするなら
VV<-paste(V2,"-",V3)
unique(VV)
とするとよいが。
Ubuntuのリポジトリに新しいr-base-coreとr-recommendedが来た。 2.7.2だな。
944 :
943 :2008/08/27(水) 11:54:43
s/リポジトリ/CRANのリポジトリ/
single-case design などに使える Rondamization test の パッケージってどこかにないでしょうか。 パッケージ名等ご存じの方がいましたら教えてください。
Rの出力 ------------------------------------ Anova Table (Type II tests) Response: y Sum Sq Df F value Pr(>F) x 91.779 1 88.525 8.19e-05 *** Residuals 6.221 6 ------------------------------------ のようなものをクリップボード経由で EXCELに貼り付けて表形式にする方法があれば教えてください。m(_ _)m ("Sum Sq","Df","6.221"等をここのセルに整列する方法)
>>947 様
忙しいなか、初心者の質問にお答え頂きありがとうございます。
------------------------------------
> write.csv(Anova(RegModel.1))
"","Sum Sq","Df","F value","Pr(>F)"
"x",91.7794117647059,1,88.5248226950355,8.1900177580363e-05
"Residuals",6.22058823529412,6,NA,NA
------------------------------------
見事にカンマ区切りになり、感動しているのですが、ここから
どうやってクリップボード経由でEXCELに持ち込んだら良いのでしょうか。
ファイルに一旦書き込まないと無理でしょうか。
書き込むのであれば、画面出力を.txtにしてテキストファイルウィザード
から読んだ方が忠実に再現されるように思います。生意気言ってすみません。
946ですが、947様のお返事を見て ------------------------------------ Anova Table (Type II tests) Response: y Sum Sq Df F value Pr(>F) x 91.779 1 88.525 8.19e-05 *** Residuals 6.221 6 ------------------------------------ に対して ------------------------------------ <TABLE> <TR><TD>Anova</TD><TD>Table</TD><TD>(Type</TD><TD>II</TD><TD>tests)</TD></TR> <TR><TD>Response:</TD><TD>y</TD></TR> <TR><TD>Sum</TD><TD>Sq</TD><TD>Df</TD><TD>F</TD><TD>value</TD><TD>Pr(>F)</TD></TR> <TR><TD>x</TD><TD>91.779</TD><TD>1</TD><TD>88.525</TD><TD>8.19e-05</TD><TD>***</TD></TR> <TR><TD>Residuals</TD><TD>6.221</TD><TD>6</TD></TR> </TABLE> ------------------------------------ のように文頭に<TABLE>、文末</TABLE>を付加、行頭に<TR><TD>、行末に</TD></TR>を付加 連続するスペース" "を</TD><TD>に置換すればSum Sqの行がずれますが EXCEL表として貼り付くと考えました。素人考えですが・・・。 そんな関数ない、もしくは簡単には作れないですかね。
R Tipsもう売ってないやんけ orz 新版マダー?
953 :
132人目の素数さん :2008/09/14(日) 23:16:04
age
954 :
132人目の素数さん :2008/09/20(土) 22:10:26
ほとんど知識の無いまったくのR初心者なのですが私にも使えるようになるでしょうか?
956 :
954 :2008/09/20(土) 22:21:03
私は学生なんですが授業でRを使うんですよ 単位を取るとなるとそれなりの知識がないと厳しいのではないかと思い・・・ 回帰分析などといったことをやるそうです
957 :
132人目の素数さん :2008/09/26(金) 23:45:10
それなら必要な知識は統計の知識のような気もしないでもない。
Rjp Wiki って何であんな排他的雰囲気なんだろうか。 傍から見てるとすごい心証わるいんだが。
959 :
132人目の素数さん :2008/09/28(日) 15:05:04
ほんとだね アレは改めないとダメだね
実務を知らない学者の集まりだから
>>956 Rによるやさしい統計学って本がお勧め
統計学初心者でもR初心者でも取っ付きやすいと思う
962 :
132人目の素数さん :2008/10/06(月) 22:51:11
3.45%という文字列を0.0345という数字に変換する方法を教えてください。
963 :
132人目の素数さん :2008/10/07(火) 02:11:24
繰り返し文を使って大量にグラフを出力したいのですが、for文で使う変数をファイル名に取り込むときはどうやればいいいですか? シェルでいう i=1 filename="${i}.png" の${}です・
964 :
914 :2008/10/08(水) 18:38:15
>>963 >filename="${i}.png"
んで、イイんじゃね
> for( i in 1:5 ){
+ filename <- sprintf("%d.png", i)
+ cat(filename, "\n")
+ }
1.png
2.png
3.png
4.png
5.png
965 :
914 :2008/10/08(水) 19:22:55
「R によるやさしい統計学」の感想 (1) ○ 第6章 2つの平均値を比較する 第7章 分散分析 複数の標本、対応のあるなし、3つ以上の平均値の比較 などが、連続的に扱われていて、非常にわかりやすい。 (2) ◎ 第18章 人口データの発生 第19章 検定の多重性と第1種の誤りの確率 第20章 検定力分析によるサンプルサイズの決定 この説明の順番は、すばらしい。 (3) × 第4章 母集団と標本 第5章 統計的仮説検定( の最初の数ページ ) 序文(vi)の「対象となる読者」が、この部分を理解できるとは思えない。 初心者に、確率変数、確率分布の説明が不十分。
966 :
132人目の素数さん :2008/10/08(水) 19:57:14
あのぉ・・・ 3.45%という文字列を0.0345という数字に変換する方法を教えてください。 不可能なのでしょうか?
967 :
914 :2008/10/08(水) 21:15:02
>>966 >3.45%という文字列を0.0345という数字に変換する方法を教えてください。
こんな感じかな
> s="3.45%"
> n=as.double(substr(s, 1, nchar(s)-1))/100.0
> n
[1] 0.0345
Σ(-ロ-)スマートにはいかないみたいですね。 ありがとうございました。
969 :
132人目の素数さん :2008/10/08(水) 23:12:02
質問者ではないですが、 おそらく、データを取り込むときに xx.x% 書式を小数データに自動変換する 機能があるんじゃないだろうか。 どこのソフトにもあると思うので、Rにもあるのではないかな だれか知らない?(R知らないもので)。
970 :
132人目の素数さん :2008/10/09(木) 04:02:25
>>968 >Σ(-ロ-)スマートにはいかないみたいですね。
以下は、最近話題ノ全国テスト、都道府県別の「数学A」の正答率(中学生)
第2カラムが、該当箇所(3.45%) ね。
D:\Somewhere>type in.txt
都道府県,正答率
北海道,68.6%
青森県,73.9%
岩手県,68.6%
(1) オレならば、awk でやっちまう。 under Cygwin, Linux
gawk -F, 'NR>1{ sub(/%/,"",$2); $2=$2/100.0; } { print $0; }' in.txt > in2.txt
(2) R でやるならば、あらかじめエディタで % だけを削除しておく。
その後、R の transform で、1/100 する。
> tmp1 <- read.csv("in2.txt")
> tmp2 <- transform(tmp1, 正答率2=as.numeric(正答率)/100)
> df <- tmp2[,c(1,3)]
> df
都道府県 正答率2
1 北海道 0.686
2 青森県 0.739
3 岩手県 0.686
972 :
132人目の素数さん :2008/10/09(木) 22:18:56
むむむむむ・・・・なんというか ふ〜結構面倒
やっぱり学習用かな。。
> rmpercent <- function(x){x<-as.character(x);as.numeric(substr(x,1,nchar(x)-1))/100} > rmpercent("3.45%") [1] 0.0345 > tmp1 <- read.csv("in.txt") > tmp1 都道府県 正答率 1 北海道 68.6% 2 青森県 73.9% 3 岩手県 68.6% > tmp1[,2] <- rmpercent(tmp1[,2]) > tmp1 都道府県 正答率 1 北海道 0.686 2 青森県 0.739 3 岩手県 0.686
975 :
132人目の素数さん :2008/10/09(木) 23:39:40
> tmp1[,2] <- rmpercent(tmp1[,2]) 最初からこういうの用意されていないんだろうか?ありそうな気もするが > rmpercent <- function(x){x<-as.character(x);as.numeric(substr(x,1,nchar(x)-1))/100} %なら100で割ること決まって居るし、この行はなくても良いくらいだよね。 利用言語というよりアルゴリズム作り用なんだろうな、でも余分が多い。 でも、そうだから仕方ないんだけど 回答頂いた方への不満ではありませんので。もうしわけありませんでした。 ありがとうございます。
976 :
132人目の素数さん :2008/10/10(金) 01:02:16
詳しい人に質問。15年ほど前、大学2年の一般教養で 東大出版会の統計学入門を種本にした授業で単位を取った。 なぜか統計学入門は楽しく読めて、独学して一応 わかった「つもりになった」が、就職後、統計学と疎遠になったら ほとんど全部忘れてしまった。 で、このたび仕事で必要になったんだが、予算上SASやSPSSには手が出せず、 Rの存在を知って早速インストールし、 関係サイトをあちこち見て回って勉強し直しているのだが、 もしかして、1991年刊の統計学入門で取り上げられている手法は、 WindowsXPがサクサク動くパソコンでRが使える時代には もう古くさいものが少なからず含まれているのではないか?
>>976 手で電卓たたいて計算する必要はないんじゃないか?という意味なら
その通りだが、それは1991年でも同じ。教科書は学習用。
統計学を学習するということにおいて統計学入門はまだいい本だと思うよ。
978 :
974 :
2008/10/11(土) 08:44:56 >>975 自分にとって使いやすい統計ソフトであるかどうかという以前に、オープンソースとは何かという視点を
持った方がよいと思うぞ。必要性を感じた人が必要な機能を付加する(付加できる)ということは、逆に
言えば、あなたが欲しい機能が実装されていないのは、誰も必要と考えていないから。あなたが必要なら
あなたがrmpercent()のように追加すればよい。
私自身は%を少数に変換する必要性を感じたことがない。表計算ソフトで%表示されいても実態は小数デー
タだし、CSV経由で読み込んだらnumericになっている。