楼主: aaaaaaaa呵呵
5311 7

[问答] 使用outer画图报错: 被替换的项目不是替换值长度的倍数 [推广有奖]

  • 0关注
  • 0粉丝

VIP1

小学生

64%

还不是VIP/贵宾

-

威望
0
论坛币
900 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
45 点
帖子
6
精华
0
在线时间
15 小时
注册时间
2015-7-22
最后登录
2016-3-21

楼主
aaaaaaaa呵呵 发表于 2016-3-8 22:48:44 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
准备画次序统计量的二维联合密度函数 在最后绘图的时候 程序报错: 被替换的项目不是替换值长度的倍数
了解到是因为函数中有f[x-y>=0],f[x-y<0]这么一个需要比较大小的步骤才出现这个报错
但是不知道具体该怎么改进
希望各位能给出指导

感激不尽!
程序如下:
n=1000
y=rnorm(n,0,1)
y1=sort(y)
k<-20
j<-300  #选择k=20,j=300
fun.cixu2=function(x,y)
{A=c(n,k-1,j-k-1,n-j)
B=c(0,0,0,0)
for (l in 1:4) {
  for (i in 1:A[l]) {
    B[l]=B[l]+log(i)
  }}
b=exp(B[1]-B[2]-B[3]-B[4]) #通过转化计算常数项的值            
f=rep(NA,length(x))
f[x-y<0]=b*pnorm(x,0,1)^(k-1)*(1-pnorm(x,0,1))^(n-j)*dnorm(x,0,1)*dnorm(y,0,1)*(pnorm(y,0,1)-pnorm(x,0,1))^(j-1-k) #判断x,y的大小并代入计算
f[x-y>=0]=0 #若x>=y,则函数值为0
return(f)
}
fun.cixu2(y1[20],y1[300]) #取之前得到的随机数进行代入计算
x <- seq(-3,1,length.out = 100)
y <- seq(-3,1,length.out = 100)
z= outer(x,y,fun.cixu2)
persp(x=seq(-3,1,length.out = 100),y=seq(-3,1,length.out = 100),z,theta=-25,phi=25,col='lightblue') #画出二维联合密度图像


二维码

扫码加我 拉你入群

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

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

关键词:Out 密度函数 统计量 项目

回帖推荐

jiangbeilu 发表于7楼  查看完整内容

这段代码,是因为算出来的temp长度是100,而你的f[x-y

沙发
jiangbeilu 学生认证  发表于 2016-3-9 10:46:05
你算一下这个咯:
  1. x <- seq(-3,1,length.out = 100)
  2. y <- seq(-3,1,length.out = 100)
  3. fun.cixu2(x,y) #取之前得到的随机数进行代入计算
复制代码

在我这里,结果全部是0,说明你的函数算法应该是有问题的吧

藤椅
aaaaaaaa呵呵 发表于 2016-3-10 00:23:52
恩恩我试了一下 因为x-y=0 所以得到的结果全都为0
其实这个函数我是想表达 对于两个自变量x,y  如果x>=y 那么函数值为0  如果 x<y 那么函数值按照上面规定的式子计算 但是因为我是新手吧 没用程序表达出我本来的意思 我本来用if语句判断的 但是画图的时候上面提示说In if (x - y < 0) { : the condition has length > 1 and only the first element will be used
所以就不知道怎么改了 改来改去都是错的。。
谢谢你的回复哟~!

板凳
aaaaaaaa呵呵 发表于 2016-3-10 00:24:47
jiangbeilu 发表于 2016-3-9 10:46
你算一下这个咯:

在我这里,结果全部是0,说明你的函数算法应该是有问题的吧
恩恩我试了一下 因为x-y=0 所以得到的结果全都为0
其实这个函数我是想表达 对于两个自变量x,y  如果x>=y 那么函数值为0  如果 x<y 那么函数值按照上面规定的式子计算 但是因为我是新手吧 没用程序表达出我本来的意思 我本来用if语句判断的 但是画图的时候上面提示说In if (x - y < 0) { : the condition has length > 1 and only the first element will be used
所以就不知道怎么改了 改来改去都是错的。。
谢谢你的回复哟~!
第一次在这里提问,还不太会用

报纸
jiangbeilu 学生认证  发表于 2016-3-10 09:43:11
aaaaaaaa呵呵 发表于 2016-3-10 00:24
恩恩我试了一下 因为x-y=0 所以得到的结果全都为0
其实这个函数我是想表达 对于两个自变量x,y  如果x ...
把你的函数改成这样的:
  1. fun.cixu2=function(x,y){
  2.     k=20
  3.     j=300
  4.     n=1000
  5.     A=c(n,k-1,j-k-1,n-j)
  6.     B=rep(0,4)
  7. for (l in 1:4) {
  8.   for (i in 1:A[l]) {
  9.     B[l]=B[l]+log(i)
  10.   }}
  11. b=exp(B[1]-B[2]-B[3]-B[4]) #通过转化计算常数项的值            
  12. f=rep(0,length(x))
  13. temp=b*pnorm(x,0,1)^(k-1)*(1-pnorm(x,0,1))^(n-j)*dnorm(x,0,1)*dnorm(y,0,1)*(pnorm(y,0,1)-pnorm(x,0,1))^(j-1-k)
  14. f[x-y<0]=temp[x-y<0]
  15. #判断x,y的大小并代入计算
  16. #f[x-y>=0]=0 #若x>=y,则函数值为0
  17. return(f)
  18. }
复制代码
另外:你的x与y是完全相等的,当然肯定全部是0啊。


Tomorrow is another day!

地板
aaaaaaaa呵呵 发表于 2016-3-10 23:18:16
jiangbeilu 发表于 2016-3-10 09:43
把你的函数改成这样的:
另外:你的x与y是完全相等的,当然肯定全部是0啊。
你好,谢谢你的回复,我不太理解这样的改动是为什么呢。
我想要解决的问题主要是 我画不出来这个函数的图象。
将数值带进去计算的话,结果应该是没错的 哦其中xy的取值不是向量,是实数。
我写成那样的形式是因为 之前用if语句 画不出来图。。我就改成判断f[x-y<0]这样的了。。还是画不出来
你是第一个回复我的人 还不厌其烦 谢谢你呀。

7
jiangbeilu 学生认证  发表于 2016-3-10 23:21:21
aaaaaaaa呵呵 发表于 2016-3-10 23:18
你好,谢谢你的回复,我不太理解这样的改动是为什么呢。
我想要解决的问题主要是 我画不出来这个函数的图 ...
  1. temp=b*pnorm(x,0,1)^(k-1)*(1-pnorm(x,0,1))^(n-j)*dnorm(x,0,1)*dnorm(y,0,1)*(pnorm(y,0,1)-pnorm(x,0,1))^(j-1-k)
  2. f[x-y<0]=temp[x-y<0]
复制代码
这段代码,是因为算出来的temp长度是100,而你的f[x-y<0]的长度是小于100的,不能直接那样赋值,需要用以上代码完成这个赋值过程.

8
aaaaaaaa呵呵 发表于 2016-3-10 23:41:24
jiangbeilu 发表于 2016-3-10 23:21
这段代码,是因为算出来的temp长度是100,而你的f[x-y
谢谢你,我明白了!

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

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