探検


【R言語】統計解析フリーソフトR 第6章【GNU R】 [無断転載禁止]©2ch.net

レス数が1000を超えています。これ以上書き込みはできません。
2017/08/03(木) 19:23:12.67ID:Hq1blL0O
R は統計計算とグラフィックスのための言語・環境です。
統計計算で重宝するデータ型や、複数要素を処理する演算や関数、
解析結果を表示するグラフィックなど、多彩な機能を提供します。

●関連サイト
The R Project
http://www.r-project.org/
RjpWiki
http://www.okada.jp.org/RWiki/
リンク集
http://www.okada.jp.org/RWiki/?%A5%EA%A5%F3%A5%AF%BD%B8
※前スレ
【R言語】統計解析フリーソフトR 第5章【GNU R】
http://rio2016.2ch.net/test/read.cgi/math/1380168442/
2017/08/03(木) 19:24:54.74ID:qtUXVqva
★★★忖度と処世術に汚染された日本人:権威主義的な支配と損したくない人達★★★
  〜〜〜芳雄氏が言う『研究者としての基本的態度』とは一体何だろうか〜〜〜

佐藤幹夫:自分自身の素朴な疑問に真剣に耳を傾ける。⇒不滅の金字塔を打ち立てる。
糞父芳雄:人間関係を駆使し他人を操り根回しを行う。⇒ハリボテお教授として君臨。

隠蔽の財務省、嘘吐きの文科省、そして問答無用に屈服させる官邸。コレでも先進国?

(佐藤師がしてたのは本物の研究だ。だが)芳雄氏がしてたのはケケケ、ケンキュウ。
外見を繕って偉そう見せさえすれば何でもヨロシ。ほんで教授になりさえすれば研究の
中身なんて何でもヨロシ。そもそも論文なんてモンは、外国の権威ある雑誌に掲載され
さえすれば、その中身のギロンなんて何でもヨロシ。そやし適当に書いてしまえ〜〜〜
中身がダメだと知ってて、ソレでもSTAP論文を外国に投稿して受理される。発覚したら
適当に言い逃れる醜い態度。オツムのダメな大学院生に「虚偽の良品ラベル」を貼って
世間に出荷するハリボテ大学は詐欺行為そのもの。世間に媚びを売って客商売に徹し、
『売れさえすれば学生の脳の質なんて何でもヨロシ』と居直る大学。そしてブランド名
だけを見て仕入れる世間。●●は一流大学やさかい、きっと優秀なエリートやろwww

中身を何も説明しないで、問答無用に上から押し付ける。ソレをイチャモンで騒いで、
そして邪魔して潰そうとする周囲の下々。大学教員も国会議事堂も、そして馬鹿板人の
遣ってる事も皆同じだ。日本人はバカ民族であり、今は外国にもちゃんとバレてるので
海外からも軽蔑されるだけであり、そのうちにどの国からも信用されなくなるだろう。

近視眼的で打算的な人生観を息子に押し付ける父親と、大脳に栄養が足りてない連中が
跋扈する永田町や霞が関に支配される国に住む不幸、一体どうしてくれるというのか。

■■■馬鹿板をスルと安倍晋三みたいな偽善者になります。そやし止めなさい。■■■

2017/08/04(金) 03:31:08.39ID:b3+Cy8qY
板違う
2017/08/04(金) 06:12:55.77ID:u5H9jwGc
2017/08/04(金) 16:53:10.14ID:u5H9jwGc
2017/08/04(金) 16:53:27.29ID:u5H9jwGc
2017/08/04(金) 16:53:46.10ID:u5H9jwGc
2017/08/04(金) 16:54:03.40ID:u5H9jwGc
2017/08/04(金) 16:54:19.87ID:u5H9jwGc
2017/08/04(金) 16:54:36.75ID:u5H9jwGc
2017/08/04(金) 16:54:56.00ID:u5H9jwGc
2017/08/04(金) 16:55:13.77ID:u5H9jwGc
2017/08/04(金) 16:55:35.11ID:u5H9jwGc
14132人目の素数さん
垢版 |
2017/08/06(日) 18:24:07.34ID:oDKJI1vJ
耳栓をしたら世界が変わってワロタ
2017/08/06(日) 18:24:24.98ID:+CYdGQny
16132人目の素数さん
垢版 |
2017/08/06(日) 18:25:44.67ID:oDKJI1vJ
耳栓をしたら世界が変わってワロタ
2017/08/06(日) 18:26:01.57ID:+CYdGQny
18132人目の素数さん
垢版 |
2017/08/06(日) 18:29:29.99ID:oDKJI1vJ
耳栓をしたら世界が変わってワロタ
2017/08/06(日) 18:29:52.60ID:+CYdGQny
20132人目の素数さん
垢版 |
2017/08/06(日) 20:43:04.35ID:oDKJI1vJ
耳栓をしたら世界が変わってワロタ
2017/08/06(日) 22:03:22.61ID:+CYdGQny
22132人目の素数さん
垢版 |
2017/08/07(月) 08:49:27.85ID:0YzkEl/p
耳栓をしたら世界が変わってワロタ
2017/08/13(日) 06:51:19.01ID:+zIOnWE6
アンドロイドにRをインストールしてみた。
テキストベースなら簡易統計電卓として使える。
依拠したのはこれ。
https://stackoverflow.com/questions/36968411/installing-r-on-android
これくらいの簡単な計算ならタブレットでできるようになった。
いちいちパソコンを立ち上げなくてもすむ。

> binom.test(420,1000)$conf.int[1:2]
[1] 0.3891836 0.4512888
2017/08/13(日) 06:52:35.49ID:+zIOnWE6
>>297
クリップボード経由でスクリプトを実行してみたが
日本語が混ざるとエラーになるな。
フィーリングカップル5対5のカップル数とカップル成立確率の
シミュレーションを走らせてみた。

http://imagizer.imageshack.com/img924/4456/siP7dz.png

きちんと動く。
2017/08/16(水) 21:19:26.05ID:lgZzPGKw
Unfortunately installing Debian package build-essential runs into problems (a form of a dependency hell, that is),
and installing new R packages that would require compiling C or Fortran code is not currently possible. Otherwise the installation seems to work rather nicely.
ということでパッケージのインストールはエラーになった。
2017/08/17(木) 01:51:31.67ID:qXaIFkoQ
>>25
>dependency hell
具体性がない。どこ情報?
2017/08/18(金) 14:16:09.61ID:1KawOE0O
>>26
http://www.r-ohjelmointi.org/?p=1434
2017/08/18(金) 14:17:55.45ID:1KawOE0O
Console R はコンパイラーが使えたからPremium版を買ったけど
今は公開中止で入手できない。
2017/08/18(金) 19:59:31.55ID:x/xXagzJ
>>27
Debianの話ではなくて、Andoridか、紛らわしい。
ってか、クロスコンパイル環境でビルドするのではなくて、
DebianのバイナリをAndoridの中のエミュレータで動かすという話?
30132人目の素数さん
垢版 |
2017/08/18(金) 23:41:48.42ID:yku0iUDJ
こいつらスマホからR使ってんの?
2017/08/19(土) 00:56:43.44ID:joMJEhOz
FireHDで使いたい
2017/08/19(土) 02:20:10.86ID:LB3Hl+jp
2017/08/19(土) 02:20:26.96ID:LB3Hl+jp
2017/08/19(土) 02:20:43.33ID:LB3Hl+jp
2017/08/19(土) 02:21:17.96ID:LB3Hl+jp
2017/08/19(土) 02:21:33.60ID:LB3Hl+jp
2017/08/19(土) 02:21:49.32ID:LB3Hl+jp
2017/08/19(土) 02:22:05.59ID:LB3Hl+jp
2017/08/19(土) 02:22:21.98ID:LB3Hl+jp
2017/08/19(土) 02:22:39.87ID:LB3Hl+jp
2017/08/19(土) 02:22:56.35ID:LB3Hl+jp
2017/08/19(土) 07:33:24.79ID:xFz3lrjm
>>31
先ず、Google Playをいれて>23の手順で使えるようになるはず。
2017/08/19(土) 07:36:42.75ID:xFz3lrjm
>>29
GNURoot Debian provides a method for you to install and use Debian and its associated applications/packages alongside Android.
とあるからエミュレータなのだろう。
2017/08/19(土) 09:11:59.25ID:xFz3lrjm
>>31
他の泥タブレットと同じくFireHDでもできたよ。
45132人目の素数さん
垢版 |
2017/08/21(月) 01:18:38.70ID:Dj1b7ycp
気づいたら前スレ埋められてたのか
いつも思うがRに親でも殺されたのかと
2017/08/21(月) 01:19:09.87ID:zqnQwMkT
2017/08/21(月) 01:19:28.11ID:zqnQwMkT
2017/08/21(月) 01:19:45.27ID:zqnQwMkT
2017/08/21(月) 01:20:02.14ID:zqnQwMkT
2017/08/21(月) 01:20:19.41ID:zqnQwMkT
2017/08/21(月) 01:20:38.03ID:zqnQwMkT
2017/08/21(月) 01:20:56.12ID:zqnQwMkT
2017/08/21(月) 01:21:13.27ID:zqnQwMkT
2017/08/21(月) 01:21:28.95ID:zqnQwMkT
2017/08/21(月) 01:21:46.90ID:zqnQwMkT
2017/08/27(日) 21:42:47.08ID:RuVE0xlS
2^127-1 =170141183460469231731687303715884105727は素数

Mathematicaは正しく計算してくれるけど

Rだと

> 2^127-1
[1] 170141183460469231738248242066868668888

と表示された。

あまり大きな数字は扱えないようだ。
2017/08/27(日) 21:46:56.21ID:RuVE0xlS
2^1279-1も素数

10407932194664399081925240327364085538615262247266704805319112350403608059673360
29801223944173232418484242161395428100779138356624832346490813990660567732076292
41295093892203457731833496615835504729594205476898112116936771475484788669625013
84438260291732348885311160828538416585028255604666224831890918801847068222203140
521026698435488732958028878050869736186900714720710555703168729087
2017/08/27(日) 22:03:43.58ID:dgHzAQs5
なんかパッケージないの?
2017/08/28(月) 20:44:54.60ID:waEfFbH1
gmpというパッケージがあったので使ってみた。

メルセンヌ素数算出のスクリプトを組んでみた
2^n-1 で n < 10000のとき

is.prime <- function(n){
i=2
while(i <= ceiling(sqrt(n)) && n%%i){
i=i+1
}
if(n>i && !n%%i) return(FALSE)
else return(TRUE)
}

library('gmp')

primes <- function(n){
xx=c(2,seq(3, n, by=2))
xx[sapply(xx,is.prime)]
}
N=10000
p = primes(N)
M = as.bigz(2)^p - 1
p[isprime(M)>0]

>p[isprime(M)>0]
[1] 2 3 5 7 13 17 19 31 61 89 107 127 521 607 1279
[16] 2203 2281 3217 4253 4423 9689 9941
2017/08/29(火) 00:26:34.49ID:hc5LENHz
Rって何のための言語だっけ
61132人目の素数さん
垢版 |
2017/08/29(火) 00:33:01.32ID:H3vsxGlL
Sのフリー版
62132人目の素数さん
垢版 |
2017/08/29(火) 02:25:16.29ID:Dd6KiNrk
Rに親を殺されたマンはよ
2017/08/29(火) 04:56:27.80ID:TbkIY/Vo
2017/08/29(火) 04:56:46.76ID:TbkIY/Vo
2017/08/29(火) 04:57:05.09ID:TbkIY/Vo
2017/08/29(火) 04:57:24.20ID:TbkIY/Vo
2017/08/29(火) 04:57:43.10ID:TbkIY/Vo
2017/08/29(火) 04:58:02.49ID:TbkIY/Vo
2017/08/29(火) 04:58:23.65ID:TbkIY/Vo
2017/08/29(火) 04:58:44.27ID:TbkIY/Vo
2017/08/29(火) 04:59:03.74ID:TbkIY/Vo
2017/08/29(火) 04:59:22.59ID:TbkIY/Vo
2017/08/29(火) 11:36:27.20ID:uQrlExl4
>>60
貧乏人のためのデータプログラミング言語
2017/08/29(火) 12:03:33.07ID:TbkIY/Vo
2017/08/30(水) 04:33:42.82ID:xZ8twSlP
2017/08/30(水) 04:34:00.30ID:xZ8twSlP
2017/08/30(水) 04:34:17.96ID:xZ8twSlP
2017/08/30(水) 04:34:35.92ID:xZ8twSlP
2017/08/30(水) 04:34:53.84ID:xZ8twSlP
2017/08/30(水) 04:35:11.78ID:xZ8twSlP
2017/08/30(水) 04:35:29.01ID:xZ8twSlP
2017/08/30(水) 04:35:46.61ID:xZ8twSlP
2017/08/30(水) 04:36:05.83ID:xZ8twSlP
2017/08/30(水) 21:00:36.30ID:XCGWMXRG
荒らし(◆2VB8wsVUoo)の正体は元筑波大学准教授で数学者の増田哲也。
増田哲也は2007年に痴漢で逮捕され、精神を病んで2ch数学板を荒らすようになった。
自ら増田哲也とカミングアウトしている。父は植物学者の増田芳雄。
荒らしが酷く、数学板で専用スレが10スレ以上立てられた。
↓確認できる最初のスレ
http://science6.2ch.net/test/read.cgi/math/1243605006/


 ■徳島で痴漢の准教授を解雇 筑波大 (2007年8月5日 毎日新聞)
徳島県警阿南署などは5日未明、東京都足立区千住寿町、筑波大学准教授、増田哲也容疑者(50)を
県迷惑行為防止条例違反(痴漢行為)容疑で逮捕した。

調べでは、増田容疑者は、4日午後4時20分ごろから約50分にわたり、JR牟岐線の列車内で、県内の
専門学校生の女性(21)の胸や太ももなどを触った疑い。調べに対し、「夏休み期間に、講演活動を兼ね
て旅行していた。好みの女性だったのでムラムラした」と話しているという。
http://science6.2ch.net/test/read.cgi/math/1262704792/


もともとは「狢」や「猫」、「狸」などと名乗っていた。トリップも変わっている。
http://wc2014.2ch.net/test/read.cgi/math/1384592236/
増田哲也→猫◆→狢◆→狸◆


☆数学コテ紹介☆

・猫
本名、増○哲也。筑波大准教授の頃、徳島で痴漢をやらかし職を失う。
それを期に数学界から身を引いた(←アフォー)。
逮捕されてからは精神を病み、2ch荒らしが生きがいとなった。また父の芳雄に虐待されたと思い込んでいる。
もともとは大数学者アラン・コンヌに直々教えを乞うていたほどのやり手(らしい)。
数々のお涙頂戴昔話には定評あり。本人曰く「しつこさ」のみが自身の売りなのだそう。
馬鹿を煽って2ch潰しをしているのだそう。規制されてもプロバイダーを変えて復活する。
最近、院生disが激しい。日本語、英語、フランス語をしゃべる。だが、猫語はしゃべらない。
率直に言って、客観的に人生を無駄に過ごしている希ガスる。
2ch潰しどころか数学板さえ潰すことの出来ないでいる希ガスる。
作戦倒れしている希ガスる。
でも本人はなんとも思ってないんだろうな。哀れ。哀れ。哀れ。
85132人目の素数さん
垢版 |
2017/09/02(土) 12:47:15.63ID:3V8qFOPU
耳栓をしたら世界が変わってワロタ
2017/09/02(土) 13:20:51.69ID:z17/uuYO
2017/09/02(土) 15:52:21.39ID:z17/uuYO
2017/09/02(土) 19:54:32.55ID:MGAE+mBM
2017/09/02(土) 23:31:02.19ID:MGAE+mBM
2017/09/03(日) 11:06:09.04ID:TZkGcAET
2017/09/03(日) 14:15:50.87ID:TZkGcAET
2017/09/03(日) 20:37:27.93ID:TZkGcAET
2017/09/04(月) 02:38:55.34ID:xP4OelQr
2017/09/04(月) 09:59:51.49ID:ZYM7kfu0
耳栓をしたら世界が変わってワロタ
2017/09/04(月) 10:34:11.34ID:xP4OelQr
96132人目の素数さん
垢版 |
2017/09/04(月) 10:42:05.51ID:ZYM7kfu0
耳栓をしたら世界が変わってワロタ
2017/09/04(月) 10:42:22.86ID:xP4OelQr
98132人目の素数さん
垢版 |
2017/09/04(月) 10:48:55.99ID:ZYM7kfu0
耳栓をしたら世界が変わってワロタ
2017/09/04(月) 10:49:35.67ID:xP4OelQr
2017/09/04(月) 12:08:42.71ID:xP4OelQr
2017/09/04(月) 12:08:59.34ID:xP4OelQr
2017/09/04(月) 12:09:16.89ID:xP4OelQr
2017/09/04(月) 12:09:33.74ID:xP4OelQr
2017/09/04(月) 12:09:50.50ID:xP4OelQr
2017/09/04(月) 12:10:05.82ID:xP4OelQr
2017/09/04(月) 12:10:27.40ID:xP4OelQr
2017/09/04(月) 12:10:59.15ID:xP4OelQr
2017/09/04(月) 12:11:16.36ID:xP4OelQr
109132人目の素数さん
垢版 |
2017/09/05(火) 06:09:36.65ID:PCfG056b
耳栓をしたら世界が変わってワロタ
2017/09/19(火) 11:14:27.03ID:MBqwivnT
Reduce何て便利な関数が標準装備されていたんだな。

?Reduce
Reduce("+", c(1,2,3,4))
Reduce("+", c(1,2,3,4), accumulate = TRUE)
cumsum(c(1,2,3,4))
factorial(4)
Reduce('*',c(1,2,3,4))
Reduce("*", c(1,2,3,4), accumulate = TRUE)
cumprod(c(1,2,3,4))

Reduce("*", c(1,2,3,4), accumulate = TRUE,right=TRUE)
rev(Reduce("*", c(1,2,3,4), accumulate = TRUE,right=TRUE))
cumprod(rev(c(1,2,3,4)))
2017/09/21(木) 19:43:24.15ID:KStrV4aS
96歳の女性をお看取り。肺も心臓も腎臓も機能低下していたが、年齢を考慮して死因は老衰にした。ふと96歳の平均余命はどれくらいかが気になって平成27年簡易生命表(女)を調べてみた。
http://www.mhlw.go.jp/toukei/saikin/hw/life/life15/dl/life15-07.pdfこういう表をみると自分で計算してみたくなる。諸関数の定義が厚労省の参考資料で解説されているのでRが使えれば計算は容易(ド底辺特殊シリツ医大卒には無理)

## 10万人あたりの死亡数から平均余命を算出
f=c(178,31,20,12,8,8,8,8,7,7,7,7,7,7,8,10,12,13,15,16,17,18,20,21,23,24,25,27,29,
30,31,32,34,37,39,41,43,46,50,56,62,68,73,79,86,94,103,113,123,134,145,159,174,
188,202,215,226,237,251,269,292,319,346,372,401,435,472,510,553,602,661,727,799,
870,952,1053,1180,1331,1503,1698,1914,2153,2419,2708,3011,3320,3628,3926,4227,
4513,4743,4896,4937,4867,4678,4385,4004,3557,3069,2567,2077,1623,1220,880,608,
960)
m=c(201,32,23,15,11,10,10,10,9,8,7,7,8,11,14,17,22,27,33,39,44,47,50,52,53,54,54,
54,54,56,58,59,62,65,70,73,76,79,85,93,103,113,122,131,145,159,176,195,215,237,
259,285,311,341,374,412,451,490,528,572,625,692,767,842,919,1002,1084,1166,1254,
1349,1452,1562,1668,1764,1875,2015,2182,2375,2586,2806,3038,3280,3506,3709,3887,
4024,4089,4088,4037,3944,3803,3555,3243,2887,2507,2122,1749,1403,1095,829,609,
434,298,198,127,180)

LE <-function(ndx,Y,N0=10^5){
n=length(ndx)
lx=numeric(n)
lx[1]=N0
for(i in 1:(n-1))
lx[i+1] <- lx[i] - ndx[i]
nqx=ndx/lx
nLx=numeric(n)
for(i in 1:n)
nLx[i] <- mean(c(lx[i],lx[i+1]))
nLx[n]=0
Tx=rev(cumsum(rev(nLx)))
le=Tx/lx
return(round(le[Y+1],1))
}
2017/09/21(木) 19:43:57.06ID:KStrV4aS
>>356
実行すると
> LE(f,96)
[1] 3.4
96歳女性の平均余命は3年以上あるらしい。
死因は多臓器不全にする方が正しかったのだろうか?

> LE(m,100)
[1] 2.1

参考資料1 生命表諸関数の定義
http://www.mhlw.go.jp/toukei/saikin/hw/life/life15/dl/life15-08.pdf
に寿命中位数というのが定義されている。
半減期にあたる寿命中位数も計算してみた。グラフであたりをつけて内挿してもとめた。
手計算は面倒なのでRで線形回帰
x=c(89,90)
y=c(nLx[89+1],nLx[90+1]) # y = a + b*x
coef=lm(y~x)$coef
round((50000-coef[1])/coef[2],1) # 寿命中位数

> round((50000-coef[1])/coef[2],1) # 寿命中位数
89.3

参考資料中の解説

 我が国は、「平均寿命<寿命中位数」となっている。


が確認できた。

待機時間の多い職場だと、ふとした疑問をネットで調べて自分で勉強できて( ・∀・)イイ!!
ド底辺特殊シリツ医大卒のネット検索後の学習結果は>119を参照。
2017/09/21(木) 20:07:38.28ID:g2Q4cSI1
どうでもいいけど、平成27年は完全生命表の年なのに、
なぜわざわざ簡易生命表を使うの?
2017/09/23(土) 10:32:52.85ID:w2Jlt/XH
>>111
5〜6年ほど前にやってたな。

生命表と幾何ブラウン運動に基づく株価のモンテカルロシミュレーションで、今の貯蓄で死ぬまでにお金を使い切る確率を計算するの。
2017/09/23(土) 19:46:43.88ID:lDVqqHRb
>>113
公表されていればurl希望
2017/09/23(土) 21:22:11.76ID:Kb5kBoaF
>>115
第22回生命表(完全生命表)
ttp://www.mhlw.go.jp/toukei/saikin/hw/life/22th/index.html
2017/09/23(土) 21:24:44.71ID:Kb5kBoaF
なお、最新版の平成28年の簡易生命表はこちら
ttp://www.mhlw.go.jp/toukei/saikin/hw/life/life16/index.html
2017/09/24(日) 06:09:40.57ID:5AI1PnF/
>>117
>>116
ありがとうございました。
2017/09/24(日) 11:13:15.02ID:o6BLfmLi
>>116
## 第22回生命表(完全生命表)
#http://www.mhlw.go.jp/toukei/saikin/hw/life/22th/index.html

F=c(178,32,20,12,8,8,8,8,7,7,7,7,7,7,8,10,12,13,15,16,17,19,20,22,23,24,25,27,28,30,31,32,34,36,39,41,42,45,50,56,
62,68,73,79,85,94,104,114,124,134,145,159,174,189,202,215,226,237,250,268,291,318,346,372,399,433,471,511,554,603,662,729,802,874,954,1053,1180,1332,1505,1699,1909,2143,2409,2701,3004,3310,3622,3938,4253,4531,4757,4918,5025,
5024,4876,4598,4132,3594,3025,2464,1941,1477,1085,769,525,345,217,132,76,42,22,11,5,2,1,0)

M=c(202,34,24,16,11,10,10,10,9,8,7,7,8,11,13,17,21,26,32,39,45,49,51,53,55,55,54,54,54,56,57,59,61,65,69,73,75,78,
84,93,103,113,122,131,144,159,176,195,215,236,257,283,310,340,373,411,450,488,525,568,620,688,764,839,910,994,
1081,1166,1256,1349,1450,1561,1675,1776,1885,2021,2185,2377,2594,2819,3046,3279,3504,3714,3900,4043,4116,4127,
4080,3973,3810,3580,3302,2967,2567,2123,1718,1352,1034,768,554,387,262,171,108,66,39,22,12,6,3,2,1)

LE <-function(ndx,Y,N0=10^5){
n=length(ndx)
lx=numeric(n)
lx[1]=N0
for(i in 1:(n-1))
lx[i+1] <- lx[i] - ndx[i]
nqx=ndx/lx
nLx=numeric(n)
for(i in 1:n)
nLx[i] <- mean(c(lx[i],lx[i+1]))
nLx[n]=0
Tx=rev(cumsum(rev(nLx)))
le=Tx/lx
return(round(le[Y+1],2))
}
2017/09/24(日) 11:15:06.76ID:o6BLfmLi
>>117
最新版の平成28年の簡易生命表はこちら
f=c(198,29,19,12,9,7,7,6,5,6,6,7,7,7,8,9,11,12,13,14,16,19,22,24,25,25,25,25,25,26,28,29,31,34,37,41,45,48,50,54,59,66,72,78,84,92,101,112,123,136,149,162,175,186,196,207,220,237,256,275,294,313,334,360,
389,423,463,504,547,595,649,707,776,855,940,1043,1164,1308,1479,1667,1874,2102,2363,2651,2955,3265,3567,3874,4186,4484,4731,4908,5039,5067,4936,4635,4209,3697,3139,2574,2037,1554,1141,805,545,846)
m=c(194,31,21,14,10,9,9,8,7,7,7,7,8,10,13,17,21,26,31,38,44,48,50,51,51,51,53,53,54,56,57,58,60,63,66,70,74,79,83,89,97,106,116,127,140,155,171,190,211,233,255,278,302,328,359,395,434,478,525,572,622,
678,741,813,890,973,1062,1148,1233,1323,1419,1522,1633,1752,1874,2014,2176,2357,2553,2762,2985,3221,3459,3680,3875,4031,4123,4156,4123,4023,3874,3643,3349,3006,2629,2235,1843,1470,1131,837,593,401,258,157,89,90)
LE <-function(ndx,Y,N0=10^5){
n=length(ndx)
lx=numeric(n)
lx[1]=N0
for(i in 1:(n-1))
lx[i+1] <- lx[i] - ndx[i]
nqx=ndx/lx
nLx=numeric(n)
for(i in 1:n)
nLx[i] <- mean(c(lx[i],lx[i+1]))
nLx[n]=0
Tx=rev(cumsum(rev(nLx)))
le=Tx/lx
return(round(le[Y+1],1))
}
LE(f,96)
LE(m,100)

> LE(f,96) # 96歳女性の平均余命
[1] 3.3

> LE(m,100) #100歳男性の平均余命
[1] 1.9

微妙に結果が違うな。
2017/09/27(水) 06:38:20.99ID:DzhNz5Oe
ド底辺特殊シリツ医大に
http://egg.2ch.net/test/read.cgi/hosp/1506113587/142
のようなスカトロ嗜好の医者がいるかを
1学年100人として無作為の順序で調査していき該当者が1人発見されたら調査終了とするという方法で調査する。
1例目が該当者であった。
この学年のスカトロ嗜好数の期待値を求めよ。
2017/09/27(水) 06:39:04.84ID:DzhNz5Oe
lottery <- function(.N,.r,k=10^4){
f <-function(S,N=.N){
y=c(rep(1,S),rep(0,N-S))
Y=sample(y)
return(Y)
}
g <- function(y){
n=length(y)
for(i in 1:n){
if(!y[i]) i=i+1
else break
}
return(i)
}

xx=0:.N
SS=NULL
for(i in 1:k){
M=t(sapply(xx,f))
for(j in 1:.N){
if(g(M[j,])==.r) SS=c(SS,j-1)
}
}
print(quantile(SS,c(.025,.05,.50,.95,.975)))
c(mean=mean(SS))
}
lottery(100,1)
2017/09/27(水) 06:39:43.99ID:DzhNz5Oe
> lottery(100,1)
2.5% 5% 50% 95% 97.5%
16 22 70 97 98
mean
66.31167
2017/10/02(月) 22:03:04.10ID:jTVePLTX
lottery <- function(.N,.r,k=10^3){
f <-function(S,N=.N){
y=c(rep(1,S),rep(0,N-S))
Y=sample(y)
return(Y)
}
g <- function(y){
n=length(y)
for(i in 1:n){
if(!y[i]) i=i+1
else break
}
return(i)
}

xx=0:.N
SS=NULL
for(i in 1:k){
M=t(sapply(xx,f))
for(j in 1:(.N+1)){
if(g(M[j,])==.r) SS=c(SS,j-1)
}
}
print(quantile(SS,c(.025,.05,.50,.95,.975)))
c(mean=mean(SS))
}
lottery(100,1)
125132人目の素数さん
垢版 |
2017/10/06(金) 08:15:11.45ID:zRAj2AHB
Linux版のRでもWindows版みたいに「入力:青字、出力:赤字」みたいなインターフェースにする設定ってある?
2017/10/06(金) 19:21:19.13ID:nz6qypJh
>>125
coloroutパッケージ入れて、色を割り当てるとできるかも。
アーカイブに入っちゃっているけど、使える。
setOutputColors256()のヘルプを参照。
2017/10/07(土) 05:15:49.03ID:8eYDySnN
version 3.4.2になってた。
2017/10/07(土) 09:49:05.80ID:dws8gMbB
順番を表示させる、*1st,*2nd *3rd
> n=21
> paste(n,ifelse(0<n%%10 && n%%10<4,c('st','nd','rd')[which(n%%10==1:3)],'th'),sep='')
[1] "21st"
2017/10/07(土) 17:31:13.11ID:O5mMfwME
>>128
それだと、11が11stになっておかしいだろ

> library(toOrdinal)
> toOrdinal(21)
[1] "21st"
> sapply(1:20, toOrdinal)
[1] "1st" "2nd" "3rd" "4th" "5th" "6th" "7th" "8th" "9th" "10th"
[11] "11th" "12th" "13th" "14th" "15th" "16th" "17th" "18th" "19th" "20th"
2017/10/07(土) 18:11:16.60ID:lKxjyQqB
11,12,13だけ除外かな
2017/10/07(土) 22:26:53.02ID:W9vNhGzr
>>128
なんでそこで && を使うかなあ。&& の意味わかってる?
ifelse には & を使うことになるのが普通だし、そうでなければ if 〜 else のほうがよい。
2017/10/08(日) 10:13:32.31ID:68bFYZIH
>>129
ご指摘とパッケージの御教示ありがとうございました。
2017/10/08(日) 10:15:36.51ID:68bFYZIH
>>131
?&で勉強になりました。
御教示ありがとうございました。
2017/10/08(日) 10:55:49.38ID:LDCLz3bM
>>130
toOrdinal のコードをみたら 11,12,13は別扱いしてあった。

if (tmp %in% c("11", "12", "13"))
tmp.suffix <- "th"
2017/10/08(日) 11:36:14.74ID:LDCLz3bM
legendの中で使うべくone-linerにしたかったのだけど、ここでの指摘に従ってデバッグしたら

paste(n,ifelse(as.character(n%%100)%in%c('11','12','13'),'th',ifelse(0<n%%10 & n%%10<4,c('st','nd','rd')[which(n%%10==1:3)],'th')),sep='')

こんなに長くなってしまった。

> f<-function(n)paste(n,ifelse(as.character(n%%100)%in%c('11','12','13'),'th',
+ ifelse(0<n%%10 & n%%10<4,c('st','nd','rd')[which(n%%10==1:3)],'th')),sep='')
> prod(sapply(0:10000,f) == sapply(0:10000,toOrdinal::toOrdinal))
[1] 1

一応、パッケージtoOrdinalと0〜1万で合致を確認。

いろいろとご助言ありがとうございました。 <(_ _)>ペコリ
2017/10/08(日) 11:55:19.96ID:68bFYZIH
パチンコのスレにこういう記載があった。

>バカは何故かパチンコで勝てると思い込んでいる
>バカは本来なら勝てるのに遠隔や不正で負けていると思い込んでいる
>バカは10分の1で10円が当たるクジより1万分の1で8000円が当たるクジの方が儲かると思ってる
>算数すらできないバカが必死に守って支えてきたのがパチンコ業界

これを読んでこんな問題を考えてみた。

宝くじAは1000本中100本が当たりで当たりは 100万円の賞金、

宝くじBは1000本中 10本が当たりで当たりは1000万円の賞金、

どちらも売り出し価格は同じなので計100本買うことにする。

Aを何本買うときに賞金の期待値が最大になるか、シミュレーションしてみよ。
2017/10/08(日) 17:27:30.39ID:d4HM/FAz
分散が変わる?
2017/10/08(日) 20:42:24.71ID:LDCLz3bM
シミュレーションすると

Na=1000 ; Nb=1000 # くじの本数
pa=0.1 ; pb=0.01 # 当たる確率
Wa=100 ; Wb=1000 # 賞金
n=100 # 買う総本数
aa=0:n # 宝くじAを買う候補
A0=c(rep(1,Na*pa),rep(0,Na-Na*pa)) # 宝くじA 1:当たり 0:はずれ
B0=c(rep(1,Nb*pb),rep(0,Nb-Nb*pb)) # 宝くじB

Get <- function(a){ #Aをa本買ったときのAの当たりとBのあたりでの賞金合計
sum(sample(A0,a))*Wa + sum(sample(B0,n-a))*Wb
}
k=10^3 #繰り返し回数
MAX=replicate(k,which.max(sapply(aa,Get))-1) # 賞金合計が最大になるAの購入数の配列
hist(MAX)

期待値がA,BでかわらないからMAXの分布は一様分布になると思ったのだが、

こんな分布になってしまって自分でも混乱している。

http://i.imgur.com/Yo55mvc.png

お知恵を拝借したい。
2017/10/08(日) 22:12:35.95ID:COe73DTR
よくわからん。rbinomとか使えば?
2017/10/08(日) 22:47:20.08ID:7IiqlruN
>>139
俺もそう思った
2017/10/08(日) 23:23:18.27ID:7IiqlruN
自分なら、こんな感じ
> a <- function(i){sum(rbinom(i, 1, 0.1) * 100) + sum(rbinom(100-i, 1, 0.01) * 1000)}
> b <- function(){which.max(sapply(1:100, a))}
1000回のシミュレーションだと
> res <- replicate(1000, b())
> hist(res)
同じ結果だよ
2017/10/08(日) 23:29:05.07ID:7IiqlruN
A, Bを少なくとも1本含む100本じゃなかったので、
> b <- function(){which.max(sapply(1:100, a))}

> b <- function(){which.max(sapply(0:100, a))}
だな。すまん
> a <- function(i){sum(rbinom(i, 1, 0.1) * 100) + sum(rbinom(100-i, 1, 0.01) * 1000)}
> b <- function(){which.max(sapply(0:100, a))}
> res <- replicate(1000, b())
> hist(res,breaks = 20)
結果は同じ
2017/10/09(月) 00:19:33.56ID:1+Fkporl
>139-142

簡潔なコードありがとうございます。

AもBも賞金の期待値がどちらも10万なので
Aを何本買おうが合計の期待値は同じかなと思いつつ、sample関数を使ってシミュレーションしたのだけれど
一様分布にはならないのでシミュレーションの間違い、
もしくは自分が理解していないsample関数の特性を検出しただけなのか、と思っておりました。
rbinomでのシミュレーション結果とヒストグラムが一致して、一様分布になるという思い込みが間違いだと確信できました。

勉強になりました。ありがとうございました。
2017/10/09(月) 00:27:22.71ID:1+Fkporl
>>142
大したことではないけど

0から始まるので本数とindexを補正して

b <- function(){which.max(sapply(0:100, a))-1}

の方が正確だと思います。
2017/10/09(月) 01:00:19.99ID:iikzqEdl
合計の期待値の標準偏差はAの本数が増えると減るね
2017/10/09(月) 01:05:40.45ID:1+Fkporl
宝くじをA,B併せて100本買ったときの賞金の期待値は

Award <- function(i){ #i:Aを買った本数
sum(dbinom(0:i,i,0.1)*(0:i)*100)+sum(dbinom(0:(100-i),100-i,0.01)*(0:(100-i))*1000)
}
sapply(0:100,Award)

> sapply(0:100,Award)
[1] 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
....
[86] 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000

と買い方に無関係にも思えるんだなぁ。
2017/10/09(月) 02:00:05.31ID:1+Fkporl
>>145
>合計の期待値の標準偏差はAの本数が増えると減る
ことを検証してみた。

a <- function(i) sum(rbinom(i, 1, 0.1) * 100) + sum(rbinom(100-i, 1, 0.01) * 1000)
plot(0:100,sapply(0:100,function(x) sd(replicate(10^3,a(x)))))

http://i.imgur.com/oPFtMXe.png
2017/10/09(月) 06:15:43.03ID:1+Fkporl
別の話題提供。

 ゴルゴ13は100発100中

 ゴルゴ14は10発10中

 ゴルゴ15は1発1中

とする。

各々10000発撃ったとき各ゴルゴの命中数の期待値はいくらか?
2017/10/09(月) 15:22:52.36ID:di3eoSv3
どうでもいいんだが、
which.max()は、同値の最大が複数あったとき、最初のインデックスを戻すので、
2番目以降の最大が無視されていることについて、その取り扱いを考慮した方が良いと思うぞ。
> which.max(c(0,1,0,0,0,0,0,0,1))
[1] 2
2017/10/09(月) 17:42:12.61ID:1+Fkporl
>>149
ご指摘ありがとうございます。

最大値を与えるAの購入数が複数ある場合を考えてスクリプトを改変してみました。

a <- function(i){sum(rbinom(i, 1, 0.1) * 100) + sum(rbinom(100-i, 1, 0.01) * 1000)}
which.max2 <- function(x){which(x==max(x))-1}
b <- function(){
b1=NULL
b1=c(b1,which.max2(sapply(0:100, a)))
return(b1)
}
b2=NULL
for(j in 1:1000){
b2=c(b2,b())
}
hist(b2,breaks=20)
2017/10/09(月) 19:43:31.10ID:1+Fkporl
length(b2)

とすると1000を超えているから同値の最大が複数あったことがわかりました。

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

このスレは勉強になるなぁ。
2017/10/09(月) 22:05:49.50ID:1+Fkporl
どうでもいいことだけど、

hist(b2,breaks=20,col=sample(colors(),2))

とすると毎回配色の変わるツートンカラーのヒストグラムがでて面白い。
153132人目の素数さん
垢版 |
2017/10/10(火) 18:01:18.51ID:S7i/7cX1
>>126
125です。レス遅くなったけど、やりたいことができました。ありがとう。
154132人目の素数さん
垢版 |
2017/10/11(水) 20:55:10.55ID:DiiGwH6/
array(1:48, dim=c(6, 4, 2))
を,3行2列おきに平均して
,,1
[,1] [,2]
[1,] 5 17
[2,] 8 20
,,2
[,1] [,2]
[1,] 29 41
[2,] 32 44
としたいんですが,効率的な方法はないでしょうか。
実際のデータは,10000x10000x400なんです。
2017/10/11(水) 22:16:13.22ID:bFq2a2U4
>>154
>3行2列
さっぱりわからん。
例えば、結果の[1,1,1]の5は、どれとどれの平均?
2017/10/11(水) 22:25:55.39ID:HJHHXjdz
>>155
6行4列の左上の6つ1,2,3,7,8,9の平均5だと思う。
2017/10/11(水) 22:59:20.81ID:HJHHXjdz
>>154
効率的かどうかはわからんが、やってみた

(d=array(1:48, dim=c(6, 4, 2)))

a=3
b=2
l=6
m=4
n=2

re=NULL
for(k in 1:n){
for(j in 1:(m/b)){
for(i in 1:(l/a)){
re=append(re,mean(d[1:3+3*(i-1),1:2+2*(j-1),k]))
}
}
}
array(re,dim=c(m/b,l/a,n))
158132人目の素数さん
垢版 |
2017/10/11(水) 23:00:23.97ID:UQm0Ph1Q
>>155
>>154です。
説明が悪くてすみません。
>>156の通りです。
159132人目の素数さん
垢版 |
2017/10/11(水) 23:02:02.80ID:UQm0Ph1Q
>>157
ありがとうございます。
手元にデータがないので明日試してみます。
2017/10/11(水) 23:02:32.81ID:bFq2a2U4
なるほど、じゃあその5,8,17,20はこういうことか。
> a <- array(1:48, dim=c(6, 4, 2))
> b <- expand.grid(1:(dim(a)[1] %/% 3), 1:(dim(a)[2] %/% 2))
> f <- function(i, j, k=1){mean(a[(3*i-2):(3*i),(2*j-1):(2*j),k])}
> mapply(f, b[,1], b[,2])
[1] 5 8 17 20
2017/10/11(水) 23:04:06.69ID:bFq2a2U4
あぁ、すでに >>157 が回答を書いていたorz
2017/10/11(水) 23:06:59.19ID:HJHHXjdz
> d=array(1:48, dim=c(6, 4, 2))

> a=3
> b=2
> l=6
> m=4
> n=2
> re=NULL
> for(k in 1:n){
+ for(j in 1:(m/b)){
+ for(i in 1:(l/a)){
+ re=append(re,mean(d[1:a+a*(i-1),1:b+b*(j-1),k]))
+ }
+ }
+ }
> array(re,dim=c(m/b,l/a,n))
, , 1

[,1] [,2]
[1,] 5 17
[2,] 8 20

, , 2

[,1] [,2]
[1,] 29 41
[2,] 32 44

データは10000x10000x400なら
l=10000
m=10000
n=400
でよくね?
2017/10/12(木) 07:10:38.11ID:2sFs7Gsb
最初の1行で

> d=array(1:(10000*10000*400))
Error: cannot allocate vector of size 298.0 Gb

エラーがでたw
2017/10/12(木) 07:12:09.84ID:2sFs7Gsb
正しいエラーwはこっち

> d=array(1:(10000*10000*400),dim=c(6, 4, 2))
Error: cannot allocate vector of size 298.0 Gb
2017/10/12(木) 07:21:02.01ID:2sFs7Gsb
そもそも、10000x10000x400だと10000行は3行にならないな。最終行を無視して9999行にするのかな?
2017/10/12(木) 14:48:46.91ID:sG1WSodN
>160を参考に>157のforだらけのスパゲティー・ソースを(ちょっと一般化して)改変しました。
(変数名の重複を避けるため>160の変数名は変更してあります。)

> a=3
> b=2
> c=1
>
> l=6
> m=4
> n=2
>
> A <- array(1:48, dim=c(l,m,n))
> B <- expand.grid(1:(l %/% a), 1:(m %/% b),1:(n %/% c))
> f <- function(i, j, k){mean(A[(a*(i-1)+1):(a*i),(b*(j-1)+1):(b*j),(c*(k-1)+1):(c*k)])}
> re=mapply(f, B[,1], B[,2],B[,3])
> array(re,dim=c(m%/%b,l%/%a,n%/%c))
, , 1

[,1] [,2]
[1,] 5 17
[2,] 8 20

, , 2

[,1] [,2]
[1,] 29 41
[2,] 32 44

>

上級者のコードを読むのは勉強になります。(深謝)
167132人目の素数さん
垢版 |
2017/10/12(木) 16:33:51.03ID:f/ETd6de
先輩方,>>154です。
巨細にわたってご教示・ご議論いただきありがとうございました。
>>166のコードを参考にして,無事処理することができました。
実行速度も申し分なく,効率的に作業が進められそうです。
今回は私には目から鱗な解法で,勉強になりました。
質問して良かったと思っています。。本当にありがとうございました。

10,000行の扱いですが,3行ごとに処理して1行無視してもよいし,
4から7行程度で処理してもよく,フレキシブルです。
今回は4行にして余りなしにしました。
2017/10/12(木) 18:43:54.51ID:2sFs7Gsb
処理速度を比べてみた。

fs<-function(){ #スパゲッティ・ソース
d=array(1:(l*m*n),dim=c(l,m,n))
re=NULL
for(k in 1:(n/c)){
for(j in 1:(m/b)){
for(i in 1:(l/a)){
re=append(re,mean(d[1:a+a*(i-1),1:b+b*(j-1),1:c+c*(k-1)]))
}}}
array(re,dim=c(m/b,l/a,n))
}

fe <- function(){ # Expertソース
A <- array(1:(l*m*n), dim=c(l,m,n))
B <- expand.grid(1:(l %/% a), 1:(m %/% b),1:(n %/% c))
f <- function(i, j, k){mean(A[(a*(i-1)+1):(a*i),(b*(j-1)+1):(b*j),(c*(k-1)+1):(c*k)])}
re=mapply(f, B[,1], B[,2],B[,3])
array(re,dim=c(m%/%b,l%/%a,n%/%c))
}

a=4
b=2
c=1
l=400
m=200
n=2

> system.time(fs())
user system elapsed
2.17 0.00 2.18
> system.time(fe())
user system elapsed
1.14 0.00 1.14

>160氏のスキルに改めて感服。
2017/10/14(土) 23:02:55.66ID:WIgy7a2M
# 既約剰余類群 (Z/nZ)*
kjrg <- function(n){
nn=0:(n-1)
f=function(x,y) (x*y)%%n
names(nn)=paste0('n',nn)
z=outer(nn,nn,f)
idx=which(gmp::gcd(1:(n-1),n)==1)+1
return(z[idx,idx])
}
kjrg(10)
kjrg(15)
kjrg(24)
> kjrg(24)
n1 n5 n7 n11 n13 n17 n19 n23
n1 1 5 7 11 13 17 19 23
n5 5 1 11 7 17 13 23 19
n7 7 11 1 5 19 23 13 17
n11 11 7 5 1 23 19 17 13
n13 13 17 19 23 1 5 7 11
n17 17 13 23 19 5 1 11 7
n19 19 23 13 17 7 11 1 5
n23 23 19 17 13 11 7 5 1
2017/10/15(日) 13:21:32.63ID:GlVyhxtn
# 既約剰余類群での加減乗除
n=24
n_star=which(gmp::gcd(1:(n-1),n)==1) ; n_star
tasu <- function(x,y) (x+y)%%n
hiku <- function(x,y) (x-y)%%n # row - col
kake <- function(x,y) (x*y)%%n
g=function(x) n_star[which(x==1)]
.M=outer(n_star,n_star,kake)
G=apply(.M,2,g)
gyaku <- function(x) n_star[which(G==(x%%n))]
waru <- function(x,y) (x*gyaku(y))%%n # row ÷ col

xx=yy=c(0,n_star)
names(xx)=paste0('x',c(0,n_star))
names(yy)=paste0('y',c(0,n_star))
outer(xx,yy,tasu) # x + y
outer(xx,yy,hiku) # x - y
outer(xx,yy,kake) # x * y
X=Y=n_star #outer(X,Y,waru) # WRONG!!
a=expand.grid(X,Y)
b=matrix(mapply(waru,a[,1],a[,2]),length(X))
rownames(b)=paste0('x',n_star)
colnames(b)=paste0('y',n_star)
b # x / y
2017/10/15(日) 14:03:02.02ID:GlVyhxtn
名前も一致してidenticalなんだな。
> x=1:10
> y=1:10
> identical(x,y)
[1] TRUE
> names(x)=LETTERS[1:10]
> identical(x,y)
[1] FALSE
> names(y)=LETTERS[1:10]
> identical(x,y)
[1] TRUE
> names(y)=letters[1:10]
> identical(x,y)
[1] FALSE

allの方は内容の全体が一致していれば順番は入れ替わってもTRUEなんだな。
> x=1:10
> y=1:10
> all(x,y)
[1] TRUE
> names(x)=LETTERS[1:10]
> all(x,y)
[1] TRUE
> names(y)=letters[1:10]
> all(x,y)
[1] TRUE
> all(x,sample(y))
[1] TRUE
2017/10/16(月) 01:11:00.56ID:NsB0m+v3
beki <- function(x,n,p){ # x^n%%p
if(n==0) return(1)
if(n==1) return(x%%p)
re=numeric(n)
re[1]=x
for(i in 1:(n-1)) re[i+1] = (x*re[i])%%p
return(re[n])
}

p=1009 # フェルマーの小定理
xx=0:(p-1)
n=p-1
y=sapply(xx,function(x)beki(x,n,p))
summary(y)
2017/10/16(月) 07:46:39.05ID:NsB0m+v3
90歳女性のお看取り

>120のコードから女性の平均余命をグラフにしてみた
Age=85:105
(Life_Expectancy=sapply(Age,function(x) LE(f,x)))
plot(Age,Life_Expectancy,pch=19,col=sample(colors()))
abline(h=5,col='gray',lty=2)

http://i.imgur.com/38x50fw.png

平均余命が5年を切るのは92歳なので、老衰にせずに
主治医指定の病名で診断書を作成。
カルテ記載のしっかりした患者の診療は負担なくこなせて(・∀・)イイ!!
2017/10/16(月) 22:16:44.56ID:ACageh59
outerって使えない場面があるよね?
剰余系での加減乗除での実際
> n=5 # prime number
> nn=1:(n-1)
> tasu <- function(x,y) (x+y)%%n
> hiku <- function(x,y) (x-y)%%n # row - col
> kake <- function(x,y) (x*y)%%n
> g=function(x) nn[which(x==1)]
> .M=outer(nn,nn,kake)
> G=apply(.M,2,g)
> gyaku <- function(x) nn[which(G==(x%%n))]
> waru <- function(x,y) (x*gyaku(y))%%n # row / col
> waru(3,2)
[1] 4
> xx=yy=c(0,nn)
> names(xx)=paste0('x',c(0,nn))
> names(yy)=paste0('y',c(0,nn))
> outer(xx,yy,tasu) # x + y
y0 y1 y2 y3 y4
x0 0 1 2 3 4
x1 1 2 3 4 0
x2 2 3 4 0 1
x3 3 4 0 1 2
x4 4 0 1 2 3
> outer(xx,yy,hiku) # x - y
y0 y1 y2 y3 y4
x0 0 4 3 2 1
x1 1 0 4 3 2
x2 2 1 0 4 3
x3 3 2 1 0 4
x4 4 3 2 1 0
> outer(xx,yy,kake) # x * y
y0 y1 y2 y3 y4
x0 0 0 0 0 0
x1 0 1 2 3 4
x2 0 2 4 1 3
x3 0 3 1 4 2
x4 0 4 3 2 1
> X=Y=nn
> outer(X,Y,waru) # WRONG!!
[,1] [,2] [,3] [,4]
[1,] 1 1 1 1
[2,] NA NA NA NA
[3,] NA NA NA NA
[4,] NA NA NA NA
> a=expand.grid(X,Y)
> b=matrix(mapply(waru,a[,1],a[,2]),length(X))
> rownames(b)=paste0('x',nn)
> colnames(b)=paste0('y',nn)
> b # x / y
y1 y2 y3 y4
x1 1 3 2 4
x2 2 1 4 3
x3 3 4 1 2
x4 4 2 3 1
2017/10/16(月) 23:28:56.68ID:FS7yMelZ
>>174
そりゃあ、outer に渡す関数がまずいんだろ。
outer に渡す関数は、完全にベクトル対応になっていなければならないんじゃないの?
でなければ、わざわざ outer 使うこともなかろう。
2017/10/17(火) 06:58:05.54ID:ps5i5Wv8
>>175
レスありがとうございます。
自作関数から自作関数を呼び出しているのが原因かと思っていましたが、
ベクトル対応していないとはこういうことでしょうか?

加減乗は引数のどちらをベクトルにしても動作
> kake(1:4,1)
[1] 1 2 3 4
> kake(1,1:4)
[1] 1 2 3 4
> tasu(1:4,1)
[1] 2 3 4 0
> tasu(1,1:4)
[1] 2 3 4 0
> hiku(1:4,1)
[1] 0 1 2 3
> hiku(1,1:4)
[1] 0 4 3 2

除算は第2引数をベクトルにすると誤動作

> waru(1:4,1)
[1] 1 2 3 4
> waru(4,1:4)
[1] 4 1
2017/10/17(火) 22:43:30.39ID:yEir4ohi
>>176
outer から呼び出されたときの引数を見てみればわかるよ。たぶん1度しか呼ばれず、できあがりの行列の要素すべてを計算するための引数がベクトルで渡されているはずだから。
2017/10/22(日) 07:51:52.36ID:/ES4CbkI
>>177
ありがとうございます。

outerのソースをみたら、こんな記述があったので、X,Yを同時にベクトルで与えても動作する関数でないとダメみたいでした。

FUN <- match.fun(FUN)
Y <- rep(Y, rep.int(length(X), length(Y)))
if (length(X))
X <- rep(X, times = ceiling(length(Y)/length(X)))
FUN(X, Y, ...)
2017/10/22(日) 08:28:19.35ID:/ES4CbkI
# greatest common divisor
gcd <- function(x,y) ifelse(x|y,ifelse(x*y,max(intersect((1:abs(x))[abs(x)%%(1:abs(x))==0],(1:abs(y))[abs(y)%%(1:abs(y))==0])),max(abs(x),abs(y))),NA)

非正整数対応すると長くなるなぁ

> gcd(24,15)
[1] 3
> gcd(16,15)
[1] 1
> gcd(5,0)
[1] 5
> gcd(-24,15)
[1] 3
> gcd(-24,-15)
[1] 3
> gcd(0,0)
[1] NA
2017/10/22(日) 09:17:13.05ID:/ES4CbkI
ユークリッドの互除法をつかうとこんな感じ

> GCD <- function(x,y){
+ if(round(x)!=x | round(y)!=y) stop('Not integer')
+ if(!x&!y) return(NA)
+ a=max(c(abs(x),abs(y)))
+ b=min(c(abs(x),abs(y)))
+ if(!a*b) return(a)
+ r=integer()
+ r[1]=a
+ r[2]=b
+ i=1
+ r[i+2]=r[i]%%r[i+1]
+ while(r[i+2]!=0 & r[i+2]!=1){
+ i=i+1
+ r[i+2]=r[i]%%r[i+1]
+ }
+ return(ifelse(r[i+2]==0,r[i+1],1))
+ }
> GCD(0,0)
[1] NA
> GCD(24,15)
[1] 3
> GCD(16,15)
[1] 1
> GCD(5,0)
[1] 5
> GCD(24,-15)
[1] 3
> GCD(-24,-15)
[1] 3
> GCD(2.3,4)
Error in GCD(2.3, 4) : Not integer
181名無しさん@そうだ選挙に行こう! Go to vote!
垢版 |
2017/10/22(日) 10:07:52.18ID:tFigTWxc
文系研究者のワイ、困惑
ディープな世界やでほんま
2017/10/25(水) 20:38:52.07ID:A26rYIkF
#.n発r中の狙撃手が.N発狙撃するときの命中数を返す
Go13 <- function(.N, .n, r, k=10^3){ # k:シミュレーション回数
f <-function(S,N=.N,n=.n){
y=c(rep(1,S),rep(0,N-S))
sum(sample(y,n))
}
xx=r:.N
SS=NULL
for(i in 1:k){
x=sapply(xx,f)
SS=c(SS,which(x==r)-1+r)
}
print(summary(SS))
invisible(SS)
}
2017/10/26(木) 04:11:35.13ID:jT09z118
2017/10/26(木) 04:11:58.98ID:jT09z118
2017/10/26(木) 04:12:18.59ID:jT09z118
2017/10/26(木) 04:12:35.94ID:jT09z118
2017/10/26(木) 04:12:53.44ID:jT09z118
2017/10/26(木) 04:13:10.90ID:jT09z118
2017/10/26(木) 04:13:28.27ID:jT09z118
2017/10/26(木) 04:13:46.40ID:jT09z118
2017/10/26(木) 04:14:03.59ID:jT09z118
2017/10/26(木) 04:14:22.57ID:jT09z118
2017/10/26(木) 18:17:25.90ID:tHqsRRzo
こういう問題を考えるのは楽しいね。

ゴルゴ13は100発100中
ゴルゴ14は10発10中
ゴルゴ15は1発1中
とする。
各々10000発撃ったとき各ゴルゴの命中数の期待値はいくらか?

ドツボ13は100発0中
ドツボ14は10発0中
ドツボ15は1発0中
とする。
各々10000発撃ったときドツボの命中数の期待値はいくらか?
2017/11/01(水) 12:40:01.83ID:UKV+bz4p
ベクトルは再利用されるんだな


> c(1,2,1,2)==c(1,2)
[1] TRUE TRUE TRUE TRUE
> all(c(1,2,1,2)==c(1,2))
[1] TRUE
> equal <- function(x,y) sum((x-y)^2)==0 & length(x)==length(y)
> equal(c(1,2,1,2),c(1,2))
[1] FALSE
2017/11/03(金) 08:27:39.47ID:7YwYHhPi
> x= list(length=5)
> x
$length
[1] 5

> y=list()
> length(y)=4
> y
[[1]]
NULL

[[2]]
NULL

[[3]]
NULL

[[4]]
NULL

> z=list(5)
> z
[[1]]
[1] 5

> w = vector(mode="list" , length= 5)
> w
[[1]]
NULL

[[2]]
NULL

[[3]]
NULL

[[4]]
NULL

[[5]]
NULL
2017/11/09(木) 08:41:04.22ID:SxG1YX2j
Brunner-Munzel検定って比較する両群に重なりがないとp値がNAになるんだが、
これってバグなのか?



> x=1:5
> y=6:10
> lawstat::brunner.munzel.test(x,y)

Brunner-Munzel Test

data: x and y
Brunner-Munzel Test Statistic = Inf, df = NaN, p-value = NA
95 percent confidence interval:
NaN NaN
sample estimates:
P(X<Y)+.5*P(X=Y)
1

> x=1:6
> y=6:11
> lawstat::brunner.munzel.test(x,y)

Brunner-Munzel Test

data: x and y
Brunner-Munzel Test Statistic = 24.749, df = 10, p-value =
2.651e-10
95 percent confidence interval:
0.9423463 1.0298759
sample estimates:
P(X<Y)+.5*P(X=Y)
0.9861111
197132人目の素数さん
垢版 |
2017/11/14(火) 22:02:36.50ID:Jlt4ZA5T
突然ですが質問があります。最近Rソフトを利用し始めた者のです。単刀直入に、
ボロノイ図を制作した場合に分割された面積の平均を出力するには、どうすればよいのでしょうか?
198132人目の素数さん
垢版 |
2017/11/14(火) 22:06:32.42ID:Jlt4ZA5T
現状としては住所をグーグルマップの緯度経度に変換し、分割まではできています。
宜しければどなたかお力添えをいただけないでしょうか?
2017/11/15(水) 00:58:17.28ID:WZuPK5Ir
2017/11/15(水) 00:58:38.82ID:WZuPK5Ir
2017/11/15(水) 00:58:56.67ID:WZuPK5Ir
2017/11/15(水) 00:59:14.81ID:WZuPK5Ir
2017/11/15(水) 00:59:32.78ID:WZuPK5Ir
2017/11/15(水) 00:59:50.57ID:WZuPK5Ir
2017/11/15(水) 01:00:09.89ID:WZuPK5Ir
2017/11/15(水) 01:00:29.29ID:WZuPK5Ir
2017/11/15(水) 01:00:47.81ID:WZuPK5Ir
2017/11/15(水) 01:01:09.56ID:WZuPK5Ir
2017/11/15(水) 17:11:14.46ID:eZCzfwkb
>>198
SpatialPolygonsクラスまでできるといると仮定して、
各ポリゴンの中にareaスロットがあるから、
それを抽出して、その平均を取れば良い。
ボロノイ図がSpatialPolygonsクラスになっていないなら、
まずは変換。
2017/11/15(水) 20:30:49.23ID:WZuPK5Ir
2017/11/15(水) 20:31:06.31ID:WZuPK5Ir
2017/11/15(水) 20:31:21.95ID:WZuPK5Ir
2017/11/15(水) 20:31:40.54ID:WZuPK5Ir
2017/11/15(水) 20:31:58.15ID:WZuPK5Ir
2017/11/15(水) 20:32:16.33ID:WZuPK5Ir
2017/11/15(水) 20:32:32.65ID:WZuPK5Ir
2017/11/15(水) 20:32:48.32ID:WZuPK5Ir
2017/11/15(水) 20:33:05.48ID:WZuPK5Ir
2017/11/15(水) 20:33:21.41ID:WZuPK5Ir
2017/11/15(水) 21:12:29.48ID:9zgzmHZc
ボロノイ図の各領域の面積の平均値って、単に
描画領域の総面積÷点数 じゃないの?
何か暗黙の前提があるの?
2017/11/16(木) 06:01:20.12ID:6ldUKvsQ
2017/11/16(木) 06:01:37.22ID:6ldUKvsQ
2017/11/16(木) 06:01:56.08ID:6ldUKvsQ
2017/11/16(木) 06:02:14.27ID:6ldUKvsQ
2017/11/16(木) 06:02:31.67ID:6ldUKvsQ
2017/11/16(木) 06:02:48.95ID:6ldUKvsQ
2017/11/16(木) 06:03:06.96ID:6ldUKvsQ
2017/11/16(木) 06:03:24.98ID:6ldUKvsQ
2017/11/16(木) 06:03:42.58ID:6ldUKvsQ
2017/11/16(木) 06:04:00.50ID:6ldUKvsQ
2017/11/17(金) 20:18:17.65ID:5lHMDqma
Stan って 離散量をparameter 扱いできないので

m ? categorical(θ) としても m の分布を出せない。

JAGSだと

m 〜 dcat(θ)

とすると mの分布がだせる。

この理解でいいかな?
2017/11/17(金) 20:41:11.51ID:Y8c01QBt
2017/11/17(金) 20:41:27.83ID:Y8c01QBt
2017/11/17(金) 20:41:43.62ID:Y8c01QBt
2017/11/17(金) 20:41:58.17ID:Y8c01QBt
2017/11/17(金) 20:42:13.43ID:Y8c01QBt
2017/11/17(金) 20:42:28.14ID:Y8c01QBt
2017/11/17(金) 20:42:43.14ID:Y8c01QBt
2017/11/17(金) 20:42:59.36ID:Y8c01QBt
2017/11/17(金) 20:43:14.19ID:Y8c01QBt
2017/11/17(金) 20:43:30.82ID:Y8c01QBt
242132人目の素数さん
垢版 |
2017/11/20(月) 17:47:00.70ID:ptVXRSQM
以前、ボロノイ図について質問させていただいた初心者です。
質問後色々と試行錯誤したのですがdir.areaを出せず悩んでおります。
library(deldir)
> library(ggmap)
> df <- read.csv("C:/Users/***/Desktop/***/***.csv",header=T)
> loc <- c(min(df$lon),min(df$lat),max(df$lon),max(df$lat))
> GM <-ggmap(get_map(location=loc,zoom=11,source="google"))
> GP <- geom_point(data=df,aes(x=lon,y=lat,colour=factor(type)),size=3)
> dd <- deldir(df$lon,df$lat)
>GS <-geom_segment(data=dd$dirsgs,aes(x=x1,y=y1,xend=x2,yend=y2),size=0.5,linetype=1)
> GM+GP+GS
と入力しボロノイ図は出せているのですが、
243132人目の素数さん
垢版 |
2017/11/20(月) 17:52:19.12ID:ptVXRSQM
summaryと入力しても
function (object, ...)
UseMethod("summary")
<bytecode: 0x06b5eef0>
<environment: namespace:base>
と表示されます。どの様に入力または再入力すればdir.areaが表示させられるでしょうか?
私自身初めてで、全く分からない状態でRを使用しているので、宜しければ分かり易く教えて頂けると幸いです。
2017/11/20(月) 21:05:10.85ID:yjl62pX+
2017/11/20(月) 21:05:28.54ID:yjl62pX+
2017/11/20(月) 21:05:44.92ID:yjl62pX+
2017/11/20(月) 21:06:01.26ID:yjl62pX+
2017/11/20(月) 21:06:18.27ID:yjl62pX+
2017/11/20(月) 21:06:35.26ID:yjl62pX+
2017/11/20(月) 21:06:52.55ID:yjl62pX+
2017/11/20(月) 21:07:09.97ID:yjl62pX+
2017/11/20(月) 21:07:27.71ID:yjl62pX+
2017/11/20(月) 21:07:44.86ID:yjl62pX+
2017/11/22(水) 10:59:21.45ID:1eSvd7ei
>>242
検証用のデータがないと誰も追試しないと思う。
>154は模擬データがあったのでやる気になった。
2017/11/22(水) 12:06:07.41ID:j3iP9uSb
2017/11/22(水) 12:06:26.73ID:j3iP9uSb
2017/11/22(水) 12:06:45.80ID:j3iP9uSb
2017/11/22(水) 12:07:02.42ID:j3iP9uSb
2017/11/22(水) 12:07:21.82ID:j3iP9uSb
2017/11/22(水) 12:07:41.50ID:j3iP9uSb
2017/11/22(水) 12:08:00.58ID:j3iP9uSb
2017/11/22(水) 12:08:22.66ID:j3iP9uSb
2017/11/22(水) 12:08:39.11ID:j3iP9uSb
2017/11/22(水) 12:08:57.12ID:j3iP9uSb
265132人目の素数さん
垢版 |
2017/11/24(金) 16:46:01.01ID:S4G8MO/P
関数のオプションの取り得る値を全て表示する方法って知らない?
例えばcor関数のmethodオプションの取り得る値は"pearson", "kendall", "spearman"みたいに。
そういうのは無いのかな?
初めて使う関数のオプションいちいちググるの面倒くさい。
2017/11/24(金) 18:45:27.78ID:7RwNGOaZ
2017/11/24(金) 18:45:42.78ID:7RwNGOaZ
2017/11/24(金) 18:45:58.90ID:7RwNGOaZ
2017/11/24(金) 18:46:16.24ID:7RwNGOaZ
2017/11/24(金) 18:46:33.09ID:7RwNGOaZ
2017/11/24(金) 18:46:49.63ID:7RwNGOaZ
2017/11/24(金) 18:47:03.93ID:7RwNGOaZ
2017/11/24(金) 18:47:38.91ID:7RwNGOaZ
2017/11/24(金) 18:47:57.22ID:7RwNGOaZ
2017/11/24(金) 18:48:16.46ID:7RwNGOaZ
2017/11/24(金) 19:33:11.50ID:aKG4T9LS
>>265
ヘルプ表示じゃ駄目なのかい?
2017/11/24(金) 20:02:53.10ID:YIwuPhoP
>>265
> args(cor)
function (x, y = NULL, use = "everything", method = c("pearson",
"kendall", "spearman"))
NULL
278132人目の素数さん
垢版 |
2017/11/24(金) 22:49:54.91ID:8tVkv6KQ
>>276
前にヘルプで見ようと思ったら書いてなかった覚えが…。マニアックな関数だったんで、そんなもんかな〜と諦めてた。やっぱ基本はヘルプか。
>>277
argsは見れる関数と見れない関数があるのであんまり役に立たない印象。
2017/11/25(土) 00:22:59.73ID:kb2pRtxG
2017/11/25(土) 00:23:21.36ID:kb2pRtxG
2017/11/25(土) 00:23:46.66ID:kb2pRtxG
2017/11/25(土) 00:24:03.98ID:kb2pRtxG
2017/11/25(土) 00:24:22.25ID:kb2pRtxG
2017/11/25(土) 00:24:46.55ID:kb2pRtxG
2017/11/25(土) 00:25:07.98ID:kb2pRtxG
2017/11/25(土) 00:25:29.17ID:kb2pRtxG
2017/11/25(土) 00:25:50.80ID:kb2pRtxG
2017/11/25(土) 00:26:12.77ID:kb2pRtxG
2017/11/25(土) 01:57:31.82ID:sNF3t9bW
>>278
>argsは見れる関数と見れない関数があるのであんまり役に立たない
だったら、例が悪いよ。見られない関数の例をあげないと

> ヘルプで見ようと思ったら書いてなかった
こっちだってわざわざ下請け関数のオプションまでは書かないよ。
ヘルプを見て未解決ならソースを見てくれ。
2017/11/25(土) 06:17:05.29ID:kb2pRtxG
2017/11/25(土) 06:17:23.25ID:kb2pRtxG
2017/11/25(土) 06:17:39.26ID:kb2pRtxG
2017/11/25(土) 06:17:55.24ID:kb2pRtxG
2017/11/25(土) 06:18:11.86ID:kb2pRtxG
2017/11/25(土) 06:18:28.49ID:kb2pRtxG
2017/11/25(土) 06:18:44.12ID:kb2pRtxG
2017/11/25(土) 06:19:01.27ID:kb2pRtxG
2017/11/25(土) 06:19:19.56ID:kb2pRtxG
2017/11/25(土) 06:19:36.14ID:kb2pRtxG
2017/11/26(日) 17:41:27.37ID:ahD9OIUm
rm(list=ls())

で R のメモリーをクリア
301132人目の素数さん
垢版 |
2017/11/28(火) 13:00:14.06ID:kbsEO2Dt
先週長々と質問させていただいたものです。その後、試行錯誤して行った結果十解決しました。

以前は「summary」としか入れていなかったのですが、「dd$summary」と入力したところ
全体のデータが出力されました。それ以後「dd$summary$dir.area」等で出せるようになりました。
大変初期的な場面で躓いておりましたが、現在何とか進んでおります。
色々とお答えくださった方々、とても参考になりました。本当にありがとうございました。
2017/12/10(日) 13:11:49.22ID:cG4z9akW
N(=100)回コインをなげてn(=5回)以上続けて表がでる確率。

seqn<-function(n=5,N=100,p=0.5){
rn=rbinom(N,1,p)
count=0
for(i in 1:N){
if(rn[i] & count<n){
count=count+1
}
else{
if(count==n) {return(TRUE)}
else{
count=0
}
}
}
return(count==n)
}
mean(replicate(10^5,seqn()))

> mean(replicate(10^5,seqn()))
[1] 0.81085

案外、高い確率になった。
2017/12/10(日) 22:28:22.98ID:WuWuRvn7
ポアソンでやるやつだっけ
2017/12/11(月) 07:47:07.43ID:EURogHTh
pooledVariance <- function(...) {
args = list(...)
n.args=length(args)
ss2=0
df=0
for(i in 1:n.args){
ss2 = ss2 + var(args[[i]])*(length(args[[i]])-1)
df = df + (length(args[[i]])-1)
}
ss2/df
}

effectsize <- function(y1,y2){
diff=mean(y1)-mean(y2)
var=(var(x1)*(length(x1)-1)+ var(x2)*(length(x2)-1))/(length(c(y1,y2))-2)
sd=sqrt(var)
diff/sd
}

library(effsize)
cohen.d()
2017/12/11(月) 07:50:22.91ID:EURogHTh
>>303
単なる二項分布。
コインが5回続けて表がでたら、0.5^5 <0.05なのでイカサマコインといわれちゃいそうなんだが、
100回やってみると案外、5回表が続くので確率を計算しようと思ったが、解析的にできる頭がないので
シミュレーションしてみた。
2017/12/11(月) 07:55:42.42ID:EURogHTh
>302は

> rbinom(100,1,0.5)
[1] 0 1 0 0 1 0 0 0 1 1 1 0 1 0 1 1 0 1 1 0 1 1 0 0 0 1 0 1 1 1 1 0
[33] 0 1 0 0 0 0 0 0 1 0 1 1 0 0 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 0
[65] 0 0 1 1 0 0 1 0 1 0 0 0 0 0 0 1 0 0 1 1 1 1 1 0 1 1 0 0 1 1 0 0
[97] 0 0 1 1

で5回以上1が連続するときTRUEを返す関数なのだが
もっと簡単にやれないかなぁとは思っている。

rep(1,5) %in% rbinom(100,1,0.5)は 1個ずつ評価されてTRUEが5個返ってくるだけ。

文字列にしてgrepを使うとなんとかなりそうな気がしないでもないのだけど....
2017/12/22(金) 17:21:16.51ID:U1Bq8bdb
すまん、教えてほしいだけど
分析するために初めてRをインストールしようと思って、このスレのあるように公式サイト行ったら、esetが「JS/Redirector.NAV トロイの木馬」を検知したんだが…;
どうしたらいいだ…
2017/12/22(金) 20:09:03.17ID:ol6XbcBE
そっちじゃなくてCRAN行け
2017/12/22(金) 20:42:31.02ID:U1Bq8bdb
ホームページダメとかわけわかんねぇ・・・とんでもねぇな
ありがとう
2017/12/22(金) 20:50:20.52ID:uzZ0hejh
>>307
エロサイトにアクセスしてないw?
2017/12/22(金) 21:27:01.31ID:RNoKRtjI
>>309
CRANはここ
https://cran.r-project.org


プロジェクトの方はESETの誤検知っぽいんだよな
2017/12/23(土) 09:28:44.66ID:n0SBd+bp
>>310
してねぇよww
totalvirusで調べると一件引っかかるし、Redirector検知だから、しょうがないね
2017/12/24(日) 20:42:51.55ID:CT/NKMd7
col=rgb(runif(1),runif(1),runif(1),runif(1))で色指定すると

走らせるたびに色がちがっておもしろい。

hist(rnorm(100),col=rgb(runif(1),runif(1),runif(1),runif(1)))
2017/12/31(日) 17:23:19.35ID:14tdpK/Y
stanやJAGSのコードでgamma関数を使おうとして
y = gamma(x)
と、書いたらエラーになった。

stanだと y=tgamma(x)、JAGSだとy=exp(loggam(x))で動作した。
2018/01/02(火) 08:46:50.95ID:qdmBZ37O
ある大学の入学者男女の比率は1であるという帰無仮説を検定する課題が花子と太郎に課された。

花子は50人を調査できたら終了として入学者を50人をみつけて18人が女子であるという結果を得た。
帰無仮説のもとで
50人中18人が女子である確率は 0.01603475
これ以下になるのは50人中0〜18人と32〜50人が女子の場合なので
両側検定して
> sum(dbinom(c(0:18,32:50),50,0.5))
[1] 0.06490865
> binom.test(18,50,0.5)$p.value
[1] 0.06490865
で帰無仮説は棄却できないと結論した。
http://i.imgur.com/XDIp9rM.png

一方、本番と十八番が好きな太郎は一人ずつ調べて18人めの女子がみつかったところで調査を終えることにした。
18人めがみつかったのは花子と同じく50人めであった。
帰無仮説のもとで
18人がみつかるのが50人めである確率は0.005772512
これ以下になるのは23人以下50人以上番めで女子18人めがみつかった場合なので
両側検定して
pnb=dnbinom(0:999,18,0.5)
> 1 - sum(pnb[-which(pnb<=dnbinom(50-18,18,0.5))]) # < 0.05
[1] 0.02750309
http://i.imgur.com/K3T7utr.png
で帰無仮説は棄却される。

どちらの検定が正しいか、どちらも正しくないか?
検定する意図によってp値が変わるのは頻度主義統計の欠陥といえるか?

花子の横軸は裏口入学者数、太郎の横軸はサンプル数なので
サンプルでの裏口入学率を横軸にして95%信頼区間を示す。
花子の検定での信頼区間は0.36〜0.72で18/50を含む、p=0.06491
http://i.imgur.com/SeTLk8K.jpg
太郎の検定での信頼区間は0.375〜0.72で18/50を含まない、p= 0.0275
http://i.imgur.com/tNzlfxe.jpg
主観である、検定の中止の基準の差でp値や信頼区間が変化するのは変だという批判である。
2018/01/03(水) 10:35:48.54ID:YJfyxrv+
(訂正)
ある大学の入学者男女の比率は1であるという帰無仮説を検定する課題が花子と太郎に課された。

花子は50人を調査できたら終了として入学者を50人をみつけて18人が女子であるという結果を得た。
帰無仮説のもとで
50人中18人が女子である確率は 0.01603475
これ以下になるのは50人中0〜18人と32〜50人が女子の場合なので
両側検定して
> sum(dbinom(c(0:18,32:50),50,0.5))
[1] 0.06490865
> binom.test(18,50,0.5)$p.value
[1] 0.06490865
で帰無仮説は棄却できないと結論した。
http://i.imgur.com/XDIp9rM.png

一方、十八という数字が好きな太郎は一人ずつ調べて18人めの女子がみつかったところで調査を終えることにした。
18人めがみつかったのは花子と同じく50人めであった。
帰無仮説のもとで
18人がみつかるのが50人めである確率は0.005772512
これ以下になるのは23人以下50人以上番めで女子18人めがみつかった場合なので
両側検定して
pnb=dnbinom(0:999,18,0.5)
> 1 - sum(pnb[-which(pnb<=dnbinom(50-18,18,0.5))]) # < 0.05
[1] 0.02750309
http://i.imgur.com/K3T7utr.png
で帰無仮説は棄却される。

どちらの検定が正しいか、どちらも正しくないか?
検定する意図によってp値が変わるのは頻度主義統計の欠陥といえるか?

花子の横軸は女子数、太郎の横軸はサンプル数なので
サンプルでの女子の割合を横軸にして95%信頼区間を示す。
花子の検定での信頼区間は0.36〜0.72で18/50を含む、p=0.06491
http://i.imgur.com/SeTLk8K.jpg
太郎の検定での信頼区間は0.375〜0.72で18/50を含まない、p= 0.0275
http://i.imgur.com/tNzlfxe.jpg
主観である、検定の中止の基準の差でp値や信頼区間が変化するのは変だという批判である。
317132人目の素数さん
垢版 |
2018/01/15(月) 16:30:41.76ID:wJofbCL/
kainokousiki<-function(a,b,c){return (-b+sqrt(b^2-4*a*c))/(2*a)} #解の公式
kainokousiki(1,-5,6)

でrunすると3じゃなくて6を返すんだけど、どこが間違ってる?
318132人目の素数さん
垢版 |
2018/01/15(月) 16:35:00.20ID:wJofbCL/
自己解決
かっこが足りなかった
2018/01/19(金) 12:12:23.00ID:k3h1PrrK
Pythonのスレはないのか
2018/01/21(日) 20:11:34.35ID:oUqQkvBY
2018/01/21(日) 20:11:56.34ID:oUqQkvBY
2018/01/21(日) 20:12:22.56ID:oUqQkvBY
2018/01/21(日) 20:12:47.97ID:oUqQkvBY
2018/01/21(日) 20:13:05.14ID:oUqQkvBY
2018/01/21(日) 20:13:34.57ID:oUqQkvBY
2018/01/21(日) 20:14:02.66ID:oUqQkvBY
2018/01/21(日) 20:14:16.99ID:oUqQkvBY
2018/01/21(日) 20:14:35.47ID:oUqQkvBY
2018/01/21(日) 20:15:07.01ID:oUqQkvBY
2018/02/05(月) 19:08:34.64ID:AIJT+apj
機械学習をきっかけにPythonに逆転された感じだね
331132人目の素数さん
垢版 |
2018/02/06(火) 18:35:39.90ID:tAZA/Fp/
『Rを使った〜』だとPythonじゃないのかよって思うよね
2018/02/06(火) 21:37:32.10ID:tUqX17n9
ずっとRだけでPython触ったこと無いけど、覚え直す価値ある?
環境構築からもう面倒なイメージ
333132人目の素数さん
垢版 |
2018/02/06(火) 22:43:23.82ID:qQMNyZjW
Python自体は:と直後のインデントさえ気を付ければかなり簡単
3系は数が全て小数扱いなので楽

Anacondaというパッケージでインストールすれば、今流行りのJupyter Notebookという開発環境で対話的にコーディングできる(Rも使える)
2018/02/07(水) 20:40:49.48ID:mgaw9oVw
アナコンダてのがRぽくできるのね、ありがとう
dplyrやggplot2みたいに素人でも簡単便利だといいんだけど
Pythonはオブジェクト志向ぽいしすぐ諦めそう
335132人目の素数さん
垢版 |
2018/02/12(月) 16:19:11.21ID:NSJ4iUa4
ブラウザ環境なくなっちゃったの?
2018/02/12(月) 17:06:56.33ID:hMO/kWPg
>>335
誤爆?
何をブラウズする環境が無くなったの?
337132人目の素数さん
垢版 |
2018/02/13(火) 18:21:54.45ID:1hic99Cx
ブラウザでプログラミングする環境
2018/02/13(火) 21:09:53.07ID:EFzybxrC
>>337
RStudio Serverの話?
2018/02/13(火) 22:27:26.57ID:Qyl0hNg7
RStudio Severあるで。Dockerで使うのがいいんじゃないかな?!
340132人目の素数さん
垢版 |
2018/02/25(日) 18:12:28.68ID:aD34K55o
統計学とウェブ解析を交えて実践的な勉強と練習を
したいのですが、おすすめな書籍やサイトはありますか。
実際に解析ツールや分析ツールを用いて
自分で分析解析してから
解答を見て適切な手順や方法、考察を
解説してくれるものが良いです。


統計学は統計検定2級の知識はありますが
ウェブ解析はテキスト読んだだけです。
2018/02/26(月) 12:43:55.13ID:U8DvzUE2
ウェブ解析とは具体的になんですか
2018/02/27(火) 00:54:41.17ID:hS0OJ3qQ
R studioは日本語コメント書く度にIMEが無効になったりカーソルがずれたり黒文字の予測変換が黒背景と重なって見えなくなったりと散々だわ
2018/02/27(火) 01:06:58.09ID:GkJoHhTZ
Windows環境で使うから
2018/02/27(火) 01:16:41.39ID:hS0OJ3qQ
会社規定なんでしかたない
UNIX環境使えるのが羨ましい
2018/02/27(火) 01:25:59.40ID:34tpClZB
Docker for WindowsでRStudioサーバー動かせば?
2018/02/27(火) 12:19:33.31ID:ZcuB0rsn
なぜPythonスレッドがない?
347132人目の素数さん
垢版 |
2018/02/27(火) 14:05:09.17ID:O+8uJ5V+
板名読める?
2018/03/04(日) 20:14:10.91ID:nWbPE6nD
>>342
IME無効になるのは俺だけじゃなかったと知ってほっとした。
2018/03/04(日) 21:28:34.58ID:R7ZPBSuG
ストアアプリも同じ症状でるからRStudio固有の問題でなくWindows環境の不治の病だと思ってる
2018/03/26(月) 20:57:59.83ID:WAyucZm1
Run any R code you like. There are over three thousand R packages preloaded.

https://rdrr.io/snippets/
2018/03/26(月) 21:11:25.16ID:WAyucZm1
>>350
日本語あると動作しないが、
グラフを描いてくれるのはうれしい。


http://imagizer.imageshack.com/img923/2879/m59LVv.png
352132人目の素数さん
垢版 |
2018/04/04(水) 07:52:09.98ID:PZp+DZN4
Fisher test検定時に
p<2.2e-16
と表示されるんですが、これより小さい値の指数桁数を正確に表記する方法教えて下さい。
例えば5.8e-35となるようにです。
2018/04/04(水) 08:05:49.72ID:lBVECsOD
返値の中にあるp値を参照しなされ
2018/04/04(水) 10:02:52.31ID:CRvlhZKw
fisher.test関数の返り値はlist型で、その中にp.valueという名前でp値が格納されているから$演算子を使って直接参照するか、broom::tidy関数に返り値を渡してdata.frame形式で出力してやれば見れる
2018/04/04(水) 12:43:50.08ID:LbKgW3kd
>>352
>>354が言う直接的な参照
> fisher.test(matrix(c(1,120,130,2),2))$p.value
[1] 1.691912e-69
356132人目の素数さん
垢版 |
2018/04/04(水) 13:06:17.36ID:PZp+DZN4
352です。よく分かりました!
ありがとうございます!
2018/04/04(水) 14:44:33.05ID:LbKgW3kd
>>356
技術的な助言をしたけど、学術的に言えば、
p < 0.01 は全て p < 0.01 として、具体的なp値を考える意味はないと思うよ。
一部の例外的な研究分野を除いて(e.g., 遺伝統計学)。
358132人目の素数さん
垢版 |
2018/04/04(水) 15:18:50.72ID:PZp+DZN4
はい、まさにその例外的な分野で使おうとしてます。ありがとうございます。
2018/04/07(土) 06:52:38.98ID:yx+HETs3
2018/04/07(土) 06:53:00.80ID:yx+HETs3
2018/04/07(土) 06:53:20.77ID:yx+HETs3
2018/04/07(土) 06:53:40.58ID:yx+HETs3
2018/04/07(土) 06:54:01.92ID:yx+HETs3
2018/04/07(土) 06:54:24.32ID:yx+HETs3
2018/04/07(土) 06:54:47.76ID:yx+HETs3
2018/04/07(土) 06:55:08.41ID:yx+HETs3
2018/04/07(土) 06:55:30.46ID:yx+HETs3
2018/04/07(土) 06:55:54.53ID:yx+HETs3
2018/04/07(土) 10:24:54.55ID:maRES4NF
>>357
多重比較だと意味あるかも
2018/04/19(木) 21:35:35.54ID:GVMUXyX9
Rのガンマ関数はいくつでオーバーフローするかやってみた。

> i=1
> while(gamma(i)!=Inf){
+ i=i+1
+ }
Warning message:
In gamma(i) : value out of range in 'gammafn'
> i
[1] 172
> gamma(172)
[1] Inf
Warning message:
value out of range in 'gammafn'
> gamma(171)
[1] 7.257416e+306
2018/04/29(日) 00:21:51.67ID:5dW+xNwa
matplot()で折れ線グラフ描いたときに、X軸をカテゴリで示したいのですが、
可能でしょうか?

例えばtemp <- c("0時間","8時間","24時間","48時間")として、
matplot()の引数にtempをとるやり方です。
他にもやり方あれば教えてください。
2018/04/29(日) 01:55:59.75ID:PngyHOQZ
>>371
matplot(..., xaxt="n")
axis(1, at=seq(along=temp), lab=temp)
373132人目の素数さん
垢版 |
2018/04/30(月) 16:50:51.65ID:t3vhzyao
>>372
遅くなりましたがありがとうございました。
できました!
2018/04/30(月) 23:55:02.74ID:y1TqbRSE
2018/04/30(月) 23:55:22.50ID:y1TqbRSE
2018/04/30(月) 23:55:43.19ID:y1TqbRSE
2018/04/30(月) 23:56:02.89ID:y1TqbRSE
2018/04/30(月) 23:56:23.17ID:y1TqbRSE
2018/04/30(月) 23:56:40.16ID:y1TqbRSE
2018/04/30(月) 23:56:53.49ID:y1TqbRSE
2018/04/30(月) 23:57:13.43ID:y1TqbRSE
2018/04/30(月) 23:57:32.05ID:y1TqbRSE
2018/04/30(月) 23:57:53.02ID:y1TqbRSE
2018/05/01(火) 18:57:32.34ID:iUBwAKWd
特定の長方形の中に複数の長方形を最小面積で敷き詰める平面充填に関するパッケージってありませんかね
2018/05/01(火) 19:35:44.26ID:iUBwAKWd
やっぱ自分でアルゴリズムを書いてみます
2018/05/02(水) 00:09:39.04ID:xpXz1bJY
Package`deldir'
これどうなの?
2018/05/06(日) 22:15:43.42ID:BK1CxH7U
# jonckheereテストを書いてみた

jonckheere <- function(L,
alternative = c("two.sided", "increasing", "decreasing"),
cat=TRUE){
# L : list of vectors A1,A2,...,Ak, with assumed tendency
How.Many.Greater.Pairs <- function(A,B){ # How many pairs of A[i] > B[j], count as 0.5 when equal,
n.a = length(A)
n.b = length(B)
how.many.greater.pairs = 0
for(i in 1:n.a){
for(j in 1:n.b){
how.many.greater.pairs = how.many.greater.pairs+ifelse(A[i]==B[j],0.5,A[i]>B[j])
}
}
return(how.many.greater.pairs)
}
Sum.of.Greater.Pairs <- function(L){ #L=list(A1,,,,Ak),A1 < A2 < A3,..,< Ak : vector
k = length(L)
comb = combn(1:k,2) # possible combinaition of pairs to compare
n.comb = ncol(comb) # how many combinations
J = 0 # sum of greater pairs
for(i in 1:n.comb){
J = J + How.Many.Greater.Pairs(L[[comb[1,i]]],L[[comb[2,i]]])
}
return(J)
}
J = Sum.of.Greater.Pairs(L)
n = sapply(L,length)
N = sum(n)
EJ = (N^2-sum(n^2))/4
VJ = (N^2*(2*N+3)-sum(n^2*(2*n+3)))/72
Z = (J-EJ)/sqrt(VJ)
alternative = match.arg(alternative)
p.value = switch(alternative, 'two.sided' = 2 * min(pnorm(Z), pnorm(-Z), 0.5),
'increasing' = pnorm(Z),
'decreasing' = pnorm(-Z))
if(cat){
cat( 'p.value = ', p.value,'\n')
cat('alternative hypothesis: ' ,alternative,'\n')
}
invisible(p.value)
}
2018/05/22(火) 20:34:14.53ID:8iM7y57s
代入は「<-」派?「=」派?
2018/05/22(火) 21:16:34.39ID:iB1pjrmI
>>388
実態調査か何か?
<-と=は挙動が違う場合があるので、使い分けていますが、
代入はどっちかと問われたら、無論 <- または ->

なお、
> 1 -> x
これはエラーにならないけど、
> 1 = x
1 = x でエラー: 代入の左辺が不正 (do_set) です
これはエラー
2018/05/23(水) 11:17:56.08ID:OSJ/4EBd
>>389
俺は基本=派。

関数の定義は
z.test <- function(x,n=16,sigma=1){
z=sqrt(n)*mean(x)/sigma
2*pnorm(abs(z),lower=FALSE)
}
と書いている。
391132人目の素数さん
垢版 |
2018/05/23(水) 11:24:57.67ID:MGQGuwX9
>1 = x でエラー

当たり前
そんな使い方なんてするかよ

他言語と同じく=一文字の方がすっきりしてイイ
2018/05/24(木) 14:28:38.60ID:ExPgBsbL
こういうのが紛らわしいから、俺は = 推奨。

x <- 1
if(x <- 1) print('YES')
if(x < -1) print('YES')
393132人目の素数さん
垢版 |
2018/05/24(木) 14:36:00.11ID:EQ5K0CF7
だよねぇ
<-良くない
2018/05/25(金) 08:05:58.04ID:ZHt2t+40
やったことなかったので関数の初期値設定に<-を使うとどうなるかやってみた。
まず、= の場合
> z.test <- function(x,n=16,sigma=1){
+ z=sqrt(n)*mean(x)/sigma
+ 2*pnorm(abs(z),lower=FALSE)
+ }
> z.test(1:3)
[1] 1.244192e-15

<- で初期値設定すると、エラー

> z0.test <- function(x,n<-16,sigma<-1){
Error: unexpected assignment in "z0.test <- function(x,n<-"
> z=sqrt(n)*mean(x)/sigma
Error in mean(x) : object 'x' not found
> 2*pnorm(abs(z),lower=FALSE)
Error in pnorm(abs(z), lower = FALSE) : object 'z' not found
> }
2018/05/25(金) 08:11:48.02ID:ZHt2t+40
俺は見栄えがいいと思って関数定義には<-を使っているけど
= でも通常に動作する。
> z.test = function(x,n=16,sigma=1){
+ z=sqrt(n)*mean(x)/sigma
+ 2*pnorm(abs(z),lower=FALSE)
+ }
> z.test(1:3)
[1] 1.244192e-15

<- 推奨の人に聞きたいのだけど
<- でないと動作しないってことあるのだろうか?
396132人目の素数さん
垢版 |
2018/05/25(金) 09:41:36.92ID:GCdXSt8a
<-は、打つのが
=より面倒

うっとおしい
2018/05/25(金) 20:19:41.68ID:dXqzteX1
RStudioつかってりゃ[Alt+-]で簡単入力

それと引数の指定は代入じゃないと思うんだが感覚が違うよかな?
2018/05/25(金) 21:33:31.44ID:QNMt6z2O
>>396
essだとアンダースコアを入れるを勝手に「<-」になる。
>>394
それは代入ではなく、関数の規定値の設定。
規定値の設定は「=」と決められているので、「<-」はアウト。
ただし、関数を実行するときには「<-」を使うことができる。
> mean(x<-1:10)
[1] 5.5
> x
[1] 1 2 3 4 5 6 7 8 9 10
2018/05/25(金) 22:26:21.26ID:Cz/+g7h9
=に拘り続けて、<-に変える瞬間の君たちがたまらないよ
2018/05/28(月) 16:26:17.30ID:d/09kgU6
>>398
ありがとうございます。
そんな使い方ができたのですね。

こんなのしか知りませんでした。

> f <- function() {
+ x<<-1:10
+ mean (x)
+ }
> f()
[1] 5.5
> x
[1] 1 2 3 4 5 6 7 8 9 10
2018/05/28(月) 20:56:51.59ID:Osxttqv4
一画面しかグラフがないのに

Hit <Return> to see next plot:

と出るの鬱陶しいな、と思っていたら

par(ask=FALSE)

と設定しておけばいいんだな。
2018/05/29(火) 18:08:52.29ID:ZCWRCH5Y
同名のdataがあるのでパッケージを::で指定してもうまくいかなかった。

data(netmeta::parkinson)

でなくて

data(parkinson, package = 'netmeta')

とするんだな。
2018/05/30(水) 06:16:03.29ID:fLd3NENr
hist(rnorm(100),col=rgb(runif(1),runif(1),runif(1),runif(1)))
だと、1色だけど

hist(rnorm(100),col=sample(colours(),(sample(1:10,1))))
なら1〜10色で表示される。
404132人目の素数さん
垢版 |
2018/05/31(木) 21:37:03.79ID:BfVjjX7C
runif(1)なんて・・・
2018/05/31(木) 23:16:15.39ID:grs1zCKo
> hist(rnorm(100),col=rgb(runif(1),runif(1),runif(1),runif(1)))
何色に増やしてもいいがな。
何をやりたいのかな?
hist(rnorm(5000),col=apply(matrix(runif(80),4), 2, function(x){rgb(x[1],x[2],x[3],x[4])}))
2018/06/01(金) 21:54:20.67ID:Ef899k/0
:::てどういう時に使うんだろ?
ソース読みたくて
library(BayesFactor)
ttestBF_indepSample
では表示されなかったが、
library(BayesFactor)
BayesFactor:::ttestBF_indepSample
だと出てきた。
2018/06/04(月) 13:04:13.10ID:3QOAvZa7
Stanも覚えなきゃいけないのかよーくそがー
2018/06/04(月) 13:05:22.57ID:3QOAvZa7
::なら名前空間カブールよけよけの術だよね
2018/06/04(月) 14:24:00.43ID:d7l4LqX9
>>407
とりあえずこれ
https://github.com/sieste/STAN_cheatsheet
2018/06/05(火) 12:44:14.88ID:LfwL/Kok
>>408
:::と3個なんだよなぁ
2018/06/05(火) 13:06:03.27ID:CHJNgrVq
>>410
グダグダ言っていないで、さっさとヘルプを参照すればいいじゃないか?
?':::'
2018/06/05(火) 19:45:28.11ID:LfwL/Kok
>>411
ありがとう。

stats:::t.test.default

でt検定のソースが見られた
2018/06/11(月) 00:14:18.19ID:K1zGYlRd
関数を値で上書きしてしまった場合に元に戻す方法を教えて頂きたく。

例)
rm <- 1
としてしまった場合にrm関数を元に戻したいです。


よろしくお願いします。
2018/06/11(月) 07:21:35.69ID:+ayC4RGv
>>413
直後ならRstudioでctrl+zで元に戻す。
再起動してたらこの方法は無理だろな
2018/06/11(月) 08:24:34.24ID:2ZHCUqeW
>>413
自分で作ったのではない関数の rm だったら rm(rm) で数値ベクトルオブジェクトが消えて、関数の rm が見えるようになる。
2018/06/11(月) 15:01:37.34ID:mlFyU0v4
>>413
> rm <- 1
> ls()
[1] "rm"
> rm(rm)
> ls()
character(0)
> rm
function (..., list = character(), pos = -1, envir = as.environment(pos),
[以下略]

深く考えなくてもrm(rm) で元に戻るけど。
rmが数値ではなくて自作関数だったら、少々ややこしいけど、
base::rm()で大丈夫だろう
2018/06/11(月) 17:04:35.54ID:Z+okZT62
>>413
既に説明されてるけど上書きじゃなくて別オブジェクト扱いになるからrmで消すか明示的にパッケージを::演算子で関数を指定してやればおけ

自作関数だと上書きされちゃうけど
2018/06/11(月) 19:33:14.14ID:rfEFkwvW
rmが自作関数だと戻せないのでは?

> rm = function(x) asin(sqrt(x))
> rm(1)
[1] 1.570796
> rm
function(x) asin(sqrt(x))
> rm = 1
> rm
[1] 1
> rm(rm)
> rm
function (..., list = character(), pos = -1, envir = as.environment(pos),
inherits = FALSE)
2018/06/11(月) 19:51:41.60ID:Z+okZT62
同じ名前空間にあるなら上書きされちゃうよ

.Gloalenv(だったかな?)に自作関数があり、そこに上書きして変数にしてるから消したら消えるだけで戻せない
2018/06/11(月) 19:55:10.50ID:Z+okZT62
ちょっと古いけど、この辺りを読むとなぜそうなるかが分かると思う

(Rの)環境問題について その1。
ttps://qiita.com/kohske/items/325bdf48f4f4885a86f1
2018/06/11(月) 20:04:41.37ID:mlFyU0v4
>>418
戻せます。
> rm <- function(x) asin(sqrt(x))
> rm
function(x) asin(sqrt(x))
> base::rm(rm)
> rm
function (..., list = character(), pos = -1, envir = as.environment(pos),
[以下略]
2018/06/11(月) 20:06:37.76ID:mlFyU0v4
>>419
>.Gloalenv
case sensitiveなRでそれはないのでは?
> help(".GlobalEnv")
2018/06/11(月) 20:19:14.99ID:Z+okZT62
フォローありがとう
424413
垢版 |
2018/06/11(月) 21:00:49.78ID:K1zGYlRd
>>414-422
みなさまご返信ありがとうございました。
例示したものがbase::rmだったので自作関数のことまでは想像だにしませんでした…(がとても良い勉強になりました。)

自環境でも上書きした関数を元に戻すことが出来ることを確認しました。
2018/06/12(火) 07:42:40.88ID:9RfEtlLW
>>421
戻したいのが自作関数
rm = function(x) asin(sqrt(x))
だったら上書きされて無理じゃないの?
ゴミ箱から消去したファイルを復活させるソフトもあるから
PCに詳しければ可能かもしれないけれど
Rの機能としては復活させるのは無理と思う。
2018/06/12(火) 11:00:45.94ID:cD/mQB+6
自作のrm関数はbaseパッケージとは別に定義されるから
base::rm(rm)で自作の方のrmは消えてbase::rmが「復活」します。
2018/06/12(火) 12:07:52.53ID:cD/mQB+6
ああすまん
自作の方を上書きした場合は、そっちの復活は無理ですね。
2018/06/12(火) 14:36:07.63ID:VF7OcVBc
>>425
ちょっと意味がわからない。
自作の関数なら定義を再実行するだけなのに、
消える消えないって何が問題なんだ?
2018/06/13(水) 14:39:27.58ID:ZXkz+qgi
>>424
関数だけでなく既定値でも同じ。

> pi
[1] 3.141593
> pi=2
> pi
[1] 2
> rm(pi)
> pi
[1] 3.14159
2018/06/14(木) 09:27:55.98ID:mxBGyFKT
共同ツール 1
https://seleck.cc/685

https://trello.com/
ボードのメニュー → Power-Upsから拡張可能 Slack DropBoxなど
Trello Chrome拡張機能 elegant
ttp://www.kikakulabo.com/service-eft/
trelloのオープンソースあり

共同ツール 2
https://www.google.com/intl/ja_jp/sheets/about/

共同ツール 3
https://slack.com/intl/ja-jp
https://www.dropbox.com/ja/
https://bitbucket.org/
https://ja.atlassian.com/software/sourcetree
https://www.sketchapp.com/
ttp://photoshopvip.net/103903
ttps://goodpatch.com/blog/sketch-plugins/

Trello Chrome拡張機能プラグイン集
https://chrome.google.com/webstore/search/trello?_category=extensions

Slackプラグイン集
https://slack.com/apps

Sketchプラグイン集
https://sketchapp.com/extensions/plugins/
https://supernova.studio/
2018/06/16(土) 19:29:24.89ID:10mr4q2e
はっとデシャング
2018/06/17(日) 19:06:33.58ID:OYjqtCQI
>>306
知恵袋に漸化式があったので計算スクリプトを書いてみた。
表がでる確率pのコインをN回投げてK回以上表が続く確率。

# N: flips
# K: least sequential head
# p: probability of head
seqNp <- function(N=100,K=5,p=0.5){
if(N==K) return(p^K)
q=1-p
a=numeric(N) # a(n)=P0(n)/p^n , P0(n)=a(n)*p^n
for(i in 1:K) a[i]=q/p^i # P0(i)=q for any i

for(i in K:(N-1)){ # recursive formula
a[i+1]=0 # a[i+1]=q/p*(a[i]+a[i-1]+a[i-2]+...+a[i-(K-1)])
for(j in 0:(K-1)){
a[i+1]=(a[i+1]+a[i-j])
}
a[i+1]=q/p*a[i+1]
}

P0=numeric(N) # P0[n] : probability of ending with 0 head when flipped n times
for(i in 1:N) P0[i]=a[i]*p^i # P0(n)=a(n)*p^n

MP=matrix(rep(NA,N*K),ncol=K)
colnames(MP)=paste0('P',0:(K-1))
MP[,'P0']=P0
MP[1,'P1']=p
for(i in (K-2):K) MP[1,i]=0
# MP[k,n] = Pk[n] : probability of ending with k head when flipped n times
for(k in 2:K){ # Pk(n+1)=p*P(k-1)(n)
for(i in 1:(N-1)) MP[i+1,k]=p*MP[i,k-1]
}
ret=1-apply(MP,1,sum)

ret[N]
}
2018/06/18(月) 09:16:00.35ID:JdABdagZ
>>306
この例で、答えとして何が返ってきて欲しいのか?
2で合ってる?
2018/06/18(月) 21:23:58.67ID:fHaLluDH
>>433
1が5回以上出現しているからTRUE(数字なら1)が返り値。
2018/06/19(火) 10:20:04.23ID:fcA67BpN
>>434
run.check <- function (x, n=5) {
# x の中に 1 が n 回以上連続していれば TRUE を返す.

chg <- c(TRUE, diff(x) != 0) # 変化があった場所
chgidx <- c(which(chg), length(x)+1) # 変化があった場所の添え字
run.length <- diff(chgidx) # 0や1の連続している個数
true.length <- run.length[x[chg] == 1] # 1の連続している個数
any(true.length >= n) # 連続している個数が n 以上のrunがあるか?
}
2018/06/19(火) 21:57:17.85ID:QuKrVrE8
>>435
whichとdiffを用いての解法のお返事ありがとうございます。

実行時間を>302のスクリプトと比べてみました。

run.check <- function (x, n=5) {
# x の中に 1 が n 回以上連続していれば TRUE を返す.

chg <- c(TRUE, diff(x) != 0) # 変化があった場所
chgidx <- c(which(chg), length(x)+1) # 変化があった場所の添え字
run.length <- diff(chgidx) # 0や1の連続している個数
true.length <- run.length[x[chg] == 1] # 1の連続している個数
any(true.length >= n) # 連続している個数が n 以上のrunがあるか?
}


# N(=100)回コインをなげてn(=5回)以上続けて表がでる確率。
seqn<-function(n=5,N=100,p=0.5){
rn=rbinom(N,1,p)
count=0
for(i in 1:N){
if(rn[i] & count<n){
count=count+1
}
else{
if(count==n) {return(TRUE)}
else{
count=0
}
}
}
return(count==n)
}

> system.time(mean(replicate(10^5,run.check(rbinom(100,1,0.5)))))
user system elapsed
17.56 0.04 17.68
> system.time(mean(replicate(10^5,seqn())))
user system elapsed
9.74 0.07 9.78

後者の方が速いのは1がn個連続したら、TRUEを返して終了するので以後のチェックはしないためだろうと思います。

diff や anyの使い方が勉強になりました。

時間を割いてスクリプトを作成していただいてありがとうございます。<(_ _)>
437132人目の素数さん
垢版 |
2018/06/21(木) 10:12:41.96ID:Ze2kEGUX
Rstudioで日本語の入力ができないのですが、解決する方法知ってる方いませんか?
具体的には、IME自体をオンにすることができません。
日本語の表示やコピペは問題なくできます。

環境
Linux - Utubntu
RStudio Version 1.0.143
2018/06/21(木) 10:26:53.84ID:Fds/4hNR
RStudioのQtが古いのでパッチ当てないと日本語入力できないのが現状ですわ
パッチはUbuntu 16.04.LTS用にしかないので他のバージョンならRStudioサーバー使った方が早いかと

なお、パッチはRStudio 日本語とかでグクってみて
2018/06/23(土) 17:38:43.39ID:aZCZP6wm
windows版のRStudioでもたまに日本語入力ができなくなる。
別のソフトでIMEのON/OFFをやってから戻ると直るけど。
2018/06/23(土) 20:18:55.21ID:4XxgOFIA
>>439
うちも同じ。
2018/06/23(土) 21:30:47.03ID:JcH4CpHc
Windowsはストアアプリでも同じ症状でるから持病なんじゃないかと思う
Ubuntuはfcitxのパッチ当てとけばWindowsのような症状は出ないので快適
2018/06/25(月) 13:23:09.19ID:rmZ6BvQE
これをやってみた。
http://img-cdn.jg.jugem.jp/d75/1405116/20140609_1105745.jpg

スクリプトは
http://imagizer.imageshack.com/img921/8020/t1VcqA.jpg
小数点以下500桁でみると19個素数があった。

> vip=Vectorize(is.prime)
> (idx=which (vip(N)))
[1] 100 124 150 172 183 202 215 219 255 296 310 314 323 346 400 417 439 441 474
> cat(substring (e,idx[1],idx[1]+9))
7427466391
2018/06/26(火) 07:08:45.35ID:Na/Ih9Bj
問題

99人の囚人がいます。彼らの頭に1〜100までのナンバーカードが貼りつけられた帽子をランダムにかぶせます。
他人の帽子は見ることができても、自分の帽子は見ることができません。
帽子の数は全部で100なので、一つ使われずに余ります。
そのナンバーは囚人達にはわからないようにしておきます。
この状況で、囚人たちに一斉に自分のナンバーを宣言させて、全員が正解だったら釈放するという賭けをします。
囚人たちには帽子をかぶせられる前に相談タイムが設けられています。
どういう戦略を取れば、助かる確率を最も高くできるでしょうか?
http://000013.blogspot.com/2010/12/99.html

解答を読んでも数理が理解できないが
確率が0.5になるのはシミュレーションできた。

# http://000013.blogspot.com/2010/12/99.html
inversion <- function(x){
n=length(x)
ret=numeric(n)
for(i in 1:(n-1)){
ret[i] = sum(x[i] > x[(i+1):n])
}
sum(ret) # inversion number
}
is.even= function(x) !inversion(x)%%2 # is inverion number even?

prisoner99 <- function(n=100){
indx=sample(1:n,1) # defective number
X=sample((1:n)[-indx])
Y=numeric(n-1)
for (i in 1:(n-1)){ # select as even permutation
x1=X[-i]
x2=(1:n)[!(1:n) %in% x1] # two numbers unseen for i-th prisoner
tmp=X
tmp[i]=x2[1] ; tmp[n]=x2[2]
Y[i]=ifelse(is.even(tmp), x2[1],x2[2])
}
all(X==Y)
}
mean(replicate(1e3,prisoner99()))
2018/07/11(水) 16:20:29.88ID:zFHa28EV
>>437
遅レスだが、Ubuntu 18.04LTSならデフォルトのIBus-mozcで日本語入力ができるそうだ。
詳しくはUbuntu Weekly Recipeの第527回を読んでくだされ
2018/07/22(日) 11:22:38.35ID:Ott8rTSz
覆面算 RED + WHITE = COLOR

どうもCでやったらうまくいかないのでRでやってみた。

# RED + WHITE = COLOR
x=c('R','E','D','W','H','I','T','E','C','O','L','O','R')
unique(x)
redwhite <- function(R,E,D,W,H,I,T,C,O,L){
red=10^(2:0)
white=10^(4:0)
color=10^(4:0)
sum(red*c(R,E,D))+sum(white*c(W,H,I,T,E)) - sum(color*c(C,O,L,O,R))
}

x=unique(x) ; x
REDWHITECOLOR <- function(x){
R=x[1]
E=x[2]
D=x[3]
W=x[4]
H=x[5]
I=x[6]
T=x[7]
C=x[8]
O=x[9]
L=x[10]

cat(paste('RED = ',R,E,D,
' WHITE = ',W,H,I,T,E,
' COLOR = ',C,O,L,O,R),'\n')
}
REDWHITECOLOR(unique(x))

library(gtools)
perm=permutations(n=10,r=10,v=0:9)
perm=perm[perm[,1]!=0&perm[,4]!=0&perm[,8]!=0,] # R!=0,W!=0,C!=0
head(perm) ; tail(perm)
n=nrow(perm)
re=numeric(n)
for(i in 1:n){
re[i]=redwhite(perm[i,1],perm[i,2],perm[i,3],perm[i,4],perm[i,5],perm[i,6],perm[i,7],perm[i,8],perm[i,9],perm[i,10])
}
hist(re)
(indx=which(re==0))
REDWHITECOLOR(perm[indx,])

> REDWHITECOLOR(perm[indx,])
RED = 5 8 7 WHITE = 3 9 6 1 8 COLOR = 4 0 2 0 5
2018/07/22(日) 12:50:02.38ID:Ott8rTSz
# AAB
# × CD
# ------
# CCE
# BFAA
# ------
# BEBDE
f <- function(A,B,C,D,E,F){
(A*100+A*10+B)*D==C*100+C*10+E &(A*100+A*10+B)*C==B*1000+F*100+A*10+A &
(C*100+C*10+E)+(B*1000+F*100+A*10+A)*10==B*10000+E*1000+B*100+D*10+E
}
library(gtools)
perm=permutations(n=10,r=6,v=0:9)
n=nrow(perm)
re=numeric(n)
for(i in 1:n){
re[i]=f(perm[i,1],perm[i,2],perm[i,3],perm[i,4],perm[i,5],perm[i,6])
}
indx=which(re==TRUE)
perm[indx,]
2018/07/23(月) 11:09:01.32ID:SDW/E7TY
大変初歩的な質問で恐縮ですが、ご教示いただければ幸いです。

PERT分布を学んでいるのですが、ベータ分布のスケーリングの仕方が分かりません。
最小値a、最頻値b、最大値c として、a, b, c から求めたパラメータをa1、a2 とします。
このとき、
dbeta(x, a1, a2)*(c-a)+a
とすると、当然ながら横軸の値の範囲は0から1で、縦軸の値のみ大きくなってしまいます。

横軸の値の範囲がaからcで、縦軸の値は確率密度のままにするには、どうしたらよいのでしょうか?
2018/07/23(月) 12:15:25.71ID:llIMc79p
え?aだけ右に動かしたいならこれでいいのでは?
dbeta(x-a, a1, a2)
2018/07/23(月) 18:17:20.65ID:SDW/E7TY
>>448

447です。ご教示どうもありがとうございました。

a <- 40 # 最小値
b <- 45 # 最頻値
c <- 70 # 最大値
mu <- (a+4*b+c)/6 # PERT分布の平均値
a1 <- b*(mu-a)/(c-a) # パラメータ a1
a2 <- b*(c-mu)/(c-a) # パラメータ a2
pert1 <- function(x) dbeta(x,a1,a2) # ベータ分布布の計算


まではできたのですが、ご教示いただいた方法で
pert1 <- function(x) dbeta(x-a ,a1,a2)
とすると、x の範囲が0から1で、yが0の一様分布のようなグラフになってしまいます。
450132人目の素数さん
垢版 |
2018/07/23(月) 20:05:23.59ID:5MGL8f5L
4パラべーたへの変換は下記かな?
https://en.wikipedia.org/wiki/Beta_distribution#Four_parameters_2
a1とa2のパラメータ推定って合ってるんだっけ?僕も正直わかんない

やりたいことはこれだと思う
install.packages("mc2d")してからやってね
----------------------------------------------------
rm(list=ls())
library(mc2d)

a <- 40 # 最小値
b <- 45 # 最頻値
c <- 70 # 最大値

pert4<-function(x) dpert(x,min=a,mode=b,max=c,shape=4)
x1<-40:70
plot(x1,pert4(x1))
2018/07/23(月) 21:05:56.52ID:+HoGXx9d
>>450
447です。

450様、まさにこれ、これです。どうもありがとうございました。
おかげさまで大変助かりました。

448様にも、ご助言下さいましたこt、厚く御礼申し上げます。
2018/07/27(金) 15:50:12.19ID:E7dz8jqT
lmtestのパッケージをインストールしようとすると不正なマルチバイト文字がありますと出てくるのですがどうすればいいですか?
2018/07/27(金) 17:33:01.36ID:ufA3ZDTu
>>452
Windows 10 (Rの日本語ヘルプはインストールしていない)+ R studioだけど、そのメッセージ出ないな。
2018/07/27(金) 23:29:04.58ID:klPq25x/
ユーザー名が日本語かな
2018/07/28(土) 12:56:05.38ID:lhV9Awbf
職場のSPSS信者たちにRを認めてもらうにはどうしたら良いだろう
「安かろう悪かろう」「俺が知らないものは三流」的な考え方の人が多くて肩身が狭い…
2018/07/28(土) 17:53:14.05ID:XHIBT/Gx
>>455
>>452のようなエラーが出たら「無料のものはやっぱりダメね」
有償(SPSS) →信頼できる
ボランティア→いい加減
と言う思考らしい
2018/07/28(土) 18:33:45.13ID:l8Bhwsl9
>>454
ユーザー名はアルファベット1文字です
studioインストールしてないんですけど、しないとダメですか?
2018/07/28(土) 21:48:13.01ID:hNHqu0EH
他のパッケージはインストールできるの?
2018/07/29(日) 07:46:06.57ID:u2P99O/7
linuxなら環境変数LANGをCにすれば解決する問題だからwindowsでも似たような対処すれば行けそう。
2018/07/29(日) 19:38:42.16ID:hjP1s1BE
これかな?

> Sys.setlocale(locale="C") # locale の変更(USの設定にしないと表示が変になる)
[1] "C"
元に戻すには
> Sys.setlocale(locale="Japanese_Japan.932")
2018/08/02(木) 20:59:18.66ID:DvtHDake
すみません、教えて下さい。

フィッシャーの正確確率検定で、
適合度(一様性)の検定ってできますか?
できるのは独立性の検定のみ?

Rでいろいろ試したみたんですが、
2群ないとエラーになる。。
2018/08/02(木) 21:16:50.41ID:GWs8Hfcd
適合度ならカイ二乗検定でやればいいのでは?
2018/08/02(木) 21:52:11.65ID:DvtHDake
>>462
レス感謝です。

そうなんですが、
期待度数が5未満になってしまった場合は、
カイ二乗検定は向かないんですよね?
2018/08/02(木) 21:54:12.25ID:82PNyNf0
それで他の方法を探しています
2018/08/02(木) 23:02:57.38ID:clch7kxN
>>463
こういうので
r1=5;r2=4;n1=10;n2=12
prop.test(c(r1,r2),c(n1,n2),correct=TRUE)
chisq.test(matrix(c(r1,r2,n1-r1,n2-r2),2,byrow=TRUE),correct=TRUE)

警告がでるという話かな?
Warning message:
In chisq.test(matrix(c(r1, r2, n1 - r1, n2 - r2), 2, byrow = TRUE), :
Chi-squared approximation may be incorrect
2018/08/03(金) 09:04:31.58ID:VGe+pklE
>>463
適合度を見るのに関係ないだろ。
> cnt
[1] 1 0 2 4 3 4 12 6 12 11 21 22 21 37 40 30 59 44 49 47 38 48 36 43 38
[26] 46 33 34 30 21 26 33 17 13 14 12 8 16 7 7 9 6 6 5 3 8 4 4 4 1
[51] 0 2 1 0 0 0 0 2
> prb
[1] 0.0002947255 0.0006464052 0.0012538873 0.0022037831 0.0035720843
[6] 0.0054114364 0.0077413658 0.0105430123 0.0137588816 0.0172972083
[11] 0.0210398698 0.0248524558 0.0285950600 0.0321325300 0.0353432214
[16] 0.0381256526 0.0404028045 0.0421240952 0.0432652773 0.0438266419
[21] 0.0438299769 0.0433147339 0.0423338191 0.0409493611 0.0392287274
[26] 0.0372409836 0.0350539129 0.0327316483 0.0303329196 0.0279098757
[31] 0.0255074215 0.0231629878 0.0209066521 0.0187615256 0.0167443293
[36] 0.0148660914 0.0131329065 0.0115467110 0.0101060386 0.0088067297
[41] 0.0076425765 0.0066058952 0.0056880193 0.0048797146 0.0041715201
[46] 0.0035540195 0.0030180499 0.0025548579 0.0021562071 0.0018144483
[51] 0.0015225575 0.0012741483 0.0010634658 0.0008853653 0.0007352804
[56] 0.0006091856 0.0005035529 0.0004153084
> chisq.test(cnt, p=prb, rescale.p=TRUE, simulate.p.value=TRUE)

Chi-squared test for given probabilities with simulated p-value (based
on 2000 replicates)

data: cnt
X-squared = 65.504, df = NA, p-value = 0.2189
5未満の数があっても関係がない
2018/08/03(金) 10:29:47.68ID:jRZN4rrt
>>466
警告が出るのは独立性検定の場合でしたね。
2018/08/04(土) 02:59:15.87ID:8dNre62F
463です。
カイ二乗検定で、期待度が5未満が多いのは不適切なのかと思い込んでおりましたが、
それは独立性の検定の場合のことであり、
適合度(一様性)の検定の場合は、
気にしなくて良かったのか。。
ならカイ二乗検定でやります。

いろいろ教えて下さり、ありがとうございます。
2018/08/04(土) 19:49:50.94ID:3IVOmTrE
なんでお前らSPSS使わないの?

http://www.cdleidyba.lt/file/spss_old_1.png
2018/08/04(土) 20:37:20.39ID:kYh4t8ZN
>>469
Stanとかに対応してんの?
2018/08/04(土) 22:03:56.61ID:kTWj7ufe
>>469
化石みたいなバージョンやな
2018/08/05(日) 00:56:32.45ID:biDT5wEJ
>>469
いまSPSSを使う理由って何なの?煽りじゃなくマジで
2018/08/05(日) 14:27:54.32ID:dSJLM/da
maple使えよ
2018/08/05(日) 19:10:34.43ID:mULz5b3r
>>472
周囲のspssユーザを見ると「指導教員がspssしか使えないので、
自分もspssしか使えない、
新しい(学術系)ソフトは誰かに丁寧に根気よく指導してみらえないと無理」、
これの再生産。
2018/08/05(日) 19:11:30.48ID:zaJ/WJYb
>>469

研究室に予算がないから
2018/08/05(日) 19:12:42.57ID:mULz5b3r
>>475
予算がなかったら、Rを使え
2018/08/05(日) 19:13:59.36ID:mULz5b3r
>>469>>475を間違えたorz
2018/08/05(日) 19:33:14.43ID:mTZcaJ/n
予算がないならケーキを食べればいいのに
2018/08/08(水) 13:11:20.17ID:7/3l/PxD
再帰呼び出しに関数名の代わりにRecall使うと処理に要する時間が増えることに気づいた。

フィボナッチ数列の再帰呼び出し
# 関数名での呼び出し
fibo <- function(n){
if(n==1|n==2) return(1)
else fibo(n-1)+fibo(n-2)
}

# Recallを使っての呼び出し
fiboR <- function(n){
if(n==1|n==2) return(1)
else Recall(n-1)+Recall(n-2)
}


> system.time(fibo(30))
user system elapsed
4.27 0.02 4.36
> system.time(fiboR(30))
user system elapsed
6.65 0.00 6.70
2018/08/09(木) 17:47:22.65ID:l1M8GWWv
cumsumを再帰関数で書いてみた。

何度も試行錯誤

# cumsum with recursive call
cumsumR <- function(v){
res=numeric(length(v))
cumsumR_sub <- function(v,res,i){
res[1]=v[1]
if(i==length(v)) return(res)
else{
res[i+1] = res[i] + v[i+1]
Recall(v,res,i+1)
}
}
cumsumR_sub(v,res,1)
}
cumsumR(1:10)

とりえあず、動作した。
> cumsumR(1:10)
[1] 1 3 6 10 15 21 28 36 45 55
2018/08/09(木) 18:31:24.68ID:l1M8GWWv
簡略化できた

cumsumR <- function(v,res=NULL,i=1){
res[1]=v[1]
if(i==length(v)) return(res)
else{
res[i+1] = res[i] + v[i+1]
Recall(v,res,i+1)
}
}

> cumsumR(1:10)
[1] 1 3 6 10 15 21 28 36 45 55
>
2018/08/10(金) 18:41:42.48ID:Hlm8Oe3x
ifelseの動作がどうも納得できないでご教示いただきたいのですが。
これってifelseの仕様でしょうか?バグでしょうか?

> x=2:1
> if(x[1]<=x[2]) x else x[2:1]
[1] 1 2
> ifelse(x[1]<=x[2],x,x[2:1])
[1] 1
2018/08/10(金) 18:55:39.89ID:vdkgfABT
>>482
ifelse() はベクトル演算できる関数。
だから、戻り値の要素数は、test部分の要素数に一致する。
testが1つなので、x[2:1]の1つ目の要素が返される。
484483
垢版 |
2018/08/10(金) 18:58:51.59ID:vdkgfABT
testの要素を2つにすれば、出力も2つになる。
> ifelse(c(x[1] <= x[2], x[1] <= x[2]), x, x[2:1])
[1] 1 2
さらに3つにすると、helpに書いている通り、yesやno部分は再利用される。
> ifelse(c(x[1] <= x[2], x[1] <= x[2], x[1] <= x[2]), x, x[2:1])
[1] 1 2 1
2018/08/10(金) 23:06:17.77ID:Hlm8Oe3x
>>483
ありがとうございました。

バグではなくてそういう仕様だったのですね。

こういう使い方ができるということがわかって勉強になりました。

> x=2:1
> ifelse(c(x[1]!=x[2],x[1]==x[2]),1:2,3:4)
[1] 1 4
2018/08/10(金) 23:17:14.10ID:VlOUWHrC
教わったので早速、

ifelse() はベクトル演算できると、再利用されるの動作確認。

> ifelse(c(TRUE,TRUE,FALSE,FALSE,TRUE,FALSE,FALSE),1:2,11:15)
[1] 1 2 13 14 1 11 12
2018/08/10(金) 23:45:24.37ID:VlOUWHrC
2種類の文字の変換もifelseでできるんだなぁ。
> mat
[,1] [,2] [,3]
[1,] 1 1 1
[2,] 1 1 0
[3,] 1 1 0
[4,] 1 1 0
[5,] 1 1 0
[6,] 1 1 0
> print(apply(mat,2, function(x) ifelse(x==1,'真','偽')),quote=F)
[,1] [,2] [,3]
[1,] 真 真 真
[2,] 真 真 偽
[3,] 真 真 偽
[4,] 真 真 偽
[5,] 真 真 偽
[6,] 真 真 偽
2018/08/11(土) 00:28:09.90ID:OesSEWnz
行列も次元付きのベクトルだからもっと簡略化できた。

> (mat=matrix(sample(0:1,12,rep=T),3,4))
[,1] [,2] [,3] [,4]
[1,] 1 1 0 1
[2,] 0 1 0 0
[3,] 1 0 0 1
> print(ifelse(mat==1,'Right','Wrong'),quote=F)
[,1] [,2] [,3] [,4]
[1,] Right Right Wrong Right
[2,] Wrong Right Wrong Wrong
[3,] Right Wrong Wrong Right
>
2018/08/11(土) 18:04:43.46ID:05wxJPem
RやSPSSって名前の試験まであるのね
2018/08/22(水) 14:02:15.21ID:rznk0lAS
規約分数にするパッケージが探せなかったので自分でスクリプトを組んでみた。
エラー処置は省略。


reduce_fraction <- function(x,y){
a=x
b=y
r = a%%b # a=bq+r -> a%%b=b%%r
while(r){
a = b
b = r
r = a%%b
}
gcd=b
cat(x/gcd,'/',y/gcd,'\n')
invisible(c(x/gcd,y/gcd))
}


> reduce_fraction(2860,1082900)
11 / 4165
491132人目の素数さん
垢版 |
2018/08/23(木) 01:12:39.77ID:0Wz4IoKN
rvest?でログイン必要なとこをスクレイピングする時って
login_page <- html_session("https://xxxxx";)

login_form <- html_form(login_page)[[1]] %>%
set_values(AAA="xxxx", BBB="xxxx")

というので行けるはずなんですが
最終行のAAAとBBBってそれぞれhtmlタグのname=""のとこからとってくるんですよね?
これにここがname="user[email]"みたいに[]という記号はいってたらどうすればいいでしょうか?
492132人目の素数さん
垢版 |
2018/08/25(土) 17:48:59.21ID:MdsDkupV
>>491
よろしくおねがいいしまーーーーーーーす
2018/08/26(日) 22:01:57.06ID:2bj/HrEX
>>492
質問の意味がいまいち分からないから、誰も助言できないのでは?

> x <- 'user[email]'
> x
[1] "user[email]"

rvestパッケージを使ったことがないけど、
記号が入っていたらなぜ問題があるのかよく分からない。
2018/08/26(日) 22:53:43.10ID:WnqFRbi9
というかどこのページのスクレイピングしたいか晒して
仮でもいいから
495132人目の素数さん
垢版 |
2018/08/27(月) 06:16:23.20ID:x8E4FG0O
>>493
ちがいます
AAAがどれかよくみてみてください
””はありません
496132人目の素数さん
垢版 |
2018/08/27(月) 06:19:43.00ID:x8E4FG0O
ちょっと直接はることはできないのでタグだけはります。
<input class="form-control" autofocus="autofocus" placeholder="Email address" required="required" type="text" value="" name="user[email]" id="user_email">>>494
2018/08/27(月) 13:25:39.67ID:SdOxff6m
>>495
もっと分かるように説明しないと、追試できる情報も提供しないし。
もしかして変数名などに[]が入っている場合 にどうしたらよいかってこと?

> `user[email]` <- 1:5
> `user[email]`
[1] 1 2 3 4 5
498132人目の素数さん
垢版 |
2018/08/27(月) 15:43:37.46ID:x8E4FG0O
>>497
多分行けました
超感謝!!
2018/08/27(月) 20:20:32.13ID:5a+trmgU
ある問題のシミュレーションしようと思って
問題文の記号のまま

q <- function(x)
....

とやって
q(100)と入力すると
Rが終了することに気づいた。
2018/08/27(月) 22:56:54.68ID:a+8R0Tu1
base::q()
を実行すると爆弾出るね
2018/08/29(水) 22:45:10.53ID:BcwFyR33
ちょっとした疑問です。

空ベクトルの検出って長さ0以外に検出方法ってあるでしょうか?

> x=c(1,2)
> x=x[-1]
> x=x[-1]
> length (x)
[1] 0
> x
numeric(0)
> x==numeric (0)
logical(0)
> is.null(x)
[1] FALSE
> is.na(x)
logical(0)
> x==NULL
logical(0)
> x==NA
logical(0)
> length(x)==0
[1] TRUE
2018/08/31(金) 22:46:15.16ID:IWQvY6FL
4点の座標を入力するとそれらを結ぶ四面体の体積を求めるスクリプトを書いてみた。
高さはパッケージnleqslvを使った近似計算。

# Calculate tetrahedron volume from cordinates
library(nleqslv)
Tetra <- function(O=c(1/2,sqrt(3)/6,sqrt(2/3)),A=c(0,0,0),B=c(1,0,0),C=c(cos(pi/3),sin(pi/3),0)){
fn <- function(x,O,A,B,C){
AO=A-O
BO=B-O
CO=C-O
HO=x[1]*AO+x[2]*BO+(1-x[1]-x[2])*CO # H on triangle ABC
AB=B-A
AC=C-A
c(HO%*%AB,HO%*%AC) # HO vertial to AB and AC
}
fn1 <- function(x) fn(x,O,A,B,C)
x=nleqslv::nleqslv(c(1/3,1/3),fn1)$'x'
AO=A-O
BO=B-O
CO=C-O
HO=x[1]*AO+x[2]*BO+(1-x[1]-x[2])*CO
h=sqrt(sum(HO^2))
a=sqrt(sum((B-C)^2))
b=sqrt(sum((C-A)^2))
c=sqrt(sum((A-B)^2))
s=(a+b+c)/2
base=sqrt(s*(s-a)*(s-b)*(s-c))
V=1/3*base*h
return(V)
}

初期値は辺の長さ1の正四面体

> options(digits = 16)
> Tetra()
[1] 0.1178511301977579
> sqrt(2)/12
[1] 0.1178511301977579

多分、正常に動作していると思う。
2018/09/01(土) 00:25:33.05ID:52Ub52jp
>>502
行列式det使うと簡単
> po <- c(1/2, sqrt(3)/6, sqrt(2/3))
> pa <- c(0,0,0)
> pb <- c(1,0,0)
> pc <- c(cos(pi/3), sin(pi/3), 0)
> det(cbind(pa-po,pb-po,pc-po))/6
[1] -0.1178511
2018/09/01(土) 01:41:47.56ID:qG52f2Ee
ベクトルの三重積を教わったので、パッケージ pracma の外積crossを使った

tetrahedron <- function(O=c(1/2,sqrt(3)/6,sqrt(2/3)),A=c(0,0,0),B=c(1,0,0),C=c(cos(pi/3),sin(pi/3),0)){
AO=A-O
BO=B-O
CO=C-O
as.numeric(abs(pracma::cross(AO,BO) %*% CO)/6)
}

4行で済んだ。

>>503

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

パッケージに頼らずに計算できたのですね。
2018/09/03(月) 18:55:17.77ID:S47YTHgP
データを解析する前にさらっと特徴を見たい時、皆さんはどんなコマンドを使っていますか?

私が思いつくのは
summary
boxplot
hist
pairs

です。こんなのも良いよってのがあったら教えてくださいm(_ _)m

※ライブラリの使用有無は問いません
2018/09/03(月) 19:38:36.45ID:fowZfPON
>>505
BESTパッケージのplotPost
histに加えて95%CIを表示してくれる。
2018/09/03(月) 20:05:14.66ID:OGj8hrn2
>>505
出力をデータフレーム型にしたいときはskimrパッケージ
2018/09/03(月) 20:07:16.33ID:OGj8hrn2
あと、まだ試してないけsummarytoolsパッケージも面白そう
2018/09/09(日) 22:35:22.23ID:9XY+z1xx
>>501
良い方法が見つからなかったので !length(x)で空白ベクトル判定とした。

文字列を逆に並べる再帰呼び出しスクリプト

> reverse <- function(x){
+ if(!length(x)) return(NULL)
+ c(Recall(x[-1]),x[1])
+ }
> cat(reverse(LETTERS[1:26]))
Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
2018/09/09(日) 23:21:54.06ID:1udV8jVZ
>>509
なぜ if (length(x) == 0) と書かないのか?
可読性って知ってるか?
2018/09/10(月) 16:54:23.64ID:89eIPezd
>>510
文脈読めば
!length(x)で空白ベクトル
の流れ
2018/09/10(月) 18:22:05.74ID:gLTPxqtw
>>511
length は数値を返す関数なのに、なぜわざわざ論理演算をするんだ?
プログラムは、ここの議論を知らない人が読む可能性のほうが高いんだぞ。
2018/09/10(月) 19:12:52.95ID:ZYY4OYkH
>>512
正規分布が一様分布より大きい期待値の算出に
mean(rnorm(100)>runif(100))
って書かない?
俺は
sum(ifelse(rnorm(100)>runif(100),1,0))/100
って書いたりしないけど。
2018/09/10(月) 19:43:25.60ID:SKQ8XoAj
>>512
え、常套手段やん?!
2018/09/10(月) 19:50:35.36ID:ZYY4OYkH
>>514
論理値を数値に置き換えて計算しているから
数値を論理値にしても別に違和感がない。
可読性は慣れの問題。
2018/09/10(月) 19:54:17.32ID:SKQ8XoAj
>>515
アンカー間違えとる?
だから、そんなの常套手段やん?
2018/09/10(月) 21:30:23.37ID:gLTPxqtw
>>513
それとこれとは話が別だ。
logical は TRUE か FALSE の二値しかとらないから、それから数値への変換は自明。
多種の値をとる数値に論理演算をするのはいただけない。
2018/09/10(月) 21:36:20.92ID:gLTPxqtw
>>515
is.empty.vector のような関数があるならそれでよいが、length を使っているのだから、それを勝手にベクトルが空かどうかの判断に使っているのはあなたであって、他人はそのようには考えない、といっているのだ。
自分だけしかこーどを見ないならべつに構わないが、こういうところに晒すのはよくない。
ましてや常套手段などと言って他人に教え込むのはやめてもらいたい。
2018/09/10(月) 21:51:19.40ID:5QS5/GHY
>>518
常套手段というのはmeanの話じゃね?
2018/09/10(月) 21:55:50.32ID:5QS5/GHY
whileの中は1でも2でもよくね?

n=0
while(1){
if(n>10) return(10)
n=n+1
}


n=0
while(2){
if(n>10) return(10)
n=n+1
}
2018/09/10(月) 22:00:57.10ID:5QS5/GHY
>509は
配列を逆順に並べる再帰呼出しのコード。

Rにはrevという関数がある。

そのコードみてみ!

lengthを真偽判定に使ってますがな。


> base:::rev.default
function (x)
if (length(x)) x[length(x):1L] else x
2018/09/10(月) 22:18:05.27ID:DJR6mPp+
>>518
>521みた?
if(length(x)!=0)になってないよ。
2018/09/11(火) 00:19:39.45ID:WPUC3B84
>>518
>こういうところ
誰も鵜呑みにしない便所の落書き。。。
2018/09/11(火) 08:48:42.34ID:QUqp/jpE
!を引数が数値のときは0か否かを返す関数と理解すれば
if(!0) print(!1)の結果もサクッとわかる。
2018/09/11(火) 09:08:32.20ID:QUqp/jpE
数値を非零かどうか論理値に変換して処理するかは
関数によるな。

if やwhileは変換処理しているけど
whichだとエラーになるな。

> which(!0)
[1] 1
> which(0)
Error in which(0) : argument to 'which' is not logical
> which(2)
Error in which(2) : argument to 'which' is not logical
> which(!3)
integer(0)
>
2018/09/11(火) 09:12:56.04ID:QUqp/jpE
!ってベクトル対応しているな
> which(!(-1:1))
[1] 2
> !(-2:2)
[1] FALSE FALSE TRUE FALSE FALSE
2018/09/15(土) 08:05:49.52ID:Vl7XZ52q
!をnotではなくis.falseとかis.zero変換すれば( ・∀・)イイ!!
2018/09/15(土) 16:42:00.50ID:h0gUCZ3r
>>527
is.zero だと?
だったら最初から == 0 てよいじゃないか。
2018/09/15(土) 16:45:38.59ID:h0gUCZ3r
>>525
だいたい、if や while は関数じゃないし。
while (1) などと書くのはCに毒されているんじゃねーの?
Rなら while (TRUE) のほうが良いし、repeat というのもある。
2018/09/15(土) 16:45:41.31ID:Vl7XZ52q
>>528
スクリプトを読むときに脳内変換する癖をつけておけば
可読性が悪いと思わずにすむ。
2018/09/15(土) 16:46:13.42ID:Vl7XZ52q
>>518
>521みた?
if(length(x)!=0)になってないよ。
2018/09/15(土) 17:19:35.45ID:h0gUCZ3r
>>531
Rのライブラリ?の書き方なんてあてにならないよ。
そもそも、rev も 509 の reverse も演算の回数を必要最低限にするなら、条件は length(x)) >= 2 または > 1 だ。
まあ if (length(x)) のほうが速かったのかも知れないが、常にそうなるとは限らないのだから、早すぎる最適化は諸悪の根源だ。
2018/09/15(土) 19:30:34.55ID:Vl7XZ52q
可読性の次は速度かよ。
自分の流儀と違う { の使い方でも文句いいそう。
2018/09/15(土) 19:44:27.43ID:VibLIqgl
0,1を1000万個作って
!
!=
>
==
での真偽判定を各々10回する時間を出してみた。


> x=rbinom(1e7,1,0.5)
> system.time(replicate(10,!x))
user system elapsed
1.27 0.33 1.59
> system.time(replicate(10,x!=0))
user system elapsed
2.39 0.36 2.75
> system.time(replicate(10,x>0))
user system elapsed
2.58 0.31 2.92
> system.time(replicate(10,x==1))
user system elapsed
2.60 0.36 2.99
2018/09/15(土) 19:57:45.72ID:VibLIqgl
!x と x!=0 で10回やったが、

> f <- function(){
+ x=rbinom(1e7,1,0.5)
+ (a=system.time(!x)[3])
+ (b=system.time(x!=0)[3])
+ a<b
+ }
> (re=replicate(10,f()))
elapsed elapsed elapsed elapsed elapsed elapsed elapsed elapsed elapsed
TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
elapsed
TRUE

結果は再現された。
2018/09/15(土) 20:06:37.73ID:VibLIqgl
lengthが絡むと

> x=1:1e8
> f1 = function(x) if(!length(x)) return(NULL) else x=x[-1]
> f2 = function(x) if(length(x)==0) return(NULL) else x=x[-1]
> system.time(f1(x))
user system elapsed
2.38 0.53 2.93
> system.time(f2(x))
user system elapsed
2.05 0.61 2.69

御指摘の通り、!の負け
537132人目の素数さん
垢版 |
2018/10/04(木) 17:02:48.04ID:247Ted9r
>>444
>遅レスだが、Ubuntu 18.04LTSならデフォルトのIBus-mozcで日本語入力ができるそうだ。
>詳しくはUbuntu Weekly Recipeの第527回を読んでくだされ

Ubuntu 18.04.1 LTSにアップグレードしたけどできない
いままでスクレイピングにつかってrvestのログインコマンドもエラー出るようになったし最悪だ。。。。
2018/10/04(木) 20:04:49.68ID:W6fWyA5T
アップグレードってことは文字入力がFcitxのままになってない?Fcitxならパッチ要だよ。
Voyager 18.04LTS(xubuntu 18.04LTS)ではパッチなしでRStudioに日本語入力できた。
2018/10/26(金) 12:58:59.43ID:8LsI2NoU
昨日、PCを新しくして最新のR入れたんだけど、
作業ディレクトリの固定化できなくね?
前まではショートカットのプロパティで作業フォルダ指定してたんだけど、
新しいR、何度やっても作業ディレクトリがデフォルトのドキュメントに戻りやがる

どうすればいいか、誰がご教示を。
2018/10/26(金) 13:04:50.23ID:I9GOHEF6
>>539
プロパティでコマンドラインオプションを消せばよい。
--cd-ほにゃらら
というのが付いてるでしょ。
2018/10/26(金) 13:13:30.11ID:8LsI2NoU
>>540
あ、なるほど
ありがとうございます、多謝
542132人目の素数さん
垢版 |
2018/10/26(金) 23:05:34.11ID:5yNEfvRx
xtsの取り扱い方について質問失礼します。
以下のコードで、dataには2018/10/20 00:00〜2018/10/25 00:00の1時間刻みのaとbの値のxts型オブジェクトが入りますが、(aとbは時系列データのイメージです)
このdataの毎日09:00の値を添え字を使って取り出す方法はありますか?
(data["2018-10-21 00:00"]とすると10/21の00:00が取り出せるような感じで)

library(xts)
time <- seq(as.POSIXct("2018-10-20 00:00"), as.POSIXct("2018-10-25 00:00"), by="1 hour")
a <- rnorm(length(time))
b <- rnorm(length(time))
data <- xts(x = cbind(a,b), order.by = time)

思いついたのはfor文を使って以下のようにするのかなと思ったのですがもう少しいい方法があるだろうなと思いまして…

data_result <- data[10] # まずxts型の入れ物を作る(2018/10/20 09:00)
for (i in 1:4) {
data_result <- rbind(temp,data[10+24*i]) # 2日目以降はこれにくっつける
}
data_result
2018/10/26(金) 23:12:48.52ID:Xg1/ChR5
失礼、>>542の下のコードはこっちです

data_result <- data[10] # まずxts型の入れ物を作る(2018/10/20 09:00)
for (i in 1:4) {
data_result <- rbind(data_result, ,data[10+24*i]) # 2日目以降はこれにくっつける
}
data_result
2018/10/26(金) 23:38:29.60ID:oEWqNGH8
>>543
idx <- seq(10, length(time), by=24)
result <- data[idx]
じゃダメなのか?
2018/10/27(土) 01:10:34.48ID:NQVW6zPX
>>544
ああ、これがいいですね!お恥ずかしい…
ありがとうございます
2018/11/01(木) 22:44:27.08ID:xCdOvDq8
巨大数を扱えるというふれこみのRmpfrって正確じゃないな。
50の階乗を計算させてみた

R with Rmpfr
> mpfr(factorial(50),1e5)
1 'mpfr' number of precision 100000 bits
30414093201713018969967457666435945132957882063457991132016803840

Haskell:
Prelude> product[1..50]
30414093201713378043612608166064768844377641568960512000000000000

Python:
import math
print(math.factorial(50))
30414093201713378043612608166064768844377641568960512000000000000

Wolfram:
https://www.wolframalpha.com/input/?i=50!
30414093201713378043612608166064768844377641568960512000000000000
2018/11/02(金) 23:29:01.53ID:fMme23mF
こまけぇこたぁいいんだよ!!
2018/11/03(土) 09:32:49.16ID:NiwdVATo
R3.5.xから、Windows環境だと日本語パスまわりでエラーがでてどうにもならない
enc2native()しても駄目だし
とりあえずcairo_png()だけでも…
2018/11/03(土) 10:31:12.42ID:pqZePX+I
一度つかって日本語周りの処理でエラー出てきたんで未だに3.4.4浸かってる
2018/11/04(日) 21:55:16.95ID:lTCeMsqQ
統計の質問はこのスレでいいんだろうか?

ある医院に1時間あたり平均5人の患者が来院し、その人数の分布はポアソン分布にしたがうとする。
1時間あたりの平均診療人数は6人で、一人あたりの診療時間は指数分布に従うとする。
診察までの平均の待ち時間は何時間か?

このシミュレーション解はこれであってる?

N=1e6
λ=5
μ=6
sum(rpois(N,λ)*rexp(N,μ))/N

> sum(rpois(N,λ)*rexp(N,μ))/N
[1] 0.8331036

60かけて、分にすると
[1] 49.86565
2018/11/08(木) 12:35:54.73ID:wKTjJ6Fa
>>306
grep 使って書いてみた。
# mhs(c(1,0,1,1,0,1,1,1)) : return 3
mhs = function(x){ # maximum head sequence
y=paste(x,collapse='')
str="1"
if(!grepl(str,y)) return(0)
else{
while(grepl(str,y)){
str=paste0(str,"1")
}
return(nchar(str)-1)
}
}

system.time(mean(replicate(1e4,mhs(sample(0:1,100,rep=T))>=5)))


# N(=100)回コインをn(=5回)以上続けて表がでるか?TRUE or FALSE
seqn<-function(n=5,N=100,p=0.5){
rn=rbinom(N,1,p)
count=0
for(i in 1:N){
if(rn[i] & count<n){
count=count+1
}
else{
if(count==n) {return(TRUE)}
else{
count=0
}
}
}
return(count==n)
}

system.time(mean(replicate(1e4,seqn())))


結果は、
> system.time(mean(replicate(1e4,mhs(sample(0:1,100,rep=T))>=5)))
user system elapsed
4.56 0.01 4.61
> system.time(mean(replicate(1e4,seqn())))
user system elapsed
1.05 0.00 1.07

逆に4倍時間がかかるようになった
2018/11/08(木) 14:05:00.34ID:1h1GfW+d
今さらだけどそれってrle使っちゃだめなの?
2018/11/08(木) 15:13:38.19ID:UNhl34kg
coinの表裏を1と0で表して、その累積和を取ったベクトルを用意して
そのベクトルの5個前とのdiffの要素の中に5が一回でも現れることが、一回でも5回連続で表が出たことがあることの必要十分条件
grepはどうしても時間がかかるしif文もできれば使いたくない

searchseq <- function(n=5,N=100,p=0.5,trial=10000){
result <- 0 # 表が5回以上出た回数を数える入れ物
for (i in 1:trial){
coin <- rbinom(N,1,p)
coincumsum <- cumsum(coin)
coindiff <- diff(coincumsum,5)
#diff(coincumsum,5)の要素に一個でも5があれば表が5回以上出たことがあったということ
#anyでT/Fにして、sumで0/1にする
result <- result+sum(any(coindiff==5))
}
return(result/trial)
}

結果もよさそう
> searchseq()
[1] 0.80793

> system.time(mean(replicate(10000,mhs(sample(0:1,100,rep=T))>=5)))
ユーザ システム 経過
0.92 0.00 0.93
> system.time(mean(replicate(10000,seqn())))
ユーザ システム 経過
0.29 0.00 0.30
> system.time(searchseq())
ユーザ システム 経過
0.21 0.00 0.20
2018/11/08(木) 22:10:55.78ID:I6htNxzg
あっ、コード中の5はnに置き換えてね
2018/11/08(木) 23:32:48.68ID:/ZlhhGjJ
>>553
レスありがとうございました。

rleとも比べてみました。

> system.time(mean(replicate(1e4,seqn())))
user system elapsed
4.290 0.000 4.377
>system.time(mean(replicate(1e4,max(rle(rbinom(100,1,0.5))$len)>=5)))
user system elapsed
3.620 0.000 3.742
> system.time(mean(replicate(1e4,mhs(rbinom(100,1,0.5)>=5))))
user system elapsed
2.390 0.000 2.435
> system.time(searchseq())
user system elapsed
1.880 0.000 1.988
2018/11/08(木) 23:35:10.38ID:/ZlhhGjJ
>>555
greplの逆転はsampleをrbinomに変えたためでしょう。

> system.time(replicate(1e5,sample(0:1,100,rep=T)))
user system elapsed
7.200 0.180 7.591
> system.time(replicate(1e5,rbinom(100,1,0.5)))
user system elapsed
5.980 0.230 6.319
2018/11/09(金) 00:20:12.33ID:BZRFS9lT
不勉強ながらrle関数って初めて知ったけど使いやすそうだな
2018/11/09(金) 00:36:46.75ID:Ui6BpICy
>>555
rleは0も数えているから間違っているんじゃ?
2018/11/09(金) 02:01:36.95ID:Qla0VxTD
>>558
ご指摘ありがとうございました。
修正しました。
rle1 <- function(N=100,n=5,p=0.5){
r=rle(rbinom(N,1,p))
max(r$len[which(r$val==1)])
}
結果
> system.time(mean(replicate(1e4,max(rle1()>=5))))
user system elapsed
4.430 0.000 4.546
> system.time(mean(replicate(1e4,seqn())))
user system elapsed
4.490 0.010 4.609
> system.time(mean(replicate(1e4,mhs(rbinom(100,1,0.5))>=5)))
user system elapsed
7.440 0.000 7.656
> system.time(searchseq())
user system elapsed
1.950 0.000 2.066
>
2018/11/09(金) 07:25:00.97ID:Qla0VxTD
無理矢理1行にして実行

system.time(mean(replicate(1e4,any(diff(cumsum(rbinom(100,1,0.5)),5)==5))))
user system elapsed
1.820 0.000 1.886
>
> system.time(mean(replicate(1e4,with(rle(rbinom(100,1,0.5)), max(lengths[wh
<e(1e4,with(rle(rbinom(100,1,0.5)), max(lengths[whi ch(values==1)])>=5))))
user system elapsed
4.370 0.010 4.478
2018/11/09(金) 07:59:47.47ID:rijPDFSR
>>560
意味もなくforループ回してた上に毎回sum使って真偽値を数値に変換してたけど
replicate使って最後に一回だけmean取ると2.066→1.886で1割短くなるのね
他人のコード読むのは勉強になる
2018/11/09(金) 09:06:56.99ID:Ui6BpICy
>>559
whichいらねーよ。
2018/11/09(金) 09:44:07.41ID:5AnUTlVm
>>559
全部が0のとき、エラーになるので修正

rle01 <- function(x){ # c(0,1,1,1,0,0) => return 3
if(sum(x)==0) return(0) #c(0,0,0,0,0,0) => return 0
else{
r=rle(x) # Run Length Encoding
max(r$lengths[which(r$values==1)]) # max length of value 1
}
}

動作確認

> rle01(x<-rbinom(100,1,0.5)) ; x
[1] 8
[1] 1 1 0 1 0 1 0 0 0 1 1 1 0 1 0 0 0 0 1 0 0 0 1 1 1 1 0 0 1 1 1 1 1 0 0
[36] 1 1 0 1 1 1 0 1 1 0 0 1 1 0 1 1 1 0 1 1 0 0 1 1 0 1 0 1 1 0 1 0 1 0 0
[71] 1 1 1 1 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 0 0 1 0 0 1 1 1 0 1 1
> rle01(x<-rbinom(100,1,0)) ; x
[1] 0
[1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[36] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[71] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2018/11/09(金) 10:10:01.39ID:Ui6BpICy
>>563
センスないなあ。
rle01 <- function(x) {
r <- rle(x)
one <- r$values == 1
if (any(one)) max(r$length[one]) else 0
}
2018/11/09(金) 10:40:31.84ID:5AnUTlVm
>>564
whichは余分でした。

sumの方がrleより高速だと思ったらから、すべて0の場合はrleを呼ばないことにしただけ。
0連続でやるとこれだけ差がつく。

rle01 <- function(x){ # c(0,1,1,1,0,0) => return 3
if(sum(x)==0) return(0) #c(0,0,0,0,0,0) => return 0
else{
r=rle(x) # Run Length Encoding
max(r$lengths[which(r$values==1])] # max length of value 1
}
}
rle012 <- function(x) {
r <- rle(x)
one <- r$values == 1
if (any(one)) max(r$length[one]) else 0
}

> x=rep(0,1e8)
> system.time(rle01(x))
user system elapsed
0.3 0.0 0.3
> system.time(rle012(x))
user system elapsed
7.36 4.52 13.25
>
2018/11/09(金) 10:52:23.39ID:Ui6BpICy
>>565
そんな特別な場合のことに対して高速化するのは愚の骨頂。
1が一つでもある場合にsumを呼ぶのは余計じゃないのか?
余計なwhichがあるくらいだから、まずは素直にやりたいこと、やるべきことを正しく書くようにしたら?
2018/11/09(金) 11:01:40.74ID:5AnUTlVm
1000本に1本あたる宝クジを100本買って続けて2本あたる確率のシミュレーション解の算出時間比較。
確率の理論値は9.8897353347449091e-05

> system.time(mean(replicate(1e4,rle01(rbinom(N,1,p))>=n)))
user system elapsed
0.61 0.00 0.64

> system.time(mean(replicate(1e4,rle12(rbinom(N,1,p))>=n)))
user system elapsed
1.97 0.00 2.03
2018/11/09(金) 15:22:38.24ID:5AnUTlVm
>>567
分数で表すと

890788167367/9007199254740992

9.889735334744909e-05
2018/11/09(金) 19:43:44.34ID:0M0agNOf
JPXのデータ、ファイル形式csvを読み込もうとするとうまく行かないんですが
どんな引数をつければいいですか
2018/11/10(土) 10:36:49.41ID:QJ6NJqU7
>>566
実はシミュレーションじゃなくて
漸化式からのプログラム解を分数表示するプログラムはpythonで作成済。
ここに置いた。
https://egg.2ch.net/test/read.cgi/hosp/1540905566/77
2018/11/10(土) 11:20:41.80ID:QJ6NJqU7
コインを100回ふったときの表連続の最大数が5であったときの
このコインの表がでる確率の期待値、モード比、信頼区間を求めるのが次のネタ。

unirootで算出できたけど
シミュレーションはどうすればいいのかアイデアが浮かばない。
MCMCで解決できるかなぁ?

これをシミュレーションで検証したい。

$Rscript main.r
lower mean mode upper
0.2487456 0.4469764 0.4589692 0.6386493

http://tpcg.io/asKRE9
2018/11/11(日) 20:11:21.81ID:ODPKEEGK
1億回のコイントスで何回連続して表がでる確率が高いかRでやってみた。

# maximal sequential head probability at 10^8 coin flip
> y
[1] 2.2204460492503131e-16 2.2204460492503131e-16
[3] 8.8817841970012523e-16 1.5543122344752192e-15
[5] 3.5527136788005009e-15 6.8833827526759706e-15
[7] 1.4210854715202004e-14 2.8199664825478976e-14
[9] 5.6843418860808015e-14 1.1346479311669100e-13
[11] 2.2737367544323206e-13 4.5452530628153909e-13
[13] 9.0949470177292824e-13 1.8187673589409314e-12
[15] 3.6379788070917130e-12 7.2757355695785009e-12
[17] 1.4551915228366852e-11 2.9103608412128779e-11
[19] 5.8207660913467407e-11 1.1641509978232989e-10
[21] 6.6493359939245877e-06 2.5720460687386204e-03
[23] 4.8202266324911647e-02 1.7456547460031679e-01
[25] 2.4936031630254019e-01 2.1428293501123058e-01
[27] 1.4106434838399229e-01 8.1018980443629832e-02
[29] 4.3428433624081136e-02 2.2484450838189007e-02

25回が続くのが4回に1回あることになる。
pythonで25回以上と25回ちょうどになるのを計算させてみた。

その結果、
Over 25
6977459029519597/9007199254740992
= 0.7746535667951356
Just 25
2246038053550679/9007199254740992
= 0.24936031612362342

高速化を狙ってCに移植したら
100万回で暴走。
https://egg.5ch.net/test/read.cgi/hosp/1540905566/132
2018/11/12(月) 21:04:57.19ID:boi8bvdM
"マラソン大会の選手に1から順番に番号の書かれたゼッケンをつける。
用意されたゼッケンN(=100)枚以下の参加であった。
無作為に抽出したM(=5)人のゼッケン番号の最大値はMmax(=60)であった。
参加人数推定値の期待値とその95%信頼区間を求めよ"

decken <- function(M, Mmax, N, conf.level=0.95){
if(Mmax < M) return(0)
n=Mmax:N
pmf=choose(Mmax-1,M-1)/choose(n,M)
pdf=pmf/sum (pmf)
mean=sum(n*pdf)
upr=n[which(cumsum(pdf)>conf.level)[1]]
lwr=Mmax
c(lower=lwr,mean=mean,upper=upr)
}
decken(M=5,Mmax=60,N=100)

> decken(M=5,Mmax=60,N=100)
lower mean upper
60.0000 71.4885 93.0000

これをシミュレーションで確認したい。

# simulation
M=5 ; Mmax=60 ; N=100
sub <- function(M,Mmax,N){
n=sample(Mmax:N,1) # n : 参加人数n
m.max=max(sample(n,M)) # m.max : n人からM人選んだ最大番号
if(m.max==Mmax) return(n)
}
sim <- function(){
n=sub(M,Mmax,N)
while(is.null(n)){
n=sub(M,Mmax,N) # 最大番号が一致するまで繰り返す
}
return(n)
}
runner=replicate(1e4,sim())
summary(runner) ; hist(runner,freq=F,col="lightblue")
quantile(runner,prob=c(0,0.95))
cat(names(table(runner)[which.max(table(runner))]))

> summary(runner) ; hist(runner,freq=F,col="lightblue")
Min. 1st Qu. Median Mean 3rd Qu. Max.
60.00 63.00 68.00 71.43 77.00 100.00
> quantile(runner,prob=c(0,0.95))
0% 95%
60 93
> cat(names(table(runner)[which.max(table(runner))])) # 最頻値
60

結果は確認できたけど、もっと高速なシミュレーションアルゴリズムはあるだろうか?
2018/11/16(金) 13:44:59.80ID:U19cHKqd
重複があるか否かを返す、anyDuplicatedという関数を知ったので総当たり比較と早いかどうか比べてみた。
覆面算を □/□ * □/□ = □□/□を解くの使ってみた。
a/b * c/d == ef/g (c>a)として

F = function(fun){
n=1:9
ans=NULL
for(a in n){
for(b in n){
for(c in a:9){
for(d in n){
for(e in n){
for(f in n){
for(g in n){
if(fun(a,b,c,d,e,f,g)){
ans=rbind(ans,c(a,b,c,d,e,f,g))}}}}}}}}

return(ans)
}
で虱潰しに判定

F1=function(a,b,c,d,e,f,g){ #全部の組み合わせが等しくないのを確認
(a/b)*(c/d)==(10*e+f)/g &
a!=b & a!=c & a!=d & a!=e & a!=f & a!=g &
b!=c & b!=d & b!=e & b!=f & b!=g & c!=d &
c!=e & c!=f & c!=g & d!=e & d!=f & d!=g & e!=f & e!=g & f!=g
}

F2=function(a,b,c,d,e,f,g){ # anyDuplicatedで重複なしを判定
(a/b)*(c/d)==(10*e+f)/g & !anyDuplicated(c(a,b,c,d,e,f,g))
}

> system.time(F(F1))
user system elapsed
52.56 0.25 53.38
> system.time(F(F2))
user system elapsed
113.78 0.11 115.81

anyDuplicatedでコードは短くなるが速さが犠牲になった。
2018/11/16(金) 16:13:49.03ID:zcEc4+wx
カルマンフィールタ
2018/11/18(日) 12:56:58.01ID:tDkQkz0a
初歩的な質問で恐縮ですが、
truehistで出したヒストグラムの情報をテキストファイルとして保存する方法、教えて頂けませんか?
2018/11/18(日) 16:15:11.61ID:hHA2tyUi
>>576
truehist関数はhist関数と違って戻り値を返さないから無理なのでは
2018/11/18(日) 17:12:37.03ID:HQweHJGH
>>576
MASS::truehist
でソースを覗いたら最後はinvisible()になっていた。
ここを
return(list(breaks=breaks,h=h,nbins=nbins,xlab=xlab))
にしたら

$`breaks`
[1] -0.001 0.999 1.999 2.999 3.999 4.999 5.999 6.999 7.999 8.999 9.999 10.999 11.999
[14] 12.999 13.999

$h
[1] 1

$nbins
[1] 17

$xlab
[1] "x"
で出力されるけど、
どのパラメータがあればヒストグラムが再現できるのかは不勉強にてわからない。
2018/11/18(日) 18:13:02.48ID:hHA2tyUi
関数いじるならbreaksとestを出力させればよい
2018/11/18(日) 20:37:19.22ID:HQweHJGH
>>579
レスありがとうございます。
すると
truehist のソースの最後の
invisible()

return(list(breaks=breaks,est=est))
として、breakの中点を横軸、estを縦軸にするとヒストグラムが再現できるわけですね。
2018/11/18(日) 20:40:50.06ID:HQweHJGH
invisible() → return(list(breaks=breaks,est=est))
に改造したソースをtruehist0として

midpoint <- function(x){ # c(1,2,3,4) -> c(1.5,2.5,3.5)
n=length(x)
mpt=numeric(n-1)
for(i in 1:(n-1)){
mpt[i]=mean(x[i],x[i+1])
}
return(mpt)
}
x=rnorm(10000)
(data=truehist0(x))
with(data, plot(midpoint(breaks),est,type='h',lwd=5,col='cyan'))

で元のヒストグラムが再現できた。
2018/11/18(日) 20:52:08.49ID:HQweHJGH
graphics:::hist.default

でhistのソースを表示させてみた。

r <- structure(list(breaks = breaks, counts = counts, density = dens,
mids = mids, xname = xname, equidist = equidist), class = "histogram")
if (plot) {
plot(r, freq = freq1, col = col, border = border, angle = angle,
density = density, main = main, xlim = xlim, ylim = ylim,
xlab = xlab, ylab = ylab, axes = axes, labels = labels,
...)
invisible(r)
}

histでのcountsが
truehistではestと呼ばれているようだ。

estimateの略かな?
2018/11/20(火) 18:37:20.95ID:kwMT/Yc9
どいつもこいつもナイル川で説明しやがって
データの操作が一番むずいんだよ!
2018/11/21(水) 12:43:45.15ID:4Qrr7yQM
あるデータ群に対して、確率密度関数のパラメータをフィッティングさせる方法ってないですか?
ちなみに、フィッティングさせたいのはレブィフライト確率密度関数です。
2018/11/21(水) 17:15:18.99ID:/i6dFnq8
普通に最尤推定できないっけ?
最小二乗法でもできた気がする
2018/11/21(水) 21:23:46.28ID:kb0MtFao
>>584
MASSのfitdistとVGAMのlevyを使うとなんとかなるかも。
やったことないけど。
2018/11/21(水) 21:59:06.34ID:kb0MtFao
>>584-585

とりあえず、最小二乗法でやってみた。

ガンマ分布の乱数を近似してみた。

dlevy <- function (x,m,c) sqrt(c/2/pi)*exp(-c/2/(x-m))/(x-m)^3/2
set.seed(123)
dat=rgamma(1e3,1) ; hist(dat,freq=F)
x=density(dat)$x ; y=density(dat)$y
lines(x,y)
f<-function(mc){
m=mc[1];c=mc[2]
sum((y-dlevy(x,m,c))^2)
}
(mc=optim(c(0,1),f, method='N')$par)
curve(dlevy(x,mc[1],mc[2]),add=T,col=2)
2018/11/21(水) 23:39:04.38ID:8W1KB4Wk
>>586
fitdistは対応できる分布が限定されているから
のソースを改造しないと無理だな。
2018/11/22(木) 19:54:16.79ID:bptUComJ
ソースが長かったので

sink('print.out')
print(MASS::fitdistr)
sink()

でprint.outに出力してみた。

これもoptimを使っているようだが、最小二乗法なのかどうなのかわからなかった。
2018/11/23(金) 15:40:10.08ID:lNNKNPJr
>>550
統計というより待ち行列理論だね
50分が答えになるから合ってそう
2018/11/23(金) 18:16:00.74ID:rwOyVQ2V
>>590
レスありがとうございます。

λ=5
μ=6
N=1e6
sum(rpois(N,λ)*rexp(N,μ))/N

> sum(rpois(N,λ)*rexp(N,μ))/N
[1] 0.833631

ρ=λ/μ
ρ/(1-ρ)
ρ/(1-ρ)*1/μ
> ρ/(1-ρ)*1/μ
[1] 0.8333333

なのでいいのだろうとは思っていたのですが、時系列のシミュレーションは自信がありませんでした。
2018/11/23(金) 21:47:20.33ID:rwOyVQ2V
>>591
>550の設定で12分毎に患者が来院したら、待ち時間は全員0だと思うのだが

ρ/(1-ρ) の公式って正しいんだろうかな?
2018/11/24(土) 00:40:11.23ID:+sZNyHbC
50分待ちだと常時待合室で5人は待ってることになるな
2018/11/27(火) 11:01:28.21ID:V3tvhpxu
>>592
自己レス
公式は定常状態に達したときという前提での計算なんだな。

MMS = function(n, lamda=5,mu=6,s=1){
rho=lamda/mu
sig=0
for(i in 0:s) sig=sig+rho^i/factorial(i)
p0=1/( sig + rho^(s+1)/factorial(s)/(s-rho) )
ifelse(n >= s, rho^n/factorial(s)/s^(n-s)*p0, rho^n/factorial(n)*p0)
}

E=0
for(i in 0:1000) E=E+i*MMS(i)

> E
[1] 5
2018/11/27(火) 11:12:11.41ID:+K2fEP5F
みやぞん分布の話?
2018/11/27(火) 16:44:04.82ID:V3tvhpxu
>>595
こういう類の待ち時間の話。

ある医院では、患者が平均10分間隔でポアソン分布にしたがって訪ねてくることがわかった。
医者は1人であり、1人の患者の診療にかかる時間は平均8分の指数分布であった。
「平均待ち時間」を5分以下にするには同じ診察効率の医師が何人に必要か?
その最小人数で「平均待ち時間」を5分以下に保って診療するには1時間に何人まで受付可能か?


公式に当て嵌めれば解けるのだけど
どうやってシミュレーションすればいいのか思い浮かばない。
コイントスやサイコロだとシミュレーションは容易なんだが。
2018/11/28(水) 14:59:50.66ID:r8zTzMor
# シミュレーションしたみたが、結果が合致しない(特定のseedでは合致したけど)

# ある医院に1時間あたり平均5人の患者が来院し、その人数の分布はポアソン分布にしたがうとする。
# 1時間あたりの平均診療人数は6人で、一人あたりの診療時間は指数分布に従うとする。
# 診察までの平均の待ち時間は何時間か?

MM1sim <- function(n=40,lambda=5/60,mu=6/60,seed=FALSE,Print=TRUE){
# service starc clock time(ssct) since 9:00
ssct=numeric(n)
# waiting time(w8)
w8=numeric(n)
# service end clock time(sect)
sect=numeric(n)
# arrival clock time(act)
if(seed) set.seed(1234) ;
act=round(cumsum(rexp(n,lambda)))
# duration of service(ds)
if(seed) set.seed(5678) ;
ds=round(rexp(n,mu))

# simulation assuming service starts at 9:00
head(act) # act : arrival clock time
head(ds) # ds : duration of service
# initial values
ssct[1]=act[1] # 9:15 service start clock time for 1st guest
sect[1]=act[1]+ds[1] # 9:25 sevice end clock time for 1st guest
w8[1]=0


for(i in 2:n){
w8[i]=max(sect[i-1]-act[i],0)
ssct[i]=max(sect[i-1],act[i])
sect[i]=ssct[i]+ds[i]
}
if(Print){
print(summary(w8))
hist(w8,freq=FALSE,col="lightblue",main="")
}
invisible(w8)
}

w8m=replicate(1e3,mean(MM1sim(P=F)))
summary(w8m)
2018/11/28(水) 15:00:27.16ID:r8zTzMor
途中の計算サンプル

# simulation step by step
#
# act[2] # 9:16 arrival clock time of 2nd
# max(sect[1]-act[2],0) # 9:25-9:16 vs 0 = ?sevice for 1st ends b4 2nd arrival
# w8[2]=max(sect[1]-act[2],0) # 9 min : w8ing time of 2nd
# ssct[2]=max(sect[1],act[2]) # 9:25 vs 9:16 = service start clock time for 2nd
# sect[2]=ssct[2]+ds[2] # 9:25 + 8 = 9:33 service end clock time for 2nd
#
# act[3] # 9:17 arrival clock time of 3rd
# max(sect[2]-act[3],0) # 9:33 - 9:17 vs 0 = ?serivce for 2nd ends b4 3rd arrival?
# w8[3]=max(sect[2]-act[3],0) # 16 min : w8ting time of 3rd
# ssct[3]=max(sect[2],act[3]) # 9:33 vs 9:17 = service start clock time for 3rd
# sect[3]=ssct[3]+ds[3] # 9:33 + 11 = 9:44 service end clock time for 3rd
#
2018/11/28(水) 19:28:45.39ID:r8zTzMor
>>597
患者来院数40人程度では定常状態に達しないということみたいだな。

10万人での待ち時間の分布(理論値50に近い)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.000 5.532 28.619 47.540 67.370 528.511

100人での待ち時間の分布 (シミュレーションの度にばらつく)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.000 6.958 16.564 22.200 31.652 109.204

40人来院を1万回繰り返した平均の分布
Min. 1st Qu. Median Mean 3rd Qu. Max.
1.304 11.764 19.357 25.449 32.536 177.913

ここに上げておきました。
http://tpcg.io/7psmrQ

結局のところ、待ち時間行列の理論を個人医院に適応しても
定常状態(待ち行列の長さが一定)に達していないと実用性がなさそうだな。

シミュレーションはなんとなく機能していた感じ。

ここに上げておきました。
https://www.tutorialspoint.com/tpcg.php?p=7psmrQ
http://tpcg.io/7psmrQ
2018/11/29(木) 18:50:23.24ID:GEvMs+K3
来院患者数と待ち時間シミュレーションの結果をグラフにしてみた。
個人医院で待ち行列の長さが一定になるほどの受診があるとは考えがたいからこっちの方が現実に即しているんじゃなかろうか
と思うが、解析解はどんなふうになるのか想像もつかん。

https://i.imgur.com/tCOoxF7.png
2018/12/01(土) 18:03:07.99ID:gm1XmpT3
初歩的な質問ですいません
truehistで軸を対数軸にして表示する方法って分かりますか?
2018/12/02(日) 00:37:54.68ID:XyqxkFs6
truehistだと以前の質問でお礼すらしなかった人か
2018/12/02(日) 07:13:03.31ID:ailhRsax
>>602
答えたの俺だがソース改造できたのかなぁ。
2018/12/02(日) 08:28:26.92ID:gEGEypwn
histで縦軸を対数表示させるならこんな感じかな。

with(hist(c(rnorm(1e6),rnorm(1e5,5,0.5))),plot(mids,log10(counts),type='h',col=4,lwd=10))

truehistだとソース改造すればいい。
2018/12/02(日) 09:43:09.85ID:bQp1mbWe
>>604
plot(log='y')でもいいな。
2018/12/02(日) 13:24:03.04ID:8De20Fh0
histグラムぽく対数表示

dat=hist(c(rnorm(1e6),rnorm(1e5,5,0.5)))
attach(dat)
plot(breaks[-1],counts,type='s',log='y',ylim=range(counts))
segments(x0=breaks[-1],y=min(counts),y1=counts)
segments(x0=breaks[1],y=min(counts),y1=counts[1])
607132人目の素数さん
垢版 |
2018/12/04(火) 00:31:54.32ID:4UCEIb49
すみませんがアドバイスお願いします。
heatmap.2でDendrogramつきヒートマップを描きたいのですが、カラムの並びを任意に変えたいです。
Dendrogramの細かい並びは変えないように、大きなクラスタの並びを変えたいです。
例えば、(1,2,3)(4,5,6)(7,8,9)とあるのを
(4,5,6)(7,8,9)(1,2,3)とならび変えるのが目的です。
このとき、4,5,6と7,8,9は近いクラスタを形成します。なので、樹形図は崩れないように書き換えられると思っています。

https://www.biostars.org/p/237067/
上記サイトをみると、as.dendrogramのアウトプットをreorderで並び替えてColvに入れるようですが、
うまくいきませんでした。並びは全く変わっていません。
どなたか教えていただけますか。情報に漏れがありましたらご指摘ください。

環境は以下の通りです。
R 3.4.0
Rstudio 1.0.143
Win10になります。
2018/12/04(火) 10:04:43.34ID:QKKYvADK
頓珍漢な答かもしれない。
並べ替えだけなら
x=rbind(c(1,2,3),c(4,5,6),c(7,8,9))
x[c(2,3,1),]
2018/12/04(火) 10:06:24.27ID:QKKYvADK
listなら
x=list(c(1,2,3),c(4,5,6),c(7,8,9))
x[c(2,3,1)]
2018/12/04(火) 18:58:07.88ID:7f8uMrnq
初歩的な話なんだが、一様分布の分散は無限大かと思っていたら区間[a,b]で(a-b)^2/12とのこと。
Wolframで計算したら確かにそうなった。
https://www.wolframalpha.com/input/?i=integral(x-(a%2Bb)%2F2)%5E2%2F(b-a),from+a+to+b

バスの到着時間が平均10分の指数分布に従うときにランダムにバス停に行ったときの平均待ち時間は10分。

バスの到着時間が平均10分の一様分布に従うときにランダムにバス停に行ったときの平均待ち時間は6分40秒。

バスがきちんと10分毎に到着するときはランダムにバス停に行ったときの平均待ち時間は5分。

乱数発生させて公式でのシミュレーション
> d2w8 <- function(x){# w8=E[X2]/2E[X]=(V[X]+E[X]^2)/2E[X]
+ c(mean=mean(x),var=var(x),w8=mean(x^2)/mean(x)/2)
+ }
> N=1e6
> d2w8(rexp(N,1/10)) # exp average:10
mean var w8
10.02477 100.67652 10.03377
> d2w8(runif(N,0,20)) # unif average:10
mean var w8
9.997470 33.325065 6.665408
> d2w8(rep(10,N)) # regular interval 10
mean var w8
10 0 5
2018/12/06(木) 14:39:28.97ID:P/rPOK1I
NULLのときってどうしてこういう仕様なんだろ?
プログラムしていたら、これに気づかないのがバグの原因だったw

> any(NULL)
[1] FALSE
> all(NULL)
[1] TRUE
2018/12/06(木) 20:13:51.63ID:P/rPOK1I
= と <-で微妙に動作が違うな。

> switch (3,
+ x =1,
+ x =2,
+ x =3
+ )
[1] 3

> switch (2,
+ x <- 1,
+ x <- 2,
+ x <- 3
+ )
2018/12/06(木) 21:58:17.80ID:EMJ7DN40
>>612
そのふたつは意味が異なる
それぞれちゃんと命令どおりの挙動
2018/12/06(木) 22:22:18.13ID:P/rPOK1I
どちらが見やすいかという問題かな。
> rm(x)
> x=switch(1,x =1)
> x
[1] 1
> switch(1,x<-1)
> x
[1] 1
2018/12/06(木) 23:13:35.91ID:EMJ7DN40
>>614
その二つは異なるアルゴリズムでたまたま結果が同じになっているだけ
=と<-の違いはRやるなら理解しておいたほうが良い
2018/12/07(金) 07:46:59.34ID:H6LI4wTx
>>615
scopeが違うってことですね。
2018/12/07(金) 08:01:49.32ID:H6LI4wTx
0^x =0
x^0=1
0^0=1とした方が辻褄が合うことが多いけど
Rのこの仕様には何のメリットがあるんだろ?
> any(NULL)
[1] FALSE
> all(NULL)
[1] TRUE
>
2018/12/07(金) 16:08:57.61ID:3jKAkgsb
奥村さんみたいなこと言わんといて
神経質すぎ
2018/12/23(日) 11:38:19.16ID:CnP6hLfL
>>120
平成29年の簡易生命表から
f=c(179,28,19,13,9,7,6,5,5,4,4,4,5,7,9,10,11,12,14,16,18,19,19,20,21,22,23,24,25,27,28,30,
31,34,37,39,41,43,46,51,57,63,70,77,83,91,99,109,119,130,142,155,167,178,190,202,216,
233,249,265,282,302,326,354,387,420,457,502,549,598,648,700,761,836,927,1026,1142,1284,
1455,1651,1862,2089,2341,2625,2934,3264,3598,3923,4233,4508,4740,4893,4973,5007,4999,
4729,4314,3797,3222,2634,2071,1566,1135,788,523,761)
m=c(191,31,21,13,10,8,8,8,7,7,7,8,9,11,14,17,21,26,32,37,42,46,49,50,50,50,49,49,50,52,55,
58,60,63,65,67,71,76,82,89,97,104,112,122,134,148,165,183,203,224,246,268,294,324,357,
391,425,461,502,549,601,659,722,792,872,958,1052,1147,1239,1331,1433,1546,1663,1783,
1905,2026,2167,2333,2532,2750,2973,3195,3414,3630,3827,4000,4133,4200,4194,4104,3916,
3681,3388,3046,2669,2272,1875,1494,1145,841,589,392,246,144,79,71)

LE <-function(ndx,Y,N0=10^5){ # life expectancy
n=length(ndx)
lx=numeric(n)
lx[1]=N0
for(i in 1:(n-1))
lx[i+1] <- lx[i] - ndx[i]
nqx=ndx/lx
nLx=numeric(n)
for(i in 1:n)
nLx[i] <- mean(c(lx[i],lx[i+1]))
nLx[n]=0
Tx=rev(cumsum(rev(nLx)))
le=Tx/lx
return(round(le[Y+1],1))
}

LE(m,65)
LE(m,61)
620132人目の素数さん
垢版 |
2018/12/28(金) 00:54:31.27ID:fO3GkB5Y
pushってありますか?
例えばベクトルに値を追加すると
先頭が消えて後尾に新しい値をついかして要素数を一定に保つような

一定要素数以下の平均を求めたいのでそういうのが簡単に実現できる方法あればなおよいです
621132人目の素数さん
垢版 |
2018/12/28(金) 01:17:50.69ID:fO3GkB5Y
ベクトルをrev()して先頭を[1:50]とかでとりだしてman()すればいいとわかりました
ほかにもっと簡単な方法アレばお湿気てください
2018/12/28(金) 07:19:51.35ID:1iwNDVav
append(x[-1],y)
2018/12/28(金) 08:10:10.49ID:4Fwuxgb+
>>621
mean(tail(x, 50))
2018/12/29(土) 08:09:54.89ID:Pk3SjXcs
組み合わせると
f=function(x,y,n=50) mean(tail(append(x,y),n))
2018/12/30(日) 10:52:59.30ID:3dqEgqR+
>>624
これはおかしい
626132人目の素数さん
垢版 |
2019/01/07(月) 02:16:23.34ID:OfD+CJ7t
時系列データをplot()したときに縦線をabline()でいれたいのだがどうすればいいかよくわからないです

具体的には
timeStr <- "2018-01-07 01:00"
dateTime <- strptime(timeStr, format="%Y-%m-%d %H:%M") #"POSIXlt" クラスオブジェクトに変換
として時間データに変換したものをx軸としてプロットしたものです
たとえば
plot(x=dateTime, y=1)
abline(v=?????)
として縦線を追加したいのですが
627132人目の素数さん
垢版 |
2019/01/07(月) 02:50:32.42ID:OfD+CJ7t
v=as.POSIXct("2019-01-06 01:00")
みたいな感じにすれば解決しました
628132人目の素数さん
垢版 |
2019/01/07(月) 18:42:57.56ID:oKAYsRfx
>>278
かなり遅れすだけど
formals(cor)
629132人目の素数さん
垢版 |
2019/01/07(月) 19:36:20.34ID:oKAYsRfx
>>611
>>617
俺の予想
判定するときにNULLは強制的に論理値に変換される
変換されると logical(0) になる
logical(0) は空のベクトル
からのベクトルが渡されて中身をチェックしていく
アルゴリズムとして早く処理するためには
any()はTRUE探しにいって、一個でもTRUEがみつかればその時点でTRUEをかえす
all()はFALSEを探しに行って、一個でもFALSEがみつかればその時点でFALSEをかえす
もちろん最後までみない

空のベクトルが渡されたのでTRUEもFALSEもみつからない、となると
any()ではFALSEとなり
all()ではTRUEとなる

これで辻褄はあう
ちなみに
any(c())
all(c())
でも同じ結果が出る
630132人目の素数さん
垢版 |
2019/01/08(火) 12:14:42.13ID:LiVTLUAx
1行のテキストデータを最終的に数値とテキストの混在するN行M列のデータフレームにしたいのですが、なかなかうまく出来ません。
1行データの構造の設計からデータフレームの変換までどうすればシンプルに実現できるか助言ください。

たとえば
1 a
2 b
というようなデータを
1-a,2-b
というような一行のテキストデータから初めてテーブル構造にするというような形です

x <- "1-a,2-b"
y <- str_split(x, ",")

と試しにやってみたのですがyが行単位のベクトルになるだけでここからどうデータフレームにすればよいかわかりません
2019/01/08(火) 12:50:44.29ID:qzUBBMdZ
>>630
何をしたいのか、まったく理解できない。最低限、N, Mが何なのか説明したらどう?
2019/01/08(火) 13:31:30.92ID:By0HLtnN
>>630
文字列 1-a,2-b を 数値とテキストのデータフレームにしたいという意味と解した。

x="1-a,2-b"
y=strsplit(x,",")
z=unlist(y)
w=NULL
for(i in 1:length(z)){
w=rbind(w,unlist(strsplit(z[i],"-")))
}
data.frame(NUM=as.numeric(w[,1]),TEXT=w[,2])
2019/01/08(火) 13:33:34.43ID:By0HLtnN
実行結果
> x="1-a,2-b"
> y=strsplit(x,",")
> z=unlist(y)
> w=NULL
> for(i in 1:length(z)){
+ w=rbind(w,unlist(strsplit(z[i],"-")))
+ }
> data.frame(NUM=as.numeric(w[,1]),TEXT=w[,2])
NUM TEXT
1 1 a
2 2 b
>
634132人目の素数さん
垢版 |
2019/01/08(火) 13:34:00.52ID:LiVTLUAx
>>631
NMは任意の数字です
したいことは
データを一行に記録してそれを
テーブル構造にすることです。
これだけです。

一旦ファイルに保存してread.csvなどにすればよいのでしょうが
いちおう直接テキストデータをコピペしてからということにしたいのです。

なぜこんなことをするかと言うと
TamperMonkeyという拡張機能でJavaScriptで使ってウェブ上のデータを収集しているのですが、
localStrageというクッキーの拡張版のような機能をつかってデータをクライアントに保存するときに基本的にテキストデータベースでの保存になので
一行のデータとして後ろにどんどんデータを追加していくのが一番単純な処理に成るからです。

そのlocalStorageに保存されたデータはコピペで取り出すしかないので
それをRで処理する時に一行のテキストデータから始めないといけないのです。
2019/01/08(火) 13:56:11.34ID:qzUBBMdZ
>>634
, を行のデリミタ、- を列のデリミタとして、一行の文字列をデータフレームにするというのであれば、
s に文字列が入っているとして、
r <- unlist(strsplit(s, ","))
d <- lapply(r, function(x) unlist(strsplit(x, "-")))
as.data.frame(do.call(rbind, d))

列数が行によって異なるときにどうなるかは知らん。
2019/01/08(火) 14:57:46.44ID:By0HLtnN
>>629
内部動作の考証ありがとうございます。


未だにこれは理解できません
> logical(NULL)
Error in logical(NULL) : invalid 'length' argument
> logical(0)
logical(0)
> logical(1)
[1] FALSE
2019/01/08(火) 19:53:14.03ID:CxwlQqo4
>>630
> txt <- "1-a,2-b,3-c"
> read.table(text = gsub(',', '¥n', txt), sep = '-')
V1 V2
1 1 a
2 2 b
3 3 c
こんな感じか?
2019/01/08(火) 20:04:46.51ID:CxwlQqo4
>>636
自分の解釈では、
NULL は「無」なのでエラー(引数はベクトルの要素数を必ず与えなければいけない)
0のとき、0個という指定なので、0個の要素をもつベクトル
1のとき、1個という指定なので、1個の要素を持つベクトル(規定値はFALSE)

ちなみに、
> logical(2)
[1] FALSE FALSE
2のとき、2個という指定なので、2個の要素を持つベクトル(規定値はFALSE)
2019/01/08(火) 20:41:30.30ID:gJU+fDZy
>>638
解説ありがとうございました。
640132人目の素数さん
垢版 |
2019/01/08(火) 21:41:07.74ID:LiVTLUAx
皆さんありがとうございます。

>>637
ファイル入れなくてもできるんですね
641132人目の素数さん
垢版 |
2019/01/08(火) 22:24:00.83ID:LiVTLUAx
最古の元号って大化なん?
一巡回って大化2でいいよ
あとは干支みたいに回せばいい
2019/01/08(火) 22:43:03.83ID:9qwcPkmK
三文字やめれ
643132人目の素数さん
垢版 |
2019/01/08(火) 23:33:49.53ID:/Jd5B1BR
じゃあ太蟹(たいかに)で
644132人目の素数さん
垢版 |
2019/01/08(火) 23:44:56.11ID:LiVTLUAx
>>641は誤爆ですw
レス付くと思わなかった。。。
645132人目の素数さん
垢版 |
2019/01/08(火) 23:47:19.60ID:LiVTLUAx
>>639
⇣の結果をすべて即答できるようになれば合格だと思います…

any(c(TRUE,NA))
any(c(FALSE,NA))
any(c(FALSE,NA,TRUE))
any(c(NA, TRUE))
any(c(NA,FALSE,TRUE))

all(c(TRUE,NA))
all(c(FALSE,NA))
all(c(FALSE,NA,TRUE))
all(c(NA, TRUE))
all(c(NA,FALSE,TRUE))

TRUE | NA
FALSE | NA
FALSE | NA | TRUE
NA | TRUE
NA | FALSE
NA | FALSE | TRUE

TRUE & NA
FALSE & NA
FALSE & NA & TRUE
NA & TRUE
NA & FALSE
NA & FALSE & TRUE
2019/01/09(水) 00:23:21.60ID:aVxwJ5mP
鯛蟹で
647132人目の素数さん
垢版 |
2019/01/09(水) 02:19:38.70ID:tVKwPfCD
改元は改源で
2019/01/09(水) 06:18:55.77ID:DWUqFfaE
源義光とか
649132人目の素数さん
垢版 |
2019/01/10(木) 19:23:43.99ID:a/KDy24T
ggplot2で凡例をまとめる事ってできないでしょうか。
例えば、下記のコードでは線と点で別々の凡例になります。
線と点のスタイルを合わせて1つの凡例にしたいのですがどうすればいいでしょうか。

geom_line(mapping=aes(colour=Conditions),alpha=0.6)
+ geom_point(mapping=aes(shape=Conditions,colour=Conditions),alpha=0.8)
+ scale_shape_manual(values = 1:3)
650649
垢版 |
2019/01/10(木) 20:22:57.38ID:a/KDy24T
すみません自己解決しました。
このコードではなくもっと後のthemeで凡例のスタイルを変えるときに余計なことをしていました。
651132人目の素数さん
垢版 |
2019/01/10(木) 23:01:43.10ID:HnjZz/GW
mean.a <- function(x) "a"
mean(a)
#> [1] "a"

これ本に書いてたんだけど
君たちこれ実行して"a"がでてくる?
自分とこでじっこうしても

> mean(a)
[1] NA
警告メッセージ:
mean.default(a) で: 引数は数値でも論理値でもありません。NA 値を返します

となるんやけど?
いみわからん。
652132人目の素数さん
垢版 |
2019/01/10(木) 23:06:00.24ID:HnjZz/GW
あ、一応↓に電子版あるので興味ある人はページ内検索してみてください
http://adv-r.had.co.nz/OO-essentials.html
653132人目の素数さん
垢版 |
2019/01/10(木) 23:11:23.83ID:HnjZz/GW
あ、上の方から順に入力していったらでたわ
でもJSでOOかじった程度なので全然意味分からん
なにやってんのこれ?
2019/01/10(木) 23:48:17.35ID:rLaGFww4
>>653
オブジェクト指向をちゃんと勉強してくれ。
2019/01/11(金) 19:05:06.45ID:Q3ISqt43
>>652
横からだが、勉強になった。
クラスの自作とか考えたことがなかったけど、今度、俺様クラスを作ってみよう
2019/01/13(日) 19:54:34.41ID:c90jMv3t
>>649
知ってるかもだけどいちいちmappingは書かなくてもいい
scale_shapeも値が1:3ならいらない

ggplot(data, aes(shape=Conditions, col=Conditions))+
geom_line(alpha=0.6)+
geom_point(alpha=0.8)
657132人目の素数さん
垢版 |
2019/01/27(日) 04:45:13.06ID:1PEFhfyS
習ってから思ったけど、Fortranとgnuplotでいいよね
658132人目の素数さん
垢版 |
2019/01/29(火) 23:19:36.86ID:6ZawiHpQ
普及度、パッケージ数、専門度、文献数の点でそれはない
659132人目の素数さん
垢版 |
2019/01/30(水) 01:27:02.50ID:6Sa5WD/n
ヒカキンの年収が10億超え!?明石家さんま・坂上忍も驚愕の総資産とは??
https://logtube.jp/variety/28439
【衝撃】ヒカキンの年収・月収を暴露!広告収入が15億円超え!?
https://nicotubers.com/yutuber/hikakin-nensyu-gessyu/
HIKAKIN(ヒカキン)の年収が14億円!?トップYouTuberになるまでの道のりは?
https://youtuberhyouron.com/hikakinnensyu/
ヒカキンの月収は1億円!読唇術でダウンタウンなうの坂上忍を検証!
https://mitarashi-highland.com/blog/fun/hikakin
なぜか観てしまう!!サバイバル系youtuberまとめ
http://tokyohitori.hatenablog.com/entry/2016/10/01/102830
あのPewDiePieがついに、初心YouTuber向けに「視聴回数」「チャンネル登録者数」を増やすコツを公開!
http://naototube.com/2017/08/14/for-new-youtubers/
27歳で年収8億円 女性ユーチューバー「リリー・シン」の生き方
https://headlines.yahoo.co.jp/article?a=20170802-00017174-forbes-bus_all
1年で何十億円も稼ぐ高収入ユーチューバー世界ランキングトップ10
https://gigazine.net/news/20151016-highest-paid-youtuber-2015/
おもちゃのレビューで年間12億円! 今、話題のYouTuberは6歳の男の子
https://www.businessinsider.jp/post-108355
彼女はいかにして750万人のファンがいるYouTubeスターとなったのか?
https://www.businessinsider.jp/post-242
1億円稼ぐ9歳のYouTuberがすごすぎる……アメリカで話題のEvanTubeHD
https://weekly.ascii.jp/elem/000/000/305/305548/
世界で最も稼ぐユーチューバー、2連覇の首位は年収17億円
https://forbesjapan.com/articles/detail/14474
ヒカルの収入が日収80万、月収2400万、年収3億と判明www
https://matomenewsxx.com/hikaru-income-8181.html
はじめしゃちょーの年収は6億?2017年は30億突破か?
https://2xmlabs.com/archives/1873
2019/01/30(水) 11:36:05.44ID:ZoxNNwN2
glmer関数にgamma分布を適用したモデルをggplotで回帰曲線を引く方法がわかりません......。summary(model)$dispersionがNULLと返されてしまいます。
2019/01/30(水) 22:41:24.83ID:eyCKZk6T
コードの例示がないからよく分からないけど、もともと戻り値が無いんじゃないの
2019/01/31(木) 17:27:54.13ID:m67Rusd/
?ggplotを見たかい
2019/02/02(土) 11:02:49.05ID:aYmPih5s
dplyr 0.8.0てもう来た?
2月1日とか聞いたような
664132人目の素数さん
垢版 |
2019/02/02(土) 21:51:39.00ID:KjQdurrZ
>>656
可読性を保つために省略しないほうがいい
プログラミングの基本
2019/02/02(土) 22:39:28.49ID:43EjN4Kg
逆じゃね。可読性上げるために省略する。
特にmappingなんかは書くまでもない。
2019/02/03(日) 00:29:26.31ID:Ifbe1wQ3
継承を無視してコピペしまくるのが基本なわけない
マウント取りもいきすぎると滑稽だわ
667132人目の素数さん
垢版 |
2019/02/14(木) 03:33:35.52ID:ilawOvx/
>>666
お前のほうが滑稽
マウントってるのお前
イキってるだけで中身もないし
滑稽すぎる
2019/02/14(木) 07:38:25.36ID:0JSgR2gZ
データテーブルの1列目のある文字列(例えばstart)を検索してその行含めた上の行を全部削除するスマートな書き方ある?
df[-1:-grep("start",df[,1])]
今こんな感じだけどパイプで繋げない。
slice使えばいいのか、grep以外にいい関数があるのか?
2019/02/14(木) 09:16:23.85ID:5Ge1SQSk
>>668
startが必ず一つしかないとか、restartとかがあったときにそれを検出しても良いならそれでもよいが、普通は
df[-(1:which(df[, 1] == "start")[1]), ]
すると思う。
経験的にはgrepはできるだけ避けた方がいい。
2019/02/14(木) 11:48:21.71ID:x7agr8k6
お邪魔します。
スレ違いが明らかなんですが、ここで聞かせて下さい。

numpyスレ立てていいですか?
2019/02/14(木) 12:08:18.97ID:9Y2hAxsG
もちろん
とんでもなくスレ違い

さっさと立てるね
2019/02/14(木) 12:28:21.65ID:0JSgR2gZ
>>669
なるほど、ありがとうございます。
そしてカッコでくるんでからマイナス付ける書き方もあるのか。勉強になります。
2019/02/14(木) 12:45:38.37ID:1Nqxk3XQ
>>667
可読性について勉強できてよかったな
2019/02/14(木) 17:44:07.85ID:0JSgR2gZ
データフレームのある列が全てNAの時、その列を削除するよい方法ある?
現状col<-apply(2,function(x){all(is.na(x))}
で要らない列定義してからdf[,!col]としてるけどほんとはパイプの中に入れて処理したい。
2019/02/14(木) 23:27:05.62ID:ATjmovrF
>>674
自己解決しました。select_ifでいけそうです。
2019/02/16(土) 12:45:31.76ID:WMhX0kGV
>>670
板違いだと思うので、やめておいた方が良いのでは
2019/02/19(火) 23:32:31.86ID:TNXJWgVE
tidymodelsどう?あまり日本語の資料ないからなあ
678132人目の素数さん
垢版 |
2019/02/27(水) 15:36:28.78ID:3fnUBEYQ
RStudioをvi風のキーバインドにすると、
ノーマルモードのときに日本語入力してしまうとバグみたいになるんだが
あれどうにかならんの?
679132人目の素数さん
垢版 |
2019/02/28(木) 13:53:56.86ID:uGjkNcWR
どなかた↑よろしく
680132人目の素数さん
垢版 |
2019/03/01(金) 22:53:08.03ID:GbS9kHJG
RStudio と日本語入力ってほんと相性わるい

なんとかしてくれんかなぁ
2019/03/02(土) 11:44:51.96ID:xWBxsoOC
windowsのpreview版(1.2.1303)RStudio使ってるけど、
IMEが無効になるバグが直ってる感じがする。
まだ十分使い込んでないからだけかも。
682132人目の素数さん
垢版 |
2019/03/03(日) 01:15:23.41ID:Hp71k0It
https://wired.jp/2019/01/18/get-wired-kevin-kelly-5-videos/
シロンボヒトモドキゴキブリニホンザルの自由は偽自由と詐欺広告人を殺す自由ヒトモドキゴキブリシロンボアメ公はニホンザルゴキブリと自殺せよ?
2019/03/04(月) 09:44:29.47ID:752mbxzc
「いきる」とか最近ネットで使ってるやつ増えてきたがなんなんあれ?
あほな反抗期の中学生がつかってるイメージしかわかんのだが。
684132人目の素数さん
垢版 |
2019/03/04(月) 12:02:26.52ID:DLycryqB
「生きる」と「熱る」のどっちだ?
いずれにしろ広辞苑に載ってるから調べればいい
685132人目の素数さん
垢版 |
2019/03/04(月) 12:42:02.72ID:YzqCP1Bw
【人類を2つに分ける】 世界教師マ@トレーヤ到来
http://mevius.5ch.net/test/read.cgi/seiji/1538271437/l50


まもなく世界経済破綻、みなさんの財産は紙くずになります。
2019/03/04(月) 19:13:04.98ID:TnBdKqi2
>>684
方言に対して広辞苑を持ち出すのは的外れ。
大阪弁辞典によると「意気る」または「粋る」なので、漢字も外れ
687132人目の素数さん
垢版 |
2019/03/04(月) 19:19:22.60ID:Z/nuwIrB
>>686
どっちも「熱る」の当て字やん
688saga
垢版 |
2019/03/05(火) 02:07:35.96ID:myQXAbVL
活きる
689132人目の素数さん
垢版 |
2019/03/05(火) 08:37:04.71ID:agNxkP9Y
>「生きる」と「熱る」

「熱る」って初めて聞いた
これは普通に使われているの?
方言?
生まれてこのかた、東京なんだけど聞いたこと見たことないんだが
単なる私の不勉強かな?
2019/03/05(火) 08:59:52.15ID:rIYlDwl5
https://dictionary.goo.ne.jp/jn/10539/meaning/m0u/
いき・る【熱る】
1 あつくなる。ほてる。むしむしする。
2 激しく怒る。

https://kotobank.jp/word/%E7%86%B1%E3%83%BB%E7%86%85-2005439
いき・る【熱る】
@ あつくなる。ほてる。むしむしする。
A 息づかいを荒くして怒る。相手と争おうとしていきまく。言いたてる。
B 調子に乗って勢いこむ。元気づく。
2019/03/06(水) 20:09:12.61ID:93dcjOku
https://www.youtube.com/channel/UCKyNitDuOcc7Gi1cjQlNCwA

ヒトモドキ奇形なりすましシロンボアメ公はイスラム国に首切られろヒトモドキフィフィラクダイスラム国の売女とともに自殺しろテロゴキブリ民族アメ公
2019/03/07(木) 21:17:38.50ID:VjN8Z7nf
豚肉屋の豚肉自民のキモオタ奴隷豚障害者犯罪者窃盗犯山田太郎と犯罪者キモオタは今すぐ民族レベルで自決自殺しろw
キモ豚山田太郎は自民入党のマイノリティ下僕化しキモオタヒトモドキ障害者の存在価値は0に達したんだよ表現戦士の性犯罪者害虫
このキモオタヒトモドキネトウヨをガス室で抹殺してえよな?w
693132人目の素数さん
垢版 |
2019/03/07(木) 22:45:56.15ID:VjN8Z7nf
腐れシロンボテロアメ公ヒトモドキは核で根絶やしになれヒトモドキニホンザルゴキブリの親玉障害者欠陥遺伝子白塵ゴキブリ
2019/03/10(日) 10:47:48.29ID:FJeOC8+j
QAi2Acx7tz
奇形ネトウヨヒトモドキゴミ藪部落の顔気持ち悪いから自殺しろ糞犬hk
2019/03/10(日) 10:49:53.12ID:QtQWWkXv
ww.sankei.com/column/ 180307/clm1803070005-a.html

ヒトモドキ産経便所ゴキブリは下着ドロの常習犯変態暴論ゴミ便所自殺しなさい今すぐ
2019/03/20(水) 12:05:11.55ID:sWnpvDa6
欠損値のないデータで解析したモデルをstepAIC()で処理しようとしたところ、TRUE/FALSEが必要なところが欠損値ですとエラーが出たのですが、どう処理すればよいのでしょうか。MuMInのdredge()でも同様になってしまいました。
2019/03/28(木) 15:23:23.97ID:ahK9oO7y
https://www3.nhk.or.jp/news/html/20190327/k10011863181000.html

インフルエンザの新しい治療薬「ゾフルーザ」を投与されたA香港型のインフルエンザ患者30人を調べたところ、70%余りに当たる22人から、この薬が効きにくい耐性ウイルスが検出されたことが国立感染症研究所の調査で分かりました。
調査件数は多くないものの、専門家は現在のような使用を続けると、耐性ウイルスが広がるおそれがあるとして使用基準を見直すべきだと指摘しています。

耐性化率が50%以上である確率は
pbeta(0.5,1+22,1+8,lower=F)
[1] 0.9946631でいいかな?
2019/03/28(木) 20:29:02.09ID:U0fUTvgM
> (p=1-binom.test(22,30)$p.v)
[1] 0.9838752
> binom.test(22,30,conf=p)

Exact binomial test

data: 22 and 30
number of successes = 22, number of trials = 30, p-value = 0.01612
alternative hypothesis: true probability of success is not equal to 0.5
98.38752 percent confidence interval:
0.5000000 0.8994036
sample estimates:
probability of success
0.7333333
2019/03/29(金) 21:03:39.81ID:g6RZxVSs
「統計」は「疑似科学」な
2019/04/06(土) 19:22:34.74ID:ZoRErNus
yahoo apiで距離取得するコード掲載したサイトないですかね
google料金高過ぎて鞍替えなんですが
2019/04/16(火) 20:17:02.49ID:pCHBksve
>>680
使ってるQtが古いんや。1.2でだいぶましになった感じだけど入力途中の文字が残る妙な挙動が時々でる。
2019/04/16(火) 21:58:14.98ID:aYkLyMdt
R書籍漁ったけどまともなのないな
2019/04/17(水) 07:23:57.02ID:DjFMZd4L
>>702
書籍は出版される頃には情報が古くなってるから。自分はネットの情報とヘルプだけで十分だな。
2019/04/18(木) 19:43:25.70ID:JlSlq7Ln
名前が一文字のせいで検索する時に苦労する
2019/04/18(木) 22:13:27.80ID:vlWwPP8w
つ seekR
706132人目の素数さん
垢版 |
2019/04/29(月) 14:15:34.67ID:EFJy96Ez
RStudioって32ビット版って存在しないの??

ダウンロードしようとしても32ビット版見当たらないし、Windows7,10用の64ビット版セットアッププログラムを起動しようすると32ビットへの選択とかはなくて、単にエラーになっちゃうし

誰か教えてください
707132人目の素数さん
垢版 |
2019/04/30(火) 14:31:58.91ID:dkpfnzJo
httpstwitter.com/shotkr16

低脳中卒万引きヒトモドキネトウヨ猿ヒトモドキをさしころせ
2019/04/30(火) 17:29:05.11ID:N9kgT92U
>>706
古いのはここにあるけど今後のことをかんがえたらOSを64bit版に変えた方がいいよ。
https://support.rstudio.com/hc/en-us/articles/206569407-Older-Versions-of-RStudio
709
垢版 |
2019/04/30(火) 20:32:55.24ID:DrrYw4j1
ここでRをつかった仕事をされてる人いますか?
学生ですか?

仕事あれば教えてほしい
2019/05/01(水) 19:38:51.19ID:dNg1mxtc
>>709
Rを仕事にしてはいないけど、仕事の一環でR使ってる
信頼性、入手しやすさ、扱いやすさのバランス的に自分の環境ではR一択なんだよな
2019/05/01(水) 23:10:05.28ID:h9v4bd5W
>>710
ちなみにPythonはどう?
712710
垢版 |
2019/05/02(木) 08:41:31.17ID:fIit4zkT
>>711
AI目当てでこれから使おうと思って勉強中
今の職場で求められるのは主に統計用途や作図なんでRは手放せないかな
713132人目の素数さん
垢版 |
2019/05/02(木) 13:30:24.26ID:74c/hxJZ
twitter.com/tukuhae

ゴキブリネトウヨヒトモドキ奇形売春婦肉便器なつこババア滅多刺しにして解体しろ
2019/05/02(木) 13:37:47.73ID:8Iminfbi
>>712
なるほど。
自分も機械学習やってるけど、R の方がやりやすいよ。ディープラーニングならPythonかもしれないけど
2019/05/02(木) 18:56:28.17ID:zw8jEgb5
データ分析とか統計解析とかだとRかPythonかだね
機械学習よりは統計寄りだとRは仕事でもスタンダード、特にマニアックな統計解析だとRにしかパッケージがない
まあ使い慣れてるならRで機械学習やっても全然構わないけど
2019/05/03(金) 01:30:52.83ID:z3krlkgk
>>708
サンクス
まあメモリが2Gなので
2019/05/03(金) 01:33:11.23ID:z3krlkgk
>>715
少し前はRなんてだんだん廃れるみたいな雰囲気あったけど今はむしろ盛り返してデファクトな何時になってるからこの先10年は行きそうだなあ

機械学習特需でpythonの躍進はすごかったけど
2019/05/03(金) 18:06:51.34ID:74TBOTfG
2Gって四則演算もままならないだろ
2019/05/11(土) 16:40:31.81ID:d+R/7VHb
Rstudio初心者です。
データファイル名を変えてフォルダには変更名で保存されてるのに、読み込むともとの名前のままなんです。どうすれば変更後の名前になるのでしょう?
2019/05/12(日) 20:48:36.39ID:R3SzgyK7
>>708
サンクス
当面は32ビット版で頑張る
2019/05/17(金) 22:45:05.59ID:BQfw+Y+R
>>719
全く状況がわからん。
主語や目的語、必要な修飾語を省略せずに、分かるように説明しないと誰も助言できない。
2019/05/19(日) 05:50:12.72ID:i0Ntz+gH
いつのまにかどうでもいい国の資格試験の選択科目にまでなったしな

なんなんだろう
2019/05/19(日) 12:44:13.70ID:5B49QX4v
資格を馬鹿にする者は資格に泣く
2019/05/20(月) 08:40:12.19ID:ys3TVMX0
資格にしがみついたらいつのまにか技術の進展から取り残された国がありましたとさw
2019/05/22(水) 10:42:04.74ID:d0kaOjCb
>>719
それはsave, loadよ話か?
726132人目の素数さん
垢版 |
2019/07/11(木) 19:34:28.29ID:A4GNZ5B3
Pivot_longer & wider
727132人目の素数さん
垢版 |
2019/07/20(土) 11:06:35.86ID:bSAoQnjE
0645
ふうL@Fu_L12345654321
学コン1傑いただきました!
とても嬉しいです!

https://pbs.twimg.com/media/D-IuUuqVUAALnAB.jpg
https://twitter.com/Fu_L12345654321/status/1144528199654633477
https://twitter.com/5chan_nel (5ch newer account)
2019/08/06(火) 14:27:52.67ID:Y8L07+xi
> 臨時地震板
> 【備えあれば】防災用品 非常食スレ121【憂いなし】
> https://mao.5ch.net/test/read.cgi/eq/1562388281/
729132人目の素数さん
垢版 |
2019/08/10(土) 11:28:08.57ID:YonpeJMb
RってMac版とWindows版で優劣ないの?
今から始めるならどっちがオススメ?
2019/08/10(土) 13:44:59.32ID:/UVOwF70
R自体に優劣はないが文字コード絡みの問題が多いWindows環境はおすゝめしない。
2019/08/10(土) 17:55:47.97ID:OOGR/e7Y
Macはフォントで苦労するけどな
2019/08/10(土) 21:06:01.89ID:7gPmJrDz
じゃ、Linuxだ。
2019/08/10(土) 21:23:29.54ID:YonpeJMb
フォントで苦労ってどういう種類の?
文字化け?
2019/08/12(月) 04:58:06.03ID:TcXjNI8s
>>729
R本体だとグラフィックディバイスに違いはあるけど、実質的に差はない。
でもRは本体だけで使うことは稀で、多種多様なGUIがあるから、
そこでOSの違いによる差が生じる。
2019/12/09(月) 08:29:17.97ID:g2fJs3Gj
面白い問題スレにあったのでシミュレーションしてみた。

# サイコロ

# 正6面体のサイコロがある.4面は青色、2面は赤色である.
# このサイコロを合計20回振るとき、最も起こりそうな順番はどれか?
# 1.赤 青 赤 赤 赤
# 2.青 赤 青 赤 赤 赤
# 3.青 赤 赤 赤 赤 赤

sim <- function(){
a=sample(0:1,20, replace=TRUE, prob=c(4,2))
b=as.character(a)
c=paste(b,collapse="")
s1=paste(c(1,0,1,1,1),collapse="")
s2=paste(c(0,1,0,1,1,1),collapse="")
s3=paste(c(0,1,1,1,1,1),collapse="")
res=c(grepl(s1,c),grepl(s2,c), grepl(s3,c))
return(res)
}
k=1e6
re=replicate(k,sim())
mean(re[1,])
mean(re[2,])
mean(re[3,])

結果は、直感とおり、1が再頻

> mean(re[1,])
[1] 0.124672
> mean(re[2,])
[1] 0.080873
> mean(re[3,])
[1] 0.040564
>

grep使わない方法ってあるかな?
2019/12/10(火) 18:31:14.56ID:KL6XgkNo
これって確率分布的には何になるんですっけ?
2019/12/11(水) 10:39:16.38ID:xruQypao
歪んだコインやんか
738132人目の素数さん
垢版 |
2019/12/12(木) 16:40:23.20ID:8G7On9nx
>>735
ワイの直感的解法

# 1.赤 青 赤 赤 赤
# 2.青 赤 青 赤 赤 赤
# 3.青 赤 赤 赤 赤 赤

だが、以下でも確率同じ。何となく
# 1.赤 赤 赤 赤 青 ★
# 2.赤 赤 赤 赤 青 青
# 3.赤 赤 赤 赤 青 赤
★は赤でも青でもどっちでもOK

P(# 1) >P(# 2) >P(# 3) ∵青出やすい

R言語等でシミュレーションされ、
自身の確率直感が正しいのを
確認できるとは、素晴らしい。
739>>738
垢版 |
2019/12/12(木) 18:31:03.53ID:8G7On9nx
上記の件、若干の訂正とする

# 1.赤 青 赤 赤 赤
# 1'.赤 赤 赤 赤 青 とすると、
# 1と# 1'は、直感で同じ確率と
思ってたが間違えのようだ。

当方のシミュレーションで、
# 1は、0.1248
# 1'は、0.1271
となった。微妙だけど、多分だ。

やっぱり確率計算をコンピュータで
モンテカルロシミュレーションのは
素晴らしい。
740132人目の素数さん
垢版 |
2019/12/12(木) 19:21:51.88ID:8G7On9nx
>>735
【grepは未使用の糞真面目な方法】

# 1.赤 青 赤 赤 赤
についての確率、ほぼ厳密解を得た
# 1は、0.124774… だと思う

計算は、モンテカルロ法でない方法
でプログラム、計算した。
で、grepは使用してない。
ちなみに計算誤差は、ほぼ皆無なハズ

ソースコードイメージ
p01 = (1/3)^4*(2/3)
p02 = p01
p03 = p01 * (1 - p01)
p04 = p01 * (1 - p01 - p02)
p05 = p01 * (1 - p01 - p02 - p03)

p16 = p01 * (1 - p01 - p02 - p03 … - p14)
とし、
p01~p16 の合計を算出したところ、
0.124774…  となった
2019/12/13(金) 07:46:08.65ID:lh0xGphL
>>738
レスありがとうございます。

私の直感

# 1.赤 青 赤 赤 赤
# 2.青 赤 青 赤 赤 赤
# 3.青 赤 赤 赤 赤 赤

# 1.を6個に書き換えて #2.と並べると
# 1.★ 赤 青 赤 赤 赤
# 2.青 赤 青 赤 赤 赤
★は赤でも青でもどっちでもOKだから#1.の方が起こりやすい

# 2と# 3を比べると
# 2.青 赤 青 赤 赤 赤
# 3.青 赤 赤 赤 赤 赤
3個めでは青の方がでやすいので
ら#2.の方が起こりやすい

よって、P(# 1) >P(# 2) >P(# 3)
2019/12/14(土) 03:40:27.74ID:L1XaepqW
分からない問題スレから、
>>
1回3.6%で激レアが出るガチャを10回回した確率って
36%なのでしょうか?
それとも0.964*0.964*0.964(略 0.964を10回電卓にかけた数なのでしょうか?
教えてください。
<<

百万回シミュレーション

p=3.6/100
N=10
sim <- function() any(rbinom(N,1,p)==1)
mean(replicate(1e6,sim()))


> mean(replicate(1e6,sim()))
[1] 0.306628
2019/12/14(土) 03:51:08.05ID:L1XaepqW
シミュレーション その2

gacha=c(rep(1,36),rep(0,1000-36))
sim2 <-function() any(sample(gacha,10,replace=TRUE)==1)
mean(replicate(1e6,sim2()))

> mean(replicate(1e6,sim2()))
[1] 0.306904

何故か0.36にならない、どうしてだろ?
2019/12/14(土) 04:10:22.87ID:L1XaepqW
シミュレーションその3 (処理速度の関係で10万回の平均)

gacha=c(rep(1,36),rep(0,1000-36))
sim3 <- function() any(replicate(10,sample(gacha,1))==1)
mean(replicate(1e5,sim3()))

> mean(replicate(1e5,sim3()))
[1] 0.30691

これも0.307弱だな。

何が悪いんだろ? 俺の頭かな??
2019/12/14(土) 05:45:07.83ID:qYB5MEbs
3.6%のガチャを10回回して全部外れる確率は
(1 - 0.036) ^ 10 ≒ 0.6930592

したがって、
3.6%のガチャを10回まわして1回以上当たる確率は
1 - 0.6930592 = 0.3069408
2019/12/14(土) 08:18:13.50ID:L1XaepqW
>>745
ありがとう、
やっぱ、
これだったw
何が悪いんだろ? 俺の頭かな??
2019/12/14(土) 08:19:41.64ID:L1XaepqW
>>746
シミュレーションにバグはなかったw
2019/12/14(土) 12:29:26.79ID:cW38CJV+
小学生でも解けるぞ。がんばれ。
2019/12/14(土) 16:29:58.85ID:QSWNkRNd
確率統計なんぞ無意味つまりインチキ
事実、結果こそすべて
750132人目の素数さん
垢版 |
2019/12/14(土) 19:21:15.54ID:1VaGaO0p
その確率計算の激ナイーブな解法を示す

激レアは、レアだから1個とみなす。
故に、母集団の個数は
1÷0.036 = 27.777… きっと28個だ

手順1) 28枚のカードがある
手順2) 重複しない1~28の番号を振る
手順3) 28枚のカードをシャッフル
手順4) 1~10枚目のどれか1となる確率
と絶対同じハズ、だから、

P(1枚目で当) =27P27 ÷ 28P28 = 1/28
P(2枚目で当) も同様に1/28
P(3枚目で当) も同様に1/28

P(10枚目で当) も同様に1/28

で此等10個の事象は背反事象だから、
P = 10/28 = 0.357
 ∵有効数字3桁と勝手にしちゃう

ところてガチャってゲーム何か
よくわかんないけど、計算しちゃった
751132人目の素数さん
垢版 |
2019/12/14(土) 20:44:12.02ID:1VaGaO0p
追記というか突然ですが、
そのガチャ3.6%の件、
超幾何分布なのか。二項分布なのか。
確率の小さいとか、母集団が小さい とかだと無視できないと思われる。

確率統計はギャンブル派生数学ぢゃ。
生半可な知識ではカモにされる。

現代の若者たちは、数学特に
確率統計はじめとするギャンブル
の能力が特段に欠けており、
R言語等のプログラミング教育で
ギャンブルゲームを学習すべきだ。

奇麗事の学問だけの今日の数学ぢゃ
カモにされるだけ。
健全な娯楽として賭博系確率統計学
をC R Java Pyson Javascript BASIC
の何れかを学校で学習すべきだ。
752132人目の素数さん
垢版 |
2019/12/16(月) 09:18:31.40ID:t3hxiPBr
私のガチャのイメージは、
かつて、昭和の駄菓子屋によくある
ガチャガチャすなわちカプセルトイ

そのような健全的なギャンブルが
超幾何分布とか二項分布の理解に
役立つのだ。
限られたお小遣の10円玉数枚で、
如何にレアアイテムをGetするかを
子供らは、思考するからだ。
「残り物には福がある」は
確率統計的には正しいのか
子供同士で文学的に議論したものだ。

さて、今のガチャは恐らくは、
デジタルの媒体のスマホゲームだ。
二項分布でよいだろう。
R言語には、
二項分布の密度関数、それの累積関数
はモチロン、それに従う乱数生成を
提供してるようだ。

ゲームの仕組みが複雑化する今、
R言語等の乱数生成プログラミングで
これからのデジタル化ギャンブル社会
で、お金より大切な激レアをドンドン
無限にゲットできる人材の増加を
期待できる可能性を秘めている
2019/12/17(火) 06:37:18.85ID:gnX7/8eN
カプセルトイ(ガチャ)1台に1000個カプセルが入っていて36個がアタリ(レアアイテム)とする。
同じカプセルトイが10台ある。カプセル取り出し後は補充されない。
アタリを1個でも手に入れる確率は
1台から10個取り出す場合(G10)と
1台から1個を10台で取り出す場合(G01)
ではどちらが高いか?

そのシミュレーション

rm(list=ls())
N=1000 ; K=36 ;n=10 # アタリ3.6%
g=rep(c(1,0),c(K,N-K))
G10 <- function() any(sample(g,n,replace=FALSE)>0) # 非復元(超幾何分布)
G01 <- function() any(sample(g,n,replace=TRUE )>0) # 復元(二項分布)
mean(replicate(1e6,G10()))
mean(replicate(1e6,G01()))
2019/12/17(火) 08:10:38.97ID:gnX7/8eN
シミュレーションと理論値

> mean(replicate(1e6,G10())) ; 1-choose(N-K,n)/choose(N,n)
[1] 0.307745
[1] 0.3081121
> mean(replicate(1e6,G01())) ; 1-(1-K/N)^n
[1] 0.307295
[1] 0.3069408

1台から10個取り出した方がいいみたい。
755132人目の素数さん
垢版 |
2019/12/17(火) 14:14:51.68ID:JPqkotiS
>>754 なるほど、
どの台も全部で、1000カプセルで、
どの台も当りが、36カプセルだと
G10(1台で10個)取り出す方が
僅かですが、確率良さそうですね。

シミュレーションも理論値も
同様な結論のようであり、
G10(1台で10個)取り出す方が僅かに
有利が分かり何か楽しかったです。

仮に、もしどの台も
250カプセル中当たり9カプセルなら、さらにG10戦略がG01戦略より有利な
感触を掴めました。
2019/12/17(火) 15:44:13.73ID:gnX7/8eN
>>755
1000個だとシミュレーションの差が微妙で再現性が不安だったけど
250個にすると、差が明らかにつきますね。

> N=250 ; K=9 ;n=10 # アタリ3.6%
> g=rep(c(1,0),c(K,N-K))
>
> G10 <- function() any(sample(g,n,replace=FALSE)>0) # 非復元(超幾何分布)
> G01 <- function() any(sample(g,n,replace=TRUE )>0) # 復元(二項分布)
>
> mean(replicate(1e6,G10())) ; 1-choose(N-K,n)/choose(N,n)
[1] 0.31082
[1] 0.3117069
> mean(replicate(1e6,G01())) ; 1-(1-K/N)^n
[1] 0.306782
[1] 0.3069408
2019/12/18(水) 14:18:29.16ID:GQllmBub
rhyper で超幾何分布の乱数を発生させることができたんだな。
これと rbinomを使うと sample関数を使わなくても同じことができた。

N=250 ; K=9 ;n=10 # アタリ3.6%

mean(replicate(1e6,rhyper(1,K,N-K,n)>0)) ; 1-choose(N-K,n)/choose(N,n) # 非復元(超幾何分布)
mean(replicate(1e6,any(rbinom(n,1,K/N)>0))) ; 1-(1-K/N)^n # 復元(二項分布)

結果
> mean(replicate(1e6,rhyper(1,K,N-K,n)>0)) ; 1-choose(N-K,n)/choose(N,n)
[1] 0.311581
[1] 0.3117069
> mean(replicate(1e6,any(rbinom(n,1,K/N)>0))) ; 1-(1-K/N)^n
[1] 0.307213
[1] 0.3069408

1台から順次10個取り出すのをイメージすれば残り物には福があるとも言えなくもないな。


>
2019/12/18(水) 21:18:37.22ID:GQllmBub
"フランスの数学者パスカル(1623〜1662)が1654年にフェルマーにあてた手紙が、現在の確率
論の始まりだと言われている。当時の有名な賭博師メレがパスカルに以下のような問題を持ち
込み、その問題についてがその手紙のやりとりの中で論じられているそうである。
甲乙二人がおのおの32ピストル(当時のお金の単位)の金を賭けて勝負したとする。
そしてどちらかが先に3点を得たものを勝ちとし、勝った方がかけ金の総額64ピストルをもら
えるとする。ところが甲が2点、乙が1点を得たとき、勝負が中止になってしまった。
このとき、二人のかけ金の総額64ピストルを甲と乙にどのように分配すればよいだろうか。
ただし二人の力は互角で、勝つ確率はそれぞれ1/2ずつだとする。"

# 先にw(=3)点を得たものを勝ち、甲がA(=2)点、乙がB(=1)点を得たとき、勝負が中止
# 甲の確率を求める

gambling <- function(A=2,B=1,w=3,k=1e5){ # k : how many simulate
sim <- function(){
while(A < w & B < w){
g = rbinom(1,1,p=0.5)
if(g==1){
A=A+1
}else{
B=B+1
}
}
A > B
}
mean(replicate(k,sim())) # Pr[A wins]
}

> gambling(2,1,3)*64 #64ピストル配分
[1] 48.13056
> gambling(2,0,4) # 日本シリーズ
[1] 0.80945
759132人目の素数さん
垢版 |
2019/12/19(木) 09:59:55.45ID:V+OT4hGF
>>758の計算結果は、興味深い結果だ
で、
自己流の直感でラフな計算をしてみた。
甲1点、乙1点 ⇒1:1按分 ∵自明 ★
甲3点、乙1点 ⇒1:0按分 ∵自明 ☆

安直に★と☆の平均を考えると
甲2点、乙1点 ⇒1:0.5按分 ∵安直

で、総額で64ピストルだから、
甲に、64*1/1.5 = 42.67 ピストル
乙に、64*0.5/1.5 = 21.33 ピストル
を配分すれば、思ってしまった。

ラフな計算だと、少々不公平なことが
起こるようだ。

R言語等のシミュレーションは、
超天才のワィの直感より、
さらに厳密な確率計算ができそうだ。
2019/12/19(木) 16:21:08.12ID:kVFzAP55
>>758
最後はAが得点して勝負が決定するのを忘れずにAが勝者になるまでのBの点数で場合分け

NS <- function(w,A,B,p){ # 先にw点得点した方が勝者、A,B:現在の点数 ,p:甲の勝率
ans=0
for(k in 0:(w-B-1)){ # k: Aが勝者になるまでのBの点数
ans=ans+choose(w-A-1+k,w-A-1)*(1-p)^k*p^(w-A)
}
return(ans)
}

> NS(3,2,1,0.5)*64 #64ピストルの分配
[1] 48
> NS(4,1,0,0.5) #日本シリーズで先勝したほうが優勝する確率
[1] 0.65625

NSは日本シリーズの頭文字から命名、No Skinではないww
761132人目の素数さん
垢版 |
2019/12/19(木) 18:00:34.70ID:V+OT4hGF
賭博等の確率計算をイメージすると
ワィの脳内は活性化される だから、
ドンドン、妄想全開となるぅぅぅ。

という訳で、妄想内容を記載する

17世紀の地球に行き、胴元になって
賭博ビジネスでガッポリ儲けるゼェ。
17世紀の地球で、胴元になって、
コイントス賭博事業をするゼェ。

で、システムは、2回コイントスし、
表の回数が0回⇒参加者が32万円GET
表の回数が1回⇒胴元に、32万円PAY
表の回数が2回⇒参加者が32万円GET
参加料は、1万円

まんまと、参加者が沢山 1000人いた
ある参加者は、以下の様に怪説をした

組み合わせは、3通りだ。
1通り目 表の回数が0回
2通り目 表の回数が1回
3通り目 表の回数が2回
だから、参加者の勝つ確率は2/3だ

で、モチロン、胴元ワィの商売は成功
およそ、1000万円儲かっちゃた。
762132人目の素数さん
垢版 |
2019/12/20(金) 02:07:38.50ID:yiLw1Jz8
0745
しろ@huwa_cororon 11月27日
苦節6ヶ月、初満点&一等賞です!
https://twitter.com/huwa_cororon/status/1199593474128896000
https://twitter.com/5chan_nel (5ch newer account)
2019/12/21(土) 10:49:06.51ID:+RV2yvS7
日本シリーズで賭けをする。

日本シリーズは先に4勝したチームが優勝。
勝率はそれまでの(引き分けを除いた)通算勝率に従うとする。
シリーズ開始前の通算成績はA:2勝、B:4勝であった。
今シリーズでAが先勝(第一試合に勝利)した。
この時点でA,Bのどちらに賭ける方が有利か?
2019/12/21(土) 22:03:14.56ID:vLicX+v2
分からない問題スレで3進法の小数とかが話題になっていた

https://rio2016.5ch.net/test/read.cgi/math/1567866548/845
>>
845 名前:132人目の素数さん[] 投稿日:2019/12/21(土) 05:52:50.74 ID:wum1jR1j
...
10進数で表された5/9を3進数になおせという問題があって、答は0.12だったのですが、
...
<<

こんなのを作ってみた。


# 小数点付きの数numをN進法で表示する

rm(list=ls())
dec2basen <- function(num, N, kmin = 5){ # kmin:最小小数点後桁
int=floor(num)
r=int%%N
q=int%/%N
while(q > 0){
r=append(q%%N,r)
q=q%/%N
} # rに整数のN進法表示を格納

x=num-floor(num)
k=max(nchar(x)-2,kmin) # 同長もしくはkminの長さの小数表示
a=numeric(k)
for(i in 1:k){
y=x*N
a[i]=floor(y)
x=y-a[i] # r . a[1] a[2] a[3] ... a[k]
}
if(N<=10){ # Nが10以下は数値として表示
cat(r,paste(".",paste(a,collapse = ''),sep=''),'\n',sep='')
}
else{ # Nが11以上は整数部分と小数部分を数列で表示
print(list(int=r,decimal=a))
}
invisible()

}


> dec2basen(5/9,3)
0.120000000000000

> dec2basen(3.14159265359,7)
3.06636514320
> dec2basen(3.14159265359,8)
3.11037552421
> dec2basen(3.14159265359,9)
3.12418812407
> dec2basen(3.14159265359,14)
$int
[1] 3

$decimal
[1] 1 13 10 7 5 12 13 10 8 1 4
2019/12/22(日) 08:18:39.30ID:Ez3wWboE
>>764
バグの原因を追求したら、Rの仕様のせいみたいだな。

> (1.2-1)*5==1
[1] FALSE
> (1.2-1)*5>1
[1] FALSE
> (1.2-1)*5<1
[1] TRUE

これがfloor関数が誤値を返してくる原因だった。
> floor(1)
[1] 1
> floor((1.2-1)*5)
[1] 0
2019/12/22(日) 08:52:46.43ID:UYCjcQMO
>>765
数値演算についてもっと勉強しな。
たいていの言語でそうなる。
2019/12/22(日) 13:06:36.02ID:Ez3wWboE
すると、pythonに移植しても同じ結果ということか。

IPython 6.5.0 -- An enhanced Interactive Python.
C:\bin\Anaconda3\lib\site-packages\ipykernel\parentpoller.py:116: UserWarning: Parent poll failed. If the frontend dies,
the kernel may be left running. Please let us know
about your system (bitness, Python, etc.) at
[email protected]
[email protected]""")

(1.2-1)*5==1
Out[1]: False

(1.2-1)*5>1

Out[2]: False

(1.2-1)*5<1

Out[3]: True

(1.2-1)*5
Out[4]: 0.9999999999999998
2019/12/22(日) 17:15:43.69ID:Ez3wWboE
round を使って回避することにした
> 0.728*5-3.64
[1] -4.440892e-16
> round(0.728*5-3.64,5)
[1] 0

んで、デバッグ版

# 小数点付きの数numをN進法で表示する(62進法まで対応 0-9,a-z,A-Z)
rm(list=ls())
dec62 <- function(num, N, kmin = 5){ # kmin:最小小数点後桁
int=floor(num)
r=int%%N
q=int%/%N
while(q > 0){
r=append(q%%N,r)
q=q%/%N
} # rに整数のN進法表示数列を格納
k=max(nchar(num)-nchar(floor(num))-1,kmin) # 同長もしくはkminの長さの小数表示
a=numeric(k)
x=round(num-floor(num),k) # e.g. 7.28-floor(7.28)-0.28 != 0に対応
for(i in 1:k){
y=round(x*N,k) # e.g. 0.728*5-3.64 !=0 に対応
a[i]=floor(y)
x=y-a[i] # r . a[1] a[2] a[3] ... a[k]
}
b=list(integer=r,decimal=a,num=sum(c(int,a)*(1/N)^(0:k)))
fig=c(0:9,letters,LETTERS)[1:N]
if(N<=62){ # Nが62以下は数値として表示
cat(paste(fig[b$integer+1],sep='',collapse=''),
'.',paste(fig[b$decimal+1],sep='',collapse=''),sep='')
cat('\n')
}
else{ # Nが63以上は整数部分と小数部分を数列で表示
print(b[1:2])
}
invisible(b) # b$num:検証用
}
2019/12/22(日) 17:25:01.53ID:Ez3wWboE
>>767
Haskellでもやってみた

Prelude> (1.2-1)*5
0.9999999999999998

Prelude> 0.72*5-3.6
-4.440892098500626e-16
2019/12/25(水) 07:12:30.44ID:oEKznZ6+
>>766
レスありがとうございました。
アドバイスに従ってちょっと勉強してみました。
他の言語に移植しても無駄とわかって助かりました。
こうなる理由が理解できました。

(1+1/10-1)*10==1
[1] FALSE
> (1-1+1/10)*10==1
[1] TRUE
2020/01/06(月) 12:56:45.01ID:e9wyGMBv
からnまでの順列を列挙するスクリプト。
これをwhile使って高速化するにはどうすればいいだろう?
俺の頭では思いつかない。

perm <- function (n) {
v=1:n
sub <- function(n, v) {
if (n == 1)
matrix(v, 1, 1)
else {
x = NULL
for (i in 1:n) x =rbind(x, cbind(v[i], sub(n -1,v[-i])))
x
}
}
sub(n, v)
}


> perm(4)
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 1 2 4 3
[3,] 1 3 2 4
[4,] 1 3 4 2
[5,] 1 4 2 3
[6,] 1 4 3 2
[7,] 2 1 3 4
[8,] 2 1 4 3
[9,] 2 3 1 4
[10,] 2 3 4 1
[11,] 2 4 1 3
[12,] 2 4 3 1
[13,] 3 1 2 4
[14,] 3 1 4 2
[15,] 3 2 1 4
[16,] 3 2 4 1
[17,] 3 4 1 2
[18,] 3 4 2 1
[19,] 4 1 2 3
[20,] 4 1 3 2
[21,] 4 2 1 3
[22,] 4 2 3 1
[23,] 4 3 1 2
[24,] 4 3 2 1
>
2020/01/06(月) 21:34:47.52ID:yym51Tg7
>>771
自己解決 e1071というパッケージに再帰呼び出しなしのpermutationがありました。

library(e1071)
permu <- function (n) {
z <- matrix(1)
for (i in 2:n) {
x <- cbind(z, i)
a <- c(1:i, 1:(i - 1))
z <- matrix(0, ncol = ncol(x), nrow = i * nrow(x))
z[1:nrow(x), ] <- x
for (j in 2:i - 1) {
z[j * nrow(x) + 1:nrow(x), ] <- x[, a[1:i + j]]
}
}
return(z)
}
2020/01/09(木) 14:28:06.78ID:rRnLkyt7
可変引数の扱い
Cで
#include <stdio.h>
int main(int argc, char* argv[])
{
while(argc--)
printf("%s\n", *argv++);
return 0;
}
をRでやるには ... を使って、c(...)もしくはlist(...)で引き出せばいいんだな。
検索してもなかなかわからなかった。

main <- function(...){
argv=c(...)
for(i in 1:length(argv)) cat(argv[i],'\n')
}
2020/01/15(水) 18:08:54.32ID:l229ykjv
>>546
library(Rmpfr)

mpfr(factorial(50),5000)

one = mpfr(1, 5000)
factorial(one*50)


> mpfr(factorial(50),5000)
1 'mpfr' number of precision 5000 bits
[1] 30414093201713018969967457666435945132957882063457991132016803840
> one = mpfr(1, 5000)
> factorial(one*50)
1 'mpfr' number of precision 5000 bits
[1] 30414093201713378043612608166064768844377641568960512000000000000

何故か、oneを高精度に設定しておくと、正しい計算をしてくれた。
2020/01/26(日) 16:33:21.98ID:G7gVG9Ku
RのroundのIEEE仕様

> round(2.5)
[1] 2
> round(1.5)
[1] 2

は丸め誤差が減るという説明だったので実験してみた。

# 四捨五入 vs IEEE with FUN(=mean) for x(=c(-0.9,-0.8,...,0.8,0.9))
comp <- function(n=10,FUN=mean,x=sample((-9:9)/10,n,rep=T),print=T){
X=FUN(x)
dif = abs(X-FUN(round(x))) - abs(X-FUN(f45(x))) # round後の実行と四捨五入後の実行の差
if(dif!=0 & print) cat(dif<0,' : ',sort(x),'\n') # 差があれば表示 round後が小さければTRUE
return(dif) # 差を返す dif<0:round優位 dif>0:四捨五入優位
}
comp()

k=1e5
# mean
re=replicate(k,comp(print=F))
c(IEEE=mean(re<0),四捨五入=mean(re>0),引き分け=mean(re==0))

# squared sum
comp(FUN=function(x) sum(x^2))
re=replicate(k,comp(FUN=function(x)sqrt(sum(x^2)),print=F))
c(IEEE=mean(re<0),四捨五入=mean(re>0),引き分け=mean(re==0))



> # 平均 mean
> re=replicate(k,comp(print=F))
> c(IEEE=mean(re<0),四捨五入=mean(re>0),引き分け=mean(re==0))
IEEE 四捨五入 引き分け
0.25235 0.16199 0.58566

> # 平方和 squared sum
> re=replicate(k,comp(FUN=function(x)sqrt(sum(x^2)),print=F))
> c(IEEE=mean(re<0),四捨五入=mean(re>0),引き分け=mean(re==0))
IEEE 四捨五入 引き分け
0.40519 0.01413 0.58068

平均だと小差だが、統計計算の内部処理で使う平方和だと大差がついたので、体感できた。
2020/02/08(土) 17:42:30.00ID:+JttXwIS
"隔離中のクルーズ船では船内の換気が共通らしいから運悪く13日後に発症した奴がいるとその近くの部屋のやつは
プラスで14日隔離しないといけない。それが今の船内の状況という。

両隣のどちらかが感染したら14日延長、どの部屋も1日で感染する確率pは1%
部屋の配置は長方形でどの部屋にも両隣があるとする。
発症するか、隔離期間が終われば下船できる。
全員定員1の個室として客と乗務員を合わせた人数nは3000人。
クルーズ船から全員下船できる日数の期待値は?"
2020/02/08(土) 17:42:46.53ID:+JttXwIS
rm(list=ls())

p=0.001 # 1日の感染確率
n=3000 # 収容者人数
d14=14 # 隔離日数
Q0=rep(d14,n) # 必要隔離日数の配列の初期値
#
ODA <- function(X){ # One Day After 必要隔離日数の配列 x から1日後の配列を返す
Q=X # Xを作業用Qに代入
S=which(Q!=0)  # 未感染者susceptibleのindex
s=length(S) # 未感染者人数
m=rbinom(1,s,p) # その日の感染数
if(m==0){ # 感染者0なら未感染者の
Q[S]=Q[S]-1  # 必要隔離日数を1日減らして返す
invisible(Q)
}else{
I.idx=sample(S,m) # 未感染者Sからm人が感染、感染者のindex (Infected.idx)
id2ext <- function(id){ # 感染者idからの両隣のidを返す
plus =ifelse(id==n,1,id+1) # 最大番号なら1を返す,それ以外は1増やす
minus=ifelse(id==1,n,id-1) # 1なら最大番号を返す,それ以外は1減らす
unique(c(plus,minus)) # 重複を除く
}
E.idx=as.vector(sapply(I.idx,id2ext)) # 感染者の両隣のidを列挙し
E.idx=unique(E.idx) # 重複を除く Extended quarantine.idx
Q[E.idx]=d14 # 両隣は必要隔離日数をd14にリセット
Q[I.idx]=0 # 感染者は必要隔離日数=0 (リセット者に重複していたら0で上書き)
IE.idx=unique(c(I.idx,E.idx)) # 感染もしくは感染者の隣のindex
minus1ifnotzero <- function(x) ifelse(x==0,0,x-1) # ゼロでなければ1を減じて返す
Q[-IE.idx]=minus1ifnotzero(Q[-IE.idx]) # 感染もなく感染者の隣りでもない人の隔離日数を1日減らす
invisible(Q)
}
}
sim <- function(){
AZ=FALSE # All Zero 隔離日数がすべて0か?
i=0 # カウンター
Q=Q0 # 隔離日数配列初期値
while(!AZ){ # 隔離日数がすべて0になるまで
Q=ODA(Q) # One Day After関数を実行
AZ=all(Q==0) # All zero?
i=i+1 # カウンター
}
return(i) # 何日かかったかを返す
}

k=1e4 # k回のシミュレーションの
RE=replicate(k,sim())
mean(RE) # 平均値=期待値
2020/02/08(土) 18:25:56.61ID:Xaabj2Ml
感染確率0.1%やん
低すぎぃ
2020/02/08(土) 19:50:08.59ID:+JttXwIS
>>778
一日の感染確率。
3000人いて1日3人くらい報告されたから0.1%/日くらいかな
2020/02/08(土) 19:51:16.44ID:+JttXwIS
実行したら全員が下船できるまで約1ヶ月になった。
コードにまだバグがあるかも。
2020/02/09(日) 21:31:53.47ID:IDQ3+Iu7
Rのcsvの文字化け治らねえ
csvそのものをutf-8にしたら今度は不正なマルチバイトがあるってエラー
どうすればいいか教えて
2020/02/09(日) 22:07:23.07ID:vcjg+5qP
>>781
どんなデータ?
ヘッダーだけじゃなくてセル内も日本語?
2020/02/09(日) 23:10:12.62ID:KodPd2ez
>>781
エスパーじゃないから、まず確認だけど

・Rを使ってる環境(OS)とRのバージョンは?
・CSVのコード変換に使ってるソフトは?
・CSVを読み込んでる関数と指定している引数は?
2020/03/06(金) 19:53:26.32ID:WwE0ymvi
nCov2019 for studying COVID-19 coronavirus outbreak https://guangchuangyu.github.io/nCov2019/
後で遊んでみよう
2020/03/07(土) 09:46:33.43ID:3M7vmA2q
>>784
エラーがでた。R 3.6.3にアップデートしたけど
> library('remotes')
> remotes::install_github("GuangchuangYu/nCov2019", dependencies = TRUE)
Downloading GitHub repo GuangchuangYu/nCov2019@master
Skipping 1 packages not available: BiocStyle
Installing 5 packages: downloader, cowplot, maps, magick, BiocStyle
Error: Failed to install 'nCov2019' from GitHub:
(converted from warning) package ‘BiocStyle’ is not available (for R version 3.6.3)
2020/03/07(土) 11:22:48.00ID:tNSvsFaR
>>785
エラーと通り、BiocStyleパッケージがないので別途、bioconductorからインストールすればいい。

https://bioconductor.org/packages/release/bioc/html/BiocStyle.html
2020/03/07(土) 11:34:31.80ID:3M7vmA2q
>>786
ありがとうございます。
2020/03/07(土) 11:38:15.72ID:3M7vmA2q
We also developed a web app (http://www.bcloud.org/e/) with interactive plots and simple time-series forecasts.

という記述があるんだけど  関数 nls による非線形回帰分析 で作成しているのかなぁ?
2020/03/09(月) 20:05:18.91ID:0N1NTePA
面白い問題スレをRでシラミ潰しにカウントしてみた。

"縦n個、横n個のマス目のそれぞれに 1,2,3,...,n の数字を入れていく。
このマス目の横の並びを行といい、縦の並びを列という。
どの行にも、どの列にも、2つの対角線上にも同じ数字が1回しか現れない入れ方は何通りあるか求めよ。(2020京大文系 改)
n=4がオリジナル
"
library(gtools)
n=4
(a=permutations(n,n)) # nの順列
r=nrow(a)
f<-function(x){ # x=c(1,2,3,4) -> rbind(a[1],a[2],a[3],a[4])
ans=NULL
for(i in x){
ans=rbind(ans,a[i,])
}
return(ans)
}

b=permutations(r,n)
head(b) ; tail(b)
B=apply(b,1,f)
diag2 <- function(x){ # 行列xの右上から左下への対角線の配列を返す
n=nrow(x)
ans=numeric(n)
for(i in 1:n) ans[i]=x[i,n+1-i]
return(ans)
}
g <- function(v){ # matri(v,n)で列、対角線の要素がすべて異なればTRUEを返す
n=sqrt(length(v))
(x=matrix(v,n))
if(length(unique(diag (x))) < n) return(FALSE)
if(length(unique(diag2(x))) < n) return(FALSE)
flag=TRUE
for(i in 1:n){
if(length(unique(x[,i])) < n){
flag=FALSE
break
}
}
return(flag)
}
counter=NULL
for(i in 1:ncol(B)){
if(g(B[,i])) counter=append(counter,i)
}
length(counter)
counter
matrix(B[,counter[1]],n)
matrix(B[,counter[2]],n)
matrix(B[,counter[48]],n)
2020/03/10(火) 07:11:26.36ID:H1fx2jVB
>>789
n=5 にするとメモリー不足でエラーがでた。
サンプリングでやってみる
# simulation
n=5
sim <- function(n=5){
v=as.vector(t(replicate(n,sample(n)))) # n × n行列要素をベクトル化
if(g(v,dia=TRUE)){ # diagonal latin squareなら
print(matrix(v,n)) # 行列化して表示
return(1)
}
return(0)
}
k=1e6
sum(replicate(k,sim(5)))
2020/03/10(火) 12:07:20.32ID:KHQs8ybj
1億回モンテカルロしてようやく、1個みつかった。


[,1] [,2] [,3] [,4] [,5]
[1,] 2 5 4 3 1
[2,] 4 3 1 2 5
[3,] 1 2 5 4 3
[4,] 5 4 3 1 2
[5,] 3 1 2 5 4
2020/03/11(水) 11:06:12.00ID:7KW6Eui5
嫌ね最近は総当たりアルゴリズムで枝刈り使えば実用的な時間で解決できるこ知らない人が多くて
2020/03/15(日) 08:45:11.95ID:OTl1KJku
versionが3.6,xになって、str2lang とか str2expressionという関数が追加されたんだな。

https://id.fnshr.info/2019/07/20/r3-6-0/
で知った



rep("1:6",5)
paste(rep("1:6",5),collapse=',')
str2lang(paste("expand.grid(",paste(rep("1:6",5),collapse=','),')'))
eval(str2lang(paste("expand.grid(",paste(rep("1:6",5),collapse=','),')')))

(s=rep("1:6",5))
(str=paste(s,collapse=','))
(lang=str2lang(paste("expand.grid(",str,')')))
eval(lang)
2020/03/21(土) 17:23:30.68ID:RyI2Q/uv
The Clinical and Chest CT Features Associated with Severe and Critical COVID-19 Pneumonia

https://journals.lww.com/investigativeradiology/Abstract/publishahead/The_Clinical_and_Chest_CT_Features_Associated_with.98832.aspx

の付表にこんなデータがあった

# Parameter Total (n=83) Severe/critica l Group (n=25) Ordinary Group (n=58) P Value
# Number of lobes Median (interquartile range, IQR)
# 5 (4-5) 5 (5-5) 5 (3-5) 0.003

重症群25例 中等症群58例でCTで肺炎像が確認できた肺葉数(1〜5)が
全体で中央値が5 第一四分位数(少ない方から数えて25%の値)が4、第三四分位数(少ない方から数えて75%の値)が5
重症群では中央値5、第一四分位数5、第三四分位数5
中等症群では中央値5、第一四分位数3、第三四分位数5で
p値が0.003であるという。
0.0025〜0.0035までとして、

この条件に見合う83例をリストアップすると
> re[100,][1:25]
[1] 1 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
> re[100,][26:83]
[1] 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
[48] 5 5 5 5 5 5 5 5 5 5 5
という類の組み合わせで
19504通りと計算された。

重症群の肺葉数の平均は4.76
中等症群の平均は4.04
と計算された。

タイ値がこれだけ多いデータにWilcox検定を使う意味がわからんな。
2020/03/22(日) 08:57:06.28ID:liILqu/N
# 感度0.7 特異度0.9のPCR検査で1000人中10人が陽性だったときの有病率の信頼区間をシミュレーションして計算するスクリプト

# アルゴリズムには自信がないw

sim <- function(n=1000,r=10,sen=0.7,spc=0.9,k=1e6,print=TRUE){
# n:検査件数 r:検査陽性数 sen=感度 spc=特異度 k:発生乱数の数,print:グラフ描画
prev=rbeta(k,1+r,1+n-r) # 有病率の事前分布を一様分布と仮定

PPV=prev*sen/( prev*sen + (1-prev)*(1-spc) ) # 検査特性を加味してPPV計算
prev.post = PPV*(1-spc)/(sen - PPV*(sen+spc-1)) # そのPPVから有病率を計算
# NPVでも同じ結果
# NPV=(1-prev)*spc/( (1-prev)*spc + prev*(1-sen)) # 検査特性を加味してNPV計算
 # prev.post = (1-NPV)*spc/(spc - NPV*(sen+spc-1)) # そのNPVから有病率を計算
mean=mean(prev.post) # 期待値
median=median(prev.post) # 中央値
mode=density(prev.post)$x[which.max(density(prev.post)$y)] # 最頻値
LU=unlist(HDInterval::hdi(prev.post))[1:2] # 95%信頼区間
re=c(mean=mean,median=median,mode=mode,LU) # 事後有病率の代表値
if(print){ # ヒストグラム描画
par(mfrow=c(2,2))
hist(prev,freq=F,xlim=c(0,1)) ; lines(density(prev),lwd=2)
hist(PPV,freq=F,xlim=c(0,1)) ; lines(density(PPV),lwd=2)
hist(prev.post,freq=F,xlim=c(0,1)) ; lines(density(prev.post),lwd=2)
BEST::plotPost(prev.post)
par(mfrow=c(1,1))
}
print(round(re,4)) # 概算値表示
invisible(list(re,prev.post)) # 代表値と事後有病率を非表示で返す
}
sim(100,1)
sim(1000,10)
sim(10000,100)
sim(100000,1000)
2020/03/22(日) 14:13:54.45ID:liILqu/N
>>795(自己レス)
間違いに気づいたので撤回します。
2020/03/23(月) 14:55:08.54ID:iIfIhG5+
MCMCで解決してみた。

【富山県最強伝説】新型コロナウイルスPCR検査件数 54人 陽性0人

ある集団から54人を無作為に選んでPCR検査したら陽性0であった。
PCR検査の感度0.7 特異度0.9としてこの集団の有病率の期待値と95%信頼区間を推測せよ。


#----------------------------------------------------------------------------
# 感度SEN, 特異度SPCの検査でN人中X人が陽性であったときの推定有病率prevalence
# 弱情報事前分布はprevalence ~ dunif(0,UL) , UL:上限
#----------------------------------------------------------------------------

PCRj <- function(N,X,UL=1,SEN=0.7,SPC=0.9,verbose=TRUE){ # UL:upper limit of dunif(0,UL)
library(rjags)
modelstring=paste0('
model
{
x ~ dbin(p,n)
p <- prev*sen + (1-prev)*(1-spc)
prev ~ dunif(0,',UL,')
}
')
if(verbose & UL!=1) cat(modelstring)
writeLines(modelstring,'TEMPmodel.txt')
dataList=list(n=N,x=X,sen=SEN,spc=SPC)
jagsModel = jags.model( file="TEMPmodel.txt" ,data=dataList,quiet=TRUE)
update(jagsModel)
codaSamples = coda.samples( jagsModel ,
variable=c("prev","p"), n.iter=1e6, thin=10)
js=as.matrix(codaSamples)
BEST::plotPost(js[,'prev'],xlab='prevalence',showMode = TRUE) ; lines(density(js[,'prev']),col='skyblue')
round(c(mean=mean(js[,'prev']),HDInterval::hdi(js[,'prev'])[1:2]),10)
}

PCRj(100,1)
PCRj(1000,10)
PCRj(10000,100)
PCRj(100000,1000)

PCRj(54,0)
PCRj(54,0,UL=0.1)
2020/04/03(金) 19:48:06.63ID:MNrUuJMd
a b c d e f g h i j
1 -0.0377710 0.02994835 0.1779426 0.29057472 0.13252796 0.3279709 -0.3534731 -0.54812874 -0.3869768 -0.1233967
2 0.2707033 0.09238235 -0.1042958 -0.08485129 -0.02590955 0.2159095 -0.3338677 0.00865952 -0.1575856 0.0953795
2020/04/03(金) 19:50:07.75ID:MNrUuJMd
上のDFを

library(psych)
ICC(DF)

で級内相間求めようとすると変な値でるんだけどなんででしょう?
2020/04/03(金) 22:01:48.08ID:1EdxzcOL
> DF
V1 V2
a -0.03777100 0.27070330
b 0.02994835 0.09238235
c 0.17794260 -0.10429580
d 0.29057472 -0.08485129
e 0.13252796 -0.02590955
f 0.32797090 0.21590950
g -0.35347310 -0.33386770
h -0.54812874 0.00865952
i -0.38697680 -0.15758560
j -0.12339670 0.09537950
> library(psych)
> ICC(x=DF,lmer=FALSE)
Call: ICC(x = DF, lmer = FALSE)

Intraclass correlation coefficients
type ICC F df1 df2 p lower bound upper bound
Single_raters_absolute ICC1 0.36 2.1 9 10 0.13 -0.18 0.74
Single_random_raters ICC2 0.34 2.0 9 9 0.17 -0.26 0.74
Single_fixed_raters ICC3 0.32 2.0 9 9 0.17 -0.24 0.72
Average_raters_absolute ICC1k 0.53 2.1 9 10 0.13 -0.43 0.85
Average_random_raters ICC2k 0.51 2.0 9 9 0.17 -0.69 0.85
Average_fixed_raters ICC3k 0.49 2.0 9 9 0.17 -0.63 0.84

Number of subjects = 10 Number of Judges = 2
2020/04/03(金) 23:40:27.04ID:MNrUuJMd
>>800
すいません
書き方が良くなかったです。
subject が1,2
judge a,b,c,dをきちんとfirst,second,third,fourth
と書くべきでした。
subjectとjudgeはあってると思うのです。
2020/04/03(金) 23:42:39.27ID:MNrUuJMd
例えば
first second third fourth
0 0.05 0.1 0.15
0 0 0.05 0.05
0.15 0.1 0.05 0.1
0 0.05 0.2 0.05
0.1 0.15 0.1 0.05
0.15 0.05 0.1 0.05

というデータで

Call: ICC(x = over_sight)

Intraclass correlation coefficients
type ICC F df1 df2 p lower bound upper bound
Single_raters_absolute ICC1 0.0068 1 5 18 0.43 -0.19 0.48
Single_random_raters ICC2 0.0068 1 5 15 0.44 -0.19 0.48
Single_fixed_raters ICC3 0.0068 1 5 15 0.44 -0.19 0.48
Average_raters_absolute ICC1k 0.0268 1 5 18 0.43 -1.70 0.79
Average_random_raters ICC2k 0.0268 1 5 15 0.44 -1.82 0.79
Average_fixed_raters ICC3k 0.0268 1 5 15 0.44 -1.82 0.79

Number of subjects = 6 Number of Judges = 4
2020/04/03(金) 23:44:30.81ID:MNrUuJMd
となるのですが、ICC1が0.0068ってこんなに低くなるのでしょうか?
結果のとり得る値が1〜0なので最大15%ぐらいの変動幅で、
制度としてはかなりいい検査方法だとおもったのですが・・・
2020/04/04(土) 00:07:42.72ID:npCU99bV
少し理解できました。
範囲制約性の問題があるのですね。
今回のサンプルがみんな低い得点で分散が低いからICCが低く算出されていました。
ダミーデータ
1,1,1,1
を追加したらICC=0.99となりました。
得点の高いサンプルを追加しないとICCで信頼性は測れないのですね。
2020/04/04(土) 00:09:17.81ID:npCU99bV
いま有病者と健常者の両方を計測する検査法で健常者のみのデータでICCを算出しようとしているのが間違いということですね。

上記のような場合で、健常者のみでも信頼性を算出する方法っていうのはないのでしょうか?
2020/04/04(土) 21:44:33.98ID:ZFu90Xbq
>>804
DF=rbind(
c(0,0.05,0.1,0.15),
c(0,0,0.05,0.05),
c(0.15,0.1,0.05,0.1),
c(0,0.05,0.2,0.05),
c(0.1,0.15,0.1,0.05),
c(0.15,0.05,0.1,0.05),
c(0.0001,0.0001,0.0001,0.0001))

とダミーに0.0001を加えても
> DF2ICC1(DF)
ICC(1,1) ICC(1,k)
0.2462707 0.5665262

> psych::ICC(DF)
type ICC F df1 df2 p lower bound
Single_raters_absolute ICC1 0.25 2.3 6 21 0.072 -0.027
Single_random_raters ICC2 0.25 2.3 6 18 0.079 -0.028
Single_fixed_raters ICC3 0.25 2.3 6 18 0.079 -0.034
Average_raters_absolute ICC1k 0.57 2.3 6 21 0.072 -0.115
Average_random_raters ICC2k 0.57 2.3 6 18 0.079 -0.122
Average_fixed_raters ICC3k 0.57 2.3 6 18 0.079 -0.154

となるから、高値データでなくてもいいみたい。
2020/04/24(金) 21:32:48.82ID:1Teq2ITX
R 4.0.0 来た
2020/04/25(土) 06:37:54.89ID:R/UD6QQG
SIGNIFICANT USER-VISIBLE CHANGES

https://cran.r-project.org/doc/manuals/r-devel/NEWS.html
2020/04/25(土) 07:20:54.46ID:R/UD6QQG
パッケージを一括インストール

install.packages(available.packages()[,1])
2020/04/25(土) 07:29:33.43ID:R/UD6QQG
>>809
これやってからでないとパッケージのコンパイルができない。

After installation is complete, you need to perform one more step to be able to compile R packages:
you need to put the location of the Rtools make utilities (bash, make, etc) on the PATH.
The easiest way to do so is create a text file .Renviron in your Documents folder which contains the following line:

PATH="${RTOOLS40_HOME}\usr\bin;${PATH}"

You can do this with a text editor, or you can even do it from R like so:

writeLines('PATH="${RTOOLS40_HOME}\\usr\\bin;${PATH}"', con = "~/.Renviron")
2020/04/25(土) 08:56:31.54ID:R/UD6QQG
>>809
libraryのフォルダで dir /B とやって既にinstall済のリストを作って
install.packages("rstan","ggplot2",....)とやった方がいいな。
5000ほどパッケージがあるらしいけど、全部インストールしたらどれくらいの容量が必要なんだろう?
2020/04/25(土) 12:31:15.73ID:uVYqRSBX
やってみてくれw
2020/04/26(日) 21:05:35.88ID:tZeixXMR
>>811 これでいいかな?
targetPackages <- available.packages()[,"Package"]
newPackages <- targetPackages[!(targetPackages %in% installed.packages()[,"Package"])]
install.packages(newPackages, repos = "http://cran.r-project.org";)
2020/04/26(日) 22:22:15.60ID:tZeixXMR
高血圧で不安だという老人の経過観察入院1件。発熱してなくてほっとした。
ステーキハウスがテイクアウトを始めたからインセンティブはその足しにしようっと。
2020/05/03(日) 15:15:43.67ID:ICXX0aJG
>>812
コンパイルなしでやってみた。

サイズ:19.6 GB (21,082,530,395 バイト)

ディスク上のサイズ:20.3 GB (21,805,858,816 バイト)

ファイル数: 527,982、フォルダー数: 118,521
2020/05/03(日) 15:37:44.00ID:f6MQMkc5
Ubuntu 20.04でRcmdrがビルドできないんですけど、これはソフトウェアが20.04に対応するまで待つしかないですか?
2020/05/03(日) 20:21:16.34ID:l1OdZntk
>>816
自己解決しました。ライブラリの不足でした。
2020/05/04(月) 17:06:14.69ID:HJhKUMfp
4.0でまたsjis関連の問題が出まくりそう
2020/05/07(木) 01:08:38.98ID:VnQvkZ57
4.0になってから
col=番号指定での色が目に優しくなったみたい。

hist(runif(100),col=2)
hist(runif(100),col=rgb(1,0,0,1))
hist(runif(100),col='red')
2020/05/07(木) 18:12:52.58ID:nLAcI1eZ
rgbで256色でそんなに変化ないんじゃない。
2020/05/07(木) 19:16:11.76ID:VnQvkZ57
>>820
colours() と入力すると 657色から選べるから256以上ありそう。
2020/05/07(木) 23:34:33.14ID:8IDmAqjy
4.0からパレット変えたんじゃなかったか?
2020/05/07(木) 23:39:55.93ID:8IDmAqjy
リリースノートより

The palette() function has a new default set of colours (which are less saturated and have better accessibility properties).
There are also some new built-in palettes, which are listed by the new palette.pals() function.
These include the old default palette under the name "R3". Finally, the new palette.colors() function allows a subset of colours to be selected from any of the built-in palettes.
2020/05/07(木) 23:46:21.45ID:8IDmAqjy
具体的な変更点はこのあたりを参照方
https://developer.r-project.org/Blog/public/2019/11/21/a-new-palette-for-r/index.html
2020/05/08(金) 00:23:14.39ID:CfFk/Uw1
binomにある信頼区間をグラフ表示させてみた。

binom.ci <- function(x,n,cl=0.95){
PEci=binom::binom.confint(x,n,conf.level=cl)
y=nrow(PEci):1
oldpar <- par(no.readonly = TRUE)
on.exit(par(oldpar))
par(mar=c(3,3,2,2))
par(oma=c(0,4,0,0))
plot(PEci$upper,y,xlim=c(min(PEci$lower),max(PEci$upper)),type="n",
yaxt="n",ylab="",xlab="Confidence Interval",
main=paste("C.I. for", x,"out of",n))
points(PEci$upper,y,pch="|") ; points(PEci$lower,y,pch="|")
segments(PEci$lower,y,PEci$upper,y,lwd=3,
col=sample(colours(),1))
abline(v=PEci$mean[1],lty=3)
axis(2, at=y, labels=PEci$method,as.vector,las=2,cex=0.75)
PEci
}
binom.ci(3,312)
2020/05/08(金) 00:48:23.14ID:CfFk/Uw1
>>824
情報、ありがとうございます。

?paletteのヘルプにあるスクリプトを実行すると体感できました。

## Demonstrate the colors 1:8 in different palettes using a custom matplot()
sinplot <- function(main=NULL) {
x <- outer(
seq(-pi, pi, length.out = 50),
seq(0, pi, length.out = 8),
function(x, y) sin(x - y)
)
matplot(x, type = "l", lwd = 4, lty = 1, col = 1:8, ylab = "", main=main)
}
sinplot("default palette")

palette("R3"); sinplot("R3")
palette("Okabe-Ito"); sinplot("Okabe-Ito")
palette("Tableau") ; sinplot("Tableau")
palette("default") # reset
2020/05/09(土) 20:51:55.34ID:oDT7bFgO
rjagsのコードに

theta[i,j] <- min(1, exp(-alpha[i]*t[j]) + beta[i])といいれて、確率を1以下にして二項分布させてようとすると

Node inconsistent with parents というエラーがでた。 stackoverflow.comも明確な答が見いだせず、あれこれいじって

どうも確率1や0で二項分布する可能性があるとエラーがでるみたい、というのを発見。

1を0.99999とするとエラーが回避できた。

1を 1 - 1e-16としてもエラー回避できた。
828132人目の素数さん
垢版 |
2020/05/18(月) 08:52:51.27ID:s/hrJxRo
mathematicaは内部どうなってんだか知らないが第何種ベッセル関数とか入ってくるめちゃくちゃ重い積分を計算してくれた
2020/05/25(月) 12:44:17.51ID:3k8+9x6G
"
ある人物Dが新型コロナ肺炎に罹患したとする。
行動調査によって発症前にキャバクラに行っており
接客したキャバ嬢Cが人物D発症の2日後に発症していたことがわかった。
キャバ嬢Cは人物Dから移されたと主張して1億円の賠償を求めている。
潜伏期間には幅がありキャバ嬢Cから移された可能性もあると主張して
その確率を計算して賠償金を値切りたい。
いくら値切れるか計算せよ。
"
潜伏期間が従う分布はこれ
#--- incubation period ---
# from Li et al NEJM 2020
# lognormal mean = 5.2
ln_par1 = 1.434065
ln_par2 = 0.6612

Gt <- function(delay){
C=rlnorm(1e6,ln_par1,ln_par2)
D=rlnorm(1e6,ln_par1,ln_par2)
mean(C-D > delay)
}
Gt(2)
2020/05/25(月) 12:48:45.94ID:3k8+9x6G
怖い本で紹介されていたパッケージ polspline は秀逸。
発生させた乱数から確率密度関数を作ってくれる。
複雑な分布だと収束できず作れないこともあるけど

対数正規分布の差の分布を乱数発生させてpdfが作れた。

library(polspline)
delay=2
ln_par1 = 1.434065
ln_par2 = 0.6612
c=rlnorm(1e5,ln_par1,ln_par2)
d=rlnorm(1e5,ln_par1,ln_par2)
hist(c-d, freq=F,col='white',breaks=100,ylim=c(0,0.11),
xlim=c(-30,30),ann=F,axes=F) ; axis(1)
fit=logspline(c-d)
curve(dlogspline(x,fit),-30,30,ann=F,bty='n',add=T)
segments(delay,0,delay,dlogspline(delay,fit),pch=19,col=4)
curve(dlogspline(x,fit),delay,30,add=T,type='h',col=4)
curve(plogspline(x,fit),-30,30,lty=3,bty='n')
1-plogspline(delay,fit)
fn <- function(delay) 1- plogspline(delay,fit)
curve(fn(x),0,14, bty='n' ,xlab='Delay', ylab='Probability')
2020/06/01(月) 16:49:09.39ID:smFiMdov
今気づいたけどdplyr 1.0.0がcranに来てた
2020/07/25(土) 08:42:04.47ID:1FL39oBq
Rのグラフの出力をGIF動画にしたかったので検索したら、このページが役立った。

http://cse.naro.affrc.go.jp/takezawa/r-tips/r/36.html

mytest <- function() {
ANS <- readline("1+2? ")
if (ANS == "3") cat("Correct!\n")
else cat("Wrong...\n")
}
mytest()


mymessage <- function() {
Sys.sleep(3)
cat("Hello.\n")
}
mymessage()

尚、GIF作製には 
https://www.screentogif.com/
がお手軽だった。
2020/07/26(日) 10:34:51.02ID:FqjSGBlb
他人のコードを読んでいたら、

'%&%' <- function(x,y) paste0(x,y)

という関数が定義されていた。

これは便利と思った。

> '√2 =' %&% sqrt(2) %&% ', π = ' %&% pi
[1] "√2 =1.4142135623731, π = 3.14159265358979"
2020/07/27(月) 13:23:47.24ID:3h6isdRg
文字列をパイプでつないでいくのは面白いかも
2020/07/28(火) 04:21:24.42ID:jhN+xo4C
'%.%' <- function(x,y) sum(x,y)
でベクトルの内積とかも
2020/07/28(火) 04:22:11.80ID:jhN+xo4C
訂正
'%.%' <- function(x,y) sum(x*y)
2020/07/29(水) 12:22:51.45ID:3HY+hEHZ
面白いけど使いどころが難しそう
%>%パイプとの親和性が無いのが痛い
2020/07/29(水) 13:52:08.22ID:5tjjlndH
%文字%は二項演算子だから、定義次第じゃない?
2020/07/29(水) 18:45:33.70ID:3HY+hEHZ
tidyverseや%>%を使わないならまあ
2020/07/30(木) 18:02:20.97ID:8iPZt0Nw
>>833
それって意味があるの?
> paste0('√2 =', sqrt(2), ', π = ', pi)
[1] "√2 =1.4142135623731, π = 3.14159265358979"
普通にpaste0のまま使った方がタイプ量が圧倒的に少ないが。
2020/07/30(木) 20:10:10.19ID:417El1m4
>>840
括弧の対応で混乱しそうなときにちょっと役にたつかも。

こんな感じ

eval(str2lang("expand.grid(" %&% paste0(rep("1:2",6),collapse=',') %&% ")"))
2020/07/31(金) 07:51:08.50ID:0a0zx1wG
>>841
うーん、その例だとイマイチに思える

rerun(6, 1:2) %>% expand.grid
で済むものをわざわざ複雑にしているだけに感じる
2020/07/31(金) 13:51:36.15ID:ImynyFWQ
>>842
無理やり、例示した感は否めないな。
標準装備でなら、
expand.grid(replicate(6,1:2,simplify = FALSE))
ですむし。
844132人目の素数さん
垢版 |
2020/07/31(金) 23:36:09.03ID:0a0zx1wG
paste()やstr_c()以外を使うなら、sprintf()かglue::glue()が候補か
特にカンマが文字列に含まれるときにはpaste()より見やすくなるはず
sprintf("√2 = %s, π = %s", sqrt(2), pi)
glue("√2 = {sqrt(2)}, π = {pi}")
2020/08/01(土) 18:51:48.81ID:2TFdzAyg
>>844
確かに便利ですね。
カンマを ','で入力するのは混乱のもとでしたから。
有用な情報、ありがとうございます。'

> glue::glue("√2 = {sqrt(2)}, sin(π/3) = {sin(pi/3)}")
√2 = 1.4142135623731, sin(π/3) = 0.866025403784439
846132人目の素数さん
垢版 |
2020/08/06(木) 00:01:24.75ID:rivMs4GJ
初心者質問で申し訳ありません。
ある関数を作りたいのですが、その関数に入れる数値の数はランダムな場合はどのように書けばいいのでしょうか。
例えば、入れた要素をすべて掛け合わせる関数が作りたい場合、そこに入れる要素が(2,3,4)でも、(2,3,4,5,6)でも反応するような関数の書き方を教えてくださると助かります。
2020/08/06(木) 00:05:38.12ID:ID3ryEgK
ベクトルで渡せばいいのでは?
そういう話じゃない?
848132人目の素数さん
垢版 |
2020/08/06(木) 01:18:04.99ID:rivMs4GJ
874さん。
847さん、回答ありがとうございます。
確かにベクトルで何かするのはわかるのですが、その部分がわからないのです。
出来れば下に問題を書くので、コードを書いていただけると非常に助かります。

問、正の整数であるベクトルを入力すると、そのベクトルの要素をすべて掛け合わせた値を結果として返す関数を作りなさい。
2020/08/06(木) 02:03:47.23ID:V+bu3PeG
>>848
問題文これだけ?他に条件はないの?
標準の関数にあるけどいいのかな?

関数fを作るとして、一番いいのは標準の関数に余計な変更を加えないことだから、これが答えだけど…
f <- prod
850132人目の素数さん
垢版 |
2020/08/06(木) 02:11:09.57ID:rivMs4GJ
849さん、返信ありがとうございます。

実は問2がありまして、たぶんそれは既存の関数にはないと思うので、そちらも教えていただけると非常に助かります。

問2、要素がすべて整数であるベクトルを入力すると、そのベクトルの要素の絶対値をすべて掛け合わせた値を結果として返す関数を作成せよ。
2020/08/06(木) 05:13:12.66ID:03BiGX3I
>>850
f = function (x) abs(prod(x))
2020/08/06(木) 05:15:08.83ID:03BiGX3I
>>849
while やfor もしくは再帰関数を使って作らせる問題かな?
2020/08/06(木) 05:27:00.71ID:meNNWVIo
>>846
f <- function(...){
v=c(...)
ans=1
for(i in v) ans=ans*i
ans
}
> f(2,3,4)
[1] 24
> f(2,3,4,5,6)
[1] 720
2020/08/06(木) 05:32:55.68ID:meNNWVIo
>>850
f <- function(...){
v=c(...)
ans=1
for(i in v) ans=ans*i
ans=ifelse(ans>0,ans,-ans)
ans
}

> f(-1,2,3)
[1] 6
> f(1 -2,-3,-4,-5)
[1] 60
2020/08/06(木) 05:34:50.08ID:meNNWVIo
>>850
入力はベクトルだったから、

> f <- function(v){
+ ans=1
+ for(i in v) ans=ans*i
+ ans=ifelse(ans>0,ans,-ans)
+ ans
+ }
> f(c(-1,2,3))
[1] 6
> f(c(1 -2,-3,-4,-5))
[1] 60
2020/08/06(木) 06:04:14.18ID:meNNWVIo
再帰だとこんな感じかな?

f <- function(...){
v=c(...)
n=length(v)
sub<-function(n){
if(n==0) return(1)
else v[n]*Recall(n-1)
}
sub(n)
}
> f(2,3,4)
[1] 24
> f(2,3,4,5,6)
[1] 720
2020/08/06(木) 06:35:53.12ID:eFxPvNIl
みんなアタマいいなぁ…
2020/08/06(木) 08:34:19.03ID:E/ufUouA
>>857
854, 855, 856を真似るなよ。
2020/08/06(木) 08:49:09.44ID:E/ufUouA
再帰版はこんな感じかな。
rec.prod <- function(x) {
# 再帰により x の要素の絶対値の積を求める。
# 実際には prod(abs(x)) が良い。
l <- length(x) # ベクトルの要素数
if (l == 0) # 空のベクトルなら
return(1) # 積は1
x1.a <- abs(x[1])
if (l == 1)
x1.a
else
x1.a * rec.prod(x[-1])
}
860132人目の素数さん
垢版 |
2020/08/06(木) 11:42:21.63ID:rivMs4GJ
質問者本人です。
皆様のお力添えのおかげで無事問題を解くことができました。
初心者質問にやさしく回答して頂いて感謝しかありません。

本当にありがとうございました。
2020/08/06(木) 19:28:54.17ID:meNNWVIo
>>859
この方が>856みたいに関数の中で関数を定義とかなくてカッコいいと思ったのでsystem.timeで時間を比較しようと思って実験を始めたら、
何故か、rec.prodの方がoverflowしやすいなぁ。
頭からかけても尻からかけても同じじゃないかと思うんだが。

> prod(1:100)
[1] 9.332622e+157

> rec.prod <- function(x) {
+ # 再帰により x の要素の絶対値の積を求める。
+ # 実際には prod(abs(x)) が良い。
+ l <- length(x) # ベクトルの要素数
+ if (l == 0) # 空のベクトルなら
+ return(1) # 積は1
+ x1.a <- abs(x[1])
+ if (l == 1)
+ x1.a
+ else
+ x1.a * rec.prod(x[-1])
+ }
> rec.prod(1:100)
[1] NA
Warning message:
In x1.a * rec.prod(x[-1]) : NAs produced by integer overflow

> f <- function(...){
+ v=c(...)
+ n=length(v)
+ sub<-function(n){
+ if(n==0) return(1)
+ else v[n]*Recall(n-1)
+ }
+ sub(n)
+ }
> f(1:100)
[1] 9.332622e+157
2020/08/06(木) 20:06:06.68ID:meNNWVIo
比較のために、関数名の長さを同じにして、時間のかかるRecallを関数名にしてsystem.timeで比較してみた。

> rm(list=ls())
> rp <- function(x) {
+ # 再帰により x の要素の絶対値の積を求める。
+ # 実際には prod(abs(x)) が良い。
+ l <- length(x) # ベクトルの要素数
+ if (l == 0) # 空のベクトルなら
+ return(1) # 積は1
+ x1.a <- abs(x[1])
+ if (l == 1)
+ x1.a
+ else
+ x1.a * rp(x[-1])
+ }
> f1 <- function(...){
+ v=c(...)
+ n=length(v)
+ sub<-function(n){
+ if(n==0) return(1)
+ else v[n]*Recall(n-1)
+ }
+ sub(n)
+ }
> f2 <- function(...){
+ v=c(...)
+ n=length(v)
+ sub<-function(n){
+ if(n==0) return(1)
+ else v[n]*sub(n-1)
+ }
+ sub(n)
+ }


> system.time(replicate(1e5,prod(1:10)))
user system elapsed
0.11 0.00 0.11
> system.time(replicate(1e5,rp(1:10)))
user system elapsed
2.64 0.00 2.64
> system.time(replicate(1e5,f1(1:10)))
user system elapsed
2.44 0.01 2.47
> system.time(replicate(1e5,f2(1:10)))
user system elapsed
1.86 0.00 1.87
2020/08/06(木) 20:31:17.99ID:E/ufUouA
それはね、856は厳密な意味での再帰ではないから速いしリ、ソースを食わないんだよ。ループを再帰風に書いただけだから。それよりもループのほうが速いに決まっている。
この問題を再帰で解くのはムダ以外の何ものでもない。
2020/08/06(木) 20:33:25.51ID:w8yiRRv5
>>863
喩えれば、
親分が子分を再帰で酷使しているだけだから親分は消耗しない
という理解でいい?
2020/08/06(木) 20:47:18.11ID:E/ufUouA
全然違う。
再帰は、複雑な問題をより小さい問題に分割することがキモだ。
856は元のベクトルはそのまま変わらずに存在していて、ある特定の要素を一つずつ処理しているからループとやってることは変わりない。
859は、一つ短いベクトルを自分自身に処理させているから真の再帰なのだ。
2020/08/06(木) 22:25:29.65ID:meNNWVIo
>>865
f自身は再帰関数じゃないけど、呼び出しているsubは再帰関数では?

こういうのと同じ。
f <- function(x){ # 数列の和の階乗を返す
m=sum(x)
sub <- function(n){
if(n==1) return(1)
else{
return(n*Recall(n-1))
}
}
fact(m)
}

> f(c(1,2,3))
[1] 720
2020/08/06(木) 22:50:49.72ID:XP8VEZbb
>>865
(ご入力訂正)
f自身は再帰関数じゃないけど、呼び出しているsubは再帰関数では?

こういうのと同じ。
f <- function(x){ # 数列の和の階乗を返す
m=sum(x)
sub <- function(n){
if(n==1) return(1)
else{
return(n*Recall(n-1))
}
}
sub(m)
}

> f(c(1,2,3))
[1] 720
2020/08/07(金) 21:08:59.64ID:S7qsZ31k
856はsub()の引数がvでなくnなことと、nの入力に対して関数外のv[n]が帰ってくるのが、少し気になるかも
856が再帰っぽくないってのは、859はxを分割・再帰していってるのに対して、856はnを減じていってその都度vのn番目の値を参照してるところかな

それから、859がrec.prod(1:13)であっさりオーバーフローしてしまうのは、integer型だから
あと実行速度が少し遅いのは、xl.aへの代入操作と、if(l ==1){}の余分な条件分岐のせいだね

その辺を修正してやれば、こんな感じかな
# 再帰で問2
f <- function(x){
if(length(x) == 0) return(1)
abs(x[1]) * f(x[-1])
}
2020/08/08(土) 05:40:19.06ID:2ggSSq05
>>868
勉強になりました。

ついでにwhile版を書いてみました。
f <- function(x){
ans=1
while(length(x)){
ans=ans*abs(x[1])
x=x[-1]
}
ans
}
2020/08/08(土) 09:18:18.60ID:FvlAeRBY
>>868
859が遅い根本の原因は、x[-1] が生成されること。
他の指摘は、細かい高速化の工夫だから初心者に薦めるのはどうかと。
現に869で全く実用的に意味のないコードを書いているし。
題意を素直に表したほうがよいのでは?
絶対値の積は、積の絶対値と等しいから、absを呼ぶのは1回で済むが、何も説明無しにそうするのは私的にはアウトだ。メンテナンスの時に自分や他人が苦しむから。
2020/08/08(土) 11:01:30.91ID:559rm1Tc
>>870
意味不明なこと言いだしてるが大丈夫か、落ち着け
859は、無駄な条件分岐あるし、すぐオーバーフローするし、コードが冗長だしで、それこそ初心者以外にもNGだぞ

絶対値の積うんぬんに関しては、859と同じでabsを毎回呼んでる、余計な代入操作が無いだけだ
落ち着いてコードを見ろ

速度うんぬんの話はこれまで話題に出てきたように、856と比べての話だ、話についてこれないなら無理に入ってこなくていい
別に高速化を目的としてるわけじゃなく、859から冗長な部分やオーバーフローの原因を取り除いた結果高速化されたってだけだ

だが、速度が遅い原因がxl.aへの代入でなく、x[-1]作成が原因てのはそのとおりだ
文章を書いてる途中で、オーバーフローの原因(代入操作はこっちだ)と勘違いしてしまったようだ
これは訂正に感謝だ
2020/08/08(土) 11:24:32.96ID:FvlAeRBY
>>871
おまえこそもちつけ。
再帰は、再帰の停止条件と、自分自身が行う作業に分離できる。
この場合の停止条件は、要素が1つになったときと考えるのが自然だろう。
数学的には要素が0でもよいし、Rの場合はそれでうまくいくから問題はない。だが、そういった詳細を何も説明せずにこれでよい、と示すのはどうかな?
あと、絶対値を取ったのを代入しているのは、この作業が複雑になった場合の修正の確実さを優先するためで、優秀なバイトコンパイラであれば速度の差はなくなる。
2020/08/08(土) 23:06:27.95ID:UlZ+DmHh
一人だけエラー吐いて、まともに動かない関数書いた無能が、
それでも、恥ずかしげもなく、一生懸命マウント取ろうとあがく姿は、
滑稽で哀れになってくるわ
2020/08/13(木) 17:34:36.29ID:5b54QocS
>859がrec.prod(1:13)であっさりオーバーフローしてしまうのは、integer型だから
の意味が理解できなくて、実験してみた。

> rec.prod <- function(x) {
+ l <- length(x)
+ if (l == 0)
+ return(1)
+ x1.a <- abs(x[1])
+ if (l == 1)
+ x1.a
+ else
+ x1.a * rec.prod(x[-1])
+ }
>
>
> rec.prod(1:13)
[1] NA
Warning message:
In x1.a * rec.prod(x[-1]) : NAs produced by integer overflow
> rec.prod(as.numeric(1:13))
[1] 6227020800
> rec.prod(c(1,2,3,4,5,6,7,8,9,10,11,12,13))
[1] 6227020800
> rec.prod(c(1L,2L,3L,4L,5L,6L,7L,8L,9L,10L,11L,12L,13L))
[1] NA
Warning message:
In x1.a * rec.prod(x[-1]) : NAs produced by integer overflow

integer型のデータだとオーバーフローしちゃうけど、as.numericでdouble型にするとエラーがでない。

一方、

> f <- function(x){
+ if(length(x) == 0) return(1)
+ abs(x[1]) * f(x[-1])
+ }
> f(1:13)
[1] 6227020800
> f(as.numeric(1:13))
[1] 6227020800
> f(c(1,2,3,4,5,6,7,8,9,10,11,12,13))
[1] 6227020800
> f(c(1L,2L,3L,4L,5L,6L,7L,8L,9L,10L,11L,12L,13L))
[1] 6227020800
>

とエラーがでないなぁ。

何故だろう?
2020/08/20(木) 13:26:56.75ID:mPUCNi08
Package ‘XXX’ was installed before R 4.0.0: please re-install it
とメッセージがでてXXXをインストールすると次は

Package ‘YYY’ was installed before R 4.0.0: please re-install it
とでてきてうんざりしていた。

stackoverflow.comで以下の答をみつけて解決した。

.libPaths()
update.packages(ask=FALSE, checkBuilt=TRUE)
876132人目の素数さん
垢版 |
2020/09/09(水) 22:54:07.12ID:IR7822fG
ありがとうございます
2020/10/19(月) 07:15:12.45ID:21zikI9w
PならばQ をパイプで P %=>% Q として論理演算で遊んでみた。

"
問題 : 「シリツ医 ならば (馬鹿 ならば 裏口 である)」という命題と同値な命題はどれか?

1 : シリツ医 ならば (裏口 ならば 馬鹿 である)
2 : 馬鹿 ならば (シリツ医 ならば 裏口 である)
3 : 馬鹿 ならば (裏口 ならば シリツ医 である)
4 : 裏口 ならば (シリツ医 ならば 馬鹿 である)
5 : 裏口 ならば (馬鹿 ならば シリツ医 である)
"

# PならばQ ≡ (P かつ (Qでない))ではない
'%=>%' = function(P,Q) !(P & !Q)
# premise
A = function(S,B,U) S %=>% (B %=>% U)

# choice
B1 = function(S,B,U) S %=>% (U %=>% B)
B2 = function(S,B,U) B %=>% (S %=>% U)
B3 = function(S,B,U) B %=>% (U %=>% S)
B4 = function(S,B,U) U %=>% (S %=>% B)
B5 = function(S,B,U) U %=>% (B %=>% S)

# premise => choice
C1 = function(S,B,U) A(S,B,U) %=>% B1(S,B,U)
C2 = function(S,B,U) A(S,B,U) %=>% B2(S,B,U)
C3 = function(S,B,U) A(S,B,U) %=>% B3(S,B,U)
C4 = function(S,B,U) A(S,B,U) %=>% B4 (S,B,U)
C5 = function(S,B,U) A(S,B,U) %=>% B5 (S,B,U)

# combination grid of TRUE & FALSE
gr=expand.grid(c(T,F),c(T,F),c(T,F))

# test for premise => choice
all(mapply(C1,gr[,1],gr[,2],gr[,3]))
all(mapply(C2,gr[,1],gr[,2],gr[,3]))
all(mapply(C3,gr[,1],gr[,2],gr[,3]))
all(mapply(C4,gr[,1],gr[,2],gr[,3]))
all(mapply(C5,gr[,1],gr[,2],gr[,3]))
2020/10/19(月) 07:15:28.30ID:21zikI9w
# choice -> premise
D1 = function(S,B,U) B1(S,B,U) %=>% A(S,B,U)
D2 = function(S,B,U) B2(S,B,U) %=>% A(S,B,U)
D3 = function(S,B,U) B3(S,B,U) %=>% A(S,B,U)
D4 = function(S,B,U) B4(S,B,U) %=>% A(S,B,U)
D5 = function(S,B,U) B5(S,B,U) %=>% A(S,B,U)

# test for choice -> premise
all(mapply(D1,gr[,1],gr[,2],gr[,3]))
all(mapply(D2,gr[,1],gr[,2],gr[,3]))
all(mapply(D3,gr[,1],gr[,2],gr[,3]))
all(mapply(D4,gr[,1],gr[,2],gr[,3]))
all(mapply(D5,gr[,1],gr[,2],gr[,3]))
2020/11/17(火) 19:55:57.27ID:UJMPy762
,で文字列を分けようとしたらうまくいかなかったがHELPをみたら解説してあった。

> #.で文字列を分ける
> unlist(strsplit('3.14','.'))
[1] "" "" "" ""
> unlist(strsplit('3.14','\.')
Error: '\.' is an unrecognized escape in character string starting "'\."
>

> unlist(strsplit('3.14','[.]'))
[1] "3" "14"
> unlist(strsplit('3.14','.',fixed=TRUE))
[1] "3" "14"
2020/11/17(火) 20:18:32.66ID:/TSutyYc
unlist(strsplit("3.14", "¥¥."))
人に見てもらいたかったら読みやすく書けよ。アンタのプログラムはいつも読みにくい。
2020/11/18(水) 01:42:18.74ID:CJUGi+QQ
>>880
備忘録として書いたのでレスがつくとは思ってなかったが、レスthanx.
2020/12/10(木) 02:17:40.15ID:Whv7aYu3
数値積分をさせていたら
初めてみるこんなエラーが返ってきた。
roundoff error is detected in the extrapolation table

困ったときのstackoverflow.comで
https://stackoverflow.com/questions/56384330/integrate-function-returning-roundoff-error-after-working-previously

As for the integration problem, package cubature generally does a better job when integrate
と解決法が記載されていた

integrate(fn, lower, upper)$value
でエラーが返ってきたが、
cubintegrate(fn, lower,upper, method='pcubature')$integral
とするとエラーなしに計算してくれた。

(備忘録)
2020/12/12(土) 23:25:15.53ID:DvLXeu4z
それエラーが出るべきなのに出ない誤りなんじゃ、って可能性はないの?
2020/12/13(日) 08:12:33.91ID:xmsEH+j9
>>883
別スレの問題を「プログラムで面積を数値計算させていたらエラー発生

体験したければ読みにいコードの下記をどうぞ。

r= 0.66017210648907 ; s=2.89088405538017

# 面積計算にintegrate で エラー
sub <- function(c,Area1=1){ # c 円Cの中心のx座標
b0=(c^2+r^2-s^2)/(2*c) # B(b0,b1) # 円Cと円Oの交点Bの座標
b1=sqrt(r^2-(c^2+r^2-s^2)^2/(4*c^2))

blue = function(x) sqrt(s^2-(x-c)^2) # 円Cの方程式
BLUE= integrate(blue,b0,c+s)$value*2 # 青の面積
green = function(x) sqrt(r^2-x^2) # 円Oの方程式
GREEN=integrate(green,-r,b0)$value*2 # 緑の面積

GREEN+BLUE-Area1 # GREEN+BLUE=1
}
sub=Vectorize(sub)
x=seq(-r-s,r-s,length=100) ; plot(x,sub(x),pch=19) ; abline(h=0,lty=3)


# 面積計算にcubintegrate でエラーなし
library(cubature)
sub <- function(c,Area1=1){ # c 円Cの中心のx座標
b0=(c^2+r^2-s^2)/(2*c) # B(b0,b1) # 円Cと円Oの交点Bの座標
b1=sqrt(r^2-(c^2+r^2-s^2)^2/(4*c^2))

blue = function(x) sqrt(s^2-(x-c)^2) # 円Cの方程式
BLUE= cubintegrate(blue,b0,c+s,method="pcubature")$integral*2 # 青の面積
green = function(x) sqrt(r^2-x^2) # 円Oの方程式
GREEN=cubintegrate(green,-r,b0,method='pcubature')$integral*2 # 緑の面積

GREEN+BLUE-Area1 # GREEN+BLUE=1
}
sub=Vectorize(sub)
x=seq(-r-s,r-s,length=100) ; plot(x,sub(x),pch=19) ; abline(h=0,lty=3)
2020/12/13(日) 08:15:08.06ID:xmsEH+j9
入力の省力化にこんな関数を道具箱に詰めた

# 定積分
integral <- function(fn,lwr,upr,...){
cubature::cubintegrate(fn,lwr,upr,method='pcubature',...)$integral
}
2020/12/13(日) 09:32:37.11ID:xmsEH+j9
>>884
library(MASS)にareaという面積計算の関数があるのを思い出したのでやってみた。

library(MASS)
r= 0.66017210648907 ; s=2.89088405538017
# 面積計算にMASS::area
sub <- function(c,Area1=1){ # c 円Cの中心のx座標
b0=(c^2+r^2-s^2)/(2*c) # B(b0,b1) # 円Cと円Oの交点Bの座標
b1=sqrt(r^2-(c^2+r^2-s^2)^2/(4*c^2))

blue = function(x) sqrt(s^2-(x-c)^2) # 円Cの方程式
BLUE=area(blue,b0,c+s)*2 # 青の面積
green = function(x) sqrt(r^2-x^2) # 円Oの方程式
GREEN=area(green,-r,b0)*2 # 緑の面積

GREEN+BLUE-Area1 # GREEN+BLUE=1
}
sub=Vectorize(sub)
x=seq(-r-s,r-s,length=100) ; plot(x,sub(x),pch=19) ; abline(h=0,lty=3)

こっちはエラーがでない。
2020/12/21(月) 20:43:26.34ID:gcvC1Sv7
func <- function (...) {
return(anova(...))
}
func(fit1, fit2, fit3)
オブジェクトの引数をうけとって、関数内の関数anovaに渡して
ちゃんと動かすにはどうしたらいいですか?
2020/12/23(水) 07:21:19.77ID:N7Fbsys3
>>887
>773みたいに
c(...)もしくはlist(...)で引き出すのでは動作しない?
2020/12/23(水) 11:45:33.99ID:DPeLDm1M
>>887
> mydata <- data.frame(x = runif(10), y = runif(10), z = runif(10))
> xy <- lm(y ~ x, data = mydata)
> zy <- lm(y ~ z, data = mydata)
> func <- function (...) {
return(anova(...))
}
> func(xy, zy)
Analysis of Variance Table

Model 1: y ~ x
Model 2: y ~ z
Res.Df RSS Df Sum of Sq F Pr(>F)
1 8 0.40535
2 8 0.39312 0 0.012234

ちゃんと動くけど。
何がどう問題なのかを明確にして質問しないと助言を得られないよ。
2021/01/03(日) 22:00:14.73ID:8tLYm46h
やっぱり、パッケージになっている関数は高速だな。
1万までの素数を求める

> rm(list=ls())
> primes <- function(n) (1:n)[-outer(2:n,2:n)][-1]
> system.time(primes(10000))
user system elapsed
0.60 1.92 2.88

> rm(list=ls())
> library(numbers)
> system.time(Primes(10000))
user system elapsed
0.00 0.00 0.03
891132人目の素数さん
垢版 |
2021/01/21(木) 00:00:54.88ID:KZXQ/VTY
時刻と、その時に従業員がいた場所(住所)がデータとして一覧化されていて、
いつ、どこによくいるかをクラスタリングしたいのですがRは出来るのでしょうか?
2021/01/24(日) 12:08:49.15ID:oqt0Qph1
>>891
SpaTimeClusパッケージ
2021/02/14(日) 11:56:55.00ID:g9kE6hlo
IPB size
1 I 82571
2 B 4909
3 B 230
4 B 231

こんな感じのデータフレームを複数ファイルを読み込んで
ファイル別に横につなげる場合どのようにfor文を書けばいいですか?
2021/02/14(日) 12:28:29.31ID:n5qxzAHa
purrrパッケージを使った方が速いんじゃね?
2021/02/14(日) 16:02:48.85ID:g9kE6hlo
> 894
ありがとう。これで無事横並べられた
https://gist.github.com/ibombonato/02eea96413dd6a7df5cb38054b2c731c
2021/03/16(火) 13:05:28.85ID:cJpJJpsg
# 振幅1の正弦波の一周期の長さを求めよ
の計算に、一般化して計算できるように関数を書いてみたのだが、
文字列での入力が必要でどうも美しくない。

# 関数y=f(x)の曲線でx=from からx=toまでの長さを求める

CurveLength <- function(f='sin(x)',from=-pi,to=pi){
str=paste("deriv(~ ",f,",","'x',func=TRUE)")
Df <- eval(str2lang(str))
f1 <- function(x) as.numeric(attributes(Df(x)))
f1=Vectorize(f1)
integrate(function(x) sqrt(1+f1(x)^2), from, to, rel.tol = 1e-12)
}

計算としてはあっていると思う。
> CurveLength()
7.640396 with absolute error < 2.6e-13

> CurveLength('log(1+cos(x))',0,pi/2)
1.762747 with absolute error < 2e-14

もっとエレガントなコードがあればご教示をお願いします。
2021/03/18(木) 08:46:13.56ID:IPPbuENC
時系列データ成型の解説でいいサイトないですか
2021/03/31(水) 01:41:06.70ID:Cwg7NuDW
>>896
コードのことならプログラム板のほうで訊いたほうがよさそう
2021/06/05(土) 21:13:05.02ID:5b0TiKZo
R version 4.1.0 (2021-05-18) -- "Camp Pontanezen" になってパイプに標準で対応したのは嬉しい。
function(x) が \(x)と略記可能になった。

ちょっと練習

f <- \(x) sample(100,x,rep=TRUE)
f(50) |> sort() |> unique() |> length()

> f <- \(x) sample(100,x,rep=TRUE)
> f(50) |> sort() |> unique() |> length()
[1] 40

詳細は
https://cran.r-project.org/bin/windows/base/NEWS.R-4.1.0.html
2021/06/06(日) 12:41:44.43ID:X+DUyz8T
Vectorize()もパイプで受けてくれた。

(\(n) sample(10,n, replace = TRUE) |> unique() |> sort()) |> Vectorize() -> f.new
f.new(1:5)

f.old <- Vectorize(function(n){
sort(unique(sample(10,n,replace = TRUE)))})
f.old(1:5)
2021/06/06(日) 12:54:15.47ID:X+DUyz8T
|> curve()は描画されなかった。

(\(x) sqrt(1-x^2)) |> Vectorize() |> curve()

> (\(x) sqrt(1-x^2)) |> Vectorize()) |> curve()
Error: unexpected ')' in "(\(x) sqrt(1-x^2)) |> Vectorize())"


(\(x) sqrt(1-x^2)) |> Vectorize() -> fn
curve(fn)
1/4円を描画
2021/06/06(日) 22:14:15.22ID:X+DUyz8T
パイプで速度が落ちるかと思ったけど変わらないね。

> (\(x) sample(1000,x,replace=TRUE) |> sort() |> unique() |> length()) -> f.new
> system.time(replicate(1e5,f.new(5000)))
user system elapsed
28.66 0.01 28.70

> f.old <- function(x) length(unique(sort(sample(1000,x,replace=TRUE))))
> system.time(replicate(1e5,f.old(5000)))
user system elapsed
28.65 0.00 28.67
2021/06/06(日) 22:37:59.70ID:jjPG368x
そのパイプを使ったコードをquote関数に噛ませば分かるけど実際はパーサーが下のコードに変換してるだけらしい。
なので実態としては演算子や関数ではないのでオーバーヘッドが生じないとのこと。
2021/06/08(火) 05:41:54.05ID:uSV089kB
>>903
レスありがとうございます。早速、やってみました。

> quote((\(n) sample(10,n, replace = TRUE) |> unique() |> sort()) |> Vectorize())
Vectorize((function(n) sort(unique(sample(10, n, replace = TRUE)))))
2021/06/08(火) 06:02:44.83ID:uSV089kB
dplyrのパイプ%>%だと他に引数がないときは関数の()は省略できるけど
今回、搭載された|>は()がないとエラーになるな。

> library(dplyr)
> sample(10,10,replace=TRUE) %>% sort
[1] 1 2 4 5 6 7 7 7 7 8
> sample(10,10,replace=TRUE) %>% sort(decreasing = TRUE)
[1] 9 9 7 6 5 5 3 1 1 1

> sample(10,10,replace=TRUE) |> sort
Error: The pipe operator requires a function call as RHS
> sample(10,10,replace=TRUE) |> sort()
[1] 3 4 5 5 6 6 8 8 8 10
> sample(10,10,replace=TRUE) |> sort(decreasing = TRUE)
[1] 10 10 9 8 7 7 6 6 5 2
2021/06/08(火) 06:10:22.55ID:uSV089kB
パイプで送る関数に引数が1個なら自分でパイプを定義するのと変わらないなぁ。
オンラインで実行できるサイトだと必ずしも最新版のRに対応していないし、外部ライブラリ非対応のところもあるので
自分でパイプを定義の方がいいかも

'%|%' <- function(x,FUN) FUN(x)

> sample(10,10,replace=TRUE) %|% sort %|% unique
[1] 1 3 5 6 7
2021/08/29(日) 23:23:03.95ID:OFN46wh5
# 備忘録

hogehoge <- function(x){
cat(deparse(substitute(x)),'=',x,'\n')
}
ch='Swiss'
hogehoge(ch)

> hogehoge(ch)
ch = Swiss
2021/11/05(金) 22:47:20.72ID:lTyg7nhh
これ↓、思ったように動かないけど、普通?
iris[any(iris[,3]==c(6.1,5.1)) ,]

いまいちR言語の仕様がわからん。
2021/11/05(金) 23:38:14.16ID:I43ryX9p
何をしたいのか説明できない理系脳かな?
適当に推測するに、
iris[iris[, 3] %in% c(6.1, 5.1), ]
2021/11/06(土) 21:41:29.28ID:8hjJFETA
ありがとう。
雰囲気で伝わるかなと思った。
2021/11/06(土) 21:45:56.76ID:8hjJFETA
SQL(例えばAccess)とRの、データ分析に関する違いって何だと思う?

Rの有利な点は表を容易に分割→編集→結合できる点で、Accessの有利な点はクエリを何段にも重ねることで表を視覚的に扱えることだと思うんだけど、どうかな?

要約すると、細かいとこに手が届くのと、そうではないけど直感的なところ。
2021/11/06(土) 21:53:39.63ID:8hjJFETA
SQLがAccessの例に限定されちゃってるね。
でも同じように文字で書くなら、Rの方が便利に思えるな。

Officeが使える環境でR使ってるから、Rだけの環境に移行すればどんな不便が発生するか検討中なんだけど、どう思う?
913132人目の素数さん
垢版 |
2021/11/08(月) 19:14:28.35ID:xqrS4yV9
>>911
> SQL(例えばAccess)とRの、データ分析に関する違いって何だと思う?
何を言っているのか分からないが、用意されいている分析手法の豊富さが全く違うだろ。
例えば、多重検定の検定法とかSQLにあるの?ノンパラメトリックの多重検定とかちゃんとできるの?
914132人目の素数さん
垢版 |
2021/11/08(月) 19:14:46.14ID:xqrS4yV9
>>911
> SQL(例えばAccess)とRの、データ分析に関する違いって何だと思う?
何を言っているのか分からないが、用意されいている分析手法の豊富さが全く違うだろ。
例えば、多重検定の検定法とかSQLにあるの?ノンパラメトリックの多重検定とかちゃんとできるの?
2021/11/09(火) 20:40:06.49ID:hGmtIAbe
そうだよね。
組み合わせて使うもんだよね。SQLとRは。
ただ、境界線をどこで引くべきか微妙なところで悩む。RだとRStudioのレポートとして残せるから、分析手順を残していくことを考えると極力R使った方がいいのかな。
2021/12/04(土) 13:16:48.05ID:3GLpEIlX
いや、SQLとRは全くの別物だろ
SQLはデータベースのマネジメントシステムで、
Rはデータ分析のツールじゃん
2021/12/04(土) 14:11:32.93ID:0kKQqVbM
別物だから組み合わせて使う意味がある
2021/12/04(土) 20:41:11.61ID:fCvhwSlW
いや、SQLとRは全くの別物だろ
組み合わせて使う意味はない
2021/12/04(土) 22:13:49.92ID:6B5EP1qJ
そうだな、お前は使わなくていい
絶対に使うな
2021/12/04(土) 22:16:19.95ID:sikGs8rn
別物だから別々に使う意味がある
2022/02/28(月) 07:22:18.49ID:A7JZ2ass
https://twitter.com/cloudlatex/status/1440123463423782918
を実行出来た方いますか?
https://twitter.com/5chan_nel (5ch newer account)
922sage
垢版 |
2022/02/28(月) 12:38:08.27ID:dt49D0nX
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10257827425
で解決しました。
スレを汚してすみませんせした。
2022/03/02(水) 03:27:08.75ID:RV9q7yNr
今更レスだけどなんでaccessと比べるのか、excelじゃねーの

excelは商用だけあって機能的には検定回帰成分分析因子分析何でもできてRに劣るところは無いし、統計以外なら最適化が強い

Rより遅いしVBAは醜いし、365なんていきなり環境ぶっ壊されかねないからRに安住するけど
2022/03/02(水) 03:30:48.43ID:RV9q7yNr
インタラクティブに使う分にはCSE使えるexcelの方が便利だな
ぜひともRに取り入れたい機能の一つ
2022/03/02(水) 03:42:31.09ID:RV9q7yNr
excelで巨大データ扱うにはaccessインテグレーション機能で補完し合うといいとは聞くけど、俺のアカデミック割のofficeではaccessはハブられてた悲しみ
2022/03/06(日) 16:53:40.50ID:BGFbnw+F
精度が怪しいだけ
2022/03/06(日) 16:55:06.71ID:BGFbnw+F
コマンドで操作しづらい
2022/03/18(金) 15:05:36.24ID:Z+B2NJF6
contourのzlimはどう設定すればよいのでしょうか?

https://navaclass.com/mahalanobis/
ユークリッド距離のzlimは
contour(x,y,z.E,zlim=c(0,3),nlevels = 5,add=T)
のようにzlim=c(0,3)に設定されているのですが、
マハラノビス距離のzlimは
contour(x,y,z.D,zlim=c(0,1),nlevels = 5,labels="", add=T)
のようにzlim=c(0,1)に設定されています。

確かに、ユークリッド距離のほうは(1, 1)の点が1.0の等高線上にありますし、
マハラノビス距離のほうもAは0.75、Bは2.2という距離に相応しいところに点があります。

ただ、zlim=c(0,3)の意味はきっと0から3までの範囲に限るという意味なんでしょうが、
z.Eとの値も見ても3で区切られているようには見えません。
実験してみましたが、z.Eのほうのzlimは3.5、z.Dのほうのzlimは1.4で等高線が変化するようです。

これでは新たな相関係数を使ったときにどう設定すればよいのか分かりません。
どうか教えて下さい。
929132人目の素数さん
垢版 |
2022/03/18(金) 15:25:12.51ID:3f0eXSLb
>>928
xlim, ylimは指定した値でスパッと切るわけではないので(前後に余裕を持たせるようになっている)、
zlimも同じ仕様だと想像するよ。
xlimやylimで指定した特定の値でスパッと切るオプションがあったと思うので、
zlimにも有効でないかどうか、そこから調べて見れば?
2022/03/18(金) 17:48:09.58ID:Z+B2NJF6
>>929
ありがとうございます。
今、いろいろ計算した結果、等高線の位置自体は正しいことが判りました。
ただ、問題は等高線の刻みがzlimと相関係数の組み合わせによって変わることです。
具体的には、等高線が0.5刻みになったり1.0刻みになったり0.25刻みになったりします。
にもかかわらずnlevelsは5本のままなので、全体が膨らんだり縮んだり、見た目が全然違ってくるんですよね。
その度に手でzlimの値を1とか3とか5に変えてあげないといけません…これらの数字はまったく理解できません。

なので質問を変えさせていただいて、
相関係数が0以外の時でも等高線上に0.5, 1.0, 1.5, ...などのラベルを強制的に表示する方法は無いでしょうか?
相関係数が0(つまりユークリッド距離)の時は等高線上にそれらの数値が表示されます。
それが相関係数が0.1にでもなった途端に表示されなくなります
(数値表示用に輪が途切れた形でブランクは空いているようなのですが)。
等高線上に0.5, 1.0, 1.5, ...などのラベルが表示されるようになれば、上記の問題も許容できると思います。

余談ですが、
>スパッと切るオプション

調べてみると、xaxs="i"のことのようですね。
"r"だとグラフの端に4%の余白があったのが"i"だと無くなりました。
2022/03/18(金) 18:10:24.04ID:Z+B2NJF6
すみません、labels=“”になっているというオチでした。
とりあえず、これで問題ないか確認します。
932132人目の素数さん
垢版 |
2022/03/21(月) 13:18:24.75ID:k7XqFrKG
ご助力をいただきたく、質問いたします。

対象データ
データフレームA内のB列, <chr>型 中身は例として 文字列で"2022/02/24"が入っている。

やりたいこと
この文字列をRのDate型に変換したい

やってみたこと。
tidyverseを用いて
A %>% select(B) %>% as.Date()
これだとエラーが出ました。
エラー文は「'.'からクラス"Date"へ変換はできません」

どうやったらこのB列をRのDate型に変換できますでしょうか。
2022/03/21(月) 15:20:29.09ID:SKGsv+wa
>>932
パイプ処理したいならlubridateパッケージが便利です。チートシート(英語)が公開されているので、使い方は確認してみてください。

パッケージ名のスペル間違ってたらごめん。
934132人目の素数さん
垢版 |
2022/03/21(月) 17:46:23.39ID:qn67+d1x
>>932
変換できない理由は、dplyr::select()関数の返り値がdata.frame型で
as.Date()関数の引数がベクトル型でなければならないからです。
なので、

as.Date(A$B)

とすれば、Date型でベクトルな返り値を得ることができます。tidyverseを
使いたい(というかパイプで処理したい)なら

A %>%
.$B %>% # ベクトルとして取り出す
as.Date()

となります。
返り値をdata.frame型で得たい場合は、dplyr::mutate()関数を使って

A %>%
dplyr::select(B) %>%
dplyr::mutate(B = as.Date(B))

とします。

tidyverseは、基本的にデータフレームを入力としデータフレームを出力と
しますので、列をベクトルとして処理したい場合はmutate()関数を使う必要が
あります。
935132人目の素数さん
垢版 |
2022/03/21(月) 20:28:10.47ID:k7XqFrKG
>933様
>934様
ご教示ありがとうございます。
参考にまずは試してみます。
936132人目の素数さん
垢版 |
2022/03/22(火) 07:49:54.09ID:kcYWMWlK
>>932
selectじゃなくてpullにすれば動くよ
937132人目の素数さん
垢版 |
2022/03/22(火) 12:12:27.45ID:CNKDZNvw
pull()は知らなかったけど引数を二つ指定するとnamed vectorも作れるんだな。
938132人目の素数さん
垢版 |
2022/03/25(金) 19:24:11.66ID:YaAd0nW/
借金を返す手段は大増か
踏み倒し(=ハイパーインフレ)の2者選択。
今、日本はお金をどんどん刷って紙幣価値を下げ、
後者の道をまっしぐら。

「税金で借金を返せる難易度ランキング」

1位 日本     257%
2位 スーダン   210%
3位 ギリシャ   207%
4位 エリトリア  175%
5位 カーボベルデ 161%
6位 イタリア   155%
7位 スリナム   141%
://twitter.com/fujimaki_takesi/status/1505469787174227973?s=20&t=3LeCpoO4fcZVopj2x8b9Dw

         日本から始まる世界的株式市場の大暴落

それが最終的な暴落であることがはっきりするや否や、
マ仆レーヤは出現するでしょう。
マ仆レーヤが公に世界に現れるにつれて、
UFOがとてつもない数で姿を表すでしょう
https://twitter.com/5chan_nel (5ch newer account)
939132人目の素数さん
垢版 |
2022/03/27(日) 21:47:05.79ID:nv2FRWMk
質問いたします。よろしくお願いいたします。

ベクトル
a <- c(1, 2, 3, 3, 5, 5, 7) #1:7と連番にしたいが、一部値が重複している想定です
に対して、重複を修復するために

df <- data.frame(b=a, c=lag(a, default=a[1]-1))
apply(df, 1, function(x){ifelse(x[1]==x[2], x[1]+1, x[1])})

としましたが、applyを使っているのでかなり遅いです。
質問1:applyを使わない高速化できる手段はないでしょうか。
質問2:ifelseがベクトルに作用すると聞いたので(お恥ずかしいw)
    ifelse(df$b == df$a,
としようとしたのですがエラーが出ました。
  ifelseは異なる2つのベクトル(行数同じとしても)には作用できないのですね?
2022/03/27(日) 21:55:41.37ID:C7ecChkw
>>939
何をどうしたいのか、具体的に書いてくれ。
何がしたいのか、さっぱりわからん。
c(1, 2, 3, 3, 5, 5, 7) を 1:7 にしたいだけなら、seq(along=a) でよいが、前と同じ値の場合は、前の値に1を足すというのであれば、rle を使えばなんとかなりそう。
941132人目の素数さん
垢版 |
2022/03/27(日) 22:01:16.21ID:BmY4vlnd
質問が下手だと答えてもらえないぞ。
942132人目の素数さん
垢版 |
2022/03/27(日) 22:03:58.44ID:nv2FRWMk
>>940
すいませんでした。詳しく書くと、
cベクトルにはcsvから読み込んだ、時間データの秒数が整数値で入っています。
(・csvデータには他に、時間データの年、月、日、時、分、秒、と
 全て整数値がそれぞれ別の列で入っています。
・このcsvデータは1秒サンプリングです。

ただそのデータは秒がたまに重複しているのです。
重複している時のルールとして、直前の、1秒前の時間の秒が秒列に入っています。
例で挙げたように
1, 2, 3, 3, 5, 5, 7, 8, 9, 9

この重複を訂正したいのです。
そこで考えたのが 939で挙げたスクリプトだったのですが、
あまりにも遅く(1日分のデータ24*60*60行を訂正するのに)
質問いたしました。
2022/03/27(日) 22:13:43.93ID:UiNoGcwm
おれもさっぱり質問の意図が理解できないが、重複除去なら集合演算の
b <- unique(a)
でbは
> b
[1] 1 2 3 5 7
になるよ。
944939
垢版 |
2022/03/27(日) 22:17:25.42ID:nv2FRWMk
>>943
回答ありがとうございます。わかりづらくてすいません。
重複除去ではなく、重複のです。
942に書いたように、
秒データが
1,2,3,4,5,6,7,8
とあるべきところが
1,2,3,3,5,5,7,8
のように4秒のところが直前の3秒に、6秒のところが直前の5秒になっています。
これを修正したいのです。
2022/03/27(日) 22:24:40.36ID:BmY4vlnd
そういうことか。
なら
a <- 1:8
で置換しちゃえばいいんじやないの?
てかまず国語を勉強しよう。
946939
垢版 |
2022/03/27(日) 22:30:24.14ID:nv2FRWMk
>>945
ありがとうございます。
確かに国語力ないですね、今から考えると、、、
必要な前提を書ききれていません。

さらに必要な前提は、データが24*60*60秒分全部なく、1、2秒分抜けているのです。
947132人目の素数さん
垢版 |
2022/03/27(日) 22:34:34.62ID:C7ecChkw
例が悪いね。
本当に1秒ごとに確実にデータが来ているなら、seq でも使って新たに値を作ればいいのだが、
きっと、途中でデータが来ない場合もあるのだろう。
例としては、c(1, 2, 2, 2, 9, 9, 11) のようなほうがよいのでは?
この場合、c(1, 2, 3, 4, 9, 10, 11) という答えになればよいのだろう。

r <- rle(a)
res <- lapply(seq(along=r$length), function(i) seq(r$values[i], len=r$length[i]))
do.call(c, res)

これでできると思うが、これで遅いなら、重複のところだけを修正するようにすればよい。
2022/03/27(日) 22:35:09.61ID:UiNoGcwm
反省ゼロだなw
2022/03/27(日) 22:37:05.89ID:BmY4vlnd
確認だけど、重複してる場合は必ず2つで、3つ以上はないの?
950939
垢版 |
2022/03/27(日) 22:38:26.76ID:nv2FRWMk
>>947
ありがとうございます。
参考に考えてみます。

>>948
返す返す申し訳ないです、、
951939
垢版 |
2022/03/27(日) 22:41:51.48ID:nv2FRWMk
>>949

データの特徴は、
1。重複は2つ。
2。データの抜けは想定できない。
  1日に5分ほどのこともあれば(付け加えて言うと、1日のデータをファイルに保存している)
1日に1から3秒ほどの時もあります。(この時は、1日のデータをファイルに保存していない時)
2022/03/27(日) 22:42:10.78ID:UiNoGcwm
ヘタに抽象化せずに
隠さずに具体例を挙げて
FromとToを書けば無駄なやり取りをせずにすむ。
2022/03/27(日) 22:43:35.30ID:UiNoGcwm
>>951
そういうのが「ヘタな抽象化」です。
2022/03/27(日) 22:47:45.39ID:colv4Rae
まあ、落ち着け。時間データをクレンジングしたいんだとは思うけどもう少し元データについて整理しなされ。
955939
垢版 |
2022/03/27(日) 22:57:08.96ID:nv2FRWMk
>>953
>>954
ありがとうございます。

データが多いので、下手に抽象化してしまいましたが、
今手元のデータ例では、19:15:26のデータから秒列だけ上げると
下記のように19:15:36から秒列が重複することを始めます。
これが終了するのはデータによりけりで不明です。
26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 35, 37, 37, 39, 39, 41, 41, 43, 43, 45
2022/03/27(日) 22:58:55.54ID:UiNoGcwm
おれはもう脱落する。これは無理だ。
957132人目の素数さん
垢版 |
2022/03/28(月) 00:36:05.49ID:wfEbVN/P
これなら、修正箇所が少なくても多くてもパフォーマンスは変わらないはず。

comp.before <- function(x) {
# x の NA を直前の値で補完する.
valid <- !is.na(x) # NA でない(有効な)場所
v <- x[valid] # 有効な値
n <- diff(c(which(valid), length(x)+1)) # それを繰り返す回数
rep(v, n)
}

a <- c(1, 2, 2, 2, 9, 9, 11)

s <- seq(along=a) # 1から始まる等差数列
d <- ifelse(c(FALSE, diff(a) == 0), NA, s - a) # s から a の正しい部分を復元するための差
res <- s - comp.before(d) # 重複部分を修正するには、正しい部分の d を引き継げばよい
958132人目の素数さん
垢版 |
2022/03/28(月) 01:12:01.08ID:srY6abow
>>955
寝る前だったので、秒の部分だけでサンプルデータコードにしているので、そこは、
適宜、実際のデータに合わせて修正して。

library(tidyverse)

data.frame(
time = c(26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 35, 37, 37, 39, 39, 41, 41, 43, 43, 45)
) %>%
dplyr::mutate(diff = time - dplyr::lag(time, default = 0)) %>%
dplyr::mutate(new = dplyr::if_else(diff == 0, time + 1, time))

データ重複が2連続だけというのが前提です。3連続以上の場合は、最後の行の
処理を参考に追加してみてください。
959939
垢版 |
2022/03/28(月) 11:11:48.47ID:H+9Gp8uW
>>958
ありがとうございます。
なるほど、if_elseをそのように使うのですね。
条件の中で二つのベクトルを使ってダメだったので、諦めてました。
勉強になりました!!
960132人目の素数さん
垢版 |
2022/03/28(月) 11:56:48.44ID:srY6abow
>>959
lag()関数のdefault引数の指定があまりよくないので、
こちらの方が良いでしょう。処理手順を分かりやすく
するために処理を分割しています。
ただし、元データに欠損値(NA)がある場合は、意図した
結果を得られない場合がある点には注意してください。

data.frame(
time = c(26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 35, 37, 37, 39, 39, 41, 41, 43, 43, 45)
) %>%
dplyr::mutate(lag = dplyr::lag(time)) %>%
dplyr::mutate(diff = time - lag) %>%
dplyr::mutate(new = dplyr::case_when(diff == 0 ~ time + 1,
diff != 0 ~ time,
is.na(diff) ~ time))
961939
垢版 |
2022/03/28(月) 12:17:31.10ID:H+9Gp8uW
>>960
なるほど、さらにありがとうございます。
case_whenやis.na関数を使って、例外処理をなさっているのですね。
非常に勉強になりました。
確かに私があげていたlag関数でのdefault設定だと例外だというのが後で見てわかりづらいですね。
ありがとうございました!!
2022/03/28(月) 13:56:21.89ID:3UL2KL2b
分をまたいでずれたり稀に日付をまたいでずれたりはしないのかな
963939
垢版 |
2022/03/28(月) 14:04:18.16ID:6B8xjzPg
>>962
すいません、前提をいろいろ省略していて、、、
そこは条件文の重ね書きか、modをつかって解決しようとかんがえてました
964132人目の素数さん
垢版 |
2022/03/28(月) 17:02:57.35ID:srY6abow
日付も含んだ日時情報として記録されている、もしくは、正しい日付を補完できる
のであれば、POSIXタイムで処理すれば分またぎも日またぎも対応できるかと。

2022/2/28 23:59:58
2022/2/28 23:59:59
2022/2/28 23:59:59
2022/3/1 00:00:01
2022/3/1 00:00:02

こんな感じのデータでも3行目を「3/1 00:00:00」に修正できるかと。

データが飛んでたりするなら>>957さんの処理を応用すれば良いかと。
965939
垢版 |
2022/03/28(月) 19:37:40.90ID:H+9Gp8uW
>>964
そこは正直迷いました、タイムデータを作るのが先か、秒を修正するのが先か。
まずは、秒修正を先にしたのが、Rでのタイムデータの操作と数値データ操作が
どっちが早いかわからなかったので、まずはとっつきやすい数値データを修正して時間データにすることにしたのです。

>>957
礼を述べるのが遅れてすいません。
データが飛んでるところを修正するのに使用いたします。ありがとうございます!!
966132人目の素数さん
垢版 |
2022/03/31(木) 14:09:36.00ID:MFVXsplM
こちらでrstanarm のパッケージを使っている方はいらっしゃいますでしょうか?

rstanarm のstan_glm関数を使って簡単な回帰式の練習をしています。
シグマの事前分布として
prior_aux = exponential(0.0008) を設定したいのですが、
Error: '8e-04' is not a supported link for family 'exponential'.(以下略)
というエラーメッセージが出て止まってしまいます。

引数を(autoscale = TRUE) と変えてみても、
Error in exponential(autoscale = TRUE) :
unused argument (autoscale = TRUE)
が出て止まってしまいますので、どうも()内を認識してくれないようです。

もし対処の方法をご存じの方がおられましたら、ご教示いただければ
ありがたく存じます。
2022/03/31(木) 23:46:22.65ID:YJpZ/tmn
>>966
exponentialがrstanarmからじゃなくて他のパッケージから呼び出されてるとか?
試しにrstanarm::exponential(0.0008)で試してみては?
2022/04/01(金) 00:14:55.42ID:zUpPvDgR
ホントは一両日日跨ぎデータはスピノール的な情報として扱わないと
西から出たおひさまが東に沈む
地球の回転に逆らって高速飛行した時の不具合が出てくる。
2022/04/01(金) 00:16:31.25ID:zUpPvDgR
地球一周航海して暦が一日ズレるマゼラン以降の話でもある。

多分ガウスは勘付いてたっぽい。
970132人目の素数さん
垢版 |
2022/04/01(金) 05:42:17.81ID:kP8tAwPH
>>967

966です。早速ご教示いただきまして、どうもありがとうございました。
ご指摘の通りでした。おかげさまで大変勉強になりました。
重ねて厚く御礼申し上げます。
971132人目の素数さん
垢版 |
2022/04/06(水) 00:13:06.16ID:0iZ26VyL
POSIXctを使った文字列からの日時時刻表現への変換について教えてください。
あるcsvでうまくいったスクリプトが、別のスクリプトではうまくいってないのです。
いま、下記のようなtest1.csvがあり、
time
2022/4/4 19:19:10
2022/4/4 19:19:11
下記のスクリプトを通して読み込み、整形しました。

files<-dir(pattern="test1", "./")
tmp <- do.all(bind, lapply(files, function(x) read.csv(x, header=TRUE, stringsAsFactors=FALSE)))

newDate <-as.POSIXct(tmp[,1])

この時、
typeof[,1]は"character"となり、
newDate[1]は、"2022-04-04 19:19:10 JST"となります。

ところが、本番で別の(複数の)csvを読み込ませると、
typeof[,1]は"character"となるのですが、
newDate[1]は、"2022-04-04 JST"となり時刻が消えます。
最初にうまくいったtest1.csvの時刻データが
上記の別のcsvの時刻データをコピーして作ったにもかかわらずです。

何か考えられる原因、解決策はないでしょうか。
a <- c("2022-04-04 23:42:10")
2022/04/06(水) 00:34:29.13ID:b2LBb0Tv
0:00:00だと時刻が消える。
2つ以上 print してみたら?
2022/04/06(水) 00:37:00.36ID:b2LBb0Tv
あくまでも print の仕様であって、中身は問題ないはず。as.numeric してみると1秒ごとに1増えるのがわかるはず。
974971
垢版 |
2022/04/07(木) 14:27:54.56ID:IW6MEgzS
ご回答ありがとうございます。
それが、as.numericしても値がかわってないのです。なので困惑してます。
2022/04/07(木) 16:08:34.71ID:C76YhwBc
>>974
では、現象が再現する最小のコードとデータを出してください。
2022/04/07(木) 18:50:20.45ID:Z4m29Esd
>>971
きちんと時刻まで入ってないcsvか不正な時刻のcsvが紛れてる
977971
垢版 |
2022/04/07(木) 22:25:10.05ID:pOGo0jeY
>>976
それでした!!

newDate <-as.POSIXct(tmp[,1])

library(lubridate)
newDate<-ymd_hms(tmp[,1],tz="Japan")
で変換したところ、ほぼ全てのデータが時刻まで表示されるようになったのですが、
ごく数個、parse errorとなり、NAに変換されてました。
かくにんすると、元データが、"00:00:00"の時だけ、日付になってました。

助かりました。ありがとうございました。
978132人目の素数さん
垢版 |
2022/04/17(日) 16:45:16.53ID:2Fhpn5bu
(質問)
データフレーム内で、数値データに文字列'error'が混入しているとき、
どうやって値を、直前の値に変換したらよろしいでしょうか。


(例)
test <- c(1,2,1,4,'error',8,9,8,'error','error','error',1)
df <- data.frame(c)

となっているデータを、'error'を、その直前の値にしたいのです。
この場合、df$testを(1,2,1,4,4,8,9,8,8,8,8,1)に変換したい。

(**上記データは計測器がはくcsvファイルが元ですが、計測ミスでerrorがまぎれこむのです。)
2022/04/17(日) 17:54:41.52ID:EAjV4LS9
csvを読み込むときに、na.strings="error"を指定して、957のcomp.boforeで処理すればよい。
comp.beforeは適切な名前ではなく、自分はcomplete.by.prev.valueとしている。
2022/04/17(日) 21:01:31.48ID:XrFMJRy1
わざわざ自作関数作らなくてもfill()で一発じゃね?
981132人目の素数さん
垢版 |
2022/04/17(日) 21:14:48.98ID:PPC4aEZX
completeで思い出したけどtidyrパッケージを使うとこんな感じでできる。ネ申エクセルの
縦結合されたセルを処理するときなんかに便利。

NAしか処理してくれないので`error`がNAに置換されている前提のが前提です。

data.frame(
test = c(1,2,1,4,NA,8,9,8,NA,NA,NA,1)
) %>%
tidyr::fill(test)

fill()のリファレンス
https://tidyr.tidyverse.org/reference/fill.html
982978
垢版 |
2022/04/19(火) 22:25:34.21ID:z85CnNf5
みなさん、ご回答ありがとうございました。
>>980 >>981 さんが教えてくださったfill関数を使ってみたいと思いましたが、
すいません!、データフレーム内のerrorをNAに変換する方法も教えていただけないでしょうか!
2022/04/19(火) 22:39:14.60ID://tbogSZ
>>978
df$test <- as.numeric(df$test)
tidyr::fill(df, test)
984978
垢版 |
2022/04/19(火) 22:55:17.54ID:z85CnNf5
>>983 さん
ありがとうございました!
なるほど、簡単な手法でさくっとできるのですね、まだまだRになれないと、と痛感しました。みなさん、ありがとうございました!
2022/04/19(火) 23:01:31.24ID:Pb0ZefGO
>>982
979に書いてあるやん
986132人目の素数さん
垢版 |
2022/05/01(日) 17:44:32.12ID:Hvezzfn/
質問させてください

csvを読み込ませたいです。
ただし、このcsv、かき特徴があります。

1行目から62行目 いろいろな条件を記載。csvではなく、テキスト。
63行目から ヘッダー含めてcsvファイル形式。
末尾4行 また色々なことを記載。csvではなくテキスト。

最初の62行目までの読み込みをskipさせるのは
read.csv("test.csv", skip=62)
で対処できましたが、末尾4行をスキップさせるのはどうしたら良いでしょうか??
2022/05/01(日) 20:51:32.75ID:0HGOHjFC
読み込ませた後に最後の4行を削除させるのではダメ?あくまでも読み込み時にその4行をスキップしたい?
988132人目の素数さん
垢版 |
2022/05/01(日) 21:02:36.52ID:Hvezzfn/
ありがとうございます。
はい、読み込む時にやりたいです。
後々、フォルダにある数がわからないcsvファイルを一気に読み込んででーたふれーむを作りたいと考えてますので
2022/05/01(日) 21:10:29.65ID:0HGOHjFC
なるほど。ググったらこういう方法があるみたい。

https://stat.ethz.ch/pipermail/r-help/2008-January/152807.html
990132人目の素数さん
垢版 |
2022/05/01(日) 21:16:51.50ID:Hvezzfn/
ありがとうございます!!!
最高です!これ!ほんとに助かりました!!!
991132人目の素数さん
垢版 |
2022/05/02(月) 21:52:52.81ID:657pfLds
read.table()のnrowオプションって初めて知った。
前からあったっけ?
992132人目の素数さん
垢版 |
2022/05/03(火) 04:18:14.90ID:tPtc21F+
R-Tipsのページが見れなくなってますが誰か移転先を知りませんか?
http://cse.naro.affrc.go.jp/takezawa/r-tips/r.html
2022/06/02(木) 19:30:28.80ID:nW18Ocyl
超巨大なデータフレーム(2x10^6行 x 1x10^4列)を扱おうとしてるんだけど、gatherとかしようとするとめちゃくちゃ遅い。高速化のコツとか知ってる人いますか?
2022/06/02(木) 20:10:10.46ID:hi2gb4hw
gather()関数はSupersededだから、pivot_longer()関数を使ってみては?
2022/06/03(金) 09:36:31.44ID:nzQguSnk
>>994
ちょっと早くなりました。ありがとう。
996132人目の素数さん
垢版 |
2022/07/16(土) 23:32:17.16ID:a0oJxJr1
Rで文字列の置換を行いたいのですが、
g = gray, y = yellowとしたいのにg→grayellowとなってしまいます。
正しく置換を行うのはどうすればよいのでしょうか?
2022/07/17(日) 11:30:52.27ID:Bwyb6l2P
どういう変換しているか分からないけど、結果を見る限り、gをgra"y"に変換した後にyをyellowに変換してるんじゃ?
2022/07/17(日) 12:25:56.34ID:XCTRc04D
>>996
>>997の指摘通りで下のようなことをやっているなら、
> x <- factor(sample(c("g", "y"), 20, TRUE))
> x <- gsub("g", "grey", x)
> gsub("y", "yellow", x)
[1] "greyellow" "greyellow" "greyellow" "yellow" "greyellow" "greyellow"
[7] "greyellow" "yellow" "yellow" "greyellow" "yellow" "yellow"
[13] "greyellow" "greyellow" "greyellow" "greyellow" "yellow" "greyellow"
[19] "greyellow" "yellow"
こうするのではなくて、
> gsub("^y", "yellow", x)
[1] "grey" "grey" "grey" "yellow" "grey" "grey" "grey" "yellow"
[9] "yellow" "grey" "yellow" "yellow" "grey" "grey" "grey" "grey"
[17] "yellow" "grey" "grey" "yellow"
こんな風に正規表現で工夫すればよいのでは。
なお、最も簡単な解決策は、green,yerrowの置換順序をyellow,green逆とにすればよい。
2022/07/17(日) 14:28:56.56ID:XCTRc04D
間違えた。
s/green,yerrow/grey,yellow/
s/yellow,green/yellow,grey/
1000132人目の素数さん
垢版 |
2022/07/17(日) 15:05:31.68ID:gDs5lpUJ
>>997
>>998
出来ました、ありがとうございます!
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 1808日 19時間 42分 19秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。