运行 在 R 中包含求和的非线性 (nls) 回归

Run nonlinear (nls) regression that contains summation in R

我正在尝试 运行 形式为 y_i = sum_t(x_{it}^b)

的非线性回归

在以下(简化的)数据集上:

require(dplyr)
set.seed(2019)    
df <- data.frame(t = rep(1:4, each = 4),
                 x = sample(1:16, replace=F))

df <- df %>%
group_by(t) %>%
mutate(y = sum(x^2))

给出:

       t     x     y
   <int> <int> <dbl>
 1     1    13   396
 2     1    11   396
 3     1     5   396
 4     1     9   396
 5     2     1   626
 6     2    12   626
 7     2    16   626
 8     2    15   626
 9     3    10   361
10     3    14   361
11     3     7   361
12     3     4   361
13     4     8   113
14     4     6   113
15     4     2   113
16     4     3   113

x 有 16 个唯一值,但 y 只有 4 个唯一观察值,每个 yx^2 的总和确定分享相同的 t。我想 运行 一个 nls 回归:

fit <- nls(y ~ sum(x^b), data = df, start=list(b = 2))

希望 b 将是 2,但我不知道如何写出拟合方程,使得 x 按组(t ), 而不是完全相加。

谢谢。

我看到两件事:

  1. 对于分组,我将使用 nlsList,这对您的模型来说更方便 ()
  2. 你的模型太完美了,你的"forgot"错误!因为很多数学需要逆矩阵和所有这些东西,所以你的 "perfect" 模型存在问题。只需添加一点错误! (正如我们在西班牙所说:完美就是法西斯!)

    library(nlsList)
    set.seed(2019)  
    df <- data.frame(t = rep(1:4, each = 4),
                     x = sample(1:16, replace=F))
    
    df <- df %>%
      group_by(t) %>%
      mutate(y = sum(x^2)+runif(4,0,1))
    
    rec.hyp <- nlsList(y ~ sum(x^b) | t,
                       data=df,
                       start=c(b=2),
                       na.action=na.omit)
    coef(rec.hyp)
    

结果

1 2.000428
2 2.000314
3 2.000486
4 2.002057