楼主: chris1998
17533 6

[实际应用] 关于Log-likelihood ratio计算的问题 [推广有奖]

  • 5关注
  • 7粉丝

讲师

44%

还不是VIP/贵宾

-

威望
0
论坛币
121081 个
通用积分
13.2083
学术水平
44 点
热心指数
54 点
信用等级
43 点
经验
2616 点
帖子
525
精华
0
在线时间
454 小时
注册时间
2011-5-29
最后登录
2023-4-23

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
在看的一篇文章中有下面的原始数据,列1:581962,437149,1325516,2813226,2847335,2451519,列2:2,0,3,1,4,1,文中给出的LL值是7.216,p值是0.129。
我试着在R2.15.2中算了一下,结果出现了问题:
d<-matrix(c(581962,437149,1325516,2813226,2847335,2451519,2,0,3,1,4,1),nr=6)
> d
     [,1] [,2]
[1,] 581962 2
[2,] 437149 0
[3,] 1325516 3
[4,] 2813226 1
[5,] 2847335 4
[6,] 2451519 1
> toi<-chisq.test(d)
警告信息:
In chisq.test(d) : Chi-squared近似算法有可能不准
> g<-2*sum(toi$observed*log(toi$observed/toi$expected))
> g
[1] NaN

请问各位大大:上面的这个LL值为什么会显示为NaN呢?为什么就算不出人家给的7.216呢?
大于2×2的列联表中如何计算出其log likelihood值呢?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Likelihood ratio like Log ATI 文章 如何

回帖推荐

lanyajia 发表于3楼  查看完整内容

前面提到算不出LL的几个例子原因都相同,是因为观察频数中有0值 因为计算公式中有log(toi$observed/toi$expected),如果toi$observed中有0值就计算不出结果,0取对数是没有值的。 在这种情况计算LL的关键是如何处理0值,一种处理方法是用一个较小的值来代替0值。 比如 上面提到的数据 > d [,1] [,2] [1,] 581962 2 [2,] 437149 0 [3,] 1325516 3 [4,] 2813226 1 [5,] 2847335 4 [6,] ...
沙发
chris1998 发表于 2013-9-23 19:04:03 |只看作者 |坛友微信交流群
附件是原书中的另外一段原始数据,我能用1楼的方法计算出第一栏中的LL值,但是算不出第二栏和第三栏的结果来。还望各位高人指点一下啊!自学个R太不容易啦!

001.jpg (76.38 KB)

001.jpg

使用道具

藤椅
lanyajia 发表于 2013-9-24 21:57:31 |只看作者 |坛友微信交流群
前面提到算不出LL的几个例子原因都相同,是因为观察频数中有0值
因为计算公式中有log(toi$observed/toi$expected),如果toi$observed中有0值就计算不出结果,0取对数是没有值的。
在这种情况计算LL的关键是如何处理0值,一种处理方法是用一个较小的值来代替0值。

比如 上面提到的数据
> d
        [,1]        [,2]
[1,]  581962    2
[2,]  437149    0
[3,] 1325516    3
[4,] 2813226    1
[5,] 2847335    4
[6,] 2451519    1

将0值替换为一个较小的数,比如0.1

> d[2,2]=0.1
> toi<-chisq.test(d)
警告信息:
In chisq.test(d) : Chi-squared近似算法有可能不准

> g<-2*sum(toi$observed*log(toi$observed/toi$expected))
> g
[1] 7.075657

计算出的LL值与前面提到的7.216不相同,但比较接近。这种差异主要是0值处理方式的不同造成的。

也可以在运行卡方检验后,再处理观察频数中的0值,即将toi$observed中的0值替换为一个较小的数。

> d<-matrix(c(581962,437149,1325516,2813226,2847335,2451519,2,0,3,1,4,1),nr=6)
> toi<-chisq.test(d)
警告信息:
In chisq.test(d) : Chi-squared近似算法有可能不准

> toi$observed       # 查看一下卡方检验后的观察频数,与原观察频数是一样的
        [,1]        [,2]
[1,]  581962    2
[2,]  437149    0
[3,] 1325516    3
[4,] 2813226    1
[5,] 2847335    4
[6,] 2451519    1

> toi$observed[2,2]=0.1      # 将观察频数中的0值用0.1替换,然后计算LL
> g<-2*sum(toi$observed*log(toi$observed/toi$expected))
> g
[1] 7.276563

计算出的LL与7.216相当接近了。要得到与书中完全一致的结果,需要查看原书中是如何处理0值的。

使用道具

板凳
chris1998 发表于 2013-9-25 20:14:40 |只看作者 |坛友微信交流群
非常感谢您的回复和解释。原书是英国出的,好像作者计算时用的是SPSS。我对SPSS也只是了解点皮毛,最近多半年来一直在自学R,看过的五本书里都没有提及列联表计算LL值的具体操作,上面这个计算方法是以前从老外的R讲座网站上学过来的。
另外还想请教您一下:象2楼附件中第三栏数据出现两个0值的情况也可以象您说的那样处理吗?需将两个0值都替换为0.1吗?这个替换值0.1是通行的做法吗? 期望您能解释一下!本人R新手一个,问题太多,望见谅!在此提前谢过了!

使用道具

报纸
lanyajia 发表于 2013-9-26 11:15:40 |只看作者 |坛友微信交流群
在使用频数表计算统计指标时,如果因为有0值计算不出结果时,采用一个较小值来代替0值是一种被认可的通行做法,但较小值用什么值则没有标准,用0.1应该是可以接受的。如果频数表中有多个0,建议采用相同的较小值替换。

比较一下采用0.1替换0的情况下,用R计算的LL值与SPSS计算结果的差异
以二楼的数据表为例
1、对****表的LL计算,R和SPSS均为668.4795,说明没有0值的时候两个软件计算结果相同。(二楼数据表中报道为622.580显然有误)
2、对于****ed表的LL计算,R为31.39712,与SPSS为32.1255,计算结果接近。
3、对于****s表的LL计算,R为9.7795,与SPSS为10.8062,计算结果接近。

从上面结果看,采用0.1替换0值,计算结果与SPSS接近,是可以接受的。
但另一方面说明SPSS处理0值的方法显然不是用0.1替换,至于采取什么方法,SPSS的技术资料中没有介绍。我估计是使用Fienberg书中的处理方法(Fienberg, S. E. 1980. The Analysis of Cross-Classified Categorical Data. 2nd ed. Cambridge, MA: MIT Press.),遗憾的是我没有此书。

使用道具

地板
chris1998 发表于 2013-9-26 13:03:52 |只看作者 |坛友微信交流群
非常非常感谢您的回复!按照您所说的方法,我已经把二楼表格中的数据又操作了一遍,跟您说的都一样。
另外,您说的那本Stephen E. Fienberg(2nd ed., 1980,MIT)的书籍在网上有其pdf电子版的,是由Springer2007年对其的重印版。您可以到新浪爱问上下载,如果下载不了的话,发消息告诉我一声,我把电子版的给您发过去。希望这消息对您有用!

使用道具

7
jngod 发表于 2013-9-26 20:17:17 |只看作者 |坛友微信交流群

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

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

GMT+8, 2024-5-22 18:41