楼主: veronicalq
15130 5

[问答] 急!急!急!错误于R语言积分运算符中有非数值参数 [推广有奖]

  • 0关注
  • 0粉丝

已卖:1份资源

大专生

43%

还不是VIP/贵宾

-

威望
0
论坛币
4276 个
通用积分
0
学术水平
1 点
热心指数
2 点
信用等级
1 点
经验
837 点
帖子
38
精华
0
在线时间
46 小时
注册时间
2009-12-9
最后登录
2015-7-27

楼主
veronicalq 发表于 2014-6-15 21:07:05 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
错误如下:
错误于1 - integrate(dnorm, -Inf, as.numeric(g[i, j] - h[i, j]), mean = 0,  :
  二进列运算符中有非数值参数
部分代码如下:
d <- ParamData1 %*% TData3 + ParamData2 %*% TData8
e <- ParamData1 %*% TData4 + ParamData2 %*% TData9
f <- ParamData1 %*% TData5 + ParamData2 %*% TData10
g <- ParamData1 %*% TData6 + ParamData2 %*% TData11
h <- ParamData1 %*% TData7 + ParamData2 %*% TData12
##calculate the expected utility of each alternative
for (i in 1:10000){
for (j in 1:283){
Eh <- 0
## Eg <- h
Ef[j] <- g[i,j] * integrate(dnorm,-Inf, as.numeric(g[i,j] - h[i,j]), mean = 0, sd = 2)$value + h[i,j] * (1-integrate (dnorm,-Inf, as.numeric(g[i,j] - h[i,j]), mean = 0, sd = 2))$value
Ee[j] <- f[i,j] * integrate(dnorm, -Inf, as.numeric(f[i,j] - Ef[i,j]), mean = 0, sd = 3)$value + Ef[i,j] * (1 - integrate(dnorm, -Inf, as.numeric(f[i,j] - Ef[i,j]), mean = 0, sd = 3))$value
Ed[j] <- e[i,j] * integrate(dnorm, -Inf, as.nuemric(e[i,j] - Ee[i,j]), mean = 0, sd = 4)$value + Ee[i,j] * (1 - integrate(dnorm, -Inf, as.numeric(e[i,j] - Ee[i,j]), mean = 0, sd = 4))$value
##Calculate the probability of each alternative at each junction
PPPd[j] = integrate(dnorm, -Inf, d[i,j] - Ed[i,j], mean = 0, sd = 5)$value
PPPe[j] = integrate(dnorm, -Inf, e[i,j] - Ee[i,j], mean = 0, sd = 4)$value
PPPf[j] = integrate(dnorm, -Inf, f[i,j] - Ef[i,j], mean = 0, sd = 3)$value
PPPg[j] = integrate(dnorm, -Inf, g[i,j] - h[i,j], mean = 0, sd = 2)$value
PPPh[j] <- 1
。。。。
j<-j+1}
i <- i+1}
紧急求助!可赠金币!

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:R语言 运算符 integrate numeric dnorm

沙发
veronicalq 发表于 2014-6-15 21:15:55
补充说明下:
就是求了d,e,f,g,h 5个10000*283参数矩阵/
分别取5个矩阵其中的元素,简单计算后作为积分的上限。
求这个积分,循环1万次又内循环283次

藤椅
gssdzc 在职认证  发表于 2014-6-15 21:17:28
这个需要完成代码,然后在R中跑才能说,这样根本看不清楚

板凳
veronicalq 发表于 2014-6-15 21:51:53
这个,完整代码,需要数据文件哪~没办法发啊~数据,就是数据导入不进来,您看看吧!多谢
##Read parameters set data
ParamData <- read.csv("Coeffi.csv", header = TRUE)
##count the number of row of ParamData
rr <- nrow(ParamData)
print(rr)
##Read choice set data
Data<-read.csv("Sequence.csv",header=TRUE)
##count the number of row
hh<-nrow(Data)
print(hh)
##number of choice alternative
##ch <- 5
##Initial value of variables
Sd <- sum(Data[,2]== 1); Se <- sum(Data[,2]== 2);Sf <- sum(Data[,2]== 3); Sg <- sum(Data[,2]== 4); Sh <- sum(Data[,2]== 5)
cat("d:",Sd," e:",Se," f:",Sf," g:",Sg," h:",Sh,"\n")
##Transfer data for easily calculation
TData <- t(Data)
ParamData1 <- matrix (ParamData[,2], nrow = 10000, ncol = 1)
ParamData2 <- matrix (ParamData[,3], nrow = 10000, ncol = 1)
TData3 <- matrix(TData[3,], nrow = 1, ncol = 283)
TData4 <- matrix(TData[3,], nrow = 1, ncol = 283)
TData5 <- matrix(TData[5,], nrow = 1, ncol = 283)
TData6 <- matrix(TData[6,], nrow = 1, ncol = 283)
TData7 <- matrix(TData[7,], nrow = 1, ncol = 283)
TData8 <- matrix(TData[8,], nrow = 1, ncol = 283)
TData9 <- matrix(TData[9,], nrow = 1, ncol = 283)
TData10 <- matrix(TData[10,], nrow = 1, ncol = 283)
TData11 <- matrix(TData[11,], nrow = 1, ncol = 283)
TData12 <- matrix(TData[12,], nrow = 1, ncol = 283)
##calculate utility of each alternative
d <- ParamData1 %*% TData3 + ParamData2 %*% TData8
e <- ParamData1 %*% TData4 + ParamData2 %*% TData9
f <- ParamData1 %*% TData5 + ParamData2 %*% TData10
g <- ParamData1 %*% TData6 + ParamData2 %*% TData11
h <- ParamData1 %*% TData7 + ParamData2 %*% TData12
##calculate the expected utility of each alternative
for (i in 1:10000){
for (j in 1:283){
Eh <- 0
## Eg <- h
Ef[j] <- g[i,j] * integrate(dnorm,-Inf, as.numeric(g[i,j] - h[i,j]), mean = 0, sd = 2)$value + h[i,j] * (1-integrate (dnorm,-Inf, as.numeric(g[i,j] - h[i,j]), mean = 0, sd = 2))$value
Ee[j] <- f[i,j] * integrate(dnorm, -Inf, as.numeric(f[i,j] - Ef[i,j]), mean = 0, sd = 3)$value + Ef[i,j] * (1 - integrate(dnorm, -Inf, as.numeric(f[i,j] - Ef[i,j]), mean = 0, sd = 3))$value
Ed[j] <- e[i,j] * integrate(dnorm, -Inf, as.nuemric(e[i,j] - Ee[i,j]), mean = 0, sd = 4)$value + Ee[i,j] * (1 - integrate(dnorm, -Inf, as.numeric(e[i,j] - Ee[i,j]), mean = 0, sd = 4))$value
##Calculate the probability of each alternative at each junction
PPPd[j] = integrate(dnorm, -Inf, d[i,j] - Ed[i,j], mean = 0, sd = 5)$value
PPPe[j] = integrate(dnorm, -Inf, e[i,j] - Ee[i,j], mean = 0, sd = 4)$value
PPPf[j] = integrate(dnorm, -Inf, f[i,j] - Ef[i,j], mean = 0, sd = 3)$value
PPPg[j] = integrate(dnorm, -Inf, g[i,j] - h[i,j], mean = 0, sd = 2)$value
PPPh[j] <- 1
##Calculate the final probability of each alternative
PPd <- integrate(dnorm, -Inf, d[i,j] - Ed[i,j], mean = 0, sd = 5)$value
PPe <- PPPe[j] * (1 - PPPd[j])
PPf <- PPPf[j] * (1 - PPPd[j]) * (1 - PPPe[j])
PPg <- PPPg[j] * (1 - PPPd[j]) * (1 - PPPe[j]) * (1 - PPPf[j])
PPh <- PPPh[j] * (1 - PPPd[j]) * (1 - PPPe[j]) * (1 - PPPf[j]) * (1 - PPPg[j])
##
Pd[j] <- (PPd !=0)*PPd + (PPd==0)
Pe[j] <- (PPe !=0)*PPe + (PPe==0)
Pf[j] <- (PPf !=0)*PPf + (PPf==0)
Pg[j] <- (PPg !=0)*PPg + (PPg==0)
Ph[j] <- (PPh !=0)*PPh + (PPh==0)

##selection result
Cd <- Data[,2]== 1
Ce <- Data[,2]== 2
Cf <- Data[,2]== 3
Cg <- Data[,2]== 4
Ch <- Data[,2]== 5
##log-likelihood function
LL[i] <- colSums( Cd*log(Pd) + Ce*log(Pe) + Cf*log(Pf) + Cg*log(Pg) + Ch*log(Ph) )
j = j+1
}
i = i+1
}

报纸
veronicalq 发表于 2014-6-23 09:34:37
这个问题已解决~错误于读取数据从第一行,第一列开始。但数据文件第一行和第一列是标头,字符~

地板
hmzzz 发表于 2016-1-14 22:27:43
veronicalq 发表于 2014-6-23 09:34
这个问题已解决~错误于读取数据从第一行,第一列开始。但数据文件第一行和第一列是标头,字符~
我在做一个回归,12个自变量,1个因变量。错误提示也是 数值'envir'参数的长度不是一。但我反复确认不是第一行第一列的问题
请问还有其他什么可能

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 06:44