0

私は dplyr とほうきの組み合わせを使用しており、データ グループ内の条件に応じて回帰モデルを当てはめようとしています。最後に、グループごとに回帰係数を抽出したいと思います。

これまでのところ、すべてのグループで同じフィッティング結果が得られています (各グループは文字で区切られていますa:f)。それが主な問題です。

library(dplyr)
library(minpack.lm)
library(broom)

direc <- rep(rep(c("North","South"),each=20),times=6)
V <- rep(c(seq(2,40,length.out=20),seq(-2,-40,length.out=20)),times=1)
DQ0 = c(replicate(2, sort(runif(20,0.001,1))))
DQ1 = c(replicate(2, sort(runif(20,0.001,1))))
DQ2 = c(replicate(2, sort(runif(20,0.001,1))))
DQ3 = c(replicate(2, sort(runif(20,0.001,1))))
No  =  c(replicate(1,rep(letters[1:6],each=40)))

df <-   data.frame(direc,V,DQ0,DQ1,DQ2,DQ3,No)

適合条件は次のように記述できます。 direc=Northおよび if V<J1do は方程式に適合し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=nlsLM(DQ0~ifelse(df$direc=="North"&V<J1, exp((-t_pw)/f0*exp(-del1*(1-V/J1)^2)),1)*ifelse(df$direc=="South"&V>J2, exp((-t_pw)/f0*exp(-del2*(1-V/J2)^2)),1)
            ,data=df,start=c(del1=1,J1=15,del2=1,J2=-15),trace=T) 

nls_fit

Nonlinear regression model
  model: DQ0 ~ ifelse(df$direc == "North" & V < J1, exp((-t_pw)/f0 * exp(-del1 *     (1 - V/J1)^2)), 1) * ifelse(df$direc == "South" & V > J2,     exp((-t_pw)/f0 * exp(-del2 * (1 - V/J2)^2)), 1)
   data: df
   del1      J1    del2      J2 
  1.133  23.541   1.079 -20.528 
 residual sum-of-squares: 16.93

Number of iterations to convergence: 4 
Achieved convergence tolerance: 1.49e-08

一方、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<- df%>%
  group_by(No)%>%
  do(data.frame(model=tidy()))>%
  ungroup

df_new

Source: local data frame [24 x 6]

   No model.term model.estimate model.std.error model.statistic model.p.value
1   a       del1       1.132546        9024.255    1.255002e-04     0.9999000
2   a         J1      23.540764      984311.373    2.391597e-05     0.9999809
3   a       del2       1.079182       27177.895    3.970809e-05     0.9999684
4   a         J2     -20.527520     2362268.839   -8.689748e-06     0.9999931
5   b       del1       1.132546        9024.255    1.255002e-04     0.9999000
6   b         J1      23.540764      984311.373    2.391597e-05     0.9999809
7   b       del2       1.079182       27177.895    3.970809e-05     0.9999684
8   b         J2     -20.527520     2362268.839   -8.689748e-06     0.9999931
9   c       del1       1.132546        9024.255    1.255002e-04     0.9999000
10  c         J1      23.540764      984311.373    2.391597e-05     0.9999809
.. ..        ...            ...             ...             ...           ...
4

0 に答える 0