= 統計解析フリーソフト R 【第2章】 =at MATH
= 統計解析フリーソフト R 【第2章】 = - 暇つぶし2ch923:132人目の素数さん
08/08/11 23:51:56
Rは知らないが
これみると
"A","B","C"という値は、"150"より
大きいということでしょう。

HEX出力してみるとそうなってんじゃないかな。

924:132人目の素数さん
08/08/12 02:40:11
>>922
> z <- c(120,201,150,96,115)
> z2<-z
> z2[z>=150]<-"C"
> z2[z>=100&z<150]<-"B"
> z2[z<100]<-"A"
> z2
[1] "B" "C" "C" "A" "B"

自分自身に入れると途中から数ではなく文字列になるので
>>923のいうように文字列比較になってしまいうまくいかない。



925:教えてください2
08/08/12 07:41:22
ありがとうござます。データが多いときは、例えばdata=(X,Y,Z)のときはどうすればよろしいでしょうか?

条件文を
> zc <- ifelse(data$Z<100,"A",ifelse(datat$Z>=100 & data$Z<150,"B",ifelse(datat$Z>=150,"C",NA)))

を使って、Zに記号をつけた新しいdataNEW=(X,Y,Z)ができますか?
すみませんまた教えていただけませんか?よろしくお願いします。

926:132人目の素数さん
08/08/12 11:51:07
>>925
recodeするときは、ifelseよりもcutを使った方が楽だと思うぞ。
> z <- c(120,201,150,96,115)
> z <- cut(z,c(-Inf,100,150,Inf),include.lowest=TRUE)
> levels(z) <- LETTERS[1:3]
> z
[1] B C B A B
Levels: A B C



927:132人目の素数さん
08/08/13 14:16:12
t検定表を見る代わりに、Rに出力させたいのですが、どうすればできますか?


928:132人目の素数さん
08/08/14 08:46:30
自己解決しました。
信頼係数95%のときに、自由度10の両側有意水準は、以下のようにして得られる。
> qt(0.975,10)
[1] 2.228139
> qt(0.025,10)
[1] -2.228139



929:132人目の素数さん
08/08/15 17:51:35
パッケージkernlabの二次計画ソルバーipop使ってる人いますか?

二つの変数があるときの二次計画をときたいのですが。。
ipopでは無理なのでしょうか?



930:教えてください2-1
08/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の指示はどの部分ですか?
よろしくお願いします。



931:132人目の素数さん
08/08/16 04:45:38
>>930
LETTERS[1:3]


932:926
08/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
08/08/17 10:37:05
<<932 ご説明ありがとうございます。
data=(X,Y,Z)の中でZについてある範囲でいくつかに分類したかった
ので質問させていただきました。
これまではsubset()を何度も繰り返していました。
cbind()はとても便利そうですね。助かりました。

934:教えてください2-3
08/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のとき緑丸とするにはどのようにしますか?

どうぞよろしくお願いいたします。


935:132人目の素数さん
08/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は自分で考えてみなさい

936:132人目の素数さん
08/08/18 18:52:15
超基本的なことかもしれないんだけど、
> 123.05 - 123.02
[1] 0.03
> (123.05 - 123.02) == 0.03
[1] FALSE
で、FALSEが返ってくるのは、なぜ?
色々本を見たんだけど、どこにも理由が出ていないし・・・
俺のOSX版だけかな。

937:132人目の素数さん
08/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
などとする。

938:132人目の素数さん
08/08/18 20:48:46
間違った、こっちの方が良いな。
>abs(1.0 - 123.02/123.05 - 0.03/123.05)< 1.0e-15


939:132人目の素数さん
08/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ユー
ザは、きちんと考慮してプログラムを作るべき

940:132人目の素数さん
08/08/19 04:14:30
>>937
>>938
>>939

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

とりあえず、最大小数点二位までのデータなので
全てのデータを百倍して、整数域で扱うことにしました。
ありがとうございました。

941:132人目の素数さん
08/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を使えばよいでしょうか?
また他にやり方があれば教えていただけないでしょうか。。

942:132人目の素数さん
08/08/27 00:45:41
>>941
その答えと同じにするなら

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

とするとよいが。

943:132人目の素数さん
08/08/27 11:53:31
Ubuntuのリポジトリに新しいr-base-coreとr-recommendedが来た。
2.7.2だな。


944:943
08/08/27 11:54:43
s/リポジトリ/CRANのリポジトリ/

945:132人目の素数さん
08/08/30 03:07:30
single-case design などに使える Rondamization test の
パッケージってどこかにないでしょうか。
パッケージ名等ご存じの方がいましたら教えてください。

946:132人目の素数さん
08/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"等をここのセルに整列する方法)

947:132人目の素数さん
08/09/06 20:21:43
>>946
write.csv()

948:132人目の素数さん
08/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にしてテキストファイルウィザード
から読んだ方が忠実に再現されるように思います。生意気言ってすみません。

949:132人目の素数さん
08/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表として貼り付くと考えました。素人考えですが・・・。

そんな関数ない、もしくは簡単には作れないですかね。

950:132人目の素数さん
08/09/07 16:44:43
946ですが、自己解決しました。
EXCELに貼り付けてから「[区切り位置] コマンドを使用してデータを区切る方法」
URLリンク(support.microsoft.com)
板汚し礼しました。(しかもスレチ?)
>>947
有用な情報、ありがとうございました。逝ってきます。

951:132人目の素数さん
08/09/14 22:37:50
R Tipsもう売ってないやんけ orz
新版マダー?

952:132人目の素数さん
08/09/14 22:48:07
>>951
発行元の九天社が倒産したからね。
ここを見ればほとんど補えるよ↓
URLリンク(cse.naro.affrc.go.jp)

953:132人目の素数さん
08/09/14 23:16:04
age

954:132人目の素数さん
08/09/20 22:10:26
ほとんど知識の無いまったくのR初心者なのですが私にも使えるようになるでしょうか?

955:132人目の素数さん
08/09/20 22:15:52
>>954
最初は誰もが初心者

956:954
08/09/20 22:21:03
私は学生なんですが授業でRを使うんですよ
単位を取るとなるとそれなりの知識がないと厳しいのではないかと思い・・・
回帰分析などといったことをやるそうです

957:132人目の素数さん
08/09/26 23:45:10
それなら必要な知識は統計の知識のような気もしないでもない。

958:132人目の素数さん
08/09/28 14:36:32
Rjp Wiki って何であんな排他的雰囲気なんだろうか。
傍から見てるとすごい心証わるいんだが。

959:132人目の素数さん
08/09/28 15:05:04
ほんとだね
アレは改めないとダメだね

960:132人目の素数さん
08/09/28 20:09:12
実務を知らない学者の集まりだから

961:132人目の素数さん
08/10/05 14:44:50
>>956
Rによるやさしい統計学って本がお勧め
統計学初心者でもR初心者でも取っ付きやすいと思う

962:132人目の素数さん
08/10/06 22:51:11
3.45%という文字列を0.0345という数字に変換する方法を教えてください。

963:132人目の素数さん
08/10/07 02:11:24
繰り返し文を使って大量にグラフを出力したいのですが、for文で使う変数をファイル名に取り込むときはどうやればいいいですか?

シェルでいう
i=1
filename="${i}.png"
の${}です・

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

966:132人目の素数さん
08/10/08 19:57:14
あのぉ・・・

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

不可能なのでしょうか?

967:914
08/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

968:132人目の素数さん
08/10/08 22:56:01
Σ(-ロ-)スマートにはいかないみたいですね。

ありがとうございました。

969:132人目の素数さん
08/10/08 23:12:02
質問者ではないですが、
おそらく、データを取り込むときに
xx.x% 書式を小数データに自動変換する
機能があるんじゃないだろうか。
どこのソフトにもあると思うので、Rにもあるのではないかな
だれか知らない?(R知らないもので)。


970:132人目の素数さん
08/10/09 04:02:25
>>964
ありがとうございます。

971:914コテ最後
08/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

972:132人目の素数さん
08/10/09 22:18:56
むむむむむ・・・・なんというか
ふ~結構面倒

973:132人目の素数さん
08/10/09 22:29:49
やっぱり学習用かな。。

974:132人目の素数さん
08/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



975:132人目の素数さん
08/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人目の素数さん
08/10/10 01:02:16
詳しい人に質問。15年ほど前、大学2年の一般教養で
東大出版会の統計学入門を種本にした授業で単位を取った。
なぜか統計学入門は楽しく読めて、独学して一応
わかった「つもりになった」が、就職後、統計学と疎遠になったら
ほとんど全部忘れてしまった。
で、このたび仕事で必要になったんだが、予算上SASやSPSSには手が出せず、
Rの存在を知って早速インストールし、
関係サイトをあちこち見て回って勉強し直しているのだが、
もしかして、1991年刊の統計学入門で取り上げられている手法は、
WindowsXPがサクサク動くパソコンでRが使える時代には
もう古くさいものが少なからず含まれているのではないか?

977:132人目の素数さん
08/10/10 07:19:07
>>976
手で電卓たたいて計算する必要はないんじゃないか?という意味なら
その通りだが、それは1991年でも同じ。教科書は学習用。
統計学を学習するということにおいて統計学入門はまだいい本だと思うよ。


978:974
08/10/11 08:44:56
>>975
自分にとって使いやすい統計ソフトであるかどうかという以前に、オープンソースとは何かという視点を
持った方がよいと思うぞ。必要性を感じた人が必要な機能を付加する(付加できる)ということは、逆に
言えば、あなたが欲しい機能が実装されていないのは、誰も必要と考えていないから。あなたが必要なら
あなたがrmpercent()のように追加すればよい。

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


979:132人目の素数さん
08/10/11 13:40:19
>>978
>私自身は%を少数に変換する必要性を感じたことがない。表計算ソフトで%表示されいても実態は小数デー
>タだし、CSV経由で読み込んだらnumericになっている。

質問は、一般的に統計ソフトなどはそういう機能を持ち合わせているので
Rにそういう機能はないの?という質問でしょう。


980:132人目の素数さん
08/10/11 19:29:58
禁句になっているような気もするが、
Rをメインで使っている人はデータ加工をどのようにしているの?


981:132人目の素数さん
08/10/11 20:04:23
>>980
それはRにデータを読み込んでからのデータ加工場面と、
外部ファイルにあるデータをRに読み込むための場面に分けて
考えた方がいいと思う。
同様に、テキストデータと数値データについても、同じように
場面を分けないと、データ加工についての議論はすれ違いになる
のではないかと思う。

982:132人目の素数さん
08/10/11 21:08:05
分析前のデータ加工(読み込み前)ってかなり重要ですよね?
あとさ、やっぱり結果の信頼性に欠けるのかなぁ・・・

R歴そんなに長くないのですが、例えばdecomposeの乗法モデル。

Helpでは、Y[t] = T[t] * S[t] + e[t] になってるのに、
実装上は、Y[t] = T[t] * S[t] * e[t] ですよ・・・

無い物は自分で造る、間違っているものは自分で直せの精神ですか?

う~ん・・・

983:132人目の素数さん
08/10/11 21:44:55
二年九十四日。


984:132人目の素数さん
08/10/12 20:34:25
Rとoctaveならどっちを習得したほうが良い???大学生です。

985:132人目の素数さん
08/10/12 21:44:55
二年九十五日。


986:132人目の素数さん
08/10/12 22:03:36
>>984
背景にあるSとMatlabの関係で
統計解析主体ならR、シミュレーション系が主であればoctave。
但し、実業界で考えるなら、Matlabは製造系で仕事がらみでの利用は結構
多いが、Sはあまり多くなく(ただし、企業内の研究など個々人の利用はある)
求人は多くない(Rとoctaveに限定すれば、企業内でのoctave利用はほとんど
ない)。

参考に。

>>982
取り込んでからの(数値データの)処理は強いが、前処理として
外部ファイルのあつかいは非常に弱い。その辺のニーズ異なると思われる。



最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch