3

我为这个基本问题道歉,但无论出于何种原因,我真的被困住了。我希望从 y = a*x^b 的“a”和“b”的功率曲线中获得输出值。假设我有这个数据集:

 x       y       log10(x)         log10(y)
 7      240     0.84509804      2.380211242
45      610     1.653212514     2.785329835
14      340     1.146128036     2.531478917
30      500     1.477121255     2.698970004
24      450     1.380211242     2.653212514
57      690     1.755874856     2.838849091

它会在 excel 中生成此图: 在此处输入图像描述

使用 excel 示例,我将如何获得ra=2.465 和 b=0.2401 的输出值。

4

3 回答 3

2

您的数据:

DF <- read.table(text="x       y       log10(x)         log10(y)
7      240     0.84509804      2.380211242
45      610     1.653212514     2.785329835
14      340     1.146128036     2.531478917
30      500     1.477121255     2.698970004
24      450     1.380211242     2.653212514
57      690     1.755874856     2.838849091", header=TRUE)

创建自启动模型:(免责声明:函数名称不反映我的政治态度,仅符合自启动函数的命名方案。)

SSpower <- selfStart(~ A*x^B,
                     function(mCall, data, LHS)
                     {
                       xy <- sortedXyData(mCall[["x"]], LHS, data)
                       if(nrow(xy) < 3) {
                         stop("Too few distinct x values to fit a power function")
                       }
                       z <- xy[["y"]]
                       xy[["logx"]] <- log(xy[["x"]])     
                       xy[["logy"]] <- log(xy[["y"]])  
                       aux <- coef(lm(logy ~ logx, xy))
                       pars <- c(exp(aux[[1]]), aux[[2]])
                       setNames(pars,
                                mCall[c("A", "B")])
                     }, c("A", "B"))

使用自启动模型进行拟合:

fit <- nls(y ~ SSpower(x, A, B), data=DF)

阴谋:

plot(y~x, data=DF)
lines(x=1:60, y=predict(fit, newdat=list(x=1:60)))

在此处输入图像描述

于 2013-10-15T15:43:15.063 回答
1

看看以下内容(并使您的问题下次可重现。这可能也有助于您指出确切的问题):

x  <-  c(7, 45, 14, 30, 24, 57)
y  <-  c(240, 610, 340, 500, 450, 690)

logx  <-  log10(x)
logy  <-  log10(y)

lm.000  <-  lm(logy ~ logx)
summary(lm.000)

coef(lm.000)[1]
coef(lm.000)[2]

plot(x, y)
curve(x^coef(lm.000)[2]*10^coef(lm.000)[1], add=TRUE, lwd=2)
于 2013-10-15T07:50:55.160 回答
1

data是你的数据集:

y=data[,3]
x= data[,4]

nls(x ~ A * y ^ B)
Nonlinear regression model
  model: x ~ A * y^B
   data: parent.frame()
     A      B 
2.4635 0.2421 
 residual sum-of-squares: 0.0008733

Number of iterations to convergence: 5 
Achieved convergence tolerance: 6.774e-06
于 2013-10-15T07:49:01.750 回答