タグ付けされた質問 「nls」

2
正しい開始値を持つnlsの特異勾配誤差
私は線+指数曲線をいくつかのデータに当てはめようとしています。最初に、人工データでこれを実行しようとしました。関数である: それが効果的に直線部を有する指数曲線、ならびに追加の水平シフトパラメータである(M)。ただし、Rの関数を使用すると、最初にデータを生成するために使用したのと同じパラメーターを使用しても、「初期パラメーター推定値での特異な勾配行列」エラーが発生します。y= A + B ⋅ R(x − m )+ C ⋅ Xy=a+b⋅r(バツ−m)+c⋅バツy=a+b\cdot r^{(x-m)}+c\cdot xnls() さまざまなアルゴリズム、さまざまな開始値を試しoptim、残差平方和を最小化するために使用しようとしましたが、すべて役に立ちませんでした。私は、このために考えられる理由は、式のオーバーパラメータ化することができることを読んだが、私は(それがある?)それはないと思う 誰もがこの問題のための提案を持っていますか?または、これは単なる厄介なモデルですか? 短い例: #parameters used to generate the data reala=-3 realb=5 realc=0.5 realr=0.7 realm=1 x=1:11 #x values - I have 11 timepoint data #linear+exponential function y=reala + realb*realr^(x-realm) + realc*x #add a bit of noise …

2
グループ化変数の効果を非線形モデルでテストする方法は?
非線形モデルでのグループ化変数の使用に関して質問があります。nls()関数は因子変数を許可しないため、モデルの適合に対する因子の効果をテストできるかどうかを判断するのに苦労していました。「季節化されたvon Bertalanffy」成長モデルをさまざまな成長処理(魚の成長に最も一般的に適用)に適合させたい例を以下に示します。魚が育った湖と与えられた食物の効果をテストしたい(ちょうど人工的な例)。私はこの問題の回避策に精通しています-陳らによって概説されているように、プールされたデータにフィットするモデルと個別のフィットを比較するF検定を適用します。(1992)(ARSS-「残差平方和の分析」)。つまり、以下の例では、 Rでnlme()を使用してこれを行う簡単な方法があると思いますが、私は問題に直面しています。まず、グループ化変数を使用することにより、自由度は個別のモデルのフィッティングで得られるよりも高くなります。第二に、グループ化変数をネストできません。問題がどこにあるのかわかりません。nlmeまたは他の方法を使用したヘルプは大歓迎です。以下は私の人工的な例のコードです: ###seasonalized von Bertalanffy growth model soVBGF <- function(S.inf, k, age, age.0, age.s, c){ S.inf * (1-exp(-k*((age-age.0)+(c*sin(2*pi*(age-age.s))/2*pi)-(c*sin(2*pi*(age.0-age.s))/2*pi)))) } ###Make artificial data food <- c("corn", "corn", "wheat", "wheat") lake <- c("king", "queen", "king", "queen") #cornking, cornqueen, wheatking, wheatqueen S.inf <- c(140, 140, 130, 130) k <- c(0.5, 0.6, 0.8, …
15 r  mixed-model  nls 

2
Rのnls()を使用したポイント分析の変更
「変更点」分析、またはnls()R を使用したマルチフェーズ回帰を実装しようとしています。 ここに私が作ったいくつかの偽のデータがあります。データを近似するために使用する式は次のとおりです。 y= β0+ β1x + β2max (0 、x - δ)y=β0+β1バツ+β2最大(0、バツ−δ)y = \beta_0 + \beta_1x + \beta_2\max(0,x-\delta) これは、特定の切片と勾配(および)で特定のポイントまでデータを近似し、特定のx値()の後に、勾配をです。それが最大のことです。ポイントの前は、0に等しくなり、はゼロにされます。β0β0\beta_0β1β1\beta_1δδ\deltaβ2β2\beta_2δδ\deltaβ2β2\beta_2 したがって、これを行うための私の機能は次のとおりです。 changePoint <- function(x, b0, slope1, slope2, delta){ b0 + (x*slope1) + (max(0, x-delta) * slope2) } そして、私はこの方法でモデルを適合させようとします nls(y ~ changePoint(x, b0, slope1, slope2, delta), data = data, start = c(b0 …

1
指数近似の残差平方和を最小化する方法は?
次のデータがあり、負の指数関数的成長モデルを当てはめたいと思います。 Days <- c( 1,5,12,16,22,27,36,43) Emissions <- c( 936.76, 1458.68, 1787.23, 1840.04, 1928.97, 1963.63, 1965.37, 1985.71) plot(Days, Emissions) fit <- nls(Emissions ~ a* (1-exp(-b*Days)), start = list(a = 2000, b = 0.55)) curve((y = 1882 * (1 - exp(-0.5108*x))), from = 0, to =45, add = T, col = "green", …

4
Rでのnlsモデルの正しい開始値の取得
次のようなデータセットに単純なべき乗則モデルを適合させようとしています。 mydf: rev weeks 17906.4 1 5303.72 2 2700.58 3 1696.77 4 947.53 5 362.03 6 目標は、電力線を通過させ、それを使用してrev、今後数週間の値を予測することです。たくさんの研究の結果、私はこのnls機能にたどり着きました。その機能を次のように実装しました。 newMod <- nls(rev ~ a*weeks^b, data=modeldf, start = list(a=1,b=1)) predict(newMod, newdata = data.frame(weeks=c(1,2,3,4,5,6,7,8,9,10))) これはlmモデルで機能しsingular gradientますが、エラーが発生します。これは、開始値aとに関係していることを理解していますb。私はさまざまな値を試しましたが、これをExcelでプロットし、1つを渡し、方程式を取得し、方程式の値を使用しましたが、それでもエラーが発生しました。私はこのような答えをたくさん見て、2番目の答えを試しました(最初の答えは理解できませんでした)が、結果はありませんでした。 ここで、適切な開始値を見つける方法について、いくつかのヘルプを実際に使用できます。または、nlsの代わりに使用できる他の関数。 mydf簡単に再作成したい場合: mydf <- data.frame(rev=c(17906.4, 5303.72, 2700.58 ,1696.77 ,947.53 ,362.03), weeks=c(1,2,3,4,5,6))

1
ロジット、プロビット、nlsから最適なモデルを選択
特定のデータセットを分析していますが、自分のデータに適合する最適なモデルを選択する方法を理解する必要があります。私はRを使用しています。 私が持っているデータの例は次のとおりです: corr <- c(0, 0, 10, 50, 70, 100, 100, 100, 90, 100, 100) これらの数値は、11の異なる条件下での正解率に対応しています(cnt): cnt <- c(0, 82, 163, 242, 318, 390, 458, 521, 578, 628, 673) まず、プロビットモデルとロジットモデルを適合させようとしました。ちょうど今、文学で私のデータに似た別の方程式を見つけたのでnls、その方程式に従って関数を使用して自分のデータを近似しようとしました(しかし、私はそれに同意しません、そして著者は彼がなぜ彼に説明しないのですか?)その方程式を使用しました)。 ここに私が得る3つのモデルのコードがあります: resp.mat <- as.matrix(cbind(corr/10, (100-corr)/10)) ddprob.glm1 <- glm(resp.mat ~ cnt, family = binomial(link = "logit")) ddprob.glm2 <- glm(resp.mat ~ cnt, …

1
R、nls()またはnlm()の非線形最小二乗法対最尤法?
モデルを推定しています E(Y| バツ)= Pr (Y= 1 | バツ)=α0+(1 −α0−α1)ϕ(バツ』β)、E(Y|X)=Pr(Y=1|X)=α0+(1−α0−α1)ϕ(X′β),E(Y|X) = Pr(Y=1|X) = \alpha_0 + (1 - \alpha_0 - \alpha_1)\phi(X'\beta), どこ α0α0\alpha_0およびはパラメーター、はパラメーターの長のベクトル、はデータの行列、従属変数はバイナリー、はプロビットモデルなので、累積分布標準正規分布の関数。予想を導き出すために、エラーは正常で平均ゼロであるという仮定がなされました。α1α1\alpha_1ββ\betapppバツXXp × np×np \times nYYYϕ ()ϕ()\phi() モデルのソースはここにあり(式6および7を参照)、論文に従って、非線形最小二乗法または最尤法のいずれかを使用してモデルを推定できます。nls()非線形最小二乗のnlm()関数と最大尤度の関数を使用して、Rで両方のアプローチを試しました。実験により、私のアプリケーションの結果は非常によく似ていることが示唆されていますが、nls()高速です。どちらか一方のアプローチを優先する理由はありますか?メソッドの選択についてはどのように考えればよいでしょうか。 これらの2つのアプローチの違いを検討するための提案、または関連する参考文献の提案をいただければ幸いです。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.