【发布时间】:2015-08-23 11:51:57
【问题描述】:
我需要有关如何按列进行多重回归的指南。 我有一个数据框,我想在其中分别获取每列拟合系数。到目前为止,我只能为一列获得这些结果。
到目前为止我尝试了什么
-
也许将结果分配给一个新变量
(model.out1
可能有效,但我不想写几个拟合方程,每次都说大约 15 和列名。这不是优雅的解决方案。
2. using `apply` function
aa <- apply(df[4:8],2,fit_function)
fit_function <- function(x){nlsLM(x~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=5,J1=15,del2=1,J2=-5),trace=T)}
给出一个我们通常知道的错误
nlsModel(formula, mf, start, wts) 中的错误:奇异梯度 初始参数估计矩阵
也许将这些列分开并拟合它们中的每一列并结合拟合系数可能会起作用。但我不知道该怎么做。
这里是您检查有效性的可重复数据
df
direc <- rep(rep(c("North","South"),each=10),times=6)
V <- rep(c(seq(2,40,length.out=10),seq(-2,-40,length.out=10)),times=1)
DQ0 = c(replicate(2, sort(runif(10,0.001,1))))
DQ1 = c(replicate(2, sort(runif(10,0.001,1))))
DQ2 = c(replicate(2, sort(runif(10,0.001,1))))
DQ3 = c(replicate(2, sort(runif(10,0.001,1))))
DQ4 = c(replicate(2, sort(runif(10,0.001,1))))
group = c(replicate(1,rep(letters[1:6],each=20)))
df <- data.frame(group,direc,V,DQ0,DQ1,DQ2,DQ3,DQ4)
library(minpack.pl)
因为我想对所有列 DQ0、DQ1、DQ2、DQ3、DQ4 进行拟合,所以我写下了这个函数。
拟合函数
f0<-1e-9
t_pw<-3e-8
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=5,J1=15,del2=1,J2=-5),trace=T)
并在每个组内获得拟合结果。
df_new<- df%>%
group_by(group)%>%
do(data.frame(model=tidy(nls_fit)))%>%
select_("delta"="model.term","value"= "model.estimate")
如何获得 DQ1、DQ2、DQ3 和 DQ4 的拟合结果作为表格。也许这样的东西更可取
group delta value_DQ0 value_DQ1 value_DQ2 value_DQ3 value_DQ4
1 a del1 4.962564 * * * *
2 a J1 14.666667 * * * *
3 a del2 3.496986 * * * *
4 a J2 -14.468551
5 b del1 4.962564
6 b J1 14.666667
7 b del2 3.496986
8 b J2 -14.468551
9 c del1 4.962564
10 c J1 14.666667
.. ... ... ...
编辑 我找到了这个Help with lm and multiple linear regression 也许我可以这样做
dat <- data.frame(x=1:10,y=rnorm(10),z=10:1)
lm(x~., data=dat)
但是当我像上面那样用 DQ0 替换 if else 部分时,我得到了这个错误
可能我错过了某些部分。关于this_你能给出一个明确的答案吗?任何帮助将不胜感激。
【问题讨论】: