小编Zhe*_*lei的帖子

在R中,如何使函数内的变量可用于此函数内的较低级函数?(with,attach,environment)

更新2 @G.格洛腾迪克发布了两种方法.第二个是改变函数内的函数环境.这解决了我的编码重复过多的问题.在将脚本编写成包时,我不确定这是否是通过CRAN检查的好方法.当我得出一些结论时,我会再次更新.

更新

我试图传递很多输入参数变量,f2并且不想索引函数内的每个变量env$c, env$d, env$calls,这就是我尝试使用within f5和f6(修改过f2)的原因.但是,assign不能在with里面工作{},移动assign到外面with会做的工作,但在我的实际情况下,我有几个assigns在with表达式内,我不知道如何with轻松地将它们移出功能.

这是一个例子:

## In the <environment: R_GlobalEnv>
a <- 1
b <- 2
f1 <- function(){
    c <- 3
d <- 4
f2 <- function(P){
    assign("calls", calls+1, inherits=TRUE)
    print(calls)
    return(P+c+d)
 }
calls <- 0
v <- vector()
for(i in 1:10){
    v[i] <- f2(P=0)
    c <- c+1
    d …
Run Code Online (Sandbox Code Playgroud)

r function environment-variables with-statement assign

24
推荐指数
1
解决办法
2万
查看次数

在R中使用`nls.lm`时如何处理边界约束

我刚才问了这个问题.我不确定是否应将此作为答案或新问题发布.我没有答案但是我通过nls.lm在R中应用Levenberg-Marquardt算法"解决"了这个问题,当解决方案在边界时,我运行信任区域反射算法(TRR,在R中实现)来执行远离它.现在我有了新的问题.

根据我的经验,以这种方式,程序达到最佳状态,并且对起始值不那么敏感.但这只是一种实用的方法,可以解决我遇到的问题nls.lm以及R中的其他优化函数.我想知道为什么nls.lm这种方式对于边界约束的优化问题以及如何nls.lm在实践中使用时处理边界约束.

下面我举例说明使用的两个问题nls.lm.

  1. 它对起始值很敏感.
  2. 当某个参数到达边界时停止.

可重复的示例:焦点数据集D.

library(devtools)
install_github("KineticEval","zhenglei-gao")
library(KineticEval)
data(FOCUS2006D)
km <- mkinmod.full(parent=list(type="SFO",M0 = list(ini   = 0.1,fixed = 0,lower = 0.0,upper =Inf),to="m1"),m1=list(type="SFO"),data=FOCUS2006D)
system.time(Fit.TRR <- KinEval(km,evalMethod = 'NLLS',optimMethod = 'TRR'))
system.time(Fit.LM <- KinEval(km,evalMethod = 'NLLS',optimMethod = 'LM',ctr=kingui.control(runTRR=FALSE)))
compare_multi_kinmod(km,rbind(Fit.TRR$par,Fit.LM$par))
dev.print(jpeg,"LMvsTRR.jpeg",width=480)
Run Code Online (Sandbox Code Playgroud)

LM适合vs TRR适合

描述模型/系统的微分方程是:

"d_parent = - k_parent * parent"                                                 
"d_m1 = - k_m1 * m1 + k_parent * f_parent_to_m1 * parent" 
Run Code Online (Sandbox Code Playgroud)

在左边的图中是带有初始值的模型,中间是使用"TRR"的拟合模型(类似于Matlab lsqnonlin函数中的算法),右边是使用"LM"的拟合模型nls.lm.查看拟合参数(Fit.LM$par),您会发现一个拟合参数(f_parent_to_m1)位于边界处1.如果我将一个参数的起始值 …

r mathematical-optimization nls

24
推荐指数
1
解决办法
1430
查看次数

在 R 中,如何进行涉及求解微分方程的非线性最小二乘优化?

使用可重现的示例进行更新以说明我的问题

我最初的问题是“在 R 中实现信任区域反射优化算法”。但是,在生成可重现示例的过程中(感谢 @Ben 的建议),我意识到我的问题是在 Matlab 中,一个函数lsqnonlin很好(意味着不需要选择一个好的起始值,速度快)对于我拥有的大多数情况来说已经足够了,而在 R 中,没有这样一个一应俱全的功能。不同的优化算法在不同的情况下效果很好。不同的算法达到不同的解决方案。这背后的原因可能不是R中的优化算法不如Matlab中的信任区域反射算法,也可能与R如何处理自动微分有关。这个问题其实来自两年前的工作中断。当时,包optimx的作者之一 John C Nash 教授 已经建议 Matlab 进行了大量的自动微分工作,这可能是 Matlab lsqnonlin 比 R 中的优化函数/算法执行得更好的原因。我无法用我的知识弄清楚。

下面的示例显示了我遇到的一些问题(更多可重现的示例即将推出)。要运行示例,首先运行install_github("KineticEval","zhenglei-gao"). 您需要安装包mkin及其依赖项,并且可能还需要为不同的优化算法安装一堆其他包。

基本上我试图解决非线性最小二乘曲线拟合问题,如 Matlab 函数lsqnonlin的文档 ( http://www.mathworks.de/de/help/optim/ug/lsqnonlin.html ) 中所述。在我的例子中,曲线是由一组微分方程建模的。我将通过示例进行更多解释。我尝试过的优化算法包括:

  • Marq from nls.lm, the Levenburg-Marquardt
  • 端口来自 nlm.inb
  • L-BGFS-B 来自 optim
  • 来自 optimx
  • solnp包Rsolnp

我也尝试了其他一些,但没有在这里显示。

我的问题总结

  • R 中是否有可靠的函数/算法可以使用,例如lsqnonlin在 Matlab 中可以解决我的非线性最小二乘问题类型?(我找不到一个。)
  • 对于一个简单的情况,不同的优化达到不同的解决方案的原因是什么?
  • 什么lsqnonlin比 R 中的函数更胜一筹?信任区域反射算法或其他原因?
  • 有没有更好的方法来解决我的问题类型,以不同的方式表达?也许有一个非常简单的解决方案,但我只是不知道。

示例 1:一个简单的案例

我先给出R代码,稍后解释。 示例 1 的拟合图

ex1 <- mkinmod.full(
  Parent = …
Run Code Online (Sandbox Code Playgroud)

optimization r nonlinear-optimization

5
推荐指数
1
解决办法
3945
查看次数

从 Github 安装时,包中缺少整理字段中的文件

注意:我在这里交叉发布了这个问题:https : //github.com/hadley/devtools/issues/245

更新:@hadley 刚刚关闭了这个问题,因为他现在可以安装了。我刚刚测试过它,也install_github适用于 Windows。显然我需要等待一些时间让 Github 存档包含新提交的更改。对于遇到同样问题的人,@hadley 指出我在 R/ 中有 .R 和 .r 文件,并且DESCRIPTION collat​​e 中的所有文件都有.r 扩展名。

我正在编写一个 R 包并将其放在 Github 上。我可以在我自己的计算机上构建和加载。但是,运行后install_github("KineticEval",username="zhenglei-gao"),出现以下错误:

* installing *source* package 'KineticEval' ...
** R
Error in .install_package_code_files(".", instdir) : 
files in 'Collate' field missing from 'C:/Users/z.gao/AppData/Local/Temp/RtmpUzWWYn    /R.INSTALLd3c17515a0/KineticEval/R':
  kingraph.r
  kinplot.r
  FOCUS2006A.r
  FOCUS2006B.r
  FOCUS2006C.r
  FOCUS2006D.r
  modFit1.r
  IRLSkinfit.full.r
  mkinfit.full.r
ERROR: unable to collate and parse R files for package 'KineticEval'
* removing 'C:/Users/z.gao/R-dev/KineticEval'
Run Code Online (Sandbox Code Playgroud)

一个相关的问题在这里:从不正确的 .Rbuildignore 文件构建后,包中缺少整理字段中的文件

但我无法弄清楚错误是否也与我的 .Rbuildignore 文件有关。

r build package

5
推荐指数
1
解决办法
2527
查看次数

R函数搜索函数

更新:最初的问题是:是否有一个R函数使用在matlab中的"lsqnonlin"函数中实现的相同算法?但是,答案更多与在R中搜索函数有关.我认为答案通常对R用户非常有用.所以我编辑了标题,但在这里再次问了原始问题:在R中,如何进行非线性最小二乘优化,包括求解微分方程?

我做的非线性最小二乘优化和发现功能的MATLAB lsqnonlin进行比所有的优化算法我R中试图更好(包括函数算法optimx,nlm,nlminb,solnp在这个意义上,等等),这是更快,找到了"更正确的"解决方案

但是,我没有找到在Matlab中使用的R中的"信任区域反射"算法的实现.有人知道是否已经实施了吗?此外,"信任区域反射"算法是否更适合这种优化算法?

optimization matlab r nonlinear-optimization

3
推荐指数
1
解决办法
444
查看次数

为什么geom_boxplot会识别比基本boxplot更多的异常值?

这是一个可重复的例子,与基础箱图相比,最后一个治疗组还有一个异常值.

bug1 BUG2

```

dta <- structure(list(Treatment = c("A", "A", "A", "A", "A", "A", "A", 
"A", "A", "A", "A", "A", "A", "A", "A", "A", "B", "B", "B", "B", 
"B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "C", 
"C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", 
"C", "C", "D", "D", "D", "D", "D", "D", "D", "D", "D", "D", "D", 
"D", "D", "D", "D", "D", "A", "A", "A", "A", "A", "A", "A", "A", 
"A", "A", …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 boxplot

3
推荐指数
1
解决办法
1366
查看次数