楼主: 耕耘使者
2415 14

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

贵宾

学术权威

39%

还不是VIP/贵宾

-

威望
4
论坛币
1812817 个
通用积分
148.1096
学术水平
109 点
热心指数
173 点
信用等级
87 点
经验
93394 点
帖子
4550
精华
0
在线时间
2845 小时
注册时间
2006-4-6
最后登录
2024-5-8

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
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-14 02:20