八年车龄可以做滴滴顺风车要求车龄吗车吗?

 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
利用SPSS产生随机数字的常用方法
下载积分:86
内容提示:利用SPSS产生随机数字的常用方法
文档格式:PDF|
浏览次数:469|
上传日期: 04:10:14|
文档星级:
全文阅读已结束,如果下载本文需要使用
 86 积分
下载此文档
该用户还上传了这些文档
利用SPSS产生随机数字的常用方法
官方公共微信如何通过SPSS软件实现随机化过程
随机过程是临床研究过程中至关重要的一部分。在前面的内容中我们也讲过了很多关于随机和随机数的内容,请大家参阅旧的目录。本期将跟大家一起讨论一下如何通过来实现随机化过程。
在说之前,先跟大家聊一聊随机数的类型,随机数有真随机数(True Random Number)和伪随机数(Pseudo Random
Number)之分。我们平时所使用的无论什么程序产生的随机数都是伪随机数,它是有“种子”的,种子决定了随机数的固定序列。而真随机数很多情况下只能看老天的眼色,比如掷骰子、布朗运动、量子效应、放射性衰变等等,所以说我们在临床研究中常用的软件产生随机数的方法都是伪随机数,伪随机数虽然不具有完全的随机性,但是已经足够用了。
总体上SPSS为随机化提供了两类过程,第一类过程直接进行随机抽样或分组,第二类过程只生成随机数字,需要研究者依据随机数字自己去进行随机抽样或分组。
在上述过程中,我们都可以选择采用“随机种子数”或“固定种子数”两种方式来产生随机数。采用“随机种子数”时,随机数字不可重现;采用“固定种子数”时,随机数字可以重现出来。由于的syntax不是所有人都常用,在此就不说了,其实大家可以通过点击paste选项保存出任意计算过程的syntax语句。下面分别介绍其它三种随机数生成方法:
1、利用“选择个案”窗口实现
a.设定种子数:顺序点击转换、随机数字生成器,勾选Mersenne
Twister(相比兼容SPSS12更可靠),勾选固定值(设定一个自己的种子数),点击确定。这样就设定好了种子数。
b.依次点击数据、选择个案,点选随机个案样本(D),点击样本,点选其中一个并填入数值,点击继续,点击确定即可。如下图:
2、利用“复杂抽样”窗口来实现;
复杂抽样窗口可实现分层抽样,并保存出抽样计划和抽样结果文件。按照其提示一步步点击即可。为了简化,后面过程不再截图。
3、利用“计算变量”窗口来实现
a.设定种子数,方法同上。
b.点击转换、计算变量,在目标变量中给变量起一个名字,在函数组中点选随机数字,点选任意一个随机函数,填入适当的条件,点击确定即可。我个人常用Rv.Normal或Rv.Uniform函数。
c.获得随机数字之后,你可以采用任意规则去进行和分组,当然这个规则是你在生成随机数字之前就定好的,如你打算选取排序前50%的个案入A组等。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。Categories
891011121314
15161718192021
22232425262728
by pluskid, on , in &&&&
快三个月没有写日志了,大概是我开始认真写 blog 来第一次,也是因为发生了一些预料之外的事情,中断了许久,到后来又一直非常非常忙,不过我终于又爬上来冒个泡了,表明我还活着。
第二点要澄清的是,我这里并不是要讲“伪随机”、“真随机”这样的问题,而是关于如何生成服从某个概率分布的随机数(或者说 sample)的问题。比如,你想要从一个服从正态分布的随机变量得到 100 个样本,那么肯定抽到接近其均值的样本的概率要大许多,从而导致抽到的样本很多是集中在那附近的。当然,要解决这个问题,我们通常都假设我们已经有了一个生成 0 到 1 之间均匀分布的随机数的工具,就好像
给我们的结果那样,事实上许多时候我们也并不太关心它们是真随机数还是伪随机数,看起来差不多就行了。
现在再回到我们的问题,看起来似乎是很简单的,按照概率分布的话,只要在概率密度大的地方多抽一些样本不就行了吗?可是具体要怎么做呢?要真动起手来,似乎有不是那么直观了。实际上,这个问题曾经也是困扰了我很久,最近又被人问起,那我们不妨在这里一起来总结一下。为了避免一下子就陷入抽象的公式推导,那就还是从一个简单的具体例子出发好了,假设我们要抽样的概率分布其概率密度函数为
,并且被限制在区间
上,如右上图所示。
好了,假设现在我们要抽 100 个服从这个分布的随机数,直观上来讲,抽出来的接近 3 的数字肯定要比接近 0 的数字要多。那究竟要怎样抽才能得到这样的结果呢?由于我们实际上是不能控制最原始的随机数生成过程的,我们只能得到一组均匀分布的随机数,而这组随机数的生成过程对于我们完全是透明的,所以,我们能做的只有把这组均匀分布的随机数做一些变换让他符合我们的需求。找到下手的点了,可是究竟要怎样变换呢?有一个变换相信大家都是很熟悉的,假设我们有一组
之间的均匀分布的随机数
的话, 就是一组在
之间均匀分布的随机数了,不难想象, 等于某个数
的概率就是
的概率(“等于某个数的概率”这种说法对于连续型随机变量来说其实是不合适的,不过大概可以理解所表达的意思啦)。似乎有一种可以“逆转回去”的感觉了。
于是让我们来考虑更一般的变换。首先,我们知道
的概率密度函数是
,假设现在我们令
,不妨先假定
是严格单调递增的函数,这样我们可以求其逆函数
(也是严格单调递增的)。现在来看变换后的随机变量
会服从一个什么样的分布呢?
这里需要小心,因为这里都是连续型的随机变量,并不像离散型随机变量那样可以说成“等于某个值的概率”,因此我们需要转换为概率分布函数来处理,也就是求一个积分啦:
的概率分布函数为
小于或等于某个特定的值
这件事情是等价于
这件事情的。换句话说, 等于
。于是, 的概率分布函数就可以得到了:
再求导我们就能得到
的概率密度函数:
这样一来,我们就得到了对于一个随机变量进行一个映射
之后得到的随即变量的分布,那么,回到我们刚才的问题,我们想让这个结果分布就是我们所求的,然后再反推得
经过简单的化简就可以得到
。也就是说,把得到的随机数
带入到到函数
中所得到的结果,就是符合我们预期要求的随机数啦!
让我们来验证一下:
#!/usr/bin/python
import numpy as np
import matplotlib.pyplot as plot
X0 = np.random.rand(N)
= np.power(9*X1, 1.0/3)
t = np.arange(0.0, 3.0, 0.01)
plot.plot(t, y, 'r-', linewidth=1)
plot.hist(Y, bins=50, normed=1, facecolor='green', alpha=0.75)
plot.show()
这就没错啦,目的达成啦!让我们来总结一下。问题是这样的,我们有一个服从均匀分布的随机变量
,它的概率密度函数为一个常数
上的分布,那么常数
就直接等于 1 了。现在我们要得到一个随机变量
使其概率密度函数为
,做法就是构造出一个函数
满足(在这里加上了绝对值符号,这是因为
如果不是递增而是递减的话,推导的过程中有一处就需要反过来)
反推过来就是,对目标
的概率密度函数求一个积分(其实就是得到它的概率分布函数 CDF ,如果一开始就拿到的是 CDF 当然更好),然后求其反函数就可以得到需要的变换
了。实际上,这种方法有一个听起来稍微专业一点的名字: 。不过,虽然看起来很简单,但是实际操作起来却比较困难,因为对于许多函数来说,求逆是比较困难的,求积分就更困难了,如果写不出解析解,不得已只能用数值方法来逼近的话,计算效率就很让人担心了。可事实上也是如此,就连我们最常见的一维标准正态分布,也很难用这样的方法来抽样,因为它的概率密度函数
的不定积分没有一个解析形式。这可真是一点也不好玩,费了这么大劲,结果好像什么都干不了。看来这个看似简单的问题似乎还是比较复杂的,不过也不要灰心,至少对于高斯分布来说,我们还有一个叫做
的方法可以专门来做这个事情。因为高斯分布比较奇怪,虽然一维的时候概率分布函数无法写出解析式,但是二维的情况却可以通过一些技巧得出一个解析式来。
首先我们来考虑一个二维的且两个维度相互独立的高斯分布,它的概率密度函数为
这个分布是关于原点对称的,如果考虑使用极坐标
)的话,我们有 , 这样的变换。这样,概率密度函数是写成:
注意到在给定
的情况下其概率密度是不依赖于
的,也就是说对于
来说是一个均匀分布,这和我们所了解的标准正态分布也是符合的:在一个圆上的点的概率是相等的。确定了
的分布,让我们再来看 ,用类似于前面的方法:
根据前面得出的结论,我现在得到了
的概率分布函数,是不是只要求一下逆就可以得到一个
现在只要把这一些线索串起来,假设我们有两个相互独立的平均分布在
上的随机变量
就可以得到
了(实际上,由于
实际上是相同的分布,所以通常直接写为 )。再把极坐标换回笛卡尔坐标:
这样我们就能得到一个二维的正态分布的抽样了。可以直观地验证一下,二维不太好画,就画成 heatmap 了,看着比较热的区域就是概率比较大的,程序如下:
#!/usr/bin/python
import numpy as np
import matplotlib.pyplot as plot
T1 = np.random.rand(N)
T2 = np.random.rand(N)
r = np.sqrt(-2*np.log(T2))
theta = 2*np.pi*T1
X = r*np.cos(theta)
Y = r*np.sin(theta)
heatmap, xedges, yedges = np.histogram2d(X, Y, bins=80)
extent = [xedges[0], xedges[-1], yedges[0], yedges[-1]]
plot.imshow(heatmap, extent=extent)
plot.show()
画出来的图像这个样子:
不太好看,但是大概的形状是可以看出来的。其实有了二维的高斯分布,再注意到两个维度在我们这里是相互独立的,那么直接取其中任意一个维度,就是一个一维高斯分布了。如下:
即服从标准正态分布的话,则有
,也就是说,有了标准正态分布,其他所有的正态分布的抽样也都可以完成了。这下总算有点心满意足了。不过别急,还有最后一个问题:多元高斯分布。一般最常用不就是二元吗?二元不是我们一开始就推出来了吗?推出来了确实没错,不过我们考虑的是最简单的情形,当然同样可以通过
这样的方式来处理每一个维度,不过高维的情形还有一个需要考虑的就是各个维度之间的相关性——我们之前处理的都是两个维度相互独立的情况。对于一般的多维正态分布
,如果各个维度之间是相互独立的,就对应于协方差矩阵
是一个对角阵,但是如果
在非对角线的地方存在非零元素的话,就说明对应的两个维度之间存在相关性。
这个问题还是比较好解决的,高斯分布有这样的:类似于一维的情况,对于多维正态分布
,那么新的随机变量
所以,对于一个给定的高斯分布
来说,只要先生成一个对应维度的标准正态分布
即可,其中
的结果,即
结束之前让我们来看看 matlab 画个 3D 图来改善一下心情:
N = 50000;
T1 = rand(1, N);
T2 = rand(1, N);
r = sqrt(-2*log(T2));
theta = 2*pi*T1;
X = [r.*cos(theta); r.*sin(theta)];
mu = [1; 2];
Sigma = [5 2; 2 1];
L = chol(Sigma);
X1 = repmat(mu, 1, N) + L*X;
nbin = 30;
hist3(X1', [nbin nbin]);
set(gcf, 'renderer', 'opengl');
set(get(gca, 'child'), 'FaceColor', 'interp', 'CDataMode', 'auto');
[z c] = hist3(X1', [nbin nbin]);
[x y] = meshgrid(c{1}, c{2});
surfc(x,y,-z);
下面两幅图,哪幅好看一些(注意坐标比例不一样,所以看不出形状和旋转了)?似乎都不太好看,不过感觉还是比前面的 heatmap 要好一点啦!
然后,到这里为止,我们算是把高斯分布弄清楚了,不过这只是给一个介绍性的东西,里面的数学推导也并不严格,而 Box Muller 也并不是最高效的高斯采样的算法,不过,就算我们不打算再深入讨论高斯采样,采样这个问题本身也还有许多不尽人意的地方,我们推导出来的结论可以说只能用于一小部分简单的分布,连高斯分布都要通过 trick 来解决,另一些本身连概率密度函数都写不出来或者有各种奇怪数学特性的分布就更难处理了。所以本文的标题里也说了,这是上篇,如果什么时候有机会抽出时间来写下篇的话,我将会介绍一些更加通用和强大的方法,诸如 Rejection Sampling 、Gibbs Sampling 以及 Markov Chain Monte Carlo (MCMC) 等方法。如果你比较感兴趣,可以先自行 Google 一下解馋!
末了,还得废话两句,虽然是冒了一个泡,但是也是冒得很艰难,发了这篇日志也并不代表 blog 会恢复往日的发文频率,实际上这篇 blog 也差不多凑了半个多月的时间才折腾完,文章开头的“三个月”我想是不是也该更新为“四个月”了。
不过我想,如果有时间和有趣的 idea 的话,我还是会写的,毕竟这也是我的乐趣之一呢!
Leave a Reply
Except where otherwise noted, content on this site is licensed under a .怎样用R生成随机数_r生成正态分布随机数 – 数据分析
本站分享:大数据、数据分析师考试认证培训,包括:、、、、、、、、、、
> 怎样用R生成随机数_r生成正态分布随机数
怎样用R生成均匀随机数,正态随机数?卡方?
关键词:,r语言生成随机数
R软件一个显著的优点是它提供了丰富的随机数发生器,比SAS、Matlab方面很多,比Excel更不知方便到哪里去了。这无疑为统计学、工程学以及寿险精算学提供了很大的方便,比如我们要产生200个服从正态分布的随机数,在R里面用只需要键入“rnorm(200)”即可得到。操作如下:
&rnorm(200)
[1] -0......
[7] -1......
[13] -1......
[19] -1..30;…
rnorm()函数更通用的用法是rnorm(n,mean,sd),其中n为要产生随机数的个数,mean为所产生随机数的总体所具有的均值,sd是所产生的随机数的总体所具有的标准差。
要产生服从均值为2,标准差为3的随机数100个,在R中:
&rnorm(n=100,mean=2,sd=3)
当然也可以更简便:
&rnorm(100,2,3)
类似的还可以在stat包里得到更多分布的随机数,一些对应函数如下:
rexp The Exponential Distribution
rf The F Distribution
rgamma The Gamma Distribution
rgeom The Geometric Distribution
rhyper The Hypergeometric Distribution
rlnorm The Log Normal Distribution
rlogis The Logistic Distribution
rmultinom The Multinomial Distribution
rnbinom The Negative Binomial Distribution
rnorm The Normal Distribution
rpois The Poisson Distribution
rsignrank Distribution of the Wilcoxon Signed Rank Statistic
rt The Student t Distribution
runif The Uniform Distribution
rweibull The Weibull Distribution
rwilcox Distribution of the Wilcoxon Rank Sum Statistic
rexp The Exponential Distribution
rf The F Distribution
rgamma The Gamma Distribution
rgeom The Geometric Distribution
rhyper The Hypergeometric Distribution
rlnorm The Log Normal Distribution
rlogis The Logistic Distribution
rmultinom The Multinomial Distribution
rnbinom The Negative Binomial Distribution
rnorm The Normal Distribution
rpois The Poisson Distribution
rsignrank Distribution of the Wilcoxon Signed Rank Statistic
rt The Student t Distribution
runif The Uniform Distribution
rweibull The Weibull Distribution
rwilcox Distribution of the Wilcoxon Rank Sum Statistic
用法大致一样。
卡方呢??
Pearson (χ2)
用这个函数rchisq(n, df)
转载请注明: &
or分享 (0)}

我要回帖

更多关于 10年车龄如何注册滴滴 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信