前提・実現したいこと
Rで「tempR」というパッケージの「get.decluttered」という関数を使用して時系列データのfisherテストを行う際に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
stats::fisher.test(matrix(x, nrow = 2)) でエラー: all entries of 'x' must be nonnegative and finite
該当のソースコード
R
1x <- aggregate(名前[, -c(1:4)], list(samp = 名前$samp, attribute = 名前$attribute), sum) 2 3> x 4 time_0s1 time_0s2 time_0s3 time_0s4 time_0s5 time_0s6 time_0s7 5 0 0 0 0 0 0 0 6 time_0s8 time_0s9 time_0s10 time_1s1 time_1s2 time_1s3 time_1s4 7 0 0 0 0 0 0 0 8 time_1s5 time_1s6 time_1s7 time_1s8 time_1s9 time_1s10 time_2s1 90 0 0 0 0 0 0 100 0 0 0 0 0 0 110 1 0 0 0 0 2 120 1 0 1 1 0 5 131 2 2 0 2 0 1 142 0 7 1 2 2 3 157 0 1 4 0 7 5 162 3 10 8 0 1 9 171 8 7 3 6 16 9 180 1 8 2 12 7 3 198 21 13 0 1 9 2 2015 8 5 8 22 16 0 211 12 2 17 10 6 9 2226 19 0 2 14 2 18 2311 8 8 26 20 0 3 2416 4 19 11 8 8 28 2521 0 2 16 4 19 13 268 8 28 22 0 2 17 275 20 13 8 8 27 23 280 2 18 6 22 15 10 298 28 23 0 3 18 6 3022 15 12 8 30 24 0 314 18 6 22 15 14 8 3231 24 0 4 20 7 22 3316 14 9 30 24 0 4 3420 7 22 17 16 8 30 3524 0 4 20 7 22 18 3617 9 31 25 0 4 21 377 22 18 17 9 31 25 380 4 22 8 22 20 18 399 30 25 0 4 23 7 4023 21 18 9 30 25 0 414 23 7 23 20 18 9 4229 27 0 4 22 7 23 4320 19 9 31 27 1 4 4422 7 23 20 19 10 33 4526 2 5 23 7 23 22 4619 12 33 26 1 5 23 475 24 22 19 11 34 25 482 5 22 5 25 22 19 4911 33 25 1 5 22 5 5026 22 20 11 33 26 2 515 23 5 25 22 20 11 5234 26 2 6 23 5 25 5321 20 11 34 24 1 5 5423 5 25 21 20 11 35 5523 2 4 23 5 24 21 5619 10 36 23 2 4 22 575 24 21 20 10 38 23 581 4 21 5 24 20 19 5911 38 24 2 4 22 5 6024 20 19 11 38 24 1 614 21 4 25 20 17 12 6239 23 2 4 20 4 26 6320 17 12 38 23 2 4 6420 3 26 21 17 12 38 6523 1 4 20 3 26 21 6618 12 38 22 2 4 20 673 25 21 18 11 38 20 682 4 19 3 25 21 18 6910 38 20 1 4 17 1 7026 21 18 12 37 20 1 714 18 1 25 21 17 12 7237 20 0 5 19 1 25 7320 17 13 34 18 2 5 7420 1 25 20 17 13 33 7518 2 5 20 1 23 20 7617 12 34 18 1 5 19 771 23 21 16 12 32 18 782 5 18 1 23 20 15 7912 34 17 2 5 20 1 8023 21 15 13 34 17 1 815 20 1 23 21 15 10 8234 16 2 5 19 1 23 8321 16 10 33 16 2 4 8419 1 24 22 14 11 33 8515 1 4 18 1 24 22 8614 11 33 16 2 4 17 871 21 23 14 8 33 16 881 4 17 1 21 23 14 899 33 16 2 4 18 1 9022 23 13 10 33 14 2 914 17 1 23 23 13 10 9233 14 1 2 17 1 23 9323 12 10 34 14 2 2 9418 1 23 23 12 10 34 9513 2 2 17 1 22 23 9612 9 33 14 1 2 17 971 21 22 12 8 32 14 982 2 17 1 21 22 12 997 33 14 1 2 16 1 10021 22 12 7 32 14 2 1011 16 1 23 20 9 7 10232 13 2 1 16 0 23 10320 9 7 31 13 1 1 10416 0 23 18 9 8 31 10513 2 1 15 0 24 17 1069 7 31 12 2 1 16 1070 23 17 9 6 31 12 1081 1 16 0 23 17 8 1096 31 12 2 1 15 0 11024 17 8 7 30 11 1 1111 15 0 23 17 8 7 11228 11 2 1 15 0 20 11319 8 5 28 10 2 1 11415 0 21 19 7 6 27 11510 1 1 15 0 21 19 1167 7 27 10 2 1 15 1170 21 18 8 7 27 9 1182 1 15 0 20 17 8 1196 25 8 1 1 15 0 12020 17 7 6 24 8 2 1211 15 0 22 15 7 7 12224 7 2 1 14 0 22 12314 7 5 24 6 1 2 12413 0 23 14 7 5 24 1255 1 2 13 0 22 14 1267 5 25 5 0 2 13 1270 21 14 6 4 24 5 1281 2 14 0 20 13 6 1294 24 5 1 2 14 0 13022 13 5 5 22 5 0 1312 14 0 20 13 5 5 13221 5 0 2 14 0 21 13313 5 5 20 6 0 2 13414 0 20 13 5 5 20 1356 0 2 14 0 20 12 1365 4 19 6 0 2 14 1370 19 12 4 4 19 6 1380 1 14 0 17 11 4 1393 19 6 0 1 14 0 14016 11 4 3 19 5 0 1411 14 0 16 11 4 4 14219 3 0 1 13 0 15 14312 4 4 18 3 0 1 14413 0 13 12 4 3 18 1453 0 1 13 0 13 12 1464 3 18 3 0 1 13 1470 10 10 2 1 17 3 1480 1 12 0 10 8 2 1490 16 3 0 1 12 0 150 time_100s2 time_100s3 time_100s4 time_100s5 time_100s6 time_100s7 time_100s8 151 12 9 1 3 16 3 0 152 time_100s9 time_100s10 153 1 11 154 155ご参考までに、以下は「ojtcata」でxを出力した結果(3行目まで)です。 156> head(x, 3) 157 samp attribute time_0s time_1s time_2s time_3s time_4s time_5s time_6s time_7s time_8s 1581 1 Astringent 0 0 0 0 0 0 2 2 3 1592 2 Astringent 0 0 0 0 1 1 2 3 4 1603 3 Astringent 0 0 0 0 1 1 1 2 2 161 time_9s time_10s time_11s time_12s time_13s time_14s time_15s time_16s time_17s time_18s 1621 3 5 4 6 6 6 6 7 7 7 1632 3 3 2 2 2 3 3 3 3 3 1643 4 3 4 5 6 5 5 7 7 7 165 time_19s time_20s 1661 9 9 1672 5 5 1683 7 8 169 170 171 172p.1.checked <- x[x$samp == 1, -c(1:2)] 173p.1.eval <- length(unique(名前$cons)) 174p.not1.checked <- aggregate(x[x$samp != 1, -c(1:2)], 175 list(attribute = x$attribute[x$samp != 1]), sum)[, -1] 176p.not1.eval <- length(unique(名前$cons)) * (length(unique(名前$samp)) - 1) 177 178# reference lines for contrast products 179p.1.refline <- p.not1.checked / p.not1.eval 180p.1.refline 181 182# decluttering matrix corresponds to the dimensions of p.1.refline 183x <- unlist(p.1.checked) 184vector.checked 185vector.notchecked <- unlist(p.not1.checked) 186vector.notchecked 187p.1.declutter <- matrix(get.decluttered(x = unlist(p.1.checked), n.x = p.1.eval, 188 y = unlist(p.not1.checked), n.y = p.not1.eval), 189 nrow = nrow(p.1.checked))
試したこと
初心者のため何を試したらよいのかわからずパッケージの説明に記載されている例を参考にみてみたのですが、何が例と異なるのかわかりませんでした。
何卒、ご指導お願いいたします。
補足情報(FW/ツールのバージョンなど)
R 3.6.3
RStudio
を使用しています。どちらも先日インストールしたので最新のバージョンだと思います。
Excelのテキスト(タブ区切り)形式のファイルを読み込んで使用しており、データセットはパッケージの説明に使用されていた例のデータ(「ojtcata」)と同様にセットしました。
> 'x' must be nonnegative and finite
とのことなので、xの中身がおかしい(マイナスだったりしている?)ぽいです。
xに入るデータ(データフレームの内容)か、xそのものを出力した内容を貼ってみていただけますか?
ojtcataでは起こらなかったが、実際に試したデータのせいで何かが起きているものと思われます。
xを出力した内容を変更いたしました。(文字数の都合上、途中は数値のみにさせていただきました。)
見たところ負の数はない(有:1、無:0のデータを毎秒属性ごとに合計した数が返ってくる式だと認識しており、負の数は出てこないのではないかと考えています)のですが、何を改善すればいいのかご指導いただけますと幸いです。
なるほどたしかにそうですね。(負の数はない)
ちょっと再現させてみないと調べるのが難しいと思うので可能であれば読み込ませたデータそのものをどこかにアップロードしていただくことはできますか。
いただいたデータを見てみたんですけど21個ずつのレコードになっていると思いきやtime_100s10などが出てきてもともとのヘッダー情報がわからないのと、
その後のコードで
x$sampとか名前$consが出てくるので、元データを見せていただいたほうが良いと思いました。
データのURLを補足情報欄に記載しました。
あまり記載したままにしたくないので確認(保存)したらご連絡いただいてもよろしいでしょうか(URLを削除します)。
よろしくお願いいたします。
今気が付きました
なるほど...あまり公開してもよいようなデータではないのですね。
URLですが、確認したらアクセス権がなく閲覧できない状態でした。
なんかベストな情報の交換方法があればいいのですが...
ふと思ったのですが、 x$sampとかが存在しないように見えるのですがこのあたりはちゃんとあるのでしょうか?
(もしないとしたら実行時に他のエラーもでているような)
データ共有ができておらず、申し訳ありません。分かりづらいかもしれませんが文章でデータセットを説明致します。
[,1] cons 被験者番号(1〜6)
[,2] samp サンプルの品種番号(1〜5)
[,3] sampno 品種内の番号(1〜10)
[,4] attribute 感覚属性(1〜10)
[,5] time_0 (0 or 1)
〜
[,106] time_100 (0 or 1)
x$sampが存在しないというのは、samp列が空白ではないかということでしょうか?
samp列に限らず全てのセルは埋まっています…
もしご迷惑でなければメールでならデータを送れると思います。(見ず知らずの者なのでご迷惑なら遠慮なく仰ってください)
なるほど、元データは106カラムあるデータなんですねー。
time_0s1 〜 time_0s10, time_2s1〜time2s10, ... time_10s10...と思って読んでいたらtime_20sってのが出てきてわけわからん!!!
となってしまいました...。
ちょっと視点を変えると
x = unlist(p.1.checked),
n.x = p.1.eval,
y = unlist(p.not1.checked),
n.y = p.not1.eval
これらのそれぞれの値の内容をチェックしてみたらどうでしょうか?
メールアドレスを記載していただきありがとうございます。
コメント削除お願い致します。
(うわぁ...コメントの削除は申請というプロセスになるのね...これは自分やらかした感
そうなのですね…相談者側は編集が可能なので当方が記載しておけば良かったですね。申し訳ありません…
回答1件
あなたの回答
tips
プレビュー