2017-09-24 8 views
0

関連するdplyrの質問、Rのドキュメントを見て、構文の誤解と思われるものを並べ替えようとしました。dplyrのgroup_by関数でエラーが発生しました

私のデータの文字列を反映したサンプルデータです。

id <- c(1:20) 
xvar <- seq(from=2.0, to=6.0, length.out=100) 
yvar <- c(1:100) 
binary <- sample(x=c(0,1), size=100, replace=TRUE) 

breaks <- c(0,11,21,31,41,51,61,71,81,91,100) 
df <- data.frame(id, xvar, yvar, binary) 
df <- transform(df, bin=cut(yvar, breaks)) 

    id  xvar yvar binary bin 
1 1 2.000000 1  1 (0,11] 
2 2 2.040404 2  0 (0,11] 
3 3 2.080808 3  0 (0,11] 
4 4 2.121212 4  0 (0,11] 
5 5 2.161616 5  1 (0,11] 
6 6 2.202020 6  0 (0,11] 

私はbinary変数で割っxvar手段は、彼らが所属するbinグループに基づいて大幅に異なっているかを見て、次のことを実行したいと思います。

pval <- df %>% group_by(bin) %>% summarise(p.value=t.test(xvar ~ factor(binary))$p.value) 

しかし、私はエラーを取得し続ける:

を「ファクターをグループ化するには、正確に2つのレベルを持っている必要があります」私はこれに似た記事を見ましたが、問題がT.testが実行されていた方法でした。私は別のgroup_byオブジェクトを使って同じコードを実行しましたが、うまくいきました。データの時間は重要な要素でした。

どのような考えですか?私はこの質問がどのように提起されたかを改善する方法についての批評に感謝するでしょう。

+0

それぞれのグループ内に 'binary'という値が1つしかないので、' t.test'にそれらの値をどうしたいのかはっきりしません。 't.test(c 1、2)~c(1,1)) 'となる。それぞれの 'xvar'グループの平均をどう比較しようとしていますか? – alistaire

+0

私は、適切なテストを作成するには、生成されるデータフレームが小さすぎる(十分な値がないため)かもしれないと思います。データフレームを少し頑強に編集しましょう。 – asshah4

+0

私が見たいと思っているのは、ある範囲の 'xvar'値に対して、変数' binary 'でグループ化することができ、t検定を実行することができます。グループ化変数としてすべての単一のbinでt検定を実行したいと思います。それは理にかなっていますか? – asshah4

答えて

0

私はこの問題を解決したと思います。

"グループ化係数は正確に2レベルでなければなりません"とは、t.testに十分なデータがない場合に発生します。私はちょうど、オリジナルのデータセットが大きかったとすれば、この問題にぶつかることはないでしょう。

サンプルデータをより堅牢にしたところ、エラーは消えました。

ご迷惑をおかけして申し訳ありませんが、ご協力いただきありがとうございます。

1

これにはdplyrを使用したくないです。 線形モデルに合わせたいと思っています。

mod <- lm(xvar ~ binary*bin, data=df) 
anova(mod) 

係数、P値、および平方和の意味については、stats.SEを参照してください。

+0

私は助けてくれてありがとう - 私はこれについてもっと読む必要があります。私はなぜこの「2つのレベルによるグループ化係数」エラーが発生し続けるかを知りたいと考えています。 – asshah4

関連する問題