Page 1 of 1

HCM with Ordered Logit (more than one indicator)

Posted: 06 Apr 2022, 01:55
by Yashin
Dear Sir,
I have 2 questions regarding the HCM with OL.

For estimating HCM with OL, I have 4 attitudinal factors such as Perceive, Attitude, Subjective Norms(SN) & Environmental Concerns(EC). Each of these attitudinal factors has 4-5 different attitudinal statements (for example the Attitudinal Factor 'Perceive' has 4 different statements such as AQ1PBC_r1 till AQ1PBC_r4 and so on) and each of these has been measured by 5 points Likert Scale (Strongly disagree to Strongly agree).

While using the example from the apollo website, I have found out the apollo drug choice dataset used for the estimation has only 1 attitudinal statement for each of the attitudinal factors.

Q1. What changes do I need to make in my ordered logit settings in this case?

Here is the piece of the code :

### Likelihood of indicators
ol_settings1 = list(outcomeOrdered = AQ1PBC_r1,
V = zeta_perceive*LV,
tau = list(tau_perceive_1, tau_perceive_2, tau_perceive_3, tau_perceive_4),
rows = (Task==1),
componentName = "indic_perceive")
ol_settings2 = list(outcomeOrdered = AQ2ATTITUDE_r1,
V = zeta_attitude*LV,
tau = list(tau_attitude_1, tau_attitude_2,tau_attitude_3,tau_attitude_4),
rows = (Task==1),
componentName = "indic_attitude")
ol_settings3 = list(outcomeOrdered = AQ3SN_r1,
V = zeta_SN*LV,
tau = list(tau_SN_1, tau_SN_2, tau_SN_3, tau_SN_4),
rows = (Task==1),
componentName = "indic_SN")
ol_settings4 = list(outcomeOrdered = AQ5EC_r1,
V = zeta_EC*LV,
tau = list(tau_EC_1, tau_EC_2, tau_EC_3, tau_EC_4),
rows = (Task==1),
componentName = "indic_EC")


Q2. While doing the estimation, the estimates result in Zeta parameters which have +/- signs that indicate the impact of the attitudinal factor on the measurement model, but what do the +/- signs of the tau_quality_1, tau_quality_2, tau_quality_3, tau_quality_4 other tau's indicates?

Your suggestions are highly appreciated.

Re: HCM with Ordered Logit (more than one indicator)

Posted: 06 Apr 2022, 08:04
by stephanehess
Hi

Q1: no, this is not correct. There is a single latent variable in our example, and this is used for 4 attitudinal statements. Note that there are no "attitudinal factors". In your case, you would have 4 latent variables, one for perceive, one for attitude, ..., and each would be used in 4-5 different OL models

Q2: please consult the literature on ordered logit models. The thresholds capture the baseline shares for the different levels for the indicators

Hope this helps.

Stephane

Re: HCM with Ordered Logit (more than one indicator)

Posted: 06 Apr 2022, 13:54
by Yashin
Thank you Sir for the reply. If I have understood correctly,

So for each of the latent variables, there would be 4-5 OL settings depending on the number of attitudinal statements asked to the respondents?
For example: Showing one latent variable 'Perceive' with 4 different attitudinal statements:

Should the code looks like below:

### Likelihood of indicators
ol_settings1 = list(outcomeOrdered = AQ1PBC_r1,
V = zeta_perceive*LV,
tau = list(tau_perceive_1, tau_perceive_2, tau_perceive_3, tau_perceive_4),
rows = (Task==1),
componentName = "indic_perceive_1")

ol_settings2 = list(outcomeOrdered = AQ1PBC_r2,
V = zeta_perceive*LV,
tau = list(tau_perceive_1, tau_perceive_2, tau_perceive_3, tau_perceive_4),
rows = (Task==1),
componentName = "indic_perceive_2")

ol_settings3 = list(outcomeOrdered = AQ1PBC_r3,
V = zeta_perceive*LV,
tau = list(tau_perceive_1, tau_perceive_2, tau_perceive_3, tau_perceive_4),
rows = (Task==1),
componentName = "indic_perceive_3")

ol_settings4 = list(outcomeOrdered = AQ1PBC_r4,
V = zeta_perceive*LV,
tau = list(tau_perceive_1, tau_perceive_2, tau_perceive_3, tau_perceive_4),
rows = (Task==1),
componentName = "indic_perceive_4")

P[["indic_perceive_1"]] = apollo_ol(ol_settings1, functionality)
P[["indic_perceive_2"]] = apollo_ol(ol_settings2, functionality)
P[["indic_perceive_3"]] = apollo_ol(ol_settings3, functionality)
P[["indic_perceive_4"]] = apollo_ol(ol_settings4, functionality)

and last not least:

During the apollo_beta = c, , the value of the zeta_perceive = 1 ?

Re: HCM with Ordered Logit (more than one indicator)

Posted: 06 Apr 2022, 14:01
by stephanehess
yes, and you would use different LVs for each latent variable in the code of course, so LV would only be for these 4 (so maybe call it LV_perceive) and then a different one for others.

But the other thing that is incorrect in your code here is that you have the same taus and the same zetas for the different indicators. Again, please have a look at the online example, which makes clear what you need to do here.

Re: HCM with Ordered Logit (more than one indicator)

Posted: 06 Apr 2022, 15:13
by Yashin
Thank you sir for your prompt reply.


Yes, surely you are right I did a mistake while defining the taus and zetas which will be different for different indicators and LV.

For this first LV ('Perceive'), LV_perceive will be multiplied with different 'zetas' throughout the 4 indicators. Similarly, the second latent variable ('Subjective Norms') will have different zetas and taus for its indicators along with new (LV_SN)

but in doing so, for LV_peceive the following piece of code will also change for LV_SN, if I am right?

### Create random parameters (this is for LV_perceive)
apollo_randCoeff=function(apollo_beta, apollo_inputs){
randcoeff = list()

randcoeff[["LV_perceive"]] = gamma_Age*Age + gamma_Gender*Gender + gamma_income*income + eta

return(randcoeff)
}

### Create random parameters (this is for LV_SN)
apollo_randCoeff=function(apollo_beta, apollo_inputs){
randcoeff = list()

randcoeff[["LV_SN"]] = gamma_Age*Age + gamma_Gender*Gender + gamma_income*income + eta

return(randcoeff)
}

Re: HCM with Ordered Logit (more than one indicator)

Posted: 07 Apr 2022, 07:03
by stephanehess
Yes, but you'll do it all in one section, and you'll need separate gammas and etas for each LV, i.e.

Code: Select all

apollo_randCoeff=function(apollo_beta, apollo_inputs){
randcoeff = list()

randcoeff[["LV_perceive"]] = gamma_Age_perceive*Age + gamma_Gender_perceive*Gender + gamma_income*income + eta_perceive
randcoeff[["LV_SN"]] = gamma_Age_perceive*Age + gamma_Gender_perceive*Gender + gamma_income*income + eta_perceive

return(randcoeff)
}