楼主: F→i_d^0^猪
1698 7

[问答] R镶嵌循环代码求助 [推广有奖]

  • 1关注
  • 1粉丝

本科生

66%

还不是VIP/贵宾

-

威望
0
论坛币
179 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
13450 点
帖子
45
精华
0
在线时间
162 小时
注册时间
2012-1-18
最后登录
2019-9-26

楼主
F→i_d^0^猪 发表于 2013-3-25 10:59:22 |AI写论文
20论坛币
急!求助!求这个函数的R语言代码
QQ截图20130327172432.jpg
以上变量均是已知的n维向量

QQ截图20130325104945.jpg (15.55 KB)

QQ截图20130325104945.jpg

最佳答案

IntheRed 查看完整内容

ok, it's yj, then i believe this should work: sample code: //Tvec=datat //delta=datadelta //yvec=datay //suppose your data are loaded in Tvec (for T), delta, and yvec (for y) compTij=function(ti,tj) { return(tj>=ti) } indTmat=sapply(Tvec, compTij, tj=Tvec) sumTy=function(tv,yv) { return(sum(tv*exp(yv))) } lsum=apply(indTmat,2,sumTy,yv=yvec) result=sum(delta*(yvec-log(lsum)))
关键词:R语言

沙发
IntheRed 发表于 2013-3-25 10:59:23
ok, it's yj, then i believe this should work:

sample code:
//Tvec=datat
//delta=datadelta
//yvec=datay
//suppose your data are loaded in Tvec (for T), delta, and yvec (for y)

compTij=function(ti,tj) { return(tj>=ti) }
indTmat=sapply(Tvec, compTij, tj=Tvec)

sumTy=function(tv,yv) { return(sum(tv*exp(yv))) }
lsum=apply(indTmat,2,sumTy,yv=yvec)

result=sum(delta*(yvec-log(lsum)))

藤椅
shaoshoutian 发表于 2013-3-26 23:14:23
没有高手吗?

板凳
IntheRed 发表于 2013-3-27 04:07:48
有必要用嵌套循环吗?R的vector,matrix操作非常方便,效率。直接用vector operation就好了。就是那个indicator function I(Tj>=Ti)稍微麻烦一点。

sample code:
//Tvec=datat
//delta=datadelta
//yvec=datay
//suppose your data are loaded in Tvec (for T), delta, and yvec (for y)

compTij=function(ti,tj) { return(sum(tj>=ti)) }
indTv=sapply(Tvec, compTij, tj=Tvec)

result=sum(delta*(yvec-log(indTv*exp(yvec))))

其实公式写为
sum_i deltai * [yi - log[exp(yi) sum_j I(Tj>=Ti)]]
会好一点。

报纸
F→i_d^0^猪 发表于 2013-3-27 12:03:51
IntheRed 发表于 2013-3-27 04:07
有必要用嵌套循环吗?R的vector,matrix操作非常方便,效率。直接用vector operation就好了。就是那个indic ...
可以解释一下
return(sum(tj>=ti))
indTv=sapply(Tvec, compTij, tj=Tvec)
这两个的意思吗?
运算出来的结果和我手算的结果不符。

地板
IntheRed 发表于 2013-3-27 12:14:32
F→i_d^0^猪 发表于 2013-3-27 12:03
可以解释一下
return(sum(tj>=ti))
indTv=sapply(Tvec, compTij, tj=Tvec)
tested in R, looks ok. assume
I(Tj>=Ti)=1  if Tj>=Ti
              =0  otherwise

你的公式有点奇怪,最后一项到底是 exp(yi), 还是exp(yj)?
yi 的话,为什么不放在对j求和之外?yj要换个方法算。

7
showbox 发表于 2013-3-27 15:04:41
楼主是不是写错公式了,后面一个 exp(y_i)可以 提出来和前面的 y_i消掉的

8
F→i_d^0^猪 发表于 2013-3-27 17:24:08
IntheRed 发表于 2013-3-27 12:14
tested in R, looks ok. assume
I(Tj>=Ti)=1  if Tj>=Ti
              =0  otherwise
不好意思,是yj,这个打错了~我修改一下~

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

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