SPSS+AMOS数据分析案例教程-关于中介模
SPSS视频教程内容目录和跳转链接
Mplus中介和调节教程
大学生问卷互填群
Meta分析辅导+代找数据
SPSS+AMOS数据分析案例教程-关于中介模
SPSS视频教程内容目录和跳转链接
R语言快速入门视频教程
LCA潜在类别分析和Mplus应用
Amos结构方程模型数据分析入门教程
倒U关系回归分析中介效应和调节效应分析SPSS视频教程
统计咨询(图文问答)

远程数据库下载和查询教程

使用ssh登录Linux

  • 新建链接,输入以下信息
  • 输入密码
  • 点击文件管理按钮
  • 找到你要下载的文件,双击下载

在mysql中做查询

在mysql中做查询需要进入muysql的交互环境。

  • 进入mysql
1
mysql -h[ip地址] -u[用户名] -p[密码]

以下命令都是在mysql交互环境中运行

  • 查询有哪些数据库
1
show databases;
  • 选择一个数据库
1
use name_of_databse;
  • 查询数据库
1
select count(*) from basic_child_info;

下载数据库表

  • 把表下载到当前目录
1
mysqldump -h[ip地址] -u[username] -p[password] [databse name] [table name] > [filename].sql;
  • 导出表到本地

作文自动分类方案设计

语义空间的构建

数据采集

分词和词性标注

心理特征标注

构建语义空间

基于语义空间

学生作文人工标注

数据提取

开发标注页面

保存标注后数据

预测

作文映射到语义空间

构建语义向量向测量指标的网络

神经网络python库keras在windows下部署过程,带下载链接

环境

  • 64位win10
  • python 3.5 64 bit

keras的官方文档说,他们只支持python2.7-python3.5。

下载wheels

因为numpy和scipy在windows平台上安装会出现编译问题,因为他们依赖一些c库会找不到,所以我们就安装wheel格式的库,他们是预先编译好的。

下载链接:http://pan.baidu.com/s/1dETxbwd 密码:5jwl

在这里你能看到有很多.whl格式的文件,如果你跟我的python版本一样,你可以下载,否则你需要下载适合你自己版本的安装文件。

安装numpy和scipy

1
2
3
cd wheel文件所在的文件夹
pip install "numpy-1.11.3+mkl-cp35-cp35m-win_amd64.whl"
pip install "scipy-0.19.0-cp35-cp35m-win_amd64.whl"

安装tensorflow

tensorflow是keras的神经网络计算引擎,但是安装keras的时候,不会自动安装它,因为这是一个可选包,所以你的自己安装。

1
pip install tensorflow

安装keras

因为在安装麻烦的库已经安装好了,现在可以安装keras了。keras还依赖一些其他的库,比如six/tensorflow/pyyaml等,不过他们可以在安装keras的时候,自动被安装,所以不需要你手动安装。

1
pip install keras

hello keras

打开python shell,可以在cmd中输入python来打开。

首先来构建一个网络结构

1
2
3
4
5
6
7
8
from keras.models import Sequential
from keras.layers import Dense, Activation
model.add(Dense(units=25, input_dim=64))
model=Sequential() #网络基本结构
model.add(Dense(units=25, input_dim=8*8)) #添加一个隐层,有25个节点,64个输入
model.add(Activation("sigmoid")) #设置激活函数logistic
model.add(Dense(units=10)) #增加一个输出层
model.add(Activation('sigmoid')) # 设置激活函数

准备数据,我们要得到输入和输出矩阵,输入矩阵每一行是一个64维的向量,输出矩阵每一行是一个10维矩阵

1
2
3
4
5
6
7
8
9
10
11
data=open('orc-data.csv','r').readlines()
data=[line.strip().split(',') for line in data]
data=[list(map(row, int)) for row in data]
data=[list(map(int, row)) for row in data]
X=[row[1:] for row in data]
temp_Y=[row[0] for row in data]
Y=[]
for y in temp_Y:
v=[0]*10
v[y]=1
Y.append(v)

现在我们得到了两个矩阵X和Y。网络结构已经建好,我们可以训练这个模型了

1
2
3
4
model.compile(loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy'])
model.fid(X, Y, batch_size=100, nb_epoch=20)

人工神经网络入门+代码实现ORC

在表格里写入一个一个数字(0-9)
预测结果: ??
信度:

计算计算过程

输入和输出

假设网络中所有的参数已知,根据一个输入向量x,求输出向量y。

首先输入是一个64维向量:

\[ x=\left[ x_1, x_2,\dots x_d \right] \](d=64)

而输出向量应该是一个10维的向量,用来表征10个数字的识别概率。

\[ \hat y=\left [ \hat y_1, \hat y_2,\dots \hat y_l \right](l=10) \]

已知条件:

  • 输入层到隐层神经元之间的链接权重v

\[ v=\left| { \begin{array}{c} v_{11} & v_{12} & \dots & v_{1d}\\ v_{21} & v_{22} & \dots & v_{2d}\\ \vdots & \vdots & \ddots & \vdots\\ v_{q1} & v_{q2} & \dots & v_{qd} \end{array} }\right| (d=64, q=\text{count of hidden layer neurons})\]

  • 隐层神经元的阈值b

\[ b=[b_1, b_2, \dots, b_q](q=\text{count of hidden layer neurons}) \]

  • 隐层到输出层的权重w

\[ w=\left| { \begin{array}{c} w_{11} & w_{12} & \dots & w_{1q}\\ w_{21} & w_{22} & \dots & w_{2q}\\ \vdots & \vdots & \ddots & \vdots\\ w_{l1} & w_{l2} & \dots & w_{lq} \end{array} }\right| (l=10, q=\text{count of hidden layer neurons}) \]

  • 输出层的阈值\( \theta \)

\[ \theta=[\theta_1, \theta_2,\dots,\theta_l](l=10) \]

  • 激活函数

\[ f(x)={ 1 \over { 1 + e^{-x} } } \]

计算结果

  • 隐层神经元的输入

\[ \alpha = v · x^T + b \]

  • 隐层神经元的激活

\[ \beta=f(\alpha) \]

  • 输出神经元输入

\[\gamma = w · \beta + \theta\]

  • 输出神经元的激活

\[f(\gamma)\]

synaptic.js实现神经网络

为了演示我们就用一个前端库来做一个神经网络。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var myNetwork = new synaptic.Architect.Perceptron(64, 25, 10)
var trainer = new synaptic.Trainer(myNetwork)
data=[
{input: [0,0,0,0,1,...,0], output: 1},
{input: [0,0,0,0,1,...,0], output: 1},
{input: [0,0,0,0,1,...,0], output: 1},
{input: [0,0,0,0,1,...,0], output: 1},
{input: [0,0,0,0,1,...,0], output: 1},
{input: [0,0,0,0,1,...,0], output: 1},
{input: [0,0,0,0,1,...,0], output: 1}
]
trainer.train(data)
new_input=[0,0,1,...,0]
var output = network.activate(new_input)

测试d3.js在hexo博客中的效果

d3.js可以在hexo博客中使用,如下图所示。但是有一些坑需要你提前知道如何填。

json数据

d3经常需要用到json格式的数据文件,如果放在代码里不太好,加载js的时候比较慢,
所以通常我们都是用d3.json方法,它需要你准备一个可被调用的json文件。
那么,我的做法是,在文章(post)的同名资源文件夹中加入json文件,但是我遇到一个问题,
就是json文件会被hexo当做一篇post给渲染,导致你的网站中会出现一篇无名的文章,
内容就是json文件的内容。你可能想到在_config.yml中配置skip_render,但是,
这个选项还有一些bug,我也懒得去改,这么做并不能防止生成一篇莫名文章。
我想到没有后缀名的文件是不会被渲染的,所以我就把json文件的后缀名给去掉,这样就可以了。

代码

hexo中想要嵌入到文章中的代码通常写在{ raw }your html code{ endraw }中(标签中百分号没写),
我也是这么做的。但是你一定要注意,文章不仅会出现在文章页面,还可能会出现在index(home)页,
这就麻烦了,因为你的JavaScript很可能影响到首页。如果你加载太多JavaScript库,还会导致首页加载速度过慢,
如果你在意用户体验或者SEO,你就需要注意这点。

我的方法是在文章开始输入一个配置变量,这是我这篇文章的配置:

1
2
3
4
5
6
---
title: 测试d3.js在hexo博客中的效果
date: 2017-06-11 08:12:09
tags: [hexo, d3js]
d3js: true
---

你可以看到d3js这个变量。但是它还不能发挥作用,因为我们还得修改网站的模板。让模板侦测该变量,
如果为true就加载d3.js这个库。所以我们先增加一个partial文件,在主题文件夹下layout/_partial/d3js.ejs

1
<script src="https://d3js.org/d3.v4.min.js"></script>

然后再修改head.ejs, 增加如下代码:

1
2
3
4
<% if(page.d3js){ %>
<!-- d3js -->
<%- partial('d3js') %>
<% } %>

到此,我们已经成功了一半了(怎么还有一半?)

探测d3是否加载

在写post的时候,你如果直接用d3这个变量,会引发错误,因为在index页面我们不允许加载d3,但是文章出现在首页的时候,
错误就发生了,告诉你d3是undefined。所以在使用d3前,你需要判断d3是否为undefined。你可以用in操作符即可:

1
2
3
if("d3" in window){
// code to run
}

代码

OK, 是时候让你看到我文章中写的全部代码了,而代码的运行效果就是下图。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86

<div id="d3js-example-content">
这里是文章自定义内容,你需要进入该文章才能看到。
</div>
<style>

# input-button {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
position: relative;
left: 10px;
top: 10px;
}

</style>

<script>

if ('d3' in window){
var html=''
var contentDiv=document.getElementById("d3js-example-content");
contentDiv.innerHTML='<canvas width="960" height="600"></canvas>' +
'<label id="input-button"><input style="width:240px;" type="range" min="0" max="1" step="any" value="0.5">'+
' Link Strength</label>';

var canvas = document.querySelector("canvas"),
context = canvas.getContext("2d"),
width = canvas.width,
height = canvas.height;

var simulation = d3.forceSimulation()
.force("link", d3.forceLink().id(function(d) { return d.id; }).strength(0.5))
.force("charge", d3.forceManyBody())
.force("center", d3.forceCenter(width / 2, height / 2))
// .alphaDecay(0);

d3.select("input[type=range]")
.on("input", inputted);

d3.json("miserables", function(error, graph) {
if (error) throw error;

simulation
.nodes(graph.nodes)
.on("tick", ticked);

simulation.force("link")
.links(graph.links);

function ticked() {
context.clearRect(0, 0, width, height);

context.beginPath();
graph.links.forEach(drawLink);
context.strokeStyle = "#aaa";
context.stroke();

context.beginPath();
graph.nodes.forEach(drawNode);
context.fill();
context.strokeStyle = "#fff";
context.stroke();
}
});

function inputted() {
simulation.force("link").strength(+this.value);
simulation.alpha(1).restart();
}

function drawLink(d) {
context.moveTo(d.source.x, d.source.y);
context.lineTo(d.target.x, d.target.y);
}

function drawNode(d) {
context.moveTo(d.x + 3, d.y);
context.arc(d.x, d.y, 3, 0, 2 * Math.PI);
}




}


</script>
这是特殊内容,你需要进入该文章才能看到。

selenium数据采集入门(for psychologist)

本篇文章主要用于向非技术人员介绍如何使用python-selenium来简单的采集网页数据的方法。本篇文章用的python版本是3.5 64位,安装32位还是64位python主要看你的系统,如果你的系统是64位,你安装两种版本都可以,但是如果你的系统是32位,你只能选择32的python,chrome-webdriver的下载链接会附的后面。

安装环境

安装python

非常简单,就是一路下一步即可。重点是你要记录下python安装在哪里,一会要用到。

安装selenium

打开Windows的dos窗口,输入如下命令,然后回车

pip install -U selenium

安装浏览器驱动器

首先,你自己要去安装最新的chrome浏览器,这个不在这里介绍。

第二步,从这里下载chrome浏览器的驱动器,链接:http://pan.baidu.com/s/1pKUyrAr 密码:390v

或者你可以从chromedriver的官方网站下载所有版本的chromedriver,包括mac和linux版。地址:https://sites.google.com/a/chromium.org/chromedriver/downloads

chromedriver的版本和chrome的版本必须匹配,比如chrome版本在59-61之间,可以使用chromedriver-2.32,截止发稿日,这是最新的版本。

你会得到一个chromedriver.exe文件,不需要安装,但是你得把它放到python能找到它的地方,你可以通过下图的方式找到python安装在哪里,如图所示,C:\Users\wangluobu\AppData\Local\Programs\Python\Python35\Scripts\就是我要找的位置,我就把chromedriver.exe放到这个目录下。

第三步, 测试是否能从python启动chrome浏览器。

新建一个python程序文件,任何一个以.py结尾的文本文件都可以,你可以把一个记事本文件的后缀名改为py,创建好该文件后,右键单击该文件,选择Edit With IDLE,输入如下代码:

1
2
3
4
import selenium
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("http://mlln.cn/")

代码填好了,按下快捷键F5就应该能看到chrome浏览器打开,并定位到网站mlln.cn

chrome网页调试工具

网页开发人员经常会用调试工具来查看网页的源码。chrome浏览器自带调试工具,用chrome打开网址mlln.cn,然后按下F2可以看到调试工具。

你要会定位一个网页元素,进而查看它的源码。使用这个位于左上角的小工具,点击它。

然后点击网页上的标题,你会再代码窗口看到网页标题对应的代码。

假如现在我们想要采集的数据就是该网页的标题,我们需要写一个python脚本:

1
2
3
4
5
6
import selenium
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("http://mlln.cn/")
h1 = driver.find_element_by_id('main-title') # 根据id获取元素H1
print(h1.text) #打印H1标签内的文本

你现在知道了,只有配合网页调试工具,我们才能知道我们要的数据在哪里。

selenium 入门

使用selenium需要有网页制作的基础知识,也就是要懂HTML,遇到复杂的问题可以根据HTML知识来解决,如果你不懂HTML,你可以花两天时间了解一下。

定位标签

要知道网页代码是由很多嵌套的标签构成的,为了获取网页中的数据,我们其实就是要获取标签内的文本。

selenium提供了多种方法帮你找到你要的标签。这个列表就是所有:

定位单个标签的方法,他们都返回一个标签。

1
2
3
4
5
6
7
8
find_element_by_id  #我们刚才用的就是这个方法
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector

定位多个标签的方法,这些方法都返回一个列表:

1
2
3
4
5
6
7
find_elements_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector

常用方法举例

find_element_by_id

id是唯一标记html元素的属性,一个页面上不会有重复的id标签,所以你可以使用find_element_by_id快速的找到一个标签。但是有id属性的标签非常少。

加入我们想要获取网站的名字是什么,你需要分析页面上标题的标签,我们还以mlln.cn为例子,它的网站标题标签的代码是<h1 id="main-title" class="title">DataScience</h1>,我们想得到的是标题DataScience:

1
2
3
4
5
from selenium import webdriver  #引入webdriver
driver=webdriver.Chrome() #打开浏览器
driver.get("http://mlln.cn/") #打开页面
element=driver.find_element_by_id('main-title') #找到h1标签
title=element.text #获取h1元素内的文本
find_element_by_class_name & find_elements_by_class_name

class是标签的类别,所以通常有多个标签有相同的class,但是如果我们只想得到第一个特定class的标签,那么我们只需要使用find_element_by_class_name,如果我们想要获取所有特定class的标签,我们需要使用find_elements_by_class_name。

比如我们想要获取第一篇文章的发布日期,日期的标签是这样的形式:<span class="date">2017年06月08日</span>,我们看到这个标签的class是date,那么:

1
2
first_element=driver.find_element_by_class_name('date')
date=first_element.text

或者,我们想要获取所有日期,我们就要用第二个方法:

1
2
3
4
5
6
all_elements=driver.find_elements_by_class_name('date')
dates=[]#用列表存放将要获取的日期
# 通过for循环获取所有的日期
for ele in all_elements:
dates.append(ele.text)
print(dates)
find_element_by_tag_name & find_elements_by_tag_name

tag就是标签的意思,也就是我们本篇文章一直说的html标签,如果我们知道想要某个标签的名字, 比如还是想得到网站标题,它的源码是

1
<h1 id="main-title" class="title">DataScience</h1>
1
2
first_element=driver.find_element_by_tag_name('h1')
print(first_element.text)

我们可以看下所有的h1标签都是什么:

1
2
for ele in driver.find_elements_by_tag_name('h1'):
print(ele.text)
1
2
3
4
find_element_by_link_text
find_elements_by_link_text
find_element_by_partial_link_text
find_elements_by_partial_link_text

link(链接)大家都知道,点击链接就能跳转到新的页面。我们可以根据链接内的文字获取链接标签。partial_link就是链接的一部分,也就是说你不用输入链接的所有文字,只需要输入一部分,但是这部分文字必须特征明显,以至于能找到你真正想要的链接。

1
2
3
eles=driver.find_elements_by_partial_link_text('数据')
for e in eles:
print(e.text)
xpath

xpath是描述html标签位置的方法,需要一些学习成本(大概2小时),通常我们不会用到这种方法,因为比较麻烦。这里已经超出本篇文章的范围,有兴趣的可以在这里学习。

数据存储

通常数据量不太大的时候,我们使用txt文本存储数据就可以了,这种数据用excel也能打开,然后你再进行一些数据转换。

比如现在我们采集了n个用户的m个特征,我们的数据应该是使用嵌套列表来存放数据:

1
2
3
4
5
6
data=[
['user1',1,0,2,1,0],
['user2',1,0,2,1,0],
['user3',1,0,2,1,0],
['user4',1,0,2,1,0],
]

这样的数据是如何形成的?我们模拟一个生成这样的数据的过程:

1
2
3
4
5
6
7
8
data=[]  #一个空列表用于存放所有用户数据
for n in range(1,4):
u='user' + str(n)
user_data=[u,] #子列表,用于存放一个用户的数据
for m in range(5):
user_data.append(m) #把数据填充到列表中,m只是一个占位符

data.append(user_data) #把一个用户的数据追加到data中

这样的数据我们得写入到一个txt文件中。

1
2
3
4
5
6
7
8
9
10
file_name='data.txt'
f=open(file_name, 'w') #打开一个文件
for user_data in data:
#把数据都转换成字符串
user_data=[str(d) for d in user_data]
#把列表转换成字符串
string_data=','.join(user_data)
# 写入到文件
f.writeline(string_data)
f.close() #最后要关闭文件

附录

抽样系统备注文本信息自动化分类器

第一步: 构建潜在语义空间

  • 分词:将备注信息切分成词
  • 清理:将标点符号清理掉
  • 构建词在备注信息中的词频矩阵, 如:

\[ \begin{array}{c | ccc} \text{matrix} & \text{备注1} & \text{备注2} & \text{备注n...} \\ \hline \text{残疾} & 0 & 1 & \cdots \\ \text{父母} & 1 & 1 & \cdots \\ \text{建议} & 0 & 2 & \cdots \\ \vdots & \vdots & \vdots & \vdots \\ \end{array} \]

  • 进行加权,用tf-idf方法

  • 根据如下公式对矩阵进行svd分解

\[ \{X\}=\{W\}\{S\}\{P\} \]

如果你使用python,你可以使用numpy.linalg.SVD函数来做这个分解。

  • 筛选对角矩阵S中最大的n个特征值,然后选出WP中与特征值对应的特征向量,组合起来形成相应的\(W'\)\(P'\)

  • 最后根据公式反向计算词文矩阵X',得到潜在语义空间:

\[ \{W'\}\{S'\}\{P'\}=\{X'\} \]

得到的X’矩阵中,每一行都是一个词向量。

  • 求备注向量

在原始的词频矩阵X中,每一列代表一个备注中,词的词频,我们把它叫做备注的词频向量——\(V_i\),其中下标i表示第i
个备注。由于在上一步中我们求得了每个词的语义向量。所以备注的词频向量就可以转换成词所在的语义空间向量\(V'_i\)。让向量\(w_j\)表示X’中j词的语义向量。假如矩阵中有n个词。

\[ M = X'.T * V_i = \left[ \begin{array} \vdots\\ w_j \\ \vdots \end{array} \right] * V_i = \left[ \begin{array} \vdots\\ w'_j \\ \vdots \end{array} \right] \]
\[ V'_i = \sum_{j=0}^n w'_j \]

第二步:使用机器学习算法预测备注是否能参加测试

  • \( V'_i \) 就是备注文档的语义向量,这样我们就得到了备注文档的语义。以此为输入,以该备注的被试是否能够参加测试为输出,使用适当的机器学习方法即可预测一个备注是否能够参加测试。

MathJax入门

MathJax简介

MathJax是一款展示数学符号、数学公式的JavaScript库,可以解析Latex、MathML和ASCIIMathML等标记语言,将其渲染成人类可读的公式。今天我在这里总结一点入门的知识点,主要是给自己学习用。

公式标记

用符号$作为公的开头和结尾,比如$a \neq b$可以渲染成\(a \neq b\)

首先是希腊字母的写法

不同的数学符号都有大小写,都列在下表中。

| 名称 |大写 |Tex |小写 |Tex
| —- |—- |— |—- |—–|—–
|alpha |$A$ | \(A\) |$\alpha$ | \(\alpha\)
|beta |$B$ |\(B\) |$\beta$ |\(\beta\)
|gamma |$\Gamma$ |\(\Gamma\) |$\gamma$ |\(\gamma\)
|delta |$\Delta$ |\(\Delta\) |$\delta$ |\(\delta\)
|epsilon |$E$ |\(E\) |$\epsilon$ |\(\epsilon\)
|zeta |$Z$ |\(Z\) |$\zeta$ |\(\zeta\)
|eta |$H$ |\(H\) |$\eta$ |\(\eta\)
|theta |$\Theta$ |\(\Theta\) |$\theta$ |\(\theta\)
|iota |$I$ |\(I\) |$\iota$ |\(\iota\)
|kappa |$K$ |\(K\) |$\kappa$ |\(\kappa\)
|lambda |$\Lambda$ |\(\Lambda\) |$\lambda$ |\(\lambda\)
|mu |$M$ |\(M\) |$\mu$ |\(\mu\)
|nu |$N$ |\(N\) |$\nu$ |\(\nu\)
|xi |$\Xi$ |\(\Xi\) |$\xi$ |\(\xi\)
|omicron |$O$ |\(O\) |$\omicron$ |\(\omicron\)
|pi |$\Pi$ |\(\Pi\) |$\pi$ |\(\pi\)
|rho |$P$ |\(P\) |$\rho$ |\(\rho\)
|sigma |$\Sigma$ |\(\Sigma\) |$\sigma$ |\(\sigma\)
|tau |$T$ |\(T\) |$\tau$ |\(\tau\)
|upsilon |$\Upsilon$ |\(\Upsilon\) |$\upsilon$ |\(\upsilon\)
|phi |$\Phi$ |\(\Phi\) |$\phi$ |\(\phi\)
|chi |$X$ |\(X\) |$\chi$ |\(\chi\)
|psi |$\Psi$ |\(\Psi\) |$\psi$ |\(\psi\)
|omega |$\Omega $ |\(\Omega\) |$\omega$ |\(\omega\)

上标与下标

上标和下标分别使用^与_,例如\(x_i^2\)显示为\(x_i^2\)。默认情况下,上下标符号仅仅对下一个组起作用。一个组即单个字符或者使用{..}包裹起来的内容。也就是说,如果使用10^10,会得到\(10^10\),而10^{10}才是\(10^{10}\)。同时,大括号还能消除二义性,如x^5^6将得到一个错误\(x^5^6\),必须使用大括号来界定^的结合性,如{x^5}^6\({x^5}^6\) 或者 x^{5^6}\(x^{5^6}\)

括号

  • 小括号与方括号:使用原始的( ),[ ]即可,如(2+3)[4+4]:\((2+3)[4+4]\)
  • 大括号:时由于大括号{}被用来分组,因此需要使用{}表示大括号,也可以使用\lbrace\rbrace来表示。
    \{ a*b \}: \(\{a*b\}\)\lbrace a\*b \rbrace\(\lbrace a*b \rbrace\)
  • 尖括号:使用\langle\rangle表示左尖括号和右尖括号。如\langle x \rangle\(\langle x \rangle\)
  • 上取整:使用\lceil\rceil 表示。 如,\lceil x \rceil\(\lceil x \rceil\)
  • 下取整:使用\lfloor 和 \rfloor 表示。如,\lfloor x \rfloor:\(\lfloor x \rfloor\)

常见函数

  • 三角函数:\sin x –> \(\sin x\) ; \cos a –> \(\cos a\) ; \arctan x –> \(\arctan x\)
  • 极限符号: \lim_{1\to\infty} –> \(\lim_{1\to\infty}\)

常见符号

  • 比较运算符:\lt \gt \le \ge \neq –> \(\lt \gt \le \ge \neq\)
  • 箭头符号:\to \rightarrow \leftarrow \Rightarrow \Leftarrow \mapsto –> \(\to \rightarrow \leftarrow \Rightarrow \Leftarrow \mapsto\)
  • 四则运算:+ - \times \div –> \(+ - \times \div\)

顶部符号

我们有时候需要在字母上方书写符号,用{}来表示组合,例如:

  • 单字母\hat xy–> \(\hat x\)
  • 多字母\widehat {xy} –> \(\widehat {xy} \)
  • 横线\overline x –> \(\overline x\)
  • 向量\vec {xy} –> \(\vec {xy}\)
  • \dot x –> \(\dot x\)
  • 箭头\overrightarrow {xy} –> \(\overrightarrow {xy}\)
  • 两点 \ddot x –> \(\ddot x\)

求和

\sum 用来表示求和符号\(\sum\), 有很多不同的写法:

  • 下标表示下限:\sum_1 –> \(\sum_1\)
  • 上标表示上限:\sum^n –> \(\sum^n\)
  • 上下结合,可以写为:\sum_1^n –> \(\sum_1^n\)

积分

\int 表示积分符号 \(\int\), 和求和符号类似:

  • 积分上下限:\int_1^n –> \(\int_1^n\)

和积分类似的符号还有以下这些

  • 累积 \prod –> \(\prod\)
  • 并集 \bigcup –> \(\bigcup\)
  • 交集 \bigcap –> \(\bigcap\)
  • 二重积分 \iint –> \(\iint\)

分数和根号

分数用\frac 表示,例如\frac ab –> \(\frac ab\), {}可以帮助你分组,例如\frac a{b*c} –> \(\frac a{b*c}\),带括号的分数(\frac ab)^2 –> \((\frac ab)^2\) 。 还有一种写法是使用\over,例如1+2 \over 3+4 –> \(1+2 \over 3+4\)

使用\sqrt表示根号,例如 \sqrt[4] x –> \(\sqrt[4] x\)

矩阵和表格

使用\begin{array}{列样式}…\end{array}这样的形式来创建表格,列样式可以是clr表示居中,左,右对齐,还可以使用|表示一条竖线。表格中 各行使用\\分隔,各列使用&分隔。使用\hline在本行前加入一条直线。 例如,

1
2
3
4
5
6
7
8
\begin{array}{c|lcr}
n & \text{Left} & \text{Center} & \text{Right} \\
\hline
1 & 0.24 & 1 & 125 \\
\hline
2 & -1 & 189 & -8 \\
3 & -20 & 2000 & 1+10i \\
\end{array}

\[ \begin{array}{c|lcr} n & \text{左} & \text{中} & \text{右} \\ \hline 1 & 0.24 & 1 & 125 \\ \hline 2 & -1 & 189 & -8 \\ 3 & -20 & 2000 & 1+10i \\ \end{array} \]

`
[J_\alpha(x) = \sum_{m=0}^\infty \frac{(-1)^m}{m! \Gamma (m + \alpha + 1)} {\left({ \frac{x}{2} }\right)}^{2m + \alpha}]

`

一些常用公式

  • 二项式定理

\[ (a + b)^n = /sum{r=0}^n C_n^ra^{n-r}b^r \]

探索过程数据在全球大规模机器考试中的应用

SPSS实例:[2]卡方检验百分比差异

今天讲的卡方检验只是多种卡方检验中的一种,你还看一去看我最新的几篇文章讲分层卡方、相关样本卡方、kappa一致性系数等,这里【http://jingyan.baidu.com/season/33651?pn=26】

  • 第一步是录入数据,我们录入数据的方式如下图:class是分组变量,0值代表A组,1代表B组,effect是是否敏感变量,0代表不敏感,1代表敏感,num是频次,也就是各个组的个案数目。你可以比对上面的交叉表来看看spss数据结构
  • 接着,我们要对数据进行加权,很多人问为什么要加权,实际上我们采用上图所示的数据结构就决定了我们必须用频次进行加权,这样可以让上面的那种数据结构表示呈交叉表。如果没有加权的话,会出现错误,我们待会会看到一个错误的结果,就是没有加权的结果。加权的方法是data–weight cases
  • 将频次放入变量框,然后点击ok按钮,加权成成功
  • 接着在菜单栏上执行:analyse–descriptive statistics–crosstabs,打开交叉表对话框
  • 在这个对话框中,我们需要将行和列变量放入各自的框中,注意看行和列变量不要弄颠倒了,回顾上面的数据结构,你自己对比一下,哪一个是行变量
  • 点击statistic按钮,设置卡方统计量
  • 点击cells按钮,选择输出的参数
  • 最后出现的是卡方检验的结果了,第一个表格是交叉表,显示了期望值和实际值
  • 接着是卡方检验表,这是最关键的结果。我们根据样本量的大小来决定看哪一行的指标

  • 假如我们的总样本数N》40且交叉表中每一个cells中频数均大于5,卡方检验的结果是精确的,可以参考第一行的指标,也就是pearson-chi-square(显然我们的案例满足这个条件)sig值小于.05,说明差异显著,说明两组病人对药物的反应是不同的;假如样本总量N<40,或者cells中有一个频数小于5,我们只能看校正后的卡方值,也就是第二行数据,或者我们看fisher精确概率法获得的值,也就是第四行,这两行都得到了显著的结果;

转载请注明来自DataScience.

邮箱: 675495787@qq.com