楼主: 耕耘使者
2883 14

[问答] 一个if循环的小问题 [推广有奖]

贵宾

已卖:5006份资源

学术权威

39%

还不是VIP/贵宾

-

威望
4
论坛币
1811021 个
通用积分
171.7911
学术水平
109 点
热心指数
173 点
信用等级
87 点
经验
93428 点
帖子
4549
精华
0
在线时间
2848 小时
注册时间
2006-4-6
最后登录
2025-7-12

楼主
耕耘使者 发表于 2014-2-9 13:21:08 |AI写论文
60论坛币
想编一个小程序,在0到2的范围内,随机生成两个标准正态分布的数,但不成功。
  1. xstar=rnorm(2)
  2. for(i in 1:2)
  3. if((xstar[i]<=2)&(xstar[i]>0)){x[i]=xstar[i]}
  4. x
复制代码

最佳答案

ntsean 查看完整内容

你这个是reject sampling, 要考虑sample不到的情况,用while循环 rnormtrunc
关键词:小问题 标准正态分布 STAR 正态分布 Norm 正态分布 程序

本帖被以下文库推荐

  • · R学习|主题: 262, 订阅: 161

沙发
ntsean 发表于 2014-2-9 13:21:09
你这个是reject sampling, 要考虑sample不到的情况,用while循环

rnormtrunc <- function(low, high) {
        x <- rnorm(1)
        while (x < low || x > high) x <- rnorm(1)
        x
}

x <- numeric(2)
for (i in seq_along(x)) x[i] <- rnormtrunc(0, 2)
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
耕耘使者 + 1 + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

藤椅
求证1加1 发表于 2014-2-9 14:49:23
“在0到2的范围内,随机生成两个标准正态分布的数”这句话本身就是有问题的,既然是服从正态分布,又何来有界。
已有 1 人评分热心指数 收起 理由
耕耘使者 + 1 热心帮助其他会员

总评分: 热心指数 + 1   查看全部评分

个人主页,欢迎订阅http://chenangliu.info/

板凳
ntsean 发表于 2014-2-9 15:42:38
dasad

报纸
yywan0913 在职认证  发表于 2014-2-9 16:14:03
  1. a=rnorm(20)
  2. a=a[a<=2&a>0]
  3. x=sample(a,2)
  4. x
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
耕耘使者 + 1 + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

是什么给了你自信

地板
耕耘使者 发表于 2014-2-9 17:26:50
求证1加1 发表于 2014-2-9 14:49
“在0到2的范围内,随机生成两个标准正态分布的数”这句话本身就是有问题的,既然是服从正态分布,又何来有 ...
  截尾分布,今天上午碰到的。

7
求证1加1 发表于 2014-2-9 17:53:09
耕耘使者 发表于 2014-2-9 17:26
截尾分布,今天上午碰到的。
http://www.stat.ucla.edu/~dinov/ ... jectionSampling.pdf
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
耕耘使者 + 1 + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

个人主页,欢迎订阅http://chenangliu.info/

8
kaifengedu 发表于 2014-2-9 20:06:40
建议用while循环:
  1. normtrunc <- function(n, a, b, mu, sig){
  2.   x <- rnorm(n, mu, sig)
  3.   xvalue <- (x < a) | (x > b)
  4.   while(sum(xvalue) > 0){
  5.     x[xvalue] <- rnorm(sum(xvalue), mu, sig)
  6.     xvalue <- (x < a) | (x > b)
  7.   }
  8.   return(x)
  9. }

  10. n <- 2
  11. a <- 0
  12. b <- 2
  13. mu <- 0
  14. sig <- 1
  15. normtrunc(n, a, b, mu, sig)
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
耕耘使者 + 1 + 1 + 1 精彩帖子

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

9
kerrydu 发表于 2014-2-9 20:28:05
求证1加1 发表于 2014-2-9 17:53
http://www.stat.ucla.edu/~dinov/courses_students.dir/04/Spring/Stat233.dir/STAT233_notes.dir/Rejec ...
学习了

10
耕耘使者 发表于 2014-2-9 23:12:17
ntsean 发表于 2014-2-9 15:42
你这个是reject sampling, 要考虑sample不到的情况,用while循环

rnormtrunc
ntsean兄,能否详细解释一下每一步?
请原谅我是初学者,谢谢。

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

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