创建函数来计算技术误差和误差的变异系数

时间:2013-12-29 11:43:47

标签: r

我有这个等式(可以通过this link访问):

enter image description here

我想用r创建两个函数。第一个是使用提供的第一个等式。

第二个功能是创建一个数学公式,其中第一个函数被替换。这是公式:

http://i43.tinypic.com/b6vq5j.jpg

这是我数据的负责人:(data_1)

  sex age seca1 chad1  DL alog1 dig1 scifirst1 crimetech1
1   F  20  1754  1750 175    95   95       432        429
2   F  19  1594  1596 158    56   55       420        417
3   F  20  1556  1558 156    74   72       435        437
4   F  18  1648  1640 167    67   65       431        434
5   F  19  1780  1780 178    99   67       433        431
6   F  19  1610  1620 165    56   54       423        425

执行此操作后,@ janos建议:

f1 <- function(x, y) {sqrt(sum((x - y) ^ 2) / 2 / length(x))}

现在,因为我需要在f1 vs data_1$alog1上运行data_1$dig1 ...这就是我所做的:

f1(data_1$alog1, data_1$dig1)

给出:4.3

接下来,我尝试实现第二个公式:

f2 <- function(x, y){(f1 / ((x + y) / 2)) * 100}

但是,当我在data_1$alog1 vs data_1$dig1上运行它来计算这些数据的错误变异系数时,我得到了:

> f2(data_1$alog1, data_1$dig1)
Error in f1/((x + y)/2) : non-numeric argument to binary operator

有人可以评论为创建第一个函数所执行的步骤,第二个函数以及我在“alog1 vs dig1”上运行函数的方式吗?

谢谢大家!!

1 个答案:

答案 0 :(得分:0)

如果我理解正确,请转到:

f1 <- function(x, y) {
  sqrt(sum((x - y) ^ 2) / 2 / length(x))
}
f1(1:3, 4:6)

这将输出:

[1] 2.12132

该函数假定xy都是相同长度的向量。

您可以对第二个功能执行相同操作,并进行一些简化:

f2 <- function(x, y) {
  200 * f1(x, y) / (x + y)
}
f2(1:3, 3:5)

要检查两个向量是否具有相同的长度,可以使用length方法。如果这个假设失败,停止执行也是有用的,如:

stopifnot(length(x) == length(y))