【发布时间】:2021-08-17 19:00:21
【问题描述】:
我试图使用 R 的 survival 包(clogit 函数)为每个人获取预期的实用程序,但我找不到像 mlogit 的 logsum 这样的简单解决方案。
下面我设置了一个使用mlogit 包的示例。这非常简单:它只需要使用mlogit 函数对变量进行回归,保存输出并将其用作logsum 函数中的参数——如果需要,此vignette 中有一个简短的解释。我想知道clogit 的类似方法。我已经阅读了包装的manual,但我没有掌握执行分析的最合适的功能。
注意 1:我对 mlogit's 之类的函数的偏好与我以后可能需要执行大量回归以及能够在不同场景中执行正确估计的事实有关。
注意 2:我不打算让下面创建的数据集代表数据的行为方式。我只是为了在 logit 回归后执行函数而设置示例。
**
library(survival)
library(mlogit)
#creating a dataset
df_test=data.frame(id=rep(1:20,each=4),
choice=rep(c("train","car","plane","boat")),
distance=c(rnorm(80)*10),
)
f=function(x,y,z) {
v=round(rnorm(x,y,z))
while(sum(v)>1 | sum(v)==0) {
v=round(rnorm(x,y,z))
}
return(v)
}
result1=c()
for (i in 1:20) {
result=f(4,0.5,0.1)
result1=c(result,result1)
}
df_test$distance=ifelse(df_test$distance<0,df_test$distance*-1,df_test$distance)
df_test$price = 0
df_test$price[df_test$choice=="plane"] = rnorm(20, mean = 300, sd=30)
df_test$price[df_test$choice=="car"] = rnorm(20, mean = 50, sd=10)
df_test$price[df_test$choice=="boat"] = rnorm(20, mean = 100, sd=15)
df_test$price[df_test$choice=="train"] = rnorm(20, mean = 120, sd=25)
df_test$choice2=result1
mlog=mlogit(choice2 ~ distance + price , data = df_test)
#the function logsum generates expected utility for each individual
logsum(mlog)
#so what would be adequate alternative with survival's clogit? I set an exemple below of
#of what i would like to regress and then perform something like logsum()
clog=clogit(choice2 ~ distance + price + as.factor(choice), strata(id), data = df_test)
**
【问题讨论】: