Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
H
Hot Topic_Cool Choices
Manage
Activity
Members
Labels
Plan
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
nc71qaxa
Hot Topic_Cool Choices
Commits
7c3c7154
Commit
7c3c7154
authored
Mar 27, 2024
by
Cavallaro
Browse files
Options
Downloads
Patches
Plain Diff
Interact all
parent
0ad3a421
No related branches found
No related tags found
No related merge requests found
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
Scripts/mxl/mxl_wtp_space_caseD_RentINT_X.R
+41
-10
41 additions, 10 deletions
Scripts/mxl/mxl_wtp_space_caseD_RentINT_X.R
Scripts/mxl/mxl_wtp_space_caseD_rentINT.R
+152
-134
152 additions, 134 deletions
Scripts/mxl/mxl_wtp_space_caseD_rentINT.R
with
193 additions
and
144 deletions
Scripts/mxl/mxl_wtp_space_caseD.R
→
Scripts/mxl/mxl_wtp_space_caseD
_RentINT_X
.R
+
41
−
10
View file @
7c3c7154
...
@@ -23,8 +23,8 @@ apollo_initialise()
...
@@ -23,8 +23,8 @@ apollo_initialise()
### Set core controls
### Set core controls
apollo_control
=
list
(
apollo_control
=
list
(
modelName
=
"MXL_wtp_Case_D"
,
modelName
=
"MXL_wtp_Case_D
_X
"
,
modelDescr
=
"MXL wtp space Case D"
,
modelDescr
=
"MXL wtp space Case D
Interactions
"
,
indivID
=
"id"
,
indivID
=
"id"
,
mixing
=
TRUE
,
mixing
=
TRUE
,
HB
=
FALSE
,
HB
=
FALSE
,
...
@@ -42,15 +42,27 @@ apollo_beta=c(mu_natural = 15,
...
@@ -42,15 +42,27 @@ apollo_beta=c(mu_natural = 15,
mu_ASC_sq_treated
=
0
,
mu_ASC_sq_treated
=
0
,
mu_ASC_sq_vol_treated
=
0
,
mu_ASC_sq_vol_treated
=
0
,
mu_ASC_sq_no_info
=
0
,
mu_ASC_sq_no_info
=
0
,
mu_ASC_NR
=
0
,
mu_ASC_Age
=
0
,
mu_ASC_Income
=
0
,
mu_rent_treated
=
0
,
mu_rent_treated
=
0
,
mu_rent_vol_treated
=
0
,
mu_rent_vol_treated
=
0
,
mu_rent_no_info
=
0
,
mu_rent_no_info
=
0
,
mu_rent_NR
=
0
,
mu_rent_Age
=
0
,
mu_rent_Income
=
0
,
mu_nat_treated
=
0
,
mu_nat_treated
=
0
,
mu_nat_vol_treated
=
0
,
mu_nat_vol_treated
=
0
,
mu_nat_no_info
=
0
,
mu_nat_no_info
=
0
,
mu_nat_NR
=
0
,
mu_nat_Age
=
0
,
mu_nat_Income
=
0
,
mu_walking_treated
=
0
,
mu_walking_treated
=
0
,
mu_walking_vol_treated
=
0
,
mu_walking_vol_treated
=
0
,
mu_walking_no_info
=
0
,
mu_walking_no_info
=
0
,
mu_walking_NR
=
0
,
mu_walking_Age
=
0
,
mu_walking_Income
=
0
,
sig_natural
=
15
,
sig_natural
=
15
,
sig_walking
=
2
,
sig_walking
=
2
,
sig_rent
=
2
,
sig_rent
=
2
,
...
@@ -100,25 +112,44 @@ apollo_probabilities=function(apollo_beta, apollo_inputs, functionality="estimat
...
@@ -100,25 +112,44 @@ apollo_probabilities=function(apollo_beta, apollo_inputs, functionality="estimat
# Define utility functions here:
# Define utility functions here:
V
=
list
()
V
=
list
()
V
[[
'alt1'
]]
=
-
(
b_mu_rent
+
mu_rent_treated
*
Dummy_Treated
+
mu_rent_vol_treated
*
Dummy_Vol_Treated
+
mu_rent_no_info
*
Dummy_no_info
)
*
(
b_mu_natural
*
Naturalness_1
+
b_mu_walking
*
WalkingDistance_1
+
V
[[
'alt1'
]]
=
-
(
b_mu_rent
+
mu_rent_treated
*
Dummy_Treated
+
mu_rent_vol_treated
*
Dummy_Vol_Treated
+
mu_rent_no_info
*
Dummy_no_info
+
mu_rent_NR
*
Z_Mean_NR
+
mu_rent_Age
*
Age_mean
+
mu_rent_Income
*
QFIncome
)
*
(
b_mu_natural
*
Naturalness_1
+
b_mu_walking
*
WalkingDistance_1
+
+
mu_nat_treated
*
Naturalness_1
*
Dummy_Treated
+
mu_nat_no_info
*
Naturalness_1
*
Dummy_no_info
+
mu_nat_treated
*
Naturalness_1
*
Dummy_Treated
+
mu_nat_no_info
*
Naturalness_1
*
Dummy_no_info
+
mu_nat_vol_treated
*
Naturalness_1
*
Dummy_Vol_Treated
+
mu_nat_vol_treated
*
Naturalness_1
*
Dummy_Vol_Treated
+
mu_walking_treated
*
WalkingDistance_1
*
Dummy_Treated
+
mu_walking_no_info
*
WalkingDistance_1
*
Dummy_no_info
+
mu_walking_treated
*
WalkingDistance_1
*
Dummy_Treated
+
mu_walking_no_info
*
WalkingDistance_1
*
Dummy_no_info
+
mu_walking_vol_treated
*
WalkingDistance_1
*
Dummy_Vol_Treated
-
Rent_1
)
+
mu_walking_vol_treated
*
WalkingDistance_1
*
Dummy_Vol_Treated
+
mu_nat_NR
*
Z_Mean_NR
*
Naturalness_1
+
mu_nat_Age
*
Age_mean
*
Naturalness_1
V
[[
'alt2'
]]
=
-
(
b_mu_rent
+
mu_rent_treated
*
Dummy_Treated
+
mu_rent_vol_treated
*
Dummy_Vol_Treated
+
mu_rent_no_info
*
Dummy_no_info
)
*
(
b_mu_natural
*
Naturalness_2
+
b_mu_walking
*
WalkingDistance_2
+
mu_nat_Income
*
QFIncome
*
Naturalness_1
+
mu_walking_NR
*
Z_Mean_NR
*
WalkingDistance_1
+
mu_walking_Age
*
Age_mean
*
WalkingDistance_1
+
mu_walking_Income
*
QFIncome
*
WalkingDistance_1
-
Rent_1
)
V
[[
'alt2'
]]
=
-
(
b_mu_rent
+
mu_rent_treated
*
Dummy_Treated
+
mu_rent_vol_treated
*
Dummy_Vol_Treated
+
mu_rent_no_info
*
Dummy_no_info
+
mu_rent_NR
*
Z_Mean_NR
+
mu_rent_Age
*
Age_mean
+
mu_rent_Income
*
QFIncome
)
*
(
b_mu_natural
*
Naturalness_2
+
b_mu_walking
*
WalkingDistance_2
+
mu_nat_treated
*
Naturalness_2
*
Dummy_Treated
+
mu_nat_no_info
*
Naturalness_2
*
Dummy_no_info
+
mu_nat_treated
*
Naturalness_2
*
Dummy_Treated
+
mu_nat_no_info
*
Naturalness_2
*
Dummy_no_info
+
mu_nat_vol_treated
*
Naturalness_2
*
Dummy_Vol_Treated
+
mu_nat_vol_treated
*
Naturalness_2
*
Dummy_Vol_Treated
+
mu_walking_treated
*
WalkingDistance_2
*
Dummy_Treated
+
mu_walking_no_info
*
WalkingDistance_2
*
Dummy_no_info
+
mu_walking_treated
*
WalkingDistance_2
*
Dummy_Treated
+
mu_walking_no_info
*
WalkingDistance_2
*
Dummy_no_info
+
mu_walking_vol_treated
*
WalkingDistance_2
*
Dummy_Vol_Treated
-
Rent_2
)
+
mu_walking_vol_treated
*
WalkingDistance_2
*
Dummy_Vol_Treated
+
mu_nat_NR
*
Z_Mean_NR
*
Naturalness_2
+
mu_nat_Age
*
Age_mean
*
Naturalness_2
V
[[
'alt3'
]]
=
-
(
b_mu_rent
+
mu_rent_treated
*
Dummy_Treated
+
mu_rent_vol_treated
*
Dummy_Vol_Treated
+
mu_rent_no_info
*
Dummy_no_info
)
*
(
b_ASC_sq
+
b_mu_natural
*
Naturalness_3
+
b_mu_walking
*
WalkingDistance_3
+
mu_nat_Income
*
QFIncome
*
Naturalness_2
+
mu_walking_NR
*
Z_Mean_NR
*
WalkingDistance_2
+
mu_walking_Age
*
Age_mean
*
WalkingDistance_2
+
mu_walking_Income
*
QFIncome
*
WalkingDistance_2
-
Rent_2
)
V
[[
'alt3'
]]
=
-
(
b_mu_rent
+
mu_rent_treated
*
Dummy_Treated
+
mu_rent_vol_treated
*
Dummy_Vol_Treated
+
mu_rent_no_info
*
Dummy_no_info
+
mu_rent_NR
*
Z_Mean_NR
+
mu_rent_Age
*
Age_mean
+
mu_rent_Income
*
QFIncome
)
*
(
b_ASC_sq
+
b_mu_natural
*
Naturalness_3
+
b_mu_walking
*
WalkingDistance_3
+
mu_nat_treated
*
Naturalness_3
*
Dummy_Treated
+
mu_nat_no_info
*
Naturalness_3
*
Dummy_no_info
+
mu_nat_treated
*
Naturalness_3
*
Dummy_Treated
+
mu_nat_no_info
*
Naturalness_3
*
Dummy_no_info
+
mu_nat_vol_treated
*
Naturalness_3
*
Dummy_Vol_Treated
+
mu_nat_vol_treated
*
Naturalness_3
*
Dummy_Vol_Treated
+
mu_walking_treated
*
WalkingDistance_3
*
Dummy_Treated
+
mu_walking_no_info
*
WalkingDistance_3
*
Dummy_no_info
+
mu_walking_treated
*
WalkingDistance_3
*
Dummy_Treated
+
mu_walking_no_info
*
WalkingDistance_3
*
Dummy_no_info
+
mu_walking_vol_treated
*
WalkingDistance_3
*
Dummy_Vol_Treated
+
mu_walking_vol_treated
*
WalkingDistance_3
*
Dummy_Vol_Treated
+
mu_ASC_sq_treated
*
Dummy_Treated
+
mu_ASC_sq_vol_treated
*
Dummy_Vol_Treated
+
mu_ASC_sq_treated
*
Dummy_Treated
+
mu_ASC_sq_vol_treated
*
Dummy_Vol_Treated
+
mu_ASC_sq_no_info
*
Dummy_no_info
-
Rent_3
)
+
mu_ASC_sq_no_info
*
Dummy_no_info
+
mu_ASC_NR
*
Z_Mean_NR
+
mu_ASC_Age
*
Age_mean
+
mu_ASC_Income
*
QFIncome
+
mu_nat_NR
*
Z_Mean_NR
*
Naturalness_3
+
mu_nat_Age
*
Age_mean
*
Naturalness_3
+
mu_nat_Income
*
QFIncome
*
Naturalness_3
+
mu_walking_NR
*
Z_Mean_NR
*
WalkingDistance_3
+
mu_walking_Age
*
Age_mean
*
WalkingDistance_3
+
mu_walking_Income
*
QFIncome
*
WalkingDistance_3
-
Rent_3
)
### Define settings for MNL model component
### Define settings for MNL model component
...
@@ -151,7 +182,7 @@ apollo_probabilities=function(apollo_beta, apollo_inputs, functionality="estimat
...
@@ -151,7 +182,7 @@ apollo_probabilities=function(apollo_beta, apollo_inputs, functionality="estimat
# ################################################################# #
# ################################################################# #
# estimate model with bfgs algorithm
# estimate model with bfgs algorithm
mxl_wtp_case_
c
=
apollo_estimate
(
apollo_beta
,
apollo_fixed
,
mxl_wtp_case_
d_rentX
=
apollo_estimate
(
apollo_beta
,
apollo_fixed
,
apollo_probabilities
,
apollo_inputs
,
apollo_probabilities
,
apollo_inputs
,
estimate_settings
=
list
(
maxIterations
=
400
,
estimate_settings
=
list
(
maxIterations
=
400
,
estimationRoutine
=
"bfgs"
,
estimationRoutine
=
"bfgs"
,
...
@@ -162,6 +193,6 @@ mxl_wtp_case_c = apollo_estimate(apollo_beta, apollo_fixed,
...
@@ -162,6 +193,6 @@ mxl_wtp_case_c = apollo_estimate(apollo_beta, apollo_fixed,
# ################################################################# #
# ################################################################# #
#### MODEL OUTPUTS ##
#### MODEL OUTPUTS ##
# ################################################################# #
# ################################################################# #
apollo_saveOutput
(
mxl_wtp_case_
c
)
apollo_saveOutput
(
mxl_wtp_case_
d_rentX
)
This diff is collapsed.
Click to expand it.
Scripts/mxl/mxl_wtp_space_caseD_rentINT.R
+
152
−
134
View file @
7c3c7154
...
@@ -3,9 +3,18 @@
...
@@ -3,9 +3,18 @@
library
(
apollo
)
# Load apollo package
library
(
apollo
)
# Load apollo package
database
<-
database_full
%>%
filter
(
!
is.na
(
Treatment_A
))
%>%
mutate
(
Dummy_Choice_Info
=
case_when
(
Treatment_new
==
1
~
1
,
Treatment_new
==
4
~
1
,
Treatment_new
==
5
~
1
,
TRUE
~
0
),
# Test treatment effect
Dummy_Choice_No_Info
=
case_when
(
Treatment_new
==
2
~
1
,
Treatment_new
==
3
~
1
,
TRUE
~
0
))
database
<-
database_full
%>%
filter
(
!
is.na
(
Treatment_new
))
%>%
mutate
(
Dummy_Treated
=
case_when
(
Treatment_new
==
1
|
Treatment_new
==
2
~
1
,
TRUE
~
0
),
Dummy_Vol_Treated
=
case_when
(
Treatment_new
==
5
|
Treatment_new
==
4
~
1
,
TRUE
~
0
),
Dummy_no_info
=
case_when
(
Treatment_new
==
3
~
1
,
TRUE
~
0
))
table
(
database
$
Dummy_Treated
)
table
(
database
$
Dummy_Vol_Treated
)
table
(
database
$
Dummy_no_info
)
#initialize model
#initialize model
...
@@ -14,8 +23,8 @@ database <- database_full %>% filter(!is.na(Treatment_A)) %>%
...
@@ -14,8 +23,8 @@ database <- database_full %>% filter(!is.na(Treatment_A)) %>%
### Set core controls
### Set core controls
apollo_control
=
list
(
apollo_control
=
list
(
modelName
=
"MXL_wtp
Case
D Rent Int
"
,
modelName
=
"MXL_wtp
_
Case
_D
"
,
modelDescr
=
"MXL
_
wtp Case D
Rent Int
"
,
modelDescr
=
"MXL
wtp
space
Case D"
,
indivID
=
"id"
,
indivID
=
"id"
,
mixing
=
TRUE
,
mixing
=
TRUE
,
HB
=
FALSE
,
HB
=
FALSE
,
...
@@ -30,14 +39,18 @@ database <- database_full %>% filter(!is.na(Treatment_A)) %>%
...
@@ -30,14 +39,18 @@ database <- database_full %>% filter(!is.na(Treatment_A)) %>%
mu_walking
=
-1
,
mu_walking
=
-1
,
mu_rent
=
-2
,
mu_rent
=
-2
,
ASC_sq
=
0
,
ASC_sq
=
0
,
mu_rent_I
=
0
,
mu_ASC_sq_treated
=
0
,
mu_nat_I
=
0
,
mu_ASC_sq_vol_treated
=
0
,
mu_wd_I
=
0
,
mu_ASC_sq_no_info
=
0
,
mu_asc_I
=
0
,
mu_rent_treated
=
0
,
mu_rent_NI
=
0
,
mu_rent_vol_treated
=
0
,
mu_nat_NI
=
0
,
mu_rent_no_info
=
0
,
mu_wd_NI
=
0
,
mu_nat_treated
=
0
,
mu_asc_NI
=
0
,
mu_nat_vol_treated
=
0
,
mu_nat_no_info
=
0
,
mu_walking_treated
=
0
,
mu_walking_vol_treated
=
0
,
mu_walking_no_info
=
0
,
sig_natural
=
15
,
sig_natural
=
15
,
sig_walking
=
2
,
sig_walking
=
2
,
sig_rent
=
2
,
sig_rent
=
2
,
...
@@ -87,20 +100,25 @@ database <- database_full %>% filter(!is.na(Treatment_A)) %>%
...
@@ -87,20 +100,25 @@ database <- database_full %>% filter(!is.na(Treatment_A)) %>%
# Define utility functions here:
# Define utility functions here:
V
=
list
()
V
=
list
()
V
[[
'alt1'
]]
=
-
(
b_mu_rent
+
mu_rent_I
*
Dummy_Choice_Info
+
mu_rent_NI
*
Dummy_Choice_No_Info
)
*
(
b_mu_natural
*
Naturalness_1
+
b_mu_walking
*
WalkingDistance_1
+
V
[[
'alt1'
]]
=
-
(
b_mu_rent
+
mu_rent_treated
*
Dummy_Treated
+
mu_rent_vol_treated
*
Dummy_Vol_Treated
+
mu_rent_no_info
*
Dummy_no_info
)
*
(
b_mu_natural
*
Naturalness_1
+
b_mu_walking
*
WalkingDistance_1
+
mu_nat_I
*
Naturalness_1
*
Dummy_Choice_Info
+
mu_wd_I
*
WalkingDistance_1
*
Dummy_Choice_Info
+
+
mu_nat_treated
*
Naturalness_1
*
Dummy_Treated
+
mu_nat_no_info
*
Naturalness_1
*
Dummy_no_info
mu_nat_NI
*
Naturalness_1
*
Dummy_Choice_No_Info
+
mu_wd_NI
*
WalkingDistance_1
*
Dummy_Choice_No_Info
+
mu_nat_vol_treated
*
Naturalness_1
*
Dummy_Vol_Treated
-
Rent_1
)
+
mu_walking_treated
*
WalkingDistance_1
*
Dummy_Treated
+
mu_walking_no_info
*
WalkingDistance_1
*
Dummy_no_info
+
mu_walking_vol_treated
*
WalkingDistance_1
*
Dummy_Vol_Treated
-
Rent_1
)
V
[[
'alt2'
]]
=
-
(
b_mu_rent
+
mu_rent_I
*
Dummy_Choice_Info
+
mu_rent_NI
*
Dummy_Choice_No_Info
)
*
(
b_mu_natural
*
Naturalness_2
+
b_mu_walking
*
WalkingDistance_2
+
mu_nat_I
*
Naturalness_2
*
Dummy_Choice_Info
+
mu_wd_I
*
WalkingDistance_2
*
Dummy_Choice_Info
+
V
[[
'alt2'
]]
=
-
(
b_mu_rent
+
mu_rent_treated
*
Dummy_Treated
+
mu_rent_vol_treated
*
Dummy_Vol_Treated
+
mu_rent_no_info
*
Dummy_no_info
)
*
(
b_mu_natural
*
Naturalness_2
+
b_mu_walking
*
WalkingDistance_2
mu_nat_NI
*
Naturalness_2
*
Dummy_Choice_No_Info
+
mu_wd_NI
*
WalkingDistance_2
*
Dummy_Choice_No_Info
+
mu_nat_treated
*
Naturalness_2
*
Dummy_Treated
+
mu_nat_no_info
*
Naturalness_2
*
Dummy_no_info
-
Rent_2
)
+
mu_nat_vol_treated
*
Naturalness_2
*
Dummy_Vol_Treated
+
mu_walking_treated
*
WalkingDistance_2
*
Dummy_Treated
+
mu_walking_no_info
*
WalkingDistance_2
*
Dummy_no_info
V
[[
'alt3'
]]
=
-
(
b_mu_rent
+
mu_rent_I
*
Dummy_Choice_Info
+
mu_rent_NI
*
Dummy_Choice_No_Info
)
*
(
b_ASC_sq
+
b_mu_natural
*
Naturalness_3
+
b_mu_walking
*
WalkingDistance_3
+
mu_asc_I
*
Dummy_Choice_Info
+
+
mu_walking_vol_treated
*
WalkingDistance_2
*
Dummy_Vol_Treated
-
Rent_2
)
mu_asc_NI
*
Dummy_Choice_No_Info
+
mu_nat_I
*
Naturalness_3
*
Dummy_Choice_Info
+
mu_wd_I
*
WalkingDistance_3
*
Dummy_Choice_Info
+
mu_nat_NI
*
Naturalness_3
*
Dummy_Choice_No_Info
+
mu_wd_NI
*
WalkingDistance_3
*
Dummy_Choice_No_Info
V
[[
'alt3'
]]
=
-
(
b_mu_rent
+
mu_rent_treated
*
Dummy_Treated
+
mu_rent_vol_treated
*
Dummy_Vol_Treated
+
mu_rent_no_info
*
Dummy_no_info
)
*
(
b_ASC_sq
+
b_mu_natural
*
Naturalness_3
+
b_mu_walking
*
WalkingDistance_3
-
Rent_3
)
+
mu_nat_treated
*
Naturalness_3
*
Dummy_Treated
+
mu_nat_no_info
*
Naturalness_3
*
Dummy_no_info
+
mu_nat_vol_treated
*
Naturalness_3
*
Dummy_Vol_Treated
+
mu_walking_treated
*
WalkingDistance_3
*
Dummy_Treated
+
mu_walking_no_info
*
WalkingDistance_3
*
Dummy_no_info
+
mu_walking_vol_treated
*
WalkingDistance_3
*
Dummy_Vol_Treated
+
mu_ASC_sq_treated
*
Dummy_Treated
+
mu_ASC_sq_vol_treated
*
Dummy_Vol_Treated
+
mu_ASC_sq_no_info
*
Dummy_no_info
-
Rent_3
)
### Define settings for MNL model component
### Define settings for MNL model component
...
@@ -133,7 +151,7 @@ database <- database_full %>% filter(!is.na(Treatment_A)) %>%
...
@@ -133,7 +151,7 @@ database <- database_full %>% filter(!is.na(Treatment_A)) %>%
# ################################################################# #
# ################################################################# #
# estimate model with bfgs algorithm
# estimate model with bfgs algorithm
mxl_wtp_case_
d_rentINT
=
apollo_estimate
(
apollo_beta
,
apollo_fixed
,
mxl_wtp_case_
c
=
apollo_estimate
(
apollo_beta
,
apollo_fixed
,
apollo_probabilities
,
apollo_inputs
,
apollo_probabilities
,
apollo_inputs
,
estimate_settings
=
list
(
maxIterations
=
400
,
estimate_settings
=
list
(
maxIterations
=
400
,
estimationRoutine
=
"bfgs"
,
estimationRoutine
=
"bfgs"
,
...
@@ -144,6 +162,6 @@ database <- database_full %>% filter(!is.na(Treatment_A)) %>%
...
@@ -144,6 +162,6 @@ database <- database_full %>% filter(!is.na(Treatment_A)) %>%
# ################################################################# #
# ################################################################# #
#### MODEL OUTPUTS ##
#### MODEL OUTPUTS ##
# ################################################################# #
# ################################################################# #
apollo_saveOutput
(
mxl_wtp_case_
d_rentINT
)
apollo_saveOutput
(
mxl_wtp_case_
c
)
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment