【问题标题】:What does this short R script do?这个简短的 R 脚本有什么作用?
【发布时间】:2014-07-31 18:59:47
【问题描述】:

我知道 python 和 C++,但对 R 的经验很少。我应该弄清楚我的老同事的脚本是做什么的 - 他已经好几年没来了,但我有他的文件。他有大约 10 个 python 文件,这些文件将数据传递到一个临时文件,然后传递到下一个 python 脚本,我可以跟踪它,但他有一个我不理解的 R 脚本,因为我不知道 R。

R 脚本的输入是 temp4.txt:

1.414442 0.0043
1.526109 0.0042
1.600553 0.0046
1.637775 0.0045
...etc

其中第 1 列是生长曲线的 x 轴(时间单位),第 2 列是生长水平(单位 OD600,它是细胞密度的度量)。

R 脚本只有 4 行:

inp1 <- scan('/temp4.txt', list(0,0))
decay <- data.frame(t = inp1[[1]], amp = inp1[[2]])
form <- nls(amp ~ const*(exp(fact*t)), data=decay, start = list(const = 0.01, fact = 0.5))
summary(form)

R 脚本的输出:

Parameters:
       Estimate Std. Error t value Pr(>|t|)    
const 2.293e-03  9.658e-05   23.74   <2e-16 ***
fact  7.106e-01  8.757e-03   81.14   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

Residual standard error: 0.002776 on 104 degrees of freedom

Correlation of Parameter Estimates:
       const 
fact -0.9905

“事实”数字是他在下一个 python 脚本中提取的值,作为继续进行分析的值。通常它是一个正值,例如“6.649e-01 6.784e-01 6.936e-01 6.578e-01 6.949e-01 6.546e-01 0.6623768 0.6710339 6.952e-01 6.711e-01 6.721e-01 6.520e-01”但因为临时文件被覆盖每次我只有一个负值 -0.9905 的版本,他在下一个 python 脚本中丢弃负值。

我需要知道他到底在做什么来重新创建它...我知道

感谢任何可以为我解释 R 的人。

【问题讨论】:

标签: r nls


【解决方案1】:

GSee 在 cmets 中的链接很好地描述了 NLS 功能,但如果您不习惯 R 文档,这里是 nls 的简要说明。

NLS 函数是非线性最小二乘建模函数。它类似于线性回归,只是认为至少有一个参数不是线性的(正弦函数、余弦函数、x^2 函数等)。非线性参数有时可以转换为线性参数(即通过对数转换等),但并非总是如此。

第一个选项是正在测试的模型:amp ~ const*(exp(fact*t)),表示我们希望将 amp 建模为因变量,并希望 e^(fact*t)成为我们的独立(非线性)变量。

下一个选项只是告诉我们要使用哪个数据对象(数据 = 衰减)。

start 参数告诉我们构建模型的起始值,在本例中为 const = .01 和 fact = .5。

所以第一个命令将数据读入对象inp1。 第二个创建一个具有类 data.frame 的对象(这是 R 中大多数分析所做的)。这基本上是一个有两列的表。在这种情况下,列被赋予名称(t 和 amp)。 第三个命令创建一个具有类 nls 的对象。该对象基本上包含 nls 命令生成的信息。 第四个命令打印出 nls 类对象的摘要 - 基本上是所有相关的分析细节。

输出如下:

首先是估计和标准。非线性模型中两个参数 const 和 fact 的偏差。 t 值和 P 列显示参数是否在统计上显着不同于 0 的统计计算。

意义。代码是显示在参数估计右侧的星星的图例 - p 值是多少。

残留标准误差是标准差多少的指标。模型没有解释错误。

最后一个我不确定,因为我有一段时间没有使用 NLS,但我认为它是正确的。 估计的相关性显示参数的相关性有多强。在这种情况下,-.9905 值是一个非常强的负相关 - 随着 fact 上升,const 下降并且非常可预测。

【讨论】:

    【解决方案2】:

    第一行将数据读入R

    第二行将数据重组为数据框(R中常用的表结构,将作为数据传递给第3行的nls)。

    这看起来像旧代码,大多数现代编码人员会用一次调用 read.table 来替换第 1 行和第 2 行。

    第 3 行将非线性最小二乘方程拟合到先前读取的数据,第 4 行打印拟合摘要,包括下一个要读取的 Python 脚本的参数估计值。

    正在拟合的非线性模型是指数增长曲线,而事实参数是衡量增长率的指标。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-15
      • 1970-01-01
      • 2012-03-09
      • 1970-01-01
      相关资源
      最近更新 更多