= 統計解析フリーソフト R 【第2章】 =

このエントリーをはてなブックマークに追加
929132人目の素数さん: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の指示はどの部分ですか?
よろしくお願いします。

931132人目の素数さん:2008/08/16(土) 04:45:38
>>930
LETTERS[1:3]
932926: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のとき緑丸とするにはどのようにしますか?

どうぞよろしくお願いいたします。
935132人目の素数さん:2008/08/18(月) 03:54:23
>>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は自分で考えてみなさい
936132人目の素数さん:2008/08/18(月) 18:52:15
超基本的なことかもしれないんだけど、
> 123.05 - 123.02
[1] 0.03
> (123.05 - 123.02) == 0.03
[1] FALSE
で、FALSEが返ってくるのは、なぜ?
色々本を見たんだけど、どこにも理由が出ていないし・・・
俺のOSX版だけかな。
937132人目の素数さん:2008/08/18(月) 20:42:56
浮動小数点演算による誤差。そのままでは、どうやっても回避不能。
> 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
などとする。
938132人目の素数さん:2008/08/18(月) 20:48:46
間違った、こっちの方が良いな。
>abs(1.0 - 123.02/123.05 - 0.03/123.05)< 1.0e-15
939132人目の素数さん:2008/08/18(月) 20:53:12
>>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ユー
ザは、きちんと考慮してプログラムを作るべき
940132人目の素数さん:2008/08/19(火) 04:14:30
>>937
>>938
>>939

ご親切なご指導ありがとう後います。
何となく浮動小数点関連ではないかなと考えていたのですが
思ってたより、誤差が入ってしまうので正確に計算するのは難しそうですね。

とりあえず、最大小数点二位までのデータなので
全てのデータを百倍して、整数域で扱うことにしました。
ありがとうございました。
941132人目の素数さん: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を使えばよいでしょうか?
また他にやり方があれば教えていただけないでしょうか。。
942132人目の素数さん:2008/08/27(水) 00:45:41
>>941
その答えと同じにするなら

VV<-paste(V2,"-",V3)
unique(VV)

とするとよいが。
943132人目の素数さん:2008/08/27(水) 11:53:31
Ubuntuのリポジトリに新しいr-base-coreとr-recommendedが来た。
2.7.2だな。
944943:2008/08/27(水) 11:54:43
s/リポジトリ/CRANのリポジトリ/
945132人目の素数さん:2008/08/30(土) 03:07:30
single-case design などに使える Rondamization test の
パッケージってどこかにないでしょうか。
パッケージ名等ご存じの方がいましたら教えてください。
946132人目の素数さん:2008/09/06(土) 19:08:24
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"等をここのセルに整列する方法)
947132人目の素数さん:2008/09/06(土) 20:21:43
>>946
write.csv()
948132人目の素数さん:2008/09/06(土) 22:05:38
>>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にしてテキストファイルウィザード
から読んだ方が忠実に再現されるように思います。生意気言ってすみません。
949132人目の素数さん:2008/09/07(日) 15:48:27
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表として貼り付くと考えました。素人考えですが・・・。

そんな関数ない、もしくは簡単には作れないですかね。
950132人目の素数さん:2008/09/07(日) 16:44:43
946ですが、自己解決しました。
EXCELに貼り付けてから「[区切り位置] コマンドを使用してデータを区切る方法」
ttp://support.microsoft.com/kb/214261/ja
板汚し礼しました。(しかもスレチ?)
>>947
有用な情報、ありがとうございました。逝ってきます。
951132人目の素数さん:2008/09/14(日) 22:37:50
R Tipsもう売ってないやんけ orz
新版マダー?
952132人目の素数さん:2008/09/14(日) 22:48:07
>>951
発行元の九天社が倒産したからね。
ここを見ればほとんど補えるよ↓
http://cse.naro.affrc.go.jp/takezawa/r-tips/r.html
953132人目の素数さん:2008/09/14(日) 23:16:04
age
954132人目の素数さん:2008/09/20(土) 22:10:26
ほとんど知識の無いまったくのR初心者なのですが私にも使えるようになるでしょうか?
955132人目の素数さん:2008/09/20(土) 22:15:52
>>954
最初は誰もが初心者
956954:2008/09/20(土) 22:21:03
私は学生なんですが授業でRを使うんですよ
単位を取るとなるとそれなりの知識がないと厳しいのではないかと思い・・・
回帰分析などといったことをやるそうです
957132人目の素数さん:2008/09/26(金) 23:45:10
それなら必要な知識は統計の知識のような気もしないでもない。
958132人目の素数さん:2008/09/28(日) 14:36:32
Rjp Wiki って何であんな排他的雰囲気なんだろうか。
傍から見てるとすごい心証わるいんだが。
959132人目の素数さん:2008/09/28(日) 15:05:04
ほんとだね
アレは改めないとダメだね
960132人目の素数さん:2008/09/28(日) 20:09:12
実務を知らない学者の集まりだから
961132人目の素数さん:2008/10/05(日) 14:44:50
>>956
Rによるやさしい統計学って本がお勧め
統計学初心者でもR初心者でも取っ付きやすいと思う
962132人目の素数さん:2008/10/06(月) 22:51:11
3.45%という文字列を0.0345という数字に変換する方法を教えてください。
963132人目の素数さん:2008/10/07(火) 02:11:24
繰り返し文を使って大量にグラフを出力したいのですが、for文で使う変数をファイル名に取り込むときはどうやればいいいですか?

シェルでいう
i=1
filename="${i}.png"
の${}です・
964914: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
965914:2008/10/08(水) 19:22:55
「R によるやさしい統計学」の感想
(1) ○
 第6章 2つの平均値を比較する
 第7章 分散分析
 複数の標本、対応のあるなし、3つ以上の平均値の比較
 などが、連続的に扱われていて、非常にわかりやすい。
(2) ◎
 第18章 人口データの発生
 第19章 検定の多重性と第1種の誤りの確率
 第20章 検定力分析によるサンプルサイズの決定
 この説明の順番は、すばらしい。
(3) ×
 第4章 母集団と標本
 第5章 統計的仮説検定( の最初の数ページ )
 序文(vi)の「対象となる読者」が、この部分を理解できるとは思えない。
 初心者に、確率変数、確率分布の説明が不十分。
966132人目の素数さん:2008/10/08(水) 19:57:14
あのぉ・・・

3.45%という文字列を0.0345という数字に変換する方法を教えてください。

不可能なのでしょうか?
967914: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
968132人目の素数さん:2008/10/08(水) 22:56:01
Σ(-ロ-)スマートにはいかないみたいですね。

ありがとうございました。
969132人目の素数さん:2008/10/08(水) 23:12:02
質問者ではないですが、
おそらく、データを取り込むときに
xx.x% 書式を小数データに自動変換する
機能があるんじゃないだろうか。
どこのソフトにもあると思うので、Rにもあるのではないかな
だれか知らない?(R知らないもので)。
970132人目の素数さん:2008/10/09(木) 04:02:25
>>964
ありがとうございます。
971914コテ最後:2008/10/09(木) 18:57:44
>>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
972132人目の素数さん:2008/10/09(木) 22:18:56
むむむむむ・・・・なんというか
ふ〜結構面倒
973132人目の素数さん:2008/10/09(木) 22:29:49
やっぱり学習用かな。。
974132人目の素数さん:2008/10/09(木) 23:12:30
> 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

975132人目の素数さん: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で割ること決まって居るし、この行はなくても良いくらいだよね。
利用言語というよりアルゴリズム作り用なんだろうな、でも余分が多い。
でも、そうだから仕方ないんだけど

回答頂いた方への不満ではありませんので。もうしわけありませんでした。
ありがとうございます。

976132人目の素数さん:2008/10/10(金) 01:02:16
詳しい人に質問。15年ほど前、大学2年の一般教養で
東大出版会の統計学入門を種本にした授業で単位を取った。
なぜか統計学入門は楽しく読めて、独学して一応
わかった「つもりになった」が、就職後、統計学と疎遠になったら
ほとんど全部忘れてしまった。
で、このたび仕事で必要になったんだが、予算上SASやSPSSには手が出せず、
Rの存在を知って早速インストールし、
関係サイトをあちこち見て回って勉強し直しているのだが、
もしかして、1991年刊の統計学入門で取り上げられている手法は、
WindowsXPがサクサク動くパソコンでRが使える時代には
もう古くさいものが少なからず含まれているのではないか?
977132人目の素数さん:2008/10/10(金) 07:19:07
>>976
手で電卓たたいて計算する必要はないんじゃないか?という意味なら
その通りだが、それは1991年でも同じ。教科書は学習用。
統計学を学習するということにおいて統計学入門はまだいい本だと思うよ。
978974
>>975
自分にとって使いやすい統計ソフトであるかどうかという以前に、オープンソースとは何かという視点を
持った方がよいと思うぞ。必要性を感じた人が必要な機能を付加する(付加できる)ということは、逆に
言えば、あなたが欲しい機能が実装されていないのは、誰も必要と考えていないから。あなたが必要なら
あなたがrmpercent()のように追加すればよい。

私自身は%を少数に変換する必要性を感じたことがない。表計算ソフトで%表示されいても実態は小数デー
タだし、CSV経由で読み込んだらnumericになっている。