2017-03-23 39 views
0

현재 matlab에서 R로 마이그레이션 중이며 원하는 작업을 찾을 수 있습니다.데이터가 추정 할 매개 변수의 함수 일 때 R의 비선형 최소 제곱근

관측치가 미국의 주 (state) 인 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의 사후 예측 기능을 사용하려고합니다. 어떤 도움을 많이 주셨습니다.

답변

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 개의 카운티에 대한 관찰이 있습니다. –