Ruby-OpenID: Требование адреса электронной почты от поставщика OpenID

Я думаю, у вас проблемы по нескольким причинам. Во-первых, данные, которые вы предоставили для модели (т. Е. y), не являются смесью нормальных распределений. В результате сама модель не нуждается в смешивании. Вместо этого я бы сгенерировал данные примерно так:

set.seed(320)

# number of samples
n <- 10

# Because it is a mixture of 2 we can just use an indicator variable.
#  here, pick (in the long run), would be '1' 30% of the time.
pick <- rbinom(n, 1, p[1])

# generate the data. b is in terms of precision so we are converting this
#  to standard deviations (which is what R wants).
y_det <- pick * rnorm(n, a[1], sqrt(1/b[1])) + (1 - pick) * rnorm(n, a[2], sqrt(1/b[2]))

# add a small amount of noise, can change to be more as necessary.
y <- rnorm(n, y_det, 1)

Эти данные больше похожи на то, что вы хотели бы предоставить для смешанной модели.

enter image description here

После этого я буду кодировать модель аналогично тому, как я делал процесс генерации данных. Я хочу, чтобы некоторая переменная индикатора была между двумя нормальными распределениями. Таким образом, mu может измениться для каждого скаляра в y.

mod_str = "model{
    # Likelihood
    for (i in 1:n){
            y[i] ~ dnorm(mu[i], 10)
            mu[i] <- mu_ind[i] * a_mu + (1 - mu_ind[i]) * b_mu
            mu_ind[i] ~ dbern(p[1])

    }
    a_mu ~ dnorm(a[1], b[1])
    b_mu ~ dnorm(a[2], b[2])

}"

model = jags.model(textConnection(mod_str), data = list(y = y, n=n, a=a, b=b, p=p), n.chains=1)
update(model, 10000)
res = coda.samples(model, variable.names = c('mu_ind', 'a_mu', 'b_mu'), n.iter = 10000)
summary(res)

             2.5%    25%    50%    75% 97.5%
a_mu       -100.4 -100.3 -100.2 -100.1  -100
b_mu        199.9  200.0  200.0  200.0   200
mu_ind[1]     0.0    0.0    0.0    0.0     0
mu_ind[2]     1.0    1.0    1.0    1.0     1
mu_ind[3]     0.0    0.0    0.0    0.0     0
mu_ind[4]     1.0    1.0    1.0    1.0     1
mu_ind[5]     0.0    0.0    0.0    0.0     0
mu_ind[6]     0.0    0.0    0.0    0.0     0
mu_ind[7]     1.0    1.0    1.0    1.0     1
mu_ind[8]     0.0    0.0    0.0    0.0     0
mu_ind[9]     0.0    0.0    0.0    0.0     0
mu_ind[10]    1.0    1.0    1.0    1.0     1

Если вы предоставили больше данных, вы бы (в долгосрочной перспективе) имели переменную индикатора mu_ind, принимающую значение 1 30% времени. Если бы у вас было более 2 дистрибутивов, вы могли бы использовать dcat. Таким образом, альтернативный и более обобщенный способ сделать это будет (, и я в значительной степени заимствую из этого поста Джона Крушке ):

mod_str = "model {
  # Likelihood:
  for( i in 1 : n ) {
    y[i] ~ dnorm( mu[i] , 10 ) 
    mu[i] <- muOfpick[ pick[i] ]
    pick[i] ~ dcat( p[1:2] )
  }
  # Prior:
  for ( i in 1:2 ) {
    muOfpick[i] ~ dnorm( a[i] , b[i] )
  }
}"
model = jags.model(textConnection(mod_str), data = list(y = y, n=n, a=a, b=b, p=p), n.chains=1)
update(model, 10000)
res = coda.samples(model, variable.names = c('pick', 'muOfpick'), n.iter = 10000)
summary(res)

              2.5%    25%    50%    75% 97.5%
muOfpick[1] -100.4 -100.3 -100.2 -100.1  -100
muOfpick[2]  199.9  200.0  200.0  200.0   200
pick[1]        2.0    2.0    2.0    2.0     2
pick[2]        1.0    1.0    1.0    1.0     1
pick[3]        2.0    2.0    2.0    2.0     2
pick[4]        1.0    1.0    1.0    1.0     1
pick[5]        2.0    2.0    2.0    2.0     2
pick[6]        2.0    2.0    2.0    2.0     2
pick[7]        1.0    1.0    1.0    1.0     1
pick[8]        2.0    2.0    2.0    2.0     2
pick[9]        2.0    2.0    2.0    2.0     2
pick[10]       1.0    1.0    1.0    1.0     1

Ссылка выше включает в себя еще больше приоры ( например, Dirichlet перед вероятностями, включенными в Категориальное распределение).

10
задан Javier 13 July 2009 в 19:31
поделиться

5 ответов

Поскольку никто не мог мне помочь, я помог себе. : -)

Краткий ответ на мой вопрос:

c.required_fields = [:email,"http://axschema.org/contact/email"]

Используя эту строку, приложение запрашивает адрес электронной почты, используя sreg и ax (тип запроса поддерживается Google).

Более подробный ответ и работающую реализацию authlogic-openid можно найти с помощью Javascript OpenID-Selector прямо здесь:

http://github.com/vazqujav/authlogic_openid_selector_example/

10
ответ дан 3 December 2019 в 22:39
поделиться

Тестировать на сервере OpenID, которым вы управляете, поскольку он позволит вам отлаживать каждую часть последовательности OpenID. Нет никаких гарантий, что провайдер OpenID от Google поступает правильно. Попробуйте проверить на сервере Verisign, так как я уверен, что по крайней мере один должен делать правильно с полем openid.sreg.required = email .

Ваш фрагмент кода выглядит мне правильно.

0
ответ дан 3 December 2019 в 22:39
поделиться

Хотя это указывало мне в правильном направлении, мне нужно было:

c.openid_required_fields = [:email,"http://axschema.org/contact/email"]

Это вытащил письмо и установил его.

3
ответ дан 3 December 2019 в 22:39
поделиться
# fetch email by ax
c.openid_required_fields = [
                            "http://axschema.org/contact/email",
                            "http://axschema.org/namePerson/first",
                            "http://axschema.org/namePerson/last",
                            "http://axschema.org/contact/country/home",
                            "http://axschema.org/pref/language"
                           ]

Это извлекает несколько значений, как указано @ http://code.google.com/apis/accounts/docs/OpenID.html# Параметры

Хотя я все еще не могу получить название страны ... имя, адрес электронной почты, язык работают отлично!

2
ответ дан 3 December 2019 в 22:39
поделиться

Дело в том, что я могу получить параметры у провайдера, но не могу извлечь их из ответа... Я использовал OpenID::AX::FetchResponse.from_success_response(open_id_response) в качестве объекта для хранения ответа... какой метод я использую для извлечения электронной почты, ника, страны и т.д....

0
ответ дан 3 December 2019 в 22:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: