我正在尝试运行 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 个唯一观察值,每个 y
由求和确定x^2
共享相同的 t
。我想按照以下行运行 nls
回归:
fit <- nls(y ~ sum(x^b), data = df, start=list(b = 2))
希望 b
为 2,但我不知道如何编写拟合方程,使得 x
按组(t
),而不是完全相加。
谢谢。
最佳答案
我看到两件事:
- 对于分组,我将使用
nlsList
,它对您的模型 (Fitting nls to grouped data R) 更方便 您的模型太完美了,您“忘记”了错误!因为很多数学需要逆矩阵和所有这些东西,所以你的“完美”模型存在问题。只需添加一点错误! (正如我们在西类牙所说:完美就是法西斯!)
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
关于在 R 中运行包含求和的非线性 (nls) 回归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55203920/