R中的条件公式

时间:2016-04-12 12:45:51

标签: r math

如果我有一个条件公式:

时间< theta:y = x ^ 2

时间=> theta:y = x

如何在R中使用as.formula函数来构建类似的东西? (我也需要在它上面使用nls函数)。

我试过了:

Data2 <-as.formula(y ~ (x<=theta)*x^2 + (x>theta)*x)

但它没有用。

2 个答案:

答案 0 :(得分:5)

我认为您不能使用nls来拟合不可区分的函数。

您可以使用optimize作为此具体示例:

#some example data
set.seed(42)
x <- runif(100, 0, 100)
y <- x
y[x <= 50] <- x[x <= 50]^2
y <- y + rnorm(100, sd = 0.01)     

fun <- function(x, theta) {
  #logical values are coerced to 0/1 automatically in calculations
  x * (x > theta) + x^2 * (x <= theta)
}    

SSE <- function(theta) {
  sum((y - fun(x, theta))^2) 
}

print(fit <- optimize(SSE, c(0, 100)))
#$minimum
#[1] 48.40996
#
#$objective
#[1] 0.008573424

plot(x, y)
lines(0:100, fun(0:100, fit$minimum))

resulting plot

答案 1 :(得分:1)

这可能就是你要找的东西。

Myfunction <- function(time, x, theta) {
  if(time < theta) return(x^2)
  else return(x)
}

请注意,公式是一个非常不同的对象,通常用于向函数提供统计模型。有关这些对象类型的详细信息,请参阅?function?formula

此功能的矢量化版本:

Myfunction <- function(time, x, theta) {
  return((time < theta)*x^2 + (time >= theta)*x)
}