- 阅读权限
- 255
- 威望
- 0 级
- 论坛币
- 20 个
- 通用积分
- 0
- 学术水平
- 0 点
- 热心指数
- 0 点
- 信用等级
- 0 点
- 经验
- 2189 点
- 帖子
- 21
- 精华
- 0
- 在线时间
- 43 小时
- 注册时间
- 2018-4-20
- 最后登录
- 2019-5-24
|
xjg1983 发表于 2018-7-12 18:10 
这个算一次,好像要挺久的,我没算完。直接在命令窗口打入diag(vc)即可。 我输入diag(vc),显示找不到对象“vc”,我换了样本量比较少的数据,这个结果很快就出来了,麻烦您在帮我看一下,真的非常感谢!! - n=100
- x<-rgamma(300,1.2,0.8)
- x<-sample(x)
- x1<-x[1:100]
- x2<-x[101:200]
- x3<-x[201:300]
- x<-cbind(x1,x2,x3)
- const<-rep(1,n)
- x<-cbind(const,x)
- beta<-array(c(0.67,-1.53,-1.2,-0.9),c(1,4))
- y<-NULL
- p<-NULL
- for(i in 1:n){
- p[i]<-1/(1+exp(-(beta%*%as.matrix(x[i,]))))
- y[i]<-rbinom(1,1,p[i])
- }
- data<-data.frame(cbind(y,x))
- dat1<-data[data$y==1,]
- dat2<-data[data$y==0,]
- alpha<-array(c(1,1.33,0.89,1.14),c(1,4))#要不全为正,要不都为负
- y1<-NULL
- for(j in 1:nrow(dat1)){
- y1[j]=alpha%*%as.matrix(x[j,])
- dat1$y[j]<-y1[j]
- }
- data_1<-rbind(dat1,dat2)
- train_data<-data_1[sample(nrow(data_1)),]
- #定义似然函数
- logLikFun<-function(param){
- beta<-array(param[1:4],c(1,4))
- alpha<-array(param[5:8],c(1,4))
- p<-NULL
- mu<-NULL
- sigma<-NULL
- logl<-NULL
- for (i in 1:nrow(train_data))
- {
- p[i]=exp(beta%*%as.matrix(x[i,]))/(1+exp(beta%*%as.matrix(x[i,])))
- if(y[i]==0){
- logl[i]=log(1-p[i])
- }else{
- k<-runif(1,1,10)
- sigma[i]=k^2*exp(alpha%*%as.matrix(x[i,]))#尺度参数
- mu=k^(-2)
- logl[i]=log(p[i])-mu*log(sigma[i])+(mu-1)*log(y[i])-lgamma(mu)-y[i]/sigma[i]
- }
- }
- logL<-sum(logl)
- return(logL)
- }
- beta<-array(c(2,-0.2,0.2,3.34),c(1,4))
- alpha<-array(c(-1.5,-0.23,0,3,2.9),c(1,4))
- logLikFun(c(beta,alpha))
- library(maxLik)
- library(miscTools)
- MLE<-maxLik(logLikFun,start=c(beta,alpha))
复制代码
|
|