StatsBeginner: 初学者の統計学習ノート

統計学およびR、Pythonでのプログラミングの勉強の過程をメモっていくノート。たまにMacの話題。

ChatGPTにプログラミングを教わるとは、こういう感じです。

ChatGPTとのやり取りで一番楽しいのは、やっぱり、プログラミングを教えてもらうことですね。 今回は、とあるアニメーションの作り方を教えてもらいました。下にそのやりとりを掲載しておきますが、コードの中身は読み飛ばして、文章でのやり取りの部分と出…

TransformerやAttentionの分かりにくい点についてのメモ

ChatGPTの「GPT」はGenerative Pretrained Transformerの略であり、TransformerというのはGoogleが2017年に発表した『Attention is all you need』という論文で提案されたディープラーニングの画期的なアーキテクチャで、その論文のタイトル通り「Attention…

Rで距離行列を求める高速な関数

Rでクラスター分析などをするときに距離行列を求める必要があるが、次元が大きくなると(万単位とか)けっこう時間がかかる。 で、 標準で入ってる{stats}のdist() {Rfast}のDist() {wordspace}のmatrix.dist() を比較してみたところ、3つ目のやつが一番速く…

configure: error: gsl-config not found, is GSL installed? ERROR: configuration failed for package ‘RcppGSL’

こういう環境構築系の作業をいちいち書いてたらキリがないのだが、ググってすぐに解決しなかったものについては、後で助かる人がいるかもと思ってなるべく書いています。 以下はAWS(Amazon Linux)上のRでの話です。 {Rfast}というパッケージを入れる際に{R…

Rの正規表現でURLを抽出

正規表現でURLを表現する方法は、ググるといろんな人がエントリにしているが、Rでやる場合は以下のようにする。 '以外のエスケープの\を重ねることや、perlをTRUEにするのを忘れないように。 grep('https?://[\\w!\\?/\\+\\-_~=;\\.,\\*&@#\\$%\\(\\)\'\\[\\…

文章を「カギ括弧に挟まれている場合以外は句点で区切る」のってどうすればいいの?

日本語のパラグラフをセンテンス単位に分割するのって、もちろんいろんなパターンをプログラムで書いていけばできると思うのだが、シンプルなコードでやろうとすると、どうなるんだろうか。 普通に考えると、 「。」で区切る 「?」や「!」でも区切る(これ…

AWSのR4.0.2に{devtools'}が入らない

AWSに設置したRStudio Serverで{devtools}のインストールに失敗し、以下のように依存関係のエラーが出る。(途中の行を省略している) > ERROR: configuration failed for package ‘textshaping’ > ERROR: dependency ‘textshaping’ is not available for pa…

Rで{snow}と{parallel}の並列化を少し試してみた

Rで計算を高速化したいとき、 なるべくベクトル計算にしてforで頭からみていくような処理を避ける 自作関数をコンパイルする 並列化(マルチコアの利用) などの手法があり、ベクトル化とコンパイルに関してはケースによって何が有効かというのは難しい。 た…

MeCabとRMeCabのインストール、NEologd辞書への変更、ユーザ辞書登録をやり直す(Mac OS)

形態素解析エンジンのMeCab(およびRMeCab)をEC2上の新しい環境に入れる必要が生じたので、 MeCabのインストール IPA辞書のインストール RMeCabのインストール NEologd辞書のインストールとシステム辞書の変更 ユーザ辞書の作成、コンパイル、登録 の手順を…

Rのplm::pgmm関数でError "system is computationally singular"が出まくった

{plm}パッケージのpgmmという関数でパネルデータの分析をしようとしたら、 system is computationally singular のエラーで推定できない。 plmパッケージに例題として入っているデータとモデルではふつうに推定できたので、たぶん分析しようとしているモデル…

Rで「自作関数に引数として与えたグローバル変数」を上書きする方法ってある?

Rで、自分で定義した関数内の処理のようなローカルなスコープから、グローバル変数を定義したり変更したりする操作をしたい場合は、「 > obj1 <- c("元々1", "元々2") > > myfun <- function(x){ + obj1 <<- c(obj1, x) + } > > myfun('追加') > > print(obj…

古典を読もうとする学生に「教科書から読め」と諭す必要はないと思う

昨日、ツイッターで「大学生のための100人100冊」という、いわゆる「必読書リスト」を紹介するツイートが流れてきました。20世紀の著作を集めたものなので、「古典」というほど古くないものも多いですが、でもまあ「古典」に近いものが多いとは言えるでしょ…

MacのKarabinerが削除できずターミナルでも"su: Sorry"が出るとき

MacでUSキーボードを使っている人が、漢字かなの変換をしやすくするのに、Karabiner-Elementsというソフトがよく使われている。で、そのソフトのアップデートが上手くいかず、アンインストールしてやりなおそうとして、うまく行かなかったという報告がネット…

「シャブ漬け」という比喩は世間でそれなりに使われている

吉野家の役員のくだんの発言については、特に非難したいとも擁護したいとも思わず、「生娘をシャブ漬けにしてる暇があったらうちの職場の近くに店をつくってくれ」ぐらいの感想なのだが(飲食店がほとんどないので)、「シャブ漬け」という喩えはそれなりに…

ステップワイズ法で特定の変数を残したい場合

私が住んでいる町では、「ステップワイズ法で、ただし特定の変数は残るようにした上で、最良のモデルを選択してほしい」と言われ、手法の妥当性を説明するのが難しいので気が進まないものの、やらざるを得ないことがあります。 ここにやり方が載っていて、 …

Rでパワーアナリシス(検出力・検定力分析)を行う

たとえば重回帰分析とかを行って、効果が「有意ではない」ということを積極的に主張に取り入れたいときは、検出力が十分であったかを確認しなければならない。というのも、わざと出来の悪いモデルを使ったり、サンプルサイズを少なくしたりすれば、有意でな…

Rで必要なオブジェクト以外をワークスペースから削除する時

単なるメモですが、 rm(list=subset(ls(), !(ls() %in% c('hoge', 'hage')))) rm(list=ls()[-which(ls() %in% c('hoge', 'hage'))]) 'hoge', 'hage'のところに、消したくないオブジェクト名を書いておく。 後者のほうが2文字短い。

Rでファイルをダウンロードするかどうか確認させる関数

ネット上にあるcsvファイルをダウンロードしてきて使う場合、read.table()にurlを与えて直接データフレームをつくってしまう場合もあれば、ファイルとしてダウンロードして置いておきたい場合もあります(実行のたびにダウンロードしたくない等の理由で)。 …

Rのsource()関数で呼び出すスクリプトに引数を渡すとき

学生に説明する必要が発生したためエントリ起こしておく。 コマンドライン引数みたいな感じで、source()で呼び出されるスクリプトに呼ぶ側のスクリプトから引数を渡すときは、以下のようにやればよい。 source1.Rからsource3.Rまでのスクリプトを準備してあ…

researchmapのcsv

researchmapのcsv取り込みにクセがありすぎる。 アクションがinsertなのに"invalid_delete_reason,,削除理由が無効です。"というエラーが出るのはバグ? ちなみに削除理由にmineとか設定すると通る。意味がわからん。 そもそも、csvなのにヘッダーの上に"pub…

Stanでよく忘れる、よく間違える書き方

文末の;の忘れ。 ファイルの最後は空の行に forループの範囲の1:NのところのNを、intじゃなくてrealで宣言してしまっている。 transformed parametersのブロックでforループを複数かくとコンパイルエラーになる理由がわからないときある。1つのループにまと…

相関係数の差の検定と、回帰係数の差の検定を、Rでやる

たまに、2つの相関係数が有意に異なるのかや、1つの重回帰モデル中の2つの回帰係数が有意に異なるかを示せると、主張が通りやすいという場面がある。 まぁ、あまり必要になることはないのだが、相関係数の差の検定や回帰係数の差の検定について、日本語で…

「不偏分散の平方根」は不偏標準偏差ではない件(メモ)

不偏分散の平方根を取っても不偏標準偏差にはならないという話があり、私は不真面目な研究者なのでそもそもそんなこと考えたこともなかったですが、知り合いが「数学的な導出はみれば分かるが、“平方根を取っては駄目な理由”が直観的に理解できなくて気持ち…

Rのループ中に進捗率を表示するプログレスバーを作る

Rのループで使えるプログレスバーは、いくつかのパッケージで提供されているみたいなのですが、自分で書くのも簡単なので、単純な関数でつくってみた。 進捗が知りたいのは時間のかかる処理をするときであり、時間がかかるなら無駄な計算は省きたいので、ル…

for、apply、ベクトル演算の処理速度の比較

ツイッターのライムラインで、forループをapplyに置き換えた場合の高速化の話が流れていて(こちら)、気になって検索したところ、applyよりむしろwithを使えと言っている人がいた。 r - apply() is slow - how to make it faster or what are my alternativ…

ggplot2で2軸グラフを描く時の軸スケーリングの作業

ggplot2で2軸のグラフを描くときは、先日のエントリでも書いたように、ggplot2自身は左軸(第1軸)と右軸(第2軸)を別々の情報として持つことはできないので、左軸と右軸の尺度の違いを自分で設定して変換しなければならない。 あとで使いまわすので、この…

折れ線グラフの端っこにラベルを付けるやつ(ggplot2)

最近になって遅ればせながらggplot2を頻繁に使うようになってきました。 で、↑こういうふうに、折れ線の端っこにラベルを置きたいと思いました。白黒の記事原稿で4本もの折れ線を重ねるのは見づらいのでそもそもやめたほうがいいですが、人生いろいろあるわ…

Rで棒グラフと折れ線グラフを重ねた2軸グラフを描く

さっき、Rで棒グラフと折れ線グラフを重ねたものを作ろうとして、けっこう手間取りました。最終的に描いたのは↓のようなものなのですが。 「2軸グラフの書き方」「種類の異なるグラフの重ね方」についていろいろ調べたところ、barplot()とplot()を組み合わせ…

Macでスクリーンショットの保存先をショートカットキーで振り分ける

ツイッターで尋ねられて、自分でも気になったので設定してみました。 Macでスクリーンショットを撮るときに、ショートカットキーを工夫して、保存先を振り分ける設定です。 Macのスクリーンショットは、じつはいろいろオプションがあって、ウィンドウ単位で…

Pythonでよく忘れる、よく間違える書き方

Pandasのデータフレームは、=でコピーしようとすると、コピーじゃなくて参照渡しになるので、コピーしたつもりのdfを処理すると元のdfも処理されてしまう。df2 = df1.copy()とするのを忘れないように。 Pandasで要素がNaNかどうかを判定させようとする時、要…