021204
統計学関連なんでもあり

統計学に関する質問とか意見などなんでも書き込んでください。回答があるか,回答が正しいかは保証できません。
レポートや宿題の答えを求める記事や,その他不適切と判断した記事は,管理者の独断で即刻削除します。
ローマ数字,丸付き数字などのフォントセット依存文字および半角カタカナは使わないでください。
記事を引用する際には,適切に引用してください(全文引用はしないでください)。
問題が解決した(結局解決しなかった)場合は,その旨報告していただければ,コメントした人や他の読者に参考になるでしょう。


[トップに戻る] [利用上の注意] [ワード検索] [過去ログ] [統計学自習ノート] [管理用]
latest article: No. 22989, 2020/11/23(Mon) 09:48
おなまえ
タイトル
コメント
URL
添付ファイル
暗証キー (英数字で8文字以内)

自分の投稿記事を修正・削除する場合 --> 処理 記事No 暗証キー


Dunnettのp値について
  投稿者:桜とお城 2020/11/18(Wed) 10:26 No. 22983
青木先生

 先生の下記ページにあるDunnettのp値について,質問させていただきます。

> dunnett(data, group)
t p
1:2 1.854090 2.156676e-01
1:3 4.187543 8.023633e-04
1:4 7.073685 5.706414e-08
1:5 4.072727 1.169213e-03

 例えば,有意水準5%とした場合,このp値を片側の時0.05,両側の時0.025と比較するのでしょうか?

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

Re: Dunnettのp値について
  投稿者:aoki 2020/11/18(Wed) 23:36 No. 22987
臨界値ではなく,P値そのものです。

P値は両側検定の場合の値なので,片側検定の場合は半分になるでしょう。

棄却域の確率は,左側 +  右側 = 表示されているP値
棄却域の確率は,左側(或いは右側)のみ = 表示されているP値の半分

Re: Dunnettのp値について
  投稿者:桜とお城 2020/11/23(Mon) 09:48 No. 22989
青木先生

 お礼の返事が遅くなりました。計算されたp値が両側検定の値であると,大変勉強になりました。


相関係数につきまして
  投稿者:アメリ― 2020/11/17(Tue) 11:59 No. 22982 HomePage
たびたび申し訳ございません。

相関係数について、勉強しており、量×量なのですが、片方が正規分布、もう片方が正規分布しておらず、F分布のような分布です。
この場合、Pearson を使うより、Spearman の方がよろしいでしょうか?

試しに両方やったら、両方、有意差があり、同じ結果で相関ありとなりました。

お手数をお掛け致しますが、どうぞよろしくお願い致します。

Re: 相関係数につきまして
  投稿者:アメリ― 2020/11/18(Wed) 10:40 No. 22984 HomePage
補足ですが、片方が 1 2 3 4 5 6の正規分布データ、もう片方が1〜29までの非正規分布のデータなので、Spearman の順位相関係数で検定しようと思います。

もし、間違っていたら、ご教授いただければ幸いです。
お手数をお掛け致しますが、どうぞよろしくお願い致します。

Re: 相関係数につきまして
  投稿者:aoki 2020/11/18(Wed) 22:54 No. 22986
相関係数についての今回の質問は,二つの変数が正規分布するかどうかではなく,ピアソンの積率相関係数は直線相関を見るのに対して,スピアマンの順位相関係数は曲線相関を見るという対比ではないかと思われますが。まあ,片方の変数が大きな値を取りがち(あなたのいうF分布類似のような分布)の場合は,直線相関等よりは曲線相関っぽくなるでしょうが)。
両者の違いは,正規分布するかしないかの問題はではないでしょう。つまり,ピアソンの積率相関係数は,両者が正規分布に従うかどうかは要件にしていないでしょう。もとの変数が y = a*x + b なのか,あるいは,たとえば y = f(x) ,たとえば y=c * x^d とか の曲線相関かどうかということ。
正規分布するかしないかは,極端な数値が現れやすいかどうかということにも関係しますが(極端な値があると,ピアソンの積率相関係数は大きくなりやすい。極端な場合は,わずか1個の極端な値のために相関係数が1に極めて近い値になる事もある)。

以下の例は y2 = y^3 / 1e4 としたものですが,曲線相関と直線相関の違いについての例示です。大小関係を測定するスピアマンの順位相関係数は両者で全く同じになりますが,直線相関を求めるピアソンの積率相関係数はちいさくなります。つまり,曲線相関の場合は,ピアソンの積率相関係数はスピアマンの順位相関係数より小さな値になります。

まあ,両者を計算して,どちらも有意な相関係数という結果になったのなら,どちらでもよいでしょうが,それぞれの相関係数が何を測定しているのかは理解して置いた方がよいでしょう。つまり,あなたは,二変数の相関関係において,曲線相関を想定したのか,直線相関を想定したのかという根本的な前提意識があったのかどうかということです。これは,重要なことですよ。二変数の間の因果関係に関連することですから。モデルの違いですよね。単に,二つの変数が正規分布するかどうかなんてことではないです。相関関係は二つの変数がどんな分布に従うかどうかなんてあまり重要なことではないです。


Re: 相関係数につきまして
  投稿者:アメリ― 2020/11/19(Thu) 12:41 No. 22988 HomePage
青木先生

お返事、どうもありがとうございました。
とっても勉強になりました。

実際の所、先生のお示しくださった右側の図のようなF分布が1つと、ほぼ富士山型の分布のデータが1つで、その相関をみたいと思いました。

ただ、1〜6まで、6が最強と考え、スピアマンの順位相関係数を算出したところ、rs=0.12となり、ほぼ相関なしとなりました。

ただ、1〜6までの数値データと、2カテゴリー(良い・悪い)にしたχ2検定では、有意さが見られ、検定はどれを表示すべきか、混乱しており、ご教授いただけませんでしょうか?

厚かましいお願いで大変申し訳ございません。お手数をお掛け致しますが、どうぞよろしくお願い致します。

ここまで書いて気が付いたのですが、F分布と富士山では、相関なしで当たり前ですよね。。。バカみたいな質問で、大変申し訳ございません。


ロジスティック回帰の結果の読み方につきまして
  投稿者:アメリ― 2020/10/07(Wed) 14:57 No. 22965 HomePage
お世話になります。

ロジスティック回帰の結果の読み方を勉強しています。

SPSSの結果を説明したサイトの、オッズ比の説明の中に、

1よりも大きいほど、または小さいほど、影響力が強いです という説明があり、例として
年齢はオッズ比0.964(CI:0.932-0.997)、性別は2.799(CI: 1.048-7.477)ですから、年齢の方が影響力をもちます とありました。

数値だけみると、性別の方が影響力は強いのではないでしょうか?

お忙しい中、大変申し訳ないのですが、きちんと理解したいので、教えていただければ幸いです。どうぞよろしくお願い致します。

Re: ロジスティック回帰の結果の読み方につきまして
  投稿者:青木繁伸 2020/10/07(Wed) 16:24 No. 22966 HomePage
「SPSSの結果を説明したサイト」というのは
SPSSでロジスティック回帰分析
ですね。

他のサイトも見るとよいでしょう。たとえば,

ロジスティック回帰
ロジスティック回帰(1/4)
ロジスティック回帰(2/4)
ロジスティック回帰(3/4)
ロジスティック回帰(4/4)


Re: ロジスティック回帰の結果の読み方につきまして
  投稿者:アメリ― 2020/10/08(Thu) 16:36 No. 22967 HomePage
青木先生

お返事とリンクをどうもありがとうございました。
勉強させていただきます。

Re: ロジスティック回帰の結果の読み方につきまして
  投稿者:アメリ― 2020/10/30(Fri) 11:40 No. 22978 HomePage
青木先生

リンクをどうもありがとうございました。
勉強してみたのですが、いまいち、よくわかりません。

青木先生のサイト2ページ目には、「オッズ比が1を下回ることがあります。例えば、説明変数にウォーキング有無があり、オッズ比が0.8だとします。「不健康」になるオッズ比は0.8ですので、逆数(1÷0.8=1.25)を計算し、ウォーキングの「健康」になるオッズ比は1.25という解釈もできます。」とありました。

そこで、例題のオッズを計算すると、

1/0.964=1.037 でした。

私が最初に疑問をもったサイトには、「年齢はオッズ比0.964(CI:0.932-0.997)、性別は2.799(CI: 1.048-7.477)ですから、年齢の方が影響力をもちます」とありました。

やはり数値だけみると、性別(2.799)の方が年齢(1.037)より、影響力は強いのではないでしょうか?

青木先生のサイトの3ページには、「オッズ比は説明変数の目的変数への影響度を調べる尺度です。値が大きいほど影響度が高い項目といえます。」

と、ありました。

もし、論文に書くなら、
「性別(2.799)の方が年齢(1.037)より、影響力は強い」と書いては、間違いのようですが、理由がわかりません。

お忙しい中、大変申し訳ないのですが、腑に落ちないので、教えていただけますでしょうか?
お手数をお掛け致しますが、どうぞよろしくお願い致します。

Re: ロジスティック回帰の結果の読み方につきまして
  投稿者:aoki 2020/10/30(Fri) 16:23 No. 22979
> 青木先生のサイト2ページ目には、「オッズ比が1を下回ることがあります。

以下のページは,私のページではないですよ。
> ロジスティック回帰(1/4)
> ロジスティック回帰(2/4)
> ロジスティック回帰(3/4)
> ロジスティック回帰(4/4)

結局の所,あなたが最初に見た
> 「SPSSの結果を説明したサイト」というのは
> SPSSでロジスティック回帰分析

が,単に間違えているだけ。ということです。

私が参考に挙げたページの他にも参照すれば,あなたの理解が正しいのだと確信できるでしょう,というつもりでしたけど

Re: ロジスティック回帰の結果の読み方につきまして
  投稿者:アメリ― 2020/10/30(Fri) 16:44 No. 22980 HomePage
青木先生

大変申し訳ありません。
そうだったのですね。
サイトの情報を信じてしまい、余計混乱してしまいました。
どうもありがとうございました。
以後、気を付けます。
どうもありがとうございました。


3時点のデータで、時点間の変化量を比較する方法
  投稿者:徒弟 2020/10/22(Thu) 18:27 No. 22973
お世話になっております。掲題の件で相談させてください。

各サンプルに対して、t1→ t2→ t3の3時点分、ある値を測定しました。
その測定値は連続値で正規分布に従うとします。

この際、t2-t1, t3-t2の値に差があるかを検定したいと考えております。

このような検定を行いたいなら、
(t3-t2)-(t2-t1)を計算して、1標本t検定するというアプローチで良いでしょうか?

このアプローチについてご意見いただければ幸いです。

Re: 3時点のデータで、時点間の変化量を比較する方法
  投稿者:橋本誠 2020/10/23(Fri) 08:10 No. 22974
毎朝この掲示板でちょこっとずつ勉強させていただいているド素人がいうのも何ですが、
検定の多重性の問題があるのではないでしょうか。

Re: 3時点のデータで、時点間の変化量を比較する方法
  投稿者:徒弟 2020/10/23(Fri) 13:29 No. 22975
ご意見ありがとうございます。

(t3-t2)-(t2-t1)で計算した指標一つしか検定しないので、
多重性自体は発生しないと考えます

Re: 3時点のデータで、時点間の変化量を比較する方法
  投稿者:橋本誠 2020/10/23(Fri) 15:10 No. 22976
失礼しました。対応ありのT検定一回ですね。
レベルの低い書き込み、ご容赦ください。


【R】apply()関数の使い方
  投稿者:明石 2020/10/14(Wed) 09:52 No. 22968
青木先生 様;

お忙しいところを失礼いたします、明石と申します。
毎々、ご丁寧なご教示をいただき、誠にありがとうございます。
改めて御礼を申し上げます。
ありがとうございます。

apply()関数をつかった降順ソートについて、ご教示をいただきたいと思います。
何卒どうぞよろしくお願いいたします。

---------------------------------

簡単な例題でお示しをします。

5行3列の行例を作成します。
カラムのラベルは、月の名称をお借りしました。

v <- sample(1:15)
mat <- matrix(v, nc=3)
colnames(mat) <- month.name[1:3]

> mat
January February March
[1,] 13 10 8
[2,] 12 11 14
[3,] 2 1 6
[4,] 4 3 15
[5,] 7 5 9

やりたいことは、
各行について、値を降順ソートして、
値そのものではなく、そのカラムのラベルで表示したいと思います。

出来上がりイメージは、以下です。

> mat2
第1位 第2位 第3位
[1,] "January" "February" "March"
[2,] "March" "January" "February"
[3,] "March" "January" "February"
[4,] "March" "January" "February"
[5,] "March" "January" "February"

まずは、ループを回すプログラムを作成しました。

label <- colnames(mat)
loop <- 1:nrow(mat)

mat2 <- mat
for(i in loop) {
v <- mat[i,]
mat2[i,] <- label[order(v, decreasing=TRUE)]
}

colnames(mat2) <- paste("第", 1:ncol(mat), "位", sep="")
mat2

apply()関数を使ってやりたいと思い、以下を作成しました。

mat2 <- apply(mat, 1, function(x) label[order(x, decreasing=TRUE)])
結果は、所望するものとはまったく違います。

> mat2
[,1] [,2] [,3] [,4] [,5]
[1,] "January" "March" "March" "March" "March"
[2,] "February" "January" "January" "January" "January"
[3,] "March" "February" "February" "February" "February"

私には、理解できないで困っております。
ご教示をいただければ大変に助かります。
お手数をおかけいたします。
//

Re: 【R】apply()関数の使い方
  投稿者:aoki 2020/10/14(Wed) 23:02 No. 22969
apply() で返されるものが何なのかを確認してください
> apply(mat, 1, function(x) order(x, decreasing=TRUE))
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 3 3 3
[2,] 2 1 1 1 1
[3,] 3 2 2 2 2
なので,求めるものを得るためには,
> label[apply(mat, 1, function(x) order(x, decreasing=TRUE))]
[1] "January" "February" "March"
[4] "March" "January" "February"
[7] "March" "January" "February"
[10] "March" "January" "February"
[13] "March" "January" "February"
としなければならないのです。
または,
> mat2 <- t(apply(mat, 1, function(x) label[order(x, decreasing=TRUE)]))
> mat2
[,1] [,2] [,3]
[1,] "January" "February" "March"
[2,] "March" "January" "February"
[3,] "March" "January" "February"
[4,] "March" "January" "February"
[5,] "March" "January" "February"
でもよいです。

御礼(Re:【R】apply()関数の使い方)
  投稿者:明石 2020/10/15(Thu) 08:07 No. 22970
青木先生 様;

お忙しいところを失礼いたします、明石と申します。
有り難いご教示をいただき、心から、心より感謝申し上げます。
ご丁寧にご説明をしてくださいましたので、よく理解できました。
誠にありがとうございました。
誠にありがとうございました。
//


正規分しない連続変数の反復測定
  投稿者:MoMo 2020/09/05(Sat) 13:36 No. 22955
いつもお世話になっております。
One-way repeated measures ANOVAに対応する非正規分布連続変数の解析はFriedman検定かと思います。Two-way repeated measures ANOVAに対応するそれは現在のところ存在しないと聞きました。これが本当ならば、この解析はどのようにすればよいでしょうか?
非正規分布する連続変数を同一被検者において3回測定し、3群の被検者のグループ間でこれらが同一である、という帰無仮説を否定しようとしています。
ご教授いただければ幸いです。

Re: 正規分しない連続変数の反復測定
  投稿者:鈴木康弘 2020/09/10(Thu) 16:29 No. 22957
 誰も答えないところを見ると、やはりANOVAでやるしかないのでしょう。
ANOVAは正規性の仮定については頑健だとされるので。


共分散分析について
  投稿者:小嶋 2020/08/17(Mon) 21:56 No. 22941
統計初心者で、初めて質問させていただきます。
教育現場で働きながら、実践研究をしております。

ある学習方法を1年間実施するAクラス(実験群)と実施しないB,Cクラス(統制群)があります。
事前(4月)と事後(翌年の3月)に同様のテストを実施し、事前から事後にかけてのテストの点数の伸び具合を比較して当該学習方法が有効かどうかを確かめたいと思っています。

このような場合、共分散分析を実施するかと思うのですが、調べた限りですが、2クラス(実験群1クラスと統制群1クラス)の比較の仕方の例しか見出せませんでした。
そのため、 AクラスとBクラス、AクラスとCクラスでそれぞれ共分散分析を実施し、両方の共分散分析で、Aクラスの方が事前から事後にかけて有意にテストの点数が伸びていることが確認できれば、当該学習方法は有効であると考えていいでしょうか?
それとも、他の良いやり方があるのでしょうか?
ご教示いただければ幸いです。
よろしくお願いいたします。

Re: 共分散分析について
  投稿者:鈴木康弘 2020/09/11(Fri) 17:07 No. 22958
 そのやり方でもいいと思いますが、B,Cクラスを最初からひとまとめにするわけにはいかないんですか?

Re: 共分散分析について
  投稿者:小嶋 2020/09/11(Fri) 22:47 No. 22959
鈴木先生
お答えいただきありがとうございます。
では、 B,Cクラスをひとまとめにして共分散分析をします。

当該の共分散分析について追加で教えていただきたいことがあります。
事前のテストを共変量とする共分散分析を実施した際、クラス(固定因子)-事前のテスト(共変量)の交互作用が有意になった場合、共分散分析を実施するのが適切でないことは分かったのですが、この後、どのようにすれば比較ができるのかを詳しく教えていただければと思います。
よろしくお願いします。

Re: 共分散分析について
  投稿者:鈴木康弘 2020/09/13(Sun) 09:52 No. 22960
クラスやテストの時期を0、1の変数にして重回帰分析にしては。

Re: 共分散分析について
  投稿者:小嶋 2020/09/14(Mon) 06:25 No. 22961
鈴木先生
ありがとうございます。
重回帰分析について調べてやってみます。
重回帰分析について分からないことが出てきましたら、また質問させていただきます。
よろしくお願いします。
重回帰分析について学ぶ上で、初心者にも分かりやすく、私のやろうとしていることの例が示されているようなおすすめの書籍がありましたら、紹介いただけると幸いです。


手元のデータの正規分布,理論的な正規分布?
  投稿者:コロン 2020/09/01(Tue) 13:44 No. 22942
お世話になります。

私の記憶違いであれば大変申し訳ございませんが,以前,この掲示版で,青木先生が標題のようなことを書かれていたのではないかと記憶しております。つまり,「手元のデータが正規分布するかではなく,そのデータが理論的に正規分布しているかどうかが大事」といった内容です。

過去ログを検索しておりますが,ヒットしませんので,私の勘違いなのかなと思っておりますが,失礼を承知で,お尋ねさせていただきました。

もし記憶違いでなければ,その過去ログがどれかを教えていただけますと幸いに存じます。

私の勘違いで,青木先生にご迷惑をおかけするようでしたら,この内容を削除いただいて構いません。

失礼いたします。

Re: 手元のデータの正規分布,理論的な正規分布?
  投稿者:鈴木康弘 2020/09/04(Fri) 15:35 No. 22954
 データの正規性の検定をしても、「正規分布に従わない」か「正規分布に従わないとはいえない」としか言えず、「正規分布に従う」とは言えない。だから理論的に正規分布に従うと証明した方がいい、という意味ではないでしょうか。
 どの発言か、ずばり示せなくて、ごめんなさい。

Re: 手元のデータの正規分布,理論的な正規分布?
  投稿者:コロン 2020/09/06(Sun) 10:37 No. 22956
鈴木先生

掲示版を見ておらず,お礼のお返事が今になりましたこと申し訳ございません。

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


青木先生の主座標分析plot関数について(2)
  投稿者:明石 2020/09/03(Thu) 13:17 No. 22951
青木先生 様;

お忙しいところを失礼いたします、明石と申します。
昨日は、ラベル付き散布図について、有り難いご教示をいただきました。
誠にありがとうございました。

追加の質問がございます。
何卒どうぞよろしくお願いします。

---------------------------------

http://aoki2.si.gunma-u.ac.jp/R/princo.html

irisデータで、plotメソッドのグラフ表示の説明がされています。

> a <- similarity.matrix(iris[1:4]) # 類似度行列を作る
> b <- princo(a)
> plot(b, labels=TRUE, col=(1:3)[as.integer(iris[,5])])

3行目について、ご質問です・

col=as.integer(iris[,5])でも良いように思えますが、
col=(1:3)[as.integer(iris[,5])]と書かれている理由についてご教示いただければ
大変に勉強になります。

お手数をおかけいたします。
どうぞよろしくお願いいたします。
//

Re: 青木先生の主座標分析plot関数について(2)
  投稿者:青木繁伸 2020/09/03(Thu) 16:59 No. 22952 HomePage
col=(1:3)[as.integer(iris[,5]) は冗長ですが,色を1:3 ではないものにしたいとき,
col=c(1, 2, 4)[as.integer(iris[,5]) や,もっとわかりやすく
col=c('black', 'blue', 'brown')[as.integer(iris[,5])] などと出来ますという例のつもりだったようです。

御礼(Re: 青木先生の主座標分析plot関数について(2))
  投稿者:明石 2020/09/03(Thu) 17:46 No. 22953
青木先生 様;

お忙しいところを失礼いたします、明石と申します。
大変に勉強になりました。

さっそく活用させていただきます。

勇気を振り絞って、お聞きしてよかったです。
ありがとうございました。
//


Re:Re:Re: Welchテストについて
  投稿者:yamada 2020/08/11(Tue) 17:23 No. 22937 HomePage
>「x と y のデータ」って,変数ではなく,群だったわけですね。

>さて,傾きの変化点の検出ですが,
>二本の直線による折れ線回帰
http://aoki2.si.gunma-u.ac.jp/R/oresen.html
>などはいかがでしょうか?

また、こちらは優位性検定なのでしょうか?
二本の直線の傾き優位に差があるかどうかはどうやって判定したらよいのでしょうか?

よろしくお願いいたします。

Re:Re:Re: Welchテストについて
  投稿者:青木繁伸 2020/08/12(Wed) 21:54 No. 22938 HomePage
共分散分析
http://aoki2.si.gunma-u.ac.jp/R/covar-test.html

Re:Re:Re: Welchテストについて
  投稿者:yamada 2020/09/01(Tue) 17:28 No. 22943 HomePage
ご回答ありがとうございます

更に、質問です。

各群(x,y)の境界が曖昧でわかっていないという状況で、
求めたいのは、回帰係数が異なるx1の点なのですが、
このような場合、
境界値x1で x<x1 と x>=x1 とデータを2つに分けて群1と群2として
から共分散分析を用いて、2つ群の回帰係数が有意に異なる
x1の値を求める、という方法でもいいのでしょうか?

Re:Re:Re: Welchテストについて
  投稿者:青木繁伸 2020/09/03(Thu) 11:41 No. 22950 HomePage
仕方ないと思います


青木先生の主座標分析plot関数について
  投稿者:明石 2020/09/01(Tue) 18:46 No. 22944
青木先生 様;

お忙しいところを失礼いたします、明石と申します。
毎々、ご丁寧なご教示をいただき、誠にありがとうございます。
改めて御礼を申し上げます。
ありがとうございます。

青木先生にご教示いただきたいことがございます。
何卒どうぞよろしくお願いいたします。

---------------------------------

点とラベルが重ならないような、ラベル付き散布図を作成したいと思います。

Google先生にお聞きしたら、
library(maptools)を教えていただきましたが、
私の引数の与え方が悪いのか、画像サイズを大きくすると、点とラベルが離れてしまいます。

http://aoki2.si.gunma-u.ac.jp/R/princo.html

青木先生の主座標分析を拝借していますが、
主座標分析のplot関数が、とてもいい感じです。

offset=.2 で、
点とラベルが重ならないような工夫をされていると理解してよろしいでしょうか?

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

Re: 青木先生の主座標分析plot関数について
  投稿者:青木繁伸 2020/09/02(Wed) 09:03 No. 22945 HomePage
> 私の引数の与え方が悪いのか、画像サイズを大きくすると、点とラベルが離れてしまいます。

どのようなプログラムですか?

offset は,when pos is specified, this value controls the distance (‘offset’) of the text label from the specified coordinate in fractions of a character width.ということで,使う文字幅の倍数でセットしています。

Re: 青木先生の主座標分析plot関数について
  投稿者:明石 2020/09/02(Wed) 13:45 No. 22946
青木先生 様;

お忙しいところを失礼いたします、明石と申します。
ご丁寧なご教示をいただき、誠にありがとうございます。

私が作成したRプログラムをお示しします、

データフレーム dfに、散布図の座標がセットしてあります。

library(maptools)

x1 <- min(df$x)
x2 <- max(df$x)
y1 <- min(df$y)
y2 <- max(df$y)

plot(df$x, df$y, xlab="層別の平均値", ylab="層別の標準偏差", main=title)

pointLabel(df$x, df$y, xlim=c(x1,x2), ylim=c(y1,y2) , labels=設問, method="SANN", offset = 0, cex=1 )

pointLabel()関数は、パッケージmaptoolsの関数です。

引数を、試行錯誤的にやっている状況です。

画像サイズが小さいときには、気になりませんが、
画像サイズを大きくすると、点とラベルが大きく離れてしまい、気になります。
気になる年頃です。

ご教示をいただき、誠にありがとうございました。
御礼を申し上げます。
//

Re: 青木先生の主座標分析plot関数について
  投稿者:青木繁伸 2020/09/02(Wed) 16:54 No. 22947 HomePage
offset は,when pos is specified, と書かれているように,pos も同時に指定しないといけないようですね。
pointLabel(df$x, df$y, xlim=c(x1,x2), ylim=c(y1,y2) , labels=設問, method="SANN", offset = 0, pos=4, cex=1 )
のようにしてみてはいかがでしょう?

Very Special Thanks!!(Re: 青木先生の主座標分析plot関数について)
  投稿者:明石 2020/09/02(Wed) 18:51 No. 22948
青木先生 様;

お忙しいところを失礼いたします、明石と申します。
ご丁寧なご教示をいただき、誠にありがとうございます。

さっそく試してみます。

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

Re: 青木先生の主座標分析plot関数について
  投稿者:明石 2020/09/03(Thu) 09:27 No. 22949
青木先生 様;

お忙しいところを失礼いたします、明石と申します。
ご丁寧なご教示をいただき、誠にありがとうございます。

ラベル付き散布図は、色々と実験して、
maptoolsパッケージの利用は止めて、
青木先生のplotプログラムを拝借させていただくことにしました。
ありがたく使わせていただきます。

何か困ったことがあると、Google先生にお聞きして、
ヒットしたページに掲載されているプログラムをコピペして利用することが多いのですが、
マニュアルをしっかりと読むことの重要性を痛感する良い機会ともなりました。

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


数量化III類の寄与率とその意味
  投稿者:tree 2020/08/11(Tue) 14:37 No. 22935
青木先生のお書きになったqt3関数を用いて、サンプルの2次元の布置をしてみようと考えております。
http://aoki2.si.gunma-u.ac.jp/R/qt3.html

先生のソースの中には寄与率に関する出力がないように拝読しましたが、算出に際しては以下のような処理でよろしいでしょうか。
result_qt3 <- qt3(data)
result_qt3$Eigen.value/sum(result_qt3$Eigen.value) #これが寄与率?

今のところ2次元の布置を考えておりますが、累積寄与率が12.6%でした。この値が高いとか低いとかいう基準があるのでしょうか。それとも投入するデータのサンプルサイズ・カテゴリ数と関連する問題であって、一概には言えないのでしょうか。

Re: 数量化III類の寄与率とその意味
  投稿者:青木繁伸 2020/08/12(Wed) 21:56 No. 22939 HomePage
> esult_qt3$Eigen.value/sum(result_qt3$Eigen.value) #これが寄与率?

それでよいはずですが。

寄与率の基準はないでしょう。
だらだらと下がりますので,スクリープロットが有効な主成分分析の寄与率とはかなり感覚的に違いがあると思います。

Re: 数量化III類の寄与率とその意味
  投稿者:tree 2020/08/13(Thu) 09:07 No. 22940
青木先生

コメントいただけて大変光栄です。ありがとうございました。
先行研究では「累積寄与率は〜%であった。」と述べているだけのものがいくつかあって、だったら何なんだ?というのがわからずにおりました。

例にならって?そのように記載しておこうと思います。


Re:Re:Re: Welchテストについて
  投稿者:yamada 2020/08/11(Tue) 17:19 No. 22936 HomePage
青木先生

ご返答ありがとうございます。

>「x と y のデータ」って,変数ではなく,群だったわけですね。

>さて,傾きの変化点の検出ですが,
>二本の直線による折れ線回帰
http://aoki2.si.gunma-u.ac.jp/R/oresen.html
>などはいかがでしょうか?

二本の直線による折れ線回帰というのは初めて聞きました
教えていただきありがとうございます。

二本の直線による折れ線回帰の原理の方がわからないので勉強したいのですが
こちらの理論の解説が載っているわかりやすい
サイトとか知っていましたら教えていただけますでしょうか?

よろしくお願いいたします。

山田


Re:Re: Welchテストについて
  投稿者:yamada 2020/08/04(Tue) 16:35 No. 22933 HomePage
青木さま

ご回答ありがとうございます。
説明が分かりにくくて申し訳ありません。

>> xとyのデータに対して,Δyのbinで区切ってxの平均値の差をWelchテスト

>というのが,実際にどのように行われたかよくわかりません。
>x, y のそれぞれのデータをΔy でカテゴリー化を行って,カテゴリー化された x, y の平
>均値の差の検定を行ったと言いうことですか?なぜカテゴリー化したのか?また,Welch の
>検定は,独立二標本の平均値の差の検定ですが,x, y は独立二標本なのですか?

カテゴリー化などは行っていません。
y1 (x1,x2,x3,..) y2(z1,z2,z3,,,)は同じ母集団に属していないとしています。

>単に「,鉢△琉磴い廊,諒は分散が大きくなるためという理由」かどうかならば,分散
>の大きさを見てみればよいでしょう。ウエルチの t の分母を見てみればよいでしょう。

ご指摘通り、分散が大きいためでした。

>> yの勾配の変化を検出

>>というのもよくわかりません。x のある値前後で y の回帰直線の傾きが変化するかどう
>>かということですか?

例えば、ある(x,y)データが x<c で傾き a1 : y=a1x+b1 だったものが、
x>=c で 傾き a2 : y=a2x+b2 に変化する場合、その傾きの変化 ( a1 => a2) を検出するにはどうすればいいのでしょうか、という質問です。
意図が分かりにくくて申し訳ありません。

よろしくお願いいたします。

Re:Re: Welchテストについて
  投稿者:青木繁伸 2020/08/05(Wed) 10:15 No. 22934 HomePage
「x と y のデータ」って,変数ではなく,群だったわけですね。

さて,傾きの変化点の検出ですが,
二本の直線による折れ線回帰
http://aoki2.si.gunma-u.ac.jp/R/oresen.html
などはいかがでしょうか?


Welchテストについて
  投稿者:yamada 2020/07/28(Tue) 18:07 No. 22931 HomePage
はじめまして、青木先生

宇宙物理の研究をしております。
質問させていただきたく、コメントをいたします。
1)Welchテストを使ってデータを分析し論文を作成しているのですが、
xとyのデータに対して,Δyのbinで区切ってxの平均値の差をWelchテストで評価したところ、xとyにlinearな関係がある場合は、xの平均値の差は2σを越えず、linearな 関係がない場合は、xの平均値の差は2σを越えるという結果になります。,鉢△琉磴い廊,諒は分散が大きくなるためという理由でよいのでしょうか?

2)(x,y)データを2次元plotしたとき、yの勾配の変化を検出するにはどのような検定を使ったらよいのでしょうか?

以上、よろしくお願いいたします。

Re: Welchテストについて
  投稿者:青木繁伸 2020/07/29(Wed) 10:13 No. 22932 HomePage
> xとyのデータに対して,Δyのbinで区切ってxの平均値の差をWelchテスト

というのが,実際にどのように行われたかよくわかりません。
x, y のそれぞれのデータをΔy でカテゴリー化を行って,カテゴリー化された x, y の平均値の差の検定を行ったと言いうことですか?なぜカテゴリー化したのか?また,Welch の検定は,独立二標本の平均値の差の検定ですが,x, y は独立二標本なのですか?

単に「,鉢△琉磴い廊,諒は分散が大きくなるためという理由」かどうかならば,分散の大きさを見てみればよいでしょう。ウエルチの t の分母を見てみればよいでしょう。

> yの勾配の変化を検出

というのもよくわかりません。x のある値前後で y の回帰直線の傾きが変化するかどうかということですか?

実際のデータを出すのは難しいでしょうが,データの一部を取り出して同じような結果になるように少し値を変えて,データとその分析プログラム(R スクリプト)を見せてもらうと理解が早まると思います。


検定における同地点から採取した2試料データの扱いについて
  投稿者:ゆき 2020/07/08(Wed) 11:07 No. 22925
青木先生

初めて質問させていただきます。分析・開発関係に従事しております。
処理方法が異なる2区画(A,Bとします)の土壌について、数か月ごとに区画内の異なる地点から試料を採取し微生物や化学分析を実施しました。試料は採取した土壌コアからN=2で採取しています。
区画A,区画Bで微生物数や化学成分濃度に差ががあるかt検定による評価を考えているのですが、同一コアから採取したN=2試料のデータの取り扱いについて以下のどちらが適切かご教授いただけないでしょうか。
各試料N=2のデータを検定に用いる(データ数:試料数×2)
各試料のデータとしてN=2の平均値を用いる(データ数=試料数)

お忙しいところ恐縮ですが、ご回答よろしくお願い申し上げます。

Re: 検定における同地点から採取した2試料データの扱いについて
  投稿者:青木繁伸 2020/07/09(Thu) 10:42 No. 22926 HomePage
各水準の繰返し数が等しく,2 以上である場合
http://aoki2.si.gunma-u.ac.jp/lecture/TwoWayANOVA/TwoWay2.html

でしょうかね?区画と採取時点が2要因,繰り返しが2。

Re: 検定における同地点から採取した2試料データの扱いについて
  投稿者:ゆき 2020/07/09(Thu) 12:58 No. 22927
返信いただき、ありがとうございます。

度々の質問で申し訳ないのですが、試験期間中の各分析値(分析値の変動)について区画A,Bで差があるかどうかを評価する場合も2要因,繰り返しが2の二元配置分散分析を実施し、区画要素に関する結果を見るのが適切なのでしょうか。
それとも各試料N=2のデータをそれぞれ区画Aのデータ、区画Bのデータとして
2群間の比較をしても良いのでしょうか。
お忙しいところ恐縮ですが、よろしくお願い申し上げます。

Re: 検定における同地点から採取した2試料データの扱いについて
  投稿者:青木繁伸 2020/07/09(Thu) 18:18 No. 22928 HomePage
> 各試料N=2のデータをそれぞれ区画Aのデータ、区画Bのデータとして
> 2群間の比較をしても良いのでしょうか。

逆にお伺いしますが,
(1) n = 2 で検定して,検出力が十分と思いますか?
(2) 「数か月ごとに」データを何回もとったということですね。では,そのような検定をデータ採取時点ごとに何回も繰り返すということですか?

Re: 検定における同地点から採取した2試料データの扱いについて
  投稿者:ゆき 2020/07/10(Fri) 11:22 No. 22929
お忙しいところ恐れ入ります。
わかりにくい説明で申し訳ありません。
採取時期の要素は無視して区画のみについて比較をするために、試験期間中の各区画の全データを用いた区画A,区画Bの二群間の検定です。
異なる地点から月ごとに採取したデータを用いて、地点間で分析値に差があるか、t検定を用いて評価している例があったので、質問させていただきました。

Re: 検定における同地点から採取した2試料データの扱いについて
  投稿者:青木繁伸 2020/07/10(Fri) 13:52 No. 22930 HomePage
例えば,7回のデータ採取があり,各回とも区画A,区画Bでそれぞれ2個のデータを取ったということで,区画A,区画Bごとにまとめた14個ずつのデータで t 検定をするということですか。
採取時期 区画A    区画B
1 (11, 13) (16, 17)
2 (12, 13) (15, 18)
3 (18, 15) (18, 19)
4 (10, 12) (19, 21)
5 (11, 19) (18, 22)
6 (19, 10) (20, 24)
7 (11, 11) (22, 23)

> a = c(11, 13, 12, 13, 18, 15, 10, 12, 11, 19, 19, 10, 11, 11)
> b = c(16, 17, 15, 18, 18, 19, 19, 21, 18, 22, 20, 24, 22, 23)
> t.test(a, b)

Welch Two Sample t-test

data: a and b
t = -5.5305, df = 25.123, p-value = 9.353e-06
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-8.527883 -3.900688
sample estimates:
mean of x mean of y
13.21429 19.42857
データをプールするためには,採取時期,あるいは採取時期にともなう他の要因がデータの大小に無関係であることを示さないといけないでしょうね。上の架空例では区画Bのデータは時間につれて大きくなっています。


【R】表の突合せ、charactermatch()関数の使い方
  投稿者:明石 2020/06/14(Sun) 11:09 No. 22919
青木先生 様;

お忙しいところを失礼いたします、明石と申します。
毎々、ご丁寧なご教示をいただき、誠にありがとうございます。
改めて御礼を申し上げます。
ありがとうございます。

青木先生にご教示いただきたいことがございます。
何卒どうぞよろしくお願いいたします。

---------------------------------

添付の画像ファイルをご覧ください。

3つの表があります。

表1 状態遷移表
   状態遷移を表すラベル(文字列)の、長大な文字列ベクトル
   ラベルは重複出現する
   表1のラベルの種類を集約したものが、表2のラベル

表2 辞書
   ラベルの種類〜特徴ベクトル
   表2のラベルは、表1に出現するラベルの種類を集約したもの
   特徴ベクトルは、約200次元の数値ベクトル

表3 表1と表2を突き合わせた、所望する表

表1と表2を突き合わせて、
表1のラベルの横に、対応する特徴ベクトルを、表2から転記して、
表3を得たいと思います。

表1をループを回しながら、
表1のラベルに対応する、表2のラベルを見つけて、
その特徴ベクトルを、表1に転記すればよいのですが、
表1の文字列ベクトルは長大ですので、効率の良いRプログラムを知りたいと
思います。

charactermatch()関数により、
表1のラベルに対応する、表2のラベルのインデックスを得ることまでは、できました。

ご教示いただきたいたいのは、この先です。

得たインデックスを使うことで、効率の良いRプログラムが書けないか、
そこを知りたいと思います。

お手数をおかけいたします。
何卒どうぞよろしくお願いいたします。
失礼いたします。
//


Re: 【R】表の突合せ、charactermatch()関数の使い方
  投稿者:青木繁伸 2020/06/14(Sun) 14:34 No. 22920 HomePage
現時点での(効率がよいかどうかはともかく)プログラムはどのようになっていますか。

Re: 【R】表の突合せ、charactermatch()関数の使い方
  投稿者:明石 2020/06/14(Sun) 15:34 No. 22921
青木先生 様;

お忙しいところを失礼いたします、明石と申します

以下、私が作成しましたRプログラムをお示しします。

# 表1の読み込み
# 実際のデータは、以下のように、半角スペース区切りの文字列ベクトル
# s5 s7 s1 s5 s100 s1 s3 s5 s8 s1 ,,,,,,,
# ファイル名は、"BOW_input.txt"

BOW <- scan("BOW_input.txt", what = character(), sep = "\n", blank.lines.skip = F) ######
bow <- strsplit(BOW, " ")
bow <- unlist(bow)

# 表2の読み込み
# ファイル名は、Vectors_matrix

vec <- read.table("Vectors_matrix.csv", header=T , sep=",", na.strings=c("NA",""," "),stringsAsFactors=F, row=1)
vec <- as.matrix(vec)
label <- rownames(vec)

# 表3の(空)行列を作成する

nr <- length(bow)
nc <- ncol(vec)
mx <- matrix(0, nr=nr, nc=nc)

rownames(mx) <- bow
colnames(mx) <- colnames(vec)

# charmatch()関数で、インデックスを得る

jun <- charmatch(bow, label)

# ここが、ご教示願いたい箇所です。
# charamatch()関数で得られたインデックスは、このように利用しましたが、
# もっと良い書き方があるように思えてなりません。

for (i in seq_along(bow)) {
mx[i,] <- vec[jun[i],]
}

# 所望する、表3

mx <- as.data.frame(mx)

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

Re: 【R】表の突合せ、charactermatch()関数の使い方
  投稿者:青木繁伸 2020/06/14(Sun) 16:13 No. 22922 HomePage
jun を求めた後,以下のようにする
mx2 <- vec[jun,] # 空の行列を作る必要はない
rownames(mx2) <- bow # あとで as.data.frame すると,重複名は修正される
colnames(mx2) <- colnames(vec)
mx2 <- data.frame(mx2, check.rows=FALSE)

# check
all(mx == mx2)
as.data.frame で重複する行名は s5.1 などになる。それが不都合な場合は,ラベルを新たな列として作るとよいでしょう。

mx2 <- vec[jun,] が何をしているのか不思議かもしれませんが,
> ans <- c(1,2,1,1,2,2,1,2,1,1)
> x <- c("No", "Yes")
> x[ans]
[1] "No" "Yes" "No" "No" "Yes" "Yes" "No" "Yes"
[9] "No" "No"
と同じようなことをしているのです。

Re: 【R】表の突合せ、charactermatch()関数の使い方
  投稿者:明石 2020/06/14(Sun) 19:26 No. 22923
青木先生 様;

お忙しいところを失礼いたします、明石と申します。

ありがたいご教示をいただき、誠にありがとうございました。
御礼を申し上げます。

誠に恥ずかしいのですが、
にわかには理解できませんので、追試しながら、技を学びたいと思います。

青木先生にプログラムを見ていただく幸運に恵まれました。
ありがとうございました。
ありがとうございました。
//

Re: 【R】表の突合せ、charactermatch()関数の使い方
  投稿者:明石 2020/06/14(Sun) 19:35 No. 22924
青木先生 様;

お忙しいところを失礼いたします、明石と申します

私がまさに知りたかったのは、この1行です。
これが知りたかったのです。

求めたインデックスjunを利用して、1行で書ける方法が知りたかったのです。

> mx2 <- vec[jun,] が何をしているのか不思議かもしれませんが,
> ans <- c(1,2,1,1,2,2,1,2,1,1)
> x <- c("No", "Yes")
> x[ans]
> [1] "No" "Yes" "No" "No" "Yes" "Yes" "No" "Yes"
> [9] "No" "No"

知りたかったことを、ご教示いただき、
勇気を振り絞って、投稿させていただき、よかったなと思います。

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


回帰分析前の外れ値処理について
  投稿者:石田 2020/06/07(Sun) 14:54 No. 22916
自分からの距離と注視時間のように
時間と距離の間に明らかに相関性が見られるデータの回帰分析を行おうと考えています。

このような相関性のある2変量の場合、マハラノビス距離による外れ値処理が良いと思い、pythonで行わせようとしました。

距離は算出出来るのですが、外れ値とみなすしきい値は任意に決定してもよいのでしょうか?(例えばマハラノビス距離で四分位範囲を超えるものを外れ値とするなど)

高度な処理は理解と実装が追いつかず、シンプルな方法が有りましたらご教授頂けますと幸いです。

Re: 回帰分析前の外れ値処理について
  投稿者:青木繁伸 2020/06/07(Sun) 21:01 No. 22917 HomePage
所属確率が 95% とか
http://aoki2.si.gunma-u.ac.jp/R/mahalanobis.html

いずれにしても基準は絶対的なものではないので,何故その基準にしたのかが客観的に説明できればよいでしょう。

何通りか変えて分析してみて結果の妥当性を検討するとかもよいかな。

また,明らかに外れ値というのは除くとしても,ちょっとぐらい外れているのを除くのがいいかどうかという問題もあるとおもいます。

実際のデータに依存するので,一般論では論じきれないかもしれませんね。

Re: 回帰分析前の外れ値処理について
  投稿者:石田 2020/06/11(Thu) 00:16 No. 22918
青木先生

外れ値を含む可能性が高い、幾つかのデータセットを自動的に外れ値処理をするコードを書こうと思ったのですが統計的知識が不十分なので自分が決定したしきい値が統計的におかしなことをしていないか不安でした。
95%で妥当な結果が得られるか実験してみます。
ご教授ありがとうございました。


2項分布の発見者
  投稿者:統計の子猫 2020/05/09(Sat) 17:30 No. 22911
2項分布を初めて見つけた人と時代を探しております。色々と調べているのですが、見つけることが出来ず、ここでお聞きすることにしました。

ポアソン分布であれば、1838年にシメオン・ドニ・ポアソンが提案したということが分かっていますし、正規分布であれば、実はガウスよりも前にフランスの数学者ド・モアブルが見つけたと言われたりしています。
ド・モアブルは1730年代に、2項分布のnを大きくしていくと、2項分布の形が正規分布で近似できることを発見したと書いてあります。このことから、2項分布の発見は正規分布よりも古いだろうと予想しますが、誰がどのようにして2項分布を発見したり気付いたのかが書かれた文献などを見つけることが出来ません。
どなたか、2項分布の発見者または提案者が誰なのか、いつごろ発見されたのか、お教えいただけないでしょうか。また、2項分布の歴史が分かる文献なども教えていただけると助かります。
よろしくお願いいたします。

Re: 2項分布の発見者
  投稿者:青木繁伸 2020/05/09(Sat) 22:13 No. 22912 HomePage
ヤコブ・ベルヌーイ ?
Wikipedia の記事

Re: 2項分布の発見者
  投稿者:統計の子猫 2020/05/10(Sun) 09:36 No. 22913
青木先生、

コメント、有難うございます。ご紹介いただいた記事を読みました。
ベルヌーイが、ベルヌーイ試行をまとめた場合、つまり二項分布を考えなかったとは思えません。二項分布は、1713年頃にベルヌーイによって発見されたと言えそうです。
有難うございました。


【R】相関係数行列から距離行列への変換式
  投稿者:明石 2020/05/01(Fri) 13:44 No. 22906
青木先生 様;

お忙しいところを失礼いたします、明石と申します。
毎々、ご丁寧なご教示をいただき、誠にありがとうございます。
改めて御礼を申し上げます。
ありがとうございます。

掲示板において、たしか、
相関係数行列(類似度)から距離行列(非類似度)への変換式について、掲載されていた記憶があり、
ワード検索しながら、過去分も調べていますが、見つかりません。

Google先生にお聞きすると、
距離=2*(1-相関係数)
というサイトが見つかりますが、
掲示板で、青木先生からご説明のあった変換式とは異なる、という印象をもっています。

青木先生が掲示板でご紹介されていた、変換式を使いたいと思います。

相関係数行列(類似度)から距離行列(非類似度)への変換式について、
この記事No.だよ、と教えていただければ、大変に助かります。

毎々、お手数をおかけいたします。
//

Re: 【R】相関係数行列から距離行列への変換式
  投稿者:青木繁伸 2020/05/02(Sat) 21:49 No. 22909 HomePage
http://aoki2.si.gunma-u.ac.jp/lecture/misc/clustan.html
でしょうか?

相関係数行列から平方距離行列を求める場合について書いています(距離行列ではありません)。

> 変数のクラスター分析を行う場合には,変数 i と変数 j の相関係数を rij

> としたとき,2 変数間の距離が次式で表されることになるので,個体のクラスター分析と同じように取り扱うことができる。

d2ij=2 (1−rij),  (i,j=1,2,…,p)

御礼(Re: 【R】相関係数行列から距離行列への変換式)
  投稿者:明石 2020/05/03(Sun) 08:47 No. 22910
青木先生 様;

お忙しいところを失礼いたします、明石と申します。
毎々、ご丁寧なご教示をいただき、誠にありがとうございます。
改めて御礼を申し上げます。

今回も、助けていただきました。

ありがとうございます。
距離行列という、私の記憶違いでしたが、
私が、探していたのは、この記事です。

ありがとうございました。
お手数をおかけしてしまいました。
//


Rの出力について
  投稿者:もも 2020/05/01(Fri) 15:21 No. 22907
Rの出力方法について,基本的なことで恐縮ですが,ご教授いただけたら幸甚です。

a <- 1
b <- 3
c <- 0.5
min(a,b,c)

とすると,「0.5」と出力されますが,これを「c」と出力するにはどのようにすれば良いでしょうか。
数日間あれこれと調べてみましたが,どうしても分からず,質問させていただきました。
よろしくお願いします。

Re: Rの出力について
  投稿者:青木繁伸 2020/05/02(Sat) 21:25 No. 22908 HomePage
何をしたいのか本質がよく理解されないのですが。
min_value_name = function(a, b, c) {
par = c(deparse1(substitute(a)),
deparse1(substitute(b)),
deparse1(substitute(c)))
x = min(a,b,c)
print(par[which(x == c(a, b, c))])
}
のような関数を定義すると,
> a <- 1
> b <- 3
> c <- 0.5
> min_value_name(a, b, c)
[1] "c"
> x <- 2
> y <- 1
> z <- 5
> min_value_name(x, y, z)
[1] "y"
のような結果を得ることは出来ます,しかし
> min_value_name(3, 2, 1)
[1] "1"
のような使い方をすると,望む結果は得られません。

もし,引数の名前が必ず a, b, c であるなら,以下のような関数を定義することも出来ます。
f <- function(a, b, c) {
names = letters[1:3]
return(names[which(c(a, b, c) == min(c(a, b, c)))])
}
これだと,以下のような使用例になります
> f(1,2,3)
[1] "a"
> f(20, 10, 40)
[1] "b"
> f(100, 200, 10)
[1] "c"



【R】 apply系関数を使った、文字列の連結
  投稿者:明石 2020/04/29(Wed) 11:07 No. 22903
青木先生 様;

お忙しいところを失礼いたします、明石と申します。
毎々、ご丁寧なご教示をいただき、誠にありがとうございます。
改めて御礼を申し上げます。
ありがとうございます。

標題について、ご教示をいただけましたら、大変に助かります。
毎々、お手数をおかけいたします。
何卒、どうぞよろしくお願いいたします。

----------------------------------------

2本のベクトル x y があります。

x <- c("りんご", "みかん", "桃", "バナナ", "西瓜")
y <- c(0, 2, 0, 2, 1)

要素の個数は同じです。

ベクトル要素の番号どうしに、対応関係があります。

x の各文字列を、y の数値だけ繰り返して、連結した文字列を作成したいと思います。

イメージ的には、以下のようになります。

"りんご"*0, "みかん"*2, "桃"*0, "バナナ"*2, "西瓜"*1

結果として、以下の文字列ベクトルを得たいと思います。

"みかん" "みかん" "バナナ" "バナナ" "西瓜"

以下、コードを作成しました。

s <- NULL
for (i in seq_along(x)) {
v <- rep(x[i], y[i])
s <- c(s, v)
}

これを、apply系関数で書き直すとすれば、どのようになるのか、
ご教示をいただけましたら、大変に助かります。

毎々、お手数をおかけいたします。
何卒どうぞ、よろしくお願いします。
//

Re: 【R】 apply系関数を使った、文字列の連結
  投稿者:青木繁伸 2020/04/29(Wed) 21:14 No. 22904 HomePage
複数の引数を取れる mapply を使うと良いと思います。
unlist と unname を使う必要があります。
unname(unlist(mapply(function(a, b) rep(a, b), x, y)))

御礼(Re: 【R】 apply系関数を使った、文字列の連結)
  投稿者:明石 2020/04/30(Thu) 10:21 No. 22905
青木先生 様;

お忙しいところを失礼いたします、明石と申します。
毎々、ご丁寧なご教示をいただき、誠にありがとうございます。

今回も、新しい知識を教えてくださり、誠にありがとうございました。

mapply()関数の名前は聞いたことがありますが、 
自分が悩んでいた問題で、mapply()関数の使い方をご教示いただけましたので、
よく理解できました。

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


【R】リストからデータフレームへの変換(その2)
  投稿者:明石 2020/04/27(Mon) 17:26 No. 22900
青木先生 様;

お忙しいところを失礼いたします、明石と申します。
毎々、ご丁寧なご教示をいただき、誠にありがとうございます。

先にご教示いただきました、 No. 22896 【R】リストからデータフレームへの変換
について、
追加のご教示をいただけましたら、大変に助かります。

毎々、お手数をおかけいたします。
何卒、どうぞよろしくお願いいたします。

----------------------------------------

以下の例題について、
apply系関数を使う、リストからデータフレームへの変換方法を、
ご教示をいただけましたら、大変に助かります。

s <- c("りんご_apple_林檎", "みかん_orange_蜜柑", "バナナ_banana", "メロン_melon")
s <- strsplit(s, "_")

リストに格納された4本のベクトルの要素の個数は、異なります。

> s[[1]]
[1] "りんご" "apple" "林檎"
> s[[2]]
[1] "みかん" "orange" "蜜柑"
> s[[3]]
[1] "バナナ" "banana"
> s[[4]]
[1] "メロン" "melon"

やりたいことを、以下にお示しをします。

> s[[1]][1]
[1] "りんご"
> s[[2]][1]
[1] "みかん"
> s[[3]][1]
[1] "バナナ"
> s[[4]][1]
[1] "メロン"
のように、s[[*]][1]のベクトル要素だけを集めて、ベクトルに格納する。

同様に、
s[[*]][2]のベクトル要素だけを集めて、ベクトルに格納する。
s[[*]][3]のベクトル要素だけを集めて、ベクトルに格納する。

以下のような3本のベクトルを得ることができましたら、データフレームを作成できます。
> x1
[1] "りんご" "みかん" "バナナ" "メロン"
> x2
[1] "apple" "orange" "banana" "melon"
> x3
[1] "林檎" "蜜柑" NA NA

s[[*]][1]のベクトル要素だけを集めて、ベクトルに格納する。
s[[*]][2]のベクトル要素だけを集めて、ベクトルに格納する。
s[[*]][3]のベクトル要素だけを集めて、ベクトルに格納する。
の操作で、もし、apply系関数が利用できるならば、
その方法をご教示いただけましたら助かります。

毎々、お手数をおかけいたします。
何卒、どうぞよろしくお願いいたします。
//

Re: 【R】リストからデータフレームへの変換(その2)
  投稿者:青木繁伸 2020/04/27(Mon) 22:08 No. 22901 HomePage
以下のようにすれば,もっともらしいとは思いますが,スマートでもなんでもないと思います。
素直にプログラミングする方がよいかと思います。
s <- c("りんご_apple_林檎", "みかん_orange_蜜柑", "バナナ_banana", "メロン_melon")
v <- sapply(s, function(u) {
str <- character(3)
a <- unlist(strsplit(u, "_"))
len <- length(a)
str[1:len] = a
str})
df <- data.frame(t(v))
rownames(df) <- NULL
df[df==""] <- NA
df
df[,1]
df[,2]
df[,3]
実行結果
> df
X1 X2 X3
1 りんご apple 林檎
2 みかん orange 蜜柑
3 バナナ banana
4 メロン melon
> df[,1]
[1] "りんご" "みかん" "バナナ" "メロン"
> df[,2]
[1] "apple" "orange" "banana" "melon"
> df[,3]
[1] "林檎" "蜜柑" NA NA

御礼(Re: 【R】リストからデータフレームへの変換(その2))
  投稿者:明石 2020/04/28(Tue) 09:12 No. 22902
青木先生 様;

お忙しいところを失礼いたします、明石と申します。
毎々、ご丁寧なご教示をいただき、誠にありがとうございます。

今回も、ご丁寧で、ありがたいご教示をいただき、とてもうれしいです。
心から、心より、御礼を申し上げます。
ありがとうございました。

以下、補足です。
------------------------------------

s[[*]][1]のベクトル要素だけを集めて、ベクトルに格納する、
という個所を、 例えば、sapply(s, FUN,1)  などのように、

s[[*]][2]のベクトル要素だけを集めて、ベクトルに格納する、
という個所を、 例えば、sapply(s, FUN,2)  などのように、

もし、上記のように書けたとすると(書けるかどうか、その知識がありません) 
FUNは、どのように書けるのか、という強い興味がございました。

投稿の動機が不純だったような気がしており、反省しています。
やはり、プログラミングも、素直さが大切です。
//


【R】リストからデータフレームへの変換
  投稿者:明石 2020/04/25(Sat) 17:09 No. 22896
青木先生 様;

お忙しいところを失礼いたします、明石と申します。
毎々、ご丁寧なご教示をいただき、誠にありがとうございます。

リストからデータフレームへの変換について、ご教示をいただけましたら、大変に助かります。

-------------------------------
以下、簡単な例でお示しします。

s <- c("りんご_apple", "みかん_orange", "バナナ_banana", "メロン_melon")
s <- strsplit(s, "_")

> s
[[1]]
[1] "りんご" "apple"

[[2]]
[1] "みかん" "orange"

[[3]]
[1] "バナナ" "banana"

[[4]]
[1] "メロン" "melon"

上記リストから、以下の2列からなるデータフレームを作成したいと思います。
lhs rhs
1 りんご apple
2 みかん orange
3 バナナ banana
4 メロン melon

上記リストを、unlist()関数でベクトルに変換して、
ベクトル要素の奇数番目と偶数番目を、
作成したいデータフレームの変数 lhs と rhs に代入することでも得られますが、

ご教示いただきたいことは、リストからデータフレームへの直接変換の方法です。

お手数をおかけいたします。
どうぞよろしくお願いいたします。
//

Re: 【R】リストからデータフレームへの変換
  投稿者:青木繁伸 2020/04/25(Sat) 17:44 No. 22897 HomePage
「直接変換」という意味がよく分かりません。
df <- data.frame(t(matrix(unlist(s), 2)))
ではだめなんですか?

御礼(Re: 【R】リストからデータフレームへの変換)
  投稿者:明石 2020/04/25(Sat) 19:08 No. 22899
青木先生 様;

お忙しいところを失礼いたします、明石と申します。
毎々、ご丁寧なご教示をいただき、誠にありがとうございます。

今回も、大変に良い勉強をさせていただきました。

「直接変換」という、紛らわしい表現で、ご迷惑をおかけいたしました。
大変に失礼をいたしました。

青木先生からご教示いただきました方法で、問題解決できました。
今回も、大変に良い勉強をさせていただきました。

私が「直接変換」という表現を使った期待感として、
apply, map, reduce などの関数を使う方法があるとすれば、どのように書くのだろう、
という思いがありました。

「直接変換」という、紛らわしい表現で、ご迷惑をおかけいたしました。
大変に失礼をいたしました。
//


【R】文字列ベクトルの突き合わせ
  投稿者:明石 2020/04/14(Tue) 12:14 No. 22892
青木先生 様;

お忙しいところを失礼いたします、明石と申します。
毎々、ご丁寧なご教示をいただき、誠にありがとうございます。

文字列ベクトルの突き合わせについて、ご教示をいただけましたら、大変に助かります。

----------------------------------------

以下の3本の文字列ベクトルがあります。

v <- c("リンゴ", "ミカン", "バナナ", "スイカ", "メロン", "モモ")
s1 <- c("バナナ","モモ")
s2 <- c("リンゴ","メロン")

s1、s2を、vと突き合わせをして、以下の行列を作成したいと思います。

【出来上がり】
リンゴ ミカン バナナ スイカ メロン モモ
s1 0 0 1 0 0 1
s2 1 0 0 0 1 0

> charmatch(v, s1)
[1] NA NA 1 NA NA 2

> charmatch(v, s2)
[1] 1 NA NA NA 2 NA

この結果を、ifelse()関数で、0/1に置換したいと思い、色々とやっていますが、うまくいきません。

ご教示をいただけましたら助かります。
お手数をおかけいたします。
//

Re: 【R】文字列ベクトルの突き合わせ
  投稿者:青木繁伸 2020/04/14(Tue) 14:21 No. 22893 HomePage
v <- c("リンゴ", "ミカン", "バナナ", "スイカ", "メロン", "モモ")
s1 <- c("バナナ","モモ")
s2 <- c("リンゴ","メロン")
#
a1 <- charmatch(v, s1) # NA NA 1 NA NA 2
ifelse(is.na(a1), 0, 1) # 0 0 1 0 0 1
# または
1 - is.na(a1) # 0 0 1 0 0 1
#
a2 <- charmatch(v, s2) # 1 NA NA NA 2 NA
ifelse(is.na(a2), 0, 1) # 1 0 0 0 1 0
# または
1 - is.na(a2) # 1 0 0 0 1 0
# 以上を踏まえ
x <- 1 - rbind(is.na(a1), is.na(a2))
rownames(x) <- c("s1", "s2")
colnames(x) <- v
x
# リンゴ ミカン バナナ スイカ メロン モモ
# s1 0 0 1 0 0 1
# s2 1 0 0 0 1 0
または %in% を使って
y = rbind(v %in% s1, v %in% s2) + 0
rownames(y) <- c("s1", "s2")
colnames(y) <- v
y

御礼(Re: 【R】文字列ベクトルの突き合わせ)
  投稿者:明石 2020/04/14(Tue) 15:11 No. 22894
青木先生 様;

お忙しいところを失礼いたします、明石と申します。
毎々、ご丁寧なご教示をいただき、誠にありがとうございます。

今回も、大変に良い勉強をさせていただきました。
心から、心より、御礼を申し上げます。
ありがとうございました。
//


【R】文字列ベクトルの突き合わせの高速化
  投稿者:明石 2020/04/11(Sat) 13:44 No. 22889
青木先生 様;

お忙しいところを失礼いたします、明石と申します。
毎々、ご丁寧なご教示をいただき、誠にありがとうございます。

青木先生にご教示いただきたいことが出てきました。
何卒どうぞよろしくお願いいたします。

----------------------------------------

2つの文字列ベクトルの突き合わせの高速化について、
ご教示をいただけましたら、大変に助かります。

使うデータは、2種類です。
・文字列ベクトル v
・参照テーブル tbl

・文字列ベクトル v は、
 自然言語処理で、テキストから切り出した単語の集合であり、長大です。
 表記ゆれが多くありますので、統制の必要性があります。

 表記ゆれの例示としては、"りんご","リンゴ","林檎","アップル","apple"など

・参照テーブル tbl は、
 上記の表記ゆれを統制するために、参照する表です。

 tbl は2列からなります。
 1列目は、参照文字列
 2列目は、置換文字列

 tbl の例示としては、
 りんご 林檎
 アップル 林檎
 apple 林檎
 など

やりたいことは、以下です。
・文字列ベクトル v を、for()関数でループを回す。
・v の各要素を、参照テーブル tbl の1列目「参照文字列」と照合する。
 ここで、標題の「文字列ベクトルの突き合わせ」が出てきます。
 == 演算子 を使いました。
・もし、v の要素が、tbl の1列目「参照文字列」にあれば、
 そのv の要素を、 tbl の2列目「置換文字列」で置換する。

for()関数の2重ループが原因と思いますが、
気が遠くなるほどの長い処理時間となりますので、
文字列ベクトルの突き合わせの高速化について、
ご教示をいただけましたら、大変に助かります。

お手数をおかけいたします。
//

Re: 【R】文字列ベクトルの突き合わせの高速化
  投稿者:青木繁伸 2020/04/11(Sat) 21:34 No. 22890 HomePage
以下のようなプログラムだと,実行時間はいかほどになりますか?

dict = matrix(c(
"りんご", "林檎",
"アップル", "林檎",
"apple", "林檎",
"レモン", "檸檬",
"れもん", "檸檬",
"lemon", "檸檬",
"remon", "檸檬"), byrow=TRUE, nc=2)
v = c("りんご", "アップル", "apple",
"檸檬", "レモン", "れもん", "lemon", "remon",
"イチゴ", "スイカ")
a = unname(sapply(v, function(s) {
i = which(dict[, 1] == s)
ifelse(length(i) == 0, s, dict[i, 2])
}))
実行結果
> a
[1] "林檎" "林檎" "林檎" "檸檬" "檸檬"
[6] "檸檬" "檸檬" "檸檬" "イチゴ" "スイカ"

御礼(Re: 【R】文字列ベクトルの突き合わせの高速化)
  投稿者:明石 2020/04/12(Sun) 09:53 No. 22891
青木先生 様;

お忙しいところを失礼いたします、明石と申します。
今回も、大変にありがたい、貴重なご教示をいただきました。
ありがとうございました。

劇的な改善をはかることができました。

エラップス時間の比較です。
・青木先生の方法:16秒
・私の従来方法 :25分経過しても、まだ終わりません..........

データ量が多くなれば、この効果は極めてありがたいです。

青木先生からご教示いただきました貴重なノウハウを、勉強しています。

心から、心より、御礼を申し上げます。
//


【R】文字列のコード判定(ひらがな、漢字)
  投稿者:明石 2020/04/03(Fri) 16:11 No. 22886
青木先生 様;

お忙しいところを失礼いたします、明石と申します。
毎々、ご丁寧なご教示をいただき、誠にありがとうございます。

青木先生にご教示いただきたいことが出てきました。
何卒どうぞよろしくお願いいたします。

----------------------------------------

3つの文字列があります。

x <- c("りんご","林檎","apple")

1番目の要素は、ひらがな のみ
2番目の要素は、漢字   のみ

どのようにしたら、
1番目の要素は、ひらがな のみ
2番目の要素は、漢字   のみ
という判定ができるのでしょうか。

お手数をおかけいたします。
何卒どうぞよろしくお願いいたします。

Re: 【R】文字列のコード判定(ひらがな、漢字)
  投稿者:青木繁伸 2020/04/03(Fri) 18:21 No. 22887 HomePage
Python での記事ですが,
https://note.nkmk.me/python-re-regex-character-type/
が参考になると思います。

R では以下のようになります。
HIRAGANA = "[\u3041-\u309F]" # ひらがなの正規表現
grepl(HIRAGANA, "あ") # TRUE
grepl(HIRAGANA, "ア") # FALSE

KATAKANA = "[\u30A0-\u30FF]" # カタカナの正規表現
grepl(KATAKANA, "ア") # TRUE
grepl(KATAKANA, "あ") # FALSE

# 簡易
KANJI0 = "[\u4E00-\u9FFF]" # 漢字の正規表現(簡易版)
grepl(KANJI0, "漢") # TRUE
grepl(KANJI0, "々") # FALSE
grepl(KANJI0, "〆") # FALSE
grepl(KANJI0, "〇") # FALSE

# 完全
KANJI = "[\u2E80-\u2FDF\u3005-\u3007\u3400-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF\U00020000-\U0002EBEF]" # 漢字の正規表現(完全版)
grepl(KANJI, "漢") # TRUE
grepl(KANJI, "々") # TRUE
grepl(KANJI, "〆") # TRUE
grepl(KANJI, "〇") # TRUE

# 複数文字の場合,すべてがひらがな,カタカナ,漢字かどうかの判定
is.all.hiragana = function(s) {
t = grepl(HIRAGANA, strsplit(s, "")[[1]])
# print(t)
all(t)
}

is.all.katakana = function(s) {
t = grepl(KATAKANA, strsplit(s, "")[[1]])
# print(t)
all(t)
}

is.all.kanji = function(s) {
t = grepl(KANJI, strsplit(s, "")[[1]])
# print(t)
all(t)
}

is.all.hiragana("ひらがな")
is.all.hiragana("ひらがなイガイ")

is.all.katakana("カタカナ")
is.all.katakana("カタカナいがい")

is.all.kanji("漢字")
is.all.kanji("漢字いがい")

御礼(Re: 【R】文字列のコード判定(ひらがな、漢字))
  投稿者:明石 2020/04/03(Fri) 19:58 No. 22888
青木先生 様;

お忙しいところを失礼いたします、明石と申します。
毎々、ご丁寧なご教示をいただき、誠にありがとうございます。

今回も、ご丁寧で、分かりやすい、ご教示をいただき、誠にありがとうございました。

私はPythonも勉強し始めましたので、
青木先生がご紹介してくださいましたページも、あわせて、参照いたします。

いつもありがとうございます。
//


共変量で調整した二元配置分散分析
  投稿者:田崎 2020/02/05(Wed) 08:57 No. 22885
お世話になっております。
恐れ入りますが、以下の共変量で調整した二元配置分散分析について、検定手法が妥当であるかご教示いただけますと幸いです。

独立変数:BMI(3群)と飲酒状況(3群)
従属変数:血液の生化学値
共変量:年齢

二元配置分散分析を行った結果、BMIと飲酒それぞれの独立変数はP<0.001、両者の相互作用はP=0.75となりました。
そこで、BMI、飲酒状況それぞれで、3群間の差を解析したいと考えました。
この場合、SPSSでは共変量を設定したままではpost-hoc testができないため、BMIと飲酒それぞれについて共分散分析(多重比較としてBonferroni法を採用)をpost-hoc testとして行うのが良いのではと考えました。

お時間がありますときにご教示いただけますと幸いです。
どうぞよろしくお願いいたします。


VBAでの購買間隔の平均を計算
  投稿者:波音 2019/09/20(Fri) 12:27 No. 22839
業務上の事情があってExcel VBAで「購買月間隔の平均」を計算するユーザー定義関数を作っています(作りました)。
自分でチェックしたところ、正しく動作はしているようですが。。。
記憶をたよりに書いていることもあり、何かもう少しスマートに書ける気がするようなしないような。。。

という状況ですので、もう少しスマートに書く方法があればご教示いただきたいです。

やりたいことは以下のようなものです。

例えば、私が毎月購買していれば4月〜3月までの12セルすべてに「1」が入ります。
もし購買していない月があれば「空白」が入ります。
仮に4,5,6;9,10;3に購買しなかった場合、空白は3, 2, 1ということになるので、その平均は(3 + 2 + 1) / 3という計算です。

この計算結果は2.00となりますが、意味としては「この人は平均的に2ヶ月間隔で買っていない(2ヶ月間隔でブランクがある)ということ。

VBAコード

Option Explicit

' 指定したセル範囲において、入力値と入力値の間の空白をカウントし、
'  空白数の平均を計算して返す関数

' ID×日付の購買頻度クロス集計表で、IDごとの購買間隔の日数の平均を求めるために作った関数

Function betweenAve(datRng As Range)

Dim dat As Variant ' 関数の引数で取得したアドレスにある数値を格納する配列
Dim n As Integer, i As Integer ' 配列の長さn、forの繰り返し用i

Dim blankCount As Integer ' 空白セルをカウントして格納していくハコ
Dim sumN As Integer ' 購買日間隔がいくつかるかカウントして格納していくハコ

Dim mySum As Double, ans As Double ' 空白セルを累計して格納するハコ

' まずは引数で指定されたセル範囲のアドレスから、セルに入力されている値をdatへ格納
' 二次元配列として格納されるので、行ベクトルの長さを取得
dat = Range(datRng.Address).Value
n = UBound(dat, 2)

' 各種変数を初期化しておく
blankCount = 0
sumN = 0
mySum = 0

' セルの値を1つずつチェックしていき、空白があればblankCountに「1」を格納していく
'  それをmySumへ累計していく
For i = 1 To n
If dat(1, i) = "" Then ' i番目のセルが空白がどうかチェック
blankCount = blankCount + 1 ' 空白なら「1」を代入
Else
If i <> 1 Then ' 空白でない場合、そのセルが最初のセルかどうかチェック
If dat(1, i - 1) = 0 Then ' 最初のセルでなければ、1つ前のセルをチェックして空白なら、
sumN = sumN + 1 '  sumNに+1カウント
End If
Else
'何も処理しない
End If

mySum = mySum + blankCount ' mySumへ空白の数を累計していく
blankCount = 0 ' 1ループの処理が終わるたびにblankCountを初期化する
End If
Next i

' 最終セルが空白の場合、ループ内で数がカウントされないのでループ後にカウントする
mySum = mySum + blankCount

' 最終セルが空白の場合、購買日の間隔数もカウントされないのでループ後にカウントする
If dat(1, n) = "" Then
sumN = sumN + 1
End If

' 購買日数間隔の平均を計算
ans = mySum / sumN

' 戻り値
betweenAve = ans

End Function


Re: VBAでの購買間隔の平均を計算
  投稿者:波音 2019/09/20(Fri) 12:29 No. 22840
Excelのワークシートのスクリーンショットも添付します。
このようなデータイメージです。


Re: VBAでの購買間隔の平均を計算
  投稿者:ts 2020/01/10(Fri) 18:02 No. 22883
Function 空白期間の平均(対象範囲 As Range)

Dim 前, 今, 分母

分母 = 0

前 = "最初なので、前はありません"

'--------------------------------

For Each 今 In 対象範囲

If 今 = "" And 前 <> "" Then

'空白期間の始まりだから

分母 = 分母 + 1

End If

前 = 今

Next
'--------------------------------

空白間隔の平均 = WorksheetFunction.CountBlank(対象範囲) / 分母

End Function

Re: VBAでの購買間隔の平均を計算
  投稿者:aoki 2020/01/10(Fri) 19:08 No. 22884
R だと,rle() を使えば簡単です。
data = c(
"111111111111",
"000110011110",
"110011001100",
"111111000000",
"101010101010")

for (str in data) {
str.vec = unlist(strsplit(str, ""))
result = rle(str.vec)
result = result$length[result$values == 0]
if (length(result) == 0) {
print(0)
} else {
print(mean(result))
}
}
結果
[1] 0
[1] 2
[1] 2
[1] 6
[1] 1
rle もソースを見れば簡単な関数です。余計なものを除けば以下のごとし。
rle2 = function(x) {
x = unlist(strsplit(str, ""))
y = x[-1] != x[-n]
i = c(which(y), n)
lengths = diff(c(0, i))
values = x[i]
return(list(lengths=lengths, values=values))
}
両方の言語を知っていれば,移植もそう難しくはないのでは?


R 区間分割処理
  投稿者:明石 2020/01/04(Sat) 19:15 No. 22879
青木先生 様;

新年あけまして、おめでとうございます。

お忙しいところを失礼いたします、明石と申します。
毎々、ご丁寧なご教示をいただき、誠にありがとうございます。

新年早々ですが、青木先生にご教示いただきたいことが出てきました。
年始のお忙しいところ、お手数をおかけいたします。
何卒どうぞよろしくお願いいたします。

----------------------------------------
AIC による,ヒストグラム(度数分布表)の最適階級分割の探索
http://aoki2.si.gunma-u.ac.jp/R/AIC-Histogram.html
の入力データを用いて、ご説明します。
x <- c(28.67, 40.29, 10.61, 33.85, 36.19, 20.63, 9.64, 15.26,
15.53, 73.62, 63.29, 32.77, 32.28, 11.90, 54.16, 4.73, 24.67,
17.66, 25.84, 22.89, 15.68, 5.48, 36.41, 20.33, 44.58, 57.23,
65.89, 57.91, 2.39, 9.15, 10.27, 3.04, 12.35, 32.78, 44.23,
31.14, 6.03, 27.90, 28.73, 42.09, 3.99, 9.74, 6.85, 0.16, 9.26,
7.72, 34.42, 32.77, 6.80, 10.45, 29.80, 5.89, 13.56, 50.55, 0.51,
0.19, 7.19, 5.94, 11.24, 32.32, 15.27, 29.64, 10.03, 2.01, 13.89,
20.83, 27.49, 14.46, 8.22, 27.81, 33.65, 38.57, 8.66, 1.40,
23.97, 15.11, 63.32, 7.76, 1.58, 48.66, 44.46, 0.02, 38.12,
18.51, 101.75, 34.16, 27.99, 5.22, 1.82, 8.22, 4.89, 97.50, 2.10,
26.19, 10.11, 8.39, 25.83, 1.05, 25.63, 18.35)

最適階級の区間幅が、以下のようにマトリクスで得られました。
mx
[,1] [,2]
[1,] -0.03000 10.68895
[2,] 10.68895 37.48632
[3,] 37.48632 64.28368
[4,] 64.28368 101.80000

findInterval(x, c(-0.03000, 10.68895, 37.48632, 64.28368))により、
入力ベクトルデータの各要素が所属する階級番号を得ることができました。
2 3 1 2 2 2 1 2 2 4 3 2 2 2 3 1 2 2 2 2 2 1 2 2 3 3 4 3 1 1 1 1 2 2
3 2 1 2 2 3 1 1 1 1 1 1 2 2 1 1 2 1 2 3 1 1 1 1 2 2 2 2 1 1 2 2 2 2
1 2 2 3 1 1 2 2 3 1 1 3 3 1 3 2 4 2 2 1 1 1 1 4 1 2 1 1 2 1 2 2

【ご教示いただきたい内容】
mxを人間が読み取り、
findInterval(x, c(-0.03000, 10.68895, 37.48632, 64.28368))
をコーディングするのではなく、
x、mxの2つを引数として渡すだけで、
findInterval(x, c(-0.03000, 10.68895, 37.48632, 64.28368))
を自動的に組み立てて、実行して、所属する階級を得ることができたら、大変に助かります。

最適階級化したいデータが多くあるので、
人手を介さないで自動処理ができたらと調べています。

eval()関数が利用できそうな気がして調べていますが、文字列の組み立てができません。

ご教示をいただけましたら大変に助かります。
新年早々、お手数をおかけいたします。
//

Re: R 区間分割処理
  投稿者:aoki 2020/01/05(Sun) 12:34 No. 22880
findInterval(x, mx[,1]) だけでよいのでは?

Re: R 区間分割処理
  投稿者:明石 2020/01/05(Sun) 16:26 No. 22881
青木先生 様;

新年あけまして、おめでとうございます。

お忙しいところを失礼いたします、明石と申します。

新年早々、ありがたいご教示をいただき、誠にありがとうございました。
今年もいい年になりそうな予感がしています。

eval()関数を見つけて、固執して、視野が狭くなっておりました。
//

[1] [2] [3] [4] [5] [6] [7] [8] [9]

- J o y f u l  N o t e -
Modified by i s s o