1

我是 R 的新手,我正在尝试对某些数据进行非线性最小二乘拟合。以下(SC4 和 t 是我的数据列)似乎有效:

fit = nls(SC4 ~ fin+(inc-fin)*exp(-t/T), data=asc4, start=c(fin=0.75,inc=0.55,T=150.0))

“summary(fit)”命令产生一个不包含 p 值的输出,除了拟合参数之外,它最终是我想要得到的。我得到的参数看起来很合理。

Formula: SC4 ~ fin + (inc - fin) * exp(-t/T) 

Parameters:
Estimate Std. Error t value Pr(>|t|)


fin  0.73703    0.02065  35.683   <2e-16 ***
inc  0.55671    0.02206  25.236   <2e-16 ***
T   51.48446   21.25343   2.422   0.0224 *  

--- Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.04988 on 27 degrees of freedom
Number of iterations to convergence: 8
Achieved convergence tolerance: 4.114e-06

那么有没有办法得到p值呢?我很乐意使用另一个命令,nls除非它可以完成这项工作。事实上,gnuplot如果有某种方法可以从中获取 p 值,我会很乐意使用(实际上gnuplot这是我通常用于图形的方法)。

PS我正在寻找整体拟合的p值,而不是单个系数。

4

1 回答 1

1

在 R 中执行此操作的方法是您必须使用该anova函数来计算当前模型的拟合值,然后用较少的变量拟合您的模型,然后使用函数anova(new_model,previous_model). 如果您不能拒绝已删除变量的参数等于零的空值,则计算出的 F 分数将更接近 1。执行标准线性回归时的summary函数通常会自动为您执行此操作。

因此,例如,这就是标准线性回归的方法:

> x = rnorm(100)
> y=rnorm(100)

> reg = lm(y~x)
> summary(reg)

Call:
lm(formula = y ~ x)

Residuals:
    Min      1Q  Median      3Q     Max 
-2.3869 -0.6815 -0.1137  0.7431  2.5939 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)  
(Intercept) -0.002802   0.105554  -0.027   0.9789  
x           -0.182983   0.104260  -1.755   0.0824 .
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.056 on 98 degrees of freedom
Multiple R-squared:  0.03047,   Adjusted R-squared:  0.02058 
F-statistic:  3.08 on 1 and 98 DF,  p-value: 0.08237

但是如果你使用anova你应该得到相同的 F 分数:

> anova(reg)
Analysis of Variance Table

Response: y
          Df  Sum Sq Mean Sq F value  Pr(>F)  
x          1   3.432  3.4318  3.0802 0.08237 .
Residuals 98 109.186  1.1141                  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
于 2014-10-24T17:56:48.590 回答