楼主: xingzhaoh
12142 32

[问答] 请高人指点程序 [推广有奖]

11
epoh 发表于 2012-3-23 15:04:59
xingzhaoh 发表于 2012-3-23 11:37
今天试了一下,又有问题向您询问了老师,程序:
library( systemfit )
rd
1.read.delim会产生数据
  4162 NA
  4163 NA
  造成错误于qr.default(jacobian) : 外接函数调用时不能有NA/NaN/Inf(arg1)

2.数据请存成xxx.csv,避免读取错误产生NA
  然你的数据太大
  Error: cannot allocate vector of size 528.4 Mb
  大数据可能需要考虑用Matlab

12
xingzhaoh 发表于 2012-3-23 19:24:18
epoh 发表于 2012-3-23 15:04
1.read.delim会产生数据
  4162 NA
  4163 NA
这么点数据就大了呀,呵呵, allocate vector of size 528.4 Mb是什么意思,是数据分析时产生的位置矩阵吗?还是什么?

13
epoh 发表于 2012-3-23 19:58:33
xingzhaoh 发表于 2012-3-23 19:24
这么点数据就大了呀,呵呵, allocate vector of size 528.4 Mb是什么意思,是数据分析时产生的位置矩阵吗 ...
Memory Limits in R
  http://stat.ethz.ch/R-manual/R-d ... /Memory-limits.html

14
xingzhaoh 发表于 2012-3-24 19:55:53
epoh 发表于 2012-3-23 19:58
Memory Limits in R
  http://stat.ethz.ch/R-manual/R-devel/library/base/html/Memory-limits.html

15
xingzhaoh 发表于 2012-3-26 11:34:36
数据类型和大小改了后,还是出现同样问题?
请高人分析一下,如果可以的话把您写的程序让我拜读一下,(我可以照这样子做一下)
数据在附件
我写的程序:
library( systemfit )
rc<-read.csv("data.csv")
attach(rc)
bas.formula <- BAS ~(a1*S1+a2*S2)*SCI^a3*(1-exp(-(k1*S1+k2*S2)*(SDI/10000)^k3*AGE))^c
vol.formula <- VOL~ BAS *H*(d0/(H+d1))
labels <- list( "bas.growth", "vol.growth" )
inst <- ~ SCI + SDI + AGE +H + BAS+VOL
start.values <- c(a1=10, a2=10, a3=0.05, k1=1, k2=1,
k3=0.1, c=0.01, d0=10, d1=20 )
model <- list( bas.formula, vol.formula )
model.ols <- nlsystemfit( "OLS", model, start.values, data=rc, eqnlabels=labels )
The following object(s) are masked from 'rc':

    AGE, BAS, DBH, H, NHA, S1, S2, SCI, SDI, VOL
错误于qr.default(jacobian) : 外接函数调用时不能有NA/NaN/Inf(arg1)
此外: 警告信息:
1: In nlm(knls, startvals, typsize = abs(startvals), iterlim = maxiter,  :
  NA/Inf被换成最大的正值
2: In nlm(knls, startvals, typsize = abs(startvals), iterlim = maxiter,  :
  NA/Inf被换成最大的正值
3: In nlm(knls, startvals, typsize = abs(startvals), iterlim = maxiter,  :
  NA/Inf被换成最大的正值
4: In nlm(knls, startvals, typsize = abs(startvals), iterlim = maxiter,  :
  NA/Inf被换成最大的正值
csv上传不了,只有excel了,请您多费心

16
xingzhaoh 发表于 2012-3-26 11:40:17
xingzhaoh 发表于 2012-3-26 11:34
数据类型和大小改了后,还是出现同样问题?
请高人分析一下,如果可以的话把您写的程序让我拜读一下,(我 ...
他给的例子data(ppine)我可以做出结果

17
epoh 发表于 2012-3-26 20:51:23
xingzhaoh 发表于 2012-3-26 11:40
他给的例子data(ppine)我可以做出结果
library( systemfit )
rd<-read.csv("data.csv")
BAS.formula <- BAS ~(a1*S1+a2*S2)*SCI^a3*(1-exp(-(k1*S1+k2*S2)*(SDI/10000)^k3*AGE))^c
VOL.formula <- VOL~ BAS *H*(d0/(H+d1))
labels <- list( "bas.growth", "vol.growth" )
inst <- ~ SCI + SDI + AGE +H + BAS+VOL
start.values <- c(a1=10, a2=10, a3=0.05, k1=1, k2=1,k3=0.1, c=0.01,d0=10, d1=20 )
model <- list( BAS.formula, VOL.formula )
model.ols <- nlsystemfit( "OLS", model, start.values, data=rd, eqnlabels=labels )
#############
会造成Error in qr.solve(t(X) %*% SI %*% X, tol = solvtol) :
  singular matrix 'a' in solve

这是因为nlm()迭代过程 produced NaNs:
   a1    a2    a3    k1    k2    k3     c    d0    d1
10.00 10.00  0.05  1.00  1.00  0.10  0.01 10.00 20.00
   [1]          NaN          NaN          NaN          NaN          NaN
   [6]          NaN          NaN          NaN          NaN          NaN
  [11]          NaN          NaN          NaN          NaN          NaN
  .....
  .....
[1336]          NaN          NaN          NaN          NaN          NaN
[1341]          NaN          NaN          NaN          NaN          NaN
[1346]          NaN  -4.35099309  -3.35232898  -3.35232898  -3.35232898
[1351]  -3.35232898  -2.76494196  -4.50587777  -3.92949280  -3.92949280
[1356]  -2.90042967  -4.29301225  -4.49532589  -4.49532589  -4.31015468
[1361]  -3.77025004  -1.15279229  -2.96549207  -2.83125271  -2.79801656
.....
.....
[2681]  17.48563351   2.10912732   1.94869421   8.02277937  -3.59073728
[2686]  20.56879559   8.81498932  24.64316535  14.51872418  21.72876422
[2691]   1.04307436  18.52173489

##########
这个问题不容易一次解决
跟方程及start.values息息相关,这个只有你最清楚.
若方程没错,请更换start.values多次尝试

18
xingzhaoh 发表于 2012-3-26 21:23:00
epoh 发表于 2012-3-26 20:51
library( systemfit )
rd
谢谢,我明天去试试。

19
epoh 发表于 2012-3-27 13:41:58
xingzhaoh 发表于 2012-3-26 21:23
谢谢,我明天去试试。
library( systemfit )
rd<-read.csv("data.csv")
BAS.formula <- BAS ~(a1*S1+a2*S2)*SCI^a3*(1-exp(-(k1*S1+k2*S2)*(SDI/10000)^k3*AGE))^c
VOL.formula <- VOL~ BAS *H*(d0/(H+d1))
labels <- list( "bas.growth", "vol.growth" )
inst <- ~ SCI + SDI + AGE +H + BAS+VOL

start.values <- c(a1=2.7, a2=3.8, a3=0.7, k1=1.6, k2=0.0003,k3=0.14, c=0.14,d0=8.7, d1=7.9)

model <- list( BAS.formula, VOL.formula )
model.ols <- nlsystemfit( "OLS", model, start.values, data=rd, eqnlabels=labels )
model.ols

nlsystemfit results
method: OLS

convergence achieved after 393 iterations
nlsystemfit objective function value: 76233.6546406485

              N   DF     SSR     MSE    RMSE       R2   Adj R2
bas.growth 1346 1339 11181.6  8.3507 2.88976 0.843225 0.842523
vol.growth 1346 1344 65052.1 48.4018 6.95714 0.975511 0.975493

The covariance matrix of the residuals
           bas.growth vol.growth
bas.growth    8.35070    5.58642
vol.growth    5.58642   48.40184

The correlations of the residuals
           bas.growth vol.growth
bas.growth   1.000000   0.278503
vol.growth   0.278503   1.000000

The determinant of the residual covariance matrix: 372.981

OLS estimates for bas.growth (equation 1)
Model Formula: BAS ~ (a1 * S1 + a2 * S2) * SCI^a3 * (1 - exp(-(k1 * S1 + k2 *
    S2) * (SDI/10000)^k3 * AGE))^c

   Estimate Std. Error   t value Pr(>|t|)   
a1 6.448497   0.498931 12.924636        0 ***
a2 6.600927   0.528995 12.478252        0 ***
a3 0.763467   0.025538 29.895747        0 ***
k1 0.278089   0.034479  8.065529        0 ***
k2 0.239015   0.033888  7.053039        0 ***
k3 1.029892   0.023882 43.124602        0 ***
c  1.048591   0.050071 20.942133        0 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.889757 on 1339 degrees of freedom
Number of observations: 1346 Degrees of Freedom: 1339
SSR: 11181.584959 MSE: 8.350698 Root MSE: 2.889757
Multiple R-Squared: 0.843225 Adjusted R-Squared: 0.842523


OLS estimates for vol.growth (equation 2)
Model Formula: VOL ~ BAS * H * (d0/(H + d1))

   Estimate Std. Error   t value Pr(>|t|)   
d0 8.711485   0.128352 67.871943        0 ***
d1 7.895171   0.305371 25.854357        0 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 6.957143 on 1344 degrees of freedom
Number of observations: 1346 Degrees of Freedom: 1344
SSR: 65052.069682 MSE: 48.401838 Root MSE: 6.957143
Multiple R-Squared: 0.975511 Adjusted R-Squared: 0.975493

已有 1 人评分学术水平 热心指数 信用等级 收起 理由
ywh19860616 + 1 + 1 + 1 热心,精彩帖子

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

20
xingzhaoh 发表于 2012-3-28 15:28:24
epoh 发表于 2012-3-27 13:41
library( systemfit )
rd
老师,你太厉害了,请问你的初始值是怎么设置的,是一个一个试试,还是有别的方法,您能教教我吗?非常感谢老师

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 17:32