問題タブ [broom]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - dplyr+broom による条件付き nls フィッティング
私は dplyr とほうきの組み合わせを使用しており、データ グループ内の条件に応じて回帰モデルを当てはめようとしています。最後に、グループごとに回帰係数を抽出したいと思います。
これまでのところ、すべてのグループで同じフィッティング結果が得られています (各グループは文字で区切られていますa:f
)。それが主な問題です。
適合条件は次のように記述できます。
direc=North
および if V<J1
do は方程式に適合しexp((-t_pw)/f0*exp(-del1*(1-V/J1)^2))
ます else ifdirec=South
およびV>J2
do は同じ方程式に適合します。どちらの場合も、V<J1
&V>J2
が満たされない場合は、それぞれの場合に戻り1
ます。
更新このリンクの提案により、条件付きnls
が可能であることが
わかりましたconditional-formula-for-nls 。
nls_fit
一方、DQ1、DQ2、DQ3 などの他の列に合わせようとすると、
nls_fit=nlsLM(df[,3:6]~ifelse(.....
nls.lm(par = start, fn = FCT, jac = jac, control = control, lower = lower, のエラー: fn 関数の評価は意味のない値を返します!
問題は複数列のフィッティングに行き着きました。複数の列に合わせるにはどうすればよいDQ0:DQ3
ですか? データフレームから多くの変数を含む式を簡潔に書く方法を確認しましたか? 私のデータフレームで使用するソリューションが見つかりませんでした。
さらにDQ0
、出力からわかるように、グループ内の列のフィッティングを行うと、すべてのグループに対して同じ Del および J パラメーターが生成されますa:f
df_new
r - 単一の lm オブジェクトを含む dplyr ワークフローで `broom:::glance` を使用すると失敗する
次のように使用するbroom:::glance
と:
私は得る
ただし、次を追加するとgroup_by
:
期待される結果が得られます:
ここで何か不足していますか、それとも dplyr/broom のエラーですか?
r - R: 自分のデータセットのさまざまなサブセットに Anova を適用し、出力を収集する機能
一般的なタスクは、データセットのさまざまなサブセットに対して特定の統計分析 (anova、glm、または混合モデルなど) を実行し、出力テーブルを単一のデータフレーム内の要約係数および p 値と組み合わせる必要があることです。モデルのタイプ(aov(...)
またはlm(...)
またはまたはglm(...)
などglmer(...)
)と、グループ化変数( s) 自分のデータセット内。
データフレーム内のさまざまなレベルの因子「複製」に対して特定の分析を実行したいデータフレームがあるとしますdata
。
を使用してbroom+dplyr
、たとえば、このデータフレームの各サブセットに対して anova を実行し (レプリケートによるグループ化)、次を使用して用語「種」の p 値を保持できます。
(ここでは例として、10 個の同一のデータ サブセットを使用しました)
私はAnovabygroup
、データフレーム、グループ化変数 (ここreplicate
では、いくつかのグループ化変数の組み合わせである可能性もあります)、実行するモデルのタイプ (たとえば、このcase'aov(Sepal.Length ~ Species, data = .)'
ですが、lm、glm、lme、lmer、glmer モデル、または によって処理されるその他のモデルでもかまいません。Anova()
) および係数と p 値を返す因子 (おそらくすべてを返すオプション "all" を使用) を引数として指定します (指定された他のオプションは、Anova の呼び出しに渡すことができます)。上記で使用したものと同様のコードを使用して、これらの引数を取るために一般化されたコードを使用して、これを行う方法を知っている人はいますか? 私がどうしたらよいか分からない主なことは、モデル (例えば、この場合は `'aov(Sepal.Length ~ Species, data = .)') を引数として渡し、それを評価させることです。それとも、すでにいくつかのパッケージに存在している可能性がありますか? 私はいつもこのタスクを何度も何度もコーディングしているので、これは役立つと思います...
PS現在のCRANバージョンはAnova出力をうまく処理していないようなので、ほうきパッケージのgithubバージョンを使用しました
r - kmeans のクラスター/中心を元のデータ フレームに戻すラングリング
ここにいくつかのデータがあります。
ここで、各グループ内で k 平均を実行します。
「kobjs」は次のようになります。
クラスターの割り当て (および、理想的には中心点) を取得して、元のデータ フレームに追加したいと思います。これを行うにはほうきを使用できると思いました:
しかし、それはどういうわけか、200X4 ではなく 400X4 マトリックスを生成します。どうしてこうなりました?必要な動作を取得するにはどうすればよいですか?
EDIT1: aosmith からの洞察により、私が望んでいた方法で解決しました。おそらくよりエレガントにする方法があります (left_join は必要ですか?) が、それは私が望む動作です:
r - dplyr ワークフローで do() を使用した broom::tidy() が summaryDefault オブジェクトで失敗する
summary.default()
data.frame の変数に対して(基本パッケージで) 数値集計を実行し、broom パッケージで tidy() を使用したいのですが、これはどういうわけか失敗します。
この例では、data.frame を作成します。
plyr
(1.8.3)、dplyr
(0.4.2)、broom
(0.3.7) を (この順序で)ロードします。参考までに、64 ビット Windows で R 3.2.2 を実行していますが、Unix の 3.2.1 でも同様の問題が発生します。
これにより、望ましい出力が得られると思います。
しかし、エラーメッセージが表示されます:
以下に示すように、plyr
アプローチを使用して望ましいものを得ることができます。broom::tidy
しかし、明らかに、上記のようtidy()
に関数内で (summaryDefault)を使用することに関する問題の根本に到達するために、この質問をしています。do()
r - dplyr::do / purrr::map の比較、どのような利点がありますか?
@drobのおかげで、グループ化されたデータbroom
を組み合わせdplyr::group_by
てアクションを実行するのに慣れていました。dplyr::do
たとえば、ギア システムに応じて線形モデルを車に当てはめると、次のようになります。
@hadley からの最近の投稿を読んだ後、と を使用しtidyr v0.4.1
て同じことが達成できることを発見しましたnest()
purrr::map()
前と同じ例:
順序は変更されましたが、結果は同じです。
どちらも大部分が同じユースケースに対応していることを考えると、両方のアプローチが今後サポートされるかどうか疑問に思っています. メソッドは正規の方法になりtidyverse
ますか? 一方が標準的と見なされない場合、両方のアプローチを引き続きサポートする必要があるユース ケースは何ですか?
私の短い経験から:
- 行う
- プログレスバー、多くのモデルが計算されている場合に便利です。
- @Axeman コメント: を使用して並列化できます
multidplyr
broom::glance
オブジェクトは小さくなりますが、 fxが必要な場合は再実行する必要があります。
- 地図
- データ、サブセット、およびモデルが 1 つに保持されます
tbl_df
unnest()
少し時間がかかる場合でも、モデルの別のコンポーネントを簡単に抽出できます。
- データ、サブセット、およびモデルが 1 つに保持されます
洞察やコメントがあれば、喜んでフィードバックをお寄せください。