-
2021-11-06 11:40:17
不知道大家在学数理统计的时候,对这三个概念怎么理解的,我学的时候还是很有疑惑的,为什么随机变量可以用样本表示,那统计量用来干什么的呢?于是我查阅了很多资料,下面谈谈自己的认识,欢迎大家分享自己的理解。
1 引言
自然界和社会上发生的现象是多种多样的。概括起来可以分为两大类:一类现象,在一定条件下必然发生,例如,同性电荷必相互排斥,等等。这类现象称为确定现象。另一类现象,比如在相同条件下抛同一枚硬币,其结果可能是正面朝上,也可能是反面朝上,并且在每次抛之前无法确定抛掷的结果是什么,等等。这类现象,在一定的条件下,可能出现这样的结果,也可能出现那样的结果,而在试验或观察之前不能预知确切的结果。但在大量重复实验或观察下,它的结果却呈现某种规律性。像这种在个别试验中其结果呈现出不确定性,在大量重复试验中其结果又具有统计规律性的现象,我们称之为随机现象。
数理统计学是研究随机现象规律性的一门学科,它以概率论为理论基础,研究如何以有效的方式收集﹑整理和分析受到随机因素影响的数据,并对所考察的问题作出推理和预测,直至为采取某种决策提供依据和建议。数理统计研究的内容非常广泛,概括起来可分为两大类:一是试验设计,即研究如何对随机现象进行观察和试验,以便更合理更有效地获得试验数据;二是统计推断,即研究如何对所获得的有限数据进行整理和加工,并对所考察的对象的某些性质作出尽可能精确可靠的判断(这不正是目前机器学习在做的事)。
统计学研究的一个主要问题是通过试验推断总体。而概率论为整个统计学奠定了基础,它为总体、随机试验等几乎所有随机现象的建模提供了方法。下面先引入概率论的中常用的样本空间、事件、随机变量和概率空间的几个概念,然后引入统计里常用的总体、样本、统计量。
2 概率论基础
2.1 样本空间
称某次随机试验 E E E 全体可能的结果所构成的集合 Ω \Omega Ω 为该试验的 样本空间(sample space)。样本空间的元素,即 E E E 的每个结果,称为样本点 e e e。
2.2 随机事件
我们称试验 E E E 的样本空间 Ω \Omega Ω 的子集为 E E E 的随机事件,简称事件。每次试验中,当且仅当这一子集中的一个样本点出现时,称这一事件发生。由一个样本点组成的单点集,称为基本事件。一个事件(event)是一次试验若干可能的结果所构成的集合,即 S 的一个子集(可以是S本身)。
2.3 随机变量
设随机试验的样本空间为 S = { e } S=\{e\} S={e}。 X = X ( e ) X=X(e) X=X(e) 是定义在样本空间 S S S 上的实值单值函数。称 X = X ( e ) X=X(e) X=X(e) 为随机变量。随机变量的本质就是从样本空间映射到实数的函数。随机变量常以大写字母记,其具体取值则用相应的小写字母表示。例如,随机变量 X X X 可以取值 x x x。
图1 样本点 e 与实数 X=X(e) 对应的示意图
研究随机变量的目的是通过研究随机变量的概率特性,或者叫统计特性,来反映和预测结果。
随机变量的数字特征: 数学期望(均值:反映数据集中在哪个量附近,一般不与随机变量的取值相同),方差(反映波动大小:反映数据的集中程度),两个随机变量的协方差(反映两个随机变量的相依关系),分布函数(分布律:反映随机变量落入某区域的概率),密度函数(连续型:反映随机变量在某点附近概率的变化快慢,密度函数的积分就是分布函数)。多维随机变量或多维随机向量。随机向量是样本空间到实数组集合的映射。例如(X,Y)是二维随机变量,对应的是实数对,可以取值为(1,2)。
多元随机变量是一个随机变量,只不过是多元的。例如 X Y XY XY 是二元随机变量,可以取值为 1 × 2 1\times 2 1×2。函数 f ( X Y ) f(XY) f(XY) 是 X Y XY XY 的函数。
总结: 维是代表随机变量维度增多了,元代表随机变量个数增多了。
2.4 概率空间
概率论中,用 e e e 为基本事件或样本, Ω \Omega Ω 为样本空间, A ( ∈ F ) A(\in\mathcal{F}) A(∈F) 为事件, F \mathcal{F} F 是事件的全体,而 P ( A ) P(A) P(A) 表示事件发生的概率。三元组 ( Ω , F , P ) (\Omega, \mathcal{F}, P) (Ω,F,P) 构成概率空间。
3 数理统计
3.1 总体
在数理统计学中,我们把所研究对象的全体元素组成的集合称为总体(或称母体),而把组成总体的每个元素称为个体。例如,在考察某批灯泡的质量时,该批灯泡的全体就组成一个总体,而其中每个灯泡就是个体。
但是,在实际应用中,人们所关心的并不是总体中个体的一切方面,而所研究的往往是总体中个体的某一项或某几项数量指标。例如,考察灯泡质量时,我们并不关心灯泡的形状,式样等特征,而只研究灯泡的寿命、亮度等数量指标特征。如果只考察灯泡寿命这一项指标时,由于一批灯泡中每个灯泡都有一个确定的寿命值,因此,自然地把这批灯泡寿命值的全体视为总体,而其中每个灯泡的寿命值就是个体。由于具有不同寿命值的灯泡的比例是按一定规律分布的,即任取一个灯泡其寿命为某一值具有一定概率,因而,这批灯泡的寿命是一个随机变量,也就是说,可以用一个随机变量 X X X 来表示这批灯泡的寿命这个总体。因此,在数理统计中,任何一个总体都可用一个随机变量来描述。总体的分布及数字特征,即指表示总体的随机变量的分布及数字特征。对总体的研究也就归结为对表示总体的随机变量的研究。
3.2 样本
为了了解总体 X X X 的分布规律或某些特征,必须对总体进行抽样观察,即从总体 X X X 中,随机抽取 n n n 个个体 X 1 , X 2 , ⋯ , X n X_1, X_2, \cdots, X_n X1,X2,⋯,Xn,记为 ( X 1 , X 2 , ⋯ , X n ) T (X_1, X_2, \cdots, X_n)^T (X1,X2,⋯,Xn)T,并称此为来自总体 X X X 的容量为 n n n 的样本。由于每个 X i X_i Xi 都是从总体 X X X 中随机抽取的,它的取值就在总体 X X X 的可能取值范围内随机取得,自然每个 X i X_i Xi 也是随机变量,从而样本 ( X 1 , X 2 , ⋯ , X n ) T (X_1, X_2, \cdots, X_n)^T (X1,X2,⋯,Xn)T 是一个 n n n 维随机向量。 ( X 1 , X 2 , ⋯ , X n ) T (X_1, X_2, \cdots, X_n)^T (X1,X2,⋯,Xn)T 是一个 n n n 维随机向量。在抽样观测后,它们是 n n n 个数据 ( x 1 , x 2 , ⋯ , x n ) T (x_1, x_2, \cdots, x_n)^T (x1,x2,⋯,xn)T,称之为样本 ( X 1 , X 2 , ⋯ , X n ) T (X_1, X_2, \cdots, X_n)^T (X1,X2,⋯,Xn)T 的一个观测值,简称样本值。
我们的目的是依据从总体 X X X 中抽取的一个样本值 ( x 1 , x 2 , ⋯ , x n ) T (x_1, x_2, \cdots, x_n)^T (x1,x2,⋯,xn)T,对总体 X X X 的分布或某些特征进行分析推断,因而要求抽取的样本能很好地反映总体的特征且便于处理,于是,提出下面两点要求:
(1)代表性——要求样本 ( X 1 , X 2 , ⋯ , X n ) T (X_1, X_2, \cdots, X_n)^T (X1,X2,⋯,Xn)T同分布且每个 X i X_i Xi 与总体 X X X 具有相同的分布。
(2)独立性——要求样本 ( X 1 , X 2 , ⋯ , X n ) T (X_1, X_2, \cdots, X_n)^T (X1,X2,⋯,Xn)T 是相互独立的随机变量。
满足上述两条性质的样本称为简单随机样本。3.3 统计量
样本是进行统计推断的依据。在应用时,往往不是直接使用样本本身,而是针对不同的问题构造样本的适当函数,利用这些样本的函数进行统计推断。
设 X 1 , X 2 , ⋯ , X n X_1, X_2, \cdots, X_n X1,X2,⋯,Xn 是来自总体 X X X 的一个样本, g ( X 1 , X 2 , ⋯ , X n ) g(X_1, X_2, \cdots, X_n) g(X1,X2,⋯,Xn)是 X 1 , X 2 , ⋯ , X n X_1, X_2, \cdots, X_n X1,X2,⋯,Xn 的函数,若 g g g 中不含任何未知参数,则称 g ( X 1 , X 2 , ⋯ , X n ) g(X_1, X_2, \cdots, X_n) g(X1,X2,⋯,Xn) 是一统计量。
因为 X 1 , X 2 , ⋯ , X n X_1, X_2, \cdots, X_n X1,X2,⋯,Xn 都是随机变量,而统计量 g ( X 1 , X 2 , ⋯ , X n ) g(X_1, X_2, \cdots, X_n) g(X1,X2,⋯,Xn) 是随机变量的函数,因此统计量是一个随机变量。参数是用来描述总体特征的概括性数字度量,是研究者想要了解的总体的某种特征值。由于总体数据通常是不知道的,所以参数是一个未知的常数。统计量是用来描述样本特征的概括性数字度量,它是根据样本数据计算出来的一个量。由于抽样是随机的,所以统计量是样本的函数;由于样本是已知的,所以统计量总是知道的。抽样的目的就是要根据样本统计量去估计总体参数。
3.4 样本和随机变量
统计里的样本有二重性,即样本既可以看作是一组观测值又可以看作是随机变量。因为在抽样之前,样本观测值是未知的,所以可以看成是随机变量(设该样本为 X X X,抽取之前 X X X 的值未知, X X X 的值是什么,其概率分布是符合对应随机变量概率分布的);而当样本抽取完之后又是一组确定的值,故又可以看成是一组确定的值。一般情况下把样本看作是一组随机变量。
个人理解: 在统计学里,即抽样分布里,在数据是一维的时候,可以把每个样本都看做一个随机变量;但到了概率论中,对于给定一个多维数据,比如多个样本多个特征,此时应该把每个特征看做一个随机变量,这时才有协方差矩阵的概念。随机变量是贯穿于概率论和数理统计的一个概念,在前后学习的时候如果可以正确认识,会对统计有更深的理解。
参考
- 随机变量和随机过程的个人理解:https://zhuanlan.zhihu.com/p/47113623
- 样本和随机变量的区别联系:https://blog.csdn.net/qq_29488527/article/details/79779661
- 总体和样本的区别与联系:https://zhuanlan.zhihu.com/p/103697284
更多相关内容 -
SV学习(2)——过程语句、函数和任务、变量声明周期
2022-01-19 16:14:56当一个字符串文本被赋值到一个大小不同、整型压缩数组变量的时候,它或者被截短到变量的大小或者在左侧填补0. SV中,字符串文本的表现行为与Verilog相同,但是SV还支持字符串类型,可以将一个字符串文本赋值到这种...SV学习(2)——过程语句、函数和任务
1. 过程语句
1.1. 硬件过程块
在SV中首先需要清楚哪些语句应该被放置于硬件世界,哪些程序应该被放置于软件世界;
为了区分硬件世界和软件世界,先引申出一个概念域(scope)。为了区分硬件设计、软件设计,我们将定义的软件变量或者例化的硬件其所在的空间称之为域;
module / endmodule,interface / endinterface可以被视为硬件世界,program / endprogram和class / endclass可以被视为软件世界。always是为了描述硬件的行为,而在使用时需要注意哪些使用方式是时序电路描述,哪种使用方式事组合电路描述;
always中的 @(event …) 敏感列表是为了模拟硬件信号的触发行为,同学们需要正确对标硬件行为和always过程块描述。需要理解硬件行为的核心要素有哪些?
所以说,always过程块是用来描述硬件时序电路和组合电路的正确打开方式,因此只可以在module或者interface中使用;always具备描述硬件电路行为的核心要素,你认为下列哪些事正确使用always的方式?
- 由时钟驱动
- 由其他非时钟信号驱动
- 不同always语句块之间是并行执行的
- 可以在always中初始化变量
always中,可以对对应的信号做复位,初始化变量是一个软件的概念,通常在定义变量的时候或者在initial中进行初始化。
initial从名字也看得出来,与always在执行路径上有明显区别,即initial非常符合软件的执行方式,即只执行一次;
initial和always一样,无法被延迟执行,即在仿真一开始它们都会同时执行,而不同initial和always之间的执行顺序上是没有顺序可言的,因此不应该将它们在代码中的前后顺序与它们的执行顺序画上等号;
initial从其执行路径的属性来看,它不应该存在于硬件设计代码中,它本身不可综合,对于描述电路没有任何帮助;
initial就是为了测试而生的,由于测试需要按照时间顺序的习惯,即软件方式来完成,所以initial便可以实现这一要求;在Verilog时代,所有的测试语句都可以被放置在initial中,为了便于统一管理测试顺序,建议将有关测试语句都放置在同一个initial过程块中;
initial过程块可以在module、interface和program中使用;
对于过程块的书写方式,请记住用begin…end将其作用域“包”住,这一建议同样适用于稍后提到的控制语句、循环语句等;1.2. 赋值语句
SV比verilog多了自加和自减操作符,允许变量自身可以将当前值做递增或递减。
assign优先级高于普通过程赋值语句,所以处于连续赋值状态的寄存器变量将忽略普通过程赋值语句对它的过程赋值操作,其逻辑状态仍然由过程连续赋值语句表达式做决定。使用assign对寄存器型变量赋值之后,这个值将一直保持在这个寄存器上,直至遇上deassign。
// assign_example module test_assign ( ); wire [ 9: 0] net_data [10: 0]; initial begin logic [ 9: 0] data [10: 0] ; logic [ 9: 0] var_data ; data[0] <= 'x; // 非阻塞赋值 data[1] = 'z; // 阻塞赋值 #5 data[2] = 7; #5 data[2]++; // 变量自加 #5 data[2]--; // 变量自减 #5 assign var_data = data[2]; // 连续赋值语句将7赋值给var_data #5 var_data = 4; // 不会改变var_data地数值 #5 deassign var_data; // 去除连续连续赋值地作用 #5 var_data = 5; // var_data的值改变了 #5 force var_data = data[1]; #5 var_data = 8; #5 release var_data; #5 var_data = 9; #5 force net_data[1] = 10'h00; #5 release net_data[1]; end endmodule
1.3. 控制语句
1.3.1. for循环
SV允许在循环内产生一个本地变量,其他并行循环不会偶然地影响这个循环控制变量
for (int i = 0, j = 0; i < 256; i++, j++) ...
1.3.2. while循循环
举例,计算向量中1的个数
// while_example module test_while ( ); logic [ 3: 0] count; logic [ 7: 0] temp; initial begin count = 0; temp = 8'b0011_1100; #10 while (temp) begin if (temp[0] == 1'b1) count ++; // temp = temp >> 1; temp = {1'b0, temp[7:1]}; end $display ("%d",count); end endmodule
1.3.3. do-while循环
逐位打印字符串
// dowhile_example module test_dowhile ( ); // int map [string]; // 关联数组,索引为string型 bit [ 7: 0] map [string]; // map["hello"] = 1; // map["sad"] = 2; // map["world"] = 3; // // 对关联数组的初始化放在initial外部会有报错 // // near "[": syntax error, unexpected '[', expecting IDENTIFIER or TYPE_IDENTIFIER string s; initial begin map["hello"] = 1; map["sad"] = 2; map["world"] = 3; s = "hello!"; if (map.first(s)) do $display ("%8s: %2d", s, map[s]); while (map.next(s)); end endmodule
1.3.4. repeat循环
通过加法和移位实现乘法器
// repeat_example module test_repeat ( ); parameter size = 8; parameter longsize = 16; logic [size: 1] opa = 3, opb = 6; logic [longsize: 1] result ; initial begin logic [longsize: 1] shift_opa, shift_opb; shift_opa = opa; shift_opb = opb; result = 0; repeat (size) begin if (shift_opb[1]) result = result + shift_opa; shift_opa = shift_opa << 1; shift_opb = shift_opb >> 1; end $display ("The result is %d", result); end endmodule
1.3.5. foreach循环
foreach循环语句中指定数组后,程序会逐个遍历数组成员。
foreach ( <array name> [< loop variable>] ) <statement>
它的自变量可以是一个指定的任意类型数组(固定尺寸的 / 动态的及联合数组),然后紧跟着一个包围在方括号内的循环变量的列表。每一个循环变量对应于数组的某一维度。 foreach结构类似于一个repeat循环,它使用数组返回替代一个表达式来指定重复次数。
// foreach_example module test_foreach ( ); string words [2] = '{"hello", "world"}; int prod [ 1: 8][ 1: 3]; initial begin // int j; foreach (words[j]) $display (j, words[j]); foreach (prod[k ,m]) prod[k][m] = k * m; end endmodule
循环变量的数目必须匹配数组变量的维数。空循环变量可以用来表示在对应的数组维数上没有迭代,并且处于尾部的连续空循环变量可以被忽略。循环变量是自动的、只读的,并且它们的作用范围对于循环来讲是本地的。每一个循环变量的类型被隐含的声明成与数组索引一致的类型。2. 函数和任务
Verilog中要求函数必须有返回值,并且返回值必须被使用,例如用到赋值语句中;SV的限制稍微放宽了;
2.1. 函数function
- 可以在参数列表中指定输入参数(input)、输出参数(output)、输入输出参数(inout)或者引用参数(ref);
- 可以返回数值或者不返回数值(void);
function int double (input a); return 2*a; endfunction initial begin $display ("double of %0d is %0d", 10, doublr(10)); end
function属性:
- 默认的数据类型是logic,例如 input [ 7: 0] addr;
- 数组可以作为形式参数传递;
- function可以返回或者不返回结果,如果返回即需要用关键词return,如果不返回则应该在声明function时采用void function ();
- 只有数据变量可以在形式参数列表中被声明为ref类型,而线网类型则不能被声明为ref类型;
- 在使用ref时,有时候为了保护数据对象只被读取不被写入,可以通过const的方式来限定ref声明的参数;
- 在声明参数时,可以给入默认数值,例如 input [ 7: 0] addr = 0,同时在调用时如果省略该参数的传递,那么默认值即会被传递给function;
2.2. 任务 task
任务相比于函数要更加灵活,且以下不同点:
- task无法通过return返回结果,因此只能通过output、inout或者ref的参数来返回;
- task内可以置入耗时语句,而function则不能。常见的耗时语句包括@event、wait event、# delay等;
function是立即返回
task my_task (output logic [31: 0] x, input logic y); ... endtask
通过上面的比较,我们对function和task建议的使用方法是:
- 对于初学者傻瓜式用法即全部采用task来定义方法,因为它可以内置常用的耗时语句;
- 对于有经验的使用者,请今后对这两种方法类型加以区别,在非耗时方法定义时使用function,在内置耗时语句时使用task。这么做的好处是在遇到了这两种方法定义时,就可以知道function只能运用于纯粹的数字或者逻辑运算,而task则可能会被运用于需要耗时的信号采样或者驱动场景;
- 如果要调用function,则使用function和task均可对其调用;而如果要调用task,我们建议使用task来调用,这是一位内如果被调用的task内置有耗时语句,则外部调用它的方法类型必须为task;
出个题目:
typedef struct { bit [ 1: 0] cmd; bit [ 1: 0] addr; bit [31: 0] data; } trans; function automatic void op_copy (trans t, trans s); t = s; endfunction initial begin trans s; trans t; s.cmd = 'h1; s.addr = 'h10; s.data = 'h100; op_copy (t, s); t.cmd = 'h2; end
上述代码,变量t中的三个成员{cmd, addr, data}最后数值为多少?
- {'h1, 'h10, 'h100}
- {'h2, 'h0, 'h0}
- {'h2, 'h10, 'h100}
- {'h0, 'h0, 'h0}
B:函数端口中,没有声明端口方向,默认都是输入,s和t都是input
2.3. 子程序参数
Verilog中,要求定义某些参数两次,方向、类型,任务名后不能出现输入、输出端口列表,
task my_task; output [31: 0] x; reg [31: 0] x; input y; ... endtask
SV中,任务、函数声明的形式参数可以定义在圆括号中,参数缺省方向是input,缺省类型是logic
task my_task (output int x, input logic y); ... endtask
每一个形式参数可以选择的方向属性:
input:在开始的时候复制值
output:在结束的时候复制值
inout:在开始的时候复制,在结束的时候输出
ref:传递引用(句柄或者指针)Verilog对于参数只有传值的方式:在子程序调用的时候,类型为input或者inout的实际参数的数值被复制到本地变量,在子程序退出的时候,类型为output或者inout的实际参数的数值被更新;
SV提供两种方式来为函数和任务传递参数:值传递和引用传递。引用传递(reference)像是C++的句柄或者指针,也就是变量的入口地址。此时,参数的类型应定义为ref通过引用将数组传递到子程序中,
function void ary_sum (const ref int ary []); // 引用传递,相对于指针传递 // 加const防止改变传递进来的变量的值 // 也就是只能读取变量,而不能写变量 int sum = 0; for (int i = 0; i < ary.size; i++) sum += ary[i]; $display ("The sum of the arrays is %0d", sum); endfunction
通过传值的方式来传递数组参数,这样数组将被整体复制,这样消耗一定的内存和操作时间。而使用ref传递,只是获取该数组的入口地址(句柄 / 指针),操作速度快,减少内存使用。
const关键字可以防止一个函数或者任务改变一个通过ref类型传递的变量。这对于大型的数据结构通过ref传递,避免了整个结构被复制,而且在函数内部也不会被改变。一旦使用了const ref编译器就会检查子程序是否修改了该数组,当试图改变数组值时,编译器报错
在子程序修改ref参数变量的时候,其变化对于外部是立即可见的,在几个程序并行执行而想通过简单方法传递信息的情况下很有用,在并发执行线程中很有用。
下面的例子,bus.enable有效,初始化块中的thread2块马上就可以获取来自存储器的数据,而不用等到bus_read任务完成总线上的数据处理后返回,这可能需要若干个时钟周期。由于参数data是以ref方式引用传递的,所以只要任务里的data一有变化,@data语句就会触发,
// ref_example module test_ref ( ); logic [31: 0] addr; logic [31: 0] data; initial fork bus_read (addr, data); begin @ data; $diaplay ("data is %0d", data); end join task automatic bus_read (input logic [31: 0] addr, ref logic [31: 0] data); // request bus and drive address bus.request = 1'b1; @ (posedge bus.grant) bus.addr= addr; // wait for data from memory @(posedge bus.enable) data = bus.data; // release bus and wait for grant bus.request = 1'b0; @(negedge bus.grant); endtask endmodule
参数可以通过名字或者位置来传递。任务和函数的参数还可以指定缺省值,这就是使得调用任务或函数的时候可以不用传递参数。
function void print_sum (ref int a [ ]); ... endfunction function void calculate ( ); ... print_sum (a); endfunction initial begin calculate ( ); end
若在后来需要修改print_sum函数参加参数,指定数组的开始地址和结束地址,
function void print_sum (ref int a [ ], input int start, input int last);
修改过函数后,原程序中热任何一个调用print_sum( )的代码,就需要对应改成print_sum (a1, b1, c2); 否则缺少了参数,程序无法正常运行。如采用参数默认值的方法,就不需要做改动了,
function void print_sum (ref int a [ ], input int start = 0, input int last = a.size() - 1);
下例是采用名字进行参数传递,
task many (input int a = 1, b = 2, c = 3, d = 4); $display ("%0d, %0d, %0d, %0d", a, b, c, d); endtask initial begin many(6, 7, 8, 9); // 6 7 8 9 指定所有值 many(); // 1 2 3 4 使用缺省值 many(.c(5)); // 1 2 5 4 只指定c many( , 6, .d(8)); // 1 6 3 8 混合方式 end
建议用ref追踪外部变量的变化,如果添加const ref就表示这个数是只读的,不可以再修改还能追踪到实时的值
2.4. 子程序返回
在Verilog中,当任务、函数运行到endtask、endfunction的时候退出,由于任务中可以有延迟语句、敏感事件控制语句等事件控制语句,任务定义结构内可以出现disable终止语句,这条语句将中断正在执行的任务。在任务被中断后,程序流程将返回到调用任务的地方继续向下执行。而在SV中,可以使用return语句在任务体或函数体的任意一点退出子程序。
在Verilog中函数必须有返回值,返回值是用过对函数名赋值来完成的;而SV允许将函数声明成void类型,它没有返回值,其他函数就像Verilog一样,可以通过为函数名赋值来返回一个值,或者使用return语句实现,
// verilog function [15: 0] my_func1 (input [ 7: 0] x, y); my_func1 = x * y - 1; // 返回值赋值给函数名字 endfunction // SV function [15: 0] my_func2 (input [ 7: 0] x, y); return x * y - 1; // 使用return语句指定返回值 endfunction
SV中,任务和函数都可以用return返回
2.5. 自动存储
Verilog-1995 中,所有对象都是静态分配的,如果在测试程序里的多个地方调用同一个任务,由于任务里的局部变量会使用静态存储区,所以不同的线程之间会窜用这些局部变量;
Verilog-2001 通过使用automatic关键字,将任务、函数和模块声明为自动存储模式,这样,仿真器就能够对其所有形式的参数和内部变量使用堆栈的形式来存储。
automatic使函数和任务的重入(reentry)成为可能,
function automatic [63: 0] factorial; input [31: 0] n; if (n == 1) factorial = 1; else factorial = n * factorial(-1); endfunction
在SV中,子程序仍然默认使用静态存储方式,对于所有的模块(module block)和程序快(program block)也一样;对于声明在class中的子程序和变量默认使动态存储的。SV还允许在一个静态任务中将特定的形式参数和本地变量声明成自动的(automatic),也允许在一个自动任务内将特定的形式参数和本地变量声明成静态的(static)。
3. 变量声明周期
- 在SV中,我们将数据的生命周期分为动态(automatic)和静态(static);
- 局部变量的生命周期同其所在域共存亡,例如function/task中的临时变量,在其方法调用结束后,临时变量的声明也将终结,所以它们是动态生命周期;
- 全部变量即便随这程序执行开始到结束一直存在,例如module中的变量默认情况下全部为全局变量,用户也可以理解为module中的变量由于在模拟硬件信号,所以它们是静态生命周期;
- 如果数据变量被声明为automatic,那么在进入该进程/方法后,automatic变量会被创建,而在离开该进程/方法后,automatic变量会被销毁。而static变量在仿真开始时即会被创建,而在进程/方法执行过程中,自身不会被销毁,而且可以被多个进程和方法所共享;
// life_cycle_test module life_cycle_test ; function automatic int auto_cnt (input a); int cnt = 0; cnt = cnt + a; return cnt; endfunction function static int static_cnt (input a); static int cnt = 0; cnt = cnt + a; return cnt; endfunction function int def_cnt (input a); static int cnt = 0; cnt = cnt + a; return cnt; endfunction initial begin $display ("@1 auto_cnt = %0d", auto_cnt(1)); $display ("@2 auto_cnt = %0d", auto_cnt(1)); $display ("@1 static_cnt = %0d", static_cnt(1)); $display ("@2 static_cnt = %0d", static_cnt(1)); $display ("@1 def_cnt = %0d", def_cnt(1)); $display ("@2 def_cnt = %0d", def_cnt(1)); end endmodule
automatic方法,内部的所有变量也是automatic,即伴随automatic方法的生命周期建立和销毁;static方法,内部所有变量都是static类型,第一次调用的时候,声明static int cnt = 0; 计数器加1,返回1,第二次调用的时候,cnt是1,静态变量不会再次初始化,计数器加1,返回2;
对于automatic或者static方法,用户可以对其内部定义的变量做单个声明,使其类型被显式声明为automatic或者static;
对于static变量,用户在声明变量时应该同时对其做初始化,而初始化只会伴随它的生命周期发生一次,并不会随着方法被调用被多次初始化
def_cnt ( ),默认函数是static的,里面的变量也都是静态变量;一般情况,我们调用函数都期待是auto_cnt ( )的样子,这时候就需要automatic关键字了
在module、program、interface、task和function之外声明的变量拥有静态的生命周期,即存在于整个仿真阶段,这同C定义的静态变量一致;
在module、interface和program内部声明,且在task、process或者function外部声明的变量也是static变量,且作用域在该块内;
在module、program和interface中定义的task、function默认都是static类型;
在过程块(task、function、process)定义的变量均跟随它的作用域,即过程块的类型。如果过程块为static,则它们也默认为static,反之亦然。这些变量也可以由用户显式声明为automatic或者static;
为了使得在过程块中声明的变量有统一默认的生命周期,可以在定义module、interface、package或者program时,通过限定词automatic或者static来区分。对于上述程序默认的生命周期类型为static;
下列域中的变量哪些默认是static即静态变量?
- module中声明的变量
- module中initial过程块中声明的变量
- 在module中定义的function声明的变量
- 在module中定义的task声明的变量
4. 补充
定义这个task,为什么不用声明端口和类型?
在定义任务的时候,默认是input logic的;
clk是直接在module里面的定义的变量,这是全局变量,作用域是整个模块,可以直接在task里使用
静态变量?生命周期?全局变量?作用域?
-
【劲峰论道时空分析技术-学习笔记】1 时空数据和时空变量&时空过程和时空机理
2018-12-25 20:13:37文章目录时空数据和时空变量时空数据1、时空二联表2、地图时间序列3、状态转换矩阵时空变量1、基于设计2、基于模型变量类型1、空间变量2、时间变量3、时空变量4、状态变量时空过程和时空机理1、时空现象的表现2、...文章目录
整理自: https://mp.weixin.qq.com/s/L4AwRKEItnpNok6dAUgLRA时空数据和时空变量
时空数据
【概念】:时空数据是时空变量的一次或有限次观测值
【公式】:y(s,t)
- 具有地理空间分布 (s)的事物,并且随时间(t)变化
【记录方式】:
1、时空二联表
- 行表示空间维、列表示时间维,单元格记录属性值
- 例如:ArcGIS数据属性表
- 可以完整记录时空各节点的观测值,但是无法记录时空数据的空间拓扑关系
2、地图时间序列
- 在各时间节点分别制作某属性专题图,形成地图序列
- 能够完整记录时空演化信息,但是目前的GIS软件中尚缺少有效的时空数据结构来存储和操作这类数据(时空立方体)
3、状态转换矩阵
- 行列分别代表两个时间节点上相同的状态变量,单元格表示经过一个时间段,所在行状态转换为所在列状态的量
- 转换矩阵可以完整记录了各状态之间的流转,但在时间维度上,只能局限于两个节点之间
截屏自:https://blog.csdn.net/gdp12315_gu/article/details/49949669
时空变量
【内容】:借助统计学和数学,通过研究观测样本y,推断总体或超总体的参数和性质,即地理学研究事物的格局、过程、规律和机理
【方法】:
1、基于设计
- 先从总体中以某种方式(设计)抽取一定数量的样本,每个样本单元有一个观测数值;然后对样本进行统计,推断总体
- 样本抽取的方式(设计)主要包括随机、系统、分层等。
- 对于一个统计量,即估算公式,基于设计的统计估值及其误差随样本设计(布置方式和密度)变化而变化。
- 在一定样本量的前提下,随机或分层随机抽样能够保证样本统计推断总体是设计无偏的(注意,不能保证最优,也就是不保证误差最小)。
- 设计无偏在理论上与总体性质无关;然而,估值方差将随着空间相关性和分异性而发生变化。
- 特别地,当总体是分层异质的(stratifiedheterogeneity),并且样本小到没有覆盖所有的层(strata)时,样本有偏于总体,传统的统计推断结果将有偏于总体参数。
- 此时,若有无偏样本或全覆盖的相关辅助数据,则可用专门算法纠偏,从而得到无偏估计。
2、基于模型
- 假设每个时空格点的值都是一个时空随机变量,观测值是其一次实现。
- 为进行推断,假设随机变量具有平稳性,即各时空点数学期望相等。
- 若不平稳,则先分层(stratification),使层内平稳,然后对时空变量加权来估计总体参数,以估值误差最小为目标函数,以估值无偏为约束,求解样本权重。
- 基于模型的统计估值及其误差在理论上与样点绝对位置无关。
- 当研究对象性质与模型假设一致时,基于模型的统计推断可以得到无偏最优估计(BLUE)。当目标对象性质与模型假设不符时,模型结果有误。
变量类型
- 自然环境,如温度、降水、水土流失;
- 经济与社会,如人口、GDP、交通、疾病等;
- 人地关系,如土地利用、生态价值、自然灾害等。
1、空间变量
- 当属性存在空间分异并且随时间稳定或不分辨时间,即y(s,t)=y(s)。
- 如中国地形三级阶地、胡焕庸人口线、气候带、生物区系等。
- 空间分析
2、时间变量
- 当属性空间均质或不分辨空间差异,即y(s,t)=y(t)。
- 如区域CPI指数、北京逐年常住人口变化。
- 时间序列分析
- 当存在空间分异但在分析时不予考虑,将有可能导致生态谬误。
3、时空变量
- 当属性随空时皆变,即y(s+u,t+τ)≠y(s, t)。
- 例如中国近3000个区县2008.3-2009.4各周手足口病病例数。
- 时空分析
4、状态变量
- 属性值变化到一定程度,从量变产生质变,状态或类型发生了变化。
- 人们往往对质变,也就是状态变化更感兴趣,为此,可以定义状态变量。状态变量反映格局、规律和大势。
- 例如土地利用类型,由于城市化而发生变化。
- 一个城市的产业类型和发展阶段也会演化。
- 空间变量和时间变量是时空变量的特例;
- 这些变量的测量可以是比值量(Ratio)、间隔量(Interval)、顺序量(Ordinal)和名义量(Nominal),在统计学中分析方法有区别。
- 比值量和间隔量常统称为数值量。
- 地理学中状态(包括名义量和顺序量)变化是值得特别关注的,特用状态变量。
- 例如,天气状态可以是下雨、多云、晴天;而天气测量是温度、湿度、气压等数值量。
时空过程和时空机理
- 时空数据有限次地记录了时空过程,时空过程是过程机理驱动的结果。
- 日地环绕、大陆漂移碰撞和万有引力等机理分别导致了地球气候的经纬度差异、海拔高程地带性和地壳物质分层和迁移等时空现象。
- 举例:
1、可能是物理的,例如大气动力及对应的GCM 模型;
2、可能是经济的,例如投入产出联系及对应的 CGE 模型;
3、可能是传染的,例如接触传播及对应的SIR模型,;
4、可能是演化遗传变异的,例如城市群演化树。
1、时空现象的表现
过程机理 → 时空过程(用时空变量关系表达) → 时空数据
- 时空数据分析的目的就是从时空数据出发,运用各种时空分析工具,溯源其时空过程乃至机理,由样本推断总体或超总体的参数。
- 如果时空数据来自于对时空过程有一定密集度的随机采样,样本将蕴含了过程的所有时空规律、时空异常等信息,我们称之为完备时空样本。
- 如果时空样本不完备,则首先需要基于抽样理论进行加密观测或纠偏。
2、时空样本
(完备) 时空样本→ 时空规律+ 时空异常+ 时空噪音
- 时空规律是时空过程中已经被人类认知和掌握的部分,建立机理或统计模型,可以预测预报;
- 时空异常是与人类已认识的规律有明显差异,不能依据现有规律准确预期的部分;
- 时空噪音没有规律并且没有明显异常值,目前尚不为人类所认知的部分。
- 恰当利用分析工具,对时空异常(如传染病)进行早期预警,具有重要意义;另一个努力的方向是从模型残差中提取更多的信息,增强我们对时空异常的物理机制的理解,转化为规律,从而对其有所预期和掌握。
3、时空过程和机理
-
时空过程和机理以因变量y和影响因子z之间的联系(y|z)来表达。
-
在地理学,直接影响因子z往往难以获得,常用的方法是寻找代理变量x,建立因变量与代理变量的统计关系y=f(x)。
-
代理变量x应当满足两个条件:
一是与直接因子z尽量相关(z|x),可基于物理机制定性判断,或基于相关分析定量选择;
二是全覆盖研究区域和研究时段。 -
举例:新生儿出生缺陷发生风险(y)与环境污染暴露、遗传和营养等直接因子(z)有关,而遗传和营养测量和调查成本高,因此寻找其代理变量(x),如,用以村庄为中心做不同距离缓冲区,分别计算局域空间聚集性指标(Gi)来反映人们社会交往和通婚圈作为遗传代理因子,用人均收入代理营养摄入水平。
时空分析工具
1、可视化探索分析
2、时空变化探测
3、时空格局识别
4、时空插值和补缺
5、通过影响因子 (x) 分析推测时空机理
- 时空机理的认知可以分为物理的 (过程建模)、统计的 (时空回归)和生物的 (演化树)
- 演化树还是一种可视化的手段,实现属性空间和地理空间之间的二元协同感知
-
SPSS学习笔记:因变量二分类资料的logistic回归分析
2020-12-19 07:25:52转自个人微信公众号【Memo_Cleon】的统计学习笔记两个概念:RR和OR二分类资料的logistic回归SPSS操作示例几个需要注意的问题:样本量、哑变量、模型拟合效果和拟合优度检验、多重共线【1】两个概念RR(Relative Risk)...转自个人微信公众号【Memo_Cleon】的统计学习笔记两个概念:RR和OR
二分类资料的logistic回归SPSS操作示例
几个需要注意的问题:样本量、哑变量、模型拟合效果和拟合优度检验、多重共线
【1】两个概念
RR(Relative Risk):相对危险度,也称危险比(Risk Ratio)或率比(Rate Ratio),在前瞻性研究中用以表示暴露与疾病发生的关联强度,说明暴露组发病危险是非暴露组发病危险的多少倍,是两组发病率之比,计算公式为:
OR(Odds Ration):比值比,优势比,比数比。在病例对照研究中说明暴露与疾病的关联强度,它是暴露在某危险因子下的发病率P1与不发病率之比(1-P1)与未暴露在某危险因子下的发病率P2与不发病率(1-P2)之比的比值。
比值(odd)表示发生的可能性与不发行的可能性之比,odds1=P1/(1-P1),odds2=P2/(1-P2)。OR=odds1/odds2=ad/bc
在logistic回归中,各自变量的回归系数βi表示自变量Xi每改变一个单位,比值比的自然对数值该变量,而exp(βi)即OR,表示自变量Xi每改变一个单位,阳性结果出现概率与不出现概率之比是变化前相应比值的倍数,即优势比。当阳性结果出现概率较小时(一般小于0.05)或者较大时(大于0.95),OR=(P1/(1-P1))/(P2/(1-P2))≈P1/P2=RR
【2】二分类资料的logistic回归SPSS操作示例
适用条件:①因变量为二分类变量,自变量可以是连续变量也可以是分类变量;②各观测间相互独立;③自变量与因变量logit(P)之间存在线性关系;④自变量间不存在多重共线;⑤尽量避免异常值,残差服从二项分布合计为零;⑥研究对象无论是病例组还是对照组,样本量至少是需要分析的自变量个数的10倍,多分类自变量的哑变量的参照水平频数至少为30。
示例:探讨冠心病发生的有关危险因素。分析数据来自孙振球主编的《医学统计学》第三版。
(1)数据录入赋值。二分类变量取值只有“0”和“1”两个值,本例年龄和体重指数严格来讲是要设成哑变量的(可参见本文后面关于哑变量的介绍),但由于样本量的问题,为更好的演示spss操作,本例按等级资料直接赋值。
(2)分析(Analyze)>>回归(Regression)>>二分类logistic(Binary Logistic…)
因变量(Dependent):选入冠心病[Y]
协变量(Covariates):选入自变量[X1]-[X8]
筛选变量方法(Method):进入(Enter):强行引入,全部变量一次进入模型,不进行筛选
向前:条件(Forward:Conditional):向前逐步选择法,剔除变量的标准是条件参数估计的似然比检验
向前:似然比(Forward:LR):向前逐步选择法,剔除变量的标准是最大偏似然估计的似然比检验
向前:Wald(Forward:Wald):向前逐步选择法,剔除变量的标准Wald卡方检验
不同的向前法选入自变量时均采用比分检验,只是采用的剔除变量的检验方法不同
向后法也三种,剔除标准分别对应条件、似然比和Wald
本例选中Forward:LR。
分类变量(Categorial…):可将多分类自变量设置为哑变量。
保存(Save…):可将中间的计算结果存储起来供以后分析,共有预测值、残差和影响强度因子三类
选项(Options…):可以选中相应选项对模型进行描述、预测和诊断,设置逐步法的进入和剔除标准等。本例选中CI for exp(B)选项
结果解释:
(1)数据处理情况汇总,本例共有54条记录纳入分析,无缺失值。本例样本量时偏少,要分析8个自变量至少需要160例记录,本例仅用于操作演示。
(2)因变量分类赋值
(3)预测分类表:此步开始进行拟合。Block 0拟合的是不包含任何自变量只有常数的无效模型,本例有28例对照的记录被预测为对照,有26例病例也被预测为对照,总预测准确率为51.9%,这是不纳入任何解释变量时的预测准确率,相当于比较基线。
Block 0: Beginning Block
(4)纳入方程的变量及检验情况。因此步拟合仅有常数项,β0=-0.074;检验方法Wald检验,检验统计量Wald χ2=0.074,P=0.786>0.05,H0假设是回归系数为0。Exp(B)为自然对数e的β0次方,实际意义是总体研究对象中(54例)中患病率(26/54)与未患病率(28/54)的比值0.929。
(5)尚未纳入模型方程的变量及其比分检验结果。所作的检验是分别将他们纳入方程,方程的改变是否有统计学意义。本例如果将X1-X8分别纳入方程,则方程的改变都是有统计学意义的,总的统计量也有统计学意义。逐步回归法(Stepwise)是一个一个的选入变量,下一步将会先纳入P值最小的变量X6重新计算选择。
(6)模型系数的综合检验,此步开始Block 1的拟合,本例采用的方法为向前逐步选择法(似然比),本例依次引入了4个变量,结果显示每一步新引入的变量和最终的模型均有统计学意义(新引入变量系数不为零,所有引入变量系数不全为零)
Block 1: Method = Forward Stepwise (Likelihood Ratio)
此处输出的即为每一步的似然比检验结果,模型新引入一个或几个变量后形成的新模型(当前模型)与“上一步(step)的模型/上一个区块(block)模型/初始模型(model)”进行比较,卡方值是上一个步模型/上一个区组模型/初始模型的-2logLR(负2倍的似然比值)与当前的-2logLR的差值,可通过下一张表格(Model Summary)中的值验证,step的卡方值结果上一步的模型与纳入新变量后的模型-2logLR之差,model的卡方值是初始模型(step0,各自变量系数均为0)与纳入新变量后的模型-2logLR之差,本例只设置了一个block,因此block与model相同。step检验的是每个step被纳入的变量引起的似然比变化,model则提示纳入新变量后整个模型的似然比变化。
SPSS软件中自带的帮助对几个卡方的描述如下:
Model Chi-Square
2(log-likelihood function for current model − log-likelihood function for initial model)。 The initial model contains a constant if it is in the model; otherwise, the model has no terms. The degrees of freedom for the model chi-square statistic is equal to the difference between the numbers of parameters estimated in each of the two models. If the degrees of freedom is zero, the model chi-square is not computed.
Block Chi-Square
2(log-likelihood function for current model − log-likelihood function for the final model from the previous method)。The degrees of freedom for the block chi-square statistic is equal to the difference between the numbers of parameters estimated in each of the two models.
Improvement Chi-Square
2(log-likelihood function for current model − log-likelihood function for the model from the last step)。The degrees of freedom for the improvement chi-square statistic is equal to the difference between the numbers of parameters estimated in each of the two models.
(7)模型概况,输出每一步的-2logLR(-2倍的对数似然比值)以及两个广义决定系数(也称伪决定系数),这两个指标是模型拟合效果的的判断指标。logistic模型估计一般采用最大似然法,即是得到模型的似然函数值LR达到最大值(LR取值在0-1之间)。模型预测效果越好,LR越大,-2logLR越小。Cox&Snell R2和Nagelkerke R2表示当前模型中的 自变量导致的因变量变异占因变量总变异的比例。本例在拟合过的4个模型中-2logLR逐步减小,广义决定系数在增大,模型拟合效果还是不错的。
(8)每一步的预测分类表,预测准确率由Block 0的51.9%上升至77.8%。逐步回归得出的结果是保证模型的最大似然函数值最大,但不能保证此时的预测精度最高。
每一步第一行最后的百分比为真阴性率(特异度),第二行为真阳性率(灵敏度),以第四步结果为例,特异度75.0%,灵敏度80.8%。
(9)每一步拟合入选方程的变量检验情况,输出每一步模型中参数估计值,包括常数项、各自变量的回归系数及标准误、Wald卡方值、自由度、P值及OR值(Exp(B))。最后一步的入选变量作为最终结果,最终筛选出的危险因素有4个,分别是年龄(X1)、高血脂史(X5)、动物脂肪摄入(X6)、A型性格(X8),说明年龄、高血脂史、动物脂肪摄入及A型性格与冠心病呈正相关,优势比分别是2.519、4.464、23、7.008。以A型性格为例,其结果可做如下解释:不考虑其他因素的印象,A型性格的对非A型性格的人发生冠心病的优势比是7.008(一般文献中会近似的表达为:不考虑其他因素的印象,A型性格的人发生冠心病的可能是非A型性格的人发生冠心病可能的7.008倍)。对于本例年龄和体重指数,按统计结果直接表达年龄每增加10岁/体重指数每增加一级引起的优势比,但此解释应当慎重,因为我们不能确定年龄和体重指数对冠心病的影响和我们的赋值水平是一致的,严格来说此处两变量应该设置成哑变量进行分析,但由于样本量的原因本例仅做演示。哑变量的设置可参见本文后面关于哑变量的设置。
logit(P)=-4.705+0.924X1+1.496X5+3.135X6+1.947X8
需要特别指出的是,本例X1的Wald检验P=0.053>0.05依然保留在了最终的模型中,是因为未达到变量剔除的标准,剔除检验见下一张表格:Model if Term Removed。SPSS默认的进入标准是0.05,剔除标准是0.10(可在选项(Options…)中设置),每一步P值小于等于0.1的变量均保留在方程中。
在对尚未进入模型的自变量进行分析时(结果见表(11):Variables not in the Equation),在进行到step3引入X6后,X1的比分检验结果,P=0.042<0.05,符合纳入标准,因此将其纳入方程。在进行变量剔除时(Model if Term Removed)采用的似然比检验,P=0.041<0.05,尚未达到剔除标准,因此保留在模型中。从检验方法上看,似然比检验是基于整个模型的拟合情况,比分检验一般与似然比检验类似,而Wald检验没有考虑各因素的综合作用,结果最不可靠,因此当结果出现冲突时应以似然比检验结果为准。
(10)输出每一步被纳入的自变量是否需要被剔除,采用的方法是似然比检验。结果显示每一步单独移除纳入的自变量后模型的改变均有统计学意义,因此需要全部保留在方程中。采用不同的变量筛选方法(剔除方法),该处的统计量会有差异。
(11)尚未进入模型的自变量是否可能被纳入的比分检验结果:尚未进入方程的自变量如果再进入现有模型,模型的改变有无统计学意义。可见在Step 1时,还有多个变量可以引入,其中X5的P值最小,Step2时首先引入;在Step 2时首先考虑引入X8,Step3时首选考虑引入X1,而Step4时在现有的进入标准下已经没有需要引入的变量了。
需要特别说明的是,变量是否最终入选,最重要的准则是专业判断,其次为多变量分析,最差的是单变量分析。如在专业上认为某自变量对结果有影响,不论其检验水准如何,都可强行纳入方程。多变量模型综合考虑了各个自变量的影响,结果更为客观,如多变量模型与单变量模型出现矛盾时应以多变量分析结果为准。
强行纳入方法:第一种方法是将欲强行纳入的变量和已筛选出的变量重新进行logistic回归,变量帅选办法为Enter。第二种方法是利用区组(Block)来进行。将欲强行纳入的变量归为一个区组(block),在筛选方法中选择“ENTER”来确保这些变量被纳入,其他变量则归入另一区组(block),筛选方法可以是其他方法,比如Forward:LR。
【3】几个需要注意的问题
(1)样本量
越多越好。理论上讲,每个自变量所需要的事件数至少为10个,也就是研究对象中较少组的记录数与自变量个数之商大于等于10。本例有8个自变量需要分析,病例组和对照组至少各需要80例以上,总样本160例以上,如设置哑变量,自变量增多样本量要求也就更大,而且参照水平至少30例以。本例对照组只有28例,病例组只有26例,最多只能分析的自变量个数是26/10=2.6个,若要分析所有的自变量,样本量就需要增加,否则就需要减少自变量个数。本例仅演示操作。
(2)哑变量
二分类变量取值只有“0”和“1”两个值,它们分别代表两种成对出现的逻辑概念,如“是”和“否”、“有”和“无”、“高”和“低”等,spss默认取值水平高的为阳性结果。当自变量为无序多分类时,SPPS中对变量的赋值大小并不代表自变量间存在次序或者程度的差异,比如研究血型对性格的影响,对A、B、AB、O血型分别赋值1、2、3、4,并不代表性格的logit(P)会按此顺序进行线性递增或递减,此时需要设置哑变量,自变量有n个水平,需要n-1个哑变量,如上面的4个血型,则需要3个哑变量来设置。
无序多分类变量可直接设置成哑变量,对于有序多分类,则视情况而定。张文彤老师给出的解决方案是专业上不能判断不同等级的自变量对因变量的影响程度是一致的时候,需要将有序变量分别以哑变量和连续性变量引入模型,对两个模型进行似然比检验(似然比卡方值等于两模型-2logLR之差,自由度为两模型自变量个数之差),如果似然比检验无统计学意义,且各哑变量回归系数间存在相应的等级关系,则可将该自变量作为连续性变量引入模型,否则还是采用哑变量方式引入。本例年龄和体重指数均为有序多分类变量,我们不能确定冠心病的发病率logit转换值会与设定的年龄等级递增相同,体重指数不同分类之间划分切点是不等距的,直接按等距赋值为1、2、3也不太符合实际情况。上面的示例将年龄和体重指数直接引入模型进行筛选是不恰当的,严格来说这两个变量是应该采用哑变量来分析的,但本来例数太少,引入哑变量后所需样本量应该更多,如果引入哑变量分析可能会使结果误差很大。实际上本例直接引入后,就出现了年龄不再是冠心病发病的危险因素。为更好的演示哑变量的设置及解读,将原数据复制一倍,变量只保留X2、X4、X6、X7,重新进行回归分析。
步骤如下:
分析>>回归>>二分类logistic…
因变量:选入冠心病[Y]
协变量:选入自变量[X2]、[X4]、[X6]、[X7]
筛选变量方法(Method):Forward:LR
分类变量(Categorial…):可将多分类自变量设置为哑变量,将“体重指数(BMI)[X7]”选入分类协变量(Categorial Covariats)框中,低BMI水平(BMI<24)设为参照水平,将Contrast-Indicator,Reference Category-First,Change,Continue
大部分结果解读同示例结果,以下仅结合哑变量对应的结果进行解读。
分类变量的哑变量编码见下表
拟合纳入方程的变量及其检验情况见下表。最后一步的入选变量作为最终结果,最终筛选出的危险因素有3个,分别是X2、X6、X7。对于X2的解读:不考虑其他因素的影响,有高血压病史的患者发生冠心病的可能是无高血压史患者发生冠心病可能的4.646倍(近似,实际是OR=4.646),X6的解释与此类同,高动物脂肪摄入对低脂肪摄入发生冠心病的优势比是22.042。对哑变量的解释则是与参照水平相比的结果:不考虑其他因素的影响,BMI24-26水平对BMI<24水平的优势比是3.279,BMI>26水平对BMI<24水平的优势比是4.039。
要特别注意,哑变量需要遵循同进同出的原则,即在一个模型中同一个多分类变量的所有哑变量要么全部纳入模型,要么全部不纳入模型。目前在各很多统计论坛上,普遍认为结果的第一行是该自变量的总体检验,总体检验有统计学意义,所有哑变量都应保留,本例X7总P值=0.04<0.05,X7(1):P=0.04<0.05,X7(2):P=0.53>0.05。
一般来说第一行的总体检验有统计学意义,其后的哑变量至少有一个是有统计学意义的,有时可能出现后面的哑变量都没有统计学意义的情况,因为哑变量选取不同的参照水平,其他哑变量与之相比的P值会不同,出现这种情况可能是其他哑变量与选取的参照水平相比刚好没有统计学意义。
还有一种情况是此表哑变量总检验P>0.05,结果仍保留在方程中,原因可能是不同的检验方法造成的,跟正文结果(9)后面的解释一样,纳入标准、剔除标准以及方程中变量的检验方法是不一样的,以本例为例,纳入变量方法是比分检验(默认纳入标准P=0.05),剔除标准是最大似然比检验(默认标准P=0.10),而本表方程中变量的检验采用的是Wald卡方检验。Wald与似然比检验出现矛盾时以似然比检验为准。
实际上,自变量设为哑变量后,Variables in the Equations表中直接显示的都是最终入选的变量,具体的纳入和剔除检验则需要从Variables not in the Equation和Model if Term Removed表中查看。如本例,结合上表X7在step3时被纳入,从模型系数的综合检验表格(Omnibus Tests of Model Coefficient)中可以看出,Step3与上一步的似然比检验有统计学意义,纳入该变量时模型的改变有统计学意义(Variables not in the Equation表中step2比分检验结果:P=0.033<0.05),剔除该变量时模型的改变也有统计学意义(Model if Term Removed表中step3的似然比检验结果:P=0.034<0.05)。
(3)模型效果检验
模型拟合效果可以通过对似然比值的变化和广义决定系数(Model Summary)、预测分类表(Classification Table),解读如正文。另外对模型效果的检验还有ROC曲线。
制作ROC曲线步骤如下:
分析>>回归>>二分类logistic…因变量:选入冠心病[Y]
协变量:选入自变量[X2]、[X4]、[X6]、[X7]
筛选变量方法(Method):Forward:LR
保存(Save…):选中预测值中的概率(Probabilities)
Continue
OK
分析>>ROC曲线(ROC Curve…)检验变量(Test Variable):选入新生产的预测概率(Predicted probability[PRE_1])
状态变量(State Variable):选入冠心病[Y],将Y=1的研究对象指定为病人(状态变量值(Value of State Variable):1)。
显示(Dispaly)选中所有复选框:ROC曲线、带对焦参考线、标准误和置信区间、ROC曲线的坐标点
OK
结果显示曲线下面积为0.883,P<0.001。P值的H0假设是曲线下面积为0.5。
ROC曲线下面积取值范围0.5-1,0.5-0.7表示诊断价值较低,0.7-0.9表示诊断价值中等,0.9以上表示诊断价值较高。如果ROC曲线沿着对角线方向分布. 表示分类是机遇造成的,正确和错误的概率各位50%,此时该诊断方法无效,较好的诊断方法的ROC曲线应该是从左下角垂直上升至顶线.然后水平向右至右上角,更外面离对角线更远的曲线其灵敏度和特异度均高于里面的离对角线更近的曲线。
(4)模型的拟合优度的检验
可采用Pearson拟合优度检验和Deviance拟合优度检验,此两法在SPSS的二分类的logistic回归没有输出
似然比检验是 计算经筛选出的变量的饱和模型的-2logLR值和只引入筛选出的变量的主效应模型(简单模型)的-2logLR值,两者之差服从卡方分布,自由度为两者参数个数之差,若P>0.05则说明拟合筛选的自变量主效应的logistic回归模型已经足够。注:饱和模型可以理解为纳入各自变量主效应及其交互项的模型,简约模型为非饱和模型,比如缺少交互项。
除了似然比检验外,SPSS中还有Hosmer-lemeshow检验,可在选项(Options…)中选入Hosmer-lemeshow goodness-of-fit,结果出现在“模型概况(Model Summary)”表格之后,输出“Hosmer和Lemeshow检验”以及“Hosmer和Lemeshow检验列联表”。其中Hosmer和Lemeshow检验列联表是十分位组的观测值和期望值,按模型求得某个体的得病概率,概率递增排序后分为10等份,据此期望值与相应的观测值求得Pearson卡方(自由度=组数-2=8,但有时自变量组合和样本量的原因组数可能少于10)。
本例最终结果χ2=8.727,P=0.273>0.05,表明简约模型与饱和模型间无差异(H0假设是简约模型与饱和模型无差异。如果结果显著则说明现有简约模型仍然需要加入新的变量以提升模型的解释力度;相反若结果不显著说明简约模型中包括的自变量已足够,即解释力度已与饱和模型无差异)。
(5)模型诊断
可采用残差分析、迭代记录、分类图等。通过残差分析可以查找异常值,可通过保存(Save…)中的残差( Residuals)部分来进行,一般来说残差绝对值大于2,该条记录可能是异常点。残差图可参见
代记录在选项(Option…)中选中Iteration history来获得,健康迭代过程的迭代记录似然值和自变量系数从迭代开始就向着一个方向发展,如中间出现波折,尤其是当引入新变量后变化方向改变了,则提示要好好进一步分析。分类图可以直观的观测模型的预测状况,可在选项(Option…)中选中Classification plots来获得
(6)多重共线的检验
运用相同的因变量和自变量拟合线性回归模型进行共线性诊断
分析>>回归>>线性(Linear…)
选入相应的因变量和自变量
统计(Statistics…):选中Collinearity diagnostics,Continue,OK
查看结果中的回归系数表(Coefficients),如容忍度(Tolerance)小于0.1,方差膨胀因子(VIF)大于10,则提示共线性的存在。存在共线性最简单的处理方法就是剔除引起共线性的因素。
END
转自个人微信公众号【Memo_Cleon】的统计学习笔记
-
将附初值的的变量定位到ROM中
2016-11-14 13:40:51Keil C51中变量和函数的绝对地址定位问题: 1. 变量绝对地址定位 1) 在定义变量时使用 at 关键字加上地址就可. e.g. unsigned char idata myvar at 0x40; 把变量 myvar 定义在 idata 的 0x40 处, 在 M -
SPSS分析技术:回归模型的自变量筛选方法;
2020-12-06 14:51:07原标题:SPSS分析技术:回归模型的自变量筛选方法;欢迎关注天善智能微信公众号,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区。 对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴趣的... -
JS 基础之全局变量,局部变量
2018-08-23 09:56:29本章将概要介绍一些编写高质量JavaScript的最佳实践、模式和习惯,比如避免全局变量、使用单var声明、预缓存循环中的length、遵守编码约定等等。本章还包括一些编程习惯,这些习惯跟具体的代码关系不大,而是更多... -
地学计算方法/地统计学(第三章区域化变量理论)
2020-05-21 08:41:00随机变量:随机变量表示随机试验各种结果的实值单值变量(Z),且对于试验中的任何实值都有确定的概率,随机变量和对随机变量的观测可以从总体和抽样的角度来理解。随机变量(Z)每次的观测结果是一个确定的数值(z),就... -
k8s 向容器提供配置 变量信息总结configmap
2022-01-26 14:22:32以下将介绍向容器提供配置信息的几种方法 通过命令行参数进行配置 在制作Docker镜像时,...另外在基于某镜像使用Docker命令创建容器时,可以在命令行向ENTRYPOINT中的程序传递额外的自定义参数,甚至还可以修改... -
R 多变量数据预处理_R语言 | randomForest包的随机森林回归模型以及对重要变量的选择...
2020-11-21 23:57:14R包randomForest的随机森林回归模型以及对重要变量的选择关于随机森林(random forest),前文“随机森林分类以及对重要变量的选择”中已经对其基本原理作了简单概括。在前文中,响应变量是一组类别变量(代表了样本的... -
在调试MFC程序中查看变量的方法(包含控制台)
2016-11-07 19:49:08在调试MFC程序时,我们经常需要查看特定位置变量的输出值。或者在某特定条件执行时,给出一个输出标识。 一般来说,有3种方法: 1)调用TRACE(LPCTSTR lpszFormat, ...)函数 在MFC中使用TRACE函数来打印输出结果... -
机器学习训练过程中常见问题
2019-08-20 10:28:51如果你改变过实验中的模型结构或者超参数,你也许发现了:当模型在训练数据集上更准确时,它在测试数据集上却不⼀定更准确。这是为什么呢? 因为存在着训练误差和泛化误差: 训练误差:模型在训练数据集上表现出的... -
理解随机变量
2019-06-06 10:28:09连续抛掷一枚硬币共5次,在这个试验中,正面出现的次数是一个随机变量 在两次抛掷一个骰子的试验中,下面的例子是随机变量: 两次抛掷骰子得到的点数之和; 两次抛掷骰子,得到的点数为6的次数 在传输信号的实验... -
风控建模三:变量筛选原则
2019-12-09 22:24:09风控建模一:变量筛选一 变量自身分布稳定性psi长期趋势图二 变量和目标值的强相关关系IV值变量数的选择 好的模型变量直接决定着一个风险模型是否稳定和有效,而好的模型变量都具备以下三种特性: 1、变量自身的... -
有序/无序分类变量的统计推断
2020-08-04 19:22:47有序/无序分类变量的统计推断1 有序分类变量的统计推断——非参数检验1.1 非参数检验概述1.2 两个配对样本的非参数检验1.3 两个独立样本的非参数检验1.4 多个独立样本的非参数检验1.5 多个配对样本的非参数检验2 ... -
WOE:信用评分卡模型中的变量离散化方法(生存分析)
2016-11-11 02:21:00WOE:信用评分卡模型中的变量离散化方法 2016-03-21 生存分析 在做回归模型时,因临床需要常常需要对连续性的变量离散化,诸如年龄,分为老、中、青三组,一般的做法是ROC或者X-tile等等。今天介绍一种在信用卡... -
降低汽油精制过程中的辛烷值损失模型
2020-09-20 22:19:25汽油清洁化重点是降低汽油中的硫、烯烃含量,同时尽量保持其辛烷值。 欧盟和我国车用汽油主要规格 车用汽油标准 辛烷值 硫含量/(μg/g) ≯ 苯含量/% ≯ ... -
Keil C51中变量和函数的绝对地址定位问题:
2016-06-07 16:57:13Keil C51中变量和函数的绝对地址定位问题: 1. 变量绝对地址定位 1) 在定义变量时使用 _at_ 关键字加上地址就可. e.g. unsigned char idata myvar _at_ 0x40; 把变量 myvar 定义在 idata 的 0x40 处 -
predict函数 R_R包randomForest的随机森林回归模型以及对重要变量的选择
2020-11-20 13:09:33R包randomForest的随机森林回归模型以及对重要变量的选择mp.weixin.qq.comR包randomForest的随机森林回归模型以及对重要变量的选择关于随机森林...随机森林分类以及对重要变量的选择”中已经对其基本原理作了简单概括... -
统计思维(实例5)——变量之间的关系
2017-12-21 22:21:13如果能从一个变量的信息中得到另一个变量的信息,那么这两个变量之间就是相关的。 -
浙江大学【面板数据分析与STATA应用】——第三讲内生性与工具变量法
2020-07-26 23:31:34联立性是指一个计量方程中的核心解释变量A对被解释变量B产生影响,反过来,被解释变量B又对A产生影响。 如果B对A有正向的影响,正向冲击就会导致A增加,从而导致核心解释变量A与误差项正相关。 如果B对A有负向的... -
多变量分析”——数据挖掘、数据分析
2018-11-26 21:40:01多重对应分析在超过两个以上定类变量时有时候非常有效,当然首先我们要理解并思考,如果只有三个或有限的几个变量完全可以通过数据变换和交互表变量重组可以转换成两个定类变量,这时候就可以用简单对应分析了。... -
计算法 -- 从数据中自动实现寻找因果关系的算法过程
2020-03-20 20:57:51所以一般情况下,在进行因果推理前,我们必须假设这些关系是不会随着时间的变化而变化的 0x4:正确变量假设 对于因果推理活动来说,我们首先要确保我们测量了正确的事物, 如果我们手上掌握的是金融市场的数据,那... -
R包randomForest的随机森林回归模型以及对重要变量的选择
2020-12-23 11:35:57R包randomForest的随机森林回归模型以及对重要变量的选择mp.weixin.qq.comR包randomForest的随机森林回归模型以及对重要变量的选择关于随机森林(random forest),前文“随机森林分类以及对重要变量的选择”中已经... -
Linux之bash变量和逻辑运算
2018-10-03 20:30:11在计算机中变量它依旧指的是可变化的数,只不过表现形式有些变化。它指的是变量名+所指向的内存空间。 变量的特点 变量分强类型变量,与弱类型变量 强类型变量:变量需事先声明且需提前定义其变量存储格式 弱... -
编译过程中链接器的作用
2019-06-02 00:24:22变量 对于变量而言,定义可以分为两种: 全局变量(global variables):其生命周期... 局部变量(local variables):生命周期只存在于函数的执行过程中(即局部范围(local extent)),只能在函数内部访问 /... -
各变量值与其算术平均数的离差平方之和为()
2021-01-14 05:55:45各变量值与其算术平均数的离差...A:接触疲劳B:蠕变疲劳C:腐蚀疲劳D:机械疲劳利用正光刻胶曝光、显影、蚀刻的过程中,掩膜版上透光图案对应的基底部位将被A:对B:错对于肥胖的中医食疗要符合中医治疗肥胖的原则,主... -
修改变量名,简单有效地提高代码质量!
2019-08-12 12:00:00很多人经历过从为一次性分析编写研究导向的数据科学代码到编写生产水平代码的过程,所以不得不摒弃从数据科学书籍、课程和实验室中获得的实践来改进编程方式。可实际应用的机器学习代码与数据科学家的编程方法有许多... -
笔记 - 概率论:随机变量与独立同分布
2019-07-09 14:38:44参考文章 总体与样本的理解 从整体抽出一个个体,就是对总体X进行一次观察并记录结果。...X1,X2,..,XnX1,X2,..,Xn称之为来自总体X的一个简单随机样本 随机变量 随机变量是指变量的值无法预先确定仅以一定的可能性(... -
Android 开发过程中平时遇到的一些问题及总结
2018-05-05 18:30:57相对比面试官的问的一些问题其实都是基础的知识,但就是一些基础的知识我们也不是很完美的回答出来,我们也知道现在的开发人员很多,一家公司一个岗位就会有很多的开发者投递,在那么多开发者中你如何让面试官很深的...