2013-10-07 98 views
0

一些數據環:目標值和R中

a <- function(a) {3*a+12*a^2} 
dom1 <- seq(-1,4,0.1) 
vec1 <- a(dom1)[1:10] 

c <- function(c) {-5*c^2+2*c^3} 
dom2 <- seq(-0.1,0.2,0.01) 
vec2 <- c(dom2)[1:10] 

d <- function(d) {2*d^2+5*d^3+12*d^4} 
dom3 <- seq(0.1,0.5,0.01) 
vec3 <- d(dom3)[1:10] 

w <- function(w) {7*w-3*w^2} 
dom4 <- seq(0.5,2.5,0.05) 
vec4 <- w(dom4)[1:10] 

現在假設我們在較大的數據擬合lm model設置lm(y~a+c+d+w)和LM參數c(-0.2,0.2,0.1,0.6)

fun.mean <- function(a,c,d,w) {-0.2*a+0.2*c+0.1*d+0.6*w} 

我試了一下,但沒有按沒有按預期工作:

這裏是通過相關函數生成的向量循環(&域)

for(a in vec1) { 
for(c in vec2) { 
    for(d in vec3) { 
    for(w in vec4) { 
    sol <- fun.mean(a,c,d,w) 
    if (sol %% 1 > 0.40 & sol < 0.50) print(c(a,c,d,w)) 
    }}}} 

所以,我正在尋找的是找到的C組合(A,C,d,W),這等於0.5或理想地將等於間隔0.4-0.5

因此,將c(a,c,d,w)輸出與函數fun.mean相乘不會給出所需的值(區間0.4-0.5)。我做錯了什麼?在給定「目標」值的情況下,找到c(a,c,d,w)值會有更好的方法嗎? for loop會是什麼替代品,因爲它非常慢。

+1

也許你應該確切地說明你在做什麼以及爲什麼。 – Thomas

+0

你的意思是'將輸出與函數相乘'。什麼不起作用? – mb14

+0

如果將fun.mean與打印的每一行(c(a,c,d,w)相乘,則得不到0.40和0.50之間的值 – Maximilian

回答

1

您使用%% 1過濾,但在檢查答案時不使用它。 以下代碼返回9.00 -0.052000 0.02620000 2.7500 給出-0.15778。它符合您的標準(-0.15778 %% 1 = 0.85,它> 0.4 和-0.15 < 0.5)。

我猜你的標準是錯誤的,那麼,你應該做的要麼

sol %% 1 > 0.4 and sol %% 1 < 0.5 

sol > 0.4 and sol < 0.5. 

在第一種情況下,也許你應該在fun.mean計算添加%% 1 。

+0

請將您的建議插入我的循環中:if(sol %% 1> 0.40&sol %% 1 <0.50)print(fun.mean(a,c,d,w))...並自己查看輸出。一些奇怪的事情正在發生:)值在0.40-0.50之間,但後來增加1和2. – Maximilian

+0

是因爲%% 1。 2.45是有效的解決方案 – mb14

+0

+1。感謝您的關注。 – Maximilian