R Studio 'x' должен быть массивом как минимум двух измерений - PullRequest
0 голосов
/ 16 февраля 2020

Я написал код ниже. И ошибка говорит:

Ошибка в colSums (SCar * log (PCar) + SBus * log (PBus) + STaxi * log (PTaxi) +: 'x' должен быть массивом по крайней мере два измерения

Моя версия 3.6.2. Я не могу справиться с ошибкой. Буду признателен, если кто-нибудь сможет мне помочь. Спасибо.

data <-read.csv("model1.csv",header=T)

    hh <-nrow(data)

    fr <-function(x) {

      Car <-x[1]
      Bus <-x[2]
      Taxi <-x[3]
      Sharedtaxi <-x[4]

      Age <-x[5]
      Drlicense <-x[6]
      Work <-x[7]
      Income <-x[8]
      Cost <-x[9]
      Distance <-x[10]
      Time <-x[11]
      PosAuto <-x[12]

      LL=0

      cCar <-Car*matrix(1,nrow=hh,ncol=1)
      cBus <-Bus*matrix(1,nrow=hh,ncol=1)
      cTaxi <-Taxi*matrix(1,nrow=hh,ncol=1)
      cSharedtaxi <-Sharedtaxi*matrix(1,nrow=hh,ncol=1)

      cAge <-Age*(data$X.Age)/10
      cPosAuto <-PosAuto*(data$X.PosAuto)
      cDrlicense <-Drlicense*(data$X.Drlicense)
      cWork <-Work*(data$X.Work)
      cIncome <-Income*(data$X.Income)/100000
      cCostCar <-Car*(data$X.CostCar)/100
      cCostBus <-Bus*(data$X.CostBus)/100
      cCostTaxi <-Taxi*(data$X.CostTaxi)/100
      cCostSharedtaxi <-Sharedtaxi*(data$X.CostSharedtaxi)/10
      cDistance <-Distance*(data$X.Distance)/10
      cTimeCar <-Time*(data$X.CarMin)/10
      cTimeBus <-Time*(data$X.BusMin)/10
      cTimeTaxi <-Time*(data$X.TaxiMin)/10
      cTimeSharedtaxi <-Time*(data$X.SharedtaxiMin)/10
      cTimeWalk <-Time*(data$X.WalkMin)/100

      vCar <-cCar+cAge+cWork+cIncome+cDistance+cTimeCar
      vBus <-cBus+cPosAuto+cAge+cIncome+cCostBus+cDistance+cTimeBus
      vTaxi <-cTaxi+cIncome+cCostTaxi+cDistance
      vSharedtaxi <-cSharedtaxi+cIncome+cCostSharedtaxi+cDistance
      vWalk <-cIncome+cDistance+cTimeWalk

      PosCar <-data$X.PosAuto*exp(vCar)
      PosBus <-exp(vBus)
      PosTaxi <-exp(vTaxi)
      PosSharedtaxi <-exp(vSharedtaxi)
      PosWalk <-exp(vWalk)

    deno <-PosCar+PosBus+PosTaxi+PosSharedtaxi+PosWalk
    PCar <-PosCar/deno
    PBus <-PosBus/deno
    PTaxi <-PosTaxi/deno
    PSharedtaxi <-PosSharedtaxi/deno
    PWalk <-PosWalk/deno

    PCar <-(PCar!=0)*PCar+(PCar==0)
    PBus <-(PBus!=0)*PBus+(PBus==0)
    PTaxi <-(PTaxi!=0)*PTaxi+(PTaxi==0)
    PSharedtaxi <-(PSharedtaxi!=0)*PSharedtaxi+(PSharedtaxi==0)
    PWalk <-(PWalk!=0)*PWalk+(PWalk==0)

    SCar <-(data$X.FModeFr==1)
    SBus <-(data$X.FModeFr==2)
    STaxi <-(data$X.FModeFr.==3)
    SSharedtaxi <-(data$X.FModeFr.==4)
    SWalk <-(data$X.FModeFr.==5)

    OutPut <-data.frame(PCar,PBus,PTaxi,PSharedtaxi,PWalk,SCar,SBus,STaxi,SSharedtaxi,SWalk)
    write.table(OutPut,"Output.csv",quote=F,col.names=T,append=T,sep=",")

    LL <-colSums(SCar*log(PCar)+SBus*log(PBus)+STaxi*log(PTaxi)+SSharedtaxi*log(PSharedtaxi)+SWalk*log(PWalk))
    }

    b0 <-numeric(12)
    res_BFGS <-optim(b0,fr, method="BFGS", hessian=TRUE, control=list(fnscale=-1))

    show <-function(res,b0){
      b <-res$par
      hhh <-res$hessian
      tval <-b/sqrt(-diag(solve(hhh)))

      L0 <-hh*log(1/5)
      LL <-res$value

      print(b)
      print(tval)
      print(hhh)
      print(L0)
      print(LL)
      print((L0-LL)/L0)
      print((L0-(LL-length(b)))/L0)
    }

    show(res_BFGS,b0)

...