2017-03-23 6 views
0

私は現在matlabからRに移行しています。何をしたいかを調べようとしています。データが推定されるパラメータの関数であるとき、Rの非線形最小二乗

私は観測が米国の州であるRの非線形モデルを推定したいと思います。 Y_Sは国家レベルの変数とX_csある

log(Y_s) = log(phi) + log(f(theta, X_cs)) + u_s 

:シワがモデルは次のようになります。すなわち、独立変数の一つは、推定するパラメータを使用して計算郡に対する国家レベルの指標であることです状態内の変数の郡レベルの観測値を含むベクトルで、f()は状態に対して計算されたインデックスのスカラー値を返します。

これまでのところ、私はRのnls関数を使って関数に渡されたデータを変換しようとしました。インデックスの詳細から抽象化、コードの簡単なバージョンは、次のようになります

library(dplyr) 

state <- c("AK", "AK", "CA", "CA", "MA", "MA", "NY", "NY") 
Y <- c(3, 3, 5, 5, 6, 6, 4, 4) 
X <- c(4, 5, 2, 3, 3, 5, 3, 7) 
Sample <- data.frame(state, Y, X) 

f <- function(data, theta) { 
    output <- data %>% 
    group_by(state) %>% 
    summarise(index = mean(X**theta), 
       Y = mean(Y)) 
} 

model <- nls(Y ~ log(phi) + log(index), 
      data = f(Sample, theta), 
      start = list(phi = exp(3), theta = 1.052)) 

これは勾配が特異であることを私に言って、エラーを返します。私が推測するのは、Rは、式でパラメータthetaをどのように使用すべきかを見ることができないからです。

nlsを使用してこれを行う方法はありますか?手動で最小化する基準関数、つまりlog(Y_s) - log(phi) - log(f(theta, X_cs))を定義し、最小化ルーチンを使用してパラメータ値を推定することができます。しかし、私はnlsのpostestimation機能を使用したいと思います。パラメータ推定の信頼区間を持つようなものです。どんな助けでも大歓迎です。

答えて

2

申し訳ありませんが、私はその巨大なメタパッケージをインストールすることを拒否します。したがって、ベースRを使用します。

state <- c("AK", "AK", "CA", "CA", "MA", "MA", "NY", "NY") 
Y <- c(3, 3, 5, 5, 6, 6, 4, 4) 
X <- c(4, 5, 2, 3, 3, 5, 3, 7) 
Sample <- data.frame(state, Y, X) 

f <- function(X, state, theta) { 
    ave(X, state, FUN = function(x) mean(x^theta)) 
} 

model <- nls(Y ~ log(phi) + log(f(X, state, theta)), 
      data = Sample, weights = 1/ave(X, state, FUN = length), 
      start = list(phi = exp(3), theta = 1.052)) 
summary(model) 
#Formula: Y ~ log(phi) + log(f(X, state, theta)) 
# 
#Parameters: 
#  Estimate Std. Error t value Pr(>|t|) 
#phi 2336.867 4521.510 0.517 0.624 
#theta -2.647  1.632 -1.622 0.156 
# 
#Residual standard error: 0.7791 on 6 degrees of freedom 
# 
#Number of iterations to convergence: 11 
#Achieved convergence tolerance: 3.722e-06 
+0

ありがとう@Roland。私はこの抜粋した例で使用しているパッケージのみを含めるように質問を編集し、クロスポストされたバージョンの質問を削除しました。そのような標準的なエラーやそのようなことを計算する際に、nlsパッケージは 'length(Y)'が 'length(unique)(Y)'ではなくobservationsの数であると考えています。私は正しい? –

+0

州ごとにデータポイントの数が異なる場合のために重みを含めました。私は標準エラーとp値がこの問題のために重要であれば、ブートストラップの標準エラーを計算しようとします(十分な量のデータがあると仮定します)。 – Roland

+0

ありがとうございました。一般的な非線形性以外に、ブートストラップを使用する特別な理由はありますか?私は47州で約3000の郡を集めている。 –

関連する問題