IDがそれぞれの群を表していて、1~3の3群間の平均値の比較です。Rで分散分析を行う一般的な方法はaov{stats}で分散分析表を作り、Anova{car}で検定を行うやり方です。1Anova{car}を使わなくてもデフォルトのanova{stats}でもできるのですが、anova{stats}はtype1Anovaにしか対応していないため、type2またはtype3のAnovaをするためには必要になります。多重比較をする場合はいくつかやり方がありますが、有名なボンフェローニの検定を行うにはpairwise.t.test{stats}を使います。0群と1群、1群と2群の間に有意差があるようです。ボンフェローニの他にも、p.adjには様々な多重比較の補正方法を指定できます。t検定同様分散分析を線形モデルで表現することもできます。1結果は同じですね!Pyhthonではこちらの表現に近い記述になります。Pythonで分散分析をやってみます。NaNまずは、statsmodels.apiのOLSで線形モデルを作り、anova_lmメソッドを使って検定を行うことができます。typeには1,2,3とあるのですが、その違いは上記参考書をご覧ください。結果はRと同じですね。Pythonでの多重比較は、Turkeyの多重比較法になります。---------------------------------------------結果はRと同じように0群と1群、1群と2群の間に有意差があるようです。平均値の比較:二元配置分散分析お次は二元配置分散分析です。やり方は簡単で、先ほどの一元配置分散分析の式に交互作用項を加えるだけです。1ID*ID2はID+ID2+ID:ID2を表し、交互作用項を含めたモデルになります。Pythonでも記述方法はほとんど同じです。NaNこちらもRと結果は同じですね!分散分析まとめ単に分散分析をするだけであれば、RもPythonもそれほど違いはなさそうです。どちらも先ほどの線形モデルによる分散分析と記述法はほとんど同じです。sm.OLS(y_t,X_t,data=data).fit()と書くことができます。すると何が良いかというと説明変数が膨大にあるときにはRではy~x1+x2+.....としなければいけないところをPythonでは一発で書くことができます。まとめ単回帰・重回帰はモデルが単純なだけにRもPythonも使いやすさに違いは感じませんでした。単純な解析のみであれば、どちらを使っても良いでしょう。補足:Rでたくさんの説明変数がある場合の小技Rで重回帰分析を行う際にはy~x1+x2+...と書く必要があります。説明変数の数が少なければいいですが、膨大になったときには大変です。これを簡単に書く方法として私がよく使うのは、列名を+で繋げるという小技です。実際にやってみましょう。"x1+x2+x3"colnames()で列名を抜き出し、str_subset()で目的の説明変数をぬきだす、そして最後はstr_c()を使って+で繋げるというものです。後は出力結果をコピペして完了です。感はありますが、結構便利です笑。上記に関してコメントを頂きました。2019年7月7日やってみます。最後はロジスティック回帰です。これは一般化線形モデルの確率分布を変化させることで実装できます。0.574Rではglm{stats}を使って、引数familyにbinomialを指定する、PythonではOLSではなく、GLMを使ってこちらもfamilyにBinomial指定することでロジスティック回帰分析を行うことができます。どちらも違いはありませんね。RでもPythonでも、familyやリンク関数を指定して、ポワソン回帰などその他のモデルを作ることもできます。モデルであれば、R、Python共に同じような記述量と出力結果となるようです。確率分布やリンク関数の設定などもPythonでできることは少し驚きでした....で、結局どっち?実は私は統計なら断然Rが優勢と思っていたのですが、Pythonでも基本的な検定は問題なく行えるということを実感しました。研究のような統計解析の細かなプロセスが求められる場合はやはりRを使うべきだと思いますが、そうでない場合はPythonでもほとんど問題なく統計解析ができそうです。結局どっちが良いかというと、ズバリ時と場合による!が正直なところです。統計解析に関するレファレンスの多さや、少し高度な統計モデルとなるとやはりRが優勢と言ったところでしょうか。Rではデフォルトで読み込まれている{stats}でほとんどのことができてしまいますが、Pythonでは色々な部品を読み込む必要があります。そもそもPythonは解析そのものよりも、何かに組み込んで使うプログラミング言語であるというルーツの違いもありますね。RとPythonのどちらを使うべきかという議論よりも、目的によってどちらが合っているのか?というところから考えた方が良さそうです^^;それを考える上で、この記事がお役に立てれば本望です^^※本記事は筆者が個人的に学んだことをまとめた記事なります。所属する組織の意見・見解とは無関係です。数学の記法や詳細な理論、用語等で誤りがあった際はご指摘頂けると幸いです。参考Pythonで統計を行う記述法だけでなく、シミュレーションを通して、統計学の基本事項から学べると言ったとても豪華な内容です。はてなブログPro大学院で疫学統計を学んでいます。初心者目線から統計学、機械学習など学んだことをまとめていきます。medi_data0826スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。