在r中,获得'a'和'b'值的功率曲线中的输出值

时间:2013-10-15 07:08:08

标签: r regression

我为这个基本问题道歉,但无论出于何种原因,我都被卡住了。我希望从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中生成此图: enter image description here

使用excel示例,我如何在r中获得a = 2.465和b = 0.2401的输出值。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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)

答案 2 :(得分:1)

您的数据:

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)))

enter image description here