2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 [R] Measurement Error Model
Сообщение02.04.2014, 14:45 


07/03/11
690
Пусть имеется модель:
$$
\begin{cases} 
y_i=\beta ^T\cdot \overline g(\xi _i) + \varepsilon _i\\
x_i = \xi _i + \delta _i
\end{cases}
$$где $i=\overline {1, N}$. Тут $(x_i ,y_i)$ - наблюдаемые переменные, а $\xi _i$ - скрытая. $(\varepsilon _i, \delta _i)\sim N(\overline 0, \overline \sigma I)$ - шум, который не зависит от $\xi _i$.
Пусть $\overline g(x)=(x^{d_1}, x^{d_2}, ..., x^{d_n}), d_i \in \mathbb N$ и $\xi \sim N(\mu _\xi ,\sigma ^2_\xi )$. По выборке $(x_i ,y_i)$ необходимо оценить параметры распределения $\xi $ и $\beta \in \mathbb R^n$.
Используем следующую оценку: пусть $m=E(y|x)=\beta ^T E(g(\xi)|x)=\beta ^T Eg(\psi )$ и $v=D(y|x)=\beta ^TD(g(\xi )|x)\beta +\sigma _\varepsilon ^2=\beta ^TDg(\psi )\beta +\sigma _\varepsilon ^2$, где $\psi =\xi |x \sim N(\mu _\psi ,\sigma ^2_\psi)$. Тогда параметры распределения оцениваются как с.а. и с.к.о., а $\beta$ является решением системы уравнений: $$\sum _{i=1}^N\frac {y_i - m(x_i )}{v(x_i)}\nabla _\beta m(\xi )=\overline 0$$
Нужно составить программу на языке R, которая будет оценивать данные параметры. В моём коде используются следующие обозначения: $$\mathrm {size} = N, \mathrm {alpha}=(\mu _\xi ,\sigma ^2_\xi ), \mathrm {beta}=\beta ,\mathrm{noise }=(\sigma _\varepsilon ^2,\sigma _\delta ^2), \mathrm {degrees} = (d_1 ,\ldots ,d_n), \mathrm {g} = g, \mathrm {psi}=\psi $$

(Оффтоп)

Код:
#POLYNOMIAL MODEL WITH NORMAL DISTRIBUTION

#g=g(x)=(x^d1, x^d2, ..., x^dn), where x:=xi and (d1, d2, ..., dn):=degrees
g <- function(xi, degrees) {
  t(t(replicate(length(degrees), xi)) ^ degrees)
}

#generate.sample of size size with xi~N(alpha[1], alpha[2]) and epsilon~N(0, noise[1]), delta~N(0, noise[2])
#zeta have form beta^T * g(xi)
generate.sample <- function(size, alpha, beta, noise, degrees, g) {
 
  xi <- rnorm(size, alpha[1], sqrt(alpha[2]))
 
  x <- xi + rnorm(size, 0, sqrt(noise[2]))
  y <- g(xi, degrees) %*% beta + rnorm(size, 0, sqrt(noise[1]))
   
  data.frame(x, y) 
}

#est.alpha estimation of normal distr. parameters: mu, sigma^2
est.alpha <- function(x, sigma.delta) {
  c(mean(x), sd(x) ^ 2 - sigma.delta)
}

#psi is a conditional distribution xi|x~N(mu.psi, sigma.psi^2)
get.psi <- function(x, alpha, sigma.delta) { 
  matrix(c(alpha[1] * sigma.delta + x * alpha[2], replicate(length(x), alpha[2] * sigma.delta)) / (alpha[2] + sigma.delta), ncol=2)
}

#get.moment calculates moment's moment of normal random variable with mean mu and variance var
#this function calculates all moments up to 4th.
get.moments <- function(mu, var) {
 
  matrix(c(replicate(length(mu), 1),
           mu,
           mu ^ 2 + var,
           mu ^ 3 + 3 * mu * var,
           mu ^ 4 + 6 * (mu ^ 2) *var + 3 * var ^ 2),
         ncol=5)
  #higher moments have to be added
}

#m=E(y|x)
m <- function(beta, psi.moments) {
  as.matrix(psi.moments) %*% beta
}

#v=D(y|x)
v <- function(beta, psi.moments, degrees, sigma.epsilon) {
 
  result <- replicate(nrow(psi.moments), 0)
 
  temp <- c(0, 0, 0, 0, 0)
  temp[degrees + 1] <- beta
  beta <- temp
 
  for(i in degrees)
    for(j in degrees)
      result = result + (psi.moments[, i + j + 1] - psi.moments[, i + 1] * psi.moments[, j + 1]) * beta[i + 1] * beta[j + 1]

  result + sigma.epsilon
}

#dm=grad_beta m
dm <- function(psi.moments) {
  psi.moments
}

LS <- function(x, y, beta, noise, degrees) {
  alpha <- est.alpha(x, noise[2])
  psi <- get.psi(x, alpha, noise[2])
  psi.moments <- get.moments(psi[, 1], psi[, 2])
 
  t(dm(psi.moments[, degrees + 1])) %*% ((y - m(beta, psi.moments[, degrees + 1])) / v(beta, psi.moments, degrees, noise[1]))
}



Я написал все функции, кроме "решателя". Хочу спросить совета по программе, поскольку некоторые моменты (например, функция v) мне не нравятся.

(Оффтоп)

P.S.: моя первая программа на R :oops:

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group