2

初めてではありませんが、答えは非常に簡単だと思います。しかし、Rソリューションの検索は定期的に大変な作業であり、2時間後、おそらく誰かに尋ねるときです...

私は非線形式を使用しており(これは最初の作業であり、実際にはすぐに非線形になります)、初期値をテストするために、一連のx値の値を単純に計算したいと思います。

ここにいくつかのコードがあります:

x <- c(1,2,3,4,5,6,7,8,9,10,11,12) #etc
y <- c(NA,332,248,234,84,56,26,24,27,33,37,25) #etc
# This is my formula I shall soon expand
fEst <- y ~ 1 / (x / a + 1) * b
# Initial value
a <- 800
# Initial value based on inverted formula and second measure
b <- y[2] * (x[2] / a + 1)

# Can i use my formula fEst to do this step?
p <- 1 / (x / a + 1) * b

重要なのは、私が数式に取り組んでいるということです-そして、それぞれの変更を2回行うのは奇妙に思えます...

私が見つけたのは、このようなことが可能なパッケージnls2と、別のパッケージの要素のように見える関数apply.a.formulaでしたが、これは関数の非常に基本的な使用法であるため、Rベースパックだと思いますすでに適切な機能を持っています。ただ...どこ?

ありがとう!

4

1 に答える 1

3

あなたが試した道とガボールが投稿した解決策を調べているときに、このスレッドに出くわしました。apply.a.formula()これは、スレッド内の OP が実際の関数を見つけようとしていた作成された関数名であることに注意してください。

Gabor がスレッドで提供した例を使用すると、これはnls2パッケージを使用したソリューションです。

## your data
x <- c(1,2,3,4,5,6,7,8,9,10,11,12) #etc
y <- c(NA,332,248,234,84,56,26,24,27,33,37,25) #etc
# This is my formula I shall soon expand
fEst <- y ~ 1 / (x / a + 1) * b
# Initial value
a <- 800
# Initial value based on inverted formula and second measure
b <- y[2] * (x[2] / a + 1)

## install.packages("nls2", depend = TRUE) if not installed
require(nls2)
fitted(nls2(fEst, start = c(a = a, b = b), alg = "brute"))

最後の行は次のとおりです。

R> fitted(nls2(fEst, start = c(a = a, b = b), alg = "brute"))
 [1] 332.4145 332.0000 331.5866 331.1741 330.7627 330.3524 329.9430 329.5347
 [9] 329.1273 328.7210 328.3157 327.9113
attr(,"label")
[1] "Fitted values"

これは本質的に次のものと同じ1 / (x / a + 1) * bです:

R> 1 / (x / a + 1) * b
 [1] 332.4145 332.0000 331.5866 331.1741 330.7627 330.3524 329.9430 329.5347
 [9] 329.1273 328.7210 328.3157 327.9113

コメントから、Carl Witthoft は、次のような方程式を一般化する場合、毎回1 / (x / a + 1) * b入力せずに演算をカプセル化する便利な方法になる可能性があると述べています。1 / (x / a + 1) * b例えば

myeqn <- function(a, b, x) { 1 / (x / a + 1) * b }

R> myeqn(a, b, x)
[1] 332.4145 332.0000 331.5866 331.1741 330.7627 330.3524 329.9430 329.5347
[9] 329.1273 328.7210 328.3157 327.9113
于 2012-05-09T11:49:47.557 に答える